summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsillylaird <sillylaird@fastmail.ca>2026-02-03 21:27:57 -0500
committersillylaird <sillylaird@fastmail.ca>2026-02-03 21:27:57 -0500
commit720d752748b793a2f5cf3cc14cb75ad86e8919c0 (patch)
tree29120103307cb17e7d6c283cc198ec2484f934cd
First commit
-rw-r--r--.htaccess7
-rw-r--r--2cows.gifbin0 -> 675 bytes
-rw-r--r--404.html57
-rw-r--r--405px-Emacs-logo.svg.pngbin0 -> 46663 bytes
-rw-r--r--50x.html52
-rw-r--r--66.pngbin0 -> 87087 bytes
-rw-r--r--711chan_button.pngbin0 -> 9042 bytes
-rw-r--r--Aeplaine.gifbin0 -> 2396 bytes
-rw-r--r--Anubianhost.pngbin0 -> 101285 bytes
-rw-r--r--Belleville_Senators_logo.svg.pngbin0 -> 64090 bytes
-rw-r--r--CNAME1
-rw-r--r--L3.pngbin0 -> 1092399 bytes
-rw-r--r--Laird.mp3bin0 -> 28839 bytes
-rw-r--r--Laird_Ja.mp3bin0 -> 20419 bytes
-rw-r--r--Laird_Lonergan_profile.html52
-rw-r--r--Laird_Lonergan_profile_jp.html52
-rw-r--r--Laird_Lonergan_profile_zh.html52
-rw-r--r--MMORPG_Multiboxing_Guide.html51
-rw-r--r--MMORPG_Multiboxing_Guide_jp.html51
-rw-r--r--MMORPG_Multiboxing_Guide_zh.html51
-rw-r--r--OttawaBlackBears.pngbin0 -> 121486 bytes
-rw-r--r--Ottawa_67's_logo.svg.pngbin0 -> 64791 bytes
-rw-r--r--Ottawa_Redblacks_logo.svg.pngbin0 -> 118027 bytes
-rw-r--r--Ottawa_Titans_logo.svg.pngbin0 -> 308271 bytes
-rw-r--r--README.md30
-rw-r--r--The_Site_Banner.webpbin0 -> 258 bytes
-rw-r--r--Vidlii6.pngbin0 -> 10105 bytes
-rw-r--r--accounts/index.html149
-rw-r--r--accounts/index_jp.html149
-rw-r--r--accounts/index_zh.html149
-rw-r--r--accounts/styles.css66
-rw-r--r--ae.gifbin0 -> 2396 bytes
-rw-r--r--airvpn.pngbin0 -> 120361 bytes
-rw-r--r--anime.txt1
-rw-r--r--articles/2023/04-10.html128
-rw-r--r--articles/2023/04-10_jp.html128
-rw-r--r--articles/2023/04-10_zh.html128
-rw-r--r--articles/2023/20237
-rw-r--r--articles/2024/05-15.html123
-rw-r--r--articles/2024/05-15_jp.html123
-rw-r--r--articles/2024/05-15_zh.html123
-rw-r--r--articles/hello.html124
-rw-r--r--articles/hello_jp.html124
-rw-r--r--articles/hello_zh.html124
-rw-r--r--articles/runescape.html129
-rw-r--r--articles/runescape_jp.html129
-rw-r--r--articles/runescape_zh.html129
-rw-r--r--articles/sample.html123
-rw-r--r--articles/sample_jp.html123
-rw-r--r--articles/sample_zh.html123
-rw-r--r--assets/css/inline-attrs.css31
-rw-r--r--assets/css/pages/404.css12
-rw-r--r--assets/css/pages/50x.css9
-rw-r--r--assets/css/pages/articles-2023-04-10.css1
-rw-r--r--assets/css/pages/articles-2023-04-10_jp.css1
-rw-r--r--assets/css/pages/articles-2023-04-10_zh.css1
-rw-r--r--assets/css/pages/articles-runescape.css1
-rw-r--r--assets/css/pages/articles-runescape_jp.css1
-rw-r--r--assets/css/pages/articles-runescape_zh.css1
-rw-r--r--assets/css/pages/bookmarks.css61
-rw-r--r--assets/css/pages/changelog.css19
-rw-r--r--assets/css/pages/computers.css29
-rw-r--r--assets/css/pages/guestbook-form.css51
-rw-r--r--assets/css/pages/guestbook_jp.css29
-rw-r--r--assets/css/pages/guestbook_zh.css29
-rw-r--r--assets/css/pages/hitcounter.css7
-rw-r--r--assets/css/pages/hitcounter_jp.css7
-rw-r--r--assets/css/pages/hitcounter_zh.css7
-rw-r--r--assets/css/pages/journal-index.css3
-rw-r--r--assets/css/pages/journal-index_jp.css3
-rw-r--r--assets/css/pages/journal-index_zh.css3
-rw-r--r--assets/css/pages/links.css3
-rw-r--r--assets/css/pages/links_jp.css3
-rw-r--r--assets/css/pages/links_zh.css3
-rw-r--r--assets/css/pages/mstartpage-index.css361
-rw-r--r--assets/css/pages/startpage-test.css86
-rw-r--r--assets/css/pages/test.css52
-rw-r--r--assets/css/pages/test_jp.css52
-rw-r--r--assets/css/pages/test_zh.css52
-rw-r--r--assets/css/pages/vinyls.css14
-rw-r--r--assets/css/site.css891
-rw-r--r--assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2bin0 -> 18748 bytes
-rw-r--r--assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2bin0 -> 48256 bytes
-rw-r--r--assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2bin0 -> 18996 bytes
-rw-r--r--assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2bin0 -> 85068 bytes
-rw-r--r--assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2bin0 -> 25960 bytes
-rw-r--r--assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2bin0 -> 11232 bytes
-rw-r--r--assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2bin0 -> 10252 bytes
-rw-r--r--assets/js/includes.js32
-rw-r--r--assets/js/pages/404.js5
-rw-r--r--assets/js/pages/50x.js5
-rw-r--r--assets/js/pages/guestbook_jp.js91
-rw-r--r--assets/js/pages/guestbook_zh.js91
-rw-r--r--assets/js/pages/hitcounter.js16
-rw-r--r--assets/js/pages/hitcounter_jp.js16
-rw-r--r--assets/js/pages/hitcounter_zh.js16
-rw-r--r--assets/js/pages/mstartpage-index.js118
-rw-r--r--assets/js/pages/test.js10
-rw-r--r--assets/js/pages/test_jp.js10
-rw-r--r--assets/js/pages/test_zh.js10
-rw-r--r--assets/js/site.js415
-rw-r--r--avatar.pngbin0 -> 1241601 bytes
-rw-r--r--babi.pngbin0 -> 147838 bytes
-rw-r--r--bbs.cgi4
-rw-r--r--bbs.html11
-rw-r--r--blog/index.html124
-rw-r--r--blog/index_jp.html124
-rw-r--r--blog/index_zh.html124
-rw-r--r--bookmarks/anime-watched.txt2
-rw-r--r--bookmarks/bookmarks.txt195
-rw-r--r--bookmarks/bookmarks.txt~186
-rw-r--r--bookmarks/index.html162
-rw-r--r--bookmarks/index_jp.html162
-rw-r--r--bookmarks/index_zh.html162
-rw-r--r--bookmarks/radio.txt11
-rw-r--r--bookmarks/styles.css162
-rw-r--r--bookmarks/threads/opdownloadandconquer.txt63
-rw-r--r--bookmarks/threads/opdownloadandconquer.txt~63
-rw-r--r--bookmarks/torbookmarks.txt46
-rw-r--r--bookmarks/youtube-channels.txt44
-rw-r--r--bookmarks/youtube-channels.txt~44
-rw-r--r--bookmarks/youtube-videos.txt24
-rw-r--r--bookmarks/youtube-videos.txt~15
-rw-r--r--buyvm.pngbin0 -> 5501 bytes
-rw-r--r--canada.pngbin0 -> 15906 bytes
-rw-r--r--ccp.svg1
-rw-r--r--changelog/2023-changelog.txt12
-rw-r--r--changelog/2024-changelog.txt11
-rw-r--r--changelog/2025-changelog.txt0
-rw-r--r--changelog/admin.html16
-rw-r--r--changelog/api/latest.html37
-rw-r--r--changelog/auth.html4
-rw-r--r--changelog/db.html4
-rw-r--r--changelog/index.html73
-rw-r--r--changelog/index_jp.html151
-rw-r--r--changelog/index_zh.html151
-rw-r--r--changelog/latest.html11
-rw-r--r--changelog/login.html16
-rw-r--r--changelog/logout.html11
-rw-r--r--changelog/rss.xml30
-rw-r--r--china.pngbin0 -> 68692 bytes
-rw-r--r--cirno.jpgbin0 -> 331062 bytes
-rw-r--r--cockbox.gifbin0 -> 1697 bytes
-rw-r--r--code.pngbin0 -> 232856 bytes
-rw-r--r--computers/index.html166
-rw-r--r--computers/index_jp.html166
-rw-r--r--computers/index_zh.html166
-rw-r--r--cornhub.pngbin0 -> 38665 bytes
-rw-r--r--cryptostorm.pngbin0 -> 1852 bytes
-rw-r--r--cs-logo.pngbin0 -> 5591 bytes
-rw-r--r--docs/FUTURE_PROOF.md54
-rw-r--r--docs/MANAGE.md42
-rw-r--r--elixior.pngbin0 -> 58144 bytes
-rw-r--r--elixior.webpbin0 -> 6118 bytes
-rw-r--r--elixr.webpbin0 -> 6118 bytes
-rw-r--r--emacs.pngbin0 -> 13462 bytes
-rw-r--r--error/.idea/.gitignore8
-rw-r--r--error/.idea/error.iml9
-rw-r--r--error/.idea/misc.xml6
-rw-r--r--error/.idea/modules.xml8
-rw-r--r--error/index.html138
-rw-r--r--error/index_jp.html138
-rw-r--r--error/index_zh.html138
-rw-r--r--eso-tilin-tilin.gifbin0 -> 308729 bytes
-rw-r--r--expressvpn.pngbin0 -> 7332 bytes
-rw-r--r--fastmail.pngbin0 -> 4493 bytes
-rw-r--r--favicon.ico1
-rw-r--r--gaming/index.html130
-rw-r--r--gaming/index_jp.html65
-rw-r--r--gaming/index_zh.html54
-rw-r--r--gaming/multibox/global_styles.css53
-rw-r--r--gaming/multibox/index.html103
-rw-r--r--gaming/multibox/index_jp.html102
-rw-r--r--gaming/multibox/index_zh.html102
-rw-r--r--gaming/multibox/styles.css54
-rw-r--r--gaming/multibox/what-is-multiboxing/index.html79
-rw-r--r--gaming/multibox/what-is-multiboxing/index_jp.html79
-rw-r--r--gaming/multibox/what-is-multiboxing/index_zh.html79
-rw-r--r--gaming/multibox/what-is-multiboxing/styles.css54
-rw-r--r--gaming/runescape/index.html66
-rw-r--r--gaming/runescape/index_jp.html68
-rw-r--r--gaming/runescape/index_zh.html68
-rw-r--r--gaming/runescape/runescape.pngbin0 -> 589847 bytes
-rw-r--r--gaming/specialforce/SpecialForce_Launcher.exebin0 -> 2378840 bytes
-rw-r--r--gaming/specialforce/index.html63
-rw-r--r--gaming/specialforce/index_jp.html63
-rw-r--r--gaming/specialforce/index_zh.html63
-rw-r--r--gaming/specialforce/style.css113
-rw-r--r--gaming/stepmania/index.html102
-rw-r--r--gaming/stepmania/index_jp.html102
-rw-r--r--gaming/stepmania/index_zh.html104
-rw-r--r--gaming/stepmania/script.js46
-rw-r--r--gaming/stepmania/style.css139
-rw-r--r--git tutorial.txt108
-rw-r--r--git-guide.txt111
-rw-r--r--guestbook-comments.html16
-rw-r--r--guestbook-form.html46
-rw-r--r--guestbook.html78
-rw-r--r--guestbook.html~65
-rw-r--r--guestbook.js127
-rw-r--r--guestbook_jp.html80
-rw-r--r--guestbook_zh.html80
-rw-r--r--hatCollectionWebsite.html56
-rw-r--r--hatCollectionWebsite_jp.html56
-rw-r--r--hatCollectionWebsite_zh.html56
-rw-r--r--hitcounter.html57
-rw-r--r--hitcounter_jp.html57
-rw-r--r--hitcounter_zh.html57
-rw-r--r--icon03.jpgbin0 -> 3495 bytes
-rw-r--r--images/711chan.gifbin0 -> 3208 bytes
-rw-r--r--images/anybrowser3.gifbin0 -> 2060 bytes
-rw-r--r--images/buyvm.pngbin0 -> 11947 bytes
-rw-r--r--images/desuroom-revival.pngbin0 -> 6922 bytes
-rw-r--r--images/free-speech-forever.gifbin0 -> 10832 bytes
-rw-r--r--images/get-flash-player.gifbin0 -> 1066 bytes
-rw-r--r--images/heyuri.gifbin0 -> 2030 bytes
-rw-r--r--images/imageboard/1674509441745.jpgbin0 -> 1320125 bytes
-rw-r--r--images/imageboard/squarebutts.gifbin0 -> 1021013 bytes
-rw-r--r--images/made-with-windows.gifbin0 -> 1803 bytes
-rw-r--r--images/msie.gifbin0 -> 12920 bytes
-rw-r--r--images/openbsd.pngbin0 -> 58652 bytes
-rw-r--r--images/plan9/9logo.jpgbin0 -> 2662 bytes
-rw-r--r--images/powered-by-kolyma.pngbin0 -> 2512 bytes
-rw-r--r--images/valid-html401.pngbin0 -> 1542 bytes
-rw-r--r--images/wtfpl.pngbin0 -> 2975 bytes
-rw-r--r--index.html208
-rw-r--r--index_jp.html174
-rw-r--r--index_zh.html173
-rw-r--r--javascript.gifbin0 -> 1694 bytes
-rw-r--r--jetbrain.pngbin0 -> 53791 bytes
-rw-r--r--journal/index.html89
-rw-r--r--journal/index.html.lock~1
-rw-r--r--journal/index_jp.html89
-rw-r--r--journal/index_zh.html89
-rw-r--r--journal/style.css1
-rw-r--r--kansen.gifbin0 -> 16710 bytes
-rw-r--r--keybase.txt56
-rw-r--r--l3-logo.pngbin0 -> 7488 bytes
-rw-r--r--l3-transparent.pngbin0 -> 712697 bytes
-rw-r--r--lain.gifbin0 -> 87657 bytes
-rw-r--r--lain.jpgbin0 -> 1344 bytes
-rw-r--r--lain.pngbin0 -> 117611 bytes
-rw-r--r--lainw.jpgbin0 -> 124217 bytes
-rw-r--r--links.html71
-rw-r--r--links_jp.html71
-rw-r--r--links_zh.html71
-rw-r--r--load-vertical-links.js11
-rw-r--r--logo-white-orange-bg.svg4
-rw-r--r--logo.svg11
-rw-r--r--logo2.svg46
-rw-r--r--lolwut-button.gifbin0 -> 3515 bytes
-rw-r--r--lolwut.pngbin0 -> 9101 bytes
-rw-r--r--made-with-windows.pngbin0 -> 74987 bytes
-rw-r--r--main.js30
-rw-r--r--map/index.html83
-rw-r--r--map/index_jp.html83
-rw-r--r--map/index_zh.html83
-rw-r--r--mothracompat.gifbin0 -> 1783 bytes
-rw-r--r--mstartpage/Vidlii6 copy.pngbin0 -> 10105 bytes
-rw-r--r--mstartpage/Vidlii6.pngbin0 -> 10105 bytes
-rw-r--r--mstartpage/amazon.pngbin0 -> 49674 bytes
-rw-r--r--mstartpage/belleville copy.pngbin0 -> 89418 bytes
-rw-r--r--mstartpage/belleville.pngbin0 -> 89418 bytes
-rw-r--r--mstartpage/ctvnews.pngbin0 -> 11510 bytes
-rw-r--r--mstartpage/cytube.pngbin0 -> 9027 bytes
-rw-r--r--mstartpage/ebay.pngbin0 -> 82072 bytes
-rw-r--r--mstartpage/general.pngbin0 -> 55535 bytes
-rw-r--r--mstartpage/gitlogo copy.pngbin0 -> 93394 bytes
-rw-r--r--mstartpage/gitlogo.pngbin0 -> 10898 bytes
-rw-r--r--mstartpage/heyuri copy.pngbin0 -> 29166 bytes
-rw-r--r--mstartpage/heyuri.pngbin0 -> 29166 bytes
-rw-r--r--mstartpage/index.html192
-rw-r--r--mstartpage/lain.pngbin0 -> 117611 bytes
-rw-r--r--mstartpage/news.pngbin0 -> 11837 bytes
-rw-r--r--mstartpage/newspaper.pngbin0 -> 660 bytes
-rw-r--r--mstartpage/noteback.gifbin0 -> 69 bytes
-rw-r--r--mstartpage/old-youtube-icon-75.pngbin0 -> 66698 bytes
-rw-r--r--mstartpage/pornhub.jpegbin0 -> 58944 bytes
-rw-r--r--mstartpage/roundcube.pngbin0 -> 16149 bytes
-rw-r--r--mstartpage/shoppingcart.pngbin0 -> 58033 bytes
-rw-r--r--mstartpage/sm_logo copy.pngbin0 -> 7396 bytes
-rw-r--r--mstartpage/sm_logo.pngbin0 -> 7396 bytes
-rw-r--r--mstartpage/somethingawful.pngbin0 -> 34929 bytes
-rw-r--r--mstartpage/sonemic.pngbin0 -> 29816 bytes
-rw-r--r--mstartpage/sonymp3.pngbin0 -> 30174 bytes
-rw-r--r--mstartpage/tf2.pngbin0 -> 48323 bytes
-rw-r--r--mstartpage/tilde.pngbin0 -> 1909 bytes
-rw-r--r--mstartpage/wallpaper.jpgbin0 -> 215198 bytes
-rw-r--r--mullvad.svg1
-rw-r--r--multibox.pngbin0 -> 1385329 bytes
-rw-r--r--musictaste/index.html75
-rw-r--r--musictaste/index_jp.html75
-rw-r--r--musictaste/index_zh.html75
-rw-r--r--musictaste/style.css11
-rw-r--r--mwallpaper.jpegbin0 -> 416106 bytes
-rw-r--r--mwallpaper.jpgbin0 -> 151821 bytes
-rw-r--r--niceland.pngbin0 -> 20937 bytes
-rw-r--r--nordvpn.pngbin0 -> 90334 bytes
-rw-r--r--northkorea.pngbin0 -> 26214 bytes
-rw-r--r--npp.svg339
-rw-r--r--openbgpd.gifbin0 -> 75238 bytes
-rw-r--r--openbsd.pngbin0 -> 152276 bytes
-rw-r--r--ottawa-sens.jpgbin0 -> 156620 bytes
-rw-r--r--partials/footer.html11
-rw-r--r--partials/header.html57
-rw-r--r--pgpkey.txt103
-rw-r--r--plan9.pngbin0 -> 15578 bytes
-rw-r--r--plan9bunnysmwhite.jpgbin0 -> 6176 bytes
-rw-r--r--playbilibili.pngbin0 -> 1309430 bytes
-rw-r--r--power36.gifbin0 -> 1715 bytes
-rw-r--r--ps2.jpgbin0 -> 489680 bytes
-rw-r--r--pub/chrome_JF8NkbrJhc.pngbin0 -> 53684 bytes
-rw-r--r--pub/install.sh549
-rw-r--r--pub/openbsd how to setup zsh shell.txt11
-rw-r--r--pub/tor.txt19
-rw-r--r--public.asc13
-rw-r--r--public.txt13
-rw-r--r--rib_bar_wh.pngbin0 -> 39877 bytes
-rw-r--r--robots.txt4
-rw-r--r--roundcube.pngbin0 -> 16149 bytes
-rw-r--r--roundcube.svg11
-rw-r--r--runescape.pngbin0 -> 434718 bytes
-rw-r--r--runescape2.pngbin0 -> 14894 bytes
-rw-r--r--russia.pngbin0 -> 2469 bytes
-rw-r--r--russia.svg1
-rw-r--r--sapphireblue.pngbin0 -> 9996 bytes
-rw-r--r--sealand.pngbin0 -> 2553 bytes
-rw-r--r--sflogo2.jpgbin0 -> 11629 bytes
-rw-r--r--sillylaird-88x31.pngbin0 -> 7303 bytes
-rw-r--r--sillylaird.pngbin0 -> 7303 bytes
-rw-r--r--sitemap.xml419
-rw-r--r--soldierfront.pngbin0 -> 295378 bytes
-rw-r--r--startpage/.htaccess8
-rw-r--r--startpage/amazon.pngbin0 -> 40952 bytes
-rw-r--r--startpage/basedlii.pngbin0 -> 42930 bytes
-rw-r--r--startpage/belleville.pngbin0 -> 99209 bytes
-rw-r--r--startpage/buyvm.pngbin0 -> 4693 bytes
-rw-r--r--startpage/ctvnews.pngbin0 -> 9930 bytes
-rw-r--r--startpage/cytube.pngbin0 -> 9027 bytes
-rw-r--r--startpage/ebay.pngbin0 -> 68914 bytes
-rw-r--r--startpage/gitlogo.pngbin0 -> 91512 bytes
-rw-r--r--startpage/heyuri.pngbin0 -> 28769 bytes
-rw-r--r--startpage/index.html463
-rw-r--r--startpage/lain.pngbin0 -> 118394 bytes
-rw-r--r--startpage/liivid.pngbin0 -> 19502 bytes
-rw-r--r--startpage/news.pngbin0 -> 13477 bytes
-rw-r--r--startpage/newspaper.pngbin0 -> 793 bytes
-rw-r--r--startpage/noteback.gifbin0 -> 89 bytes
-rw-r--r--startpage/old-youtube-icon-75.pngbin0 -> 78193 bytes
-rw-r--r--startpage/roundcube.pngbin0 -> 21377 bytes
-rw-r--r--startpage/shoppingcart.pngbin0 -> 49558 bytes
-rw-r--r--startpage/sm_logo.pngbin0 -> 6879 bytes
-rw-r--r--startpage/somethingawful.pngbin0 -> 36511 bytes
-rw-r--r--startpage/sonemic.pngbin0 -> 26546 bytes
-rw-r--r--startpage/sonymp3.pngbin0 -> 24258 bytes
-rw-r--r--startpage/startpage.css272
-rw-r--r--startpage/startpage.js87
-rw-r--r--startpage/test.html54
-rw-r--r--startpage/test.old129
-rw-r--r--startpage/tf2.pngbin0 -> 35302 bytes
-rw-r--r--startpage/tilde.pngbin0 -> 1909 bytes
-rw-r--r--startpage/videogame.pngbin0 -> 1209330 bytes
-rw-r--r--startpage/wallpaper.jpgbin0 -> 215198 bytes
-rw-r--r--stepmania.pngbin0 -> 68964 bytes
-rw-r--r--style.css282
-rw-r--r--sublime_text.pngbin0 -> 38950 bytes
-rw-r--r--submit.html12
-rw-r--r--test.html150
-rw-r--r--test.txt24
-rw-r--r--test_jp.html150
-rw-r--r--test_zh.html150
-rw-r--r--toesu.jpgbin0 -> 384256 bytes
-rw-r--r--tools/README.md10
-rw-r--r--tools/__pycache__/translate_pages.cpython-312.pycbin0 -> 9270 bytes
-rw-r--r--tools/backup.sh13
-rw-r--r--tools/generate_sitemap.py70
-rw-r--r--tools/html_audit.py94
-rw-r--r--tools/link_check.py94
-rw-r--r--tools/translate_pages.py258
-rw-r--r--tools/uptime_check.sh6
-rw-r--r--ubuntu.jpgbin0 -> 57550 bytes
-rw-r--r--ubuntu.pngbin0 -> 85964 bytes
-rw-r--r--vblog/index.html58
-rw-r--r--vblog/index_jp.html58
-rw-r--r--vblog/index_zh.html58
-rw-r--r--vblog/lain.pngbin0 -> 117611 bytes
-rw-r--r--vidlii.pngbin0 -> 10105 bytes
-rw-r--r--vidlii/index.html57
-rw-r--r--vidlii/index_jp.html57
-rw-r--r--vidlii/index_zh.html57
-rw-r--r--vscode.pngbin0 -> 130561 bytes
-rw-r--r--windowserver.jpgbin0 -> 55312 bytes
-rw-r--r--windowserver.pngbin0 -> 88709 bytes
-rw-r--r--wtfpl.pngbin0 -> 28722 bytes
-rw-r--r--wtfpl.txt13
-rw-r--r--zh-laird.mp3bin0 -> 16461 bytes
396 files changed, 17920 insertions, 0 deletions
diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..aee3b0e
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,7 @@
+<IfModule mod_headers.c>
+ Header set X-Content-Type-Options "nosniff"
+ Header set Referrer-Policy "strict-origin-when-cross-origin"
+ Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
+ Header set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()"
+ Header set Content-Security-Policy "default-src 'self'; base-uri 'self'; connect-src 'self' https://blog.sillylaird.ca; frame-src 'self' https://guestbook.sillylaird.ca https://changelog.sillylaird.ca https://www.youtube.com https://www.msn.com; img-src 'self' https: data:; media-src 'self' https://uploads.sillylaird.ca; script-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; form-action 'self' https://www.google.com https://www.google.ca; object-src 'none'"
+</IfModule>
diff --git a/2cows.gif b/2cows.gif
new file mode 100644
index 0000000..0fcc49b
--- /dev/null
+++ b/2cows.gif
Binary files differ
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..159a095
--- /dev/null
+++ b/404.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="robots" content="noindex,nofollow" />
+ <title>404 — Not Found</title>
+ <meta property="og:title" content="404 — Not Found" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/404.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="404 — Not Found" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/404.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/404.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/404.html" />
+ <link rel="icon" href="/favicon.ico" />
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/404.css" />
+
+</head>
+
+<body>
+ <main class="wrap">
+ <div class="card">
+ <div class="top">
+ <a href="/" aria-label="Home">
+ <img src="/lain.png" alt="SillyLaird" />
+ </a>
+ <div>
+ <h1 class="s1da9facb4d">404 — Not Found</h1>
+ <div class="muted">That page does not exist (or the URL is wrong).</div>
+ </div>
+ </div>
+
+ <p class="muted">Try one of these:</p>
+ <div class="links">
+ <a href="/">Home</a>
+ <a href="/map/">Site Map</a>
+ <a href="/startpage/">StartPage</a>
+ <a href="/gaming/">Gaming</a>
+ <a href="/journal/">Journal</a>
+ </div>
+
+ <hr class="s6e250fe32e" />
+ <div class="muted">&copy; <span id="y">2026</span> SillyLaird</div>
+ </div>
+ </main>
+
+
+ <script defer src="/assets/js/pages/404.js"></script>
+</body>
+</html>
diff --git a/405px-Emacs-logo.svg.png b/405px-Emacs-logo.svg.png
new file mode 100644
index 0000000..7c69218
--- /dev/null
+++ b/405px-Emacs-logo.svg.png
Binary files differ
diff --git a/50x.html b/50x.html
new file mode 100644
index 0000000..c9c5f41
--- /dev/null
+++ b/50x.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="robots" content="noindex,nofollow" />
+ <title>Server Error</title>
+ <meta property="og:title" content="Server Error" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/50x.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Server Error" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/50x.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/50x.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/50x.html" />
+ <link rel="icon" href="/favicon.ico" />
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/50x.css" />
+
+</head>
+
+<body>
+ <main class="wrap">
+ <div class="card">
+ <div class="top">
+ <a href="/" aria-label="Home">
+ <img src="/lain.png" alt="SillyLaird" />
+ </a>
+ <div>
+ <h1 class="s1da9facb4d">Server Error</h1>
+ <div class="muted">Something went wrong on the server. Try again in a bit.</div>
+ </div>
+ </div>
+
+ <p>
+ <a href="/">Go back home</a>
+ </p>
+
+ <hr class="s6e250fe32e" />
+ <div class="muted">&copy; <span id="y">2026</span> SillyLaird</div>
+ </div>
+ </main>
+
+
+ <script defer src="/assets/js/pages/50x.js"></script>
+</body>
+</html>
diff --git a/66.png b/66.png
new file mode 100644
index 0000000..5bcd1c5
--- /dev/null
+++ b/66.png
Binary files differ
diff --git a/711chan_button.png b/711chan_button.png
new file mode 100644
index 0000000..913283f
--- /dev/null
+++ b/711chan_button.png
Binary files differ
diff --git a/Aeplaine.gif b/Aeplaine.gif
new file mode 100644
index 0000000..b7a958a
--- /dev/null
+++ b/Aeplaine.gif
Binary files differ
diff --git a/Anubianhost.png b/Anubianhost.png
new file mode 100644
index 0000000..ecb3f3a
--- /dev/null
+++ b/Anubianhost.png
Binary files differ
diff --git a/Belleville_Senators_logo.svg.png b/Belleville_Senators_logo.svg.png
new file mode 100644
index 0000000..edfd652
--- /dev/null
+++ b/Belleville_Senators_logo.svg.png
Binary files differ
diff --git a/CNAME b/CNAME
new file mode 100644
index 0000000..dcab1ad
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+www.sillylaird.ca
diff --git a/L3.png b/L3.png
new file mode 100644
index 0000000..24d30ae
--- /dev/null
+++ b/L3.png
Binary files differ
diff --git a/Laird.mp3 b/Laird.mp3
new file mode 100644
index 0000000..d06267d
--- /dev/null
+++ b/Laird.mp3
Binary files differ
diff --git a/Laird_Ja.mp3 b/Laird_Ja.mp3
new file mode 100644
index 0000000..fa79da0
--- /dev/null
+++ b/Laird_Ja.mp3
Binary files differ
diff --git a/Laird_Lonergan_profile.html b/Laird_Lonergan_profile.html
new file mode 100644
index 0000000..70f0b45
--- /dev/null
+++ b/Laird_Lonergan_profile.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Laird Lonergan — Profile</title>
+ <meta name="description" content="Contact card/profile for Laird Lonergan." />
+ <meta property="og:title" content="Laird Lonergan — Profile" />
+ <meta property="og:description" content="Contact card/profile for Laird Lonergan." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Laird Lonergan — Profile" />
+ <meta name="twitter:description" content="Contact card/profile for Laird Lonergan." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/Laird_Lonergan_profile_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/Laird_Lonergan_profile_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="profile-title">
+ <h1 id="profile-title">Laird Lonergan</h1>
+ <p class="muted">Simple contact card.</p>
+
+ <ul class="contact-list">
+ <li>Email: <a href="mailto:sillylaird@sdf.org">sillylaird@sdf.org</a></li>
+ <li>Email: <a href="mailto:sillylaird@joshwho.net">sillylaird@joshwho.net</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/Laird_Lonergan_profile_jp.html b/Laird_Lonergan_profile_jp.html
new file mode 100644
index 0000000..8d7b8c5
--- /dev/null
+++ b/Laird_Lonergan_profile_jp.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Laird Lonergan — Profile</title>
+ <meta name="description" content="Contact card/profile for Laird Lonergan." />
+ <meta property="og:title" content="Laird Lonergan — Profile" />
+ <meta property="og:description" content="Contact card/profile for Laird Lonergan." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/Laird_Lonergan_profile_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Laird Lonergan — Profile" />
+ <meta name="twitter:description" content="Contact card/profile for Laird Lonergan." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/Laird_Lonergan_profile_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/Laird_Lonergan_profile_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/Laird_Lonergan_profile_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="profile-title">
+ <h1 id="profile-title">Laird Lonergan</h1>
+ <p class="muted">Simple contact card.</p>
+
+ <ul class="contact-list">
+ <li>Email: <a href="mailto:sillylaird@sdf.org">sillylaird@sdf.org</a></li>
+ <li>Email: <a href="mailto:sillylaird@joshwho.net">sillylaird@joshwho.net</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/Laird_Lonergan_profile_zh.html b/Laird_Lonergan_profile_zh.html
new file mode 100644
index 0000000..daab586
--- /dev/null
+++ b/Laird_Lonergan_profile_zh.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Laird Lonergan — Profile</title>
+ <meta name="description" content="Contact card/profile for Laird Lonergan." />
+ <meta property="og:title" content="Laird Lonergan — Profile" />
+ <meta property="og:description" content="Contact card/profile for Laird Lonergan." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/Laird_Lonergan_profile_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Laird Lonergan — Profile" />
+ <meta name="twitter:description" content="Contact card/profile for Laird Lonergan." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/Laird_Lonergan_profile_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/Laird_Lonergan_profile.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/Laird_Lonergan_profile_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/Laird_Lonergan_profile_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="profile-title">
+ <h1 id="profile-title">Laird Lonergan</h1>
+ <p class="muted">Simple contact card.</p>
+
+ <ul class="contact-list">
+ <li>Email: <a href="mailto:sillylaird@sdf.org">sillylaird@sdf.org</a></li>
+ <li>Email: <a href="mailto:sillylaird@joshwho.net">sillylaird@joshwho.net</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/MMORPG_Multiboxing_Guide.html b/MMORPG_Multiboxing_Guide.html
new file mode 100644
index 0000000..2cc1ffb
--- /dev/null
+++ b/MMORPG_Multiboxing_Guide.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>MMORPG Multiboxing Guide — SillyLaird</title>
+ <meta name="description" content="Multiboxing guide landing page." />
+ <meta property="og:title" content="MMORPG Multiboxing Guide — SillyLaird" />
+ <meta property="og:description" content="Multiboxing guide landing page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="MMORPG Multiboxing Guide — SillyLaird" />
+ <meta name="twitter:description" content="Multiboxing guide landing page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="mb-guide-title">
+ <h1 id="mb-guide-title">MMORPG Multiboxing Guide</h1>
+ <p class="muted">This guide moved into the unified gaming section.</p>
+ <ul class="contact-list">
+ <li><a href="/gaming/multibox/">Multiboxing (main page)</a></li>
+ <li><a href="/gaming/multibox/what-is-multiboxing/">What is Multiboxing? (detailed)</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/MMORPG_Multiboxing_Guide_jp.html b/MMORPG_Multiboxing_Guide_jp.html
new file mode 100644
index 0000000..615c9c7
--- /dev/null
+++ b/MMORPG_Multiboxing_Guide_jp.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>MMORPG Multiboxing Guide — SillyLaird</title>
+ <meta name="description" content="Multiboxing guide landing page." />
+ <meta property="og:title" content="MMORPG Multiboxing Guide — SillyLaird" />
+ <meta property="og:description" content="Multiboxing guide landing page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="MMORPG Multiboxing Guide — SillyLaird" />
+ <meta name="twitter:description" content="Multiboxing guide landing page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="mb-guide-title">
+ <h1 id="mb-guide-title">MMORPG Multiboxing Guide</h1>
+ <p class="muted">This guide moved into the unified gaming section.</p>
+ <ul class="contact-list">
+ <li><a href="/gaming/multibox/">Multiboxing (main page)</a></li>
+ <li><a href="/gaming/multibox/what-is-multiboxing/">What is Multiboxing? (detailed)</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/MMORPG_Multiboxing_Guide_zh.html b/MMORPG_Multiboxing_Guide_zh.html
new file mode 100644
index 0000000..0ea81c9
--- /dev/null
+++ b/MMORPG_Multiboxing_Guide_zh.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>MMORPG Multiboxing Guide — SillyLaird</title>
+ <meta name="description" content="Multiboxing guide landing page." />
+ <meta property="og:title" content="MMORPG Multiboxing Guide — SillyLaird" />
+ <meta property="og:description" content="Multiboxing guide landing page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="MMORPG Multiboxing Guide — SillyLaird" />
+ <meta name="twitter:description" content="Multiboxing guide landing page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="mb-guide-title">
+ <h1 id="mb-guide-title">MMORPG Multiboxing Guide</h1>
+ <p class="muted">This guide moved into the unified gaming section.</p>
+ <ul class="contact-list">
+ <li><a href="/gaming/multibox/">Multiboxing (main page)</a></li>
+ <li><a href="/gaming/multibox/what-is-multiboxing/">What is Multiboxing? (detailed)</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/OttawaBlackBears.png b/OttawaBlackBears.png
new file mode 100644
index 0000000..701e38e
--- /dev/null
+++ b/OttawaBlackBears.png
Binary files differ
diff --git a/Ottawa_67's_logo.svg.png b/Ottawa_67's_logo.svg.png
new file mode 100644
index 0000000..cacc91c
--- /dev/null
+++ b/Ottawa_67's_logo.svg.png
Binary files differ
diff --git a/Ottawa_Redblacks_logo.svg.png b/Ottawa_Redblacks_logo.svg.png
new file mode 100644
index 0000000..33e0ef4
--- /dev/null
+++ b/Ottawa_Redblacks_logo.svg.png
Binary files differ
diff --git a/Ottawa_Titans_logo.svg.png b/Ottawa_Titans_logo.svg.png
new file mode 100644
index 0000000..d2df162
--- /dev/null
+++ b/Ottawa_Titans_logo.svg.png
Binary files differ
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6e9e1b2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,30 @@
+# www.sillylaird.ca
+
+Static personal site: HTML + CSS + a little JS. No build step.
+
+## Common maintenance
+
+- `python3 tools/link_check.py` — internal link sanity check
+- `python3 tools/html_audit.py` — quick a11y/markup audit
+- `python3 tools/generate_sitemap.py` — rebuild `sitemap.xml`
+- `python3 tools/translate_pages.py` — generate missing `*_zh.html`/`*_jp.html`
+
+## Ops helpers
+
+- `./tools/backup.sh` — tarball backup (defaults to `/tmp/www.sillylaird.ca-backups`, override with `BACKUP_DIR`)
+- `./tools/uptime_check.sh` — curl-based uptime check (override target with `URL`)
+
+Example cron entries:
+
+```cron
+# nightly backup at 03:15 UTC
+15 3 * * * BACKUP_DIR=/var/backups/www.sillylaird.ca /path/to/tools/backup.sh
+
+# hourly uptime check
+0 * * * * URL=https://www.sillylaird.ca/ /path/to/tools/uptime_check.sh
+```
+
+## Notes
+
+- `sitemap.xml` is generated by `tools/generate_sitemap.py`.
+- Shared header/footer live in `partials/` and are injected by `assets/js/includes.js`.
diff --git a/The_Site_Banner.webp b/The_Site_Banner.webp
new file mode 100644
index 0000000..1d1ddc4
--- /dev/null
+++ b/The_Site_Banner.webp
Binary files differ
diff --git a/Vidlii6.png b/Vidlii6.png
new file mode 100644
index 0000000..540c3a5
--- /dev/null
+++ b/Vidlii6.png
Binary files differ
diff --git a/accounts/index.html b/accounts/index.html
new file mode 100644
index 0000000..924cc66
--- /dev/null
+++ b/accounts/index.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Accounts — SillyLaird</title>
+ <meta name="description" content="Account links for SillyLaird." />
+ <meta property="og:title" content="Accounts — SillyLaird" />
+ <meta property="og:description" content="Account links for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/accounts/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Accounts — SillyLaird" />
+ <meta name="twitter:description" content="Account links for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/accounts/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/accounts/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/accounts/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/accounts/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/accounts/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/accounts/index.html" aria-current="page">English</a>
+ <a role="menuitem" href="/accounts/index_zh.html">中文</a>
+ <a role="menuitem" href="/accounts/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="accounts-title">
+ <h1 id="accounts-title">Accounts</h1>
+ <p class="muted">A quick list of places I exist online.</p>
+
+ <ul class="contact-list">
+ <li><a href="mailto:m@sillylaird.ca">Main Email</a></li>
+ <li><a href="xmpp:sillylaird@xmpp.jp?message">XMPP/Jabber</a></li>
+ <li><a href="xmpp:sillylaird@chat.moddedbear.xyz?message">XMPP/Jabber 2nd</a></li>
+ <li><a href="xmpp:sillylaird@paranoid.network?message">XMPP/Jabber 3rd</a></li>
+ <li><a href="https://discordapp.com/users/1012487168322703400" target="_blank" rel="me noopener">Discord</a></li>
+ <li><a href="https://xf1re.com/profile/sillylaird" target="_blank" rel="me noopener">Xf1re</a></li>
+ <li><a href="https://www.liivid.lol/user/sillylaird" target="_blank" rel="me noopener">LiiVid</a></li>
+ <li><a href="https://www.kamtape.com/profile.php?user=sillylaird" target="_blank" rel="me noopener">KamTape</a></li>
+ <li><a href="/" target="_blank" rel="me noopener">Main Website</a></li>
+ <li><a href="http://nooju2u7hjy4pxlqfacvgmdsxgehhhetywahyu2522tpzlr5abem7oid.onion/" target="_blank" rel="me noopener">Main Tor Website</a></li>
+ <li><a href="http://dev.sillylaird.ca" target="_blank" rel="me noopener">Main Dev Website</a></li>
+ <li><a href="https://sillylaird.srht.site/" target="_blank" rel="me noopener">sr.ht Website</a></li>
+ <li><a href="https://9p.sdf.org/who/sillylaird/index.html" target="_blank" rel="me noopener">plan9front website</a></li>
+ <li><a href="https://music.apple.com/profile/sillylaird" target="_blank" rel="me noopener">Apple Music</a></li>
+ <li><a href="https://www.last.fm/user/SillyLaird" target="_blank" rel="me noopener">Last.FM</a></li>
+ <li><a href="https://edramatica.com/User:Sillylaird" target="_blank" rel="me noopener">Encyclopedia Dramatica</a></li>
+ <li><a href="https://forums.edramatica.com/members/sillylaird.1315/" target="_blank" rel="me noopener">Encyclopedia Dramatica Forum</a></li>
+ <li><a href="https://www.flashflashrevolution.com/profile/Stpatrick05/" target="_blank" rel="me noopener">FFR</a></li>
+ <li><a href="https://osu.ppy.sh/users/9157299" target="_blank" rel="me noopener">OSU!</a></li>
+ <li><a href="https://osu.titanic.sh/u/1963" target="_blank" rel="me noopener">OSU!titanic</a></li>
+ <li><a href="https://zenius-i-vanisher.com/v5.2/user?userid=25775" target="_blank" rel="me noopener">zenius-i-vanisher</a></li>
+ <li><a href="https://www.roblox.com/users/1444348326/profile" target="_blank" rel="me noopener">Roblox</a></li>
+ <li><a href="https://www.tiktok.com/@sillylaird" target="_blank" rel="me noopener">TikTok</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/accounts/index_jp.html b/accounts/index_jp.html
new file mode 100644
index 0000000..4f2a049
--- /dev/null
+++ b/accounts/index_jp.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>アカウント — SillyLaird</title>
+ <meta name="description" content="Account links for SillyLaird." />
+ <meta property="og:title" content="アカウント — SillyLaird" />
+ <meta property="og:description" content="Account links for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/accounts/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="アカウント — SillyLaird" />
+ <meta name="twitter:description" content="Account links for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/accounts/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/accounts/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/accounts/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/accounts/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/accounts/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/accounts/index.html">English</a>
+ <a role="menuitem" href="/accounts/index_zh.html">中文</a>
+ <a role="menuitem" href="/accounts/index_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="accounts-title">
+ <h1 id="accounts-title">アカウント</h1>
+ <p class="muted">A quick list of places I exist online.</p>
+
+ <ul class="contact-list">
+ <li><a href="mailto:m@sillylaird.ca">Main Email</a></li>
+ <li><a href="xmpp:sillylaird@xmpp.jp?message">XMPP/Jabber</a></li>
+ <li><a href="xmpp:sillylaird@chat.moddedbear.xyz?message">XMPP/Jabber 2nd</a></li>
+ <li><a href="xmpp:sillylaird@paranoid.network?message">XMPP/Jabber 3rd</a></li>
+ <li><a href="https://discordapp.com/users/1012487168322703400" target="_blank" rel="me noopener">Discord</a></li>
+ <li><a href="https://xf1re.com/profile/sillylaird" target="_blank" rel="me noopener">Xf1re</a></li>
+ <li><a href="https://www.liivid.lol/user/sillylaird" target="_blank" rel="me noopener">LiiVid</a></li>
+ <li><a href="https://www.kamtape.com/profile.php?user=sillylaird" target="_blank" rel="me noopener">KamTape</a></li>
+ <li><a href="/" target="_blank" rel="me noopener">Main Website</a></li>
+ <li><a href="http://nooju2u7hjy4pxlqfacvgmdsxgehhhetywahyu2522tpzlr5abem7oid.onion/" target="_blank" rel="me noopener">Main Tor Website</a></li>
+ <li><a href="http://dev.sillylaird.ca" target="_blank" rel="me noopener">Main Dev Website</a></li>
+ <li><a href="https://sillylaird.srht.site/" target="_blank" rel="me noopener">sr.ht Website</a></li>
+ <li><a href="https://9p.sdf.org/who/sillylaird/index.html" target="_blank" rel="me noopener">plan9front website</a></li>
+ <li><a href="https://music.apple.com/profile/sillylaird" target="_blank" rel="me noopener">Apple 音楽</a></li>
+ <li><a href="https://www.last.fm/user/SillyLaird" target="_blank" rel="me noopener">Last.FM</a></li>
+ <li><a href="https://edramatica.com/User:Sillylaird" target="_blank" rel="me noopener">Encyclopedia Dramatica</a></li>
+ <li><a href="https://forums.edramatica.com/members/sillylaird.1315/" target="_blank" rel="me noopener">Encyclopedia Dramatica Forum</a></li>
+ <li><a href="https://www.flashflashrevolution.com/profile/Stpatrick05/" target="_blank" rel="me noopener">FFR</a></li>
+ <li><a href="https://osu.ppy.sh/users/9157299" target="_blank" rel="me noopener">OSU!</a></li>
+ <li><a href="https://osu.titanic.sh/u/1963" target="_blank" rel="me noopener">OSU!titanic</a></li>
+ <li><a href="https://zenius-i-vanisher.com/v5.2/user?userid=25775" target="_blank" rel="me noopener">zenius-i-vanisher</a></li>
+ <li><a href="https://www.roblox.com/users/1444348326/profile" target="_blank" rel="me noopener">Roblox</a></li>
+ <li><a href="https://www.tiktok.com/@sillylaird" target="_blank" rel="me noopener">TikTok</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/accounts/index_zh.html b/accounts/index_zh.html
new file mode 100644
index 0000000..56b5ab9
--- /dev/null
+++ b/accounts/index_zh.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>账户 — SillyLaird</title>
+ <meta name="description" content="Account links for SillyLaird." />
+ <meta property="og:title" content="账户 — SillyLaird" />
+ <meta property="og:description" content="Account links for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/accounts/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="账户 — SillyLaird" />
+ <meta name="twitter:description" content="Account links for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/accounts/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/accounts/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/accounts/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/accounts/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/accounts/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/accounts/index.html">English</a>
+ <a role="menuitem" href="/accounts/index_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/accounts/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="accounts-title">
+ <h1 id="accounts-title">账户</h1>
+ <p class="muted">A quick list of places I exist online.</p>
+
+ <ul class="contact-list">
+ <li><a href="mailto:m@sillylaird.ca">Main Email</a></li>
+ <li><a href="xmpp:sillylaird@xmpp.jp?message">XMPP/Jabber</a></li>
+ <li><a href="xmpp:sillylaird@chat.moddedbear.xyz?message">XMPP/Jabber 2nd</a></li>
+ <li><a href="xmpp:sillylaird@paranoid.network?message">XMPP/Jabber 3rd</a></li>
+ <li><a href="https://discordapp.com/users/1012487168322703400" target="_blank" rel="me noopener">Discord</a></li>
+ <li><a href="https://xf1re.com/profile/sillylaird" target="_blank" rel="me noopener">Xf1re</a></li>
+ <li><a href="https://www.liivid.lol/user/sillylaird" target="_blank" rel="me noopener">LiiVid</a></li>
+ <li><a href="https://www.kamtape.com/profile.php?user=sillylaird" target="_blank" rel="me noopener">KamTape</a></li>
+ <li><a href="/" target="_blank" rel="me noopener">Main Web网站</a></li>
+ <li><a href="http://nooju2u7hjy4pxlqfacvgmdsxgehhhetywahyu2522tpzlr5abem7oid.onion/" target="_blank" rel="me noopener">Main Tor Web网站</a></li>
+ <li><a href="http://dev.sillylaird.ca" target="_blank" rel="me noopener">Main Dev Web网站</a></li>
+ <li><a href="https://sillylaird.srht.site/" target="_blank" rel="me noopener">sr.ht Web网站</a></li>
+ <li><a href="https://9p.sdf.org/who/sillylaird/index.html" target="_blank" rel="me noopener">plan9front web网站</a></li>
+ <li><a href="https://music.apple.com/profile/sillylaird" target="_blank" rel="me noopener">Apple 音乐</a></li>
+ <li><a href="https://www.last.fm/user/SillyLaird" target="_blank" rel="me noopener">Last.FM</a></li>
+ <li><a href="https://edramatica.com/User:Sillylaird" target="_blank" rel="me noopener">Encyclopedia Dramatica</a></li>
+ <li><a href="https://forums.edramatica.com/members/sillylaird.1315/" target="_blank" rel="me noopener">Encyclopedia Dramatica Forum</a></li>
+ <li><a href="https://www.flashflashrevolution.com/profile/Stpatrick05/" target="_blank" rel="me noopener">FFR</a></li>
+ <li><a href="https://osu.ppy.sh/users/9157299" target="_blank" rel="me noopener">OSU!</a></li>
+ <li><a href="https://osu.titanic.sh/u/1963" target="_blank" rel="me noopener">OSU!titanic</a></li>
+ <li><a href="https://zenius-i-vanisher.com/v5.2/user?userid=25775" target="_blank" rel="me noopener">zenius-i-vanisher</a></li>
+ <li><a href="https://www.roblox.com/users/1444348326/profile" target="_blank" rel="me noopener">Roblox</a></li>
+ <li><a href="https://www.tiktok.com/@sillylaird" target="_blank" rel="me noopener">TikTok</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/accounts/styles.css b/accounts/styles.css
new file mode 100644
index 0000000..4691898
--- /dev/null
+++ b/accounts/styles.css
@@ -0,0 +1,66 @@
+body {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+ margin: 0;
+ font-family: Arial, sans-serif;
+ background-color: #ffd; /* Dark background */
+}
+
+.container {
+ text-align: center;
+ background-color: #ffd; /* Maintain background color as before */
+ padding: 40px; /* Increased padding makes the box bigger */
+ border-radius: 8px;
+ width: 700px; /* Set an explicit width to enlarge container */
+ max-width: 90%; /* Make it responsive on smaller screens */
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 1); /* Pure black shadow, more defined */
+}
+
+.circle-image-link {
+ margin-bottom: 20px;
+}
+
+.circle-link img {
+ display: inline-block;
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ transition: transform 0.3s;
+}
+
+.circle-link:hover img {
+ transform: scale(1.1);
+}
+
+header h1 {
+ margin: 0;
+ font-size: 24px;
+ color: black; /* White heading color */
+}
+
+header p {
+ margin: 5px 0 20px;
+ color: black; /* White text color */
+}
+
+.links {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.links .link {
+ display: inline-block;
+ padding: 5px 10px;
+ border: 2px solid transparent; /* Ensure border space is reserved */
+ transition: border-color 0.3s ease;
+ color: black; /* Set text color to black explicitly here */
+}
+
+
+.links .link:hover {
+ border-color: red; /* Red border highlight on hover */
+}
+
diff --git a/ae.gif b/ae.gif
new file mode 100644
index 0000000..b7a958a
--- /dev/null
+++ b/ae.gif
Binary files differ
diff --git a/airvpn.png b/airvpn.png
new file mode 100644
index 0000000..271b1ef
--- /dev/null
+++ b/airvpn.png
Binary files differ
diff --git a/anime.txt b/anime.txt
new file mode 100644
index 0000000..f2dc36c
--- /dev/null
+++ b/anime.txt
@@ -0,0 +1 @@
+Dragonball 1986 6-153 \ No newline at end of file
diff --git a/articles/2023/04-10.html b/articles/2023/04-10.html
new file mode 100644
index 0000000..880c823
--- /dev/null
+++ b/articles/2023/04-10.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Cooking and Cook-X — 2023-04-10</title>
+ <meta name="description" content="Cooking and Cook-X." />
+ <meta property="og:title" content="Cooking and Cook-X — 2023-04-10" />
+ <meta property="og:description" content="Cooking and Cook-X." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Cooking and Cook-X — 2023-04-10" />
+ <meta name="twitter:description" content="Cooking and Cook-X." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/2023/04-10_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/2023/04-10_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+ <link rel="stylesheet" href="/assets/css/pages/articles-2023-04-10.css" />
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/2023/04-10.html" aria-current="page">English</a>
+ <a role="menuitem" href="/articles/2023/04-10_zh.html">中文</a>
+ <a role="menuitem" href="/articles/2023/04-10_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Cooking and Cook-X</h1>
+ <p class="muted">Original author: lolwut</p>
+
+ <p>The Cooking skill was quite different before <a href="https://services.runescape.com/m=news/cook-x" target="_blank" rel="noopener">Jagex released Cook-X on 12 September 2005</a>. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering <kbd>28</kbd> into the prompt), after which you could sit back for a little while and let your character take care of the rest.</p>
+ <p>It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/2023/04-10_jp.html b/articles/2023/04-10_jp.html
new file mode 100644
index 0000000..ab447fe
--- /dev/null
+++ b/articles/2023/04-10_jp.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Cooking and Cook-X — 2023-04-10</title>
+ <meta name="description" content="Cooking and Cook-X." />
+ <meta property="og:title" content="Cooking and Cook-X — 2023-04-10" />
+ <meta property="og:description" content="Cooking and Cook-X." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/2023/04-10_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Cooking and Cook-X — 2023-04-10" />
+ <meta name="twitter:description" content="Cooking and Cook-X." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/2023/04-10_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/2023/04-10_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/2023/04-10_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+ <link rel="stylesheet" href="/assets/css/pages/articles-2023-04-10_jp.css" />
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/2023/04-10.html">English</a>
+ <a role="menuitem" href="/articles/2023/04-10_zh.html">中文</a>
+ <a role="menuitem" href="/articles/2023/04-10_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Cooking and Cook-X</h1>
+ <p class="muted">Original author: lolwut</p>
+
+ <p>The Cooking skill was quite different before <a href="https://services.runescape.com/m=news/cook-x" target="_blank" rel="noopener">Jagex released Cook-X on 12 September 2005</a>. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering <kbd>28</kbd> into the prompt), after which you could sit back for a little while and let your character take care of the rest.</p>
+ <p>It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/2023/04-10_zh.html b/articles/2023/04-10_zh.html
new file mode 100644
index 0000000..7f82f0f
--- /dev/null
+++ b/articles/2023/04-10_zh.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Cooking and Cook-X — 2023-04-10</title>
+ <meta name="description" content="Cooking and Cook-X." />
+ <meta property="og:title" content="Cooking and Cook-X — 2023-04-10" />
+ <meta property="og:description" content="Cooking and Cook-X." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/2023/04-10_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Cooking and Cook-X — 2023-04-10" />
+ <meta name="twitter:description" content="Cooking and Cook-X." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/2023/04-10_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/2023/04-10.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/2023/04-10_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/2023/04-10_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+ <link rel="stylesheet" href="/assets/css/pages/articles-2023-04-10_zh.css" />
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/2023/04-10.html">English</a>
+ <a role="menuitem" href="/articles/2023/04-10_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/articles/2023/04-10_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Cooking and Cook-X</h1>
+ <p class="muted">Original author: lolwut</p>
+
+ <p>The Cooking skill was quite different before <a href="https://services.runescape.com/m=news/cook-x" target="_blank" rel="noopener">Jagex released Cook-X on 12 September 2005</a>. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering <kbd>28</kbd> into the prompt), after which you could sit back for a little while and let your character take care of the rest.</p>
+ <p>It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/2023/2023 b/articles/2023/2023
new file mode 100644
index 0000000..5ee1b5d
--- /dev/null
+++ b/articles/2023/2023
@@ -0,0 +1,7 @@
+ /plinkx:ma.sdf.org:/meta/www/s/sillylaird/articles/2023:
+ total used in directory 18 available 2.9 TiB
+ drwxr-xr-x 3 sillylaird arpa 4096 01-15 13:54 ..
+ drwxrwxrwx 2 sillylaird arpa 4096 01-17 10:37 .
+ -rw-r--r-- 1 sillylaird arpa 2094 01-09 10:18 01-09.html
+ -rw-r--r-- 1 sillylaird arpa 1910 01-17 10:37 01-17.html
+ -rw-r--r-- 1 sillylaird arpa 6146 12-15 15:32 12-15.html
diff --git a/articles/2024/05-15.html b/articles/2024/05-15.html
new file mode 100644
index 0000000..ac85962
--- /dev/null
+++ b/articles/2024/05-15.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Rambling Of The New Year — 2024-05-15</title>
+ <meta name="description" content="Rambling of the new year." />
+ <meta property="og:title" content="Rambling Of The New Year — 2024-05-15" />
+ <meta property="og:description" content="Rambling of the new year." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Rambling Of The New Year — 2024-05-15" />
+ <meta name="twitter:description" content="Rambling of the new year." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/2024/05-15_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/2024/05-15_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/2024/05-15.html" aria-current="page">English</a>
+ <a role="menuitem" href="/articles/2024/05-15_zh.html">中文</a>
+ <a role="menuitem" href="/articles/2024/05-15_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Rambling Of The New Year</h1>
+ <p>It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/2024/05-15_jp.html b/articles/2024/05-15_jp.html
new file mode 100644
index 0000000..31518a4
--- /dev/null
+++ b/articles/2024/05-15_jp.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Rambling Of The New Year — 2024-05-15</title>
+ <meta name="description" content="Rambling of the new year." />
+ <meta property="og:title" content="Rambling Of The New Year — 2024-05-15" />
+ <meta property="og:description" content="Rambling of the new year." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/2024/05-15_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Rambling Of The New Year — 2024-05-15" />
+ <meta name="twitter:description" content="Rambling of the new year." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/2024/05-15_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/2024/05-15_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/2024/05-15_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/2024/05-15.html">English</a>
+ <a role="menuitem" href="/articles/2024/05-15_zh.html">中文</a>
+ <a role="menuitem" href="/articles/2024/05-15_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Rambling Of The New Year</h1>
+ <p>It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/2024/05-15_zh.html b/articles/2024/05-15_zh.html
new file mode 100644
index 0000000..a308d31
--- /dev/null
+++ b/articles/2024/05-15_zh.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Rambling Of The New Year — 2024-05-15</title>
+ <meta name="description" content="Rambling of the new year." />
+ <meta property="og:title" content="Rambling Of The New Year — 2024-05-15" />
+ <meta property="og:description" content="Rambling of the new year." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/2024/05-15_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Rambling Of The New Year — 2024-05-15" />
+ <meta name="twitter:description" content="Rambling of the new year." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/2024/05-15_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/2024/05-15.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/2024/05-15_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/2024/05-15_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/2024/05-15.html">English</a>
+ <a role="menuitem" href="/articles/2024/05-15_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/articles/2024/05-15_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Rambling Of The New Year</h1>
+ <p>It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/hello.html b/articles/hello.html
new file mode 100644
index 0000000..0dd9b7e
--- /dev/null
+++ b/articles/hello.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Hello World — Article — SillyLaird</title>
+ <meta name="description" content="Hello world / first blog post." />
+ <meta property="og:title" content="Hello World — Article — SillyLaird" />
+ <meta property="og:description" content="Hello world / first blog post." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/hello.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Hello World — Article — SillyLaird" />
+ <meta name="twitter:description" content="Hello world / first blog post." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/hello.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/hello.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/hello.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/hello_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/hello_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/hello.html" aria-current="page">English</a>
+ <a role="menuitem" href="/articles/hello_zh.html">中文</a>
+ <a role="menuitem" href="/articles/hello_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Hello World - First Blog</h1>
+ <p class="muted">Last modified: 2023-01-09</p>
+ <p>Hello! welcome to my first blog on this site. sorry for the poor english you might see on here. I was not given the best education when it came to this. But I enjoy making website playing mmo's but multi logging ot multiboxxing and trading card games and so on. I just enjoy all of them. and I will document all my hobbies on here. :). Thank you for reading</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/hello_jp.html b/articles/hello_jp.html
new file mode 100644
index 0000000..4e351b7
--- /dev/null
+++ b/articles/hello_jp.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Hello World — Article — SillyLaird</title>
+ <meta name="description" content="Hello world / first blog post." />
+ <meta property="og:title" content="Hello World — Article — SillyLaird" />
+ <meta property="og:description" content="Hello world / first blog post." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/hello_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Hello World — Article — SillyLaird" />
+ <meta name="twitter:description" content="Hello world / first blog post." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/hello_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/hello.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/hello.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/hello_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/hello_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/hello.html">English</a>
+ <a role="menuitem" href="/articles/hello_zh.html">中文</a>
+ <a role="menuitem" href="/articles/hello_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Hello World - First ブログ</h1>
+ <p class="muted">Last modified: 2023-01-09</p>
+ <p>Hello! welcome to my first blog on this site. sorry for the poor english you might see on here. I was not given the best education when it came to this. But I enjoy making website playing mmo's but multi logging ot multiboxxing and trading card games and so on. I just enjoy all of them. and I will document all my hobbies on here. :). Thank you for reading</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/hello_zh.html b/articles/hello_zh.html
new file mode 100644
index 0000000..53d10dc
--- /dev/null
+++ b/articles/hello_zh.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Hello World — Article — SillyLaird</title>
+ <meta name="description" content="Hello world / first blog post." />
+ <meta property="og:title" content="Hello World — Article — SillyLaird" />
+ <meta property="og:description" content="Hello world / first blog post." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/hello_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Hello World — Article — SillyLaird" />
+ <meta name="twitter:description" content="Hello world / first blog post." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/hello_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/hello.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/hello.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/hello_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/hello_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/hello.html">English</a>
+ <a role="menuitem" href="/articles/hello_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/articles/hello_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">Hello World - First 博客</h1>
+ <p class="muted">Last modified: 2023-01-09</p>
+ <p>Hello! welcome to my first blog on this 网站. sorry for the poor english you might see on here. I was not given the best education when it came to this. But I enjoy making web网站 playing mmo's but multi logging ot multiboxxing and trading card games and so on. I just enjoy all of them. and I will document all my hobbies on here. :). Thank you for reading</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/runescape.html b/articles/runescape.html
new file mode 100644
index 0000000..6adcb56
--- /dev/null
+++ b/articles/runescape.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>How I Started RuneScape — Article</title>
+ <meta name="description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta property="og:title" content="How I Started RuneScape — Article" />
+ <meta property="og:description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/runescape.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="How I Started RuneScape — Article" />
+ <meta name="twitter:description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/runescape.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/runescape.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/runescape.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/runescape_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/runescape_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+ <link rel="stylesheet" href="/assets/css/pages/articles-runescape.css" />
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/runescape.html" aria-current="page">English</a>
+ <a role="menuitem" href="/articles/runescape_zh.html">中文</a>
+ <a role="menuitem" href="/articles/runescape_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">How I Started RuneScape</h1>
+ <p class="muted">Last modified: 2022-12-23</p>
+
+ <p>The Cooking skill was quite different before <a href="https://services.runescape.com/m=news/cook-x" target="_blank" rel="noopener">Jagex released Cook-X on 12 September 2005</a>. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering <kbd>28</kbd> into the prompt), after which you could sit back for a little while and let your character take care of the rest.</p>
+ <p>It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced. When skillcapes were released later on, the Cooking skillcape was hardly considered an accomplishment, and those who had an untrimmed Cooking skillcape were even mocked for choosing the easiest skill to level to 99 and then thinking that they had achieved something noteworthy. I can recall that, throughout 2007, when I looked at the Hiscores, several people had gotten 200M experience in Cooking, whereas very few to none had done so in each of the other skills. (If you aren't satisfied with my memories, there is also <a href="https://www.youtube.com/watch?v=uXcurtTpS6c" target="_blank" rel="noopener">a YouTube video showing the Hiscores on 1 August 2006</a>, in which you can see that Cooking has the most players with 200M experience, as well as the highest average number of experience points among the players listed on the first page for any of the individual skills.)</p>
+ <p>It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/runescape_jp.html b/articles/runescape_jp.html
new file mode 100644
index 0000000..c203f19
--- /dev/null
+++ b/articles/runescape_jp.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>How I Started RuneScape — Article</title>
+ <meta name="description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta property="og:title" content="How I Started RuneScape — Article" />
+ <meta property="og:description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/runescape_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="How I Started RuneScape — Article" />
+ <meta name="twitter:description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/runescape_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/runescape.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/runescape.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/runescape_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/runescape_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+ <link rel="stylesheet" href="/assets/css/pages/articles-runescape_jp.css" />
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/runescape.html">English</a>
+ <a role="menuitem" href="/articles/runescape_zh.html">中文</a>
+ <a role="menuitem" href="/articles/runescape_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">How I Started RuneScape</h1>
+ <p class="muted">Last modified: 2022-12-23</p>
+
+ <p>The Cooking skill was quite different before <a href="https://services.runescape.com/m=news/cook-x" target="_blank" rel="noopener">Jagex released Cook-X on 12 September 2005</a>. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering <kbd>28</kbd> into the prompt), after which you could sit back for a little while and let your character take care of the rest.</p>
+ <p>It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced. When skillcapes were released later on, the Cooking skillcape was hardly considered an accomplishment, and those who had an untrimmed Cooking skillcape were even mocked for choosing the easiest skill to level to 99 and then thinking that they had achieved something noteworthy. I can recall that, throughout 2007, when I looked at the Hiscores, several people had gotten 200M experience in Cooking, whereas very few to none had done so in each of the other skills. (If you aren't satisfied with my memories, there is also <a href="https://www.youtube.com/watch?v=uXcurtTpS6c" target="_blank" rel="noopener">a YouTube video showing the Hiscores on 1 August 2006</a>, in which you can see that Cooking has the most players with 200M experience, as well as the highest average number of experience points among the players listed on the first page for any of the individual skills.)</p>
+ <p>It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/runescape_zh.html b/articles/runescape_zh.html
new file mode 100644
index 0000000..d60d2d7
--- /dev/null
+++ b/articles/runescape_zh.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>How I Started RuneScape — Article</title>
+ <meta name="description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta property="og:title" content="How I Started RuneScape — Article" />
+ <meta property="og:description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/runescape_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="How I Started RuneScape — Article" />
+ <meta name="twitter:description" content="Regarding Cook-X and how it changed Cooking forever." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/runescape_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/runescape.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/runescape.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/runescape_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/runescape_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+ <link rel="stylesheet" href="/assets/css/pages/articles-runescape_zh.css" />
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/runescape.html">English</a>
+ <a role="menuitem" href="/articles/runescape_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/articles/runescape_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="article-title">
+ <h1 id="article-title">How I Started RuneScape</h1>
+ <p class="muted">Last modified: 2022-12-23</p>
+
+ <p>The Cooking skill was quite different before <a href="https://services.runescape.com/m=news/cook-x" target="_blank" rel="noopener">Jagex released Cook-X on 12 September 2005</a>. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering <kbd>28</kbd> into the prompt), after which you could sit back for a little while and let your character take care of the rest.</p>
+ <p>It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced. When skillcapes were released later on, the Cooking skillcape was hardly considered an accomplishment, and those who had an untrimmed Cooking skillcape were even mocked for choosing the easiest skill to level to 99 and then thinking that they had achieved something noteworthy. I can recall that, throughout 2007, when I looked at the Hiscores, several people had gotten 200M experience in Cooking, whereas very few to none had done so in each of the other skills. (If you aren't satisfied with my memories, there is also <a href="https://www.youtube.com/watch?v=uXcurtTpS6c" target="_blank" rel="noopener">a YouTube video showing the Hiscores on 1 August 2006</a>, in which you can see that Cooking has the most players with 200M experience, as well as the highest average number of experience points among the players listed on the first page for any of the individual skills.)</p>
+ <p>It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/sample.html b/articles/sample.html
new file mode 100644
index 0000000..4de7bb4
--- /dev/null
+++ b/articles/sample.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Sample Article</title>
+ <meta name="description" content="Sample article page." />
+ <meta property="og:title" content="Sample Article" />
+ <meta property="og:description" content="Sample article page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/sample.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Sample Article" />
+ <meta name="twitter:description" content="Sample article page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/sample.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/sample.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/sample.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/sample_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/sample_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/sample.html" aria-current="page">English</a>
+ <a role="menuitem" href="/articles/sample_zh.html">中文</a>
+ <a role="menuitem" href="/articles/sample_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section>
+ <h1>Sample Article</h1>
+ <p class="muted">This page was an old HTML 4.01 sample. It now uses the unified site layout.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/sample_jp.html b/articles/sample_jp.html
new file mode 100644
index 0000000..aca87bd
--- /dev/null
+++ b/articles/sample_jp.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Sample Article</title>
+ <meta name="description" content="Sample article page." />
+ <meta property="og:title" content="Sample Article" />
+ <meta property="og:description" content="Sample article page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/sample_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Sample Article" />
+ <meta name="twitter:description" content="Sample article page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/sample_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/sample.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/sample.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/sample_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/sample_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/sample.html">English</a>
+ <a role="menuitem" href="/articles/sample_zh.html">中文</a>
+ <a role="menuitem" href="/articles/sample_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section>
+ <h1>Sample Article</h1>
+ <p class="muted">This page was an old HTML 4.01 sample. It now uses the unified site layout.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/articles/sample_zh.html b/articles/sample_zh.html
new file mode 100644
index 0000000..9c5face
--- /dev/null
+++ b/articles/sample_zh.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Sample Article</title>
+ <meta name="description" content="Sample article page." />
+ <meta property="og:title" content="Sample Article" />
+ <meta property="og:description" content="Sample article page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/articles/sample_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Sample Article" />
+ <meta name="twitter:description" content="Sample article page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/articles/sample_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/articles/sample.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/articles/sample.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/articles/sample_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/articles/sample_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/articles/sample.html">English</a>
+ <a role="menuitem" href="/articles/sample_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/articles/sample_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section>
+ <h1>Sample Article</h1>
+ <p class="muted">This page was an old HTML 4.01 sample. It now uses the unified 网站 layout.</p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/assets/css/inline-attrs.css b/assets/css/inline-attrs.css
new file mode 100644
index 0000000..2dce580
--- /dev/null
+++ b/assets/css/inline-attrs.css
@@ -0,0 +1,31 @@
+.s1da9facb4d{margin:0;}
+.s6e250fe32e{border:none;border-top:1px solid #caa;margin:1rem 0;}
+.s2a2536eebb{margin: 15px 0;}
+.sd078564312{border:1px solid #ffd; display:block; margin-bottom:6px;}
+.sd82634530e{background: transparent;
+ border:1px solid transparent;
+ color:#3a2a00;
+ padding:10px;
+ width:100%;
+ border-radius:4px;}
+.sefd85b92cb{display: flex; flex-direction: column; gap: 20px;}
+.s0b3fba4969{border: 1px solid var(--border); border-radius: var(--r);}
+.see3e7269f8{height:700px; border: 1px solid var(--border); border-radius: var(--r);}
+.s9572e08b37{width:150px;opacity:0.7;}
+.se7f7a3d62d{border:1px solid var(--border);border-radius:var(--r);padding:var(--space-md);background:var(--bg);overflow:auto;}
+.s06eeebc88f{max-width: 100%; height: auto;}
+.s386d82bd1c{height:1100px;}
+.s7e8ca45906{font-size: 50px;}
+.s0667eb5585{max-width:160px;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);}
+.sed328f664c{min-height:360px;}
+.s63501a3337{border:1px solid var(--border);border-radius:var(--r);background:var(--bg);}
+.saf481e1471{width:100%;max-width:560px;height:315px;border:1px solid var(--border);border-radius:var(--r);}
+.sb83d4c5326{max-width:720px;margin:0 auto;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);}
+.sd1a2ffa0b4{text-align:center;margin-top:var(--space-md);}
+.sdac4fe6c9b{text-align:center;}
+.sfed215d685{max-width:420px;margin:0 auto;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);}
+.s16a8a8b00c{overflow:auto;}
+.s473e6bbfeb{width:100%;border-collapse:collapse;}
+.sf2e940dbbf{text-align:left;border-bottom:1px solid var(--border);padding:8px;}
+.s6f279abaab{padding:8px;border-bottom:1px dotted var(--border);}
+.s44cd1236df{padding:8px;}
diff --git a/assets/css/pages/404.css b/assets/css/pages/404.css
new file mode 100644
index 0000000..7939cc1
--- /dev/null
+++ b/assets/css/pages/404.css
@@ -0,0 +1,12 @@
+/* Minimal fallback if CSS fails to load */
+ body{margin:0;background:#ffd;color:#000;font-family:system-ui,Segoe UI,Arial,sans-serif;line-height:1.6;}
+ .wrap{max-width:960px;margin:0 auto;padding:1.35rem 1rem 2.5rem;}
+ .card{border:1px solid #caa;border-radius:6px;padding:1rem;background:#ffd;}
+ .top{display:flex;gap:12px;align-items:center;margin-bottom:1rem;}
+ .top img{width:48px;height:48px;border:2px solid #000;border-radius:6px;}
+ .top a:hover img{border-color:#d22;}
+ a{color:#d22;text-decoration:none;transition:0.1s;}
+ a:hover{background:#d22;color:#000 !important;}
+ .muted{color:#333;font-size:.9rem;}
+ .links{margin:1rem 0 0 0;}
+ .links a{display:inline-block;margin:0 .25rem .5rem 0;padding:2px 4px;border-radius:4px;}
diff --git a/assets/css/pages/50x.css b/assets/css/pages/50x.css
new file mode 100644
index 0000000..cc573de
--- /dev/null
+++ b/assets/css/pages/50x.css
@@ -0,0 +1,9 @@
+body{margin:0;background:#ffd;color:#000;font-family:system-ui,Segoe UI,Arial,sans-serif;line-height:1.6;}
+ .wrap{max-width:960px;margin:0 auto;padding:1.35rem 1rem 2.5rem;}
+ .card{border:1px solid #caa;border-radius:6px;padding:1rem;background:#ffd;}
+ .top{display:flex;gap:12px;align-items:center;margin-bottom:1rem;}
+ .top img{width:48px;height:48px;border:2px solid #000;border-radius:6px;}
+ .top a:hover img{border-color:#d22;}
+ a{color:#d22;text-decoration:none;transition:0.1s;}
+ a:hover{background:#d22;color:#000 !important;}
+ .muted{color:#333;font-size:.9rem;}
diff --git a/assets/css/pages/articles-2023-04-10.css b/assets/css/pages/articles-2023-04-10.css
new file mode 100644
index 0000000..1818de4
--- /dev/null
+++ b/assets/css/pages/articles-2023-04-10.css
@@ -0,0 +1 @@
+kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; }
diff --git a/assets/css/pages/articles-2023-04-10_jp.css b/assets/css/pages/articles-2023-04-10_jp.css
new file mode 100644
index 0000000..1818de4
--- /dev/null
+++ b/assets/css/pages/articles-2023-04-10_jp.css
@@ -0,0 +1 @@
+kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; }
diff --git a/assets/css/pages/articles-2023-04-10_zh.css b/assets/css/pages/articles-2023-04-10_zh.css
new file mode 100644
index 0000000..1818de4
--- /dev/null
+++ b/assets/css/pages/articles-2023-04-10_zh.css
@@ -0,0 +1 @@
+kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; }
diff --git a/assets/css/pages/articles-runescape.css b/assets/css/pages/articles-runescape.css
new file mode 100644
index 0000000..1818de4
--- /dev/null
+++ b/assets/css/pages/articles-runescape.css
@@ -0,0 +1 @@
+kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; }
diff --git a/assets/css/pages/articles-runescape_jp.css b/assets/css/pages/articles-runescape_jp.css
new file mode 100644
index 0000000..1818de4
--- /dev/null
+++ b/assets/css/pages/articles-runescape_jp.css
@@ -0,0 +1 @@
+kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; }
diff --git a/assets/css/pages/articles-runescape_zh.css b/assets/css/pages/articles-runescape_zh.css
new file mode 100644
index 0000000..1818de4
--- /dev/null
+++ b/assets/css/pages/articles-runescape_zh.css
@@ -0,0 +1 @@
+kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; }
diff --git a/assets/css/pages/bookmarks.css b/assets/css/pages/bookmarks.css
new file mode 100644
index 0000000..945b771
--- /dev/null
+++ b/assets/css/pages/bookmarks.css
@@ -0,0 +1,61 @@
+.bookmarks-title{
+ margin-bottom: var(--space-md);
+}
+
+.tree{ list-style-type: none; padding-left: 0; margin: 0; }
+
+.tree ul{ list-style-type: none; padding-left: 28px; margin: 5px 0; }
+
+.tree li{ margin: 4px 0; position: relative; }
+
+.tree summary{
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ padding: 8px 12px;
+ transition: background-color 0.2s ease;
+ font-weight: 600;
+ outline: none;
+ user-select: none;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+}
+
+.tree summary:hover{ background-color: #fdd; border-color: var(--accent); }
+
+.tree summary::-webkit-details-marker{ display: none; }
+
+.tree summary::before{
+ content: ">";
+ color: var(--ink);
+ margin-right: 10px;
+ font-size: 1rem;
+ transition: all 0.2s ease;
+ width: 20px;
+ text-align: left;
+ font-weight: 700;
+}
+
+.tree details[open] > summary::before{ content: ">"; transform: rotate(90deg); }
+
+.tree a{
+ color: var(--ink);
+ text-decoration: none;
+ display: inline-flex;
+ align-items: center;
+ padding: 6px 6px;
+ border-radius: 4px;
+}
+
+.tree a:hover{ background: var(--accent); color: #000 !important; }
+
+
+.tree .navbar-file a{ color: var(--muted); }
+
+.tree .navbar-file a::before{
+ content: "->";
+ color: var(--muted);
+ margin-right: 10px;
+ font-size: 0.9rem;
+}
diff --git a/assets/css/pages/changelog.css b/assets/css/pages/changelog.css
new file mode 100644
index 0000000..78b2ff4
--- /dev/null
+++ b/assets/css/pages/changelog.css
@@ -0,0 +1,19 @@
+.changelog-list{ list-style: none; padding: 0; margin: 0; }
+
+.changelog-entry{
+ display: grid;
+ grid-template-columns: 12ch 1fr;
+ gap: var(--space-lg);
+ padding: var(--space-md) 0;
+ border-bottom: 1px dotted rgba(0,0,0,.25);
+}
+
+.changelog-entry:last-child{ border-bottom: none; }
+
+.changelog-entry time{ font-weight: 700; color: var(--ink); white-space: nowrap; }
+
+.changelog-entry .text{ color: var(--muted); }
+
+@media (max-width: 560px){
+ .changelog-entry{ grid-template-columns: 1fr; }
+}
diff --git a/assets/css/pages/computers.css b/assets/css/pages/computers.css
new file mode 100644
index 0000000..ec7d01f
--- /dev/null
+++ b/assets/css/pages/computers.css
@@ -0,0 +1,29 @@
+.machine{
+ border: 1px solid var(--ink);
+ padding: var(--space-md);
+ margin-top: var(--space-md);
+ background: var(--bg);
+ display: grid;
+ grid-template-columns: 150px auto 150px;
+ gap: var(--space-md);
+ align-items: start;
+}
+
+.machine img{
+ width: 100%;
+ height: auto;
+ border: 1px solid var(--ink);
+}
+
+.machine-info{ font-size: var(--fs-base); }
+
+.machine-title{
+ color: var(--gold);
+ font-weight: 700;
+ font-size: var(--fs-lg);
+ margin-bottom: var(--space-xs);
+}
+
+@media (max-width: 720px){
+ .machine{ grid-template-columns: 1fr; }
+}
diff --git a/assets/css/pages/guestbook-form.css b/assets/css/pages/guestbook-form.css
new file mode 100644
index 0000000..b45feaa
--- /dev/null
+++ b/assets/css/pages/guestbook-form.css
@@ -0,0 +1,51 @@
+/* Pure light theme — NO container, NO black */
+body {
+ background: transparent;
+ margin: 0;
+ padding: 10px;
+ font-family: "Source Code Pro", monospace;
+ color: #3a2a00;
+ overflow-y: auto;
+ overflow-x: hidden;
+ /* Hide scrollbar for Chrome, Safari and Opera */
+ -ms-overflow-style: none; /* IE and Edge */
+ scrollbar-width: none; /* Firefox */
+}
+body::-webkit-scrollbar {
+ width: 0;
+ height: 0;
+}
+
+/* Remove all container styling */
+form {
+ max-width: 900px;
+ margin: 0 auto;
+}
+
+/* Slight spacing between form and messages */
+form {
+ margin-bottom: 20px;
+}
+
+input[type="text"], textarea {
+ border: 1px solid transparent;
+ background: transparent;
+ color: #3a2a00;
+ font: inherit;
+ box-sizing: border-box; /* Include padding in width */
+ margin-bottom: 10px;
+}
+
+textarea {
+ resize: vertical;
+}
+
+button {
+ background: transparent;
+ border: 1px solid transparent;
+ padding: 10px 20px;
+ border-radius: 4px;
+ cursor: pointer;
+ font: inherit;
+ color: #3a2a00;
+}
diff --git a/assets/css/pages/guestbook_jp.css b/assets/css/pages/guestbook_jp.css
new file mode 100644
index 0000000..bd71cb5
--- /dev/null
+++ b/assets/css/pages/guestbook_jp.css
@@ -0,0 +1,29 @@
+.anonymous { color: #0a0; }
+ .error { color: var(--accent); }
+ .captcha { font-weight: 700; font-size: 20px; }
+ form { display: grid; gap: var(--space-sm); max-width: 640px; }
+ label { font-weight: 600; }
+ input[type="text"], textarea {
+ width: 100%;
+ padding: 10px;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ background: var(--bg);
+ color: var(--ink);
+ font: inherit;
+ }
+ textarea { min-height: 120px; resize: vertical; }
+ .btn-row { display: flex; gap: var(--space-sm); flex-wrap: wrap; }
+ button {
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ background: var(--bg);
+ padding: 8px 12px;
+ cursor: pointer;
+ font: inherit;
+ }
+ button:hover { background: #fdd; border-color: var(--accent); }
+ .entry { border-top: 1px dotted rgba(0,0,0,.25); padding-top: var(--space-md); margin-top: var(--space-md); }
+ .entry h4 { margin: 0 0 var(--space-xs) 0; }
+ .entry p { margin: 0; color: var(--muted); }
+ #captcha-canvas { border: 1px solid var(--border); border-radius: var(--r); background: #fff; }
diff --git a/assets/css/pages/guestbook_zh.css b/assets/css/pages/guestbook_zh.css
new file mode 100644
index 0000000..bd71cb5
--- /dev/null
+++ b/assets/css/pages/guestbook_zh.css
@@ -0,0 +1,29 @@
+.anonymous { color: #0a0; }
+ .error { color: var(--accent); }
+ .captcha { font-weight: 700; font-size: 20px; }
+ form { display: grid; gap: var(--space-sm); max-width: 640px; }
+ label { font-weight: 600; }
+ input[type="text"], textarea {
+ width: 100%;
+ padding: 10px;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ background: var(--bg);
+ color: var(--ink);
+ font: inherit;
+ }
+ textarea { min-height: 120px; resize: vertical; }
+ .btn-row { display: flex; gap: var(--space-sm); flex-wrap: wrap; }
+ button {
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ background: var(--bg);
+ padding: 8px 12px;
+ cursor: pointer;
+ font: inherit;
+ }
+ button:hover { background: #fdd; border-color: var(--accent); }
+ .entry { border-top: 1px dotted rgba(0,0,0,.25); padding-top: var(--space-md); margin-top: var(--space-md); }
+ .entry h4 { margin: 0 0 var(--space-xs) 0; }
+ .entry p { margin: 0; color: var(--muted); }
+ #captcha-canvas { border: 1px solid var(--border); border-radius: var(--r); background: #fff; }
diff --git a/assets/css/pages/hitcounter.css b/assets/css/pages/hitcounter.css
new file mode 100644
index 0000000..1c52da1
--- /dev/null
+++ b/assets/css/pages/hitcounter.css
@@ -0,0 +1,7 @@
+.counter {
+ display: grid;
+ gap: var(--space-sm);
+ justify-items: center;
+ text-align: center;
+ }
+ .big { font-size: 3rem; font-weight: 800; color: var(--gold); }
diff --git a/assets/css/pages/hitcounter_jp.css b/assets/css/pages/hitcounter_jp.css
new file mode 100644
index 0000000..1c52da1
--- /dev/null
+++ b/assets/css/pages/hitcounter_jp.css
@@ -0,0 +1,7 @@
+.counter {
+ display: grid;
+ gap: var(--space-sm);
+ justify-items: center;
+ text-align: center;
+ }
+ .big { font-size: 3rem; font-weight: 800; color: var(--gold); }
diff --git a/assets/css/pages/hitcounter_zh.css b/assets/css/pages/hitcounter_zh.css
new file mode 100644
index 0000000..1c52da1
--- /dev/null
+++ b/assets/css/pages/hitcounter_zh.css
@@ -0,0 +1,7 @@
+.counter {
+ display: grid;
+ gap: var(--space-sm);
+ justify-items: center;
+ text-align: center;
+ }
+ .big { font-size: 3rem; font-weight: 800; color: var(--gold); }
diff --git a/assets/css/pages/journal-index.css b/assets/css/pages/journal-index.css
new file mode 100644
index 0000000..02e8c42
--- /dev/null
+++ b/assets/css/pages/journal-index.css
@@ -0,0 +1,3 @@
+.entry { margin: var(--space-md) 0; }
+ .entry time { font-weight: 700; color: var(--ink); }
+ .entry p { margin: var(--space-xs) 0 0 0; color: var(--muted); }
diff --git a/assets/css/pages/journal-index_jp.css b/assets/css/pages/journal-index_jp.css
new file mode 100644
index 0000000..02e8c42
--- /dev/null
+++ b/assets/css/pages/journal-index_jp.css
@@ -0,0 +1,3 @@
+.entry { margin: var(--space-md) 0; }
+ .entry time { font-weight: 700; color: var(--ink); }
+ .entry p { margin: var(--space-xs) 0 0 0; color: var(--muted); }
diff --git a/assets/css/pages/journal-index_zh.css b/assets/css/pages/journal-index_zh.css
new file mode 100644
index 0000000..02e8c42
--- /dev/null
+++ b/assets/css/pages/journal-index_zh.css
@@ -0,0 +1,3 @@
+.entry { margin: var(--space-md) 0; }
+ .entry time { font-weight: 700; color: var(--ink); }
+ .entry p { margin: var(--space-xs) 0 0 0; color: var(--muted); }
diff --git a/assets/css/pages/links.css b/assets/css/pages/links.css
new file mode 100644
index 0000000..fbb3700
--- /dev/null
+++ b/assets/css/pages/links.css
@@ -0,0 +1,3 @@
+.buttons img { image-rendering: auto; }
+ .buttons a { padding: 0; background: transparent; }
+ .buttons a:hover { background: transparent; }
diff --git a/assets/css/pages/links_jp.css b/assets/css/pages/links_jp.css
new file mode 100644
index 0000000..fbb3700
--- /dev/null
+++ b/assets/css/pages/links_jp.css
@@ -0,0 +1,3 @@
+.buttons img { image-rendering: auto; }
+ .buttons a { padding: 0; background: transparent; }
+ .buttons a:hover { background: transparent; }
diff --git a/assets/css/pages/links_zh.css b/assets/css/pages/links_zh.css
new file mode 100644
index 0000000..fbb3700
--- /dev/null
+++ b/assets/css/pages/links_zh.css
@@ -0,0 +1,3 @@
+.buttons img { image-rendering: auto; }
+ .buttons a { padding: 0; background: transparent; }
+ .buttons a:hover { background: transparent; }
diff --git a/assets/css/pages/mstartpage-index.css b/assets/css/pages/mstartpage-index.css
new file mode 100644
index 0000000..67eac23
--- /dev/null
+++ b/assets/css/pages/mstartpage-index.css
@@ -0,0 +1,361 @@
+:root {
+ --main-text-color: #ddd;
+ --border-color: #C8A977;
+ --search-input-color: black;
+ --link-color: #FF0000;
+ --background-color: #111;
+ --menu-background: #222;
+ }
+
+ * {
+ box-sizing: border-box;
+ }
+
+ html, body {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ background-color: var(--background-color);
+ font-family: 'Source Code Pro', "MS Gothic", IPAMonaGothic, IPAGothic, "BIZ UDGothic", HGGothicM, "Noto Sans Mono CJK JP", "Noto Sans Mono", monospace;
+ font-size: 14px;
+ color: var(--main-text-color);
+ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7);
+ overflow-x: hidden;
+ }
+
+ a {
+ color: var(--link-color);
+ background-color: transparent;
+ text-decoration: none;
+ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8);
+ }
+
+ a:hover {
+ text-decoration: underline;
+ }
+
+ /* Header and menu */
+ .header {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background-color: var(--background-color);
+ padding: 10px;
+ border-bottom: 1px solid var(--border-color);
+ }
+
+ .menu-toggle {
+ display: block;
+ width: 100%;
+ padding: 12px;
+ background-color: black;
+ color: var(--link-color);
+ border: 1px solid var(--link-color);
+ border-radius: 4px;
+ text-align: center;
+ font-weight: bold;
+ margin-bottom: 10px;
+ cursor: pointer;
+ }
+
+ .main-menu {
+ display: none;
+ flex-direction: column;
+ background-color: var(--menu-background);
+ border: 1px solid var(--link-color);
+ border-radius: 4px;
+ padding: 10px;
+ margin-bottom: 15px;
+ }
+
+ .main-menu.show {
+ display: flex;
+ }
+
+ .main-menu a {
+ padding: 10px;
+ border-bottom: 1px solid #333;
+ }
+
+ .main-menu a:last-child {
+ border-bottom: none;
+ }
+
+ /* Search box */
+ .search-container {
+ width: 100%;
+ padding: 10px;
+ background-color: var(--background-color);
+ margin-bottom: 15px;
+ }
+
+ .search-form {
+ display: flex;
+ flex-direction: column;
+ }
+
+ .search-input {
+ color: var(--link-color);
+ background-color: #3A3A3A;
+ border: 1px solid var(--link-color);
+ padding: 12px;
+ margin-bottom: 10px;
+ text-align: center;
+ border-radius: 4px;
+ font-size: 16px; /* Larger for touch */
+ }
+
+ input[type="submit"] {
+ color: var(--link-color);
+ background-color: black;
+ padding: 12px;
+ border: 1px solid var(--link-color);
+ cursor: pointer;
+ border-radius: 4px;
+ font-weight: bold;
+ font-size: 16px;
+ }
+
+ /* Content sections */
+ .content-section {
+ margin-bottom: 20px;
+ padding: 0 10px;
+ }
+
+ .section-title {
+ color: var(--link-color);
+ font-size: 1.2em;
+ border-bottom: 1px solid var(--border-color);
+ padding-bottom: 5px;
+ margin-bottom: 10px;
+ }
+
+ .link-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
+ gap: 10px;
+ }
+
+ .link-item {
+ padding: 10px;
+ background-color: #1a1a1a;
+ border: 1px solid #333;
+ border-radius: 4px;
+ text-align: center;
+ }
+
+ /* Gallery items for mobile */
+ .gallery-container {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
+ gap: 15px;
+ padding: 10px;
+ }
+
+ .gallery-item {
+ border: 2px ridge var(--border-color);
+ border-radius: 4px;
+ overflow: hidden;
+ }
+
+ .gallery-item:hover {
+ border: 2px ridge var(--link-color);
+ }
+
+ .gallery-item img {
+ width: 100%;
+ height: auto;
+ display: block;
+ }
+
+ .gallery-desc {
+ padding: 8px;
+ text-align: center;
+ font-size: 0.9em;
+ color: var(--link-color);
+ background-color: #1a1a1a;
+ }
+
+ /* Date and time */
+ .datetime {
+ padding: 10px;
+ text-align: center;
+ margin: 15px 0;
+ }
+
+ #realtime-date, #realtime-clock {
+ color: var(--link-color);
+ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8);
+ margin: 5px 0;
+ }
+
+ /* Footer */
+ .footer {
+ padding: 15px;
+ text-align: center;
+ border-top: 1px solid #333;
+ margin-top: 20px;
+ }
+
+ .footer-links {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: 10px;
+ }
+
+ .footer-links a {
+ padding: 5px;
+ }
+
+ /* Collapsible sections */
+ .collapsible {
+ background-color: #1a1a1a;
+ color: var(--link-color);
+ cursor: pointer;
+ padding: 12px;
+ width: 100%;
+ border: 1px solid var(--border-color);
+ text-align: left;
+ outline: none;
+ font-size: 1em;
+ font-weight: bold;
+ margin-bottom: 5px;
+ border-radius: 4px;
+ }
+
+ .active, .collapsible:hover {
+ background-color: #222;
+ }
+
+ .collapsible-content {
+ padding: 0 10px;
+ display: none;
+ overflow: hidden;
+ background-color: #1a1a1a;
+ margin-bottom: 10px;
+ border-radius: 0 0 4px 4px;
+ }
+
+ /* XXX Verification Modal */
+ .xxx-modal {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.9);
+ z-index: 1000;
+ justify-content: center;
+ align-items: center;
+ }
+
+ .xxx-modal-content {
+ background-color: var(--menu-background);
+ padding: 20px;
+ border-radius: 8px;
+ border: 2px solid var(--link-color);
+ text-align: center;
+ max-width: 90%;
+ width: 350px;
+ }
+
+ .xxx-logo {
+ width: 80px;
+ height: 80px;
+ margin: 0 auto 15px;
+ background-color: #333;
+ border-radius: 50%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 24px;
+ color: var(--link-color);
+ border: 2px solid var(--link-color);
+ }
+
+ .xxx-buttons {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 20px;
+ }
+
+ .xxx-button {
+ padding: 10px 20px;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-weight: bold;
+ }
+
+ .xxx-confirm {
+ background-color: #4CAF50;
+ color: white;
+ }
+
+ .xxx-deny {
+ background-color: #f44336;
+ color: white;
+ }
+
+ /* XXX Section */
+ .xxx-section {
+ margin: 20px 0;
+ text-align: center;
+ }
+
+ .xxx-toggle {
+ padding: 12px 20px;
+ background-color: #333;
+ color: var(--link-color);
+ border: 1px solid var(--link-color);
+ border-radius: 4px;
+ cursor: pointer;
+ font-weight: bold;
+ margin-bottom: 15px;
+ }
+
+ .xxx-list {
+ position: fixed;
+ bottom: 20px;
+ right: 20px;
+ background-color: var(--menu-background);
+ border: 1px solid var(--link-color);
+ border-radius: 8px;
+ padding: 10px;
+ max-width: 200px;
+ display: none;
+ z-index: 999;
+ }
+
+ .xxx-list-title {
+ color: var(--link-color);
+ font-weight: bold;
+ margin-bottom: 8px;
+ text-align: center;
+ border-bottom: 1px solid #444;
+ padding-bottom: 5px;
+ }
+
+ .xxx-list-item {
+ margin: 5px 0;
+ text-align: center;
+ }
+
+ /* Responsive adjustments */
+ @media (min-width: 768px) {
+ body {
+ font-size: 16px;
+ max-width: 800px;
+ margin: 0 auto;
+ }
+
+ .link-grid {
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
+ }
+
+ .gallery-container {
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
+ }
+ }
diff --git a/assets/css/pages/startpage-test.css b/assets/css/pages/startpage-test.css
new file mode 100644
index 0000000..14996cb
--- /dev/null
+++ b/assets/css/pages/startpage-test.css
@@ -0,0 +1,86 @@
+body {
+ font-family: 'Inter', sans-serif; /* Using Inter font */
+ margin: 0; /* Remove default body margin */
+ padding: 20px;
+ background-color: #f0f0f0;
+ display: flex;
+ flex-direction: column; /* Arrange content vertically */
+ justify-content: center;
+ align-items: center;
+ min-height: 100vh;
+ }
+
+ h1 {
+ text-align: center;
+ color: #333;
+ margin-bottom: 20px;
+ font-size: 2em; /* Larger heading */
+ }
+
+ .responsive-container {
+ width: 95%; /* Make it wider to accommodate the full page embed */
+ max-width: 1200px; /* Max width for larger screens to prevent it from getting too wide */
+ padding: 10px;
+ box-sizing: border-box;
+ border: 1px solid #ccc;
+ border-radius: 12px; /* Slightly larger rounded corners */
+ box-shadow: 0 6px 15px rgba(0, 0, 0, 0.15); /* More prominent shadow */
+ background-color: white;
+ margin-bottom: 20px;
+ overflow: hidden; /* Ensure content stays within rounded corners */
+ }
+
+ .iframe-wrapper {
+ position: relative;
+ /* Maintain an aspect ratio that suits a full webpage, e.g., 16:9 or taller */
+ /* A good starting point for a full webpage, adjust as needed for optimal viewing */
+ padding-bottom: 120%; /* Height will be 120% of the width, making it taller */
+ height: 0;
+ overflow: hidden;
+ border-radius: 8px; /* Slightly smaller rounded corners for inner frame */
+ }
+
+ .iframe-wrapper iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: none;
+ border-radius: 8px;
+ }
+
+ .desc {
+ padding: 15px;
+ text-align: center;
+ font-size: 1.1em;
+ color: #555;
+ line-height: 1.6;
+ }
+
+ .desc a {
+ color: #007bff;
+ text-decoration: none;
+ font-weight: bold;
+ transition: color 0.3s ease; /* Smooth transition for hover effect */
+ }
+
+ .desc a:hover {
+ text-decoration: underline;
+ color: #0056b3; /* Darker blue on hover */
+ }
+
+ /* Responsive adjustments for the container */
+ @media only screen and (max-width: 768px) {
+ .responsive-container {
+ width: 100%; /* Full width on smaller screens */
+ padding: 5px;
+ border-radius: 0; /* No rounded corners on very small screens for edge-to-edge */
+ }
+ .iframe-wrapper {
+ padding-bottom: 150%; /* Make it even taller on mobile if needed */
+ }
+ body {
+ padding: 10px;
+ }
+ }
diff --git a/assets/css/pages/test.css b/assets/css/pages/test.css
new file mode 100644
index 0000000..4eacfa4
--- /dev/null
+++ b/assets/css/pages/test.css
@@ -0,0 +1,52 @@
+html, body { margin: 0; padding: 0; }
+ table.layout { border-collapse: collapse; width: 100%; }
+ td.content { padding: 0; }
+ .logo { float: left; margin-right: 1rem; }
+
+ a {
+ text-decoration: none;
+ background-color: transparent;
+ transition: background-color 0.2s, color 0.2s;
+ padding: 4px;
+ border-radius: 4px;
+ }
+ a:hover { background-color: red; color: white; }
+ a.no-hover-box:hover { background-color: transparent; color: red; }
+
+ .sidebar {
+ position: fixed;
+ top: 0;
+ right: 0;
+ width: 250px;
+ max-height: 100vh;
+ overflow-y: auto;
+ background-color: #ffd;
+ transform: translateX(100%);
+ transition: transform 0.3s ease-in-out;
+ }
+ .sidebar.visible { transform: translateX(0); }
+
+ .links-container {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ margin-bottom: 1rem;
+ }
+ .links-container ul {
+ flex: 1 1 200px;
+ list-style: none;
+ margin: 0; padding: 0;
+ }
+ .links-container ul li { margin-bottom: 0.75rem; word-wrap: break-word; }
+ .links-container ul li a {
+ display: inline-block;
+ max-width: 100%;
+ word-wrap: break-word;
+ color: #0366d6;
+ transition: color 0.3s ease;
+ }
+ .links-container ul li a:hover { color: #023e8a; text-decoration: underline; }
+
+ @media (max-width: 600px) {
+ .links-container { flex-direction: column; }
+ }
diff --git a/assets/css/pages/test_jp.css b/assets/css/pages/test_jp.css
new file mode 100644
index 0000000..4eacfa4
--- /dev/null
+++ b/assets/css/pages/test_jp.css
@@ -0,0 +1,52 @@
+html, body { margin: 0; padding: 0; }
+ table.layout { border-collapse: collapse; width: 100%; }
+ td.content { padding: 0; }
+ .logo { float: left; margin-right: 1rem; }
+
+ a {
+ text-decoration: none;
+ background-color: transparent;
+ transition: background-color 0.2s, color 0.2s;
+ padding: 4px;
+ border-radius: 4px;
+ }
+ a:hover { background-color: red; color: white; }
+ a.no-hover-box:hover { background-color: transparent; color: red; }
+
+ .sidebar {
+ position: fixed;
+ top: 0;
+ right: 0;
+ width: 250px;
+ max-height: 100vh;
+ overflow-y: auto;
+ background-color: #ffd;
+ transform: translateX(100%);
+ transition: transform 0.3s ease-in-out;
+ }
+ .sidebar.visible { transform: translateX(0); }
+
+ .links-container {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ margin-bottom: 1rem;
+ }
+ .links-container ul {
+ flex: 1 1 200px;
+ list-style: none;
+ margin: 0; padding: 0;
+ }
+ .links-container ul li { margin-bottom: 0.75rem; word-wrap: break-word; }
+ .links-container ul li a {
+ display: inline-block;
+ max-width: 100%;
+ word-wrap: break-word;
+ color: #0366d6;
+ transition: color 0.3s ease;
+ }
+ .links-container ul li a:hover { color: #023e8a; text-decoration: underline; }
+
+ @media (max-width: 600px) {
+ .links-container { flex-direction: column; }
+ }
diff --git a/assets/css/pages/test_zh.css b/assets/css/pages/test_zh.css
new file mode 100644
index 0000000..4eacfa4
--- /dev/null
+++ b/assets/css/pages/test_zh.css
@@ -0,0 +1,52 @@
+html, body { margin: 0; padding: 0; }
+ table.layout { border-collapse: collapse; width: 100%; }
+ td.content { padding: 0; }
+ .logo { float: left; margin-right: 1rem; }
+
+ a {
+ text-decoration: none;
+ background-color: transparent;
+ transition: background-color 0.2s, color 0.2s;
+ padding: 4px;
+ border-radius: 4px;
+ }
+ a:hover { background-color: red; color: white; }
+ a.no-hover-box:hover { background-color: transparent; color: red; }
+
+ .sidebar {
+ position: fixed;
+ top: 0;
+ right: 0;
+ width: 250px;
+ max-height: 100vh;
+ overflow-y: auto;
+ background-color: #ffd;
+ transform: translateX(100%);
+ transition: transform 0.3s ease-in-out;
+ }
+ .sidebar.visible { transform: translateX(0); }
+
+ .links-container {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ margin-bottom: 1rem;
+ }
+ .links-container ul {
+ flex: 1 1 200px;
+ list-style: none;
+ margin: 0; padding: 0;
+ }
+ .links-container ul li { margin-bottom: 0.75rem; word-wrap: break-word; }
+ .links-container ul li a {
+ display: inline-block;
+ max-width: 100%;
+ word-wrap: break-word;
+ color: #0366d6;
+ transition: color 0.3s ease;
+ }
+ .links-container ul li a:hover { color: #023e8a; text-decoration: underline; }
+
+ @media (max-width: 600px) {
+ .links-container { flex-direction: column; }
+ }
diff --git a/assets/css/pages/vinyls.css b/assets/css/pages/vinyls.css
new file mode 100644
index 0000000..ecf8b4b
--- /dev/null
+++ b/assets/css/pages/vinyls.css
@@ -0,0 +1,14 @@
+.vinyl-grid{
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
+ gap: var(--space-md);
+ margin-top: var(--space-md);
+}
+
+.vinyl-grid img{
+ width: 100%;
+ height: auto;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ background: var(--bg);
+}
diff --git a/assets/css/site.css b/assets/css/site.css
new file mode 100644
index 0000000..4434b60
--- /dev/null
+++ b/assets/css/site.css
@@ -0,0 +1,891 @@
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+:root{
+ --bg: #ffd;
+ --ink: #000;
+ --muted: #333;
+ --accent: #d22;
+ --gold: #c69214;
+ --border: #caa;
+ --shadow: rgba(0,0,0,.10);
+
+ --wrap: 960px;
+ --r: 6px;
+
+ /* Unified spacing scale */
+ --space-xs: 0.25rem;
+ --space-sm: 0.5rem;
+ --space-md: 0.75rem;
+ --space-lg: 1rem;
+ --space-xl: 1.35rem;
+ --space-2xl: 1.75rem;
+ --space-3xl: 2.5rem;
+
+ /* Typography scale */
+ --fs-xs: 0.85rem;
+ --fs-sm: 0.9rem;
+ --fs-base: 1rem;
+ --fs-lg: 1.05rem;
+ --fs-xl: 1.15rem;
+ --fs-2xl: 1.5rem;
+ --fs-3xl: 1.8rem;
+}
+
+/* --- UNIFIED HEADER BUTTONS STYLE --- */
+.header-button {
+ font-size: var(--fs-sm);
+ border: 1px solid var(--border);
+ padding: 4px 8px;
+ border-radius: var(--r);
+ color: var(--ink);
+ text-decoration: none;
+ background: var(--bg);
+ cursor: pointer;
+ font-family: inherit;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ transition: background .15s, color .15s, border-color .15s;
+}
+
+.header-button:hover {
+ background: var(--accent);
+ color: #000;
+ border-color: var(--accent);
+}
+
+/* Reset */
+*, *::before, *::after { box-sizing: border-box; }
+html, body { height: 100%; }
+body { margin: 0; }
+
+body{
+ font-family: "Inter", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
+ line-height: 1.6;
+ background: var(--bg);
+ color: var(--ink);
+ font-size: var(--fs-base);
+ /* Prevent horizontal scrollbar when menu icon rotates */
+ overflow-x: hidden;
+}
+
+/* Typography */
+p{
+ margin: var(--space-sm) 0;
+ line-height: 1.6;
+}
+p:first-child{ margin-top: 0; }
+p:last-child{ margin-bottom: 0; }
+
+img{ max-width: 100%; height: auto; display: block; }
+video{ display: block; }
+
+/* Accessibility helpers */
+.skip-link{
+ position: absolute;
+ left: -999px;
+ top: 0;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ padding: .5rem .75rem;
+ border-radius: var(--r);
+ z-index: 2000;
+}
+.skip-link:focus{ left: 1rem; top: 1rem; }
+
+:focus-visible{
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+
+/* Layout */
+.wrap{
+ max-width: var(--wrap);
+ margin: 0 auto;
+ padding: var(--space-xl) var(--space-lg) var(--space-3xl);
+}
+
+/* Utilities */
+.stack{
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-xl);
+}
+
+header.site-header, footer.site-footer{
+ background: var(--bg);
+ border-bottom: 1px solid var(--border);
+}
+
+header.site-header{
+ position: sticky;
+ top: 0;
+ z-index: 1000;
+}
+
+.header-inner{
+ max-width: var(--wrap);
+ margin: 0 auto;
+ padding: var(--space-md) var(--space-lg);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: var(--space-lg);
+ flex-wrap: wrap;
+}
+
+.brand{
+ display: flex;
+ align-items: center;
+ gap: var(--space-md);
+ min-width: 240px;
+}
+
+.logo{
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: var(--r);
+}
+.logo img{
+ height: 48px;
+ width: 48px;
+ object-fit: contain;
+ border: 2px solid #000;
+ border-radius: var(--r);
+}
+
+header.site-header .logo:hover img,
+header.site-header .logo:focus-visible img{
+ border-color: var(--accent);
+}
+
+.brand-text{
+ display: flex;
+ flex-direction: column;
+ line-height: 1.2;
+}
+.brand-text strong{
+ font-size: var(--fs-lg);
+ color: var(--gold);
+ letter-spacing: .2px;
+}
+.brand-text span{
+ font-size: var(--fs-sm);
+ color: var(--muted);
+}
+
+.header-controls{
+ display: flex;
+ align-items: center;
+ gap: var(--space-md);
+}
+
+/* Links (match startpage hover) */
+a{
+ color: var(--accent);
+ text-decoration: none;
+ transition: 0.1s;
+}
+a:hover{
+ background: var(--accent);
+ color: #000 !important;
+}
+
+/* Menu */
+.menu-wrapper{ position: relative; }
+
+#menu-toggle{
+ width: 44px;
+ height: 44px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 22px;
+ line-height: 1;
+ transition: transform .25s ease;
+ border: 1px solid #000;
+ border-radius: var(--r);
+ background: var(--bg);
+ color: var(--ink);
+ padding: 0;
+}
+
+#menu-toggle:hover {
+ background: var(--accent);
+ color: #000;
+ border-color: #000;
+}
+
+#menu-toggle.active{
+ transform: rotate(90deg);
+ background: var(--bg);
+ color: var(--ink);
+ border-color: #000;
+}
+
+#menu-toggle.active:hover{
+ background: var(--accent);
+ color: #000;
+ border-color: #000;
+}
+
+nav.site-nav{
+ position: absolute;
+ right: 0;
+ top: calc(100% + var(--space-xs));
+ background: var(--bg);
+ border: 1px solid var(--ink);
+ border-radius: var(--r);
+ padding: var(--space-md) var(--space-md);
+ min-width: 200px;
+ box-shadow: 0 10px 22px var(--shadow);
+ z-index: 1200;
+}
+nav.site-nav ul{ list-style: none; margin: 0; padding: 0; }
+nav.site-nav li{ margin: var(--space-sm) 0; }
+nav.site-nav a{
+ display: block;
+ padding: var(--space-xs) var(--space-xs);
+ transition: background .15s, color .15s;
+ color: var(--ink);
+}
+nav.site-nav a:hover{ background: var(--accent); color: #000; }
+
+/* Nav sections */
+nav.site-nav .nav-section{ margin-bottom: var(--space-md); }
+nav.site-nav .nav-section:last-child{ margin-bottom: 0; }
+nav.site-nav .nav-section + .nav-section{
+ border-top: 1px solid var(--border);
+ padding-top: var(--space-md);
+}
+nav.site-nav .nav-label{
+ font-size: var(--fs-xs);
+ font-weight: 600;
+ color: var(--muted);
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ margin-bottom: var(--space-xs);
+ padding: var(--space-xs);
+}
+
+/* Language dropdown */
+.lang{ position: relative; }
+
+.lang-toggle-wrapper{ display: inline-block; }
+
+.lang-menu{
+ position: absolute;
+ right: 0;
+ top: calc(100% + var(--space-xs));
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ box-shadow: 0 10px 22px var(--shadow);
+ min-width: 160px;
+ padding: var(--space-sm);
+ z-index: 1200;
+}
+.lang-menu a{
+ display: block;
+ padding: var(--space-sm) var(--space-sm);
+ color: var(--ink);
+ transition: background .15s;
+}
+.lang-menu a:hover{ background: var(--accent); color: #000; }
+
+/* Sections / cards */
+section{
+ margin: var(--space-xl) 0;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ padding: var(--space-lg);
+ background: var(--bg);
+}
+
+h1{
+ margin: 0 0 var(--space-md) 0;
+ color: var(--gold);
+ font-weight: 700;
+ font-size: var(--fs-2xl);
+ letter-spacing: .2px;
+ line-height: 1.2;
+}
+
+h2{
+ margin: 0 0 var(--space-md) 0;
+ color: var(--gold);
+ font-size: var(--fs-xl);
+ font-weight: 700;
+ letter-spacing: .1px;
+ line-height: 1.3;
+}
+
+/* CHANGELOG SPECIFIC STYLES */
+.changelog-title{
+ color: var(--gold) !important;
+ margin-bottom: var(--space-sm) !important;
+}
+
+.changelog-date{
+ font-size: var(--fs-3xl) !important;
+ font-weight: 700;
+ color: var(--muted);
+ margin: var(--space-sm) 0 var(--space-lg) 0;
+ line-height: 1.1;
+}
+
+.muted{ color: var(--muted); font-size: var(--fs-sm); }
+
+/* Video */
+.video-wrap{ margin: var(--space-md) 0 0 0; }
+.video-wrap video{
+ width: 100%;
+ height: auto;
+ max-height: 80vh;
+ background: #000;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+}
+
+/* Lists */
+.contact-list{
+ list-style: none;
+ padding: 0;
+ margin: var(--space-md) 0 0 0;
+}
+.contact-list li{ margin: var(--space-sm) 0; line-height: 1.6; }
+.contact-address{ font-style: normal; }
+
+blockquote{
+ margin: var(--space-md) 0 0 0;
+ padding-left: var(--space-md);
+ border-left: 3px solid var(--border);
+ color: var(--muted);
+ font-style: italic;
+ font-size: var(--fs-sm);
+ line-height: 1.6;
+}
+
+/* Iframe loading overlay */
+.iframe-clip{ position: relative; }
+.iframe-clip iframe{ position: relative; z-index: 1; }
+.iframe-clip.is-loading::before{
+ content: "Loading...";
+ position: absolute;
+ inset: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(255, 255, 221, 0.92);
+ color: var(--ink);
+ font-size: var(--fs-sm);
+ z-index: 2;
+}
+.iframe-clip.is-loading::after{
+ content: "";
+ position: absolute;
+ width: 22px;
+ height: 22px;
+ border: 2px solid var(--border);
+ border-top-color: var(--accent);
+ border-radius: 50%;
+ top: calc(50% + 16px);
+ left: 50%;
+ transform: translateX(-50%);
+ animation: iframe-spin 0.8s linear infinite;
+ z-index: 3;
+}
+@keyframes iframe-spin{
+ to { transform: translateX(-50%) rotate(360deg); }
+}
+
+/* Friends grid */
+.friends-list{
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: var(--space-md);
+ margin: var(--space-md) 0 0 0;
+ padding: 0;
+ list-style: none;
+}
+.friends-list a{
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 42px;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ padding: var(--space-sm) var(--space-sm);
+ color: var(--accent);
+ transition: background .15s, color .15s, border-color .15s, box-shadow .15s;
+}
+.friends-list a:hover{
+ background: var(--accent);
+ color: #000;
+ border-color: var(--accent);
+ box-shadow: 0 1px 0 var(--accent) inset;
+}
+
+/* Tiles */
+.tile-grid{
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
+ gap: var(--space-md);
+ list-style: none;
+ padding: 0;
+ margin: var(--space-md) 0 0 0;
+}
+.tile-grid a{
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 64px;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ padding: var(--space-sm);
+ transition: background .15s, border-color .15s, box-shadow .15s;
+}
+.tile-grid a:hover{
+ background: var(--accent);
+ border-color: var(--accent);
+ box-shadow: 0 1px 0 var(--accent) inset;
+}
+.tile-grid img{ width: 100%; height: 100%; object-fit: contain; }
+
+/* Embeds */
+.embed-frame{
+ display: block;
+ width: 100%;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ background: var(--bg);
+ margin: var(--space-md) 0 0 0;
+}
+.guestbook-form-frame{
+ height: 350px;
+ min-height: 350px;
+}
+.iframe-clip{
+ --sb: 18px;
+ overflow: hidden;
+ border-radius: var(--r);
+ border: 1px solid var(--border);
+}
+.iframe-clip > iframe{
+ width: calc(100% + var(--sb));
+ height: calc(100% + var(--sb));
+ border: 0;
+}
+.guestbook-frame{ min-height: 90vh; }
+
+#guestbook-comments-iframe {
+ min-height: 600px; /* Adjusted to show more comments */
+}
+
+.changelog-frame{ min-height: 360px; }
+
+/* Audio */
+.audio-wrap{ margin: var(--space-md) 0 0 0; }
+audio{ width: 100%; max-width: 400px; }
+
+/* Blog + changelog lists */
+#blog-list,
+#changelog-list{ margin: var(--space-md) 0 0 0; }
+#blog-list > div:first-child,
+#changelog-list > div:first-child{ margin-bottom: var(--space-md); }
+#blog-list ol,
+#changelog-list ol{ margin: var(--space-md) 0 0 0; padding-left: var(--space-xl); }
+#blog-list li,
+#changelog-list li{ margin: 0 0 var(--space-md) 0; line-height: 1.6; }
+#blog-list .muted,
+#changelog-list .muted{ font-size: var(--fs-sm); margin-top: var(--space-xs); }
+#blog-list .blog-more{ margin-top: var(--space-xs); }
+#changelog-list .changelog-body{ margin-top: var(--space-xs); white-space: pre-line; }
+#changelog-list time{ color: var(--accent); }
+
+/* Footer */
+footer.site-footer{ border-top: 1px solid var(--border); border-bottom: none; }
+.footer-inner{
+ max-width: var(--wrap);
+ margin: 0 auto;
+ padding: var(--space-lg) var(--space-lg) var(--space-2xl);
+ color: var(--muted);
+ font-size: var(--fs-sm);
+ line-height: 1.6;
+}
+.badge{
+ display: inline-flex;
+ margin-top: var(--space-sm);
+ border-radius: var(--r);
+ padding: var(--space-xs);
+ border: 1px solid var(--border);
+ background: var(--bg);
+ transition: border-color .15s;
+}
+.badge:hover{ border-color: var(--accent); }
+
+/* Reset Button */
+.reset-button{
+ font-size: var(--fs-sm);
+ border: 1px solid #000; /* Black border */
+ padding: 4px 8px;
+ border-radius: var(--r);
+ color: #000; /* Black text */
+ background: #ffd; /* Light yellow background */
+ cursor: pointer;
+ font-family: inherit;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ transition: background .15s, color .15s, border-color .15s;
+}
+
+.reset-button:hover {
+ background: var(--accent); /* Dark red on hover */
+ color: #000; /* Black text on hover */
+ border-color: #000; /* Black border on hover */
+}
+
+@media (max-width: 600px){
+ .tile-grid{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+ .tile-grid li{
+ margin-bottom: 1rem;
+ text-align: center;
+ }
+ .contact-list{
+ padding-left: 20px;
+ }
+ .friends-list{
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ }
+}
+
+@media (max-width: 520px){
+ header.site-header{ position: sticky; }
+ .header-inner{ position: relative; }
+ nav.site-nav{
+ min-width: 200px;
+ max-width: calc(100vw - 2 * var(--space-lg));
+ }
+ .lang-menu{
+ right: auto;
+ left: 0;
+ max-width: calc(100vw - 32px);
+ }
+ #menu-toggle{ display: inline-flex; transition: transform .25s ease; }
+ #menu-toggle.active{ transform: rotate(90deg); }
+}
+
+@media (prefers-reduced-motion: reduce){
+ *{ transition: none !important; scroll-behavior: auto !important; }
+ #menu-toggle.active{ transform: none; }
+}
+
+/* From style.css */
+h1 {
+ font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif;
+ font-size: 1.875rem; /* 30px / 16px (base font size) */
+ padding-left: 40px;
+}
+
+pre {
+ font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif;
+ font-size: 12px;
+ padding-left: 40px;
+}
+
+.button1 {
+ background-color: black;
+ font-family: Comic Sans MS;
+ font-weight: 300;
+}
+
+.member {
+ float: left;
+ width: calc(20% - 2%); /* Adjust width to account for margins */
+ margin: 1% 1% 45px 1%;
+}
+
+.name {
+ bottom: 0px;
+}
+
+.member img {
+ width: 50%;
+ display: block;
+}
+
+ul.flowxl {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 0;
+}
+
+ul.flowxl > li {
+ list-style-type: none;
+ text-align: center;
+ width: var(--xiconsize);
+ min-width: var(--xiconsize);
+ max-width: var(--xiconsize);
+ max-height: calc(var(--xiconsize) + 60px);
+ padding: 2px;
+ margin: 0.125rem; /* Use rem for margin */
+ overflow: hidden;
+ font-size: 1rem;
+ line-height: 1;
+}
+
+ul.flowxl > li > a {
+ display: block;
+ line-height: 1;
+ font-size: 1.2rem;
+}
+
+ul.flowxl li > a > img,
+ul.flowxl li > img {
+ display: block;
+ border-radius: 9px;
+ width: auto;
+ max-width: var(--xiconsize);
+ max-height: var(--xiconsize);
+ overflow: hidden;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+ul.flowxl li > a > img[src$=".svg"] {
+ max-width: 170px;
+ max-height: 170px;
+}
+
+.country-img {
+ height: 12.5rem; /* Use rem units for height */
+ width: 250px; /* Desired width */
+ object-fit: contain; /* Scales image to fit within the box while maintaining aspect ratio */
+ max-width: 100%; /* Ensures responsiveness */
+}
+
+.countries {
+ flex-wrap: wrap; /* Ensures images wrap if they exceed container width */
+ gap: 10px; /* Adds spacing between images */
+ justify-content: center; /* Centers the images horizontally */
+}
+
+.vpn-logo {
+ width: 200px; /* Set max-width for scaling */
+ max-width: 100%; /* Responsive width */
+ height: auto; /* Maintain aspect ratio */
+ object-fit: contain; /* Handle scaling gracefully */
+}
+
+.toesu-logo {
+ width: 200px; /* Set the default width */
+ max-width: 100%; /* Ensure image scales on smaller screens */
+ height: auto; /* Maintain original aspect ratio */
+ object-fit: contain; /* Gracefully handle image scaling */
+}
+
+@import url('https://fonts.googleapis.com/css2?family=Anonymous+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap');
+
+
diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2
new file mode 100644
index 0000000..d750914
--- /dev/null
+++ b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2
Binary files differ
diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2
new file mode 100644
index 0000000..d15208d
--- /dev/null
+++ b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2
Binary files differ
diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2
new file mode 100644
index 0000000..024f077
--- /dev/null
+++ b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2
Binary files differ
diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2
new file mode 100644
index 0000000..479d010
--- /dev/null
+++ b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2
Binary files differ
diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2
new file mode 100644
index 0000000..de83a9c
--- /dev/null
+++ b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2
Binary files differ
diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2
new file mode 100644
index 0000000..6e7141f
--- /dev/null
+++ b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2
Binary files differ
diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2
new file mode 100644
index 0000000..a40c469
--- /dev/null
+++ b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2
Binary files differ
diff --git a/assets/js/includes.js b/assets/js/includes.js
new file mode 100644
index 0000000..4af99f4
--- /dev/null
+++ b/assets/js/includes.js
@@ -0,0 +1,32 @@
+(async function () {
+ async function loadInto(selector, url) {
+ const mount = document.querySelector(selector);
+ if (!mount) return;
+
+ try {
+ const res = await fetch(url);
+ if (!res.ok) throw new Error("HTTP " + res.status);
+ const html = await res.text();
+ mount.innerHTML = html;
+ } catch (e) {
+ // Fail open: if includes fail, keep page usable.
+ // Intentionally no console noise.
+ }
+ }
+
+ // Pages opt-in by including: <div data-include="header"></div>
+ // and/or <div data-include="footer"></div>
+ await Promise.all([
+ loadInto('[data-include="header"]', "/partials/header.html"),
+ loadInto('[data-include="footer"]', "/partials/footer.html"),
+ ]);
+
+ // If a page uses includes, it likely removed the built-in header/footer.
+ // Re-run site.js behaviors after injection.
+ if (document.querySelector('[data-include="header"], [data-include="footer"]')) {
+ const s = document.createElement("script");
+ s.src = "/assets/js/site.js";
+ s.defer = true;
+ document.head.appendChild(s);
+ }
+})();
diff --git a/assets/js/pages/404.js b/assets/js/pages/404.js
new file mode 100644
index 0000000..a97a5b1
--- /dev/null
+++ b/assets/js/pages/404.js
@@ -0,0 +1,5 @@
+(function(){
+ var el = document.getElementById('y');
+ if (!el) return;
+ el.textContent = String(new Date().getFullYear());
+ })();
diff --git a/assets/js/pages/50x.js b/assets/js/pages/50x.js
new file mode 100644
index 0000000..a97a5b1
--- /dev/null
+++ b/assets/js/pages/50x.js
@@ -0,0 +1,5 @@
+(function(){
+ var el = document.getElementById('y');
+ if (!el) return;
+ el.textContent = String(new Date().getFullYear());
+ })();
diff --git a/assets/js/pages/guestbook_jp.js b/assets/js/pages/guestbook_jp.js
new file mode 100644
index 0000000..5f3a055
--- /dev/null
+++ b/assets/js/pages/guestbook_jp.js
@@ -0,0 +1,91 @@
+document.addEventListener("DOMContentLoaded", function () {
+ const form = document.getElementById("guestbook-form");
+ const entriesContainer = document.getElementById("guestbook-entries");
+ const captchaCanvas = document.getElementById("captcha-canvas");
+ const refreshCaptchaButton = document.getElementById("refresh-captcha");
+ const captchaInput = document.getElementById("captcha-input");
+ const GUESTBOOK_KEY = "guestbookEntries";
+
+ let currentCaptcha = "";
+
+ function generateCaptcha() {
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ let captcha = "";
+ for (let i = 0; i < 6; i++) captcha += chars.charAt(Math.floor(Math.random() * chars.length));
+ return captcha;
+ }
+
+ function drawCaptcha(captcha) {
+ const ctx = captchaCanvas.getContext("2d");
+ ctx.clearRect(0, 0, captchaCanvas.width, captchaCanvas.height);
+ ctx.font = "22px Arial";
+ ctx.fillStyle = "#000";
+ ctx.fillText(captcha, 10, 32);
+ }
+
+ function refreshCaptcha() {
+ currentCaptcha = generateCaptcha();
+ drawCaptcha(currentCaptcha);
+ }
+
+ function formatMessage(message) {
+ return message
+ .split("\n")
+ .map((line) => {
+ if (line.startsWith(">")) return `<span class="anonymous">${line}</span>`;
+ return line;
+ })
+ .join("<br>");
+ }
+
+ function loadEntries() {
+ const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || [];
+ entriesContainer.innerHTML = "";
+
+ entries
+ .slice()
+ .reverse()
+ .forEach((entry) => {
+ const entryElement = document.createElement("div");
+ entryElement.className = "entry";
+
+ const nameElement = document.createElement("h4");
+ if (entry.name === "Anonymous") nameElement.className = "anonymous";
+ nameElement.textContent = entry.name;
+ entryElement.appendChild(nameElement);
+
+ const messageElement = document.createElement("p");
+ messageElement.innerHTML = formatMessage(entry.message);
+ entryElement.appendChild(messageElement);
+
+ entriesContainer.appendChild(entryElement);
+ });
+ }
+
+ form.addEventListener("submit", function (event) {
+ event.preventDefault();
+
+ let name = document.getElementById("name").value.trim();
+ if (!name) name = "Anonymous";
+
+ const message = document.getElementById("message").value.trim();
+ const captchaValue = captchaInput.value.trim();
+
+ if (name && message && captchaValue === currentCaptcha) {
+ const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || [];
+ entries.push({ name, message });
+ localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries));
+
+ form.reset();
+ document.getElementById("name").value = "Anonymous";
+ loadEntries();
+ refreshCaptcha();
+ } else {
+ alert("CAPTCHA is incorrect. Please try again.");
+ }
+ });
+
+ refreshCaptcha();
+ refreshCaptchaButton.addEventListener("click", refreshCaptcha);
+ loadEntries();
+ });
diff --git a/assets/js/pages/guestbook_zh.js b/assets/js/pages/guestbook_zh.js
new file mode 100644
index 0000000..5f3a055
--- /dev/null
+++ b/assets/js/pages/guestbook_zh.js
@@ -0,0 +1,91 @@
+document.addEventListener("DOMContentLoaded", function () {
+ const form = document.getElementById("guestbook-form");
+ const entriesContainer = document.getElementById("guestbook-entries");
+ const captchaCanvas = document.getElementById("captcha-canvas");
+ const refreshCaptchaButton = document.getElementById("refresh-captcha");
+ const captchaInput = document.getElementById("captcha-input");
+ const GUESTBOOK_KEY = "guestbookEntries";
+
+ let currentCaptcha = "";
+
+ function generateCaptcha() {
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ let captcha = "";
+ for (let i = 0; i < 6; i++) captcha += chars.charAt(Math.floor(Math.random() * chars.length));
+ return captcha;
+ }
+
+ function drawCaptcha(captcha) {
+ const ctx = captchaCanvas.getContext("2d");
+ ctx.clearRect(0, 0, captchaCanvas.width, captchaCanvas.height);
+ ctx.font = "22px Arial";
+ ctx.fillStyle = "#000";
+ ctx.fillText(captcha, 10, 32);
+ }
+
+ function refreshCaptcha() {
+ currentCaptcha = generateCaptcha();
+ drawCaptcha(currentCaptcha);
+ }
+
+ function formatMessage(message) {
+ return message
+ .split("\n")
+ .map((line) => {
+ if (line.startsWith(">")) return `<span class="anonymous">${line}</span>`;
+ return line;
+ })
+ .join("<br>");
+ }
+
+ function loadEntries() {
+ const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || [];
+ entriesContainer.innerHTML = "";
+
+ entries
+ .slice()
+ .reverse()
+ .forEach((entry) => {
+ const entryElement = document.createElement("div");
+ entryElement.className = "entry";
+
+ const nameElement = document.createElement("h4");
+ if (entry.name === "Anonymous") nameElement.className = "anonymous";
+ nameElement.textContent = entry.name;
+ entryElement.appendChild(nameElement);
+
+ const messageElement = document.createElement("p");
+ messageElement.innerHTML = formatMessage(entry.message);
+ entryElement.appendChild(messageElement);
+
+ entriesContainer.appendChild(entryElement);
+ });
+ }
+
+ form.addEventListener("submit", function (event) {
+ event.preventDefault();
+
+ let name = document.getElementById("name").value.trim();
+ if (!name) name = "Anonymous";
+
+ const message = document.getElementById("message").value.trim();
+ const captchaValue = captchaInput.value.trim();
+
+ if (name && message && captchaValue === currentCaptcha) {
+ const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || [];
+ entries.push({ name, message });
+ localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries));
+
+ form.reset();
+ document.getElementById("name").value = "Anonymous";
+ loadEntries();
+ refreshCaptcha();
+ } else {
+ alert("CAPTCHA is incorrect. Please try again.");
+ }
+ });
+
+ refreshCaptcha();
+ refreshCaptchaButton.addEventListener("click", refreshCaptcha);
+ loadEntries();
+ });
diff --git a/assets/js/pages/hitcounter.js b/assets/js/pages/hitcounter.js
new file mode 100644
index 0000000..9c3f888
--- /dev/null
+++ b/assets/js/pages/hitcounter.js
@@ -0,0 +1,16 @@
+function countUniqueVisitors() {
+ const VISITOR_KEY = "uniqueVisitorCount";
+ let visitorCount = localStorage.getItem(VISITOR_KEY);
+ if (!visitorCount) visitorCount = 0;
+
+ const hasVisited = sessionStorage.getItem("hasVisited");
+ if (!hasVisited) {
+ visitorCount++;
+ localStorage.setItem(VISITOR_KEY, visitorCount);
+ sessionStorage.setItem("hasVisited", "true");
+ }
+
+ document.getElementById("visitor-counter").innerText = visitorCount;
+ }
+
+ countUniqueVisitors();
diff --git a/assets/js/pages/hitcounter_jp.js b/assets/js/pages/hitcounter_jp.js
new file mode 100644
index 0000000..9c3f888
--- /dev/null
+++ b/assets/js/pages/hitcounter_jp.js
@@ -0,0 +1,16 @@
+function countUniqueVisitors() {
+ const VISITOR_KEY = "uniqueVisitorCount";
+ let visitorCount = localStorage.getItem(VISITOR_KEY);
+ if (!visitorCount) visitorCount = 0;
+
+ const hasVisited = sessionStorage.getItem("hasVisited");
+ if (!hasVisited) {
+ visitorCount++;
+ localStorage.setItem(VISITOR_KEY, visitorCount);
+ sessionStorage.setItem("hasVisited", "true");
+ }
+
+ document.getElementById("visitor-counter").innerText = visitorCount;
+ }
+
+ countUniqueVisitors();
diff --git a/assets/js/pages/hitcounter_zh.js b/assets/js/pages/hitcounter_zh.js
new file mode 100644
index 0000000..9c3f888
--- /dev/null
+++ b/assets/js/pages/hitcounter_zh.js
@@ -0,0 +1,16 @@
+function countUniqueVisitors() {
+ const VISITOR_KEY = "uniqueVisitorCount";
+ let visitorCount = localStorage.getItem(VISITOR_KEY);
+ if (!visitorCount) visitorCount = 0;
+
+ const hasVisited = sessionStorage.getItem("hasVisited");
+ if (!hasVisited) {
+ visitorCount++;
+ localStorage.setItem(VISITOR_KEY, visitorCount);
+ sessionStorage.setItem("hasVisited", "true");
+ }
+
+ document.getElementById("visitor-counter").innerText = visitorCount;
+ }
+
+ countUniqueVisitors();
diff --git a/assets/js/pages/mstartpage-index.js b/assets/js/pages/mstartpage-index.js
new file mode 100644
index 0000000..db518ab
--- /dev/null
+++ b/assets/js/pages/mstartpage-index.js
@@ -0,0 +1,118 @@
+// Date and time functionality
+ function updateDateRealtime() {
+ const dateElement = document.getElementById("realtime-date");
+ const clockElement = document.getElementById("realtime-clock");
+
+ const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+ const months = ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"];
+
+ const now = new Date();
+
+ // Date parts
+ const dayName = days[now.getDay()];
+ const month = months[now.getMonth()];
+ const dayNumber = now.getDate();
+ const year = now.getFullYear();
+
+ const ordinal = (dayNumber > 3 && dayNumber < 21) ? 'th' :
+ (dayNumber % 10 === 1) ? 'st' :
+ (dayNumber % 10 === 2) ? 'nd' :
+ (dayNumber % 10 === 3) ? 'rd' : 'th';
+
+ dateElement.textContent = `${dayName}, ${month} ${dayNumber}${ordinal}, ${year}.`;
+
+ // Clock parts (12-hour format)
+ let hours = now.getHours();
+ const minutes = now.getMinutes();
+ const seconds = now.getSeconds();
+
+ const period = hours >= 12 ? 'PM' : 'AM';
+ hours = hours % 12 || 12;
+
+ const formattedHours = hours.toString().padStart(2, "0");
+ const formattedMinutes = minutes.toString().padStart(2, "0");
+ const formattedSeconds = seconds.toString().padStart(2, "0");
+
+ clockElement.textContent = `${formattedHours}:${formattedMinutes}:${formattedSeconds} ${period}`;
+ }
+
+ updateDateRealtime();
+ setInterval(updateDateRealtime, 1000);
+
+ // Menu toggle functionality
+ document.getElementById('menu-toggle').addEventListener('click', function() {
+ const menu = document.getElementById('main-menu');
+ menu.classList.toggle('show');
+ });
+
+ // Collapsible sections
+ const collapsibles = document.getElementsByClassName("collapsible");
+
+ for (let i = 0; i < collapsibles.length; i++) {
+ collapsibles[i].addEventListener("click", function() {
+ this.classList.toggle("active");
+ const content = this.nextElementSibling;
+ if (content.style.display === "block") {
+ content.style.display = "none";
+ } else {
+ content.style.display = "block";
+ }
+ });
+ }
+
+ // XXX Verification functionality
+ const xxxToggle = document.getElementById('xxx-toggle');
+ const xxxModal = document.getElementById('xxx-modal');
+ const xxxConfirm = document.getElementById('xxx-confirm');
+ const xxxDeny = document.getElementById('xxx-deny');
+ const xxxList = document.getElementById('xxx-list');
+
+ // Check if already verified
+ let isVerified = localStorage.getItem('xxx-verified') === 'true';
+ let isContentVisible = localStorage.getItem('xxx-visible') === 'true';
+
+ // Initialize based on stored state
+ if (isVerified && isContentVisible) {
+ xxxToggle.textContent = 'Hide XXX Content';
+ xxxList.style.display = 'block';
+ } else if (isVerified && !isContentVisible) {
+ xxxToggle.textContent = 'Show XXX Content';
+ xxxList.style.display = 'none';
+ }
+
+ xxxToggle.addEventListener('click', function() {
+ if (isVerified) {
+ // Toggle visibility if already verified
+ if (xxxList.style.display === 'block') {
+ // Hide the content
+ xxxList.style.display = 'none';
+ xxxToggle.textContent = 'Show XXX Content';
+ localStorage.setItem('xxx-visible', 'false');
+ } else {
+ // Show the content
+ xxxList.style.display = 'block';
+ xxxToggle.textContent = 'Hide XXX Content';
+ localStorage.setItem('xxx-visible', 'true');
+ }
+ } else {
+ // Show verification modal if not verified
+ xxxModal.style.display = 'flex';
+ }
+ });
+
+ xxxConfirm.addEventListener('click', function() {
+ // Set verification status
+ isVerified = true;
+ localStorage.setItem('xxx-verified', 'true');
+ localStorage.setItem('xxx-visible', 'true');
+
+ // Hide modal and show content
+ xxxModal.style.display = 'none';
+ xxxList.style.display = 'block';
+ xxxToggle.textContent = 'Hide XXX Content';
+ });
+
+ xxxDeny.addEventListener('click', function() {
+ xxxModal.style.display = 'none';
+ });
diff --git a/assets/js/pages/test.js b/assets/js/pages/test.js
new file mode 100644
index 0000000..ee1c831
--- /dev/null
+++ b/assets/js/pages/test.js
@@ -0,0 +1,10 @@
+document.getElementById("lastmod").textContent = document.lastModified;
+
+document.getElementById("menu-toggle").addEventListener("click", function() {
+ const sidebar = document.getElementById("mobile-sidebar");
+ sidebar.classList.toggle("visible");
+ if (sidebar.classList.contains("visible")) {
+ sidebar.scrollTop = 0;
+ window.scrollTo(0, 0);
+ }
+ });
diff --git a/assets/js/pages/test_jp.js b/assets/js/pages/test_jp.js
new file mode 100644
index 0000000..ee1c831
--- /dev/null
+++ b/assets/js/pages/test_jp.js
@@ -0,0 +1,10 @@
+document.getElementById("lastmod").textContent = document.lastModified;
+
+document.getElementById("menu-toggle").addEventListener("click", function() {
+ const sidebar = document.getElementById("mobile-sidebar");
+ sidebar.classList.toggle("visible");
+ if (sidebar.classList.contains("visible")) {
+ sidebar.scrollTop = 0;
+ window.scrollTo(0, 0);
+ }
+ });
diff --git a/assets/js/pages/test_zh.js b/assets/js/pages/test_zh.js
new file mode 100644
index 0000000..ee1c831
--- /dev/null
+++ b/assets/js/pages/test_zh.js
@@ -0,0 +1,10 @@
+document.getElementById("lastmod").textContent = document.lastModified;
+
+document.getElementById("menu-toggle").addEventListener("click", function() {
+ const sidebar = document.getElementById("mobile-sidebar");
+ sidebar.classList.toggle("visible");
+ if (sidebar.classList.contains("visible")) {
+ sidebar.scrollTop = 0;
+ window.scrollTo(0, 0);
+ }
+ });
diff --git a/assets/js/site.js b/assets/js/site.js
new file mode 100644
index 0000000..39891b7
--- /dev/null
+++ b/assets/js/site.js
@@ -0,0 +1,415 @@
+(function () {
+ function byId(id) {
+ return document.getElementById(id);
+ }
+
+ const menuBtn = byId("menu-toggle");
+ const nav = byId("site-nav");
+
+ const langToggle = byId("lang-toggle");
+ const langMenu = byId("lang-options");
+ const currentLang = byId("current-lang");
+
+ let openDropdown = null;
+
+ function closeMenu() {
+ if (!menuBtn || !nav) return;
+ menuBtn.classList.remove("active");
+ menuBtn.setAttribute("aria-expanded", "false");
+ nav.hidden = true;
+ if (openDropdown === "menu") openDropdown = null;
+ }
+
+ function closeLang() {
+ if (!langToggle || !langMenu) return;
+ langToggle.setAttribute("aria-expanded", "false");
+ langMenu.hidden = true;
+ if (openDropdown === "lang") openDropdown = null;
+ }
+
+ function toggleMenu(e) {
+ if (!menuBtn || !nav) return;
+ e.stopPropagation();
+
+ if (openDropdown === "lang") closeLang();
+
+ const open = menuBtn.getAttribute("aria-expanded") === "true";
+ if (open) {
+ closeMenu();
+ return;
+ }
+
+ menuBtn.classList.add("active");
+ menuBtn.setAttribute("aria-expanded", "true");
+ nav.hidden = false;
+ openDropdown = "menu";
+ }
+
+ function toggleLang(e) {
+ if (!langToggle || !langMenu) return;
+ e.stopPropagation();
+
+ if (openDropdown === "menu") closeMenu();
+
+ const open = langToggle.getAttribute("aria-expanded") === "true";
+ if (open) {
+ closeLang();
+ return;
+ }
+
+ langToggle.setAttribute("aria-expanded", "true");
+ langMenu.hidden = false;
+ openDropdown = "lang";
+ }
+
+ if (nav) nav.hidden = true;
+ if (langMenu) langMenu.hidden = true;
+
+ if (menuBtn && nav) {
+ menuBtn.addEventListener("click", toggleMenu);
+ nav.addEventListener("click", (e) => e.stopPropagation());
+ }
+
+ if (langToggle && langMenu) {
+ langToggle.addEventListener("click", toggleLang);
+ langMenu.addEventListener("click", (e) => e.stopPropagation());
+ }
+
+ if ((menuBtn && nav) || (langToggle && langMenu)) {
+ document.addEventListener("click", function (e) {
+ if (
+ menuBtn && nav &&
+ (menuBtn.contains(e.target) || nav.contains(e.target))
+ ) {
+ return;
+ }
+ if (
+ langToggle && langMenu &&
+ (langToggle.contains(e.target) || langMenu.contains(e.target))
+ ) {
+ return;
+ }
+ closeMenu();
+ closeLang();
+ });
+
+ document.addEventListener("keydown", function (e) {
+ if (e.key === "Escape") {
+ closeMenu();
+ closeLang();
+ }
+ });
+ }
+
+ if (currentLang) {
+ const docLang = (document.documentElement.lang || "en").toLowerCase();
+ currentLang.textContent = docLang === "zh" ? "ZH" : docLang === "ja" ? "JA" : "EN";
+ }
+
+ if (langMenu) {
+ langMenu.querySelectorAll("a[data-lang]").forEach((a) => {
+ a.addEventListener("click", function () {
+ localStorage.setItem("preferredLang", this.getAttribute("data-lang") || "en");
+ });
+ });
+ }
+
+ // Language menu hrefs: convert current page to *_zh.html / *_jp.html.
+ // Needs to work for both:
+ // - directory URLs: /foo/ (serve /foo/index.html)
+ // - file URLs: /foo/page.html
+ function updateLangMenuHrefs() {
+ const links = document.querySelectorAll("a[data-lang-href][data-lang]");
+ if (!links.length) return;
+
+ let path = window.location.pathname || "/";
+ if (!path.startsWith("/")) path = "/" + path;
+
+ const isDir = path.endsWith("/");
+ const file = isDir ? "index.html" : (path.split("/").pop() || "index.html");
+ const base = isDir ? path : path.slice(0, -file.length);
+
+ const baseName = file.replace(/_(zh|jp)\.html$/i, ".html");
+ const map = {
+ en: baseName,
+ zh: baseName.replace(/(_(zh|jp))?\.html$/i, "_zh.html"),
+ ja: baseName.replace(/(_(zh|jp))?\.html$/i, "_jp.html"),
+ };
+
+ links.forEach((a) => {
+ const lang = (a.getAttribute("data-lang") || "en").toLowerCase();
+ const targetFile = map[lang] || map.en;
+ a.href = base + targetFile;
+ });
+ }
+
+ function updateAriaCurrent() {
+ const path = window.location.pathname || "/";
+ const normalized = path.startsWith("/") ? path : "/" + path;
+ const isDir = normalized.endsWith("/");
+ const file = isDir ? "index.html" : (normalized.split("/").pop() || "index.html");
+ const base = isDir ? normalized : normalized.slice(0, -file.length);
+ const indexPath = base + "index.html";
+ const dirPath = base || "/";
+ const candidates = new Set([normalized, indexPath, dirPath, dirPath.replace(/\/$/, "")]);
+
+ document.querySelectorAll("#site-nav a[href]").forEach((a) => {
+ const href = a.getAttribute("href") || "";
+ const hrefUrl = new URL(href, window.location.origin);
+ if (hrefUrl.origin !== window.location.origin) {
+ a.removeAttribute("aria-current");
+ return;
+ }
+ const hrefPath = hrefUrl.pathname;
+ if (candidates.has(hrefPath)) {
+ a.setAttribute("aria-current", "page");
+ } else {
+ a.removeAttribute("aria-current");
+ }
+ });
+
+ const docLang = (document.documentElement.lang || "en").toLowerCase();
+ document.querySelectorAll("#lang-options a[data-lang]").forEach((a) => {
+ const lang = (a.getAttribute("data-lang") || "en").toLowerCase();
+ if (lang === docLang) {
+ a.setAttribute("aria-current", "page");
+ } else {
+ a.removeAttribute("aria-current");
+ }
+ });
+ }
+
+ // Run once now...
+ updateLangMenuHrefs();
+ updateAriaCurrent();
+ // ...and again after layout/injection settles.
+ setTimeout(updateLangMenuHrefs, 0);
+ setTimeout(updateAriaCurrent, 0);
+
+ // Home page blog list (optional)
+ const blogList = byId("blog-list");
+ if (blogList) {
+ const blogHost = "https://blog.sillylaird.ca";
+ const ctrl = new AbortController();
+ const timeout = setTimeout(() => ctrl.abort(), 3500);
+
+ fetch(blogHost + "/api/posts.php", { signal: ctrl.signal })
+ .then((r) => r.json())
+ .then((posts) => {
+ blogList.textContent = "";
+
+ const top = document.createElement("div");
+
+ const strong = document.createElement("strong");
+ strong.textContent = "Posts";
+ top.appendChild(strong);
+
+ top.appendChild(document.createTextNode(" ("));
+ const allLink = document.createElement("a");
+ allLink.href = blogHost;
+ allLink.textContent = "all";
+ top.appendChild(allLink);
+ top.appendChild(document.createTextNode(")"));
+
+ blogList.appendChild(top);
+
+ const list = document.createElement("ol");
+ (posts || []).forEach((post) => {
+ const li = document.createElement("li");
+
+ const a = document.createElement("a");
+ a.href = blogHost + "/" + String(post.path || "").replace(/^\/+/, "");
+ a.textContent = String(post.title || "Untitled");
+
+ const date = document.createElement("div");
+ date.className = "muted";
+
+ const y = String(post.year || "");
+ const m = String(post.month || "").padStart(2, "0");
+ const d = String(post.day || "").padStart(2, "0");
+ const iso = y && m && d ? `${y}-${m}-${d}` : "";
+
+ const time = document.createElement("time");
+ if (iso) time.setAttribute("datetime", iso);
+ time.textContent = iso || "";
+
+ li.appendChild(a);
+ li.appendChild(document.createElement("br"));
+ date.appendChild(time);
+ li.appendChild(date);
+
+ list.appendChild(li);
+ });
+
+ blogList.appendChild(list);
+
+ if (!list.children.length) {
+ const empty = document.createElement("div");
+ empty.className = "muted";
+ empty.textContent = "No posts yet.";
+ blogList.appendChild(empty);
+ }
+ })
+ .catch((err) => {
+ blogList.textContent = err && err.name === "AbortError"
+ ? "Blog list timed out."
+ : "Cannot load posts right now.";
+ })
+ .finally(() => clearTimeout(timeout));
+ }
+
+ const changelogList = byId("changelog-list");
+ if (changelogList) {
+ const changelogPage = "/changelog/";
+ const ctrl = new AbortController();
+ const timeout = setTimeout(() => ctrl.abort(), 3500);
+
+ fetch(changelogPage, { signal: ctrl.signal })
+ .then((r) => r.text())
+ .then((html) => {
+ changelogList.textContent = "";
+ const doc = new DOMParser().parseFromString(html, "text/html");
+ const entries = Array.from(doc.querySelectorAll(".changelog-entry"));
+
+ const top = document.createElement("div");
+
+ const strong = document.createElement("strong");
+ strong.textContent = "Entries";
+ top.appendChild(strong);
+
+ top.appendChild(document.createTextNode(" ("));
+ const allLink = document.createElement("a");
+ allLink.href = "/changelog/";
+ allLink.textContent = "all";
+ top.appendChild(allLink);
+ top.appendChild(document.createTextNode(")"));
+
+ changelogList.appendChild(top);
+
+ const list = document.createElement("ol");
+ entries.forEach((entry) => {
+ const li = document.createElement("li");
+
+ const titleText = (entry.querySelector("strong, b")?.textContent || "").trim();
+ const timeEl = entry.querySelector("time");
+ const dateText = (timeEl?.textContent || "").trim();
+ const dateIso = (timeEl?.getAttribute("datetime") || "").trim();
+ const bodyEl = entry.querySelector(".text");
+ const bodyText = (bodyEl?.textContent || "").trim();
+
+ const title = document.createElement("strong");
+ if (titleText) {
+ title.textContent = titleText;
+ li.appendChild(title);
+
+ if (dateText) {
+ const date = document.createElement("div");
+ date.className = "muted";
+ const time = document.createElement("time");
+ if (dateIso) time.setAttribute("datetime", dateIso);
+ time.textContent = dateText;
+ date.appendChild(time);
+ li.appendChild(date);
+ }
+ } else if (dateText) {
+ title.textContent = dateText;
+ li.appendChild(title);
+ }
+
+ if (bodyText) {
+ const body = document.createElement("div");
+ body.className = "changelog-body";
+ body.textContent = bodyText;
+ li.appendChild(body);
+ }
+
+ list.appendChild(li);
+ });
+
+ changelogList.appendChild(list);
+
+ if (!list.children.length) {
+ const empty = document.createElement("div");
+ empty.className = "muted";
+ empty.textContent = "No updates yet.";
+ changelogList.appendChild(empty);
+ }
+ })
+ .catch((err) => {
+ changelogList.textContent = err && err.name === "AbortError"
+ ? "Changelog list timed out."
+ : "Cannot load changelog right now.";
+ })
+ .finally(() => clearTimeout(timeout));
+ }
+
+ const resetBtn = byId("guestbook-reset");
+ if (resetBtn) {
+ resetBtn.addEventListener("click", () => {
+ const frame = byId("guestbook-form-iframe");
+ if (!frame) return;
+ setIframeLoading(frame);
+ const src = frame.getAttribute("src") || frame.src;
+ if (src) {
+ // Reset by reloading the iframe URL (works cross-origin too).
+ frame.setAttribute("src", src);
+ return;
+ }
+ if (frame.contentWindow) frame.contentWindow.location.reload();
+ });
+ }
+
+ function setIframeLoading(frame) {
+ if (!frame) return;
+ const clip = frame.closest(".iframe-clip");
+ if (!clip) return;
+ clip.classList.add("is-loading");
+ const onLoad = () => {
+ clip.classList.remove("is-loading");
+ };
+ frame.addEventListener("load", onLoad, { once: true });
+ }
+
+ function resetIframe(frame) {
+ if (!frame) return;
+ const src = frame.getAttribute("src") || frame.src;
+ if (src) {
+ frame.setAttribute("src", src);
+ return;
+ }
+ if (frame.contentWindow) frame.contentWindow.location.reload();
+ }
+
+ document.querySelectorAll("button[data-reset-iframe]").forEach((btn) => {
+ btn.addEventListener("click", () => {
+ const key = btn.getAttribute("data-reset-iframe");
+ if (!key) return;
+ const scope = btn.closest(".iframe-clip") || btn.parentElement || document;
+ const frame = scope.querySelector(`iframe[data-iframe=\"${key}\"]`) || document.querySelector(`iframe[data-iframe=\"${key}\"]`);
+ setIframeLoading(frame);
+ resetIframe(frame);
+ });
+ });
+
+ // Footer year: local time only.
+ (function () {
+ const el = byId("copyright-year");
+ if (!el) return;
+
+ el.textContent = String(new Date().getFullYear());
+ })();
+
+ // Footer last-updated: based on document.lastModified.
+ (function () {
+ const el = byId("last-updated");
+ if (!el) return;
+
+ const raw = document.lastModified;
+ const date = raw ? new Date(raw) : null;
+ if (!date || Number.isNaN(date.getTime())) return;
+
+ const iso = date.toISOString().slice(0, 10);
+ el.setAttribute("datetime", iso);
+ el.textContent = iso;
+ })();
+})();
diff --git a/avatar.png b/avatar.png
new file mode 100644
index 0000000..858fde0
--- /dev/null
+++ b/avatar.png
Binary files differ
diff --git a/babi.png b/babi.png
new file mode 100644
index 0000000..e1ccd64
--- /dev/null
+++ b/babi.png
Binary files differ
diff --git a/bbs.cgi b/bbs.cgi
new file mode 100644
index 0000000..03d3240
--- /dev/null
+++ b/bbs.cgi
@@ -0,0 +1,4 @@
+#! /usr/bin/perl
+print "Location: bbs.html\n";
+print "Content-type: text/html\n";
+print "\n<a href=\"bbs.html\">bbs.html</a>\n";
diff --git a/bbs.html b/bbs.html
new file mode 100644
index 0000000..b79110f
--- /dev/null
+++ b/bbs.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>BBS</title>
+</head>
+<body>
+ <p>BBS is available on the diary subdomain: <a href="https://diary.sillylaird.ca/bbs.php">diary.sillylaird.ca/bbs.php</a>.</p>
+</body>
+</html>
diff --git a/blog/index.html b/blog/index.html
new file mode 100644
index 0000000..b979aec
--- /dev/null
+++ b/blog/index.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Blog — SillyLaird</title>
+ <meta name="description" content="Blog landing page for SillyLaird." />
+ <meta property="og:title" content="Blog — SillyLaird" />
+ <meta property="og:description" content="Blog landing page for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/blog/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Blog — SillyLaird" />
+ <meta name="twitter:description" content="Blog landing page for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/blog/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/blog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/blog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/blog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/blog/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/blog/index.html" aria-current="page">English</a>
+ <a role="menuitem" href="/blog/index_zh.html">中文</a>
+ <a role="menuitem" href="/blog/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="blog-title">
+ <h1 id="blog-title">Blog</h1>
+ <p class="muted">The current blog lives on its own subdomain.</p>
+ <p><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Open blog.sillylaird.ca</a></p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/blog/index_jp.html b/blog/index_jp.html
new file mode 100644
index 0000000..ef14bbf
--- /dev/null
+++ b/blog/index_jp.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>ブログ — SillyLaird</title>
+ <meta name="description" content="Blog landing page for SillyLaird." />
+ <meta property="og:title" content="ブログ — SillyLaird" />
+ <meta property="og:description" content="Blog landing page for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/blog/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ブログ — SillyLaird" />
+ <meta name="twitter:description" content="Blog landing page for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/blog/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/blog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/blog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/blog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/blog/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/blog/index.html">English</a>
+ <a role="menuitem" href="/blog/index_zh.html">中文</a>
+ <a role="menuitem" href="/blog/index_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="blog-title">
+ <h1 id="blog-title">ブログ</h1>
+ <p class="muted">The current blog lives on its own subdomain.</p>
+ <p><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Open blog.sillylaird.ca</a></p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/blog/index_zh.html b/blog/index_zh.html
new file mode 100644
index 0000000..6dbde26
--- /dev/null
+++ b/blog/index_zh.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>博客 — SillyLaird</title>
+ <meta name="description" content="Blog landing page for SillyLaird." />
+ <meta property="og:title" content="博客 — SillyLaird" />
+ <meta property="og:description" content="Blog landing page for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/blog/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="博客 — SillyLaird" />
+ <meta name="twitter:description" content="Blog landing page for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/blog/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/blog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/blog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/blog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/blog/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/blog/index.html">English</a>
+ <a role="menuitem" href="/blog/index_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/blog/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="blog-title">
+ <h1 id="blog-title">博客</h1>
+ <p class="muted">The current blog lives on its own subdomain.</p>
+ <p><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Open blog.sillylaird.ca</a></p>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/bookmarks/anime-watched.txt b/bookmarks/anime-watched.txt
new file mode 100644
index 0000000..af933c2
--- /dev/null
+++ b/bookmarks/anime-watched.txt
@@ -0,0 +1,2 @@
+BPS watched. times unknown ?
+Lain watched. times unknown ?
diff --git a/bookmarks/bookmarks.txt b/bookmarks/bookmarks.txt
new file mode 100644
index 0000000..2708986
--- /dev/null
+++ b/bookmarks/bookmarks.txt
@@ -0,0 +1,195 @@
+bookmarks
+https://www.youtube.com/
+https://www.vidlii.com/
+https://www.reddit.com/
+https://discordapp.com/channels/@me
+https://photos.google.com/
+https://mail.google.com/mail/u/1/h/1wqdb5xc3zhwv/?zy=g&f=1
+https://drive.google.com/drive/u/1/my-drive
+https://neocities.org/
+https://play.aidungeon.io/
+https://www.models-resource.com/
+
+subreddits
+https://www.reddit.com/r/opendirectories/
+https://www.reddit.com/r/InternetMysteries/
+https://www.reddit.com/r/HighQualityGifs/
+https://www.reddit.com/r/DeepIntoYouTube/
+https://www.reddit.com/r/DataHoarder/
+https://www.reddit.com/r/AIDungeon/
+
+raddle
+https://raddle.me/f/Piracy
+https://raddle.me/f/FileSharing
+https://raddle.me/f/music
+
+Free Resources
+https://the-eye.eu/public/
+https://thepiratebay.org/
+https://b-ok.cc/
+https://libgen.li/
+https://www.1337x.am/
+https://cinewhale.com/
+https://oldgamesdownload.com/
+https://vimm.net/
+https://en.booksee.org/
+https://gamejolt.com/
+http://www.gameranger.com/
+https://igg-games.com/
+https://yp1.yayponies.no/
+https://www.limetorrents.info/
+https://www.magnetdl.com/
+https://psarips.eu/
+https://root.yt/
+https://solidtorrents.net/
+https://epikmovies.com/
+
+The public site I use:
+
+https://www.limetorrents.info/
+
+The private site i use:
+
+https://www.scenetime.com/
+
+Has free registrations currently.
+
+For old movies i use:
+
+https://www.magnetdl.com/
+
+The release group i like the most for current video is:
+
+https://psarips.eu
+
+But it has forced ads.
+
+graphics
+https://www.glitter-graphics.com/
+https://textcraft.net/
+https://pookatoo.com/
+https://gifcities.org/
+https://textanim.com/
+https://www.glitterphoto.net/
+https://blingee.com/
+https://wallpaperplay.com/
+https://cooltext.com/
+https://lingojam.com/DiscordFonts
+
+time wasters
+https://www.cracked.com/
+https://www.somethingawful.com/
+https://postsecret.com/
+https://classicreload.com/
+https://www.wimp.com/
+https://www.avclub.com/
+
+Special Search Engines
+https://www.geocities.ws/archive/
+https://www.filechef.com/
+http://www.oocities.org/#gsc.tab=0
+
+nsfw/image boards and galleries
+http://fchan.us/
+https://www.allgayart.com/index.html
+https://boards.plus4chan.org/
+https://archive.4plebs.org/
+
+vsrg/music rhythm games
+https://www.flashflashrevolution.com/
+https://projectmoon.dance/
+https://etternaonline.com/
+https://www.stepmania.com/
+https://quavergame.com/
+
+The Pirate Bay Proxies List (July, 2022)
+
+https://tpb24.ukpass.co/
+
+https://tpbay.link
+
+https://thepiratebay.gg
+
+https://bayspirateproxy.com
+
+https://piratebayproxy.click
+
+https://tpbpiratebayproxy.com
+
+IM:
+
+XMPP:
+https://darknet.im/
+
+torrents 2023:
+
+https://torrentgalaxy-official.com/
+
+After that I'd go with
+
+https://magnetdl.hair/
+
+https://extratorrent-official.com/
+
+https://eztvx.to/home
+
+https://x1337x.cc/
+
+https://thepiratebay.org/index.html
+
+https://www.torrentleech.org/
+
+Torlock.com
+
+Torrentz2.nz
+
+LimeTorrents.cc
+
+web.stremio.com (for viewing and downloading)
+
+YTS.mx (.mp4 only)
+
+vpns i use:
+https://cryptostorm.is/
+https://www.nordvpn.com
+https://www.mullvad.net
+
+
+You can hear the news in latin:
+
+https://areena.yle.fi/1-1931339
+
+http://www.radiobremen.de/nachrichten/latein/latein-startseite100.html
+
+Read the news:
+
+http://ephemeris.alcuinus.net
+
+https://de.radiovaticana.va/news/dossiers/nuntii-latini
+
+There is a latin forum:
+
+
+https://latindiscussion.com/forum/forums/speak-latin.19/
+
+YouTube has some videos, there are some awesome Latin channels:
+
+https://www.youtube.com/results?search_query=classical+latin
+
+Potcasts:
+
+https://quomododicitur.com
+
+#other social media
+https://x.com
+https://news.ycombinator.com/news
+
+#mastodon/lemmy
+https://programming.dev/
+https://lemmy.ca/
+
+#sport streams
+https://www.vipbox.lc/
+https://streameast.to/
+
+
diff --git a/bookmarks/bookmarks.txt~ b/bookmarks/bookmarks.txt~
new file mode 100644
index 0000000..fb35646
--- /dev/null
+++ b/bookmarks/bookmarks.txt~
@@ -0,0 +1,186 @@
+bookmarks
+https://www.youtube.com/
+https://www.vidlii.com/
+https://www.reddit.com/
+https://discordapp.com/channels/@me
+https://photos.google.com/
+https://mail.google.com/mail/u/1/h/1wqdb5xc3zhwv/?zy=g&f=1
+https://drive.google.com/drive/u/1/my-drive
+https://neocities.org/
+https://play.aidungeon.io/
+https://www.models-resource.com/
+
+subreddits
+https://www.reddit.com/r/opendirectories/
+https://www.reddit.com/r/InternetMysteries/
+https://www.reddit.com/r/HighQualityGifs/
+https://www.reddit.com/r/DeepIntoYouTube/
+https://www.reddit.com/r/DataHoarder/
+https://www.reddit.com/r/AIDungeon/
+
+raddle
+https://raddle.me/f/Piracy
+https://raddle.me/f/FileSharing
+https://raddle.me/f/music
+
+Free Resources
+https://the-eye.eu/public/
+https://thepiratebay.org/
+https://b-ok.cc/
+http://libgen.li/
+https://www.1337x.am/
+https://cinewhale.com/
+https://oldgamesdownload.com/
+https://vimm.net/
+https://en.booksee.org/
+https://gamejolt.com/
+http://www.gameranger.com/
+https://igg-games.com/
+https://yp1.yayponies.no/
+https://www.limetorrents.info/
+https://www.magnetdl.com/
+http://psarips.eu/
+https://root.yt/
+https://solidtorrents.net/
+https://epikmovies.com/
+
+The public site I use:
+
+https://www.limetorrents.info/
+
+The private site i use:
+
+https://www.scenetime.com/
+
+Has free registrations currently.
+
+For old movies i use:
+
+https://www.magnetdl.com/
+
+The release group i like the most for current video is:
+
+http://psarips.eu
+
+But it has forced ads.
+
+graphics
+https://www.glitter-graphics.com/
+https://textcraft.net/
+https://pookatoo.com/
+https://gifcities.org/
+https://textanim.com/
+https://www.glitterphoto.net/
+http://blingee.com/
+https://wallpaperplay.com/
+https://cooltext.com/
+https://lingojam.com/DiscordFonts
+
+time wasters
+https://www.cracked.com/
+https://www.somethingawful.com/
+https://postsecret.com/
+https://classicreload.com/
+https://www.wimp.com/
+https://www.avclub.com/
+
+Special Search Engines
+http://www.geocities.ws/archive/
+https://www.filechef.com/
+http://www.oocities.org/#gsc.tab=0
+
+nsfw/image boards and galleries
+http://fchan.us/
+https://www.allgayart.com/index.html
+https://boards.plus4chan.org/
+https://archive.4plebs.org/
+
+vsrg/music rhythm games
+http://www.flashflashrevolution.com/
+https://projectmoon.dance/
+https://etternaonline.com/
+https://www.stepmania.com/
+https://quavergame.com/
+
+The Pirate Bay Proxies List (July, 2022)
+
+https://tpb24.ukpass.co/
+
+https://tpbay.link
+
+https://thepiratebay.gg
+
+https://bayspirateproxy.com
+
+https://piratebayproxy.click
+
+https://tpbpiratebayproxy.com
+
+IM:
+
+XMPP:
+https://darknet.im/
+
+torrents 2023:
+
+TorrentGalaxy.to
+
+After that I'd go with
+
+MagnetDL.com
+
+ExtraTorrents.it
+
+EZTV.re
+
+1337x.to
+
+ThePirateBay.org
+
+TorrentLeech.org
+
+Torlock.com
+
+Torrentz2.nz
+
+LimeTorrents.cc
+
+web.stremio.com (for viewing and downloading)
+
+YTS.mx (.mp4 only)
+
+vpns i use:
+https://cryptostorm.is/
+
+You can hear the news in latin:
+
+http://areena.yle.fi/1-1931339
+
+http://www.radiobremen.de/nachrichten/latein/latein-startseite100.html
+
+Read the news:
+
+http://ephemeris.alcuinus.net
+
+http://de.radiovaticana.va/news/dossiers/nuntii-latini
+
+There is a latin forum:
+
+
+http://latindiscussion.com/forum/forums/speak-latin.19/
+
+YouTube has some videos, there are some awesome Latin channels:
+
+https://www.youtube.com/results?search_query=classical+latin
+
+Potcasts:
+
+http://quomododicitur.com
+
+#other social media
+https://bsky.app/
+https://news.ycombinator.com/news
+
+#mastodon/lemmy
+https://programming.dev/
+https://lemmy.ca/ \ No newline at end of file
diff --git a/bookmarks/index.html b/bookmarks/index.html
new file mode 100644
index 0000000..357f4bc
--- /dev/null
+++ b/bookmarks/index.html
@@ -0,0 +1,162 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Bookmarks — SillyLaird</title>
+ <meta name="description" content="Bookmarks and links." />
+ <meta property="og:title" content="Bookmarks — SillyLaird" />
+ <meta property="og:description" content="Bookmarks and links." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/bookmarks/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Bookmarks — SillyLaird" />
+ <meta name="twitter:description" content="Bookmarks and links." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/bookmarks/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/bookmarks/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/bookmarks/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/bookmarks/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/bookmarks/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/bookmarks.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/bookmarks/index.html" aria-current="page">English</a>
+ <a role="menuitem" href="/bookmarks/index_zh.html">中文</a>
+ <a role="menuitem" href="/bookmarks/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="bookmarks-title">
+ <h1 id="bookmarks-title" class="bookmarks-title">Bookmarks</h1>
+ <p class="muted">Folders and link dumps.</p>
+
+ <ul class="tree">
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="/">sillylaird - Laird Lonergan - Root</a>
+ </summary>
+ <ul>
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="/">www.sillylaird.ca</a>
+ </summary>
+ <ul>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Books">Books</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Drinks">Drinks</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Movies_and_TV">Movies_and_TV</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Video_Games">Video_Games</a></li>
+ </ul>
+ </details>
+ </li>
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="http://9p.sillylaird.ca">9p.sillylaird.ca</a>
+ </summary>
+ <ul>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Books">Books</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Drinks">Drinks</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Movies_and_TV">Movies_and_TV</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Video_Games">Video_Games</a></li>
+ </ul>
+ </details>
+ </li>
+ </ul>
+ </details>
+ </li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/bookmarks/index_jp.html b/bookmarks/index_jp.html
new file mode 100644
index 0000000..b0ce93c
--- /dev/null
+++ b/bookmarks/index_jp.html
@@ -0,0 +1,162 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>ブックマーク — SillyLaird</title>
+ <meta name="description" content="Bookmarks and links." />
+ <meta property="og:title" content="ブックマーク — SillyLaird" />
+ <meta property="og:description" content="Bookmarks and links." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/bookmarks/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ブックマーク — SillyLaird" />
+ <meta name="twitter:description" content="Bookmarks and links." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/bookmarks/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/bookmarks/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/bookmarks/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/bookmarks/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/bookmarks/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/bookmarks.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/bookmarks/index.html">English</a>
+ <a role="menuitem" href="/bookmarks/index_zh.html">中文</a>
+ <a role="menuitem" href="/bookmarks/index_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="bookmarks-title">
+ <h1 id="bookmarks-title" class="bookmarks-title">ブックマーク</h1>
+ <p class="muted">Folders and link dumps.</p>
+
+ <ul class="tree">
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="/">sillylaird - Laird Lonergan - Root</a>
+ </summary>
+ <ul>
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="/">www.sillylaird.ca</a>
+ </summary>
+ <ul>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Books">Books</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Drinks">Drinks</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Movies_and_TV">Movies_and_TV</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Video_Games">Video_ゲーム</a></li>
+ </ul>
+ </details>
+ </li>
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="http://9p.sillylaird.ca">9p.sillylaird.ca</a>
+ </summary>
+ <ul>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Books">Books</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Drinks">Drinks</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Movies_and_TV">Movies_and_TV</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Video_Games">Video_ゲーム</a></li>
+ </ul>
+ </details>
+ </li>
+ </ul>
+ </details>
+ </li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/bookmarks/index_zh.html b/bookmarks/index_zh.html
new file mode 100644
index 0000000..558d990
--- /dev/null
+++ b/bookmarks/index_zh.html
@@ -0,0 +1,162 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>书签 — SillyLaird</title>
+ <meta name="description" content="Bookmarks and links." />
+ <meta property="og:title" content="书签 — SillyLaird" />
+ <meta property="og:description" content="Bookmarks and links." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/bookmarks/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="书签 — SillyLaird" />
+ <meta name="twitter:description" content="Bookmarks and links." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/bookmarks/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/bookmarks/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/bookmarks/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/bookmarks/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/bookmarks/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/bookmarks.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/bookmarks/index.html">English</a>
+ <a role="menuitem" href="/bookmarks/index_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/bookmarks/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="bookmarks-title">
+ <h1 id="bookmarks-title" class="bookmarks-title">书签</h1>
+ <p class="muted">Folders and link dumps.</p>
+
+ <ul class="tree">
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="/">sillylaird - Laird Lonergan - Root</a>
+ </summary>
+ <ul>
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="/">www.sillylaird.ca</a>
+ </summary>
+ <ul>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Books">Books</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Drinks">Drinks</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Movies_and_TV">Movies_and_TV</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Video_Games">Video_游戏</a></li>
+ </ul>
+ </details>
+ </li>
+ <li class="navbar-dir">
+ <details>
+ <summary>
+ <a href="http://9p.sillylaird.ca">9p.sillylaird.ca</a>
+ </summary>
+ <ul>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Books">Books</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Drinks">Drinks</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Movies_and_TV">Movies_and_TV</a></li>
+ <li class="navbar-file"><a href="https://risingthumb.xyz/Basement/Video_Games">Video_游戏</a></li>
+ </ul>
+ </details>
+ </li>
+ </ul>
+ </details>
+ </li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/bookmarks/radio.txt b/bookmarks/radio.txt
new file mode 100644
index 0000000..679b835
--- /dev/null
+++ b/bookmarks/radio.txt
@@ -0,0 +1,11 @@
+twitch dj's
+
+https://www.twitch.tv/djbrady (DJ) But can be nsfw sometimes or most ^^
+
+https://www.twitch.tv/juliusverve (Dj) Also does Rhythm Games
+
+https://www.twitch.tv/violit_tv (DJ) Very nice music
+
+https://touhou.kuukunen.net/ (touhou radio)
+
+https://listen.moe/ (anime radio) \ No newline at end of file
diff --git a/bookmarks/styles.css b/bookmarks/styles.css
new file mode 100644
index 0000000..6c56161
--- /dev/null
+++ b/bookmarks/styles.css
@@ -0,0 +1,162 @@
+<style>
+.button {
+ border: none;
+ color: white;
+ text-decoration: none;
+ display: inline-block;
+ font-size: 16px;
+ margin: 4px 70px;
+ cursor: pointer;
+ width: 200px;
+ text-align: left;
+ margin: 0;
+ padding: 0;
+}
+
+.button1 {
+ background-color: black;
+ font-family: Comic Sans MS;
+ font-weight: 300;
+}
+
+h1 {
+ font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif;
+ font-size: 30px;
+ padding-left: 40px;
+}
+
+pre {
+ font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif;
+ font-size: 12px;
+ padding-left: 40px;
+}
+
+nav {
+ float: left;
+ width: 100%; /* Full width for links alignment */
+ padding: 20px;
+ box-sizing: border-box; /* Ensure padding is included in width */
+}
+
+.links {
+ display: flex;
+ flex-direction: column; /* Align links in a column */
+ gap: 10px; /* Space between links */
+}
+
+.links .link {
+ text-decoration: none;
+ color: white;
+ background-color: black;
+ padding: 10px 15px;
+ border-radius: 4px;
+ transition: background-color 0.3s;
+ display: block; /* Ensure links take full width */
+ width: 100%; /* Full width */
+ text-align: left; /* Align text to the left */
+ max-width: 300px; /* Optional: Max width for each link */
+}
+
+.links .link:hover {
+ background-color: #333; /* Darker background on hover */
+}
+
+body {
+ background-color: #fff5f7;
+ margin: 0; /* Remove default margin */
+}
+
+.container {
+ margin: 20px auto;
+ max-width: 800px; /* Max width for the container */
+ padding: 20px;
+ background-color: #f0f0f0;
+ border-radius: 8px;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+}
+
+iframe {
+ display: block;
+ height: 100vh;
+ width: 100vw;
+ border: none;
+ background: #fff5f7;
+}
+
+#design-cast {
+ position: relative;
+ overflow: hidden;
+}
+
+.member {
+ float: left;
+ width: 20%;
+ margin: 1% 1% 45px 1%;
+}
+
+.name {
+ bottom: 0px;
+}
+
+.member img {
+ width: 50%;
+ display: block;
+}
+
+ul.flowxl {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 0;
+}
+
+ul.flowxl > li {
+ list-style-type: none;
+ text-align: center;
+ width: var(--xiconsize);
+ min-width: var(--xiconsize);
+ max-width: var(--xiconsize);
+ max-height: calc(var(--xiconsize) + 60px);
+ padding: 2px;
+ margin: 2px;
+ overflow: hidden;
+ font-size: 1rem;
+ line-height: 1;
+}
+
+ul.flowxl > li > a {
+ display: block;
+ vertical-align: middle;
+ line-height: 1;
+ font-size: 1.2rem;
+}
+
+ul.flowxl li > a > img,
+ul.flowxl li > img {
+ display: block;
+ border-radius: 9px;
+ width: auto;
+ max-width: var(--xiconsize);
+ max-height: var(--xiconsize);
+ overflow: hidden;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+ul.flowxl li > a > img[src$="svg"] {
+ max-width: 170px;
+ max-height: 170px;
+}
+
+table {
+ overflow: auto;
+}
+
+p, a, li, figcaption, div, span {
+ overflow-wrap: anywhere;
+}
+
+.content {
+ margin-left: 0; /* Ensure no extra margin is added */
+}
+
+</style> \ No newline at end of file
diff --git a/bookmarks/threads/opdownloadandconquer.txt b/bookmarks/threads/opdownloadandconquer.txt
new file mode 100644
index 0000000..1e0ab46
--- /dev/null
+++ b/bookmarks/threads/opdownloadandconquer.txt
@@ -0,0 +1,63 @@
+thread archive: https://archive.ph/J4C8X
+
+Given how majority of the internet's audio and video services are provided by Google, thanks to Youtube, the purpose of this operation is to loosen the death-grip that has taken hold. This process will only require that you have a steady internet connection and (Advisably) 100 GB of free space. Here is the process:
+
+Step 1
+Download the latest versions of FFMpeg and Youtube-DL, and put all the programs into the same folder:
+https://ffmpeg.org/
+https://ytdl-org.github.io/youtube-dl/index.html
+
+Step 2
+Create an account to any video sites that you wish to distribute videos on. Here are some of the more well-known alternatives, as well as some recommended sites:
+AfreecaTV: https://www.afreecatv.com/
+Bitchute: https://www.bitchute.com/
+BitTube: https://bittube.tv/
+D.tube: https://d.tube/
+Dailymotion: https://www.dailymotion.com/
+LBRY: https://lbry.com/
+NicoNico: https://www.nicovideo.jp/
+Rumble: https://rumble.com/
+Veoh: https://www.veoh.com/
+VidLii: https://www.vidlii.com/
+Vimeo: https://vimeo.com/
+When signing up, if you do not want to use your personal email, you can create a temporary one using any one of the numerous “10 minute email” websites, Cock.li (If you have a referral link), or you can create your own email address: https://archive.fo/okVq4
+Also, make sure that you fulfill whatever silly verification demands the site has so that you can upload videos without any issues
+
+Step 3
+Hold “Shift” and right-click in an empty part of the folder and select “Open command window here”. Afterwards, you can download Youtube videos through one of the two following methods. First method is if you just want to repost videos and nothing more. All you have to put in the command youtube-dl URL and replace the “URL” with the actual link of the Youtube video, playlist, or channel that you want to download. Doing this will result in all the videos being downloaded, in the best quality possible, to the folder and nothing more.
+
+The second method is for those looking to repost videos in a more complete format. In the command line, instead of just the previously listed command, you copy and paste the following command:
+LOGFILE="$PWD/logs/$(date +"%Y-%m-%d-%H-%M-%S.%N").log"
+exec 3>&1 4>&2 >>$LOGFILE 2>&1
+youtube-dl --verbose --ignore-errors --no-continue --no-overwrites --keep-video --no-post-overwrites --download-archive archive.txt --write-description --write-info-json --write-annotations --write-thumbnail --all-subs --output "%(uploader)s-(%(uploader_id)s)/%(upload_date)s-%(title)s/%(upload_date)s-%(title)s-%(id)s.%(ext)s" -f bestvideo[ext=mp4]+bestaudio[ext=m4a] -- $1
+After doing so, replace the “$1” section of the final command line with the URL of the Youtube video, playlist, or channel that you want to download. The big difference here is that it will result in Youtube-dl creating an archive of videos already downloaded (To prevent downloading the same video repeatedly), all the videos and their files will be downloaded to their own individual folders, and videos will only be downloaded in the best quality that is available (Instead of the best quality possible).
+
+Make sure that the video downloaded by inputting the download command 3-5 times. Sometimes videos disconnect midway through, so you may need to perform this process several times, especially for longer videos.
+
+For videos hidden behind an age-gate restriction, there are two ways to bypass this. The first option is to use yt-dlp: https://github.com/yt-dlp/yt-dlp
+It's the same program as Youtube-dl, except it has some QoL changes made to it. HOWEVER, do not use it as a replacement as it doesn't download most regular videos in their entirety for some reason.
+
+For the second option, what you do is that you log into your Youtube account and go to a video. Then you can either dump your browser's cookies to the same same folder as the previously downloaded programs, add --cookies FILE after “youtube-dl” and before the rest of the command, and change the word “FILE” to the actual cookies file that you put into the folder; ORyou can open the developer tab in your browser, copy the cookies requested by Youtube, and proceed to make your own cookies file: https://archive.vn/FK3mH
+
+If you download too many video in a short time, you may encounter a “HTTP Error 429: Too Many Requests” message that blocks your access. This can be bypassed by either filling out the Captcha on the Youtube website and dumping the cookies file afterwards or changing your IP address.
+
+Step 4
+Despite either method mentioned previously, sometimes there are leftover files that are trash. To delete this trash, search for and delete all “.part” files, audio files, and “.fXXX” video files found in the download folder. The “.part” files are videos that were unable to be fully downloaded for whatever reason and should be reattempted at a later date or downloaded through another method. The audio files and the “.fXXX” video files are just the individual audio and video for each Youtube video. They should automatically be deleted despite either method used, but verify just in case.
+
+Step 5
+Just re-upload the videos on all of the sites you made an account for. Also, it is advised that all uploaded videos should have this disclaimer in the description: “I did/do not create, publish, nor own the original video.”
+
+If you're doing a more thorough upload, here's a breakdown of the files in the video folder. The “.description” files contain all the text from the video's description, and can be opened in Notepad. The image located in the folder is the Youtube thumbnail. The “.json” file is the video's configuration file for annotations. The “.m4a” file is just the video's audio file and should be deleted. The “.mp4” file is the actual video itself; if there are two “.mp4” files, delete the one ending in “.fXXX” as that's just the original video file without any audio. The “.vtt” file(s) is the official subtitles attached to the video.
+
+Questions
+>Why are some video sites with known issues recommended?
+Because a bigger issue than all of those sites is the fact that Youtube has an artificial monopoly on the video-hosting market. And, a lot of these websites are just following their model and practices because they see it as successful and are not trying to compete. However, as is the goal of this operation, we will begin to see some sites altering their business practices to better complete as their presence increases.
+
+>What videos should I be uploading?
+Advisably, just the videos you like to watch and rewatch. If you cannot think of what videos you should download, just sit back and think about the content you normally search for or listen to on Youtube, and repost that. The point is to just download and repost whatever is relevant to what you watch. Also, make sure that you're not flooding sites with 20 copies of the same video, so do a search on the sites before you upload to them.
+
+>What can a small amount of nobodies on the internet accomplish?
+If 10 anons were to download and upload 10 videos for 10 days straight, that would result in 1000 videos being distributed across other sites in under two weeks. You don't need a large group of people to cause a sudden and dramatic shift. All that's needed is just small steps taken one at a time, that compound into an avalanche.
+
+>This isn't going to change anything as people are just going to fall back into their old habits.
+I appreciate your criticism and advise that you go and rent a movie or game from Blockbuster or Hollywood Video.
diff --git a/bookmarks/threads/opdownloadandconquer.txt~ b/bookmarks/threads/opdownloadandconquer.txt~
new file mode 100644
index 0000000..78c9ce3
--- /dev/null
+++ b/bookmarks/threads/opdownloadandconquer.txt~
@@ -0,0 +1,63 @@
+
+
+Given how majority of the internet's audio and video services are provided by Google, thanks to Youtube, the purpose of this operation is to loosen the death-grip that has taken hold. This process will only require that you have a steady internet connection and (Advisably) 100 GB of free space. Here is the process:
+
+Step 1
+Download the latest versions of FFMpeg and Youtube-DL, and put all the programs into the same folder:
+http://ffmpeg.org/
+https://ytdl-org.github.io/youtube-dl/index.html
+
+Step 2
+Create an account to any video sites that you wish to distribute videos on. Here are some of the more well-known alternatives, as well as some recommended sites:
+AfreecaTV: https://www.afreecatv.com/
+Bitchute: https://www.bitchute.com/
+BitTube: https://bittube.tv/
+D.tube: https://d.tube/
+Dailymotion: https://www.dailymotion.com/
+LBRY: https://lbry.com/
+NicoNico: https://www.nicovideo.jp/
+Rumble: https://rumble.com/
+Veoh: https://www.veoh.com/
+VidLii: https://www.vidlii.com/
+Vimeo: https://vimeo.com/
+When signing up, if you do not want to use your personal email, you can create a temporary one using any one of the numerous “10 minute email” websites, Cock.li (If you have a referral link), or you can create your own email address: https://archive.fo/okVq4
+Also, make sure that you fulfill whatever silly verification demands the site has so that you can upload videos without any issues
+
+Step 3
+Hold “Shift” and right-click in an empty part of the folder and select “Open command window here”. Afterwards, you can download Youtube videos through one of the two following methods. First method is if you just want to repost videos and nothing more. All you have to put in the command youtube-dl URL and replace the “URL” with the actual link of the Youtube video, playlist, or channel that you want to download. Doing this will result in all the videos being downloaded, in the best quality possible, to the folder and nothing more.
+
+The second method is for those looking to repost videos in a more complete format. In the command line, instead of just the previously listed command, you copy and paste the following command:
+LOGFILE="$PWD/logs/$(date +"%Y-%m-%d-%H-%M-%S.%N").log"
+exec 3>&1 4>&2 >>$LOGFILE 2>&1
+youtube-dl --verbose --ignore-errors --no-continue --no-overwrites --keep-video --no-post-overwrites --download-archive archive.txt --write-description --write-info-json --write-annotations --write-thumbnail --all-subs --output "%(uploader)s-(%(uploader_id)s)/%(upload_date)s-%(title)s/%(upload_date)s-%(title)s-%(id)s.%(ext)s" -f bestvideo[ext=mp4]+bestaudio[ext=m4a] -- $1
+After doing so, replace the “$1” section of the final command line with the URL of the Youtube video, playlist, or channel that you want to download. The big difference here is that it will result in Youtube-dl creating an archive of videos already downloaded (To prevent downloading the same video repeatedly), all the videos and their files will be downloaded to their own individual folders, and videos will only be downloaded in the best quality that is available (Instead of the best quality possible).
+
+Make sure that the video downloaded by inputting the download command 3-5 times. Sometimes videos disconnect midway through, so you may need to perform this process several times, especially for longer videos.
+
+For videos hidden behind an age-gate restriction, there are two ways to bypass this. The first option is to use yt-dlp: https://github.com/yt-dlp/yt-dlp
+It's the same program as Youtube-dl, except it has some QoL changes made to it. HOWEVER, do not use it as a replacement as it doesn't download most regular videos in their entirety for some reason.
+
+For the second option, what you do is that you log into your Youtube account and go to a video. Then you can either dump your browser's cookies to the same same folder as the previously downloaded programs, add --cookies FILE after “youtube-dl” and before the rest of the command, and change the word “FILE” to the actual cookies file that you put into the folder; ORyou can open the developer tab in your browser, copy the cookies requested by Youtube, and proceed to make your own cookies file: https://archive.vn/FK3mH
+
+If you download too many video in a short time, you may encounter a “HTTP Error 429: Too Many Requests” message that blocks your access. This can be bypassed by either filling out the Captcha on the Youtube website and dumping the cookies file afterwards or changing your IP address.
+
+Step 4
+Despite either method mentioned previously, sometimes there are leftover files that are trash. To delete this trash, search for and delete all “.part” files, audio files, and “.fXXX” video files found in the download folder. The “.part” files are videos that were unable to be fully downloaded for whatever reason and should be reattempted at a later date or downloaded through another method. The audio files and the “.fXXX” video files are just the individual audio and video for each Youtube video. They should automatically be deleted despite either method used, but verify just in case.
+
+Step 5
+Just re-upload the videos on all of the sites you made an account for. Also, it is advised that all uploaded videos should have this disclaimer in the description: “I did/do not create, publish, nor own the original video.”
+
+If you're doing a more thorough upload, here's a breakdown of the files in the video folder. The “.description” files contain all the text from the video's description, and can be opened in Notepad. The image located in the folder is the Youtube thumbnail. The “.json” file is the video's configuration file for annotations. The “.m4a” file is just the video's audio file and should be deleted. The “.mp4” file is the actual video itself; if there are two “.mp4” files, delete the one ending in “.fXXX” as that's just the original video file without any audio. The “.vtt” file(s) is the official subtitles attached to the video.
+
+Questions
+>Why are some video sites with known issues recommended?
+Because a bigger issue than all of those sites is the fact that Youtube has an artificial monopoly on the video-hosting market. And, a lot of these websites are just following their model and practices because they see it as successful and are not trying to compete. However, as is the goal of this operation, we will begin to see some sites altering their business practices to better complete as their presence increases.
+
+>What videos should I be uploading?
+Advisably, just the videos you like to watch and rewatch. If you cannot think of what videos you should download, just sit back and think about the content you normally search for or listen to on Youtube, and repost that. The point is to just download and repost whatever is relevant to what you watch. Also, make sure that you're not flooding sites with 20 copies of the same video, so do a search on the sites before you upload to them.
+
+>What can a small amount of nobodies on the internet accomplish?
+If 10 anons were to download and upload 10 videos for 10 days straight, that would result in 1000 videos being distributed across other sites in under two weeks. You don't need a large group of people to cause a sudden and dramatic shift. All that's needed is just small steps taken one at a time, that compound into an avalanche.
+
+>This isn't going to change anything as people are just going to fall back into their old habits.
+I appreciate your criticism and advise that you go and rent a movie or game from Blockbuster or Hollywood Video.
diff --git a/bookmarks/torbookmarks.txt b/bookmarks/torbookmarks.txt
new file mode 100644
index 0000000..0219431
--- /dev/null
+++ b/bookmarks/torbookmarks.txt
@@ -0,0 +1,46 @@
+DNM Bible
+http://biblemeowimkh3utujmhm6oh2oeb3ubjw2lpgeq3lahrfr2l6ev6zgyd.onion/
+
+Ahmia (v3 .onion)- Search Engine
+http://juhanurmihxlp77nkq76byazcldy2hlmovfu2epvl5ankdibsot4csyd.onion/
+https://ahmia.fi/
+
+Searx
+https://lgmekfnpealdqhnctyg3p5fuelpdwnbqbwnl2ickpdoodzatzgz27ryd.onion/
+
+Phobos:
+http://phobosxilamwcg75xt22id7aywkzol6q6rfl2flipcqoc4e4ahima5id.onion/
+
+gimmeasearx
+'Find a random searx instance'
+http://7tcuoi57curagdk7nsvmzedcxgwlrq2d6jach4ksa3vj72uxrzadmqqd.onion/
+customizable, no js of course.
+
+
+Email:
+DNMX Dark Net Echange Email:
+http://hxuzjtocnzvv5g2rtg2bhwkcbupmk7rclb6lly3fo4tvqkk5oyrv3nid.onion/
+
+links to save and dig through:
+http://trusrw4zkac4y4xkxvt4rsymmakodpqsanom37wa2d3onjkgahq72byd.onion/index.php#adult
+http://fvrifdnu75abxcoegldwea6ke7tnb3fxwupedavf5m3yg3y2xqyvi5qd.onion/
+
+https://dark.fail/
+https://tor.taxi/
+
+Forum:
+http://thehubmcwyzwijjoqvdtpmu36npcueypjbgnvbqz4jliwjmmnpfkzkqd.onion/
+
+my site:
+http://xd35x5na7ocldgitjmo4fkhnehje7b4ext5jmcmpsj63oeupqf43aiad.onion/
+
+ImageBoard:
+http://picochanwvqfa2xsrfzlul4x4aqtog2eljll5qnj5iagpbhx2vmfqnid.onion/tech/501
+
+Wikis:
+http://abrx6wcpzkfpwxb5eb2wsra2wnkrv2macdtkpnrepswodz5jxd4schyd.onion/index.xhtml
+
+Tor Email:
+https://danwin1210.de/mail/
+sillylaird@danwin1210.de
+sillylalird@danielas3rtn54uwmofdo3x2bsdifr47huasnmbgqzfrec5ubupvtpid.onion \ No newline at end of file
diff --git a/bookmarks/youtube-channels.txt b/bookmarks/youtube-channels.txt
new file mode 100644
index 0000000..7411ba3
--- /dev/null
+++ b/bookmarks/youtube-channels.txt
@@ -0,0 +1,44 @@
+Tech Channels:
+https://youtube.com/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč
+https://youtube.com/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman
+https://youtube.com/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee
+https://youtube.com/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer
+https://youtube.com/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw
+https://youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith
+https://youtube.com/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool
+https://youtube.com/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno
+https://youtube.com/channel/UC0A3ldncnGQ1M_RU2Wb4L2A quidsup
+https://youtube.com/channel/UCqGmpMaWCpLe7hpnNnU09TA The OpenBSD Guy
+https://youtube.com/channel/UCgz0mcaKcSjIKbwo67I_Gjw マリウス / MARIUS
+
+Misc:
+https://youtube.com/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer
+
+Gaming:
+
+MMORPG:
+https://youtube.com/channel/UCA3aDTFK19KEEIb0jHpM-9Q Vagrant
+
+RuneScape:
+https://youtube.com/channel/UCl7FxeciaU48G-K6oIRH0xg KempQ
+
+Roblox:
+https://youtube.com/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten
+
+Politics:
+https://youtube.com/channel/UCiEKV_MOhwZ7OEcgFyLKilw Theo Von Clips
+
+Misc:
+https://youtube.com/channel/UCdJdEguB1F1CiYe7OEi3SBg JonTronShow
+https://youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A Tom Scott
+
+Science:
+https://youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA Veritasium
+
+Legos:
+https://youtube.com/channel/UCUU3GdGuQshZFRGnxAPBf_w TD BRICKS
+
+Food:
+
+Food Reviews:
+https://youtube.com/channel/UC5jsbHkktuF0apQQQCGkoJQ RDR FOOD REVIEWS
diff --git a/bookmarks/youtube-channels.txt~ b/bookmarks/youtube-channels.txt~
new file mode 100644
index 0000000..0fca96e
--- /dev/null
+++ b/bookmarks/youtube-channels.txt~
@@ -0,0 +1,44 @@
+Tech Channels:
+https://invidious.pufe.org/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč
+https://invidious.pufe.org/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman
+https://invidious.pufe.org/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee
+https://invidious.pufe.org/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer
+https://invidious.pufe.org/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw
+https://invidious.pufe.org/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith
+https://invidious.pufe.org/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool
+https://invidious.pufe.org/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno
+https://invidious.pufe.org/channel/UC0A3ldncnGQ1M_RU2Wb4L2A quidsup
+https://invidious.pufe.org/channel/UCqGmpMaWCpLe7hpnNnU09TA The OpenBSD Guy
+https://invidious.pufe.org/channel/UCgz0mcaKcSjIKbwo67I_Gjw マリウス / MARIUS
+
+Misc:
+https://invidious.pufe.org/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer
+
+Gaming:
+
+MMORPG:
+https://invidious.pufe.org/channel/UCA3aDTFK19KEEIb0jHpM-9Q Vagrant
+
+RuneScape:
+https://invidious.pufe.org/channel/UCl7FxeciaU48G-K6oIRH0xg KempQ
+
+Roblox:
+https://invidious.pufe.org/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten
+
+Politics:
+https://invidious.pufe.org/channel/UCiEKV_MOhwZ7OEcgFyLKilw Theo Von Clips
+
+Misc:
+https://invidious.pufe.org/channel/UCdJdEguB1F1CiYe7OEi3SBg JonTronShow
+https://invidious.pufe.org/channel/UCBa659QWEk1AI4Tg--mrJ2A Tom Scott
+
+Science:
+https://invidious.pufe.org/channel/UCHnyfMqiRRG1u-2MsSQLbXA Veritasium
+
+Legos:
+https://invidious.pufe.org/channel/UCUU3GdGuQshZFRGnxAPBf_w TD BRICKS
+
+Food:
+
+Food Reviews:
+https://invidious.pufe.org/channel/UC5jsbHkktuF0apQQQCGkoJQ RDR FOOD REVIEWS
diff --git a/bookmarks/youtube-videos.txt b/bookmarks/youtube-videos.txt
new file mode 100644
index 0000000..fac75d4
--- /dev/null
+++ b/bookmarks/youtube-videos.txt
@@ -0,0 +1,24 @@
+Tech Channels:
+https://invidious.namazso.eu/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč
+https://invidious.namazso.eu/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman
+https://invidious.namazso.eu/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee
+https://invidious.namazso.eu/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer
+https://invidious.namazso.eu/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw
+https://invidious.namazso.eu/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith
+https://invidious.namazso.eu/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool
+https://invidious.namazso.eu/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno
+
+Misc:
+https://invidious.namazso.eu/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer
+
+Gaming:
+
+Roblox:
+https://invidious.namazso.eu/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten
+
+Politics:
+https://invidious.namazso.eu/channel/UCBa659QWEk1AI4Tg--mrJ2A Tom Scott
+
+Misc:
+https://invidious.namazso.eu/channel/UCdJdEguB1F1CiYe7OEi3SBg JonTronShow
+
diff --git a/bookmarks/youtube-videos.txt~ b/bookmarks/youtube-videos.txt~
new file mode 100644
index 0000000..556dee9
--- /dev/null
+++ b/bookmarks/youtube-videos.txt~
@@ -0,0 +1,15 @@
+Tech Channels:
+https://invidious.namazso.eu/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč
+https://invidious.namazso.eu/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman
+https://invidious.namazso.eu/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee
+https://invidious.namazso.eu/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer
+https://invidious.namazso.eu/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw
+https://invidious.namazso.eu/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith
+https://invidious.namazso.eu/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool
+https://invidious.namazso.eu/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno
+
+Misc:
+https://invidious.namazso.eu/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer
+
+Roblox:
+https://invidious.namazso.eu/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten
diff --git a/buyvm.png b/buyvm.png
new file mode 100644
index 0000000..c717cd6
--- /dev/null
+++ b/buyvm.png
Binary files differ
diff --git a/canada.png b/canada.png
new file mode 100644
index 0000000..a320f14
--- /dev/null
+++ b/canada.png
Binary files differ
diff --git a/ccp.svg b/ccp.svg
new file mode 100644
index 0000000..67c23b9
--- /dev/null
+++ b/ccp.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600" viewBox="-15 -11 144 96" fill="#ff0"><path d="M-15-11h144v96h-144z" fill="#ee1c25"/><path d="M4 14l7.923966-7.923966A5.315073 5.315073 0 0 0 17 5l2.5 2.5-4 4L33 29l-4 4-17.5-17.5-3 3zm.5 8.5a16.62077 16.62077 0 0 0 12 5.12077A11.12077 11.12077 0 0 0 27.62077 16.5 16.62077 16.62077 0 0 0 17 1a16 16 0 0 1 0 32 18 18 0 0 1-14.979984-8.020016zM3 29l2-2 2 2-2 2z"/><circle cx="3.5" cy="30.5" r="2.5"/></svg> \ No newline at end of file
diff --git a/changelog/2023-changelog.txt b/changelog/2023-changelog.txt
new file mode 100644
index 0000000..5964e8b
--- /dev/null
+++ b/changelog/2023-changelog.txt
@@ -0,0 +1,12 @@
+**2023 ChangeLog**
+
+* 23 Dec 2023: Migrated to a Linux server again. chane some links to other section of the site. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the site that were not in folders. of the root directory
+* 22 Oct 2023: Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/site online my sdf site will stay as long as I can.
+* 9 Sept 2023: trying to figure out what to update the site with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the site. I also dont really keep track of version numbers as I find them irrelevent especially for a site like this. or any major site update.
+* 25 Aug 2023: Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain.
+* 10 July 2023: Brought the original tor domain back up.
+* 21 June 2023: Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install.
+* 12 May 2023: Added a tor hidden service domain to the site. Now you can browse this site using tor!.
+* 11 April 2023: I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad.
+* 22 March 2023: Added more menus and archived some stepmania files from izzy sm ftp/pub site. will end up archiving dtxmania then some swf files on swfarchive dot com.
+* 6 March 2023: Template for changelog 2023 Changelog.
diff --git a/changelog/2024-changelog.txt b/changelog/2024-changelog.txt
new file mode 100644
index 0000000..0934530
--- /dev/null
+++ b/changelog/2024-changelog.txt
@@ -0,0 +1,11 @@
+**2024 ChangeLog**
+
+* 9 Sept 2024: Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.
+* 1 August 2024: Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.
+* 24 July 2024: Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.
+* 14 June 2024: successfully changed my host to sdf got secure web permission and ssl. feels good.
+* 11 June 2024: Changed my host to sdf will update links and so on.
+* 29 May 2024: Fixed some links added more content and so on.
+* 18 May 2024: Added more journals. fixed up the site and so on.
+* 4 May 2024: Change some links and audio files to be more in sync what happening in my life
+* 2 January 2024: Updated the site for 2024! Happy NewYear! I'll probably be updating the site later on. also I just notice i was on a webring for Chinese users on my friend site djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year! \ No newline at end of file
diff --git a/changelog/2025-changelog.txt b/changelog/2025-changelog.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/changelog/2025-changelog.txt
diff --git a/changelog/admin.html b/changelog/admin.html
new file mode 100644
index 0000000..cc44fc5
--- /dev/null
+++ b/changelog/admin.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Changelog Admin (Disabled)</title>
+ <link rel="stylesheet" href="/assets/css/site.css" />
+</head>
+<body>
+ <main class="wrap">
+ <h1>Changelog Admin Disabled</h1>
+ <p class="muted">This page used to require PHP. The site now serves static HTML only.</p>
+ <p><a href="/changelog/">Go to changelog</a></p>
+ </main>
+</body>
+</html>
diff --git a/changelog/api/latest.html b/changelog/api/latest.html
new file mode 100644
index 0000000..fe0553b
--- /dev/null
+++ b/changelog/api/latest.html
@@ -0,0 +1,37 @@
+[
+ {
+ "title": "Site update",
+ "body": "Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.",
+ "year": 2024,
+ "month": 9,
+ "day": 9
+ },
+ {
+ "title": "Site update",
+ "body": "Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.",
+ "year": 2024,
+ "month": 8,
+ "day": 1
+ },
+ {
+ "title": "Site update",
+ "body": "Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.",
+ "year": 2024,
+ "month": 7,
+ "day": 24
+ },
+ {
+ "title": "Site update",
+ "body": "successfully changed my host to sdf got secure web permission and ssl. feels good.",
+ "year": 2024,
+ "month": 6,
+ "day": 14
+ },
+ {
+ "title": "Site update",
+ "body": "Changed my host to sdf will update links and so on.",
+ "year": 2024,
+ "month": 6,
+ "day": 11
+ }
+]
diff --git a/changelog/auth.html b/changelog/auth.html
new file mode 100644
index 0000000..fce7f3b
--- /dev/null
+++ b/changelog/auth.html
@@ -0,0 +1,4 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Deprecated</title>
+<p>This legacy PHP helper is no longer used.</p>
diff --git a/changelog/db.html b/changelog/db.html
new file mode 100644
index 0000000..fce7f3b
--- /dev/null
+++ b/changelog/db.html
@@ -0,0 +1,4 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Deprecated</title>
+<p>This legacy PHP helper is no longer used.</p>
diff --git a/changelog/index.html b/changelog/index.html
new file mode 100644
index 0000000..e625781
--- /dev/null
+++ b/changelog/index.html
@@ -0,0 +1,73 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="SillyLaird change log." />
+ <meta property="og:title" content="ChangeLog -- SillyLaird" />
+ <meta property="og:description" content="SillyLaird change log." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/changelog/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ChangeLog -- SillyLaird" />
+ <meta name="twitter:description" content="SillyLaird change log." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/changelog/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/changelog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/changelog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/changelog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/changelog/index_jp.html" />
+ <title>ChangeLog -- SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/changelog.css" />
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="changelog-title">
+ <h1 id="changelog-title" class="changelog-title">ChangeLog</h1>
+ <p class="muted">All notes are copied verbatim.</p>
+
+ <h2>2024</h2>
+ <ul class="changelog-list" aria-label="2024 updates">
+ <li class="changelog-entry"><time datetime="2024-09-09">2024-09-09</time><div class="text">Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.</div></li>
+ <li class="changelog-entry"><time datetime="2024-08-01">2024-08-01</time><div class="text">Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.</div></li>
+ <li class="changelog-entry"><time datetime="2024-07-24">2024-07-24</time><div class="text">Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.</div></li>
+ <li class="changelog-entry"><time datetime="2024-06-14">2024-06-14</time><div class="text">successfully changed my host to sdf got secure web permission and ssl. feels good.</div></li>
+ <li class="changelog-entry"><time datetime="2024-06-11">2024-06-11</time><div class="text">Changed my host to sdf will update links and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-29">2024-05-29</time><div class="text">Fixed some links added more content and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-18">2024-05-18</time><div class="text">Added more journals. fixed up the site and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-04">2024-05-04</time><div class="text">Change some links and audio files to be more in sync what happening in my life</div></li>
+ <li class="changelog-entry"><time datetime="2024-01-02">2024-01-02</time><div class="text">Updated the site for 2024! Happy NewYear! I'll probably be updating the site later on. also I just notice i was on a webring for Chinese users on my friend site djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year!</div></li>
+ </ul>
+
+ <h2>2023</h2>
+ <ul class="changelog-list" aria-label="2023 updates">
+ <li class="changelog-entry"><time datetime="2023-12-23">2023-12-23</time><div class="text">Migrated to a Linux server again. chane some links to other section of the site. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the site that were not in folders. of the root directory</div></li>
+ <li class="changelog-entry"><time datetime="2023-10-22">2023-10-22</time><div class="text">Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/site online my sdf site will stay as long as I can.</div></li>
+ <li class="changelog-entry"><time datetime="2023-09-09">2023-09-09</time><div class="text">trying to figure out what to update the site with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the site. I also dont really keep track of version numbers as I find them irrelevent especially for a site like this. or any major site update.</div></li>
+ <li class="changelog-entry"><time datetime="2023-08-25">2023-08-25</time><div class="text">Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain.</div></li>
+ <li class="changelog-entry"><time datetime="2023-07-10">2023-07-10</time><div class="text">Brought the original tor domain back up.</div></li>
+ <li class="changelog-entry"><time datetime="2023-06-21">2023-06-21</time><div class="text">Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install.</div></li>
+ <li class="changelog-entry"><time datetime="2023-05-12">2023-05-12</time><div class="text">Added a tor hidden service domain to the site. Now you can browse this site using tor!.</div></li>
+ <li class="changelog-entry"><time datetime="2023-04-11">2023-04-11</time><div class="text">I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad.</div></li>
+ <li class="changelog-entry"><time datetime="2023-03-22">2023-03-22</time><div class="text">Added more menus and archived some stepmania files from izzy sm ftp/pub site. will end up archiving dtxmania then some swf files on swfarchive dot com.</div></li>
+ <li class="changelog-entry"><time datetime="2023-03-06">2023-03-06</time><div class="text">Template for changelog 2023 Changelog.</div></li>
+ </ul>
+
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/changelog/index_jp.html b/changelog/index_jp.html
new file mode 100644
index 0000000..ff17f18
--- /dev/null
+++ b/changelog/index_jp.html
@@ -0,0 +1,151 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="SillyLaird change log." />
+ <meta property="og:title" content="ChangeLog — SillyLaird" />
+ <meta property="og:description" content="SillyLaird change log." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/changelog/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ChangeLog — SillyLaird" />
+ <meta name="twitter:description" content="SillyLaird change log." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/changelog/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/changelog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/changelog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/changelog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/changelog/index_jp.html" />
+ <title>ChangeLog — SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/changelog.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/changelog/index.html">English</a>
+ <a role="menuitem" href="/changelog/index_zh.html">中文</a>
+ <a role="menuitem" href="/changelog/index_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="changelog-title">
+ <h1 id="changelog-title" class="changelog-title">ChangeLog</h1>
+ <p class="muted">All notes are copied verbatim.</p>
+
+ <h2>2024</h2>
+ <ul class="changelog-list" aria-label="2024 updates">
+ <li class="changelog-entry"><time datetime="2024-09-09">2024-09-09</time><div class="text">Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.</div></li>
+ <li class="changelog-entry"><time datetime="2024-08-01">2024-08-01</time><div class="text">Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.</div></li>
+ <li class="changelog-entry"><time datetime="2024-07-24">2024-07-24</time><div class="text">Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.</div></li>
+ <li class="changelog-entry"><time datetime="2024-06-14">2024-06-14</time><div class="text">successfully changed my host to sdf got secure web permission and ssl. feels good.</div></li>
+ <li class="changelog-entry"><time datetime="2024-06-11">2024-06-11</time><div class="text">Changed my host to sdf will update links and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-29">2024-05-29</time><div class="text">Fixed some links added more content and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-18">2024-05-18</time><div class="text">Added more journals. fixed up the site and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-04">2024-05-04</time><div class="text">Change some links and audio files to be more in sync what happening in my life</div></li>
+ <li class="changelog-entry"><time datetime="2024-01-02">2024-01-02</time><div class="text">Updated the site for 2024! Happy NewYear! I'll probably be updating the site later on. also I just notice i was on a webring for Chinese users on my friend site djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year!</div></li>
+ </ul>
+
+ <h2>2023</h2>
+ <ul class="changelog-list" aria-label="2023 updates">
+ <li class="changelog-entry"><time datetime="2023-12-23">2023-12-23</time><div class="text">Migrated to a Linux server again. chane some links to other section of the site. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the site that were not in folders. of the root directory</div></li>
+ <li class="changelog-entry"><time datetime="2023-10-22">2023-10-22</time><div class="text">Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/site online my sdf site will stay as long as I can.</div></li>
+ <li class="changelog-entry"><time datetime="2023-09-09">2023-09-09</time><div class="text">trying to figure out what to update the site with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the site. I also dont really keep track of version numbers as I find them irrelevent especially for a site like this. or any major site update.</div></li>
+ <li class="changelog-entry"><time datetime="2023-08-25">2023-08-25</time><div class="text">Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain.</div></li>
+ <li class="changelog-entry"><time datetime="2023-07-10">2023-07-10</time><div class="text">Brought the original tor domain back up.</div></li>
+ <li class="changelog-entry"><time datetime="2023-06-21">2023-06-21</time><div class="text">Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install.</div></li>
+ <li class="changelog-entry"><time datetime="2023-05-12">2023-05-12</time><div class="text">Added a tor hidden service domain to the site. Now you can browse this site using tor!.</div></li>
+ <li class="changelog-entry"><time datetime="2023-04-11">2023-04-11</time><div class="text">I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad.</div></li>
+ <li class="changelog-entry"><time datetime="2023-03-22">2023-03-22</time><div class="text">Added more menus and archived some stepmania files from izzy sm ftp/pub site. will end up archiving dtxmania then some swf files on swfarchive dot com.</div></li>
+ <li class="changelog-entry"><time datetime="2023-03-06">2023-03-06</time><div class="text">Template for changelog 2023 更新履歴.</div></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/changelog/index_zh.html b/changelog/index_zh.html
new file mode 100644
index 0000000..3eafa73
--- /dev/null
+++ b/changelog/index_zh.html
@@ -0,0 +1,151 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="SillyLaird change log." />
+ <meta property="og:title" content="ChangeLog — SillyLaird" />
+ <meta property="og:description" content="SillyLaird change log." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/changelog/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ChangeLog — SillyLaird" />
+ <meta name="twitter:description" content="SillyLaird change log." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/changelog/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/changelog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/changelog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/changelog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/changelog/index_jp.html" />
+ <title>ChangeLog — SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/changelog.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/changelog/index.html">English</a>
+ <a role="menuitem" href="/changelog/index_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/changelog/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="changelog-title">
+ <h1 id="changelog-title" class="changelog-title">ChangeLog</h1>
+ <p class="muted">All notes are copied verbatim.</p>
+
+ <h2>2024</h2>
+ <ul class="changelog-list" aria-label="2024 updates">
+ <li class="changelog-entry"><time datetime="2024-09-09">2024-09-09</time><div class="text">Added more programs to the 网站 and added my own guestbook with captcha :) hope you enjoy this 网站 update.</div></li>
+ <li class="changelog-entry"><time datetime="2024-08-01">2024-08-01</time><div class="text">Fixing some links updating the 网站 to work better added a new feature to the 网站. But it broke the mobile part of it so far. that will be fixed in the future.</div></li>
+ <li class="changelog-entry"><time datetime="2024-07-24">2024-07-24</time><div class="text">Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.</div></li>
+ <li class="changelog-entry"><time datetime="2024-06-14">2024-06-14</time><div class="text">successfully changed my host to sdf got secure web permission and ssl. feels good.</div></li>
+ <li class="changelog-entry"><time datetime="2024-06-11">2024-06-11</time><div class="text">Changed my host to sdf will update links and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-29">2024-05-29</time><div class="text">Fixed some links added more content and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-18">2024-05-18</time><div class="text">Added more journals. fixed up the 网站 and so on.</div></li>
+ <li class="changelog-entry"><time datetime="2024-05-04">2024-05-04</time><div class="text">Change some links and audio files to be more in sync what happening in my life</div></li>
+ <li class="changelog-entry"><time datetime="2024-01-02">2024-01-02</time><div class="text">Updated the 网站 for 2024! Happy NewYear! I'll probably be updating the 网站 later on. also I just notice i was on a webring for Chinese users on my friend 网站 djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year!</div></li>
+ </ul>
+
+ <h2>2023</h2>
+ <ul class="changelog-list" aria-label="2023 updates">
+ <li class="changelog-entry"><time datetime="2023-12-23">2023-12-23</time><div class="text">Migrated to a Linux server again. chane some links to other section of the 网站. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the 网站 that were not in folders. of the root directory</div></li>
+ <li class="changelog-entry"><time datetime="2023-10-22">2023-10-22</time><div class="text">Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/网站 online my sdf 网站 will stay as long as I can.</div></li>
+ <li class="changelog-entry"><time datetime="2023-09-09">2023-09-09</time><div class="text">trying to figure out what to update the 网站 with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the 网站. I also dont really keep track of version numbers as I find them irrelevent especially for a 网站 like this. or any major 网站 update.</div></li>
+ <li class="changelog-entry"><time datetime="2023-08-25">2023-08-25</time><div class="text">Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain.</div></li>
+ <li class="changelog-entry"><time datetime="2023-07-10">2023-07-10</time><div class="text">Brought the original tor domain back up.</div></li>
+ <li class="changelog-entry"><time datetime="2023-06-21">2023-06-21</time><div class="text">Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install.</div></li>
+ <li class="changelog-entry"><time datetime="2023-05-12">2023-05-12</time><div class="text">Added a tor hidden service domain to the 网站. Now you can browse this 网站 using tor!.</div></li>
+ <li class="changelog-entry"><time datetime="2023-04-11">2023-04-11</time><div class="text">I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad.</div></li>
+ <li class="changelog-entry"><time datetime="2023-03-22">2023-03-22</time><div class="text">Added more menus and archived some stepmania files from izzy sm ftp/pub 网站. will end up archiving dtxmania then some swf files on swfarchive dot com.</div></li>
+ <li class="changelog-entry"><time datetime="2023-03-06">2023-03-06</time><div class="text">Template for changelog 2023 更新日志.</div></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/changelog/latest.html b/changelog/latest.html
new file mode 100644
index 0000000..a7051b0
--- /dev/null
+++ b/changelog/latest.html
@@ -0,0 +1,11 @@
+<div class="changelog-entry"><b>Site update</b><br><span style="font-size:13px;"><time datetime="2024-09-09">2024-09-09</time></span><br><span class="text">Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.</span></div>
+
+<div class="changelog-entry"><b>Site update</b><br><span style="font-size:13px;"><time datetime="2024-08-01">2024-08-01</time></span><br><span class="text">Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.</span></div>
+
+<div class="changelog-entry"><b>Site update</b><br><span style="font-size:13px;"><time datetime="2024-07-24">2024-07-24</time></span><br><span class="text">Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.</span></div>
+
+<div class="changelog-entry"><b>Site update</b><br><span style="font-size:13px;"><time datetime="2024-06-14">2024-06-14</time></span><br><span class="text">successfully changed my host to sdf got secure web permission and ssl. feels good.</span></div>
+
+<div class="changelog-entry"><b>Site update</b><br><span style="font-size:13px;"><time datetime="2024-06-11">2024-06-11</time></span><br><span class="text">Changed my host to sdf will update links and so on.</span></div>
+
+<a href="/changelog/">Full changelog &rarr;</a>
diff --git a/changelog/login.html b/changelog/login.html
new file mode 100644
index 0000000..8e5b379
--- /dev/null
+++ b/changelog/login.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Changelog Login (Disabled)</title>
+ <link rel="stylesheet" href="/assets/css/site.css" />
+</head>
+<body>
+ <main class="wrap">
+ <h1>Login Disabled</h1>
+ <p class="muted">The old PHP login flow has been removed from this static build.</p>
+ <p><a href="/changelog/">Go to changelog</a></p>
+ </main>
+</body>
+</html>
diff --git a/changelog/logout.html b/changelog/logout.html
new file mode 100644
index 0000000..d2769ba
--- /dev/null
+++ b/changelog/logout.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta http-equiv="refresh" content="0;url=/changelog/" />
+ <title>Redirecting</title>
+</head>
+<body>
+ <p>Redirecting to <a href="/changelog/">/changelog/</a>...</p>
+</body>
+</html>
diff --git a/changelog/rss.xml b/changelog/rss.xml
new file mode 100644
index 0000000..7a72398
--- /dev/null
+++ b/changelog/rss.xml
@@ -0,0 +1,30 @@
+<?php
+require __DIR__ . '/db.html';
+header("Content-Type: application/rss+xml; charset=UTF-8");
+echo '<?xml version="1.0" encoding="UTF-8"?>';
+?>
+<rss version="2.0">
+<channel>
+<title>SillyLaird Changelog</title>
+<link>https://www.sillylaird.ca/changelog/</link>
+
+<?php
+$stmt = $db->query("
+ SELECT title, body, created_at
+ FROM changelog
+ ORDER BY created_at DESC
+ LIMIT 20
+");
+while ($e = $stmt->fetch(PDO::FETCH_ASSOC)):
+?>
+<item>
+<title><?= htmlspecialchars($e['title']) ?></title>
+<pubDate><?= date(DATE_RSS, strtotime($e['created_at'])) ?></pubDate>
+<description><![CDATA[
+<?= nl2br(htmlspecialchars($e['body'])) ?>
+]]></description>
+</item>
+<?php endwhile; ?>
+
+</channel>
+</rss>
diff --git a/china.png b/china.png
new file mode 100644
index 0000000..1b51ab5
--- /dev/null
+++ b/china.png
Binary files differ
diff --git a/cirno.jpg b/cirno.jpg
new file mode 100644
index 0000000..2d99a0f
--- /dev/null
+++ b/cirno.jpg
Binary files differ
diff --git a/cockbox.gif b/cockbox.gif
new file mode 100644
index 0000000..f133bb3
--- /dev/null
+++ b/cockbox.gif
Binary files differ
diff --git a/code.png b/code.png
new file mode 100644
index 0000000..11b50a7
--- /dev/null
+++ b/code.png
Binary files differ
diff --git a/computers/index.html b/computers/index.html
new file mode 100644
index 0000000..409995a
--- /dev/null
+++ b/computers/index.html
@@ -0,0 +1,166 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Computers — SillyLaird</title>
+ <meta name="description" content="Machines and computers used by SillyLaird." />
+ <meta property="og:title" content="Computers — SillyLaird" />
+ <meta property="og:description" content="Machines and computers used by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/computers/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Computers — SillyLaird" />
+ <meta name="twitter:description" content="Machines and computers used by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/computers/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/computers/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/computers/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/computers/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/computers/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/computers.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/computers/index.html" aria-current="page">English</a>
+ <a role="menuitem" href="/computers/index_zh.html">中文</a>
+ <a role="menuitem" href="/computers/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="computers-title">
+ <h1 id="computers-title">Computers</h1>
+ <p class="muted">Image left → description → screenshot right. Retro and simple.</p>
+
+ <h2>Main Machines</h2>
+
+ <div class="machine">
+ <img src="img/x260-machine.jpg" alt="ThinkPad X260">
+ <div class="machine-info">
+ <div class="machine-title">ThinkPad X260</div>
+ Daily Linux + Plan9front laptop.<br>
+ 16GB RAM, NVMe mod.
+ </div>
+ <img src="img/x260-screen.jpg" alt="ThinkPad X260 Screenshot">
+ </div>
+
+ <div class="machine">
+ <img src="img/desktop-machine.jpg" alt="Desktop PC">
+ <div class="machine-info">
+ <div class="machine-title">Custom Desktop</div>
+ StepMania, Pop'n, PMS, coding, VMs.<br>
+ Ryzen CPU, RTX GPU.
+ </div>
+ <img src="img/desktop-screen.jpg" alt="Desktop Screenshot">
+ </div>
+
+ <h2>Retro Machines</h2>
+
+ <div class="machine">
+ <img src="img/win98-machine.jpg" alt="Windows 98 Tower">
+ <div class="machine-info">
+ <div class="machine-title">Windows 98 Tower</div>
+ MIDI hardware, DOS/Win98 games, serial cable experiments.
+ </div>
+ <img src="img/win98-screen.jpg" alt="Windows 98 Screenshot">
+ </div>
+
+ <div class="machine">
+ <img src="img/p3-machine.jpg" alt="Pentium III">
+ <div class="machine-info">
+ <div class="machine-title">Pentium III</div>
+ StepMania 3.9 machine and early 2000s computing setup.
+ </div>
+ <img src="img/p3-screen.jpg" alt="Pentium III Screenshot">
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/computers/index_jp.html b/computers/index_jp.html
new file mode 100644
index 0000000..545cc84
--- /dev/null
+++ b/computers/index_jp.html
@@ -0,0 +1,166 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>コンピューター — SillyLaird</title>
+ <meta name="description" content="Machines and computers used by SillyLaird." />
+ <meta property="og:title" content="コンピューター — SillyLaird" />
+ <meta property="og:description" content="Machines and computers used by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/computers/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="コンピューター — SillyLaird" />
+ <meta name="twitter:description" content="Machines and computers used by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/computers/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/computers/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/computers/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/computers/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/computers/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/computers.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/computers/index.html">English</a>
+ <a role="menuitem" href="/computers/index_zh.html">中文</a>
+ <a role="menuitem" href="/computers/index_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="computers-title">
+ <h1 id="computers-title">コンピューター</h1>
+ <p class="muted">Image left → description → screenshot right. Retro and simple.</p>
+
+ <h2>Main Machines</h2>
+
+ <div class="machine">
+ <img src="img/x260-machine.jpg" alt="ThinkPad X260">
+ <div class="machine-info">
+ <div class="machine-title">ThinkPad X260</div>
+ Daily Linux + Plan9front laptop.<br>
+ 16GB RAM, NVMe mod.
+ </div>
+ <img src="img/x260-screen.jpg" alt="ThinkPad X260 Screenshot">
+ </div>
+
+ <div class="machine">
+ <img src="img/desktop-machine.jpg" alt="Desktop PC">
+ <div class="machine-info">
+ <div class="machine-title">Custom Desktop</div>
+ StepMania, Pop'n, PMS, coding, VMs.<br>
+ Ryzen CPU, RTX GPU.
+ </div>
+ <img src="img/desktop-screen.jpg" alt="Desktop Screenshot">
+ </div>
+
+ <h2>Retro Machines</h2>
+
+ <div class="machine">
+ <img src="img/win98-machine.jpg" alt="Windows 98 Tower">
+ <div class="machine-info">
+ <div class="machine-title">Windows 98 Tower</div>
+ MIDI hardware, DOS/Win98 games, serial cable experiments.
+ </div>
+ <img src="img/win98-screen.jpg" alt="Windows 98 Screenshot">
+ </div>
+
+ <div class="machine">
+ <img src="img/p3-machine.jpg" alt="Pentium III">
+ <div class="machine-info">
+ <div class="machine-title">Pentium III</div>
+ StepMania 3.9 machine and early 2000s computing setup.
+ </div>
+ <img src="img/p3-screen.jpg" alt="Pentium III Screenshot">
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/computers/index_zh.html b/computers/index_zh.html
new file mode 100644
index 0000000..2464920
--- /dev/null
+++ b/computers/index_zh.html
@@ -0,0 +1,166 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>电脑设备 — SillyLaird</title>
+ <meta name="description" content="Machines and computers used by SillyLaird." />
+ <meta property="og:title" content="电脑设备 — SillyLaird" />
+ <meta property="og:description" content="Machines and computers used by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/computers/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="电脑设备 — SillyLaird" />
+ <meta name="twitter:description" content="Machines and computers used by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/computers/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/computers/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/computers/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/computers/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/computers/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/computers.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/computers/index.html">English</a>
+ <a role="menuitem" href="/computers/index_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/computers/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="computers-title">
+ <h1 id="computers-title">电脑设备</h1>
+ <p class="muted">Image left → description → screenshot right. Retro and simple.</p>
+
+ <h2>Main Machines</h2>
+
+ <div class="machine">
+ <img src="img/x260-machine.jpg" alt="ThinkPad X260">
+ <div class="machine-info">
+ <div class="machine-title">ThinkPad X260</div>
+ Daily Linux + Plan9front laptop.<br>
+ 16GB RAM, NVMe mod.
+ </div>
+ <img src="img/x260-screen.jpg" alt="ThinkPad X260 Screenshot">
+ </div>
+
+ <div class="machine">
+ <img src="img/desktop-machine.jpg" alt="Desktop PC">
+ <div class="machine-info">
+ <div class="machine-title">Custom Desktop</div>
+ StepMania, Pop'n, PMS, coding, VMs.<br>
+ Ryzen CPU, RTX GPU.
+ </div>
+ <img src="img/desktop-screen.jpg" alt="Desktop Screenshot">
+ </div>
+
+ <h2>Retro Machines</h2>
+
+ <div class="machine">
+ <img src="img/win98-machine.jpg" alt="Windows 98 Tower">
+ <div class="machine-info">
+ <div class="machine-title">Windows 98 Tower</div>
+ MIDI hardware, DOS/Win98 games, serial cable experiments.
+ </div>
+ <img src="img/win98-screen.jpg" alt="Windows 98 Screenshot">
+ </div>
+
+ <div class="machine">
+ <img src="img/p3-machine.jpg" alt="Pentium III">
+ <div class="machine-info">
+ <div class="machine-title">Pentium III</div>
+ StepMania 3.9 machine and early 2000s computing setup.
+ </div>
+ <img src="img/p3-screen.jpg" alt="Pentium III Screenshot">
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/cornhub.png b/cornhub.png
new file mode 100644
index 0000000..90912ab
--- /dev/null
+++ b/cornhub.png
Binary files differ
diff --git a/cryptostorm.png b/cryptostorm.png
new file mode 100644
index 0000000..b0effca
--- /dev/null
+++ b/cryptostorm.png
Binary files differ
diff --git a/cs-logo.png b/cs-logo.png
new file mode 100644
index 0000000..b8ff2af
--- /dev/null
+++ b/cs-logo.png
Binary files differ
diff --git a/docs/FUTURE_PROOF.md b/docs/FUTURE_PROOF.md
new file mode 100644
index 0000000..7325798
--- /dev/null
+++ b/docs/FUTURE_PROOF.md
@@ -0,0 +1,54 @@
+# Future Proofing (No Generator)
+
+This site is intentionally hand-edited HTML. The goal here is to keep the *style* the same while making the site easier to maintain and more resilient.
+
+## Principles
+
+- Navigation and core content should work without JavaScript.
+- External embeds should always have a plain-link fallback.
+- URLs should be stable; if something must move, leave a redirect page.
+- Translations should follow a consistent naming rule.
+
+## What We Added
+
+### 1) A real sitemap and robots.txt
+
+- `robots.txt` points to `sitemap.xml`
+- `sitemap.xml` is the public crawl map (update when adding new sections)
+
+### 2) A human-friendly site map page
+
+- `/map/` provides a clickable index for humans
+- It also links to translated versions
+
+### 3) Translation naming convention
+
+- Default English: `index.html` (or any `page.html`)
+- Simplified Chinese: `index_zh.html` (or `page_zh.html`)
+- Japanese: `index_jp.html` (or `page_jp.html`)
+
+### 4) Redirect page pattern
+
+If you ever rename or move a page, keep an old file that points to the new place.
+
+Example: create `old-path/index.html`:
+
+```html
+<!doctype html>
+<meta charset="utf-8">
+<meta http-equiv="refresh" content="0; url=/new-path/">
+<link rel="canonical" href="/new-path/">
+<title>Moved</title>
+<p>This page moved to <a href="/new-path/">/new-path/</a>.</p>
+```
+
+### 5) Backups
+
+Recommended:
+
+- Put the folder in git (local is enough)
+- Mirror the repo remotely (GitHub/GitLab/SourceHut) even if you don’t deploy from it
+
+## Optional Next Step
+
+Add a simple link-check script (offline) to catch broken internal links.
diff --git a/docs/MANAGE.md b/docs/MANAGE.md
new file mode 100644
index 0000000..e061837
--- /dev/null
+++ b/docs/MANAGE.md
@@ -0,0 +1,42 @@
+# Site Management (No Generator)
+
+This site is intentionally hand-edited HTML/CSS.
+
+## Shared assets
+
+- Global CSS: `/assets/css/site.css`
+- Shared JS (menu + language + blog list): `/assets/js/site.js`
+
+## Optional includes (header/footer)
+
+If you want to stop copy/pasting the header/footer without using a static site generator:
+
+1) Add include placeholders:
+
+```html
+<div data-include="header"></div>
+...
+<div data-include="footer"></div>
+```
+
+2) Add this script:
+
+```html
+<script defer src="/assets/js/includes.js"></script>
+```
+
+3) Header/footer live here:
+
+- `/partials/header.html`
+- `/partials/footer.html`
+
+Notes:
+
+- This is a "no build" approach.
+- It requires JavaScript to render header/footer.
+- If includes fail (offline, blocked fetch), the page still loads (just without injected header/footer).
+
+## SEO / crawl basics
+
+- `robots.txt` points to `sitemap.xml`.
+- Update `sitemap.xml` when you add/remove top-level pages.
diff --git a/elixior.png b/elixior.png
new file mode 100644
index 0000000..0b97383
--- /dev/null
+++ b/elixior.png
Binary files differ
diff --git a/elixior.webp b/elixior.webp
new file mode 100644
index 0000000..7e6c477
--- /dev/null
+++ b/elixior.webp
Binary files differ
diff --git a/elixr.webp b/elixr.webp
new file mode 100644
index 0000000..7e6c477
--- /dev/null
+++ b/elixr.webp
Binary files differ
diff --git a/emacs.png b/emacs.png
new file mode 100644
index 0000000..9ab43d7
--- /dev/null
+++ b/emacs.png
Binary files differ
diff --git a/error/.idea/.gitignore b/error/.idea/.gitignore
new file mode 100644
index 0000000..1c2fda5
--- /dev/null
+++ b/error/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/error/.idea/error.iml b/error/.idea/error.iml
new file mode 100644
index 0000000..18ec59d
--- /dev/null
+++ b/error/.idea/error.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$" />
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+</module> \ No newline at end of file
diff --git a/error/.idea/misc.xml b/error/.idea/misc.xml
new file mode 100644
index 0000000..9715c22
--- /dev/null
+++ b/error/.idea/misc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectRootManager">
+ <output url="file://$PROJECT_DIR$/out" />
+ </component>
+</project> \ No newline at end of file
diff --git a/error/.idea/modules.xml b/error/.idea/modules.xml
new file mode 100644
index 0000000..4fb897f
--- /dev/null
+++ b/error/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/.idea/error.iml" filepath="$PROJECT_DIR$/.idea/error.iml" />
+ </modules>
+ </component>
+</project> \ No newline at end of file
diff --git a/error/index.html b/error/index.html
new file mode 100644
index 0000000..83fe80a
--- /dev/null
+++ b/error/index.html
@@ -0,0 +1,138 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Error — SillyLaird</title>
+ <meta name="description" content="Error page." />
+ <meta property="og:title" content="Error — SillyLaird" />
+ <meta property="og:description" content="Error page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/error/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Error — SillyLaird" />
+ <meta name="twitter:description" content="Error page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/error/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/error/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/error/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/error/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/error/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/error/index.html" aria-current="page">English</a>
+ <a role="menuitem" href="/error/index_zh.html">中文</a>
+ <a role="menuitem" href="/error/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="error-title">
+ <h1 id="error-title">Error</h1>
+ <p class="muted">Something went wrong, but here's a way out.</p>
+ <p>
+ <a href="/">
+ <img src="/lain.png" alt="Back to home" class="s0667eb5585" />
+ </a>
+ </p>
+ </section>
+
+ <section aria-labelledby="links-title">
+ <h2 id="links-title">Links</h2>
+ <ul class="contact-list">
+ <li><a href="https://status.cafe/users/sillylaird" target="_blank" rel="noopener">Status.cafe Update</a></li>
+ <li><a href="/">Personal Website</a></li>
+ <li><a href="/journal/">Personal Diary</a></li>
+ <li><a href="https://sillylaird.srht.site/" target="_blank" rel="noopener">This Site</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/error/index_jp.html b/error/index_jp.html
new file mode 100644
index 0000000..34a0e85
--- /dev/null
+++ b/error/index_jp.html
@@ -0,0 +1,138 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>エラー — SillyLaird</title>
+ <meta name="description" content="Error page." />
+ <meta property="og:title" content="エラー — SillyLaird" />
+ <meta property="og:description" content="Error page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/error/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="エラー — SillyLaird" />
+ <meta name="twitter:description" content="Error page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/error/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/error/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/error/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/error/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/error/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/error/index.html">English</a>
+ <a role="menuitem" href="/error/index_zh.html">中文</a>
+ <a role="menuitem" href="/error/index_jp.html" aria-current="page">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="error-title">
+ <h1 id="error-title">エラー</h1>
+ <p class="muted">Something went wrong, but here's a way out.</p>
+ <p>
+ <a href="/">
+ <img src="/lain.png" alt="Back to home" class="s0667eb5585" />
+ </a>
+ </p>
+ </section>
+
+ <section aria-labelledby="links-title">
+ <h2 id="links-title">Links</h2>
+ <ul class="contact-list">
+ <li><a href="https://status.cafe/users/sillylaird" target="_blank" rel="noopener">Status.cafe Update</a></li>
+ <li><a href="/">Personal Website</a></li>
+ <li><a href="/journal/">Personal 日記</a></li>
+ <li><a href="https://sillylaird.srht.site/" target="_blank" rel="noopener">This Site</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/error/index_zh.html b/error/index_zh.html
new file mode 100644
index 0000000..7625f10
--- /dev/null
+++ b/error/index_zh.html
@@ -0,0 +1,138 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>错误 — SillyLaird</title>
+ <meta name="description" content="Error page." />
+ <meta property="og:title" content="错误 — SillyLaird" />
+ <meta property="og:description" content="Error page." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/error/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="错误 — SillyLaird" />
+ <meta name="twitter:description" content="Error page." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/error/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/error/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/error/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/error/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/error/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/error/index.html">English</a>
+ <a role="menuitem" href="/error/index_zh.html" aria-current="page">中文</a>
+ <a role="menuitem" href="/error/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="error-title">
+ <h1 id="error-title">错误</h1>
+ <p class="muted">Something went wrong, but here's a way out.</p>
+ <p>
+ <a href="/">
+ <img src="/lain.png" alt="Back to home" class="s0667eb5585" />
+ </a>
+ </p>
+ </section>
+
+ <section aria-labelledby="links-title">
+ <h2 id="links-title">Links</h2>
+ <ul class="contact-list">
+ <li><a href="https://status.cafe/users/sillylaird" target="_blank" rel="noopener">Status.cafe Update</a></li>
+ <li><a href="/">Personal Web网站</a></li>
+ <li><a href="/journal/">Personal 日记</a></li>
+ <li><a href="https://sillylaird.srht.site/" target="_blank" rel="noopener">This Site</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/eso-tilin-tilin.gif b/eso-tilin-tilin.gif
new file mode 100644
index 0000000..bccf139
--- /dev/null
+++ b/eso-tilin-tilin.gif
Binary files differ
diff --git a/expressvpn.png b/expressvpn.png
new file mode 100644
index 0000000..765c580
--- /dev/null
+++ b/expressvpn.png
Binary files differ
diff --git a/fastmail.png b/fastmail.png
new file mode 100644
index 0000000..a86b0f9
--- /dev/null
+++ b/fastmail.png
Binary files differ
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..cb6fad8
--- /dev/null
+++ b/favicon.ico
@@ -0,0 +1 @@
+AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
diff --git a/gaming/index.html b/gaming/index.html
new file mode 100644
index 0000000..780375b
--- /dev/null
+++ b/gaming/index.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Gaming — SillyLaird</title>
+ <meta name="description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta property="og:title" content="Gaming — SillyLaird" />
+ <meta property="og:description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Gaming — SillyLaird" />
+ <meta name="twitter:description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header">
+ <header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ <noscript>
+ <div class="lang-menu no-js-lang" role="menu" aria-label="Language">
+ <a role="menuitem" href="/gaming/index.html" aria-current="page">English</a>
+ <a role="menuitem" href="/gaming/index_zh.html">中文</a>
+ <a role="menuitem" href="/gaming/index_jp.html">日本語</a>
+ </div>
+ </noscript>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="gaming-title">
+ <h1 id="gaming-title">Gaming</h1>
+ <p class="muted">Pages for games and projects.</p>
+
+ <ul class="tile-grid">
+ <li><a href="/gaming/runescape/"><img src="/runescape.png" alt="RuneScape" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/specialforce/"><img src="/soldierfront.png" alt="SpecialForce / SoldierFront" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/stepmania/"><img src="/stepmania.png" alt="StepMania" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/multibox/"><img src="/multibox.png" alt="MMO Multibox" loading="lazy" decoding="async"></a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/gaming/index_jp.html b/gaming/index_jp.html
new file mode 100644
index 0000000..ad06cdd
--- /dev/null
+++ b/gaming/index_jp.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>ゲーム — SillyLaird</title>
+ <meta name="description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta property="og:title" content="ゲーム — SillyLaird" />
+ <meta property="og:description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ゲーム — SillyLaird" />
+ <meta name="twitter:description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <script defer src="/assets/js/includes.js"></script>
+
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="gaming-title">
+ <h1 id="gaming-title">ゲーム</h1>
+ <p class="muted">Pages for games and projects.</p>
+
+ <ul class="tile-grid">
+ <li><a href="/gaming/runescape/"><img src="/runescape.png" alt="RuneScape" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/specialforce/"><img src="/soldierfront.png" alt="SpecialForce / SoldierFront" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/stepmania/"><img src="/stepmania.png" alt="StepMania" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/multibox/"><img src="/multibox.png" alt="MMO Multibox" loading="lazy" decoding="async"></a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer">
+ <footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+ </footer>
+ </div>
+</body>
+</html>
diff --git a/gaming/index_zh.html b/gaming/index_zh.html
new file mode 100644
index 0000000..4c47c49
--- /dev/null
+++ b/gaming/index_zh.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>游戏 — SillyLaird</title>
+ <meta name="description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta property="og:title" content="游戏 — SillyLaird" />
+ <meta property="og:description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="游戏 — SillyLaird" />
+ <meta name="twitter:description" content="Games I play and projects I mess with — RuneScape, StepMania, SoldierFront, and more." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="gaming-title">
+ <h1 id="gaming-title">游戏</h1>
+ <p class="muted">Pages for games and projects.</p>
+
+ <ul class="tile-grid">
+ <li><a href="/gaming/runescape/"><img src="/runescape.png" alt="RuneScape" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/specialforce/"><img src="/soldierfront.png" alt="SpecialForce / SoldierFront" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/stepmania/"><img src="/stepmania.png" alt="StepMania" loading="lazy" decoding="async"></a></li>
+ <li><a href="/gaming/multibox/"><img src="/multibox.png" alt="MMO Multibox" loading="lazy" decoding="async"></a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/multibox/global_styles.css b/gaming/multibox/global_styles.css
new file mode 100644
index 0000000..fe453ea
--- /dev/null
+++ b/gaming/multibox/global_styles.css
@@ -0,0 +1,53 @@
+/* styles.css */
+
+body {
+ font-family: Arial, sans-serif;
+ line-height: 1.6;
+ margin: 0;
+ padding: 0;
+ background-color: #f4f4f4;
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+}
+
+header {
+ background: #333;
+ color: #fff;
+ padding: 10px 0;
+ text-align: center;
+}
+
+nav ul {
+ list-style: none;
+ padding: 0;
+}
+
+nav ul li {
+ display: inline;
+ margin: 0 15px;
+}
+
+nav ul li a {
+ color: #fff;
+ text-decoration: none;
+}
+
+main {
+ padding: 20px;
+ flex: 1;
+}
+
+h2 {
+ color: #333;
+}
+
+footer {
+ background: #333;
+ color: #fff;
+ text-align: center;
+ padding: 10px 0;
+ position: fixed;
+ width: 100%;
+ bottom: 0;
+} \ No newline at end of file
diff --git a/gaming/multibox/index.html b/gaming/multibox/index.html
new file mode 100644
index 0000000..96a59b2
--- /dev/null
+++ b/gaming/multibox/index.html
@@ -0,0 +1,103 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Multiboxing — SillyLaird</title>
+ <meta name="description" content="Multiboxing in MMORPGs." />
+ <meta property="og:title" content="Multiboxing — SillyLaird" />
+ <meta property="og:description" content="Multiboxing in MMORPGs." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/multibox/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Multiboxing — SillyLaird" />
+ <meta name="twitter:description" content="Multiboxing in MMORPGs." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/multibox/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/multibox/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/multibox/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/multibox/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/multibox/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="mb-title">
+ <h1 id="mb-title">Multiboxing in MMORPGs</h1>
+ <p class="muted">Playing multiple characters at the same time.</p>
+ </section>
+
+ <section id="what-is-multiboxing" aria-labelledby="what-title">
+ <h2 id="what-title">What is Multiboxing?</h2>
+ <p>Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.</p>
+ <p>Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.</p>
+ </section>
+
+ <section id="pros-cons" aria-labelledby="pros-title">
+ <h2 id="pros-title">Pros and Cons</h2>
+
+ <h3>Pros</h3>
+ <ul>
+ <li>More control over your gameplay experience.</li>
+ <li>Ability to accomplish multi-character tasks solo.</li>
+ <li>Increased resource gathering and in-game efficiency.</li>
+ </ul>
+
+ <h3>Cons</h3>
+ <ul>
+ <li>Requires significant hardware capabilities.</li>
+ <li>Can be costly due to multiple subscriptions.</li>
+ <li>Potential for breaches of game terms of service.</li>
+ </ul>
+ </section>
+
+ <section id="getting-started" aria-labelledby="start-title">
+ <h2 id="start-title">Getting Started</h2>
+ <p>To begin multiboxing, you will need:</p>
+ <ul>
+ <li>Multiple game accounts.</li>
+ <li>A computer that can handle running multiple instances of the game.</li>
+ <li>Knowledge of key broadcasting software.</li>
+ </ul>
+ </section>
+
+ <section id="tools" aria-labelledby="tools-title">
+ <h2 id="tools-title">Tools and Software</h2>
+ <ul>
+ <li>ISBoxer</li>
+ <li>HotkeyNet</li>
+ <li>AutoHotkey</li>
+ </ul>
+ </section>
+
+ <section id="examples" aria-labelledby="examples-title">
+ <h2 id="examples-title">Examples on YouTube</h2>
+
+ <p><iframe src="https://www.youtube.com/embed/6qGL-7NkpGM" allowfullscreen title="OSRS multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">OSRS/RuneScape MultiBoxing</p>
+
+ <p><iframe src="https://www.youtube.com/embed/nJ428TJs6Mw" allowfullscreen title="WoW multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">WOW MultiBoxing</p>
+
+ <p><iframe src="https://www.youtube.com/embed/lvTl1qEvJms" allowfullscreen title="TF2 multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">TF2 Cheating "MultiBoxing"</p>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/multibox/index_jp.html b/gaming/multibox/index_jp.html
new file mode 100644
index 0000000..ceb5515
--- /dev/null
+++ b/gaming/multibox/index_jp.html
@@ -0,0 +1,102 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Multiboxing — SillyLaird</title>
+ <meta name="description" content="Multiboxing in MMORPGs." />
+ <meta property="og:title" content="Multiboxing — SillyLaird" />
+ <meta property="og:description" content="Multiboxing in MMORPGs." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/multibox/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Multiboxing — SillyLaird" />
+ <meta name="twitter:description" content="Multiboxing in MMORPGs." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/multibox/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/multibox/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/multibox/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/multibox/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/multibox/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="mb-title">
+ <h1 id="mb-title">Multiboxing in MMORPGs</h1>
+ <p class="muted">Playing multiple characters at the same time.</p>
+ </section>
+
+ <section id="what-is-multiboxing" aria-labelledby="what-title">
+ <h2 id="what-title">What is Multiboxing?</h2>
+ <p>Multiboxing is a term used in MMORPGs that refers to playing multiple characters simultaneously. This is usually done using multiple accounts, computers, or software.</p>
+ </section>
+
+ <section id="pros-cons" aria-labelledby="pros-title">
+ <h2 id="pros-title">Pros and Cons</h2>
+
+ <h3>Pros</h3>
+ <ul>
+ <li>More control over your gameplay experience.</li>
+ <li>Ability to accomplish multi-character tasks solo.</li>
+ <li>Increased resource gathering and in-game efficiency.</li>
+ </ul>
+
+ <h3>Cons</h3>
+ <ul>
+ <li>Requires significant hardware capabilities.</li>
+ <li>Can be costly due to multiple subscriptions.</li>
+ <li>Potential for breaches of game terms of service.</li>
+ </ul>
+ </section>
+
+ <section id="getting-started" aria-labelledby="start-title">
+ <h2 id="start-title">Getting Started</h2>
+ <p>To begin multiboxing, you will need:</p>
+ <ul>
+ <li>Multiple game accounts.</li>
+ <li>A computer that can handle running multiple instances of the game.</li>
+ <li>Knowledge of key broadcasting software.</li>
+ </ul>
+ </section>
+
+ <section id="tools" aria-labelledby="tools-title">
+ <h2 id="tools-title">Tools and Software</h2>
+ <ul>
+ <li>ISBoxer</li>
+ <li>HotkeyNet</li>
+ <li>AutoHotkey</li>
+ </ul>
+ </section>
+
+ <section id="examples" aria-labelledby="examples-title">
+ <h2 id="examples-title">Examples on YouTube</h2>
+
+ <p><iframe src="https://www.youtube.com/embed/6qGL-7NkpGM" allowfullscreen title="OSRS multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">OSRS/RuneScape MultiBoxing</p>
+
+ <p><iframe src="https://www.youtube.com/embed/nJ428TJs6Mw" allowfullscreen title="WoW multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">WOW MultiBoxing</p>
+
+ <p><iframe src="https://www.youtube.com/embed/lvTl1qEvJms" allowfullscreen title="TF2 multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">TF2 Cheating "MultiBoxing"</p>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/multibox/index_zh.html b/gaming/multibox/index_zh.html
new file mode 100644
index 0000000..a61ae34
--- /dev/null
+++ b/gaming/multibox/index_zh.html
@@ -0,0 +1,102 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Multiboxing — SillyLaird</title>
+ <meta name="description" content="Multiboxing in MMORPGs." />
+ <meta property="og:title" content="Multiboxing — SillyLaird" />
+ <meta property="og:description" content="Multiboxing in MMORPGs." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/multibox/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Multiboxing — SillyLaird" />
+ <meta name="twitter:description" content="Multiboxing in MMORPGs." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/multibox/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/multibox/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/multibox/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/multibox/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/multibox/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="mb-title">
+ <h1 id="mb-title">Multiboxing in MMORPGs</h1>
+ <p class="muted">Playing multiple characters at the same time.</p>
+ </section>
+
+ <section id="what-is-multiboxing" aria-labelledby="what-title">
+ <h2 id="what-title">What is Multiboxing?</h2>
+ <p>Multiboxing is a term used in MMORPGs that refers to playing multiple characters simultaneously. This is usually done using multiple accounts, computers, or software.</p>
+ </section>
+
+ <section id="pros-cons" aria-labelledby="pros-title">
+ <h2 id="pros-title">Pros and Cons</h2>
+
+ <h3>Pros</h3>
+ <ul>
+ <li>More control over your gameplay experience.</li>
+ <li>Ability to accomplish multi-character tasks solo.</li>
+ <li>Increased resource gathering and in-game efficiency.</li>
+ </ul>
+
+ <h3>Cons</h3>
+ <ul>
+ <li>Requires significant hardware capabilities.</li>
+ <li>Can be costly due to multiple subscriptions.</li>
+ <li>Potential for breaches of game terms of service.</li>
+ </ul>
+ </section>
+
+ <section id="getting-started" aria-labelledby="start-title">
+ <h2 id="start-title">Getting Started</h2>
+ <p>To begin multiboxing, you will need:</p>
+ <ul>
+ <li>Multiple game accounts.</li>
+ <li>A computer that can handle running multiple instances of the game.</li>
+ <li>Knowledge of key broadcasting software.</li>
+ </ul>
+ </section>
+
+ <section id="tools" aria-labelledby="tools-title">
+ <h2 id="tools-title">Tools and Software</h2>
+ <ul>
+ <li>ISBoxer</li>
+ <li>HotkeyNet</li>
+ <li>AutoHotkey</li>
+ </ul>
+ </section>
+
+ <section id="examples" aria-labelledby="examples-title">
+ <h2 id="examples-title">Examples on YouTube</h2>
+
+ <p><iframe src="https://www.youtube.com/embed/6qGL-7NkpGM" allowfullscreen title="OSRS multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">OSRS/RuneScape MultiBoxing</p>
+
+ <p><iframe src="https://www.youtube.com/embed/nJ428TJs6Mw" allowfullscreen title="WoW multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">WOW MultiBoxing</p>
+
+ <p><iframe src="https://www.youtube.com/embed/lvTl1qEvJms" allowfullscreen title="TF2 multiboxing" class="saf481e1471"></iframe></p>
+ <p class="muted">TF2 Cheating "MultiBoxing"</p>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/multibox/styles.css b/gaming/multibox/styles.css
new file mode 100644
index 0000000..95dea86
--- /dev/null
+++ b/gaming/multibox/styles.css
@@ -0,0 +1,54 @@
+/* styles.css */
+
+body {
+ font-family: Arial, sans-serif;
+ line-height: 1.6;
+ margin: 0;
+ padding: 0;
+ background-color: #f4f4f4;
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+}
+
+header {
+ background: #333;
+ color: #fff;
+ padding: 10px 0;
+ text-align: center;
+}
+
+nav ul {
+ list-style: none;
+ padding: 0;
+}
+
+nav ul li {
+ display: inline;
+ margin: 0 15px;
+}
+
+nav ul li a {
+ color: #fff;
+ text-decoration: none;
+}
+
+main {
+ padding: 20px;
+ flex: 1;
+ padding-bottom: 60px; /* Add bottom padding to ensure space for footer */
+}
+
+h2 {
+ color: #333;
+}
+
+footer {
+ background: #333;
+ color: #fff;
+ text-align: center;
+ padding: 10px 0;
+ position: fixed;
+ width: 100%;
+ bottom: 0;
+} \ No newline at end of file
diff --git a/gaming/multibox/what-is-multiboxing/index.html b/gaming/multibox/what-is-multiboxing/index.html
new file mode 100644
index 0000000..c7ce04e
--- /dev/null
+++ b/gaming/multibox/what-is-multiboxing/index.html
@@ -0,0 +1,79 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>What Is Multiboxing? — SillyLaird</title>
+ <meta name="description" content="Detailed multiboxing overview." />
+ <meta property="og:title" content="What Is Multiboxing? — SillyLaird" />
+ <meta property="og:description" content="Detailed multiboxing overview." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="What Is Multiboxing? — SillyLaird" />
+ <meta name="twitter:description" content="Detailed multiboxing overview." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="title">
+ <h1 id="title">What is Multiboxing?</h1>
+ <p class="muted">A longer explanation (methods, uses, examples).</p>
+ </section>
+
+ <section>
+ <h2>Overview</h2>
+ <p>Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.</p>
+ <p>Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.</p>
+ </section>
+
+ <section>
+ <h2>Methods</h2>
+ <ul>
+ <li><strong>Multiple Computers:</strong> Several physical PCs, each running one account.</li>
+ <li><strong>Virtual Machines:</strong> Multiple OS instances on one machine.</li>
+ <li><strong>Software Solutions:</strong> Keystroke broadcasting / window management tools (game ToS varies).</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Common Uses</h2>
+ <ul>
+ <li><strong>Solo Group Content:</strong> Do group content without other players.</li>
+ <li><strong>Economy Control:</strong> Resource gathering / crafting on multiple chars.</li>
+ <li><strong>Power Leveling:</strong> Level alts quickly with a main.</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Examples</h2>
+ <p><strong>Old School RuneScape (OSRS)</strong></p>
+ <iframe src="https://www.youtube.com/embed/6qGL-7NkpGM" allowfullscreen title="OSRS multiboxing" class="saf481e1471"></iframe>
+ <p><strong>World of Warcraft (WoW)</strong></p>
+ <iframe src="https://www.youtube.com/embed/a5_5kbbmEiM" allowfullscreen title="WoW multiboxing" class="saf481e1471"></iframe>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/multibox/what-is-multiboxing/index_jp.html b/gaming/multibox/what-is-multiboxing/index_jp.html
new file mode 100644
index 0000000..355c6a7
--- /dev/null
+++ b/gaming/multibox/what-is-multiboxing/index_jp.html
@@ -0,0 +1,79 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>What Is Multiboxing? — SillyLaird</title>
+ <meta name="description" content="Detailed multiboxing overview." />
+ <meta property="og:title" content="What Is Multiboxing? — SillyLaird" />
+ <meta property="og:description" content="Detailed multiboxing overview." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="What Is Multiboxing? — SillyLaird" />
+ <meta name="twitter:description" content="Detailed multiboxing overview." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="title">
+ <h1 id="title">What is Multiboxing?</h1>
+ <p class="muted">A longer explanation (methods, uses, examples).</p>
+ </section>
+
+ <section>
+ <h2>Overview</h2>
+ <p>Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.</p>
+ <p>Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.</p>
+ </section>
+
+ <section>
+ <h2>Methods</h2>
+ <ul>
+ <li><strong>Multiple コンピューター:</strong> Several physical PCs, each running one account.</li>
+ <li><strong>Virtual Machines:</strong> Multiple OS instances on one machine.</li>
+ <li><strong>Software Solutions:</strong> Keystroke broadcasting / window management tools (game ToS varies).</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Common Uses</h2>
+ <ul>
+ <li><strong>Solo Group Content:</strong> Do group content without other players.</li>
+ <li><strong>Economy Control:</strong> Resource gathering / crafting on multiple chars.</li>
+ <li><strong>Power Leveling:</strong> Level alts quickly with a main.</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Examples</h2>
+ <p><strong>Old School RuneScape (OSRS)</strong></p>
+ <iframe src="https://www.youtube.com/embed/6qGL-7NkpGM" allowfullscreen title="OSRS multiboxing" class="saf481e1471"></iframe>
+ <p><strong>World of Warcraft (WoW)</strong></p>
+ <iframe src="https://www.youtube.com/embed/a5_5kbbmEiM" allowfullscreen title="WoW multiboxing" class="saf481e1471"></iframe>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/multibox/what-is-multiboxing/index_zh.html b/gaming/multibox/what-is-multiboxing/index_zh.html
new file mode 100644
index 0000000..b9785e7
--- /dev/null
+++ b/gaming/multibox/what-is-multiboxing/index_zh.html
@@ -0,0 +1,79 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>What Is Multiboxing? — SillyLaird</title>
+ <meta name="description" content="Detailed multiboxing overview." />
+ <meta property="og:title" content="What Is Multiboxing? — SillyLaird" />
+ <meta property="og:description" content="Detailed multiboxing overview." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="What Is Multiboxing? — SillyLaird" />
+ <meta name="twitter:description" content="Detailed multiboxing overview." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="title">
+ <h1 id="title">What is Multiboxing?</h1>
+ <p class="muted">A longer explanation (methods, uses, examples).</p>
+ </section>
+
+ <section>
+ <h2>Overview</h2>
+ <p>Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.</p>
+ <p>Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.</p>
+ </section>
+
+ <section>
+ <h2>Methods</h2>
+ <ul>
+ <li><strong>Multiple 电脑设备:</strong> Several physical PCs, each running one account.</li>
+ <li><strong>Virtual Machines:</strong> Multiple OS instances on one machine.</li>
+ <li><strong>Software Solutions:</strong> Keystroke broadcasting / window management tools (game ToS varies).</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Common Uses</h2>
+ <ul>
+ <li><strong>Solo Group Content:</strong> Do group content without other players.</li>
+ <li><strong>Economy Control:</strong> Resource gathering / crafting on multiple chars.</li>
+ <li><strong>Power Leveling:</strong> Level alts quickly with a main.</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Examples</h2>
+ <p><strong>Old School RuneScape (OSRS)</strong></p>
+ <iframe src="https://www.youtube.com/embed/6qGL-7NkpGM" allowfullscreen title="OSRS multiboxing" class="saf481e1471"></iframe>
+ <p><strong>World of Warcraft (WoW)</strong></p>
+ <iframe src="https://www.youtube.com/embed/a5_5kbbmEiM" allowfullscreen title="WoW multiboxing" class="saf481e1471"></iframe>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/multibox/what-is-multiboxing/styles.css b/gaming/multibox/what-is-multiboxing/styles.css
new file mode 100644
index 0000000..95dea86
--- /dev/null
+++ b/gaming/multibox/what-is-multiboxing/styles.css
@@ -0,0 +1,54 @@
+/* styles.css */
+
+body {
+ font-family: Arial, sans-serif;
+ line-height: 1.6;
+ margin: 0;
+ padding: 0;
+ background-color: #f4f4f4;
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+}
+
+header {
+ background: #333;
+ color: #fff;
+ padding: 10px 0;
+ text-align: center;
+}
+
+nav ul {
+ list-style: none;
+ padding: 0;
+}
+
+nav ul li {
+ display: inline;
+ margin: 0 15px;
+}
+
+nav ul li a {
+ color: #fff;
+ text-decoration: none;
+}
+
+main {
+ padding: 20px;
+ flex: 1;
+ padding-bottom: 60px; /* Add bottom padding to ensure space for footer */
+}
+
+h2 {
+ color: #333;
+}
+
+footer {
+ background: #333;
+ color: #fff;
+ text-align: center;
+ padding: 10px 0;
+ position: fixed;
+ width: 100%;
+ bottom: 0;
+} \ No newline at end of file
diff --git a/gaming/runescape/index.html b/gaming/runescape/index.html
new file mode 100644
index 0000000..69f10df
--- /dev/null
+++ b/gaming/runescape/index.html
@@ -0,0 +1,66 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta property="og:title" content="RuneScape — SillyLaird" />
+ <meta property="og:description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/runescape/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="RuneScape — SillyLaird" />
+ <meta property="og:description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/runescape/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/runescape/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/runescape/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/runescape/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/runescape/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="rs-title">
+ <h1 id="rs-title">RuneScape (OSRS)</h1>
+ <p class="muted">A small fan page / launch pad.</p>
+
+ <img
+ src="https://oldschool.runescape.wiki/images/thumb/Old_School_RuneScape_logo.png/1200px-Old_School_RuneScape_logo.png?d047b"
+ alt="Old School RuneScape Logo"
+ loading="lazy"
+ decoding="async" class="sb83d4c5326"
+ />
+
+ <p class="sd1a2ffa0b4">
+ <a class="header-button" href="https://oldschool.runescape.wiki/" target="_blank" rel="noopener">Visit OSRS Wiki</a>
+ </p>
+ </section>
+
+ <section aria-labelledby="guides-title">
+ <h2 id="guides-title">Essential Guides</h2>
+ <ul class="contact-list">
+ <li><a href="#">Combat XP Calculator</a></li>
+ <li><a href="#">Quest Item Database</a></li>
+ <li><a href="#">Grand Exchange Tracker</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/runescape/index_jp.html b/gaming/runescape/index_jp.html
new file mode 100644
index 0000000..20971c0
--- /dev/null
+++ b/gaming/runescape/index_jp.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta property="og:title" content="RuneScape — SillyLaird" />
+ <meta property="og:description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/runescape/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="RuneScape — SillyLaird" />
+ <meta name="twitter:description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/runescape/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/runescape/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/runescape/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/runescape/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/runescape/index_jp.html" />
+ <meta name="keywords" content="sillylaird, runescape, osrs, gielinor" />
+ <title>RuneScape — SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="rs-title">
+ <h1 id="rs-title">RuneScape (OSRS)</h1>
+ <p class="muted">A small fan page / launch pad.</p>
+
+ <img
+ src="https://oldschool.runescape.wiki/images/thumb/Old_School_RuneScape_logo.png/1200px-Old_School_RuneScape_logo.png?d047b"
+ alt="Old School RuneScape Logo"
+ loading="lazy"
+ decoding="async" class="sb83d4c5326"
+ />
+
+ <p class="sd1a2ffa0b4">
+ <a class="header-button" href="https://oldschool.runescape.wiki/" target="_blank" rel="noopener">Visit OSRS Wiki</a>
+ </p>
+ </section>
+
+ <section aria-labelledby="guides-title">
+ <h2 id="guides-title">Essential Guides</h2>
+ <ul class="contact-list">
+ <li><a href="#">Combat XP Calculator</a></li>
+ <li><a href="#">Quest Item Database</a></li>
+ <li><a href="#">Grand Exchange Tracker</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/runescape/index_zh.html b/gaming/runescape/index_zh.html
new file mode 100644
index 0000000..7d2829e
--- /dev/null
+++ b/gaming/runescape/index_zh.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta property="og:title" content="RuneScape — SillyLaird" />
+ <meta property="og:description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/runescape/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="RuneScape — SillyLaird" />
+ <meta name="twitter:description" content="RuneScape / OSRS fan page by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/runescape/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/runescape/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/runescape/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/runescape/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/runescape/index_jp.html" />
+ <meta name="keywords" content="sillylaird, runescape, osrs, gielinor" />
+ <title>RuneScape — SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="rs-title">
+ <h1 id="rs-title">RuneScape (OSRS)</h1>
+ <p class="muted">A small fan page / launch pad.</p>
+
+ <img
+ src="https://oldschool.runescape.wiki/images/thumb/Old_School_RuneScape_logo.png/1200px-Old_School_RuneScape_logo.png?d047b"
+ alt="Old School RuneScape Logo"
+ loading="lazy"
+ decoding="async" class="sb83d4c5326"
+ />
+
+ <p class="sd1a2ffa0b4">
+ <a class="header-button" href="https://oldschool.runescape.wiki/" target="_blank" rel="noopener">Visit OSRS Wiki</a>
+ </p>
+ </section>
+
+ <section aria-labelledby="guides-title">
+ <h2 id="guides-title">Essential Guides</h2>
+ <ul class="contact-list">
+ <li><a href="#">Combat XP Calculator</a></li>
+ <li><a href="#">Quest Item Database</a></li>
+ <li><a href="#">Grand Exchange Tracker</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/runescape/runescape.png b/gaming/runescape/runescape.png
new file mode 100644
index 0000000..a083358
--- /dev/null
+++ b/gaming/runescape/runescape.png
Binary files differ
diff --git a/gaming/specialforce/SpecialForce_Launcher.exe b/gaming/specialforce/SpecialForce_Launcher.exe
new file mode 100644
index 0000000..befd61f
--- /dev/null
+++ b/gaming/specialforce/SpecialForce_Launcher.exe
Binary files differ
diff --git a/gaming/specialforce/index.html b/gaming/specialforce/index.html
new file mode 100644
index 0000000..39474e8
--- /dev/null
+++ b/gaming/specialforce/index.html
@@ -0,0 +1,63 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta property="og:title" content="SpecialForce — SillyLaird" />
+ <meta property="og:description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/specialforce/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SpecialForce — SillyLaird" />
+ <meta property="og:description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/specialforce/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/specialforce/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/specialforce/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/specialforce/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/specialforce/index_jp.html" />
+ <meta name="keywords" content="sillylaird, special force, soldierfront" />
+ <title>SpecialForce — SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="sf-title">
+ <h1 id="sf-title">SoldierFront / SpecialForce</h1>
+ <p class="muted">Small page/wiki and file drop.</p>
+
+ <p class="sdac4fe6c9b">
+ <img src="/sflogo2.jpg" alt="SoldierFront / SpecialForce" loading="lazy" decoding="async" class="sfed215d685" />
+ </p>
+
+ <p class="sdac4fe6c9b">
+ <a class="header-button" href="https://en.wikipedia.org/wiki/Special_Force_(2004_video_game)" target="_blank" rel="noopener">Wikipedia</a>
+ </p>
+ </section>
+
+ <section aria-labelledby="launchers-title">
+ <h2 id="launchers-title">SpecialForce Launcher Files</h2>
+ <ul class="contact-list">
+ <li><a href="SpecialForce_Launcher.exe">SpecialForce Launcher</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/specialforce/index_jp.html b/gaming/specialforce/index_jp.html
new file mode 100644
index 0000000..988f7a1
--- /dev/null
+++ b/gaming/specialforce/index_jp.html
@@ -0,0 +1,63 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta property="og:title" content="SpecialForce — SillyLaird" />
+ <meta property="og:description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/specialforce/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SpecialForce — SillyLaird" />
+ <meta name="twitter:description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/specialforce/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/specialforce/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/specialforce/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/specialforce/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/specialforce/index_jp.html" />
+ <meta name="keywords" content="sillylaird, special force, soldierfront" />
+ <title>SpecialForce — SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="sf-title">
+ <h1 id="sf-title">SoldierFront / SpecialForce</h1>
+ <p class="muted">Small page/wiki and file drop.</p>
+
+ <p class="sdac4fe6c9b">
+ <img src="/sflogo2.jpg" alt="SoldierFront / SpecialForce" loading="lazy" decoding="async" class="sfed215d685" />
+ </p>
+
+ <p class="sd1a2ffa0b4">
+ <a class="header-button" href="https://en.wikipedia.org/wiki/Special_Force_(2004_video_game)" target="_blank" rel="noopener">Wikipedia</a>
+ </p>
+ </section>
+
+ <section aria-labelledby="launchers-title">
+ <h2 id="launchers-title">SpecialForce Launcher Files</h2>
+ <ul class="contact-list">
+ <li><a href="SpecialForce_Launcher.exe">SpecialForce Launcher</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/specialforce/index_zh.html b/gaming/specialforce/index_zh.html
new file mode 100644
index 0000000..9154050
--- /dev/null
+++ b/gaming/specialforce/index_zh.html
@@ -0,0 +1,63 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta property="og:title" content="SpecialForce — SillyLaird" />
+ <meta property="og:description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/specialforce/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SpecialForce — SillyLaird" />
+ <meta name="twitter:description" content="SoldierFront / SpecialForce page by SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/specialforce/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/specialforce/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/specialforce/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/specialforce/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/specialforce/index_jp.html" />
+ <meta name="keywords" content="sillylaird, special force, soldierfront" />
+ <title>SpecialForce — SillyLaird</title>
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="sf-title">
+ <h1 id="sf-title">SoldierFront / SpecialForce</h1>
+ <p class="muted">Small page/wiki and file drop.</p>
+
+ <p class="sdac4fe6c9b">
+ <img src="/sflogo2.jpg" alt="SoldierFront / SpecialForce" loading="lazy" decoding="async" class="sfed215d685" />
+ </p>
+
+ <p class="sd1a2ffa0b4">
+ <a class="header-button" href="https://en.wikipedia.org/wiki/Special_Force_(2004_video_game)" target="_blank" rel="noopener">Wikipedia</a>
+ </p>
+ </section>
+
+ <section aria-labelledby="launchers-title">
+ <h2 id="launchers-title">SpecialForce Launcher Files</h2>
+ <ul class="contact-list">
+ <li><a href="SpecialForce_Launcher.exe">SpecialForce Launcher</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/specialforce/style.css b/gaming/specialforce/style.css
new file mode 100644
index 0000000..aa84069
--- /dev/null
+++ b/gaming/specialforce/style.css
@@ -0,0 +1,113 @@
+/* --- RESET & BASICS --------------------------------------------------- */
+*,*::before,*::after{box-sizing:border-box;}
+html,body{margin:0;padding:0;font-family:system-ui,Helvetica,Arial,sans-serif;line-height:1.4;background:#ffd;}
+body{text-align:left;}
+
+/* --- LAYOUT ----------------------------------------------------------- */
+header{padding:1rem 1.5rem;background:#ffd;display:flex;flex-direction:column;align-items:flex-start;}
+main{padding:1.5rem;margin:0 1.5rem;max-width:none;}
+
+/* --- LINKS ------------------------------------------------------------ */
+a{text-decoration:none;border-radius:4px;padding:2px 4px;transition:background .2s,color .2s;}
+a:hover{background:red;color:#000;}
+a.no-hover-box:hover{background:transparent;color:red;}
+
+/* --- SIDEBAR ---------------------------------------------------------- */
+#mobile-sidebar {
+ position: fixed;
+ top: 0;
+ right: 0;
+ width: 250px;
+ max-height: 100vh;
+ overflow-y: auto;
+ background: #ffd;
+ transform: translateX(100%);
+ transition: transform .3s ease-in-out;
+ padding: 1rem;
+ box-shadow: -4px 0 8px rgba(0,0,0,.15);
+ z-index: 9000;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+}
+#mobile-sidebar.visible { transform: translateX(0); }
+#mobile-sidebar::-webkit-scrollbar { display: none; }
+
+#menu-toggle {
+ position: fixed;
+ top: 1rem;
+ right: 1rem;
+ z-index: 9100;
+ padding: .5rem 1rem;
+ border: none;
+ background: #ffd;
+ color: black;
+ border-radius: 4px;
+ cursor: pointer;
+}
+#menu-toggle:hover { background: #ffd; color: red; }
+
+/* --- LOGO ------------------------------------------------------------- */
+.logo {
+ width: 100px;
+ display: block;
+ margin-bottom: 1rem;
+}
+
+/* --- BUTTON ----------------------------------------------------------- */
+.button {
+ background-color: black;
+ color: white;
+ padding: 10px 20px;
+ text-align: center;
+ text-decoration: none;
+ display: inline-block;
+ font-size: 1em;
+ margin: 20px 0;
+ cursor: pointer;
+ border-radius: 8px;
+ transition: background 0.3s, transform 0.3s;
+}
+.button:hover {
+ background-color: red;
+ transform: translateY(-2px);
+}
+
+/* --- FOOTER ----------------------------------------------------------- */
+.footer {
+ background-color: #282828;
+ color: #aaa;
+ padding: 30px 20px;
+ text-align: center;
+ font-size: 0.9em;
+ border-top: 2px solid #555;
+ margin-top: 20px;
+}
+.footer a {
+ color: #00aced;
+ text-decoration: none;
+}
+.footer a:hover {
+ text-decoration: underline;
+}
+
+/* --- MEDIA QUERIES --------------------------------------------------- */
+@media (max-width: 768px) {
+ body {
+ flex-direction: column;
+ font-size: 14px;
+ }
+ .sidebar {
+ width: 100%;
+ min-height: auto;
+ box-shadow: none;
+ }
+ main {
+ width: 100%;
+ }
+ h1 {
+ font-size: 2em;
+ }
+ .button {
+ font-size: 0.9em;
+ }
+}
diff --git a/gaming/stepmania/index.html b/gaming/stepmania/index.html
new file mode 100644
index 0000000..919f298
--- /dev/null
+++ b/gaming/stepmania/index.html
@@ -0,0 +1,102 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>StepMania — SillyLaird</title>
+ <meta name="description" content="StepMania page and downloads." />
+ <meta property="og:title" content="StepMania — SillyLaird" />
+ <meta property="og:description" content="StepMania page and downloads." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/stepmania/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="StepMania — SillyLaird" />
+ <meta name="twitter:description" content="StepMania page and downloads." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/stepmania/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/stepmania/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/stepmania/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/stepmania/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/stepmania/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="sm-title">
+ <h1 id="sm-title">StepMania</h1>
+ <p class="muted">Clean, fast, and to the point.</p>
+ </section>
+
+ <section aria-labelledby="packs-title">
+ <h2 id="packs-title">Song Packs</h2>
+ <ul class="contact-list">
+ <li>Dance Revolution Mix 2024</li>
+ <li>Retro Arcade Hits</li>
+ <li>Anime Beats Edition</li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="scores-title">
+ <h2 id="scores-title">High Scores</h2>
+ <div class="s16a8a8b00c">
+ <table class="s473e6bbfeb">
+ <thead>
+ <tr>
+ <th class="sf2e940dbbf">Rank</th>
+ <th class="sf2e940dbbf">Player</th>
+ <th class="sf2e940dbbf">Song</th>
+ <th class="sf2e940dbbf">Score</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="s6f279abaab">1</td>
+ <td class="s6f279abaab">NeoStep</td>
+ <td class="s6f279abaab">PARANOiA Rebirth</td>
+ <td class="s6f279abaab">997,450</td>
+ </tr>
+ <tr>
+ <td class="s6f279abaab">2</td>
+ <td class="s6f279abaab">LainDance</td>
+ <td class="s6f279abaab">MAX 300</td>
+ <td class="s6f279abaab">995,210</td>
+ </tr>
+ <tr>
+ <td class="s44cd1236df">3</td>
+ <td class="s44cd1236df">PadWizard</td>
+ <td class="s44cd1236df">vanity angel</td>
+ <td class="s44cd1236df">992,880</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </section>
+
+ <section aria-labelledby="downloads-title">
+ <h2 id="downloads-title">Downloads</h2>
+ <p><a href="https://www.mediafire.com/folder/ncph2tqkddpli/downloads" target="_blank" rel="noopener noreferrer">StepMania 3.9 / 3.95 / misc files</a></p>
+ </section>
+
+ <section aria-labelledby="contact-title">
+ <h2 id="contact-title">Contact</h2>
+ <p><a href="mailto:m@sillylaird.ca">m@sillylaird.ca</a></p>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/stepmania/index_jp.html b/gaming/stepmania/index_jp.html
new file mode 100644
index 0000000..42c8d85
--- /dev/null
+++ b/gaming/stepmania/index_jp.html
@@ -0,0 +1,102 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>StepMania — SillyLaird</title>
+ <meta name="description" content="StepMania page and downloads." />
+ <meta property="og:title" content="StepMania — SillyLaird" />
+ <meta property="og:description" content="StepMania page and downloads." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/stepmania/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="StepMania — SillyLaird" />
+ <meta name="twitter:description" content="StepMania page and downloads." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/stepmania/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/stepmania/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/stepmania/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/stepmania/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/stepmania/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="sm-title">
+ <h1 id="sm-title">StepMania</h1>
+ <p class="muted">Clean, fast, and to the point.</p>
+ </section>
+
+ <section aria-labelledby="packs-title">
+ <h2 id="packs-title">Song Packs</h2>
+ <ul class="contact-list">
+ <li>Dance Revolution Mix 2024</li>
+ <li>Retro Arcade Hits</li>
+ <li>Anime Beats Edition</li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="scores-title">
+ <h2 id="scores-title">High Scores</h2>
+ <div class="s16a8a8b00c">
+ <table class="s473e6bbfeb">
+ <thead>
+ <tr>
+ <th class="sf2e940dbbf">Rank</th>
+ <th class="sf2e940dbbf">Player</th>
+ <th class="sf2e940dbbf">Song</th>
+ <th class="sf2e940dbbf">Score</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="s6f279abaab">1</td>
+ <td class="s6f279abaab">NeoStep</td>
+ <td class="s6f279abaab">PARANOiA Rebirth</td>
+ <td class="s6f279abaab">997,450</td>
+ </tr>
+ <tr>
+ <td class="s6f279abaab">2</td>
+ <td class="s6f279abaab">LainDance</td>
+ <td class="s6f279abaab">MAX 300</td>
+ <td class="s6f279abaab">995,210</td>
+ </tr>
+ <tr>
+ <td class="s44cd1236df">3</td>
+ <td class="s44cd1236df">PadWizard</td>
+ <td class="s44cd1236df">vanity angel</td>
+ <td class="s44cd1236df">992,880</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </section>
+
+ <section aria-labelledby="downloads-title">
+ <h2 id="downloads-title">Downloads</h2>
+ <p><a href="https://www.mediafire.com/folder/ncph2tqkddpli/downloads" target="_blank" rel="noopener noreferrer">StepMania 3.9 / 3.95 / misc files</a></p>
+ </section>
+
+ <section aria-labelledby="contact-title">
+ <h2 id="contact-title">連絡先</h2>
+ <p><a href="mailto:m@sillylaird.ca">m@sillylaird.ca</a></p>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/stepmania/index_zh.html b/gaming/stepmania/index_zh.html
new file mode 100644
index 0000000..868f912
--- /dev/null
+++ b/gaming/stepmania/index_zh.html
@@ -0,0 +1,104 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>StepMania — SillyLaird</title>
+ <meta name="description" content="StepMania page and downloads." />
+ <meta property="og:title" content="StepMania — SillyLaird" />
+ <meta property="og:description" content="StepMania page and downloads." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/gaming/stepmania/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="StepMania — SillyLaird" />
+ <meta name="twitter:description" content="StepMania page and downloads." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/gaming/stepmania/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/stepmania/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/stepmania/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/stepmania/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/stepmania/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/stepmania_zh.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="sm-title">
+ <h1 id="sm-title">StepMania</h1>
+ <p class="muted">Clean, fast, and to the point.</p>
+ </section>
+
+ <section aria-labelledby="packs-title">
+ <h2 id="packs-title">Song Packs</h2>
+ <ul class="contact-list">
+ <li>Dance Revolution Mix 2024</li>
+ <li>Retro Arcade Hits</li>
+ <li>Anime Beats Edition</li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="scores-title">
+ <h2 id="scores-title">High Scores</h2>
+ <div class="s16a8a8b00c">
+ <table class="s473e6bbfeb">
+ <thead>
+ <tr>
+ <th class="sf2e940dbbf">Rank</th>
+ <th class="sf2e940dbbf">Player</th>
+ <th class="sf2e940dbbf">Song</th>
+ <th class="sf2e940dbbf">Score</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="s6f279abaab">1</td>
+ <td class="s6f279abaab">NeoStep</td>
+ <td class="s6f279abaab">PARANOiA Rebirth</td>
+ <td class="s6f279abaab">997,450</td>
+ </tr>
+ <tr>
+ <td class="s6f279abaab">2</td>
+ <td class="s6f279abaab">LainDance</td>
+ <td class="s6f279abaab">MAX 300</td>
+ <td class="s6f279abaab">995,210</td>
+ </tr>
+ <tr>
+ <td class="s44cd1236df">3</td>
+ <td class="s44cd1236df">PadWizard</td>
+ <td class="s44cd1236df">vanity angel</td>
+ <td class="s44cd1236df">992,880</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </section>
+
+ <section aria-labelledby="downloads-title">
+ <h2 id="downloads-title">Downloads</h2>
+ <p><a href="https://www.mediafire.com/folder/ncph2tqkddpli/downloads" target="_blank" rel="noopener noreferrer">StepMania 3.9 / 3.95 / misc files</a></p>
+ </section>
+
+ <section aria-labelledby="contact-title">
+ <h2 id="contact-title">联系</h2>
+ <p><a href="mailto:m@sillylaird.ca">m@sillylaird.ca</a></p>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/gaming/stepmania/script.js b/gaming/stepmania/script.js
new file mode 100644
index 0000000..1deb43c
--- /dev/null
+++ b/gaming/stepmania/script.js
@@ -0,0 +1,46 @@
+document.addEventListener('DOMContentLoaded', () => {
+ // Simple active link when clicking nav
+ const links = Array.from(document.querySelectorAll('nav a[href^="#"]'));
+ links.forEach(a => {
+ a.addEventListener('click', e => {
+ const id = a.getAttribute('href');
+ const target = document.querySelector(id);
+ if (!target) return;
+ e.preventDefault();
+ links.forEach(x => x.classList.remove('is-active'));
+ a.classList.add('is-active');
+ target.scrollIntoView({ behavior: 'smooth', block: 'start' });
+ history.replaceState(null, '', id);
+ });
+ });
+
+ // Minimal demo scoreboard
+ const data = [
+ { rank: 1, player: 'NeoStep', song: 'PARANOiA Rebirth', score: '997,450' },
+ { rank: 2, player: 'LainDance', song: 'MAX 300', score: '995,210' },
+ { rank: 3, player: 'PadWizard', song: 'vanity angel', score: '992,880' },
+ ];
+ const board = document.getElementById('score-board');
+ if (board) {
+ const table = document.createElement('table');
+ table.innerHTML = `
+ <thead><tr>
+ <th>Rank</th><th>Player</th><th>Song</th><th>Score</th>
+ </tr></thead>
+ <tbody>
+ ${data.map(r => `<tr>
+ <td>${r.rank}</td><td>${r.player}</td><td>${r.song}</td><td>${r.score}</td>
+ </tr>`).join('')}
+ </tbody>`;
+ board.replaceChildren(table);
+ }
+
+ // Join button feedback
+ const btn = document.getElementById('join-event');
+ if (btn) {
+ btn.addEventListener('click', () => {
+ btn.disabled = true;
+ btn.textContent = 'You’re in! Check your inbox.';
+ });
+ }
+});
diff --git a/gaming/stepmania/style.css b/gaming/stepmania/style.css
new file mode 100644
index 0000000..20bca04
--- /dev/null
+++ b/gaming/stepmania/style.css
@@ -0,0 +1,139 @@
+/* Base */
+*, *::before, *::after { box-sizing: border-box; }
+
+html, body {
+ margin: 0;
+ padding: 0;
+ background: #ffd; /* light yellow */
+ color: #111;
+ font-family: system-ui, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+}
+
+/* Header */
+header {
+ padding: 16px;
+ background: #fff6c7;
+ border-bottom: 2px solid #e6d27a;
+ text-align: center;
+}
+h1 {
+ margin: 0 0 8px;
+ font-family: "Comic Sans MS","Chalkboard SE","Comic Neue",sans-serif;
+ font-size: 1.6rem;
+}
+
+/* Nav */
+nav ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: grid;
+ grid-auto-flow: column;
+ gap: 8px;
+ justify-content: center;
+}
+nav a {
+ display: inline-block;
+ padding: 6px 8px;
+ text-decoration: none;
+ color: #002;
+ border-radius: 4px;
+ transition: background .15s, color .15s;
+}
+nav a:hover, nav a.is-active {
+ background: red;
+ color: #000;
+}
+
+/* Layout */
+main {
+ max-width: 900px;
+ margin: 20px auto;
+ padding: 0 16px;
+}
+section { margin: 24px 0; }
+h2 { margin: 0 0 8px; }
+
+/* Hero image */
+.hero-image {
+ display: block;
+ max-width: 100%;
+ height: auto;
+ border-radius: 8px;
+ border: 2px solid #e6d27a;
+ background: #fffbe3;
+}
+
+/* Lists */
+#song-list { padding-left: 18px; }
+
+/* Scoreboard (minimal) */
+#score-board {
+ margin-top: 8px;
+ border: 2px solid #e6d27a;
+ border-radius: 8px;
+ background: #fffbe3;
+ overflow: hidden;
+}
+#score-board table { width: 100%; border-collapse: collapse; }
+#score-board th, #score-board td { padding: 8px; text-align: left; }
+#score-board thead th { background: #ffe06d; }
+#score-board tbody tr:nth-child(odd) { background: #fff6c7; }
+
+/* Button */
+button {
+ padding: 10px 14px;
+ border: 2px solid #e6d27a;
+ border-radius: 8px;
+ background: #ffd;
+ color: #111;
+ cursor: pointer;
+ transition: background .15s, color .15s;
+}
+button:hover { background: red; color: #fff; }
+
+/* Gallery (simple responsive) */
+.gallery {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+.gallery img {
+ width: calc(33.333% - 7px);
+ min-width: 160px;
+ flex: 1 1 auto;
+ border: 2px solid #e6d27a;
+ border-radius: 8px;
+ background: #fffbe3;
+}
+
+/* Form */
+form {
+ display: grid;
+ gap: 8px;
+ max-width: 600px;
+}
+input[type="text"], input[type="email"], textarea {
+ width: 100%;
+ padding: 10px;
+ border: 2px solid #e6d27a;
+ border-radius: 8px;
+ background: #fffef0;
+ font: inherit;
+ color: #111;
+}
+textarea { min-height: 120px; resize: vertical; }
+
+/* Footer */
+footer {
+ text-align: center;
+ color: #444;
+ margin: 32px 0 24px;
+}
+
+/* Small screens */
+@media (max-width: 640px) {
+ nav ul { grid-auto-flow: row; grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .gallery img { width: calc(50% - 5px); }
+}
diff --git a/git tutorial.txt b/git tutorial.txt
new file mode 100644
index 0000000..7145314
--- /dev/null
+++ b/git tutorial.txt
@@ -0,0 +1,108 @@
+ctx->guides->git
+Simple git guide for CVS users
+0x0. Set up your user name + email.
+$ git config --global user.name "you"
+$ git config --global user.email "you@yourserver.org"
+$ git config --global push.default simple
+This will create ~/.gitconfig.
+
+0x1. Centralized workflow - basic notions
+Git avoids touching the network as much as possible. The few basic commands that require network access are as shown below.
+
+* git-clone(1) # clone a repo for the first time
+* git-push(1) # push your branch
+* git-pull(1) # fetch compressed deltas and merge into current branch
+In git you can have tracked and untracked files. In git you have 3 types of changes. If you modify a tracked file you have modified the file. When you do git-add(1) you stage the file. Finally with git-commit(1) you commit your change into your local branch.
+
+Staging is important if you have modified one or many files and you want to select a subset of those changes to commit. This makes it easy to break down your patches and organize them as needed. Ideally each patch is useful on its own and unrelated changes are grouped in separate patches. For more information look at the -p flag for git-add(1).
+
+For more advanced operations you should always know what state git is in. You can query that with git-status(1). If you are in the middle of a merge and you forgot about it, git-status(1) will remind you. Use git-status(1) frequently.
+
+0x2. Centralized git workflow
+To clone a repo:
+
+$ git clone you@yourserver.org:myrepo.git
+To update your repo:
+
+$ git pull
+
+If you have local changes the fetch/merge will proceed as expected.
+You can retain your local changes even if they are not committed.
+If you have a merge conflict, resolve it by hand and use git-add(1)
+and git-commit(1). The history will continue to be linear in case
+of a fast-forward merge.
+To look at the commit history and the contents of each patch:
+
+$ git log -p
+To commit your changes:
+
+$ git commit -am 'Initial import'
+
+This will add all modified/deleted files and commit them locally.
+New files are not added.
+To add new files/directories:
+
+$ git add <file|dir>
+$ git commit -m 'awesome'
+To push your changes to the remote branch:
+
+$ git push
+To push a specific branch:
+
+$ git push origin mybranch
+To show a diff between your modified files and the HEAD commit in your branch:
+
+$ git diff
+To show the staged changes (the changes to be committed upon git-commit(1)):
+
+$ git diff --cached
+To unstage changes:
+
+$ git reset <file|dir>
+To remove a tracked file/dir:
+
+$ git rm -r <file|dir>
+
+This will also stage the change. You can just git-commit(1) at this point.
+To rename a tracked file/dir:
+
+$ git mv <src> <dst>
+
+This will also stage the change. You can just git-commit(1) at this point.
+To revert a modified file/dir to whatever is in HEAD:
+
+$ git checkout <file|dir>
+To change the contents of your last commit:
+
+$ # change files
+$ git add <files>
+$ git commit --amend
+To generate git patch files:
+
+$ git format-patch -1
+
+This will generate the patch file for the last commit. You
+can use git format-patch -<n> for the last *n* commits.
+To apply a git patch file:
+
+$ git am mypatch.patch
+For a simple workflow you can avoid using the staging area completely. Just use the -am option for git-commit(1) so you can stage and commit everything in one step.
+
+0x3. Set up a server-side bare repo for your project
+To create a new repo in your home directory:
+
+$ cd
+$ cp -r /tmp/myproject myrepo
+$ cd myrepo
+$ git init
+Initialized empty Git repository in /home/you/myrepo/.git/
+$ git add *
+$ git commit -m 'Initial import'
+$ cd
+$ # We do not need an unpacked repo, just a bare one
+$ # no need to waste disk space
+$ git clone --bare myrepo myrepo.git
+$ rm -rf myrepo
+Assuming your ssh-keys are in place, you can now clone myrepo.git just by doing:
+
+$ git clone you@yourserver.org:myrepo.git \ No newline at end of file
diff --git a/git-guide.txt b/git-guide.txt
new file mode 100644
index 0000000..84171ff
--- /dev/null
+++ b/git-guide.txt
@@ -0,0 +1,111 @@
+ctx->guides->git
+Simple git guide for CVS users
+0x0. Set up your user name + email.
+$ git config --global user.name "you"
+$ git config --global user.email "you@yourserver.org"
+$ git config --global push.default simple
+This will create ~/.gitconfig.
+
+0x1. Centralized workflow - basic notions
+Git avoids touching the network as much as possible. The few basic commands that require network access are as shown below.
+
+* git-clone(1) # clone a repo for the first time
+* git-push(1) # push your branch
+* git-pull(1) # fetch compressed deltas and merge into current branch
+In git you can have tracked and untracked files. In git you have 3 types of changes. If you modify a tracked file you have modified the file. When you do git-add(1) you stage the file. Finally with git-commit(1) you commit your change into your local branch.
+
+Staging is important if you have modified one or many files and you want to select a subset of those changes to commit. This makes it easy to break down your patches and organize them as needed. Ideally each patch is useful on its own and unrelated changes are grouped in separate patches. For more information look at the -p flag for git-add(1).
+
+For more advanced operations you should always know what state git is in. You can query that with git-status(1). If you are in the middle of a merge and you forgot about it, git-status(1) will remind you. Use git-status(1) frequently.
+
+0x2. Centralized git workflow
+To clone a repo:
+
+$ git clone you@yourserver.org:myrepo.git
+To update your repo:
+
+$ git pull
+
+If you have local changes the fetch/merge will proceed as expected.
+You can retain your local changes even if they are not committed.
+If you have a merge conflict, resolve it by hand and use git-add(1)
+and git-commit(1). The history will continue to be linear in case
+of a fast-forward merge.
+To look at the commit history and the contents of each patch:
+
+$ git log -p
+To commit your changes:
+
+$ git commit -am 'Initial import'
+
+This will add all modified/deleted files and commit them locally.
+New files are not added.
+To add new files/directories:
+
+$ git add <file|dir>
+$ git commit -m 'awesome'
+To push your changes to the remote branch:
+
+$ git push
+To push a specific branch:
+
+$ git push origin mybranch
+To show a diff between your modified files and the HEAD commit in your branch:
+
+$ git diff
+To show the staged changes (the changes to be committed upon git-commit(1)):
+
+$ git diff --cached
+To unstage changes:
+
+$ git reset <file|dir>
+To remove a tracked file/dir:
+
+$ git rm -r <file|dir>
+
+This will also stage the change. You can just git-commit(1) at this point.
+To rename a tracked file/dir:
+
+$ git mv <src> <dst>
+
+This will also stage the change. You can just git-commit(1) at this point.
+To revert a modified file/dir to whatever is in HEAD:
+
+$ git checkout <file|dir>
+To change the contents of your last commit:
+
+$ # change files
+$ git add <files>
+$ git commit --amend
+To generate git patch files:
+
+$ git format-patch -1
+
+This will generate the patch file for the last commit. You
+can use git format-patch -<n> for the last *n* commits.
+To apply a git patch file:
+
+$ git am mypatch.patch
+For a simple workflow you can avoid using the staging area completely. Just use the -am option for git-commit(1) so you can stage and commit everything in one step.
+
+0x3. Set up a server-side bare repo for your project
+To create a new repo in your home directory:
+
+$ cd
+$ cp -r /tmp/myproject myrepo
+$ cd myrepo
+$ git init
+Initialized empty Git repository in /home/you/myrepo/.git/
+$ git add *
+$ git commit -m 'Initial import'
+$ cd
+$ # We do not need an unpacked repo, just a bare one
+$ # no need to waste disk space
+$ git clone --bare myrepo myrepo.git
+$ rm -rf myrepo
+Assuming your ssh-keys are in place, you can now clone myrepo.git just by doing:
+
+$ git clone you@yourserver.org:myrepo.git
+bye!
+
+sin@
diff --git a/guestbook-comments.html b/guestbook-comments.html
new file mode 100644
index 0000000..ab547a6
--- /dev/null
+++ b/guestbook-comments.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Guestbook Comments</title>
+ <link rel="stylesheet" href="/assets/css/site.css" />
+</head>
+<body>
+ <main class="wrap">
+ <h1>Guestbook Comments</h1>
+ <p class="muted">Comments are hosted on the guestbook subdomain.</p>
+ <p><a href="https://guestbook.sillylaird.ca/guestbook-comments.php" target="_blank" rel="noopener">Open live guestbook comments</a></p>
+ </main>
+</body>
+</html>
diff --git a/guestbook-form.html b/guestbook-form.html
new file mode 100644
index 0000000..d9695be
--- /dev/null
+++ b/guestbook-form.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Guestbook Form</title>
+ <meta property="og:title" content="Guestbook Form" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/guestbook-form.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Guestbook Form" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/guestbook-form.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/guestbook-form.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/guestbook-form.html" />
+<link rel="stylesheet" href="https://guestbook.sillylaird.ca/style.css">
+
+ <link rel="stylesheet" href="/assets/css/pages/guestbook-form.css" />
+
+</head>
+<body>
+
+<form action="https://guestbook.sillylaird.ca/submit.php" method="post">
+ <input type="text" name="name" placeholder="Your Name" maxlength="100" required>
+
+ <textarea name="message" placeholder="Your Message" rows="4" required></textarea>
+
+ <div class="s2a2536eebb">
+ <img src="https://guestbook.sillylaird.ca/captcha.php"
+ alt="CAPTCHA" class="sd078564312"
+ >
+
+ <input
+ type="text"
+ name="captcha"
+ placeholder="Enter the code above"
+ required class="sd82634530e"
+ >
+ </div>
+
+ <button type="submit">Sign</button>
+</form>
+
+</body>
+</html>
diff --git a/guestbook.html b/guestbook.html
new file mode 100644
index 0000000..5c29ec2
--- /dev/null
+++ b/guestbook.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Guestbook — SillyLaird</title>
+ <meta name="description" content="A shared guestbook powered by PHP and a database." />
+ <meta property="og:title" content="Guestbook — SillyLaird" />
+ <meta property="og:description" content="A shared guestbook powered by PHP and a database." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/guestbook.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Guestbook — SillyLaird" />
+ <meta name="twitter:description" content="A shared guestbook powered by PHP and a database." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/guestbook.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/guestbook.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/guestbook.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/guestbook_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/guestbook_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="guestbook-title">
+ <h1 id="guestbook-title">Guestbook</h1>
+ <p class="muted">Sign the guestbook below! Comments are shared across all visitors.</p>
+
+ <div class="sefd85b92cb">
+ <div class="iframe-clip">
+ <p>
+ <button class="reset-button" id="guestbook-reset" data-reset-iframe="guestbook-form" type="button">Reset Form</button>
+ </p>
+ <iframe
+ src="guestbook-form.html"
+ width="100%"
+ height="400px"
+
+ id="guestbook-form-iframe"
+ data-iframe="guestbook-form"
+ title="Guestbook Comment Form" class="s0b3fba4969 guestbook-form-frame"
+ ></iframe>
+ </div>
+
+ <div class="iframe-clip see3e7269f8">
+ <p>
+ <button class="reset-button" id="guestbook-comments-reset" data-reset-iframe="guestbook-comments" type="button">Reset Comments</button>
+ </p>
+ <iframe
+ src="https://guestbook.sillylaird.ca/guestbook-comments.php"
+ width="100%"
+ id="guestbook-comments-iframe"
+ data-iframe="guestbook-comments"
+ title="Guestbook Comments"
+ ></iframe>
+ </div>
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+
+</body>
+</html>
diff --git a/guestbook.html~ b/guestbook.html~
new file mode 100644
index 0000000..99fd6f4
--- /dev/null
+++ b/guestbook.html~
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Guestbook with CAPTCHA</title>
+ <style>
+ body {
+ font-family: Arial, sans-serif;
+ max-width: 600px;
+ margin: 0 auto;
+ padding: 20px;
+ }
+ form {
+ margin-bottom: 20px;
+ }
+ input, textarea {
+ width: 100%;
+ padding: 10px;
+ margin: 10px 0;
+ box-sizing: border-box;
+ }
+ button {
+ padding: 10px 20px;
+ cursor: pointer;
+ }
+ .entry {
+ border-bottom: 1px solid #ccc;
+ padding: 10px 0;
+ }
+ .entry h4 {
+ margin: 0 0 5px;
+ }
+ .entry p {
+ margin: 0;
+ }
+ .captcha {
+ display: flex;
+ align-items: center;
+ margin: 10px 0;
+ }
+ .captcha img {
+ margin-right: 10px;
+ }
+ </style>
+</head>
+<body>
+ <h1>Guestbook</h1>
+ <form id="guestbook-form">
+ <input type="text" id="name" placeholder="Your Name" required>
+ <textarea id="message" placeholder="Your Message" required></textarea>
+
+ <div class="captcha">
+ <img id="captcha-image" src="" alt="CAPTCHA" title="CAPTCHA">
+ <button type="button" id="refresh-captcha">🔄</button>
+ </div>
+ <input type="text" id="captcha-input" placeholder="Enter CAPTCHA" required>
+
+ <button type="submit">Submit</button>
+ </form>
+ <div id="guestbook-entries"></div>
+
+ <script src="guestbook.js"></script>
+</body>
+</html>
diff --git a/guestbook.js b/guestbook.js
new file mode 100644
index 0000000..e13a614
--- /dev/null
+++ b/guestbook.js
@@ -0,0 +1,127 @@
+document.addEventListener("DOMContentLoaded", function() {
+ const form = document.getElementById('guestbook-form');
+ const entriesContainer = document.getElementById('guestbook-entries');
+ const captchaCanvas = document.getElementById('captcha-canvas');
+ const refreshCaptchaButton = document.getElementById('refresh-captcha');
+ const captchaInput = document.getElementById('captcha-input');
+ const imageInput = document.getElementById('image');
+ const GUESTBOOK_KEY = 'guestbookEntries';
+
+ let currentCaptcha = '';
+
+ // Function to generate a random CAPTCHA string
+ function generateCaptcha() {
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+ let captcha = '';
+ for (let i = 0; i < 6; i++) {
+ captcha += chars.charAt(Math.floor(Math.random() * chars.length));
+ }
+ return captcha;
+ }
+
+ // Function to draw CAPTCHA on canvas
+ function drawCaptcha(captcha) {
+ const ctx = captchaCanvas.getContext('2d');
+ ctx.clearRect(0, 0, captchaCanvas.width, captchaCanvas.height);
+ ctx.font = '20px Arial';
+ ctx.fillStyle = '#000';
+ ctx.fillText(captcha, 10, 30);
+ }
+
+ // Function to refresh the CAPTCHA image
+ function refreshCaptcha() {
+ currentCaptcha = generateCaptcha();
+ drawCaptcha(currentCaptcha);
+ }
+
+ // Load and display existing entries
+ function loadEntries() {
+ const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || [];
+ entriesContainer.innerHTML = '';
+
+ entries.reverse().forEach((entry) => {
+ const entryElement = document.createElement('div');
+ entryElement.className = 'entry';
+
+ const nameElement = document.createElement('h4');
+ if (entry.name === 'Anonymous') {
+ nameElement.className = 'anonymous';
+ }
+ nameElement.textContent = entry.name;
+ entryElement.appendChild(nameElement);
+
+ const messageElement = document.createElement('p');
+ messageElement.innerHTML = formatMessage(entry.message);
+ entryElement.appendChild(messageElement);
+
+ if (entry.image) {
+ const imageElement = document.createElement('img');
+ imageElement.src = entry.image;
+ entryElement.appendChild(imageElement);
+ }
+
+ entriesContainer.appendChild(entryElement);
+ });
+ }
+
+ // Format message: add green text for lines starting with '>'
+ function formatMessage(message) {
+ return message.split('\n').map(line => {
+ if (line.startsWith('>')) {
+ return `<span class="anonymous">${line}</span>`;
+ }
+ return line;
+ }).join('<br>');
+ }
+
+ // Handle form submission
+ form.addEventListener('submit', function(event) {
+ event.preventDefault();
+
+ // Set default name to "Anonymous" if the name field is empty
+ let name = document.getElementById('name').value.trim();
+ if (!name) {
+ name = 'Anonymous';
+ }
+
+ const message = document.getElementById('message').value.trim();
+ const captchaValue = captchaInput.value.trim();
+ const imageFile = imageInput.files[0];
+
+ if (name && message && captchaValue === currentCaptcha) {
+ const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || [];
+
+ if (imageFile) {
+ const reader = new FileReader();
+ reader.onload = function() {
+ const image = reader.result;
+ entries.unshift({ name, message, image });
+ localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries));
+
+ form.reset(); // Clear the form fields
+ document.getElementById('name').value = 'Anonymous'; // Reset the name field to "Anonymous"
+ loadEntries(); // Refresh the entries display
+ refreshCaptcha(); // Generate a new CAPTCHA after successful submission
+ };
+ reader.readAsDataURL(imageFile);
+ } else {
+ entries.unshift({ name, message, image: null });
+ localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries));
+
+ form.reset(); // Clear the form fields
+ document.getElementById('name').value = 'Anonymous'; // Reset the name field to "Anonymous"
+ loadEntries(); // Refresh the entries display
+ refreshCaptcha(); // Generate a new CAPTCHA after successful submission
+ }
+ } else {
+ alert('CAPTCHA is incorrect. Please try again.');
+ }
+ });
+
+ // Refresh CAPTCHA on page load and on refresh button click
+ refreshCaptcha();
+ refreshCaptchaButton.addEventListener('click', refreshCaptcha);
+
+ // Initial load
+ loadEntries();
+}); \ No newline at end of file
diff --git a/guestbook_jp.html b/guestbook_jp.html
new file mode 100644
index 0000000..27a67df
--- /dev/null
+++ b/guestbook_jp.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>ゲストブック (Local) — SillyLaird</title>
+ <meta name="description" content="Simple localStorage guestbook." />
+ <meta property="og:title" content="ゲストブック (Local) — SillyLaird" />
+ <meta property="og:description" content="Simple localStorage guestbook." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/guestbook_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ゲストブック (Local) — SillyLaird" />
+ <meta property="og:description" content="Simple localStorage guestbook." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/guestbook_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/guestbook.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/guestbook.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/guestbook_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/guestbook_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/guestbook_jp.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="guestbook-title">
+ <h1 id="guestbook-title">ゲストブック (Local)</h1>
+ <p class="muted">This page stores entries in your browser (localStorage). It is not shared between visitors.</p>
+
+ <form id="guestbook-form">
+ <div>
+ <label for="name">Name</label>
+ <input type="text" id="name" name="name" value="Anonymous" />
+ </div>
+
+ <div>
+ <label for="message">Message</label>
+ <textarea id="message" name="message"></textarea>
+ </div>
+
+ <div>
+ <label for="captcha-input">Captcha</label>
+ <input type="text" id="captcha-input" name="captcha-input" />
+ </div>
+
+ <div>
+ <canvas id="captcha-canvas" width="160" height="48"></canvas>
+ </div>
+
+ <div class="btn-row">
+ <button type="button" id="refresh-captcha">Refresh Captcha</button>
+ <button type="submit">Submit</button>
+ </div>
+ </form>
+
+ <div id="guestbook-entries" aria-live="polite"></div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+
+
+ <script defer src="/assets/js/pages/guestbook_jp.js"></script>
+</body>
+</html>
diff --git a/guestbook_zh.html b/guestbook_zh.html
new file mode 100644
index 0000000..356fc9b
--- /dev/null
+++ b/guestbook_zh.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>留言板 (Local) — SillyLaird</title>
+ <meta name="description" content="Simple localStorage guestbook." />
+ <meta property="og:title" content="留言板 (Local) — SillyLaird" />
+ <meta property="og:description" content="Simple localStorage guestbook." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/guestbook_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="留言板 (Local) — SillyLaird" />
+ <meta property="og:description" content="Simple localStorage guestbook." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/guestbook_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/guestbook.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/guestbook.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/guestbook_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/guestbook_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/guestbook_zh.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="guestbook-title">
+ <h1 id="guestbook-title">留言板 (Local)</h1>
+ <p class="muted">This page stores entries in your browser (localStorage). It is not shared between visitors.</p>
+
+ <form id="guestbook-form">
+ <div>
+ <label for="name">Name</label>
+ <input type="text" id="name" name="name" value="Anonymous" />
+ </div>
+
+ <div>
+ <label for="message">Message</label>
+ <textarea id="message" name="message"></textarea>
+ </div>
+
+ <div>
+ <label for="captcha-input">Captcha</label>
+ <input type="text" id="captcha-input" name="captcha-input" />
+ </div>
+
+ <div>
+ <canvas id="captcha-canvas" width="160" height="48"></canvas>
+ </div>
+
+ <div class="btn-row">
+ <button type="button" id="refresh-captcha">Refresh Captcha</button>
+ <button type="submit">Submit</button>
+ </div>
+ </form>
+
+ <div id="guestbook-entries" aria-live="polite"></div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+
+
+ <script defer src="/assets/js/pages/guestbook_zh.js"></script>
+</body>
+</html>
diff --git a/hatCollectionWebsite.html b/hatCollectionWebsite.html
new file mode 100644
index 0000000..b046a0c
--- /dev/null
+++ b/hatCollectionWebsite.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Hat Collection Website — Notes</title>
+ <meta name="description" content="Notes / file structure for hat collection website." />
+ <meta property="og:title" content="Hat Collection Website — Notes" />
+ <meta property="og:description" content="Notes / file structure for hat collection website." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Hat Collection Website — Notes" />
+ <meta name="twitter:description" content="Notes / file structure for hat collection website." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/hatCollectionWebsite_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/hatCollectionWebsite_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="hat-title">
+ <h1 id="hat-title">Hat Collection Website</h1>
+ <p class="muted">Notes / layout sketch.</p>
+
+ <pre class="se7f7a3d62d">
+hat-collection-website/
+├── index.html
+├── styles/
+│ └── styles.css
+└── scripts/
+ └── main.js
+ </pre>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/hatCollectionWebsite_jp.html b/hatCollectionWebsite_jp.html
new file mode 100644
index 0000000..9d24520
--- /dev/null
+++ b/hatCollectionWebsite_jp.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Hat Collection Website — Notes</title>
+ <meta name="description" content="Notes / file structure for hat collection website." />
+ <meta property="og:title" content="Hat Collection Website — Notes" />
+ <meta property="og:description" content="Notes / file structure for hat collection website." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/hatCollectionWebsite_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Hat Collection Website — Notes" />
+ <meta name="twitter:description" content="Notes / file structure for hat collection website." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/hatCollectionWebsite_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/hatCollectionWebsite_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/hatCollectionWebsite_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="hat-title">
+ <h1 id="hat-title">Hat Collection Website</h1>
+ <p class="muted">Notes / layout sketch.</p>
+
+ <pre class="se7f7a3d62d">
+hat-collection-website/
+├── index.html
+├── styles/
+│ └── styles.css
+└── scripts/
+ └── main.js
+ </pre>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/hatCollectionWebsite_zh.html b/hatCollectionWebsite_zh.html
new file mode 100644
index 0000000..00dac07
--- /dev/null
+++ b/hatCollectionWebsite_zh.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Hat Collection Web网站 — Notes</title>
+ <meta name="description" content="Notes / file structure for hat collection website." />
+ <meta property="og:title" content="Hat Collection Web网站 — Notes" />
+ <meta property="og:description" content="Notes / file structure for hat collection website." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/hatCollectionWebsite_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Hat Collection Web网站 — Notes" />
+ <meta name="twitter:description" content="Notes / file structure for hat collection website." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/hatCollectionWebsite_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/hatCollectionWebsite.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/hatCollectionWebsite_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/hatCollectionWebsite_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="hat-title">
+ <h1 id="hat-title">Hat Collection Web网站</h1>
+ <p class="muted">Notes / layout sketch.</p>
+
+ <pre class="se7f7a3d62d">
+hat-collection-website/
+├── index.html
+├── styles/
+│ └── styles.css
+└── scripts/
+ └── main.js
+ </pre>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/hitcounter.html b/hitcounter.html
new file mode 100644
index 0000000..441c3eb
--- /dev/null
+++ b/hitcounter.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Visitor Counter (Local) — SillyLaird</title>
+ <meta name="description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta property="og:title" content="Visitor Counter (Local) — SillyLaird" />
+ <meta property="og:description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/hitcounter.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Visitor Counter (Local) — SillyLaird" />
+ <meta name="twitter:description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/hitcounter.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/hitcounter.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/hitcounter.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/hitcounter_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/hitcounter_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/hitcounter.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="counter-title">
+ <h1 id="counter-title">Visitor Counter (Local)</h1>
+ <p class="muted">Counts unique visits per browser using localStorage + sessionStorage.</p>
+
+ <div class="counter">
+ <div>You are visitor number:</div>
+ <div id="visitor-counter" class="big">0</div>
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+
+
+ <script defer src="/assets/js/pages/hitcounter.js"></script>
+</body>
+</html>
diff --git a/hitcounter_jp.html b/hitcounter_jp.html
new file mode 100644
index 0000000..cfab66c
--- /dev/null
+++ b/hitcounter_jp.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Visitor Counter (Local) — SillyLaird</title>
+ <meta name="description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta property="og:title" content="Visitor Counter (Local) — SillyLaird" />
+ <meta property="og:description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/hitcounter_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Visitor Counter (Local) — SillyLaird" />
+ <meta name="twitter:description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/hitcounter_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/hitcounter.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/hitcounter.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/hitcounter_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/hitcounter_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/hitcounter_jp.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="counter-title">
+ <h1 id="counter-title">Visitor Counter (Local)</h1>
+ <p class="muted">Counts unique visits per browser using localStorage/sessionStorage.</p>
+
+ <div class="counter">
+ <div>You are visitor number:</div>
+ <div id="visitor-counter" class="big">0</div>
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+
+
+ <script defer src="/assets/js/pages/hitcounter_jp.js"></script>
+</body>
+</html>
diff --git a/hitcounter_zh.html b/hitcounter_zh.html
new file mode 100644
index 0000000..c68213e
--- /dev/null
+++ b/hitcounter_zh.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Visitor Counter (Local) — SillyLaird</title>
+ <meta name="description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta property="og:title" content="Visitor Counter (Local) — SillyLaird" />
+ <meta property="og:description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/hitcounter_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Visitor Counter (Local) — SillyLaird" />
+ <meta name="twitter:description" content="Local-only visitor counter using localStorage/sessionStorage." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/hitcounter_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/hitcounter.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/hitcounter.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/hitcounter_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/hitcounter_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/hitcounter_zh.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="counter-title">
+ <h1 id="counter-title">Visitor Counter (Local)</h1>
+ <p class="muted">Counts unique visits per browser using localStorage + sessionStorage.</p>
+
+ <div class="counter">
+ <div>You are visitor number:</div>
+ <div id="visitor-counter" class="big">0</div>
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+
+
+ <script defer src="/assets/js/pages/hitcounter_zh.js"></script>
+</body>
+</html>
diff --git a/icon03.jpg b/icon03.jpg
new file mode 100644
index 0000000..7e1e6d5
--- /dev/null
+++ b/icon03.jpg
Binary files differ
diff --git a/images/711chan.gif b/images/711chan.gif
new file mode 100644
index 0000000..ec48985
--- /dev/null
+++ b/images/711chan.gif
Binary files differ
diff --git a/images/anybrowser3.gif b/images/anybrowser3.gif
new file mode 100644
index 0000000..d58558d
--- /dev/null
+++ b/images/anybrowser3.gif
Binary files differ
diff --git a/images/buyvm.png b/images/buyvm.png
new file mode 100644
index 0000000..e20f177
--- /dev/null
+++ b/images/buyvm.png
Binary files differ
diff --git a/images/desuroom-revival.png b/images/desuroom-revival.png
new file mode 100644
index 0000000..c1dc115
--- /dev/null
+++ b/images/desuroom-revival.png
Binary files differ
diff --git a/images/free-speech-forever.gif b/images/free-speech-forever.gif
new file mode 100644
index 0000000..f1fa905
--- /dev/null
+++ b/images/free-speech-forever.gif
Binary files differ
diff --git a/images/get-flash-player.gif b/images/get-flash-player.gif
new file mode 100644
index 0000000..81cd566
--- /dev/null
+++ b/images/get-flash-player.gif
Binary files differ
diff --git a/images/heyuri.gif b/images/heyuri.gif
new file mode 100644
index 0000000..80c3c3a
--- /dev/null
+++ b/images/heyuri.gif
Binary files differ
diff --git a/images/imageboard/1674509441745.jpg b/images/imageboard/1674509441745.jpg
new file mode 100644
index 0000000..7f027e5
--- /dev/null
+++ b/images/imageboard/1674509441745.jpg
Binary files differ
diff --git a/images/imageboard/squarebutts.gif b/images/imageboard/squarebutts.gif
new file mode 100644
index 0000000..b9b5704
--- /dev/null
+++ b/images/imageboard/squarebutts.gif
Binary files differ
diff --git a/images/made-with-windows.gif b/images/made-with-windows.gif
new file mode 100644
index 0000000..aef46dd
--- /dev/null
+++ b/images/made-with-windows.gif
Binary files differ
diff --git a/images/msie.gif b/images/msie.gif
new file mode 100644
index 0000000..81df944
--- /dev/null
+++ b/images/msie.gif
Binary files differ
diff --git a/images/openbsd.png b/images/openbsd.png
new file mode 100644
index 0000000..9fab4eb
--- /dev/null
+++ b/images/openbsd.png
Binary files differ
diff --git a/images/plan9/9logo.jpg b/images/plan9/9logo.jpg
new file mode 100644
index 0000000..6e1bf4b
--- /dev/null
+++ b/images/plan9/9logo.jpg
Binary files differ
diff --git a/images/powered-by-kolyma.png b/images/powered-by-kolyma.png
new file mode 100644
index 0000000..eea3c79
--- /dev/null
+++ b/images/powered-by-kolyma.png
Binary files differ
diff --git a/images/valid-html401.png b/images/valid-html401.png
new file mode 100644
index 0000000..c010842
--- /dev/null
+++ b/images/valid-html401.png
Binary files differ
diff --git a/images/wtfpl.png b/images/wtfpl.png
new file mode 100644
index 0000000..d039d0b
--- /dev/null
+++ b/images/wtfpl.png
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..39768e3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,208 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta property="og:title" content="SillyLaird's Personal Homepage — Laird Lonergan" />
+ <meta property="og:description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird's Personal Homepage — Laird Lonergan" />
+ <meta name="twitter:description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/index_jp.html" />
+ <meta name="keywords" content="sillylaird, laird lonergan, personal homepage, 90s web, dot ca" />
+ <meta name="theme-color" content="#ffd" />
+ <meta name="referrer" content="strict-origin-when-cross-origin" />
+ <!-- Step 9: More descriptive title -->
+ <title>SillyLaird's Personal Homepage — Laird Lonergan</title>
+ <link rel="icon" href="/favicon.ico" />
+
+
+
+
+ <link rel="preconnect" href="https://blog.sillylaird.ca/" crossorigin />
+ <link rel="preconnect" href="https://guestbook.sillylaird.ca" crossorigin />
+ <link rel="preconnect" href="https://lastfm-recently-played.vercel.app" crossorigin />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap stack">
+ <section aria-labelledby="home-title">
+ <h1 id="home-title">Welcome</h1>
+ <p class="muted">
+ This is my personal homepage. It's meant to feel like a simple link hub with personality — not a corporate site.
+ </p>
+ </section>
+
+ <section id="contact" aria-labelledby="contact-title">
+ <h2 id="contact-title">Contact</h2>
+ <address class="contact-address">
+ <ul class="contact-list">
+ <li>Email: <a href="mailto:m@sillylaird.ca">m@sillylaird.ca</a></li>
+ <li>Email (2nd): <a href="mailto:sillylaird@sealandlord.org">sillylaird@sealandlord.org</a></li>
+ <li>Email (3rd): <a href="mailto:sillylaird@memeware.net">sillylaird@memeware.net</a></li>
+ <li>Email (4th)/Tor/Onion Only Email: <a href="mailto:rq6htickbp2zdn5nwj4vjpqtocbo7byx@anonhfax4xu3tpkmevtnsjcdnngbn63qn6rhn2mb7mtjwfvycnltgbid.onion">sillylaird@Onion Domain</a></li>
+ <li>XMPP: <a href="xmpp:sillylaird@xmpp.jp">sillylaird@xmpp.jp</a></li>
+ <li>Signal: <a href="signal:@sillylaird.77">@sillylaird.77</a></li>
+ </ul>
+ </address>
+
+ <blockquote>
+ "The Internet Is Serious Business" —
+ <a href="https://lolwut.info/comp/4chan/serious-business.html" target="_blank" rel="noopener noreferrer">lolwut.info</a>
+ </blockquote>
+
+ <div class="audio-wrap">
+ <audio controls src="Laird.mp3" preload="none"></audio>
+ </div>
+ </section>
+
+ <section aria-labelledby="vibe-title">
+ <h2 id="vibe-title">My Current Vibe</h2>
+ <p>A throwback to the golden age of internet content.</p>
+ <p>
+ <a href="https://summer2.ytmnd.com/" target="_blank" rel="noopener noreferrer">
+ https://summer2.ytmnd.com/
+ </a>
+ </p>
+ </section>
+
+ <section id="music" aria-labelledby="music-title">
+ <h2 id="music-title">Music</h2>
+ <p>Last.fm: <a href="https://www.last.fm/user/SillyLaird" target="_blank" rel="noopener noreferrer">SillyLaird</a></p>
+ <!-- Step 2: Alt text is present, ensure dimensions are set for layout stability if possible -->
+ <img src="https://lastfm-recently-played.vercel.app/api?user=SillyLaird" alt="Recent tracks from Last.fm" loading="lazy" decoding="async" width="500" height="100" class="s06eeebc88f" />
+ </section>
+
+ <section aria-labelledby="blog-title">
+ <h2 id="blog-title">Current Blog</h2>
+ <!-- Step 10: Add a link to the blog section on the main page -->
+ <p><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener noreferrer">Visit the full archive &rarr;</a></p>
+ <div id="blog-list" aria-live="polite" class="muted">Loading…</div>
+ <noscript>
+ <p><a href="https://blog.sillylaird.ca/">Visit the blog</a> (JavaScript is required to show selected posts here.)</p>
+ </noscript>
+ </section>
+
+ <section aria-labelledby="changelog-title">
+ <h2 id="changelog-title" class="changelog-title">Changelog</h2>
+ <p><a href="/changelog/">Visit the full changelog &rarr;</a></p>
+ <div id="changelog-list" aria-live="polite" class="muted">Loading…</div>
+ <noscript>
+ <p><a href="/changelog/">Visit the changelog</a> (JavaScript is required to show selected entries here.)</p>
+ </noscript>
+ </section>
+
+ <section id="friends" aria-labelledby="friends-title">
+ <h2 id="friends-title">Friends</h2>
+ <ul class="friends-list">
+ <li><a href="https://kfarwell.org/" target="_blank" rel="noopener noreferrer">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info/" target="_blank" rel="noopener noreferrer">lolwut</a></li>
+ <li><a href="http://shystudios.us/" target="_blank" rel="noopener noreferrer">Shy Studios</a></li>
+ <li><a href="https://risingthumb.xyz/" target="_blank" rel="noopener noreferrer">risingthumb</a></li>
+ <li><a href="https://moddedbear.com/" target="_blank" rel="noopener noreferrer">bear</a></li>
+ <li><a href="https://idkwhatthisis.serv00.net/" target="_blank" rel="noopener noreferrer">Star</a></li>
+ <li><a href="https://kans3n.codeberg.page/" target="_blank" rel="noopener noreferrer">Kans3n</a></li>
+ <li><a href="http://kans3n.ddns.net/" target="_blank" rel="noopener noreferrer">Kans3n mirror</a></li>
+ <li><a href="https://www.twitch.tv/mrdinklepuss" target="_blank" rel="noopener noreferrer">MrDinklepuss (Twitch)</a></li>
+ <li><a href="https://www.webtoons.com/en/canvas/chronicles-of-the-pumpkin-prince/list?title_no=546563" target="_blank" rel="noopener noreferrer">MrsDinklepuss (WebToon)</a></li>
+ <li><a href="https://web.archive.org/web/20230325061748/https://urof.net/" target="_blank" rel="noopener noreferrer">urof (archive)</a></li>
+ <li><a href="https://djlain.com/" target="_blank" rel="noopener noreferrer">djlain</a></li>
+ <li><a href="https://www.twitch.tv/chefnegative" target="_blank" rel="noopener noreferrer">chEfnEgAtIvE (Twitch)</a></li>
+ <li><a href="https://jameswilson.io" target="_blank" rel="noopener noreferrer">JdotW</a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="guestbook-title">
+ <h2 id="guestbook-title">Guestbook</h2>
+ <p>
+ <a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener noreferrer">Open full guestbook</a><br>
+ <button class="reset-button" id="guestbook-reset" type="button">Reset Form</button>
+ </p>
+ <!-- Using the .stack class for consistent spacing (Step 3) -->
+ <div class="stack">
+ <iframe
+ src="guestbook-form.html"
+ width="100%"
+ height="350px"
+ class="embed-frame guestbook-form-frame"
+ id="guestbook-form-iframe"
+ title="Guestbook Comment Form"
+ loading="lazy"
+ ></iframe>
+
+ <div class="iframe-clip s386d82bd1c">
+ <p>
+ <button class="reset-button" id="guestbook-comments-reset" data-reset-iframe="guestbook-comments" type="button">Reset Comments</button>
+ </p>
+ <iframe
+ src="https://guestbook.sillylaird.ca/guestbook-comments.php"
+ width="100%"
+ id="guestbook-comments-iframe"
+ data-iframe="guestbook-comments"
+ title="Guestbook Comments"
+ loading="lazy"
+ ></iframe>
+ </div>
+ </div>
+ </section>
+
+ <section aria-labelledby="games-title">
+ <h2 id="games-title">Games</h2>
+ <ul class="tile-grid">
+ <li><a href="/gaming/runescape/"><img src="/runescape.png" alt="RuneScape" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/specialforce/"><img src="/soldierfront.png" alt="SpecialForce / SoldierFront" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/stepmania/"><img src="/stepmania.png" alt="StepMania" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/multibox/"><img src="/multibox.png" alt="MMO Multibox" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="countries-title">
+ <h2 id="countries-title">Countries</h2>
+ <ul class="tile-grid">
+ <li><a href="https://www.canada.ca/en.html" target="_blank" rel="noopener noreferrer"><img src="canada.png" alt="Canada" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://sealandgov.org/en-us" target="_blank" rel="noopener noreferrer"><img src="sealand.png" alt="SeaLand" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://government.ru/en/" target="_blank" rel="noopener noreferrer"><img src="russia.png" alt="Russia" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://english.www.gov.cn/" target="_blank" rel="noopener noreferrer"><img src="china.png" alt="China" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="http://www.naenara.com.kp/main/index/en/first" target="_blank" rel="noopener noreferrer"><img src="northkorea.png" alt="North Korea" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="sponsors-title">
+ <h2 id="sponsors-title">Sponsors / VPNs / Buttons</h2>
+ <ul class="tile-grid">
+ <li><a href="https://buyvm.net/" target="_blank" rel="noopener noreferrer"><img src="buyvm.png" alt="BuyVM" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://edramatica.com/Main_Page" target="_blank" rel="noopener noreferrer"><img src="Aeplaine.gif" alt="EDramatica" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://www.dinklemerch.com/toesu-pedals" target="_blank" rel="noopener noreferrer"><img src="toesu.jpg" alt="ToeSU pedals" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://mullvad.net/" target="_blank" rel="noopener noreferrer"><img src="mullvad.svg" alt="Mullvad VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://cryptostorm.is/" target="_blank" rel="noopener noreferrer"><img src="cs-logo.png" alt="CryptoStorm VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://refer-nordvpn.com/qSDeQqebcxI" target="_blank" rel="noopener noreferrer"><img src="nordvpn.png" alt="NordVPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://tunnels.is/" target="_blank" rel="noopener noreferrer"><img src="logo2.svg" alt="Tunnels VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/index_jp.html b/index_jp.html
new file mode 100644
index 0000000..fe57de8
--- /dev/null
+++ b/index_jp.html
@@ -0,0 +1,174 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta property="og:title" content="SillyLaird — Laird Lonergan" />
+ <meta property="og:description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird — Laird Lonergan" />
+ <meta name="twitter:description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/index_jp.html" />
+ <meta name="keywords" content="sillylaird, laird lonergan, personal homepage, 90s web, dot ca" />
+ <meta name="theme-color" content="#fffd" />
+ <meta name="referrer" content="strict-origin-when-cross-origin" />
+ <title>SillyLaird — Laird Lonergan</title>
+ <link rel="icon" href="/favicon.ico" />
+
+
+
+
+ <link rel="preconnect" href="https://blog.sillylaird.ca/" crossorigin />
+ <link rel="preconnect" href="https://guestbook.sillylaird.ca" crossorigin />
+ <link rel="preconnect" href="https://lastfm-recently-played.vercel.app" crossorigin />
+ <link rel="preconnect" href="https://uploads.sillylaird.ca" crossorigin />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="home-title">
+ <h1 id="home-title">ようこそ</h1>
+ <p class="muted">
+ This is my personal homepage. It's meant to feel like a simple link hub with personality — not a corporate site.
+ </p>
+ </section>
+
+ <section id="contact" aria-labelledby="contact-title">
+ <h2 id="contact-title">連絡先</h2>
+ <address class="contact-address">
+ <ul class="contact-list">
+ <li>Email: <a href="mailto:m@sillylaird.ca">m@sillylaird.ca</a></li>
+ <li>Email (2nd): <a href="mailto:sillylaird@memeware.net">sillylaird@memeware.net</a></li>
+ <li>Email (3rd): <a href="mailto:rq6htickbp2zdn5nwj4vjpqtocbo7byx@anonhfax4xu3tpkmevtnsjcdnngbn63qn6rhn2mb7mtjwfvycnltgbid.onion">sillylaird@Onion Domain</a></li>
+ <li>XMPP: <a href="xmpp:sillylaird@xmpp.jp">sillylaird@xmpp.jp</a></li>
+ <li>Signal: <a href="signal:@sillylaird.77">@sillylaird.77</a></li>
+ </ul>
+ </address>
+
+ <blockquote>
+ "The Internet Is Serious Business" —
+ <a href="https://lolwut.info/comp/4chan/serious-business.html" target="_blank" rel="noopener">lolwut.info</a>
+ </blockquote>
+
+ <div class="audio-wrap">
+ <audio controls src="Laird.mp3" preload="none"></audio>
+ </div>
+ </section>
+
+ <section aria-labelledby="vibe-title">
+ <h2 id="vibe-title">今の雰囲気</h2>
+ <div class="video-wrap">
+ <video controls playsinline preload="metadata">
+ <source src="https://uploads.sillylaird.ca/luckystar.mp4" type="video/mp4" />
+ Your browser does not support the video tag.
+ </video>
+ </div>
+ </section>
+
+ <section id="music" aria-labelledby="music-title">
+ <h2 id="music-title">音楽</h2>
+ <p>Last.fm: <a href="https://www.last.fm/user/SillyLaird" target="_blank" rel="noopener">SillyLaird</a></p>
+ <img src="https://lastfm-recently-played.vercel.app/api?user=SillyLaird" alt="Recent tracks from Last.fm" loading="lazy" decoding="async" width="500" height="100" class="s06eeebc88f" />
+ </section>
+
+ <section aria-labelledby="blog-title">
+ <h2 id="blog-title">現在のブログ</h2>
+ <div id="blog-list" aria-live="polite" class="muted">読み込み中…</div>
+ <noscript>
+ <p><a href="https://blog.sillylaird.ca/">Visit the blog</a> (JavaScript is required to show selected posts here.)</p>
+ </noscript>
+ </section>
+
+ <section aria-labelledby="changelog-title">
+ <h2 id="changelog-title" class="changelog-title">更新履歴</h2>
+ <p><a href="/changelog/">Visit the full changelog &rarr;</a></p>
+ <div id="changelog-list" aria-live="polite" class="muted">読み込み中…</div>
+ <noscript>
+ <p><a href="/changelog/">Visit the changelog</a> (JavaScript is required to show selected entries here.)</p>
+ </noscript>
+ </section>
+
+ <section id="friends" aria-labelledby="friends-title">
+ <h2 id="friends-title">友達</h2>
+ <ul class="friends-list">
+ <li><a href="https://kfarwell.org/">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info/">lolwut</a></li>
+ <li><a href="http://shystudios.us/">Shy Studios</a></li>
+ <li><a href="https://risingthumb.xyz/">risingthumb</a></li>
+ <li><a href="https://moddedbear.com/">bear</a></li>
+ <li><a href="https://idkwhatthisis.serv00.net/">Star</a></li>
+ <li><a href="https://kans3n.codeberg.page/">Kans3n</a></li>
+ <li><a href="http://kans3n.ddns.net/">Kans3n mirror</a></li>
+ <li><a href="https://www.twitch.tv/mrdinklepuss">MrDinklepuss (Twitch)</a></li>
+ <li><a href="https://www.webtoons.com/en/canvas/chronicles-of-the-pumpkin-prince/list?title_no=546563">MrsDinklepuss (WebToon)</a></li>
+ <li><a href="https://web.archive.org/web/20230325061748/https://urof.net/">urof (archive)</a></li>
+ <li><a href="https://djlain.com/">djlain</a></li>
+ <li><a href="https://www.twitch.tv/chefnegative">chEfnEgAtIvE (Twitch)</a></li>
+ <li><a href="https://jameswilson.io">JdotW</a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="guestbook-title">
+ <h2 id="guestbook-title">ゲストブック</h2>
+ <p><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">ゲストブックを開く</a></p>
+ <iframe src="https://guestbook.sillylaird.ca/embed.php" class="embed-frame guestbook-frame" loading="lazy" title="ゲストブック"></iframe>
+ </section>
+
+ <section aria-labelledby="games-title">
+ <h2 id="games-title">ゲーム</h2>
+ <ul class="tile-grid">
+ <li><a href="/gaming/runescape/"><img src="/runescape.png" alt="RuneScape" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/specialforce/"><img src="/soldierfront.png" alt="SpecialForce / SoldierFront" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/stepmania/"><img src="/stepmania.png" alt="StepMania" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/multibox/"><img src="/multibox.png" alt="MMO Multibox" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="countries-title">
+ <h2 id="countries-title">国</h2>
+ <ul class="tile-grid">
+ <li><a href="https://www.canada.ca/en.html"><img src="canada.png" alt="Canada" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://government.ru/en/"><img src="russia.png" alt="Russia" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://english.www.gov.cn/"><img src="china.png" alt="China" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="http://www.naenara.com.kp/main/index/en/first"><img src="northkorea.png" alt="North Korea" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="sponsors-title">
+ <h2 id="sponsors-title">スポンサー / VPN / ボタン</h2>
+ <ul class="tile-grid">
+ <li><a href="https://buyvm.net/"><img src="buyvm.png" alt="BuyVM" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://edramatica.com/Main_Page"><img src="Aeplaine.gif" alt="EDramatica" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://www.dinklemerch.com/toesu-pedals"><img src="toesu.jpg" alt="ToeSU pedals" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://mullvad.net/"><img src="mullvad.svg" alt="Mullvad VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://cryptostorm.is/"><img src="cs-logo.png" alt="CryptoStorm VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://refer-nordvpn.com/qSDeQqebcxI"><img src="nordvpn.png" alt="NordVPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://tunnels.is/"><img src="logo2.svg" alt="Tunnels VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/index_zh.html b/index_zh.html
new file mode 100644
index 0000000..d706973
--- /dev/null
+++ b/index_zh.html
@@ -0,0 +1,173 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta property="og:title" content="SillyLaird — Laird Lonergan" />
+ <meta property="og:description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird — Laird Lonergan" />
+ <meta name="twitter:description" content="Personal homepage of Laird Lonergan (aka SillyLaird) — links, projects, logs, and contact info." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/index_jp.html" />
+ <meta name="keywords" content="sillylaird, laird lonergan, personal homepage, 90s web, dot ca" />
+ <meta name="theme-color" content="#fffd" />
+ <meta name="referrer" content="strict-origin-when-cross-origin" />
+ <title>SillyLaird — Laird Lonergan</title>
+ <link rel="icon" href="/favicon.ico" />
+
+
+
+
+ <link rel="preconnect" href="https://blog.sillylaird.ca/" crossorigin />
+ <link rel="preconnect" href="https://guestbook.sillylaird.ca" crossorigin />
+ <link rel="preconnect" href="https://lastfm-recently-played.vercel.app" crossorigin />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="home-title">
+ <h1 id="home-title">欢迎</h1>
+ <p class="muted">
+ This is my personal homepage. It's meant to feel like a simple link hub with personality — not a corporate 网站.
+ </p>
+ </section>
+
+ <section id="contact" aria-labelledby="contact-title">
+ <h2 id="contact-title">联系</h2>
+ <address class="contact-address">
+ <ul class="contact-list">
+ <li>Email: <a href="mailto:m@sillylaird.ca">m@sillylaird.ca</a></li>
+ <li>Email (2nd): <a href="mailto:sillylaird@memeware.net">sillylaird@memeware.net</a></li>
+ <li>Email (3rd): <a href="mailto:rq6htickbp2zdn5nwj4vjpqtocbo7byx@anonhfax4xu3tpkmevtnsjcdnngbn63qn6rhn2mb7mtjwfvycnltgbid.onion">sillylaird@Onion Domain</a></li>
+ <li>XMPP: <a href="xmpp:sillylaird@xmpp.jp">sillylaird@xmpp.jp</a></li>
+ <li>Signal: <a href="signal:@sillylaird.77">@sillylaird.77</a></li>
+ </ul>
+ </address>
+
+ <blockquote>
+ "The Internet Is Serious Business" —
+ <a href="https://lolwut.info/comp/4chan/serious-business.html" target="_blank" rel="noopener">lolwut.info</a>
+ </blockquote>
+
+ <div class="audio-wrap">
+ <audio controls src="Laird.mp3" preload="none"></audio>
+ </div>
+ </section>
+
+ <section aria-labelledby="vibe-title">
+ <h2 id="vibe-title">当前氛围</h2>
+ <div class="video-wrap">
+ <video controls playsinline preload="metadata">
+ <source src="https://uploads.sillylaird.ca/luckystar.mp4" type="video/mp4" />
+ Your browser does not support the video tag.
+ </video>
+ </div>
+ </section>
+
+ <section id="music" aria-labelledby="music-title">
+ <h2 id="music-title">音乐</h2>
+ <p>Last.fm: <a href="https://www.last.fm/user/SillyLaird" target="_blank" rel="noopener">SillyLaird</a></p>
+ <img src="https://lastfm-recently-played.vercel.app/api?user=SillyLaird" alt="Recent tracks from Last.fm" loading="lazy" decoding="async" width="500" height="100" class="s06eeebc88f" />
+ </section>
+
+ <section aria-labelledby="blog-title">
+ <h2 id="blog-title">当前博客</h2>
+ <div id="blog-list" aria-live="polite" class="muted">加载中…</div>
+ <noscript>
+ <p><a href="https://blog.sillylaird.ca/">Visit the blog</a> (JavaScript is required to show selected posts here.)</p>
+ </noscript>
+ </section>
+
+ <section aria-labelledby="changelog-title">
+ <h2 id="changelog-title" class="changelog-title">更新日志</h2>
+ <p><a href="/changelog/">Visit the full changelog &rarr;</a></p>
+ <div id="changelog-list" aria-live="polite" class="muted">加载中…</div>
+ <noscript>
+ <p><a href="/changelog/">Visit the changelog</a> (JavaScript is required to show selected entries here.)</p>
+ </noscript>
+ </section>
+
+ <section id="friends" aria-labelledby="friends-title">
+ <h2 id="friends-title">朋友们</h2>
+ <ul class="friends-list">
+ <li><a href="https://kfarwell.org/">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info/">lolwut</a></li>
+ <li><a href="http://shystudios.us/">Shy Studios</a></li>
+ <li><a href="https://risingthumb.xyz/">risingthumb</a></li>
+ <li><a href="https://moddedbear.com/">bear</a></li>
+ <li><a href="https://idkwhatthisis.serv00.net/">Star</a></li>
+ <li><a href="https://kans3n.codeberg.page/">Kans3n</a></li>
+ <li><a href="http://kans3n.ddns.net/">Kans3n mirror</a></li>
+ <li><a href="https://www.twitch.tv/mrdinklepuss">MrDinklepuss (Twitch)</a></li>
+ <li><a href="https://www.webtoons.com/en/canvas/chronicles-of-the-pumpkin-prince/list?title_no=546563">MrsDinklepuss (WebToon)</a></li>
+ <li><a href="https://web.archive.org/web/20230325061748/https://urof.net/">urof (archive)</a></li>
+ <li><a href="https://djlain.com/">djlain</a></li>
+ <li><a href="https://www.twitch.tv/chefnegative">chEfnEgAtIvE (Twitch)</a></li>
+ <li><a href="https://jameswilson.io">JdotW</a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="guestbook-title">
+ <h2 id="guestbook-title">留言板</h2>
+ <p><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">打开留言板</a></p>
+ <iframe src="https://guestbook.sillylaird.ca/embed.php" class="embed-frame guestbook-frame" loading="lazy" title="留言板"></iframe>
+ </section>
+
+ <section aria-labelledby="games-title">
+ <h2 id="games-title">游戏</h2>
+ <ul class="tile-grid">
+ <li><a href="/gaming/runescape/"><img src="/runescape.png" alt="RuneScape" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/specialforce/"><img src="/soldierfront.png" alt="SpecialForce / SoldierFront" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/stepmania/"><img src="/stepmania.png" alt="StepMania" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="/gaming/multibox/"><img src="/multibox.png" alt="MMO Multibox" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="countries-title">
+ <h2 id="countries-title">国家</h2>
+ <ul class="tile-grid">
+ <li><a href="https://www.canada.ca/en.html"><img src="canada.png" alt="Canada" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://government.ru/en/"><img src="russia.png" alt="Russia" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://english.www.gov.cn/"><img src="china.png" alt="China" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="http://www.naenara.com.kp/main/index/en/first"><img src="northkorea.png" alt="North Korea" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="sponsors-title">
+ <h2 id="sponsors-title">赞助商 / VPN / 按钮</h2>
+ <ul class="tile-grid">
+ <li><a href="https://buyvm.net/"><img src="buyvm.png" alt="BuyVM" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://edramatica.com/Main_Page"><img src="Aeplaine.gif" alt="EDramatica" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://www.dinklemerch.com/toesu-pedals"><img src="toesu.jpg" alt="ToeSU pedals" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://mullvad.net/"><img src="mullvad.svg" alt="Mullvad VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://cryptostorm.is/"><img src="cs-logo.png" alt="CryptoStorm VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://refer-nordvpn.com/qSDeQqebcxI"><img src="nordvpn.png" alt="NordVPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ <li><a href="https://tunnels.is/"><img src="logo2.svg" alt="Tunnels VPN" loading="lazy" decoding="async" width="160" height="64"></a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/javascript.gif b/javascript.gif
new file mode 100644
index 0000000..7937f54
--- /dev/null
+++ b/javascript.gif
Binary files differ
diff --git a/jetbrain.png b/jetbrain.png
new file mode 100644
index 0000000..c308d44
--- /dev/null
+++ b/jetbrain.png
Binary files differ
diff --git a/journal/index.html b/journal/index.html
new file mode 100644
index 0000000..dfac116
--- /dev/null
+++ b/journal/index.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Journal — SillyLaird</title>
+ <meta name="description" content="Personal journal entries." />
+ <meta property="og:title" content="Journal — SillyLaird" />
+ <meta property="og:description" content="Personal journal entries." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/journal/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Journal — SillyLaird" />
+ <meta name="twitter:description" content="Personal journal entries." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/journal/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/journal/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/journal/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/journal/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/journal/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/journal-index.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="journal-title">
+ <h1 id="journal-title">Journal</h1>
+ <p class="muted">Short entries, copied verbatim.</p>
+
+ <div class="entry"><time datetime="2025-03-22">2025-03-22</time><p>hello and welcome to the new year of this journal this is my first journal entry of this year. not sure what i'm going to talk about this year yet but we will see.</p></div>
+
+ <div class="entry"><time datetime="2024-08-30">2024-08-30</time><p>was my birthday on the 29th and we are moving again which is always annoying cause we end up selling stuff then have to re configure everything in the house. im staying at grandparents because i deslocated my right knee but poped it back in because i got on the bed for the amublance and it got poped in again it hurts when i have to do anything with it and i cant bend down to pick up stuff etc. i hope i get better i did find out from emergency doctor xray that my legs were never in the right spot and then my syndrome clinic confirmed this after 29 years? anyway i hope it gets better hopefully i can continune on my jerney for drumming and playing rhythm games etc.i want to get better trimmed down so i can play fastball/baseball and be a pitcher in a adult league maybe ill try out for a winter league if i can.</p></div>
+
+ <div class="entry"><time datetime="2024-06-11">2024-06-11</time><p>going to write more stuff on sdf then my personal site but that might change who knows.</p></div>
+ <div class="entry"><time datetime="2024-06-08">2024-06-08</time><p>new journal for this month? let see what i end up writing.</p></div>
+ <div class="entry"><time datetime="2024-05-30">2024-05-30</time><p>woke up today decided to do some journaling not sure what i will write about today.</p></div>
+ <div class="entry"><time datetime="2024-05-25">2024-05-25</time><p>got some upgrades and new computers. can't wait to see what i'll update with next batch of money. also got a gitadora song pack</p></div>
+ <div class="entry"><time datetime="2024-05-15">2024-05-15</time><p>some rambling for today. not sure what im trying to talk about but im sure it'll be interesting!</p></div>
+ <div class="entry"><time datetime="2024-05-14">2024-05-14</time><p>need to edit babi terminal editor theme. dont like the default one</p></div>
+ <div class="entry"><time datetime="2024-05-11">2024-05-11</time><p>local hockey team lost the the playoff. felt incredibly biased in the calling.</p></div>
+ <div class="entry"><time datetime="2024-05-04">2024-05-04</time><p>ice hockey play off for my team so been watching that a lot. switched to editor babi and so on had to make a changelog for my site which made me feel iffy on the update of it. but overall i feel happy about everything.</p></div>
+ <div class="entry"><time datetime="2024-03-01">2024-03-01</time><p>sorry haven't rambled for a bit. been watching older anime again and not going outside much. my hikkimori/neet ways i guess. going to update the site and gameserver site/maps and so on. I mainly host c:ss bhop and surfing server privately...</p></div>
+ <div class="entry"><time datetime="2024-02-11">2024-02-11</time><p>welcome to some ramblings today. not sure what im going to write about other then drum games im interested in.</p></div>
+ <div class="entry"><time datetime="2024-02-04">2024-02-04</time><p>welcome to today ramblings. dont know what i am going to put on here yet.... but time will tell.</p></div>
+ <div class="entry"><time datetime="2024-01-23">2024-01-23</time><p>found out that old osu is fun again then current. and found out that ar infinite is also fun.</p></div>
+ <div class="entry"><time datetime="2024-01-22">2024-01-22</time><p>more journal writing. added a "template" for this.</p></div>
+ <div class="entry"><time datetime="2024-01-21">2024-01-21</time><p>still alive! just some more thoughts throughout the days. i wonder when im going to be statisifed with my rhythm game and tech? it doesnt seem any time soon sadly :( hopefully at some point i will be. deciding to do level design in a top down 2d zelda inspired mmo.</p></div>
+ <div class="entry"><time datetime="2024-01-08">2024-01-08</time><p>feel like writing more stuff. will finally be able to talk to more people again. which will be fun i dont normally get to talk to a lot of people even online without them seeing me as weird. i guess because im on a chinese web ring and so therefor im seen as different. i dont know why that would be a big deal but that what i keep going back to.</p></div>
+ <div class="entry"><time datetime="2024-01-05">2024-01-05</time><p>welcome to my first journal of the year. i hope all is well with the people i know.</p></div>
+
+ <div class="entry"><time datetime="2023-12-11">2023-12-11</time><p>welcome to more rambling in a blog style. i get accused of random things because im not one with the hurd.</p></div>
+ <div class="entry"><time datetime="2023-12-04">2023-12-04</time><p>Decided to update the git repo on git.termer.net it very nice so far and the workflow has been good to me.</p></div>
+ <div class="entry"><time datetime="2023-11-22">2023-11-22</time><p>someone pissed me off from twitch. this is just more reasons why i tend to not like the streaming culture. just not a lot of people who make sense and want to get into your face about their opinions on tech and so on. this tends to bother me after awhile but im sure i will forget it. i just dont tend to have it stored in my brain memory. oh well another day browsing social media i guess. *shrug*</p></div>
+ <div class="entry"><time datetime="2023-11-20">2023-11-20</time><p>thinking of making more journals going to upload them more of a bulk then just one at a time. so you'll see these all at the same time if you have javascript disabled in your browser. I have the adblocker warning because i feel in this day and age it needed. but it not needed to turn off in order to view this page only the javascript part. playing runescape and hearthstone is always fun. not when hearthstone glitches out though when it trying to load battlegrounds</p></div>
+ <div class="entry"><time datetime="2023-11-18">2023-11-18</time><p>The hockey game i went to yesterday was frustrating to watch because the kids were not in their seat being respectful.</p></div>
+ <div class="entry"><time datetime="2023-11-14">2023-11-14</time><p>cat had to be put under today. mom can show emotions but I can't. I feel like today is a lot calm now where I dont have to worry about my cat going after wires and stuff. But now it feels empty without her here.</p></div>
+ <div class="entry"><time datetime="2023-08-30">2023-08-30</time><p>had a fun baseball game at the birthday. cant wait to go there again though it a roughly 3 hour drive.</p></div>
+ <div class="entry"><time datetime="2023-07-09">2023-07-09</time><p>someone called me a "bitter asshole" on irc. i dont really care anymore what your opinion is of me. as long as we can talk like humans and not get offended over silly shit. this new wave of generation seems to get upset over stupid shit. been enjoying the chinese culture and baseball recently not just mlb but also Japan and elsewhere.</p></div>
+ <div class="entry"><time datetime="2023-07-03">2023-07-03</time><p>just thinking of stuff to add to the site. while it be changelog or more content to add or maybe a article to write finally. I feel happy that i have my own guestbook now and i have a sw@ (suspicious world) we will see how it goes.</p></div>
+ <div class="entry"><time datetime="2023-06-21">2023-06-21</time><p>some more journal rambulings. i plan to play more pop' n music lively and iidx dp. im going to forget about the whole play for like a few days. I mod for a platform now called vidlii and the content you see on there you can't really talk to anybody about because of how bad it is. But I enjoy modding for a "free speech" alternative to youtube or better youtube platform then what it is today.</p></div>
+ <div class="entry"><time datetime="2023-04-21">2023-04-21</time><p>Got my new headphones dt 770 the limited black edition. they are very good so far but obviously pricy unless your into audio.</p></div>
+ <div class="entry"><time datetime="2023-04-11">2023-04-11</time><p>This is another journal that i feel like updating. Im not sure what I want or want to keep. in terms of computer hardware etc.</p></div>
+ <div class="entry"><time datetime="2023-04-05">2023-04-05</time><p>Hello. I feel a lot better now due to getting over a cold. and not really caring much about people emotions too much. I also moderate for vidlii now which is interesting.</p></div>
+ <div class="entry"><time datetime="2023-04-04">2023-04-04</time><p>so i feel better today after getting my sick over with. makes me feel a lot better and better rested.</p></div>
+ <div class="entry"><time datetime="2023-04-02">2023-04-02</time><p>So i was rejected by a service merely for having a email with "memeware" and a link to "711chan" apparently that is wrong even thouhg they where offering alternative privacy front ends. kind of ironic eh?</p></div>
+ <div class="entry"><time datetime="2023-01-30">2023-01-30</time><p>Some more ramblings. im deciding to switch from twitch to kick. seems like a better platform. might change this journal code from disallowing javascript to allowing it. not sure</p></div>
+ <div class="entry"><time datetime="2023-01-29">2023-01-29</time><p>welcome to more private ramblings. i save it in case the power goes out and so you might get a incomplete version before you see it.s</p></div>
+ <div class="entry"><time datetime="2023-01-28">2023-01-28</time><p>Decided to watch some Pop'n Music Lively streams. Im really big into older streams and rhythm games. Playing some "tiktok" chinese mahjong. Also doing my regular hearthstone and runescape game so i feel im doing a lot. just going to update this journal as the day progress</p></div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/journal/index.html.lock~ b/journal/index.html.lock~
new file mode 100644
index 0000000..35da86a
--- /dev/null
+++ b/journal/index.html.lock~
@@ -0,0 +1 @@
+sillylai@DESKTOP-A0H957F \ No newline at end of file
diff --git a/journal/index_jp.html b/journal/index_jp.html
new file mode 100644
index 0000000..7903311
--- /dev/null
+++ b/journal/index_jp.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>ジャーナル — SillyLaird</title>
+ <meta name="description" content="Personal journal entries." />
+ <meta property="og:title" content="ジャーナル — SillyLaird" />
+ <meta property="og:description" content="Personal journal entries." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/journal/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="ジャーナル — SillyLaird" />
+ <meta name="twitter:description" content="Personal journal entries." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/journal/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/journal/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/journal/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/journal/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/journal/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/journal-index_jp.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="journal-title">
+ <h1 id="journal-title">ジャーナル</h1>
+ <p class="muted">Short entries, copied verbatim.</p>
+
+ <div class="entry"><time datetime="2025-03-22">2025-03-22</time><p>hello and welcome to the new year of this journal this is my first journal entry of this year. not sure what i'm going to talk about this year yet but we will see.</p></div>
+
+ <div class="entry"><time datetime="2024-08-30">2024-08-30</time><p>was my birthday on the 29th and we are moving again which is always annoying cause we end up selling stuff then have to re configure everything in the house. im staying at grandparents because i deslocated my right knee but poped it back in because i got on the bed for the amublance and it got poped in again it hurts when i have to do anything with it and i cant bend down to pick up stuff etc. i hope i get better i did find out from emergency doctor xray that my legs were never in the right spot and then my syndrome clinic confirmed this after 29 years? anyway i hope it gets better hopefully i can continune on my jerney for drumming and playing rhythm games etc.i want to get better trimmed down so i can play fastball/baseball and be a pitcher in a adult league maybe ill try out for a winter league if i can.</p></div>
+
+ <div class="entry"><time datetime="2024-06-11">2024-06-11</time><p>going to write more stuff on sdf then my personal site but that might change who knows.</p></div>
+ <div class="entry"><time datetime="2024-06-08">2024-06-08</time><p>new journal for this month? let see what i end up writing.</p></div>
+ <div class="entry"><time datetime="2024-05-30">2024-05-30</time><p>woke up today decided to do some journaling not sure what i will write about today.</p></div>
+ <div class="entry"><time datetime="2024-05-25">2024-05-25</time><p>got some upgrades and new computers. can't wait to see what i'll update with next batch of money. also got a gitadora song pack</p></div>
+ <div class="entry"><time datetime="2024-05-15">2024-05-15</time><p>some rambling for today. not sure what im trying to talk about but im sure it'll be interesting!</p></div>
+ <div class="entry"><time datetime="2024-05-14">2024-05-14</time><p>need to edit babi terminal editor theme. dont like the default one</p></div>
+ <div class="entry"><time datetime="2024-05-11">2024-05-11</time><p>local hockey team lost the the playoff. felt incredibly biased in the calling.</p></div>
+ <div class="entry"><time datetime="2024-05-04">2024-05-04</time><p>ice hockey play off for my team so been watching that a lot. switched to editor babi and so on had to make a changelog for my site which made me feel iffy on the update of it. but overall i feel happy about everything.</p></div>
+ <div class="entry"><time datetime="2024-03-01">2024-03-01</time><p>sorry haven't rambled for a bit. been watching older anime again and not going outside much. my hikkimori/neet ways i guess. going to update the site and gameserver site/maps and so on. I mainly host c:ss bhop and surfing server privately...</p></div>
+ <div class="entry"><time datetime="2024-02-11">2024-02-11</time><p>welcome to some ramblings today. not sure what im going to write about other then drum games im interested in.</p></div>
+ <div class="entry"><time datetime="2024-02-04">2024-02-04</time><p>welcome to today ramblings. dont know what i am going to put on here yet.... but time will tell.</p></div>
+ <div class="entry"><time datetime="2024-01-23">2024-01-23</time><p>found out that old osu is fun again then current. and found out that ar infinite is also fun.</p></div>
+ <div class="entry"><time datetime="2024-01-22">2024-01-22</time><p>more journal writing. added a "template" for this.</p></div>
+ <div class="entry"><time datetime="2024-01-21">2024-01-21</time><p>still alive! just some more thoughts throughout the days. i wonder when im going to be statisifed with my rhythm game and tech? it doesnt seem any time soon sadly :( hopefully at some point i will be. deciding to do level design in a top down 2d zelda inspired mmo.</p></div>
+ <div class="entry"><time datetime="2024-01-08">2024-01-08</time><p>feel like writing more stuff. will finally be able to talk to more people again. which will be fun i dont normally get to talk to a lot of people even online without them seeing me as weird. i guess because im on a chinese web ring and so therefor im seen as different. i dont know why that would be a big deal but that what i keep going back to.</p></div>
+ <div class="entry"><time datetime="2024-01-05">2024-01-05</time><p>welcome to my first journal of the year. i hope all is well with the people i know.</p></div>
+
+ <div class="entry"><time datetime="2023-12-11">2023-12-11</time><p>welcome to more rambling in a blog style. i get accused of random things because im not one with the hurd.</p></div>
+ <div class="entry"><time datetime="2023-12-04">2023-12-04</time><p>Decided to update the git repo on git.termer.net it very nice so far and the workflow has been good to me.</p></div>
+ <div class="entry"><time datetime="2023-11-22">2023-11-22</time><p>someone pissed me off from twitch. this is just more reasons why i tend to not like the streaming culture. just not a lot of people who make sense and want to get into your face about their opinions on tech and so on. this tends to bother me after awhile but im sure i will forget it. i just dont tend to have it stored in my brain memory. oh well another day browsing social media i guess. *shrug*</p></div>
+ <div class="entry"><time datetime="2023-11-20">2023-11-20</time><p>thinking of making more journals going to upload them more of a bulk then just one at a time. so you'll see these all at the same time if you have javascript disabled in your browser. I have the adblocker warning because i feel in this day and age it needed. but it not needed to turn off in order to view this page only the javascript part. playing runescape and hearthstone is always fun. not when hearthstone glitches out though when it trying to load battlegrounds</p></div>
+ <div class="entry"><time datetime="2023-11-18">2023-11-18</time><p>The hockey game i went to yesterday was frustrating to watch because the kids were not in their seat being respectful.</p></div>
+ <div class="entry"><time datetime="2023-11-14">2023-11-14</time><p>cat had to be put under today. mom can show emotions but I can't. I feel like today is a lot calm now where I dont have to worry about my cat going after wires and stuff. But now it feels empty without her here.</p></div>
+ <div class="entry"><time datetime="2023-08-30">2023-08-30</time><p>had a fun baseball game at the birthday. cant wait to go there again though it a roughly 3 hour drive.</p></div>
+ <div class="entry"><time datetime="2023-07-09">2023-07-09</time><p>someone called me a "bitter asshole" on irc. i dont really care anymore what your opinion is of me. as long as we can talk like humans and not get offended over silly shit. this new wave of generation seems to get upset over stupid shit. been enjoying the chinese culture and baseball recently not just mlb but also Japan and elsewhere.</p></div>
+ <div class="entry"><time datetime="2023-07-03">2023-07-03</time><p>just thinking of stuff to add to the site. while it be changelog or more content to add or maybe a article to write finally. I feel happy that i have my own guestbook now and i have a sw@ (suspicious world) we will see how it goes.</p></div>
+ <div class="entry"><time datetime="2023-06-21">2023-06-21</time><p>some more journal rambulings. i plan to play more pop' n music lively and iidx dp. im going to forget about the whole play for like a few days. I mod for a platform now called vidlii and the content you see on there you can't really talk to anybody about because of how bad it is. But I enjoy modding for a "free speech" alternative to youtube or better youtube platform then what it is today.</p></div>
+ <div class="entry"><time datetime="2023-04-21">2023-04-21</time><p>Got my new headphones dt 770 the limited black edition. they are very good so far but obviously pricy unless your into audio.</p></div>
+ <div class="entry"><time datetime="2023-04-11">2023-04-11</time><p>This is another journal that i feel like updating. Im not sure what I want or want to keep. in terms of computer hardware etc.</p></div>
+ <div class="entry"><time datetime="2023-04-05">2023-04-05</time><p>Hello. I feel a lot better now due to getting over a cold. and not really caring much about people emotions too much. I also moderate for vidlii now which is interesting.</p></div>
+ <div class="entry"><time datetime="2023-04-04">2023-04-04</time><p>so i feel better today after getting my sick over with. makes me feel a lot better and better rested.</p></div>
+ <div class="entry"><time datetime="2023-04-02">2023-04-02</time><p>So i was rejected by a service merely for having a email with "memeware" and a link to "711chan" apparently that is wrong even thouhg they where offering alternative privacy front ends. kind of ironic eh?</p></div>
+ <div class="entry"><time datetime="2023-01-30">2023-01-30</time><p>Some more ramblings. im deciding to switch from twitch to kick. seems like a better platform. might change this journal code from disallowing javascript to allowing it. not sure</p></div>
+ <div class="entry"><time datetime="2023-01-29">2023-01-29</time><p>welcome to more private ramblings. i save it in case the power goes out and so you might get a incomplete version before you see it.s</p></div>
+ <div class="entry"><time datetime="2023-01-28">2023-01-28</time><p>Decided to watch some Pop'n 音楽 Lively streams. Im really big into older streams and rhythm games. Playing some "tiktok" chinese mahjong. Also doing my regular hearthstone and runescape game so i feel im doing a lot. just going to update this journal as the day progress</p></div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/journal/index_zh.html b/journal/index_zh.html
new file mode 100644
index 0000000..d937e7e
--- /dev/null
+++ b/journal/index_zh.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>日志 — SillyLaird</title>
+ <meta name="description" content="Personal journal entries." />
+ <meta property="og:title" content="日志 — SillyLaird" />
+ <meta property="og:description" content="Personal journal entries." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/journal/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="日志 — SillyLaird" />
+ <meta name="twitter:description" content="Personal journal entries." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/journal/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/journal/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/journal/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/journal/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/journal/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/journal-index_zh.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="journal-title">
+ <h1 id="journal-title">日志</h1>
+ <p class="muted">Short entries, copied verbatim.</p>
+
+ <div class="entry"><time datetime="2025-03-22">2025-03-22</time><p>hello and welcome to the new year of this journal this is my first journal entry of this year. not sure what i'm going to talk about this year yet but we will see.</p></div>
+
+ <div class="entry"><time datetime="2024-08-30">2024-08-30</time><p>was my birthday on the 29th and we are moving again which is always annoying cause we end up selling stuff then have to re configure everything in the house. im staying at grandparents because i deslocated my right knee but poped it back in because i got on the bed for the amublance and it got poped in again it hurts when i have to do anything with it and i cant bend down to pick up stuff etc. i hope i get better i did find out from emergency doctor xray that my legs were never in the right spot and then my syndrome clinic confirmed this after 29 years? anyway i hope it gets better hopefully i can continune on my jerney for drumming and playing rhythm games etc.i want to get better trimmed down so i can play fastball/baseball and be a pitcher in a adult league maybe ill try out for a winter league if i can.</p></div>
+
+ <div class="entry"><time datetime="2024-06-11">2024-06-11</time><p>going to write more stuff on sdf then my personal 网站 but that might change who knows.</p></div>
+ <div class="entry"><time datetime="2024-06-08">2024-06-08</time><p>new journal for this month? let see what i end up writing.</p></div>
+ <div class="entry"><time datetime="2024-05-30">2024-05-30</time><p>woke up today decided to do some journaling not sure what i will write about today.</p></div>
+ <div class="entry"><time datetime="2024-05-25">2024-05-25</time><p>got some upgrades and new computers. can't wait to see what i'll update with next batch of money. also got a gitadora song pack</p></div>
+ <div class="entry"><time datetime="2024-05-15">2024-05-15</time><p>some rambling for today. not sure what im trying to talk about but im sure it'll be interesting!</p></div>
+ <div class="entry"><time datetime="2024-05-14">2024-05-14</time><p>need to edit babi terminal editor theme. dont like the default one</p></div>
+ <div class="entry"><time datetime="2024-05-11">2024-05-11</time><p>local hockey team lost the the playoff. felt incredibly biased in the calling.</p></div>
+ <div class="entry"><time datetime="2024-05-04">2024-05-04</time><p>ice hockey play off for my team so been watching that a lot. switched to editor babi and so on had to make a changelog for my 网站 which made me feel iffy on the update of it. but overall i feel happy about everything.</p></div>
+ <div class="entry"><time datetime="2024-03-01">2024-03-01</time><p>sorry haven't rambled for a bit. been watching older anime again and not going outside much. my hikkimori/neet ways i guess. going to update the 网站 and gameserver 网站/maps and so on. I mainly host c:ss bhop and surfing server privately...</p></div>
+ <div class="entry"><time datetime="2024-02-11">2024-02-11</time><p>welcome to some ramblings today. not sure what im going to write about other then drum games im interested in.</p></div>
+ <div class="entry"><time datetime="2024-02-04">2024-02-04</time><p>welcome to today ramblings. dont know what i am going to put on here yet.... but time will tell.</p></div>
+ <div class="entry"><time datetime="2024-01-23">2024-01-23</time><p>found out that old osu is fun again then current. and found out that ar infinite is also fun.</p></div>
+ <div class="entry"><time datetime="2024-01-22">2024-01-22</time><p>more journal writing. added a "template" for this.</p></div>
+ <div class="entry"><time datetime="2024-01-21">2024-01-21</time><p>still alive! just some more thoughts throughout the days. i wonder when im going to be statisifed with my rhythm game and tech? it doesnt seem any time soon sadly :( hopefully at some point i will be. deciding to do level design in a top down 2d zelda inspired mmo.</p></div>
+ <div class="entry"><time datetime="2024-01-08">2024-01-08</time><p>feel like writing more stuff. will finally be able to talk to more people again. which will be fun i dont normally get to talk to a lot of people even online without them seeing me as weird. i guess because im on a chinese web ring and so therefor im seen as different. i dont know why that would be a big deal but that what i keep going back to.</p></div>
+ <div class="entry"><time datetime="2024-01-05">2024-01-05</time><p>welcome to my first journal of the year. i hope all is well with the people i know.</p></div>
+
+ <div class="entry"><time datetime="2023-12-11">2023-12-11</time><p>welcome to more rambling in a blog style. i get accused of random things because im not one with the hurd.</p></div>
+ <div class="entry"><time datetime="2023-12-04">2023-12-04</time><p>Decided to update the git repo on git.termer.net it very nice so far and the workflow has been good to me.</p></div>
+ <div class="entry"><time datetime="2023-11-22">2023-11-22</time><p>someone pissed me off from twitch. this is just more reasons why i tend to not like the streaming culture. just not a lot of people who make sense and want to get into your face about their opinions on tech and so on. this tends to bother me after awhile but im sure i will forget it. i just dont tend to have it stored in my brain memory. oh well another day browsing social media i guess. *shrug*</p></div>
+ <div class="entry"><time datetime="2023-11-20">2023-11-20</time><p>thinking of making more journals going to upload them more of a bulk then just one at a time. so you'll see these all at the same time if you have javascript disabled in your browser. I have the adblocker warning because i feel in this day and age it needed. but it not needed to turn off in order to view this page only the javascript part. playing runescape and hearthstone is always fun. not when hearthstone glitches out though when it trying to load battlegrounds</p></div>
+ <div class="entry"><time datetime="2023-11-18">2023-11-18</time><p>The hockey game i went to yesterday was frustrating to watch because the kids were not in their seat being respectful.</p></div>
+ <div class="entry"><time datetime="2023-11-14">2023-11-14</time><p>cat had to be put under today. mom can show emotions but I can't. I feel like today is a lot calm now where I dont have to worry about my cat going after wires and stuff. But now it feels empty without her here.</p></div>
+ <div class="entry"><time datetime="2023-08-30">2023-08-30</time><p>had a fun baseball game at the birthday. cant wait to go there again though it a roughly 3 hour drive.</p></div>
+ <div class="entry"><time datetime="2023-07-09">2023-07-09</time><p>someone called me a "bitter asshole" on irc. i dont really care anymore what your opinion is of me. as long as we can talk like humans and not get offended over silly shit. this new wave of generation seems to get upset over stupid shit. been enjoying the chinese culture and baseball recently not just mlb but also Japan and elsewhere.</p></div>
+ <div class="entry"><time datetime="2023-07-03">2023-07-03</time><p>just thinking of stuff to add to the 网站. while it be changelog or more content to add or maybe a article to write finally. I feel happy that i have my own guestbook now and i have a sw@ (suspicious world) we will see how it goes.</p></div>
+ <div class="entry"><time datetime="2023-06-21">2023-06-21</time><p>some more journal rambulings. i plan to play more pop' n music lively and iidx dp. im going to forget about the whole play for like a few days. I mod for a platform now called vidlii and the content you see on there you can't really talk to anybody about because of how bad it is. But I enjoy modding for a "free speech" alternative to youtube or better youtube platform then what it is today.</p></div>
+ <div class="entry"><time datetime="2023-04-21">2023-04-21</time><p>Got my new headphones dt 770 the limited black edition. they are very good so far but obviously pricy unless your into audio.</p></div>
+ <div class="entry"><time datetime="2023-04-11">2023-04-11</time><p>This is another journal that i feel like updating. Im not sure what I want or want to keep. in terms of computer hardware etc.</p></div>
+ <div class="entry"><time datetime="2023-04-05">2023-04-05</time><p>Hello. I feel a lot better now due to getting over a cold. and not really caring much about people emotions too much. I also moderate for vidlii now which is interesting.</p></div>
+ <div class="entry"><time datetime="2023-04-04">2023-04-04</time><p>so i feel better today after getting my sick over with. makes me feel a lot better and better rested.</p></div>
+ <div class="entry"><time datetime="2023-04-02">2023-04-02</time><p>So i was rejected by a service merely for having a email with "memeware" and a link to "711chan" apparently that is wrong even thouhg they where offering alternative privacy front ends. kind of ironic eh?</p></div>
+ <div class="entry"><time datetime="2023-01-30">2023-01-30</time><p>Some more ramblings. im deciding to switch from twitch to kick. seems like a better platform. might change this journal code from disallowing javascript to allowing it. not sure</p></div>
+ <div class="entry"><time datetime="2023-01-29">2023-01-29</time><p>welcome to more private ramblings. i save it in case the power goes out and so you might get a incomplete version before you see it.s</p></div>
+ <div class="entry"><time datetime="2023-01-28">2023-01-28</time><p>Decided to watch some Pop'n 音乐 Lively streams. Im really big into older streams and rhythm games. Playing some "tiktok" chinese mahjong. Also doing my regular hearthstone and runescape game so i feel im doing a lot. just going to update this journal as the day progress</p></div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/journal/style.css b/journal/style.css
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/journal/style.css
@@ -0,0 +1 @@
+
diff --git a/kansen.gif b/kansen.gif
new file mode 100644
index 0000000..22f9901
--- /dev/null
+++ b/kansen.gif
Binary files differ
diff --git a/keybase.txt b/keybase.txt
new file mode 100644
index 0000000..dab2a13
--- /dev/null
+++ b/keybase.txt
@@ -0,0 +1,56 @@
+==================================================================
+https://keybase.io/sillylaird
+--------------------------------------------------------------------
+
+I hereby claim:
+
+ * I am an admin of https://www.sillylaird.info
+ * I am sillylaird (https://keybase.io/sillylaird) on keybase.
+ * I have a public key ASDCol91W27AG8cLiHsflyN-kd2v2I5fKW7-hGTUnlBvMwo
+
+To do so, I am signing this object:
+
+{
+ "body": {
+ "key": {
+ "eldest_kid": "0120c2a25f755b6ec01bc70b887b1f97237e91ddafd88e5f296efe8464d49e506f330a",
+ "host": "keybase.io",
+ "kid": "0120c2a25f755b6ec01bc70b887b1f97237e91ddafd88e5f296efe8464d49e506f330a",
+ "uid": "744e22f39bd294b836b617408c762919",
+ "username": "sillylaird"
+ },
+ "merkle_root": {
+ "ctime": 1678236489,
+ "hash": "a0bd8a19dd5cb8cb1e81bb685a01f22e8217e7d0a9700df0c5caea1cb9c81c5d4858185553868685993a9daf37f1d6ef5abea6770a329125aaae00e60aec5ffe",
+ "hash_meta": "804fd18c00ba78bb1bced1388100d5fb0046aa79582ebb0cc2aab451a827eabb",
+ "seqno": 24162097
+ },
+ "service": {
+ "entropy": "oWJZg8bE+Oa5wQyIzL+59GSb",
+ "hostname": "www.sillylaird.info",
+ "protocol": "https:"
+ },
+ "type": "web_service_binding",
+ "version": 2
+ },
+ "client": {
+ "name": "keybase.io go client",
+ "version": "6.0.1"
+ },
+ "ctime": 1678236513,
+ "expire_in": 504576000,
+ "prev": "3a7615908f07c76fd7815a9497dff170ffa3afbda802b1274c64237a7e23dad4",
+ "seqno": 4,
+ "tag": "signature"
+}
+
+which yields the signature:
+
+hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgwqJfdVtuwBvHC4h7H5cjfpHdr9iOXylu/oRk1J5QbzMKp3BheWxvYWTESpcCBMQgOnYVkI8Hx2/XgVqUl9/xcP+jr72oArEnTGQjen4j2tTEILBYQ+Y6YB43w1O37O0BScWkuuo1/jM9btzv9mZkTqjUAgHCo3NpZ8RAjzDWFKsQirMQnuM2bb6vjkiMs5O9CKcHkEyJ6EoVqfPCnSXMx8DmAigW4UEuu1vF0yd9dkldxp+Yvhci+Bc1CqhzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEIMm7kUHEQeOtoKjeJ9mxdblAP+Zkhzg7ggW1n9vwX4bio3RhZ80CAqd2ZXJzaW9uAQ==
+
+And finally, I am proving ownership of this host by posting or
+appending to this document.
+
+View my publicly-auditable identity here: https://keybase.io/sillylaird
+
+================================================================== \ No newline at end of file
diff --git a/l3-logo.png b/l3-logo.png
new file mode 100644
index 0000000..c3e0cb6
--- /dev/null
+++ b/l3-logo.png
Binary files differ
diff --git a/l3-transparent.png b/l3-transparent.png
new file mode 100644
index 0000000..b8c037d
--- /dev/null
+++ b/l3-transparent.png
Binary files differ
diff --git a/lain.gif b/lain.gif
new file mode 100644
index 0000000..baba842
--- /dev/null
+++ b/lain.gif
Binary files differ
diff --git a/lain.jpg b/lain.jpg
new file mode 100644
index 0000000..71b855d
--- /dev/null
+++ b/lain.jpg
Binary files differ
diff --git a/lain.png b/lain.png
new file mode 100644
index 0000000..1614204
--- /dev/null
+++ b/lain.png
Binary files differ
diff --git a/lainw.jpg b/lainw.jpg
new file mode 100644
index 0000000..cc6ca99
--- /dev/null
+++ b/lainw.jpg
Binary files differ
diff --git a/links.html b/links.html
new file mode 100644
index 0000000..b3a75fe
--- /dev/null
+++ b/links.html
@@ -0,0 +1,71 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Links — SillyLaird</title>
+ <meta name="description" content="The obligatory page of links." />
+ <meta property="og:title" content="Links — SillyLaird" />
+ <meta property="og:description" content="The obligatory page of links." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/links.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Links — SillyLaird" />
+ <meta name="twitter:description" content="The obligatory page of links." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/links.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/links.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/links.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/links_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/links_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/links.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="links-title">
+ <h1 id="links-title">Links</h1>
+ <p class="muted">Websites I like. Content varies.</p>
+
+ <h2>Friends' Sites</h2>
+ <ul>
+ <li><a href="https://kfarwll.org" target="_blank" rel="noopener">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info" target="_blank" rel="noopener">lolwut</a></li>
+ <li><a href="https://moddedbear.com/" target="_blank" rel="noopener">moddedbear</a></li>
+ <li><a href="http://shystudios.us/" target="_blank" rel="noopener">shystudios</a></li>
+ <li><a href="https://www.twitch.tv/shinji16" target="_blank" rel="noopener">shinji16 (twitch)</a></li>
+ </ul>
+
+ <h2>Buttons / Badges</h2>
+ <div class="buttons">
+ <a href="https://validator.w3.org/" target="_blank" rel="noopener"><img src="/images/valid-html401.png" width="88" height="31" alt="Valid HTML 4.01 Strict"></a>
+ <a href="https://www.anybrowser.org/campaign/" target="_blank" rel="noopener"><img src="/images/anybrowser3.gif" width="88" height="31" alt="Best viewed with Any Browser"></a>
+ <a href="https://www.microsoft.com/en-us/windows" target="_blank" rel="noopener"><img src="/images/made-with-windows.gif" width="88" height="31" alt="Proudly made on Microsoft Windows"></a>
+ <a href="https://www.eff.org/pages/blue-ribbon-campaign" target="_blank" rel="noopener"><img src="/images/free-speech-forever.gif" width="88" height="31" alt="Support freedom of speech"></a>
+ <a href="https://buyvm.net/" target="_blank" rel="noopener"><img src="/images/buyvm.png" width="90" height="33" alt="Hosted on BuyVM"></a>
+ <a href="https://www.711chan.net" target="_blank" rel="noopener"><img src="/images/711chan.gif" width="88" height="31" alt="Strange things go down at the 711..."></a>
+ <a href="https://www.desuroom.cf" target="_blank" rel="noopener"><img src="/images/desuroom-revival.png" width="88" height="31" alt="Desuroom Revival"></a>
+ <a href="https://www.heyuri.net" target="_blank" rel="noopener"><img src="/images/heyuri.gif" width="83" height="31" alt="Heyuri: It's the place to be"></a>
+ <a href="https://archive.org/details/adobe-flash-player-32.0.0.465-retail-debug" target="_blank" rel="noopener"><img src="/images/get-flash-player.gif" width="88" height="31" alt="Adobe Flash will never die"></a>
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/links_jp.html b/links_jp.html
new file mode 100644
index 0000000..33b22b6
--- /dev/null
+++ b/links_jp.html
@@ -0,0 +1,71 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Links — SillyLaird</title>
+ <meta name="description" content="The obligatory page of links." />
+ <meta property="og:title" content="Links — SillyLaird" />
+ <meta property="og:description" content="The obligatory page of links." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/links_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Links — SillyLaird" />
+ <meta name="twitter:description" content="The obligatory page of links." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/links_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/links.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/links.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/links_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/links_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/links_jp.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="links-title">
+ <h1 id="links-title">Links</h1>
+ <p class="muted">Websites I like. Content varies.</p>
+
+ <h2>友達' Sites</h2>
+ <ul>
+ <li><a href="https://kfarwll.org" target="_blank" rel="noopener">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info" target="_blank" rel="noopener">lolwut</a></li>
+ <li><a href="https://moddedbear.com/" target="_blank" rel="noopener">moddedbear</a></li>
+ <li><a href="http://shystudios.us/" target="_blank" rel="noopener">shystudios</a></li>
+ <li><a href="https://www.twitch.tv/shinji16" target="_blank" rel="noopener">shinji16 (twitch)</a></li>
+ </ul>
+
+ <h2>Buttons / Badges</h2>
+ <div class="buttons">
+ <a href="https://validator.w3.org/" target="_blank" rel="noopener"><img src="/images/valid-html401.png" width="88" height="31" alt="Valid HTML 4.01 Strict"></a>
+ <a href="https://www.anybrowser.org/campaign/" target="_blank" rel="noopener"><img src="/images/anybrowser3.gif" width="88" height="31" alt="Best viewed with Any Browser"></a>
+ <a href="https://www.microsoft.com/en-us/windows" target="_blank" rel="noopener"><img src="/images/made-with-windows.gif" width="88" height="31" alt="Proudly made on Microsoft Windows"></a>
+ <a href="https://www.eff.org/pages/blue-ribbon-campaign" target="_blank" rel="noopener"><img src="/images/free-speech-forever.gif" width="88" height="31" alt="Support freedom of speech"></a>
+ <a href="https://buyvm.net/" target="_blank" rel="noopener"><img src="/images/buyvm.png" width="90" height="33" alt="Hosted on BuyVM"></a>
+ <a href="https://www.711chan.net" target="_blank" rel="noopener"><img src="/images/711chan.gif" width="88" height="31" alt="Strange things go down at the 711..."></a>
+ <a href="https://www.desuroom.cf" target="_blank" rel="noopener"><img src="/images/desuroom-revival.png" width="88" height="31" alt="Desuroom Revival"></a>
+ <a href="https://www.heyuri.net" target="_blank" rel="noopener"><img src="/images/heyuri.gif" width="83" height="31" alt="Heyuri: It's the place to be"></a>
+ <a href="https://archive.org/details/adobe-flash-player-32.0.0.465-retail-debug" target="_blank" rel="noopener"><img src="/images/get-flash-player.gif" width="88" height="31" alt="Adobe Flash will never die"></a>
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/links_zh.html b/links_zh.html
new file mode 100644
index 0000000..d35aab2
--- /dev/null
+++ b/links_zh.html
@@ -0,0 +1,71 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Links — SillyLaird</title>
+ <meta name="description" content="The obligatory page of links." />
+ <meta property="og:title" content="Links — SillyLaird" />
+ <meta property="og:description" content="The obligatory page of links." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/links_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Links — SillyLaird" />
+ <meta name="twitter:description" content="The obligatory page of links." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/links_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/links.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/links.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/links_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/links_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <link rel="stylesheet" href="/assets/css/pages/links_zh.css" />
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="links-title">
+ <h1 id="links-title">Links</h1>
+ <p class="muted">Web网站s I like. Content varies.</p>
+
+ <h2>朋友们' Sites</h2>
+ <ul>
+ <li><a href="https://kfarwll.org" target="_blank" rel="noopener">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info" target="_blank" rel="noopener">lolwut</a></li>
+ <li><a href="https://moddedbear.com/" target="_blank" rel="noopener">moddedbear</a></li>
+ <li><a href="http://shystudios.us/" target="_blank" rel="noopener">shystudios</a></li>
+ <li><a href="https://www.twitch.tv/shinji16" target="_blank" rel="noopener">shinji16 (twitch)</a></li>
+ </ul>
+
+ <h2>Buttons / Badges</h2>
+ <div class="buttons">
+ <a href="https://validator.w3.org/" target="_blank" rel="noopener"><img src="/images/valid-html401.png" width="88" height="31" alt="Valid HTML 4.01 Strict"></a>
+ <a href="https://www.anybrowser.org/campaign/" target="_blank" rel="noopener"><img src="/images/anybrowser3.gif" width="88" height="31" alt="Best viewed with Any Browser"></a>
+ <a href="https://www.microsoft.com/en-us/windows" target="_blank" rel="noopener"><img src="/images/made-with-windows.gif" width="88" height="31" alt="Proudly made on Microsoft Windows"></a>
+ <a href="https://www.eff.org/pages/blue-ribbon-campaign" target="_blank" rel="noopener"><img src="/images/free-speech-forever.gif" width="88" height="31" alt="Support freedom of speech"></a>
+ <a href="https://buyvm.net/" target="_blank" rel="noopener"><img src="/images/buyvm.png" width="90" height="33" alt="Hosted on BuyVM"></a>
+ <a href="https://www.711chan.net" target="_blank" rel="noopener"><img src="/images/711chan.gif" width="88" height="31" alt="Strange things go down at the 711..."></a>
+ <a href="https://www.desuroom.cf" target="_blank" rel="noopener"><img src="/images/desuroom-revival.png" width="88" height="31" alt="Desuroom Revival"></a>
+ <a href="https://www.heyuri.net" target="_blank" rel="noopener"><img src="/images/heyuri.gif" width="83" height="31" alt="Heyuri: It's the place to be"></a>
+ <a href="https://archive.org/details/adobe-flash-player-32.0.0.465-retail-debug" target="_blank" rel="noopener"><img src="/images/get-flash-player.gif" width="88" height="31" alt="Adobe Flash will never die"></a>
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/load-vertical-links.js b/load-vertical-links.js
new file mode 100644
index 0000000..ed2aa0c
--- /dev/null
+++ b/load-vertical-links.js
@@ -0,0 +1,11 @@
+// load-vertical-links.js
+document.addEventListener("DOMContentLoaded", () => {
+ fetch("https://cdn.sillylaird.ca/vertical-links.html")
+ .then(r => r.text())
+ .then(html => {
+ document.getElementById("vertical-links-container").innerHTML = html;
+ })
+ .catch(() => {
+ document.getElementById("vertical-links-container").textContent = "Failed to load menu.";
+ });
+});
diff --git a/logo-white-orange-bg.svg b/logo-white-orange-bg.svg
new file mode 100644
index 0000000..dc8d7ea
--- /dev/null
+++ b/logo-white-orange-bg.svg
@@ -0,0 +1,4 @@
+<svg width="52" height="55" viewBox="0 0 52 55" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="26" cy="26" r="25" fill="#FD9400"/>
+<path d="M0 40.6642L13 54.5V23L39.5317 55H52V0H39V32L13 0H0V40.6642Z" fill="#F4FAFF"/>
+</svg>
diff --git a/logo.svg b/logo.svg
new file mode 100644
index 0000000..e3ee3fe
--- /dev/null
+++ b/logo.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="9.14 141.8 573.65 573.65">
+ <style>
+ .st0,.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#404f54}.st3{fill:#37beff}
+ </style>
+ <path class="st3" d="M582.79 549.77L295.96 384.1V207.27l286.83 165.68z"/>
+ <path class="st0" d="M9.14 549.77L295.96 384.1V207.27L9.14 372.95z"/>
+ <path d="M295.96 141.8c109.56 0 198.41 88.85 198.41 198.41s-88.85 198.41-198.41 198.41S97.55 449.77 97.55 340.21 186.4 141.8 295.96 141.8" fill-rule="evenodd" clip-rule="evenodd" fill="#ccc"/>
+ <path d="M295.96 141.8c109.6 0 198.48 88.85 198.48 198.41s-88.88 198.41-198.48 198.41c-62.91-42.34-88.94-127.64-88.94-198.3s26.03-156.1 88.94-198.52" fill-rule="evenodd" clip-rule="evenodd" fill="#e5e5e5"/>
+ <path class="st3" d="M582.79 372.95L295.96 538.62v176.83l286.83-165.68z"/>
+ <path class="st0" d="M9.14 372.95l286.82 165.67v176.83L9.14 549.77z"/>
+</svg>
diff --git a/logo2.svg b/logo2.svg
new file mode 100644
index 0000000..f57c1e0
--- /dev/null
+++ b/logo2.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="122.47161mm"
+ height="142.89758mm"
+ viewBox="0 0 122.47161 142.89758"
+ version="1.1"
+ id="svg1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs1" />
+ <g
+ id="layer1"
+ transform="translate(-48.191612,-62.745798)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.916427;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:6"
+ id="rect1"
+ width="29.845591"
+ height="85.533081"
+ x="97.908081"
+ y="120.1103"
+ rx="7.442276"
+ ry="4.5684595" />
+ <rect
+ style="fill:#4f8cff;fill-opacity:1;stroke:none;stroke-width:1.10675;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:6"
+ id="rect2"
+ width="122.29413"
+ height="30.209558"
+ x="29.433624"
+ y="91.815094"
+ rx="10.354041"
+ ry="9.5959768"
+ transform="rotate(-11.071732)" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.12;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:6"
+ id="rect3"
+ width="2.5477941"
+ height="0.72794116"
+ x="116.83456"
+ y="144.86029"
+ rx="7.4422755"
+ ry="0.72794116" />
+ </g>
+</svg>
diff --git a/lolwut-button.gif b/lolwut-button.gif
new file mode 100644
index 0000000..4fe9974
--- /dev/null
+++ b/lolwut-button.gif
Binary files differ
diff --git a/lolwut.png b/lolwut.png
new file mode 100644
index 0000000..a24669e
--- /dev/null
+++ b/lolwut.png
Binary files differ
diff --git a/made-with-windows.png b/made-with-windows.png
new file mode 100644
index 0000000..b3353f9
--- /dev/null
+++ b/made-with-windows.png
Binary files differ
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..7a12254
--- /dev/null
+++ b/main.js
@@ -0,0 +1,30 @@
+document.addEventListener('DOMContentLoaded', () => {
+ /**
+ * Updates the 'last modified' timestamp on the page.
+ * Looks for an element with the ID 'lastmod'.
+ */
+ const lastModElement = document.getElementById('lastmod');
+ if (lastModElement) {
+ // Use a standard YYYY-MM-DD format for the date.
+ const lastModifiedDate = new Date(document.lastModified);
+ lastModElement.textContent = lastModifiedDate.toISOString().split('T')[0];
+ }
+
+ /**
+ * Handles the mobile sidebar toggle functionality.
+ * Looks for a button with ID 'menu-toggle' and a sidebar with ID 'mobile-sidebar'.
+ */
+ const menuToggleButton = document.getElementById('menu-toggle');
+ const mobileSidebar = document.getElementById('mobile-sidebar');
+
+ if (menuToggleButton && mobileSidebar) {
+ const closedText = menuToggleButton.textContent;
+ const openText = menuToggleButton.dataset.openText || 'Hide menu'; // Fallback text
+
+ menuToggleButton.addEventListener('click', () => {
+ const isExpanded = mobileSidebar.classList.toggle('visible');
+ menuToggleButton.setAttribute('aria-expanded', String(isExpanded));
+ menuToggleButton.textContent = isExpanded ? openText : closedText;
+ });
+ }
+}); \ No newline at end of file
diff --git a/map/index.html b/map/index.html
new file mode 100644
index 0000000..514d8fa
--- /dev/null
+++ b/map/index.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Site Map — SillyLaird</title>
+ <meta name="description" content="Human-friendly site map for SillyLaird." />
+ <meta property="og:title" content="Site Map — SillyLaird" />
+ <meta property="og:description" content="Human-friendly site map for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/map/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Site Map — SillyLaird" />
+ <meta name="twitter:description" content="Human-friendly site map for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/map/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/map/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/map/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/map/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/map/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="map-title">
+ <h1 id="map-title">Site Map</h1>
+ <p class="muted">A simple index so the site is usable even if navigation changes.</p>
+ </section>
+
+ <section aria-labelledby="core-title">
+ <h2 id="core-title">Core</h2>
+ <ul>
+ <li><a href="/">Home</a> — <a href="/index_zh.html">中文</a> — <a href="/index_jp.html">日本語</a></li>
+ <li><a href="/startpage/">StartPage</a> (kept terminal style; no translations)</li>
+ <li><a href="/journal/">Journal</a> — <a href="/journal/index_zh.html">中文</a> — <a href="/journal/index_jp.html">日本語</a></li>
+ <li><a href="/accounts/">Accounts</a> — <a href="/accounts/index_zh.html">中文</a> — <a href="/accounts/index_jp.html">日本語</a></li>
+ <li><a href="/computers/">Computers</a> — <a href="/computers/index_zh.html">中文</a> — <a href="/computers/index_jp.html">日本語</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a> — <a href="/bookmarks/index_zh.html">中文</a> — <a href="/bookmarks/index_jp.html">日本語</a></li>
+ <li><a href="/map/">Site Map</a> (this page)</li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="gaming-title">
+ <h2 id="gaming-title">Gaming</h2>
+ <ul>
+ <li><a href="/gaming/">Gaming hub</a> — <a href="/gaming/index_zh.html">中文</a> — <a href="/gaming/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/runescape/">RuneScape</a> — <a href="/gaming/runescape/index_zh.html">中文</a> — <a href="/gaming/runescape/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/stepmania/">StepMania</a> — <a href="/gaming/stepmania/index_zh.html">中文</a> — <a href="/gaming/stepmania/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/specialforce/">SpecialForce</a> — <a href="/gaming/specialforce/index_zh.html">中文</a> — <a href="/gaming/specialforce/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/multibox/">Multibox</a> — <a href="/gaming/multibox/index_zh.html">中文</a> — <a href="/gaming/multibox/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/multibox/what-is-multiboxing/">What is Multiboxing?</a> — <a href="/gaming/multibox/what-is-multiboxing/index_zh.html">中文</a> — <a href="/gaming/multibox/what-is-multiboxing/index_jp.html">日本語</a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="external-title">
+ <h2 id="external-title">Subdomains</h2>
+ <ul>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a> — posts and articles</li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a> — sign the guestbook</li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">Changelog</a> — site updates</li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a> — personal diary/BBS</li>
+ <li><a href="https://uploads.sillylaird.ca" target="_blank" rel="noopener">Uploads</a> — file hosting</li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a> — 9p.sillylaird.ca</li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/map/index_jp.html b/map/index_jp.html
new file mode 100644
index 0000000..2f62c2f
--- /dev/null
+++ b/map/index_jp.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Site Map — SillyLaird</title>
+ <meta name="description" content="Human-friendly site map for SillyLaird." />
+ <meta property="og:title" content="Site Map — SillyLaird" />
+ <meta property="og:description" content="Human-friendly site map for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/map/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Site Map — SillyLaird" />
+ <meta name="twitter:description" content="Human-friendly site map for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/map/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/map/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/map/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/map/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/map/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="map-title">
+ <h1 id="map-title">Site Map</h1>
+ <p class="muted">A simple index so the site is usable even if navigation changes.</p>
+ </section>
+
+ <section aria-labelledby="core-title">
+ <h2 id="core-title">Core</h2>
+ <ul>
+ <li><a href="/">ホーム</a> — <a href="/index_zh.html">中文</a> — <a href="/index_jp.html">日本語</a></li>
+ <li><a href="/startpage/">StartPage</a> (kept terminal style; no translations)</li>
+ <li><a href="/journal/">ジャーナル</a> — <a href="/journal/index_zh.html">中文</a> — <a href="/journal/index_jp.html">日本語</a></li>
+ <li><a href="/accounts/">アカウント</a> — <a href="/accounts/index_zh.html">中文</a> — <a href="/accounts/index_jp.html">日本語</a></li>
+ <li><a href="/computers/">コンピューター</a> — <a href="/computers/index_zh.html">中文</a> — <a href="/computers/index_jp.html">日本語</a></li>
+ <li><a href="/bookmarks/">ブックマーク</a> — <a href="/bookmarks/index_zh.html">中文</a> — <a href="/bookmarks/index_jp.html">日本語</a></li>
+ <li><a href="/map/">Site Map</a> (this page)</li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="gaming-title">
+ <h2 id="gaming-title">ゲーム</h2>
+ <ul>
+ <li><a href="/gaming/">ゲーム hub</a> — <a href="/gaming/index_zh.html">中文</a> — <a href="/gaming/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/runescape/">RuneScape</a> — <a href="/gaming/runescape/index_zh.html">中文</a> — <a href="/gaming/runescape/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/stepmania/">StepMania</a> — <a href="/gaming/stepmania/index_zh.html">中文</a> — <a href="/gaming/stepmania/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/specialforce/">SpecialForce</a> — <a href="/gaming/specialforce/index_zh.html">中文</a> — <a href="/gaming/specialforce/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/multibox/">Multibox</a> — <a href="/gaming/multibox/index_zh.html">中文</a> — <a href="/gaming/multibox/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/multibox/what-is-multiboxing/">What is Multiboxing?</a> — <a href="/gaming/multibox/what-is-multiboxing/index_zh.html">中文</a> — <a href="/gaming/multibox/what-is-multiboxing/index_jp.html">日本語</a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="external-title">
+ <h2 id="external-title">Subdomains</h2>
+ <ul>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">ブログ</a> — posts and articles</li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">ゲストブック</a> — sign the guestbook</li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">更新履歴</a> — site updates</li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">日記</a> — personal diary/BBS</li>
+ <li><a href="https://uploads.sillylaird.ca" target="_blank" rel="noopener">Uploads</a> — file hosting</li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a> — 9p.sillylaird.ca</li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/map/index_zh.html b/map/index_zh.html
new file mode 100644
index 0000000..195f478
--- /dev/null
+++ b/map/index_zh.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Site Map — SillyLaird</title>
+ <meta name="description" content="Human-friendly site map for SillyLaird." />
+ <meta property="og:title" content="Site Map — SillyLaird" />
+ <meta property="og:description" content="Human-friendly site map for SillyLaird." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/map/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Site Map — SillyLaird" />
+ <meta name="twitter:description" content="Human-friendly site map for SillyLaird." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/map/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/map/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/map/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/map/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/map/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="map-title">
+ <h1 id="map-title">Site Map</h1>
+ <p class="muted">A simple index so the 网站 is usable even if navigation changes.</p>
+ </section>
+
+ <section aria-labelledby="core-title">
+ <h2 id="core-title">Core</h2>
+ <ul>
+ <li><a href="/">首页</a> — <a href="/index_zh.html">中文</a> — <a href="/index_jp.html">日本語</a></li>
+ <li><a href="/startpage/">StartPage</a> (kept terminal style; no translations)</li>
+ <li><a href="/journal/">日志</a> — <a href="/journal/index_zh.html">中文</a> — <a href="/journal/index_jp.html">日本語</a></li>
+ <li><a href="/accounts/">账户</a> — <a href="/accounts/index_zh.html">中文</a> — <a href="/accounts/index_jp.html">日本語</a></li>
+ <li><a href="/computers/">电脑设备</a> — <a href="/computers/index_zh.html">中文</a> — <a href="/computers/index_jp.html">日本語</a></li>
+ <li><a href="/bookmarks/">书签</a> — <a href="/bookmarks/index_zh.html">中文</a> — <a href="/bookmarks/index_jp.html">日本語</a></li>
+ <li><a href="/map/">Site Map</a> (this page)</li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="gaming-title">
+ <h2 id="gaming-title">游戏</h2>
+ <ul>
+ <li><a href="/gaming/">游戏 hub</a> — <a href="/gaming/index_zh.html">中文</a> — <a href="/gaming/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/runescape/">RuneScape</a> — <a href="/gaming/runescape/index_zh.html">中文</a> — <a href="/gaming/runescape/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/stepmania/">StepMania</a> — <a href="/gaming/stepmania/index_zh.html">中文</a> — <a href="/gaming/stepmania/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/specialforce/">SpecialForce</a> — <a href="/gaming/specialforce/index_zh.html">中文</a> — <a href="/gaming/specialforce/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/multibox/">Multibox</a> — <a href="/gaming/multibox/index_zh.html">中文</a> — <a href="/gaming/multibox/index_jp.html">日本語</a></li>
+ <li><a href="/gaming/multibox/what-is-multiboxing/">What is Multiboxing?</a> — <a href="/gaming/multibox/what-is-multiboxing/index_zh.html">中文</a> — <a href="/gaming/multibox/what-is-multiboxing/index_jp.html">日本語</a></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="external-title">
+ <h2 id="external-title">Subdomains</h2>
+ <ul>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">博客</a> — posts and articles</li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">留言板</a> — sign the guestbook</li>
+ <li><a href="https://changelog.sillylaird.ca/" target="_blank" rel="noopener">更新日志</a> — 网站 updates</li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">日记</a> — personal diary/BBS</li>
+ <li><a href="https://uploads.sillylaird.ca" target="_blank" rel="noopener">Uploads</a> — file hosting</li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a> — 9p.sillylaird.ca</li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/mothracompat.gif b/mothracompat.gif
new file mode 100644
index 0000000..fcc0fb1
--- /dev/null
+++ b/mothracompat.gif
Binary files differ
diff --git a/mstartpage/Vidlii6 copy.png b/mstartpage/Vidlii6 copy.png
new file mode 100644
index 0000000..540c3a5
--- /dev/null
+++ b/mstartpage/Vidlii6 copy.png
Binary files differ
diff --git a/mstartpage/Vidlii6.png b/mstartpage/Vidlii6.png
new file mode 100644
index 0000000..540c3a5
--- /dev/null
+++ b/mstartpage/Vidlii6.png
Binary files differ
diff --git a/mstartpage/amazon.png b/mstartpage/amazon.png
new file mode 100644
index 0000000..615e0d5
--- /dev/null
+++ b/mstartpage/amazon.png
Binary files differ
diff --git a/mstartpage/belleville copy.png b/mstartpage/belleville copy.png
new file mode 100644
index 0000000..695d032
--- /dev/null
+++ b/mstartpage/belleville copy.png
Binary files differ
diff --git a/mstartpage/belleville.png b/mstartpage/belleville.png
new file mode 100644
index 0000000..695d032
--- /dev/null
+++ b/mstartpage/belleville.png
Binary files differ
diff --git a/mstartpage/ctvnews.png b/mstartpage/ctvnews.png
new file mode 100644
index 0000000..570f0ae
--- /dev/null
+++ b/mstartpage/ctvnews.png
Binary files differ
diff --git a/mstartpage/cytube.png b/mstartpage/cytube.png
new file mode 100644
index 0000000..6f47350
--- /dev/null
+++ b/mstartpage/cytube.png
Binary files differ
diff --git a/mstartpage/ebay.png b/mstartpage/ebay.png
new file mode 100644
index 0000000..d4d588a
--- /dev/null
+++ b/mstartpage/ebay.png
Binary files differ
diff --git a/mstartpage/general.png b/mstartpage/general.png
new file mode 100644
index 0000000..c06d8ee
--- /dev/null
+++ b/mstartpage/general.png
Binary files differ
diff --git a/mstartpage/gitlogo copy.png b/mstartpage/gitlogo copy.png
new file mode 100644
index 0000000..576cac6
--- /dev/null
+++ b/mstartpage/gitlogo copy.png
Binary files differ
diff --git a/mstartpage/gitlogo.png b/mstartpage/gitlogo.png
new file mode 100644
index 0000000..bf0d3ec
--- /dev/null
+++ b/mstartpage/gitlogo.png
Binary files differ
diff --git a/mstartpage/heyuri copy.png b/mstartpage/heyuri copy.png
new file mode 100644
index 0000000..1800cbc
--- /dev/null
+++ b/mstartpage/heyuri copy.png
Binary files differ
diff --git a/mstartpage/heyuri.png b/mstartpage/heyuri.png
new file mode 100644
index 0000000..1800cbc
--- /dev/null
+++ b/mstartpage/heyuri.png
Binary files differ
diff --git a/mstartpage/index.html b/mstartpage/index.html
new file mode 100644
index 0000000..da7d100
--- /dev/null
+++ b/mstartpage/index.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>SillyLaird Mobile StartPage</title>
+ <meta property="og:title" content="SillyLaird Mobile StartPage" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/mstartpage/" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird Mobile StartPage" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/mstartpage/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/mstartpage/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/mstartpage/" />
+ <link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro&display=swap" rel="stylesheet">
+
+ <link rel="stylesheet" href="/assets/css/pages/mstartpage-index.css" />
+
+</head>
+<body>
+ <!-- XXX Verification Modal -->
+ <div class="xxx-modal" id="xxx-modal">
+ <div class="xxx-modal-content">
+ <div class="xxx-logo">XXX</div>
+ <h3>Age Verification Required</h3>
+ <p>You must be at least 18 years old to access adult content.</p>
+ <p>By clicking "Verify", you confirm you are of legal age.</p>
+ <div class="xxx-buttons">
+ <button class="xxx-button xxx-deny" id="xxx-deny">Exit</button>
+ <button class="xxx-button xxx-confirm" id="xxx-confirm">Verify</button>
+ </div>
+ </div>
+ </div>
+
+ <!-- XXX List (bottom right) -->
+ <div class="xxx-list" id="xxx-list">
+ <div class="xxx-list-title">Verified XXX Sites</div>
+ <div class="xxx-list-item"><a href="https://www.xvideos.com/" class="xxx-link">XVideos</a></div>
+ <div class="xxx-list-item"><a href="https://www.xvideos.red/" class="xxx-link">XVideos RED</a></div>
+ <div class="xxx-list-item"><a href="#" class="xxx-link">Site 3</a></div>
+ </div>
+
+ <div class="header">
+ <button class="menu-toggle" id="menu-toggle">☰ Main Menu</button>
+
+ <div class="main-menu" id="main-menu">
+ <a href="/">Homepage</a>
+ <a href="/startpage/">StartPage</a>
+ <a href="https://sillylaird.srht.site/">srht mirror</a>
+ <a href="http://9p.sillylaird.ca/">plan9front site</a>
+ <a href="https://dev.sillylaird.ca/">Dev site</a>
+ <a href="https://sillylaird.risingthumb.xyz/">Blog</a>
+ <a href="/journal/">Journal</a>
+ <a href="/bookmarks/">Bookmarks</a>
+ <a href="/gaming/multibox/">MultiLogging (WIP)</a>
+ <a href="/gaming/specialforce/">SpecialForce (WIP)</a>
+ <a href="/vidlii/index.html">Vidlii (WIP)</a>
+ <a href="/gaming/runescape/">RuneScape2/OSRS (WIP)</a>
+ <a href="/accounts/">Accounts</a>
+ </div>
+
+ <div class="search-container">
+ <form class="search-form" action="https://www.google.ca/search" method="GET" target="_top">
+ <input type="text" name="q" class="search-input" maxlength="255" placeholder="Search with Google" autocomplete="off"/>
+ <input type="submit" value="Search"/>
+ </form>
+ </div>
+ </div>
+
+ <div class="datetime">
+ <p id="realtime-date"></p>
+ <p id="realtime-clock"></p>
+ </div>
+
+ <!-- XXX Section -->
+ <div class="xxx-section">
+ <button class="xxx-toggle" id="xxx-toggle">Show XXX Content</button>
+ </div>
+
+ <div class="content-section">
+ <button type="button" class="collapsible">Quick Links</button>
+ <div class="collapsible-content">
+ <div class="link-grid">
+ <div class="link-item"><a href="https://www.google.ca/">Google</a></div>
+ <div class="link-item"><a href="https://searx.pussthecat.org/">SearXNG</a></div>
+ <div class="link-item"><a href="https://invidious.pussthecat.org/">Invidious</a></div>
+ <div class="link-item"><a href="https://www.youtube.com/">Youtube</a></div>
+ <div class="link-item"><a href="https://www.vidlii.com">Vidlii</a></div>
+ <div class="link-item"><a href="https://www.epiktube.xyz/">EpikTube</a></div>
+ <div class="link-item"><a href="https://www.nicovideo.jp/">NicoVideo</a></div>
+ <div class="link-item"><a href="https://www.bilibili.com/">BiliBili</a></div>
+ <div class="link-item"><a href="https://www.twitch.tv/directory/following/live">Twitch</a></div>
+ <div class="link-item"><a href="https://kick.com/following">Kick</a></div>
+ <div class="link-item"><a href="https://discord.com/channels/@me/">Discord</a></div>
+ <div class="link-item"><a href="https://www.sportsmediawatch.com/">SportsMediaWatch</a></div>
+ <div class="link-item"><a href="https://chat.deepseek.com/">DeepSeek Chat</a></div>
+ <div class="link-item"><a href="https://chat.qwen.ai/">Qwen</a></div>
+ <div class="link-item"><a href="https://chat.mistral.ai/">Mistral</a></div>
+ </div>
+ </div>
+ </div>
+
+ <div class="content-section">
+ <h2 class="section-title">Media & Entertainment</h2>
+ <div class="gallery-container">
+ <div class="gallery-item">
+ <a href="https://fastmail.com">
+ <img src="/fastmail.png" alt="FastMail">
+ </a>
+ <div class="gallery-desc">WebMail</div>
+ </div>
+
+ <div class="gallery-item">
+ <a href="https://www.vidlii.com/">
+ <img src="Vidlii6.png" alt="Vidlii">
+ </a>
+ <div class="gallery-desc">
+ Video Platforms
+ </div>
+ </div>
+
+ <div class="gallery-item">
+ <a href="https://heyuri.net/">
+ <img src="heyuri.png" alt="Heyuri">
+ </a>
+ <div class="gallery-desc">
+ Forums & Imageboards
+ </div>
+ </div>
+
+ <div class="gallery-item">
+ <a href="https://rateyourmusic.com/lists/">
+ <img src="sonemic.png" alt="Rate Your Music">
+ </a>
+ <div class="gallery-desc">Music</div>
+ </div>
+ </div>
+ </div>
+
+ <div class="content-section">
+ <h2 class="section-title">Other Resources</h2>
+ <div class="gallery-container">
+ <div class="gallery-item">
+ <a href="https://en.wikipedia.org/wiki/Shopping">
+ <img src="shoppingcart.png" alt="Shopping">
+ </a>
+ <div class="gallery-desc">Shopping</div>
+ </div>
+
+ <div class="gallery-item">
+ <a href="https://www.ctvnews.ca/">
+ <img src="ctvnews.png" alt="CTV News">
+ </a>
+ <div class="gallery-desc">News</div>
+ </div>
+
+ <div class="gallery-item">
+ <a href="https://www.teamfortress.com/">
+ <img src="tf2.png" alt="TF2">
+ </a>
+ <div class="gallery-desc">Gaming</div>
+ </div>
+
+ <div class="gallery-item">
+ <a href="https://www.ctvnews.ca/weather">
+ <img src="https://sirocco.accuweather.com/nx_mosaic_640x480_public/sir/inmasirne.gif" alt="Weather Radar">
+ </a>
+ <div class="gallery-desc">Weather</div>
+ </div>
+ </div>
+ </div>
+
+ <div class="footer">
+ <div class="footer-links">
+ <a href="https://chat.dot.org.es/">gasconNet</a>
+ <a href="https://up.heyuri.net/user/boards/sillylaird/">UP@Heyuriu</a>
+ <a href="https://heyaoi.net/">Heyaoi ImageBoard</a>
+ <a href="http://9p.sillylaird.ca/">SillyLaird plan9front</a>
+ <a href="https://sillylaird.risingthumb.xyz/">SillyLaird Blog</a>
+ <a href="https://sillylaird.srht.site/">SillyLaird srht.site</a>
+ <a href="/accounts">SillyLaird Account's</a>
+ <a href="/">SillyLaird HomePage</a>
+ </div>
+ </div>
+
+
+ <script defer src="/assets/js/pages/mstartpage-index.js"></script>
+</body>
+</html>
diff --git a/mstartpage/lain.png b/mstartpage/lain.png
new file mode 100644
index 0000000..1614204
--- /dev/null
+++ b/mstartpage/lain.png
Binary files differ
diff --git a/mstartpage/news.png b/mstartpage/news.png
new file mode 100644
index 0000000..2f5dfe1
--- /dev/null
+++ b/mstartpage/news.png
Binary files differ
diff --git a/mstartpage/newspaper.png b/mstartpage/newspaper.png
new file mode 100644
index 0000000..1b89ec9
--- /dev/null
+++ b/mstartpage/newspaper.png
Binary files differ
diff --git a/mstartpage/noteback.gif b/mstartpage/noteback.gif
new file mode 100644
index 0000000..50d12df
--- /dev/null
+++ b/mstartpage/noteback.gif
Binary files differ
diff --git a/mstartpage/old-youtube-icon-75.png b/mstartpage/old-youtube-icon-75.png
new file mode 100644
index 0000000..6c178a4
--- /dev/null
+++ b/mstartpage/old-youtube-icon-75.png
Binary files differ
diff --git a/mstartpage/pornhub.jpeg b/mstartpage/pornhub.jpeg
new file mode 100644
index 0000000..044e835
--- /dev/null
+++ b/mstartpage/pornhub.jpeg
Binary files differ
diff --git a/mstartpage/roundcube.png b/mstartpage/roundcube.png
new file mode 100644
index 0000000..4e44e3e
--- /dev/null
+++ b/mstartpage/roundcube.png
Binary files differ
diff --git a/mstartpage/shoppingcart.png b/mstartpage/shoppingcart.png
new file mode 100644
index 0000000..09a2b15
--- /dev/null
+++ b/mstartpage/shoppingcart.png
Binary files differ
diff --git a/mstartpage/sm_logo copy.png b/mstartpage/sm_logo copy.png
new file mode 100644
index 0000000..da454b1
--- /dev/null
+++ b/mstartpage/sm_logo copy.png
Binary files differ
diff --git a/mstartpage/sm_logo.png b/mstartpage/sm_logo.png
new file mode 100644
index 0000000..da454b1
--- /dev/null
+++ b/mstartpage/sm_logo.png
Binary files differ
diff --git a/mstartpage/somethingawful.png b/mstartpage/somethingawful.png
new file mode 100644
index 0000000..0c18014
--- /dev/null
+++ b/mstartpage/somethingawful.png
Binary files differ
diff --git a/mstartpage/sonemic.png b/mstartpage/sonemic.png
new file mode 100644
index 0000000..66afbb8
--- /dev/null
+++ b/mstartpage/sonemic.png
Binary files differ
diff --git a/mstartpage/sonymp3.png b/mstartpage/sonymp3.png
new file mode 100644
index 0000000..f42da1f
--- /dev/null
+++ b/mstartpage/sonymp3.png
Binary files differ
diff --git a/mstartpage/tf2.png b/mstartpage/tf2.png
new file mode 100644
index 0000000..a47f3a2
--- /dev/null
+++ b/mstartpage/tf2.png
Binary files differ
diff --git a/mstartpage/tilde.png b/mstartpage/tilde.png
new file mode 100644
index 0000000..20e1184
--- /dev/null
+++ b/mstartpage/tilde.png
Binary files differ
diff --git a/mstartpage/wallpaper.jpg b/mstartpage/wallpaper.jpg
new file mode 100644
index 0000000..d67ac74
--- /dev/null
+++ b/mstartpage/wallpaper.jpg
Binary files differ
diff --git a/mullvad.svg b/mullvad.svg
new file mode 100644
index 0000000..18bb154
--- /dev/null
+++ b/mullvad.svg
@@ -0,0 +1 @@
+<svg width='253' height='253' viewBox='0 0 253 253' fill='none' xmlns='http://www.w3.org/2000/svg'><path fill-rule='evenodd' clip-rule='evenodd' d='M0 126.3C0 196.1 56.6 252.6 126.3 252.6C196 252.6 252.6 196.1 252.6 126.3C252.6 56.5 196.1 0 126.3 0C56.5 0 0 56.5 0 126.3Z' fill='#192E45'/><path fill-rule='evenodd' clip-rule='evenodd' d='M16.9 111.2L26.5 97.8C26.5 97.9 25.9 117.1 25.9 117.1L28.6 102.6C36.6 118.8 56.2 141.2 74.1 153.2C76 154.5 77.6 155.9 78.7 157.3C81 158.2 83.3 158.7 85.6 159.1C86.8 159.3 88.1 159.4 89.3 159.5C90.5 159.6 91.8 159.6 93 159.6C94.2 159.6 95.4 159.5 96.6 159.4C97.8 159.3 99 159.1 100.2 158.9C101.4 158.7 102.6 158.5 103.7 158.1C104.9 157.8 106 157.5 107.2 157.1C108.3 156.8 109.5 156.3 110.6 155.9C111.7 155.4 112.8 155 113.9 154.4C115 153.8 116.1 153.3 117.1 152.7C118.2 152.2 119.2 151.5 120.3 150.9C121.4 150.3 122.4 149.6 123.5 149C124.6 148.4 125.6 147.7 126.6 147.1C127.6 146.4 128.7 145.8 129.7 145.1C130.7 144.4 131.8 143.8 132.9 143.1L133.9 142.5L134.4 142.8L141.6 147.6L134.3 145.7C133.6 146.5 132.9 147.3 132.1 148.1C131.2 149 130.2 149.9 129.3 150.8C128.3 151.6 127.3 152.5 126.2 153.2C125.1 154 124.1 154.7 122.9 155.4C120.7 156.8 118.3 158 115.8 159C114.6 159.5 113.3 160 112.1 160.4C110.8 160.8 109.6 161.2 108.3 161.5C107 161.8 105.7 162.1 104.4 162.3C103.1 162.5 101.8 162.6 100.5 162.8C97.9 162.9 95.2 162.9 92.6 162.5C91.3 162.3 90 162.1 88.7 161.8C87.4 161.5 86.2 161.1 85 160.7C82.9 159.9 80.8 158.9 78.9 157.7C78.9 157.7 72 158.7 74.8 163.9C77.6 169.1 81.8 168.6 79.8 174.7C78.4 178 76.4 181.2 74.2 184.2C69.6 190.4 62.4 195.9 63.1 199.2C95.8 239.5 169.5 233.9 197.5 197.9C197.1 192.7 188.9 190.2 183.2 177.5C184.8 178 187.2 178.7 187.2 178.6C187.2 178.5 180.4 167.5 180.1 166.4L184.5 166.7C184.5 166.7 178.7 159.5 178.5 158.8L184.4 158C184.4 158 177 149.5 176.9 148.8L184.4 150L176.2 140.1H180.1L175.5 133.4C174.7 133.1 173.9 132.9 173.1 132.7L170.1 131.8C158.9 128.3 148.3 125.1 138.1 118.7C123.8 109.8 111 98.9 101.4 90.4L82.1 81C63.6 79.6 46.2 80.1 35.6 82.2L42.4 70.6L32 83.1C31.3 82.9 31.1 82.5 31.1 82.5L31.8 67.1L28.5 81C27.5 80.5 26.3 80.3 25.1 80.3C20.5 80.3 16.8 84 16.8 88.6C16.8 92.8 19.9 96.3 24 96.8L16.9 111.2Z' fill='#D0933A'/><path fill-rule='evenodd' clip-rule='evenodd' d='M28.5 80.8C27.5 80.4 26.3 80.1 25.2 80.1C20.6 80.1 16.9 83.8 16.9 88.4C16.9 92.4 19.8 95.8 23.6 96.6H23.8C26.3 95.8 31.3 89.1 30.5 84.9C30.2 83.4 29.5 82 28.5 80.8Z' fill='#FFCC86'/><path fill-rule='evenodd' clip-rule='evenodd' d='M101.4 70.1C99.9 66 100.3 60.7 102.4 55.7C105.4 48.8 111.1 44.2 116.5 44.2C117.6 44.2 118.6 44.4 119.6 44.8C122.7 42 126.3 39.7 130.3 38.1C152.4 29.3 184.7 45 193 66.7C197 77.2 195.8 88.7 192.4 99.2C189.6 107.8 179.4 120.2 183.2 129.6C181.7 129.2 150.1 119.4 141.3 113.8C127.2 105 114.5 94.2 105 85.8L104.7 85.5L72.6 70.3C72.2 70.1 71.8 69.9 71.5 69.7C76.1 69.7 93.6 71.8 101.4 70.1Z' fill='#FDD321'/><path d='M110.9 73.7C110 73.7 109.2 73.5 108.6 73.2C107 72.5 105.8 71.2 105 69.2C103.6 65.8 104 61.1 105.9 56.7C108.4 51 113.1 47 117.4 47C118.2 47 119 47.2 119.8 47.5C121.9 48.4 123.4 50.5 123.9 53.5C124.5 56.7 124 60.4 122.4 63.9C119.9 69.6 115.1 73.7 110.9 73.7Z' fill='white'/><path d='M117.3 48.6C117.9 48.6 118.5 48.7 119.1 49C120.7 49.7 121.9 51.5 122.3 53.9C122.8 56.8 122.4 60.2 120.9 63.4C118.7 68.5 114.4 72.2 110.8 72.2C110.2 72.2 109.6 72.1 109.1 71.9C107.6 71.3 106.8 69.9 106.4 68.8C105.2 65.8 105.5 61.4 107.2 57.4C109.5 52.3 113.7 48.6 117.3 48.6ZM117.3 45.6C112.5 45.6 107.2 50 104.4 56.3C102.3 61 102 66.1 103.5 70C104.4 72.3 105.9 73.9 107.8 74.8C108.7 75.2 109.7 75.4 110.8 75.4C115.6 75.4 120.9 71 123.6 64.7C125.3 60.9 125.8 56.9 125.2 53.4C124.6 49.9 122.8 47.4 120.2 46.3C119.4 45.8 118.4 45.6 117.3 45.6Z' fill='#1D2A3A'/></svg> \ No newline at end of file
diff --git a/multibox.png b/multibox.png
new file mode 100644
index 0000000..846746c
--- /dev/null
+++ b/multibox.png
Binary files differ
diff --git a/musictaste/index.html b/musictaste/index.html
new file mode 100644
index 0000000..b41c212
--- /dev/null
+++ b/musictaste/index.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Vinyls — SillyLaird</title>
+ <meta name="description" content="Vinyl collection images." />
+ <meta property="og:title" content="Vinyls — SillyLaird" />
+ <meta property="og:description" content="Vinyl collection images." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/musictaste/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Vinyls — SillyLaird" />
+ <meta name="twitter:description" content="Vinyl collection images." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/musictaste/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/musictaste/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/musictaste/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/musictaste/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/musictaste/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/vinyls.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vinyl-title">
+ <h1 id="vinyl-title">Vinyls</h1>
+ <p class="muted">A wall of covers.</p>
+
+ <div class="vinyl-grid">
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/409x409/https%3A%2F%2Fimages.genius.com%2Ff6cdcd8b1832d69eee495551a836defe.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F8631a7d618b5f03a98d66acd4e47d30a.700x700x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/373x373/https%3A%2F%2Fimages.genius.com%2F7fb6c38ccaa9a4774d089d01b3a71f4c.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="promare.png" alt="Promare" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/409x409/https%3A%2F%2Fimages.genius.com%2F7d0d55bc0879faa98cdadbef8a19d211.1000x1000x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fefea6158dc39ad60f83e52b20e1245ae.999x999x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F77e9525f23fce9612fe72d2cb43f2b34.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F3f06209ed8ad509a003cab94a2a81f24.1000x1000x1.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fa816cd337cd278cc9ed82188de4f58a1.1000x1000x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://f4.bcbits.com/img/a4238869426_10.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/61wF-IIzQGL._AC_SL1500_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/71b3AcnBbrL._AC_SL1200_.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://images.genius.com/ffa06c3ce8ea946089ebc6b8b64c881c.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/71lix6+VfWL._AC_SL1425_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F152fec319304099325b4f00afccb5169.700x700x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fc9cbf5dc148430ba7247a60a6ff4fedb.1000x1000x1.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/288x288/https%3A%2F%2Fimages.genius.com%2Fba17e1498ec763a4931564127164640c.999x999x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/A1DaPtkeBxL._AC_SL1500_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/81vr2WI+qeL._AC_SL1425_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://i.scdn.co/image/ab67616d0000b27318e5871b4499ba01baa14fe9" alt="Vinyl cover" />
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/musictaste/index_jp.html b/musictaste/index_jp.html
new file mode 100644
index 0000000..9e5df0b
--- /dev/null
+++ b/musictaste/index_jp.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Vinyls — SillyLaird</title>
+ <meta name="description" content="Vinyl collection images." />
+ <meta property="og:title" content="Vinyls — SillyLaird" />
+ <meta property="og:description" content="Vinyl collection images." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/musictaste/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Vinyls — SillyLaird" />
+ <meta name="twitter:description" content="Vinyl collection images." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/musictaste/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/musictaste/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/musictaste/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/musictaste/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/musictaste/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/vinyls.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vinyl-title">
+ <h1 id="vinyl-title">Vinyls</h1>
+ <p class="muted">A wall of covers.</p>
+
+ <div class="vinyl-grid">
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/409x409/https%3A%2F%2Fimages.genius.com%2Ff6cdcd8b1832d69eee495551a836defe.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F8631a7d618b5f03a98d66acd4e47d30a.700x700x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/373x373/https%3A%2F%2Fimages.genius.com%2F7fb6c38ccaa9a4774d089d01b3a71f4c.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="promare.png" alt="Promare" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/409x409/https%3A%2F%2Fimages.genius.com%2F7d0d55bc0879faa98cdadbef8a19d211.1000x1000x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fefea6158dc39ad60f83e52b20e1245ae.999x999x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F77e9525f23fce9612fe72d2cb43f2b34.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F3f06209ed8ad509a003cab94a2a81f24.1000x1000x1.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fa816cd337cd278cc9ed82188de4f58a1.1000x1000x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://f4.bcbits.com/img/a4238869426_10.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/61wF-IIzQGL._AC_SL1500_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/71b3AcnBbrL._AC_SL1200_.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://images.genius.com/ffa06c3ce8ea946089ebc6b8b64c881c.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/71lix6+VfWL._AC_SL1425_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F152fec319304099325b4f00afccb5169.700x700x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fc9cbf5dc148430ba7247a60a6ff4fedb.1000x1000x1.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/288x288/https%3A%2F%2Fimages.genius.com%2Fba17e1498ec763a4931564127164640c.999x999x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/A1DaPtkeBxL._AC_SL1500_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/81vr2WI+qeL._AC_SL1425_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://i.scdn.co/image/ab67616d0000b27318e5871b4499ba01baa14fe9" alt="Vinyl cover" />
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/musictaste/index_zh.html b/musictaste/index_zh.html
new file mode 100644
index 0000000..4f81c7c
--- /dev/null
+++ b/musictaste/index_zh.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Vinyls — SillyLaird</title>
+ <meta name="description" content="Vinyl collection images." />
+ <meta property="og:title" content="Vinyls — SillyLaird" />
+ <meta property="og:description" content="Vinyl collection images." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/musictaste/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Vinyls — SillyLaird" />
+ <meta name="twitter:description" content="Vinyl collection images." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/musictaste/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/musictaste/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/musictaste/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/musictaste/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/musictaste/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+ <link rel="stylesheet" href="/assets/css/pages/vinyls.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vinyl-title">
+ <h1 id="vinyl-title">Vinyls</h1>
+ <p class="muted">A wall of covers.</p>
+
+ <div class="vinyl-grid">
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/409x409/https%3A%2F%2Fimages.genius.com%2Ff6cdcd8b1832d69eee495551a836defe.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F8631a7d618b5f03a98d66acd4e47d30a.700x700x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/373x373/https%3A%2F%2Fimages.genius.com%2F7fb6c38ccaa9a4774d089d01b3a71f4c.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="promare.png" alt="Promare" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/409x409/https%3A%2F%2Fimages.genius.com%2F7d0d55bc0879faa98cdadbef8a19d211.1000x1000x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fefea6158dc39ad60f83e52b20e1245ae.999x999x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F77e9525f23fce9612fe72d2cb43f2b34.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F3f06209ed8ad509a003cab94a2a81f24.1000x1000x1.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fa816cd337cd278cc9ed82188de4f58a1.1000x1000x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://f4.bcbits.com/img/a4238869426_10.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/61wF-IIzQGL._AC_SL1500_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/71b3AcnBbrL._AC_SL1200_.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://images.genius.com/ffa06c3ce8ea946089ebc6b8b64c881c.1000x1000x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/71lix6+VfWL._AC_SL1425_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2F152fec319304099325b4f00afccb5169.700x700x1.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/375x0/https%3A%2F%2Fimages.genius.com%2Fc9cbf5dc148430ba7247a60a6ff4fedb.1000x1000x1.jpg" alt="Vinyl cover" />
+
+ <img loading="lazy" decoding="async" src="https://t2.genius.com/unsafe/288x288/https%3A%2F%2Fimages.genius.com%2Fba17e1498ec763a4931564127164640c.999x999x1.png" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/A1DaPtkeBxL._AC_SL1500_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://m.media-amazon.com/images/I/81vr2WI+qeL._AC_SL1425_.jpg" alt="Vinyl cover" />
+ <img loading="lazy" decoding="async" src="https://i.scdn.co/image/ab67616d0000b27318e5871b4499ba01baa14fe9" alt="Vinyl cover" />
+ </div>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/musictaste/style.css b/musictaste/style.css
new file mode 100644
index 0000000..5304ab3
--- /dev/null
+++ b/musictaste/style.css
@@ -0,0 +1,11 @@
+/* CSS is how you can add style to your website, such as colors, fonts, and positioning of your
+ HTML content. To learn how to do something, just try searching Google for questions like
+ "how to change link color." */
+
+body {
+ background-color: #89b8e2;
+ text-align: center;
+ color: black;
+ font-family: Arial;
+}
+margin: auto;
diff --git a/mwallpaper.jpeg b/mwallpaper.jpeg
new file mode 100644
index 0000000..fdaee69
--- /dev/null
+++ b/mwallpaper.jpeg
Binary files differ
diff --git a/mwallpaper.jpg b/mwallpaper.jpg
new file mode 100644
index 0000000..7b55bd3
--- /dev/null
+++ b/mwallpaper.jpg
Binary files differ
diff --git a/niceland.png b/niceland.png
new file mode 100644
index 0000000..c7ba93d
--- /dev/null
+++ b/niceland.png
Binary files differ
diff --git a/nordvpn.png b/nordvpn.png
new file mode 100644
index 0000000..9c21311
--- /dev/null
+++ b/nordvpn.png
Binary files differ
diff --git a/northkorea.png b/northkorea.png
new file mode 100644
index 0000000..af367a4
--- /dev/null
+++ b/northkorea.png
Binary files differ
diff --git a/npp.svg b/npp.svg
new file mode 100644
index 0000000..410e19a
--- /dev/null
+++ b/npp.svg
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 606.6 524.8" style="enable-background:new 0 0 606.6 524.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#231F20;}
+ .st1{fill:#90E59A;}
+ .st2{fill:#5CCE74;}
+ .st3{fill:#75D66F;}
+ .st4{fill:#8FE772;}
+ .st5{fill:#A9F37E;}
+ .st6{fill:#87DE71;}
+ .st7{fill:none;}
+ .st8{fill:#FBFDFC;}
+ .st9{fill:#FFFFFF;}
+ .st10{fill:#97EB74;}
+ .st11{fill:#84CB71;}
+ .st12{fill:#6CB960;}
+ .st13{fill:#77C66C;}
+ .st14{fill:#D07B84;}
+ .st15{fill:#FEFEFE;}
+ .st16{fill:#E1CB86;}
+ .st17{fill:#DDC377;}
+ .st18{fill:#DCC576;}
+ .st19{fill:#F5D776;}
+ .st20{fill:#959D64;}
+</style>
+<g id="Calque_2_-_copie_5">
+ <path d="M400.3,437.6 M438.5,397.9 M133.3,148.1V49c0-23.9,16.5-39.8,40.1-39.8h237.7c7.8,0,14.5,2.3,20,7.9l60.1,61.3
+ c5.5,5.7,7.7,13.2,7.7,21.1v189.3l9.4-0.1v-194c0-8.3-3.2-16.1-9-22L435.9,9.1c-5.8-5.8-13.8-9.1-22-9.1H169.4
+ c-24.8,0-45,20.2-45,45v107.4L133.3,148.1z M124.4,348v131.9c0,24.8,20.2,45,45,45h57.2l0-9.2h-53.2c-23.5,0-40.1-16-40.1-39.8
+ V352.2L124.4,348z M448,401.9 M403,446.9"/>
+</g>
+<g id="Calque_3">
+ <path d="M476.9,87.4h-55.4V29.5c0-4.3,0-7.7-4.2-7.7c-4.3,0-4.2,3.5-4.2,7.7v58.6c0,4.3,3.4,7.7,7.7,7.7h56.1
+ c4.3,0,7.7,0.1,7.7-4.2S481.1,87.4,476.9,87.4z"/>
+</g>
+<g id="Calque_6">
+ <g>
+ <path class="st0" d="M271.9,363.3c-13.8,0-16.7,5.9-16.7,10.8v61.1c0,4.9,2.9,10.8,16.7,10.8c13.8,0,16.7-5.9,16.7-10.8v-61.1
+ C288.6,369.2,285.7,363.3,271.9,363.3z M264,377.1c0-4.8,2.4-6.9,7.9-6.9c5.5,0,7.9,2.1,7.9,6.9v55.2c0,4.8-2.4,6.9-7.9,6.9
+ c-5.5,0-7.9-2.1-7.9-6.9V377.1z"/>
+ <polygon class="st0" points="314.4,304.2 305.5,304.2 305.5,353.5 299.6,353.5 299.6,360.4 305.5,360.4 305.5,455.9 314.4,455.9
+ 314.4,360.4 328.2,360.4 328.2,353.5 314.4,353.5 "/>
+ <path class="st0" d="M348.9,363.3c-13.8,0-16.7,5.9-16.7,10.8v61.1c0,4.9,2.9,10.8,16.7,10.8c13.8,0,16.7-5.9,16.7-10.8v-9.8h-8.9
+ v6.9c0,4.8-2.4,6.9-7.9,6.9c-5.5,0-7.9-2.1-7.9-6.9v-16.7c2.2,0.6,4.8,0.9,7.9,0.9c13.8,0,16.7-5.9,16.7-10.8v-31.5
+ C365.6,369.2,362.7,363.3,348.9,363.3z M341,377.1c0-4.8,2.4-6.9,7.9-6.9c5.5,0,7.9,2.1,7.9,6.9v25.6c0,4.8-2.4,6.9-7.9,6.9
+ c-5.5,0-7.9-2.1-7.9-6.9V377.1z"/>
+ <path class="st0" d="M395.9,363.3c-13.8,0-16.7,5.9-16.7,10.8v109.3h8.9v-38.3c2.2,0.6,4.8,0.9,7.9,0.9c13.8,0,16.7-5.9,16.7-10.8
+ v-61.1C412.7,369.2,409.8,363.3,395.9,363.3z M388.1,377.1c0-4.8,2.4-6.9,7.9-6.9c5.5,0,7.9,2.1,7.9,6.9v55.2
+ c0,4.8-2.4,6.9-7.9,6.9c-5.5,0-7.9-2.1-7.9-6.9V377.1z"/>
+ <path class="st0" d="M443,363.3c-13.8,0-16.7,5.9-16.7,10.8v9.8h8.9v-6.9c0-4.8,2.4-6.9,7.9-6.9c5.5,0,7.9,2.1,7.9,6.9v16.7
+ c-2.2-0.6-4.8-0.9-7.9-0.9c-13.8,0-16.7,5.9-16.7,10.8v31.5c0,4.9,2.9,10.8,16.7,10.8c13.8,0,16.7-5.9,16.7-10.8v-61.1
+ C459.8,369.2,456.8,363.3,443,363.3z M435.1,406.6c0-4.8,2.4-6.9,7.9-6.9c5.5,0,7.9,2.1,7.9,6.9v25.6c0,4.8-2.4,6.9-7.9,6.9
+ c-5.5,0-7.9-2.1-7.9-6.9V406.6z"/>
+ <path class="st0" d="M498.7,364.2c-2.2-0.6-4.8-0.9-7.9-0.9c-13.8,0-16.7,5.9-16.7,10.8v61.1c0,4.9,2.9,10.8,16.7,10.8
+ c13.8,0,16.7-5.9,16.7-10.8v-131h-8.9V364.2z M483,377.1c0-4.8,2.4-6.9,7.9-6.9c5.5,0,7.9,2.1,7.9,6.9v55.2c0,4.8-2.4,6.9-7.9,6.9
+ c-5.5,0-7.9-2.1-7.9-6.9V377.1z"/>
+ <polygon class="st0" points="530.3,363.3 521.4,363.3 521.4,383 511.5,383 511.5,389.9 521.4,389.9 521.4,409.6 530.3,409.6
+ 530.3,389.9 540.1,389.9 540.1,383 530.3,383 "/>
+ <polygon class="st0" points="562.8,383 562.8,363.3 553.9,363.3 553.9,383 544,383 544,389.9 553.9,389.9 553.9,409.6
+ 562.8,409.6 562.8,389.9 572.6,389.9 572.6,383 "/>
+ </g>
+</g>
+<g id="Calque_7">
+</g>
+<g id="Calque_9">
+ <path class="st0" d="M234.4,304.2c-13.8,0-16.7,5.9-16.7,10.8v185.5h8.9V318c0-4.8,2.4-6.9,7.9-6.9s7.9,2.1,7.9,6.9v128h8.9v-131
+ C251.2,310.1,248.3,304.2,234.4,304.2z"/>
+</g>
+<g id="Layer_1">
+ <g>
+ <path class="st1" d="M129.4,159.4c8.5-8.4,20.7-10.7,31.8-14.2c12.7-0.7,25.4,3.2,36.9,8.5c5,2,4.7,7.9,5.8,12.4
+ c-3.6,0.8-7.2,1.5-10.8,2.4c1.6-2.5,3.1-4.9,4.6-7.4c-0.1-2.4-2.9-3.3-4.3-5c-1.9,1.3-3.8,2.6-5.7,3.9c-1.3-1.1-2.6-2.2-3.9-3.3
+ c-3.5,0.5-7.3,1-10.6-0.9c-5.6-2.5-11.6-4.4-17.8-3.8c-2.8,1.2-5,3.4-7.3,5.3c0-1,0.1-3,0.1-4c-1.3,1.5-2.6,3-3.8,4.6
+ c-8.6,0.9-12.6,9.8-10.7,17.5c-1.8,1.4-3.7,2.9-5.5,4.3c2-3.9,3.7-8.2,1.4-12.4c-6.4,1.9-6.9,8.9-9.8,13.9
+ c-3,5.5-8.1,9.7-10.5,15.5c-0.2,3.2,0.3,6.3,0.6,9.5c-2.4-0.7-4.8-1.3-7.1-2C108.8,187.9,116.1,171.1,129.4,159.4L129.4,159.4z"/>
+ <path class="st2" d="M148.1,157.4c2.4-1.9,4.5-4.2,7.3-5.3c6.2-0.6,12.2,1.3,17.8,3.8c-0.8,3.5-2,6.9-3.6,10.1
+ c-4.8-2.5-9.6-5.2-14.1-8.1c0.9,1.8,1.8,3.6,2.7,5.4c-1,1.4-2.1,2.7-3.1,4.1c-2-2.6-4-5.2-5.9-7.9c-0.7,3.9-3.6,6.8-7.6,4.6
+ c0.9-2.1,1.8-4.1,2.7-6.1c1.2-1.6,2.5-3.1,3.8-4.6C148.2,154.3,148.1,156.3,148.1,157.4L148.1,157.4z"/>
+ <path class="st3" d="M173.2,155.8c3.3,1.9,7,1.4,10.6,0.9c1.3,1.1,2.6,2.2,3.9,3.3c1.9-1.3,3.8-2.6,5.7-3.9c1.3,1.7,4.2,2.6,4.3,5
+ c-1.4,2.5-3,5-4.6,7.4c-0.9,0.2-2.7,0.6-3.5,0.9c1.8,2.2,3.6,4.4,5.4,6.5c-7.6,0.4-13.1-4.8-18.9-8.6c-5.3,0.8-9.1,6.5-14.6,7.1
+ c-2.7-1.2-5.2-2.8-7.7-4.4c-0.9,2.9-1.5,5.9-3.2,8.4c-2.5,1.7-5.7,1.7-8.6,2.5c0.1,1.3,0.3,2.7,0.4,4c-3.1-3-6.9-5.8-11.3-3.8
+ c3.2,3.3-1.6,4.6-3.8,6.1c-4.3,2.4-9.1,5.5-9.6,10.9c-1.2,3.1,0.1,7.9-3.4,9.6c-4.1,1.1-8.3,0.4-12.4,0.3c0.3-1,0.8-2.9,1.1-3.9
+ c2.4,0.7,4.8,1.3,7.1,2c-0.4-3.2-0.9-6.3-0.6-9.5c2.4-5.8,7.5-10,10.5-15.5c2.9-5,3.4-12,9.8-13.9c2.3,4.2,0.6,8.5-1.4,12.4
+ c1.8-1.5,3.6-2.9,5.5-4.3c-1.9-7.7,2.1-16.6,10.7-17.5c-0.9,2-1.8,4.1-2.7,6.1c3.9,2.2,6.9-0.7,7.6-4.6c1.9,2.7,3.9,5.3,5.9,7.9
+ c1-1.4,2-2.7,3.1-4.1c-0.9-1.8-1.8-3.6-2.7-5.4c4.6,2.9,9.3,5.5,14.1,8.1C171.2,162.8,172.4,159.4,173.2,155.8 M133.3,219.4
+ c2.2,0.4,4.3,0.8,6.5,1.3c-2.5,6.7-6,13.5-5.6,20.9c1.3,4.8,5.3,8.4,8.3,12.3c-4.4,1.3-10.5,0.3-13.5,4.4
+ c-1.8,8,5.5,12.6,10.2,17.5c-6.8-2.5-14.4-6.1-16.8-13.6c3.3-4.1,7.4-7.4,11.7-10.6C127.9,242.2,125.2,228.4,133.3,219.4
+ M202.6,236.3c1.6,1.4,3.3,2.8,4.9,4.1c0.2,2.7,0.4,5.5,0.5,8.2C205.2,245,202.7,241.1,202.6,236.3 M245.2,238.4
+ c1.7-2.4,4.6-2.2,6.4-0.1c3.4,4.4,5.3,9.6,7.6,14.6c2.9,0.2,5.8,0.4,8.6,0.6c-5.7,2.1-11.1,5.3-11.9,11.9
+ c-2.4-3.4,1.1-6.5,2.5-9.6C255.2,249.1,247.4,245.7,245.2,238.4 M163.6,242.7l1.7-0.9c0.3,4.5,2.4,9.7-0.9,13.5
+ c-3.3-0.3-6.5-0.5-9.7-1.1C159,251.4,162.2,247.9,163.6,242.7 M208,248.7c2.4,3.2,5.1,6,8.1,8.6c3.2-3.7,10.3-9.6,13.2-2.6
+ c-4.8,2.3-10.8,4-12.4,9.8c0,0.2-0.1,0.5-0.1,0.7c0.7,5.1,2.6,10,4.1,14.9C209.9,273,216.5,257.7,208,248.7 M267.8,250.1
+ c4.7,0.5,9.7,1.6,13.3,5.1c-4.5-0.3-9.1-0.1-13.3-1.7C267.8,252.7,267.8,251,267.8,250.1 M256,275.9c5.7,2.5,11.3,5.2,17.3,7.2
+ c3.4-1.4,8.2-8.9,11-3.4c-4.4,4-10.5,8.1-16.7,6.7C262.8,284.1,259.7,279.5,256,275.9 M97.3,276.8c1.1,0.2,3.2,0.5,4.4,0.6
+ c4.8,11.1,5,24,11.6,34.4c3.8,6.2,6.9,12.7,10.5,19c3.8,6.5,10.1,10.9,16,15.4c12.6,9.3,33.4,7.9,42.3-5.8
+ c5.7-12.2-1.4-25.1-6.3-36.3c-8.4-13.2-30.3-3.2-29.7,11.2c-2.5-14.3,15.8-26.4,28-19.1c8.7,5.6,11.1,16.2,14.5,25.3
+ c4,10.9-1.9,23.8-12.2,28.6c-8,5.1-17.8,3.1-26.7,3.1c-12.2-0.6-20.1-10.5-28-18.4c-7.7-9.4-12.7-20.6-18.7-31.2
+ C99.8,295.1,98,286,97.3,276.8 M162.1,313.4c1.4,1.6,2.5,3.4,3.9,5.1c-3.4,4.4-8.9,4.2-13.8,3.5c-2-2.2-4.1-4.4-6.1-6.6
+ c4.8,2.9,10.2,8.8,16.2,5.1C162.1,318.1,162.1,315.8,162.1,313.4L162.1,313.4z"/>
+ <path class="st4" d="M161.3,174.4c5.5-0.6,9.3-6.3,14.6-7.1c5.9,3.9,11.4,9,18.9,8.6c-1.8-2.2-3.6-4.4-5.4-6.5
+ c0.9-0.2,2.7-0.7,3.5-0.9c3.6-0.9,7.2-1.6,10.8-2.4c0.9,3.4,1.8,6.9,2.9,10.3c-1.7,1.7-3.4,3.5-5.2,5.2
+ c3.7,5.1,7.1,10.5,10.8,15.6c7.7-2.1,12.6,5.3,16,11.1c-6.9-0.4-14.7-0.5-20.1-5.5c-3.3-3-6.5-6.1-10-9c-2.1,0.6-4.2,1.2-6.3,1.8
+ c-1.7-4.1-2.7-9.5-7.9-10.5c0.4,2.1,0.9,4.1,1.3,6.2c-3.1,1.8-6.5,2.6-10,1.6c1.4-2.9,2.9-5.7,4.4-8.6c-4.3-0.4-6.8,3.3-9.2,6.2
+ c-0.5-1.5-1-3-1.4-4.5c-1.6-0.2-3.1-0.6-4.7-0.7c-2.3,0.5-3.2,3.8-5.7,3.9c-4.1-0.4-8-2.1-12.2-2.3c-5,0.7-9.7,2.9-14.6,4.3
+ c-1.6-1.3-3.3-2.6-4.9-3.9c2.2-1.6,7.1-2.8,3.8-6.1c4.5-2,8.2,0.8,11.3,3.8c-0.1-1.3-0.3-2.7-0.4-4c2.9-0.7,6-0.8,8.6-2.5
+ c1.7-2.5,2.3-5.6,3.2-8.4C156.1,171.6,158.6,173.2,161.3,174.4L161.3,174.4z"/>
+ <path class="st5" d="M201.5,181.6c1.7-1.7,3.4-3.5,5.2-5.2c1.7,5.1,3.9,10.3,8.2,13.7c7.2,5.5,14.7,11.5,23.7,13.6
+ c8,1.5,16.8,0.6,23.7-4c6-5.4,8.8-13.3,15-18.5c5.8,2.9,12.3,4.2,17.9,7.5c5.8,3.7,8.6,10.3,12.1,16c-3.8,0.7-7.5,1.5-11.3,2.3
+ c1.4,2.4,2.9,4.9,4.4,7.3c-1,1.5-2,3-2.9,4.6c-1.9-3-3.7-6-5.5-9c-4.1,1-8,2.6-11.5,4.8c0.4,1.9,0.8,3.8,1.2,5.7
+ c-8.8-4.5-18.2,0-26.1,4.4c-2.4,1.3-4.9,2.8-7.3,4.1c-5-2.7-9.9-5.5-15.2-7.6c-2.1,3.4-4.6,6.7-7.1,9.9c-0.9-2.6-1.9-5.2-2.7-7.9
+ c-0.9,0.1-2.7,0.4-3.6,0.5c-0.4,3.7-0.3,7.4,0.2,11.1c-2.4-0.3-4.9-0.6-7.3-0.9c1.1-5,2.4-9.9,3.4-15c-1.2,0.1-3.7,0.3-4.9,0.4
+ c-4.1,6.3-4.3,13.9-3.5,21.2c-1.7-1.4-3.3-2.8-4.9-4.1c0.2-5.2,0.9-10.3,1.3-15.5c-5.4-2.3-7.6,3.9-8.6,7.9c-3-1-6-1.9-8.9-3
+ c-6.7-2.1-11.1-8-17.6-10.6c-3.4-1.4-5.9-4.2-8.5-6.7c-0.3,1-0.9,3-1.1,4c2.6,4.4,2.6,10.1-2.5,12.8c-1.6-0.2-4.8-0.6-6.5-0.9
+ c5.4,5.5,13.3,6.5,20.4,8.4c-1,0.7-3,2.1-4,2.8c-6.8-2.2-14.2-2.4-20.6-5.9c-0.2-2.6-0.5-5.3-0.7-7.9c-1.9-0.4-3.7-0.7-5.6-1.1
+ c-2.2-0.4-4.3-0.8-6.5-1.3c-1.6-1.9-3.4-5.2-6.3-3.5c-2.3,2.1-4.2,4.6-6.4,6.9c-1.3-1.8-2.7-3.6-4-5.4c-9.8,1.2-9,13-15.3,18.3
+ c-4,2.9-3.8,8.4-7.5,11.6c-0.5-4.5-0.8-8.9-0.3-13.4c2-7.9,5.5-15.3,7.5-23.3c0.2-0.6,0.5-1.9,0.7-2.6c4.1,0.2,8.4,0.8,12.4-0.3
+ c3.5-1.7,2.1-6.5,3.4-9.6c0.6-5.4,5.3-8.5,9.6-10.9c1.6,1.3,3.3,2.6,4.9,3.9c4.9-1.5,9.6-3.6,14.6-4.3c4.2,0.2,8.1,1.9,12.2,2.3
+ c2.5-0.1,3.3-3.4,5.7-3.9c1.6,0.1,3.1,0.5,4.7,0.7c0.5,1.5,1,3,1.4,4.5c2.5-2.9,4.9-6.6,9.2-6.2c-1.5,2.9-2.9,5.7-4.4,8.6
+ c3.5,1,6.9,0.1,10-1.6c-0.5-2.1-0.9-4.1-1.3-6.2c5.2,0.9,6.2,6.3,7.9,10.5c2.1-0.6,4.2-1.2,6.3-1.8c3.4,2.9,6.7,6,10,9
+ c5.4,5,13.2,5.1,20.1,5.5c-3.3-5.7-8.3-13.2-16-11.1C208.7,192.1,205.2,186.7,201.5,181.6L201.5,181.6z"/>
+ <path class="st6" d="M296.1,207c3.8-0.8,7.5-1.5,11.3-2.3c1.2,2.6,2.2,5.2,3.2,7.8c-10.4,10.4-25.7,13.1-39.4,16.3
+ c-5.7,1.7-11-1.3-15.7-4c7.9-4.3,17.3-8.9,26.1-4.4c-0.4-1.9-0.8-3.8-1.2-5.7c3.6-2.2,7.5-3.8,11.5-4.8c1.8,3,3.7,6,5.5,9
+ c0.9-1.5,1.9-3.1,2.9-4.6C299,211.9,297.5,209.4,296.1,207L296.1,207z"/>
+ <path class="st7" d="M166,318.5c-1.4-1.6-2.5-3.5-3.9-5.1c0,2.4,0.1,4.7,0.2,7.1c-6,3.7-11.4-2.2-16.2-5.1c2,2.2,4.1,4.3,6.1,6.6
+ C157.1,322.7,162.6,322.9,166,318.5z"/>
+ <path class="st7" d="M116.9,261.7c-3.7-4.3-10-2.3-15-3c-5.4,0.3-14-0.9-16.1,5.7c9.8,0.3,19.6,0.4,29.4,0.9
+ C115.7,264.4,116.5,262.6,116.9,261.7z"/>
+ <path class="st7" d="M227.3,248.1c5.4,8.8,16,7.7,24.9,7.5c-3.7-3.5-8.2-6.2-11.3-10.3c-1.8-1.7-2.5-5.1-5.3-5.4
+ c-5.4,0.7-10.8,1.5-16.3,1.3H219c-1.4,0-4.3,0-5.7,0c-0.3,3.3-0.3,6.6-0.3,9.9c1.3,0.7,4,2.1,5.3,2.9
+ C220.1,250.5,223.7,249.1,227.3,248.1z"/>
+ <path class="st7" d="M82.3,258.6l-0.4-1.1c-0.2,0.4-0.5,1.2-0.6,1.6l-1.1,1.3c-0.2,0.2-0.6,0.7-0.7,0.9c-2.6,2.2-2.1,5.6-2.4,8.6
+ c0.4,0.7,1.3,2.2,1.7,3c4.5,2.7,3.6-7.2,0.5-7.4c1.9-2.3,4-4.5,4.6-7.5L82.3,258.6z"/>
+ <path class="st7" d="M97.3,276.8c0.7,9.1,2.5,18.3,5.6,26.9c6,10.5,11,21.7,18.7,31.2c8,7.9,15.9,17.8,28,18.4
+ c8.9,0,18.8,2,26.7-3.1c10.3-4.8,16.2-17.7,12.2-28.6c-3.4-9-5.9-19.7-14.5-25.3c-12.2-7.3-30.5,4.8-28,19.1
+ c-0.6-14.4,21.3-24.4,29.7-11.2c4.9,11.1,11.9,24.1,6.3,36.3c-9,13.7-29.7,15.1-42.3,5.8c-5.9-4.5-12.2-8.9-16-15.4
+ c-3.6-6.2-6.8-12.8-10.5-19c-6.5-10.5-6.8-23.3-11.6-34.4C100.5,277.3,98.4,277,97.3,276.8z"/>
+ <path class="st7" d="M88.2,269.7c0.3,0.7,1,2.1,1.4,2.8c10.7,1.1,21.4,0.3,32.1,0.3c-0.4-0.5-1.2-1.4-1.7-1.9
+ C109.4,270.5,98.8,268,88.2,269.7z"/>
+ <path class="st7" d="M251.6,238.3c-1.8-2.1-4.7-2.3-6.4,0.1c2.2,7.2,10,10.7,13.2,17.4c-1.4,3-4.9,6.2-2.5,9.6
+ c0.9-6.5,6.3-9.8,11.9-11.9c-2.9-0.2-5.8-0.4-8.6-0.6C256.9,247.9,254.9,242.7,251.6,238.3z"/>
+ <path class="st7" d="M69.8,256.7c-1.1,2.5-2.4,5.1-3.7,7.5c1.1,3.2,2.8,6.2,4.8,8.9c0.6-0.3,1.8-0.8,2.3-1c-4.3-5-0.9-11,1.9-15.8
+ C73.3,256.6,71.5,256.7,69.8,256.7z"/>
+ <path class="st7" d="M281.1,255.2c-3.5-3.4-8.4-4.5-13.2-5c0,0-0.1,0-0.1,0c0,0.9,0,2.5,0,3.3C272,255.1,276.6,254.9,281.1,255.2z
+ "/>
+ <path class="st7" d="M127.6,249.9c-4.1-6.5-5.5-14.1-3-21.5c-1.8,0.5-3.6,0.9-5.4,1.3c-4,7.1-9.4,14.4-8.2,23
+ C116.6,252.7,122.4,252.6,127.6,249.9z"/>
+ <path class="st7" d="M66.2,254.4c-3.4,0.6-6.8,0.7-10.2,0.2c-2,3.5-4.6,6.7-8.2,8.7c-3.6,2.2-2,7.3-1.4,10.7
+ c6.4,1.2,13,0.8,19.5,1.1c-1.6-3.7-3.8-7.2-4.7-11.1C60.7,259.9,66,258.3,66.2,254.4z"/>
+ <path class="st7" d="M153.1,247.3c0.4-2.3,1-4.7,1.5-7c-3.7-3.5-9.3-3.4-13.9-4.7c-1.3,6.3,0.1,12.6,3.8,17.8
+ C147.2,251.3,150,249,153.1,247.3z"/>
+ <path class="st7" d="M285.2,269.2c-9.8,1.7-19.8,0.5-29.6,1.8c-10.5-2.1-21.2-2.4-31.9-1.6c0.1,1,0.2,3,0.3,4
+ c10.5-0.7,21.2,0.4,31.6-1.8c9.1,2,18.4,1.2,27.6,0.6c4.7-0.5,9,2.4,13.6,1.9C297.7,267.7,289.2,269.5,285.2,269.2z"/>
+ <path class="st7" d="M262.6,261.1c-0.4,0.7-1.2,2.2-1.6,3c5.9,1.8,12.2,0.7,18.2,1.5c7.8,1.1,16.2,2,23.5-1.7
+ c-2.5-1.6-4.8-4-7.8-4.6C284.1,258.7,273.3,260.1,262.6,261.1z"/>
+ <path class="st7" d="M273.3,283.1c-5.9-2-11.6-4.6-17.3-7.2c3.7,3.6,6.8,8.2,11.5,10.5c6.2,1.4,12.3-2.7,16.7-6.7
+ C281.5,274.2,276.7,281.7,273.3,283.1z"/>
+ <path class="st7" d="M232.4,260.6c-2.4,0.6-7.6-0.2-7,3.9c6.8,0.4,13.7,0.4,20.5,0.2c2.8,0.1,4-1.3,3.7-4.2
+ C243.9,260.5,238.1,260.2,232.4,260.6z"/>
+ <path class="st7" d="M312.1,259c-0.3,2.4-0.5,4.8-0.7,7.2c-1,0.6-2.9,1.8-3.8,2.5c0,2.2-0.2,4.5-0.3,6.7c8.3-0.2,15.9-3.7,24-5.3
+ c1.3-2.6,0.5-5.5,0.5-8.3C325.1,261.2,318.8,258.7,312.1,259z"/>
+ <path class="st7" d="M165.3,241.9l-1.7,0.9c-1.4,5.2-4.6,8.7-8.9,11.5c3.2,0.6,6.4,0.8,9.7,1.1
+ C167.7,251.5,165.6,246.3,165.3,241.9z"/>
+ <path class="st7" d="M206.4,256.5c-1.9-4.7-3.7-9.9-7.8-13.1c-8.7,0.4-17.4,0.1-26.1,0.4c-1.1,4.1-2.5,8-3.3,12.2
+ C181.5,257.1,194,256.6,206.4,256.5z"/>
+ <path class="st7" d="M216.9,264.5c1.6-5.8,7.6-7.5,12.4-9.8c-3-7.1-10-1.1-13.2,2.6c-2.4-2.1-4.6-4.4-6.6-6.8
+ c6.2,9.1,1.2,23,11.4,29.7c-1.5-4.9-3.3-9.8-4.1-14.9L216.9,264.5z"/>
+ <path class="st7" d="M155.1,264.6c6-1.8,11.7,2.2,17.7,2.2c11.5,0.3,23,0.3,34.5-0.2c-0.1-1.3-0.3-4-0.4-5.3
+ c-15.3,0-31.1-2.3-46,2c-4.2-0.1-8.1-2-12.2-2.7c-2.8-3.8-10.1-1.1-14.7-2.2c0.7,2.1,1.3,4.3,1.9,6.4c3.7,0.1,7.5,0.2,11.2,0.2
+ C149.5,267.6,152.5,264.8,155.1,264.6z"/>
+ <path class="st7" d="M141.5,270.7c0.9,1.2,1.8,2.5,2.7,3.7c3.6,0.1,7.3,0.2,10.9,0.4c17.3,0.1,34.5,0.4,51.8-0.2
+ c0.3-0.6,0.9-1.7,1.3-2.2c-17.7-1.2-35.4-1.4-53.1-1.7C150.6,270.8,146.1,270.8,141.5,270.7z"/>
+ <path class="st8" d="M220.5,183.6l-0.2,1.2c8.6,8.6,21.4,13.9,33.4,10.4c4.6-2.5,9.2-5.6,11.4-10.5c7.5-15.5,8.8-33.8,3.7-50.2
+ c-4.6-3.3-9-7.1-11.7-12.1c-5.5-7.6-14.6-15.6-24.6-12c-10.2,1.4-17.4,10.4-20.2,19.8c-3.8,12-5.1,25.6,0.1,37.4
+ C213.4,173.5,214.5,180.8,220.5,183.6z M239.7,154.1c2.2,6.5-1.4,15.5-9.4,15.6c-3.6-2.5-8.6-4.8-7.8-10
+ C221.1,150.1,234.1,150.4,239.7,154.1z"/>
+ <path class="st8" d="M307,191.9c4.6-4.9,10.2-8.7,15.1-13.2c8.4-12.3,15.5-28.6,9.1-43.4c-2.2-9.8-13.6-13.2-22.5-12.1
+ c-11.7,2-24.6,6.2-30.8,17.3c0.2,10.8,1.9,21.6-0.3,32.3C289,175.8,301.4,180.8,307,191.9z M315.4,146.4c2.3-0.5,4.7-1.1,7-1.8
+ c2.6,4,2.5,9.7,1.1,14.1c-4.6,4.5-11.2-0.1-13.1-5C312.1,151.2,313.8,148.8,315.4,146.4z"/>
+ <path class="st0" d="M267.8,250.1C267.8,250.2,267.8,250.2,267.8,250.1C267.9,250.2,267.9,250.2,267.8,250.1
+ C267.9,250.2,267.9,250.2,267.8,250.1z"/>
+ <path class="st7" d="M307,191.9c4.6-4.9,10.2-8.7,15.1-13.2c8.4-12.3,15.5-28.6,9.1-43.4c-2.2-9.8-13.6-13.2-22.5-12.1
+ c-11.7,2-24.6,6.2-30.8,17.3c0.2,10.8,1.9,21.6-0.3,32.3C289,175.8,301.4,180.8,307,191.9z M315.4,146.4c2.3-0.5,4.7-1.1,7-1.8
+ c2.6,4,2.5,9.7,1.1,14.1c-4.6,4.5-11.2-0.1-13.1-5C312.1,151.2,313.8,148.8,315.4,146.4z"/>
+ <path class="st7" d="M115.3,265.3c0.4-0.9,1.2-2.7,1.6-3.6c-3.7-4.3-10-2.3-15-3c-4.2,0.3-10.2-0.4-13.7,2.3v3.5
+ C97.2,264.7,106.3,264.9,115.3,265.3z"/>
+ <path class="st7" d="M124.6,228.4c-1.8,0.5-3.6,0.9-5.4,1.3c-4,7.1-9.4,14.4-8.2,23c5.7,0,11.5-0.1,16.6-2.8
+ C123.5,243.4,122.1,235.8,124.6,228.4z"/>
+ <path class="st7" d="M129,258.2c3-4.1,9-3.1,13.5-4.4c-3-3.9-7.1-7.4-8.3-12.3c-0.4-7.3,3.1-14.1,5.6-20.9
+ c1.9,0.4,3.7,0.7,5.6,1.1c0.3,2.6,0.5,5.2,0.7,7.9c6.4,3.5,13.8,3.7,20.6,5.9c9.4,3.1,19.5,2,29-0.2c-0.2-2.2-0.3-4.4-0.3-6.6
+ c1-4,3.2-10.2,8.6-7.9c-0.5,5.2-1.1,10.3-1.3,15.5c0.1,4.7,2.5,8.7,5.4,12.3c-0.1-2.7-0.3-5.5-0.5-8.2c-0.8-7.2-0.6-14.9,3.5-21.2
+ c1.2-0.1,3.7-0.3,4.9-0.4c-1,5-2.3,10-3.4,15c2.4,0.3,4.9,0.6,7.3,0.9c9.8,1.1,19.7-1.4,28.4-6c2.5-1.3,4.9-2.7,7.3-4.1
+ c4.7,2.8,10,5.7,15.7,4c13.7-3.2,29-5.9,39.4-16.3c-0.8-2.1-1.7-4.2-2.6-6.3c-0.2-0.5-0.4-1-0.6-1.5c-3.4-5.7-6.2-12.3-12.1-16
+ c-5.6-3.3-12.1-4.7-17.9-7.5c-6.2,5.2-9.1,13.1-15,18.5c-6.9,4.6-15.7,5.5-23.7,4c-9.1-2.1-16.5-8.1-23.7-13.6
+ c-4.4-3.4-6.6-8.6-8.2-13.7c-1-3.4-2-6.8-2.9-10.3c-1.1-4.4-0.8-10.3-5.8-12.4c-0.2-0.1-0.4-0.2-0.6-0.3
+ c-11.3-5.2-23.7-9-36.3-8.3c-11,3.4-23.2,5.8-31.8,14.2c-13.3,11.7-20.7,28.4-26.6,44.8c-0.3,1-0.8,2.9-1.1,3.9
+ c-0.2,0.7-0.5,1.9-0.7,2.6c-2,7.9-5.5,15.4-7.5,23.3c-0.5,4.5-0.2,9,0.3,13.4c0,0.8,0.1,2.5,0.2,3.4c2.7,0,5.4,0.1,8.1,0.2
+ c5.6-9.7,9.2-21,18.5-28.1c2.2-2.2,4.1-4.7,6.4-6.9c2.9-1.6,4.8,1.7,6.3,3.5c-8.1,9-5.4,22.8,0.9,32.1c-4.2,3.1-8.4,6.4-11.7,10.6
+ c2.3,7.5,9.9,11.1,16.8,13.6C134.5,270.8,127.2,266.2,129,258.2z"/>
+ <path class="st7" d="M198.5,243.4c-8.7,0.4-17.4,0.1-26.1,0.4c-1.1,4.1-2.5,8-3.3,12.2c12.4,1.1,24.9,0.7,37.3,0.5
+ C204.5,251.8,202.7,246.6,198.5,243.4z"/>
+ <path class="st7" d="M166,318.5c-1.4-1.6-2.5-3.5-3.9-5.1c0,2.4,0.1,4.7,0.2,7.1c-6,3.7-11.4-2.2-16.2-5.1c2,2.2,4.1,4.3,6.1,6.6
+ C157.1,322.7,162.6,322.9,166,318.5z"/>
+ <path class="st7" d="M121.7,272.8c-0.4-0.5-1.2-1.4-1.7-1.9c-10.6-0.4-21.2-2.9-31.8-1.2c0.3,0.7,1,2.1,1.4,2.8
+ C100.2,273.6,111,272.8,121.7,272.8z"/>
+ <path class="st7" d="M97.3,276.8c0.7,9.1,2.5,18.3,5.6,26.9c6,10.5,11,21.7,18.7,31.2c8,7.9,15.9,17.8,28,18.4
+ c8.9,0,18.8,2,26.7-3.1c10.3-4.8,16.2-17.7,12.2-28.6c-3.4-9-5.9-19.7-14.5-25.3c-12.2-7.3-30.5,4.8-28,19.1
+ c-0.6-14.4,21.3-24.4,29.7-11.2c4.9,11.1,11.9,24.1,6.3,36.3c-9,13.7-29.7,15.1-42.3,5.8c-5.9-4.5-12.2-8.9-16-15.4
+ c-3.6-6.2-6.8-12.8-10.5-19c-6.5-10.5-6.8-23.3-11.6-34.4C100.5,277.3,98.4,277,97.3,276.8z"/>
+ <path class="st7" d="M232.4,260.6c-2.4,0.6-7.6-0.2-7,3.9c6.8,0.4,13.7,0.4,20.5,0.2c2.8,0.1,4-1.3,3.7-4.2
+ C243.9,260.5,238.1,260.2,232.4,260.6z"/>
+ <path class="st7" d="M240.9,245.3c-1.8-1.7-2.5-5.1-5.3-5.4c-5.4,0.7-10.8,1.5-16.3,1.3H219c-1.4,0-4.3,0-5.7,0
+ c-0.3,3.3-0.3,6.6-0.3,9.9c1.3,0.7,4,2.1,5.3,2.9c1.9-3.5,5.5-4.9,9.1-5.9c5.4,8.8,16,7.7,24.9,7.5
+ C248.5,252.1,244,249.3,240.9,245.3z"/>
+ <path class="st7" d="M220.5,183.6l-0.2,1.2c8.6,8.6,21.4,13.9,33.4,10.4c4.6-2.5,9.2-5.6,11.4-10.5c7.5-15.5,8.8-33.8,3.7-50.2
+ c-4.6-3.3-9-7.1-11.7-12.1c-5.5-7.6-14.6-15.6-24.6-12c-10.2,1.4-17.4,10.4-20.2,19.8c-3.8,12-5.1,25.6,0.1,37.4
+ C213.4,173.5,214.5,180.8,220.5,183.6z M239.7,154.1c2.2,6.5-1.4,15.5-9.4,15.6c-3.6-2.5-8.6-4.8-7.8-10
+ C221.1,150.1,234.1,150.4,239.7,154.1z"/>
+ <path class="st7" d="M262.6,261.1c-0.4,0.7-1.2,2.2-1.6,3c5.9,1.8,12.2,0.7,18.2,1.5c7.8,1.1,16.2,2,23.5-1.7
+ c-2.5-1.6-4.8-4-7.8-4.6C284.1,258.7,273.3,260.1,262.6,261.1z"/>
+ <path class="st7" d="M285.2,269.2c-9.8,1.7-19.8,0.5-29.6,1.8c-10.5-2.1-21.2-2.4-31.9-1.6c0.1,1,0.2,3,0.3,4
+ c10.5-0.7,21.2,0.4,31.6-1.8c9.1,2,18.4,1.2,27.6,0.6c4.7-0.5,9,2.4,13.6,1.9C297.7,267.7,289.2,269.5,285.2,269.2z"/>
+ <path class="st7" d="M273.3,283.1c-5.9-2-11.6-4.6-17.3-7.2c3.7,3.6,6.8,8.2,11.5,10.5c6.2,1.4,12.3-2.7,16.7-6.7
+ C281.5,274.2,276.7,281.7,273.3,283.1z"/>
+ <path class="st7" d="M312.1,259c-0.3,2.4-0.5,4.8-0.7,7.2c-1,0.6-2.9,1.8-3.8,2.5c0,2.2-0.2,4.5-0.3,6.7c8.3-0.2,15.9-3.7,24-5.3
+ c1.3-2.6,0.5-5.5,0.5-8.3C325.1,261.2,318.8,258.7,312.1,259z"/>
+ <path class="st7" d="M251.6,238.3c-1.8-2.1-4.7-2.3-6.4,0.1c2.2,7.2,10,10.7,13.2,17.4c-1.4,3-4.9,6.2-2.5,9.6
+ c0.9-6.5,6.3-9.8,11.9-11.9c-2.9-0.2-5.8-0.4-8.6-0.6C256.9,247.9,254.9,242.7,251.6,238.3z"/>
+ <path class="st7" d="M155.1,264.6c6-1.8,11.7,2.2,17.7,2.2c11.5,0.3,23,0.3,34.5-0.2c-0.1-1.3-0.3-4-0.4-5.3
+ c-15.3,0-31.1-2.3-46,2c-4.2-0.1-8.1-2-12.2-2.7c-2.8-3.8-10.1-1.1-14.7-2.2c0.7,2.1,1.3,4.3,1.9,6.4c3.7,0.1,7.5,0.2,11.2,0.2
+ C149.5,267.6,152.5,264.8,155.1,264.6z"/>
+ <path class="st7" d="M141.5,270.7c0.9,1.2,1.8,2.5,2.7,3.7c3.6,0.1,7.3,0.2,10.9,0.4c17.3,0.1,34.5,0.4,51.8-0.2
+ c0.3-0.6,0.9-1.7,1.3-2.2c-17.7-1.2-35.4-1.4-53.1-1.7C150.6,270.8,146.1,270.8,141.5,270.7z"/>
+ <path class="st7" d="M144.4,253.5c2.8-2.2,5.6-4.4,8.6-6.1c0.4-2.3,1-4.7,1.5-7c-3.7-3.5-9.3-3.4-13.9-4.7
+ C139.4,241.9,140.8,248.2,144.4,253.5z"/>
+ <path class="st7" d="M154.7,254.2c3.2,0.6,6.4,0.8,9.7,1.1c3.3-3.8,1.2-9,0.9-13.5l-1.7,0.9C162.2,247.9,159,251.4,154.7,254.2z"
+ />
+ <path class="st7" d="M216.9,264.5c1.6-5.8,7.6-7.5,12.4-9.8c-3-7.1-10-1.1-13.2,2.6c-2.4-2.1-4.6-4.4-6.6-6.8
+ c6.2,9.1,1.2,23,11.4,29.7c-1.5-4.9-3.3-9.8-4.1-14.9L216.9,264.5z"/>
+ <path class="st9" d="M69.8,256.7c-1.1,2.5-2.4,5.1-3.7,7.5c1.1,3.2,2.8,6.2,4.8,8.9c0.6-0.3,1.8-0.8,2.3-1c-4.3-5-0.9-11,1.9-15.8
+ C73.3,256.6,71.5,256.7,69.8,256.7z"/>
+ <path class="st9" d="M82.3,258.6l-0.4-1.1c-0.2,0.4-0.5,1.2-0.6,1.6l-1.1,1.3c-0.2,0.2-0.6,0.7-0.7,0.9c-2.6,2.2-2.1,5.6-2.4,8.6
+ c0.4,0.7,1.3,2.2,1.7,3c4.5,2.7,3.6-7.2,0.5-7.4c1.9-2.3,4-4.5,4.6-7.5L82.3,258.6z"/>
+ <path class="st0" d="M230.3,169.7c8,0,11.5-9.1,9.4-15.6c-5.6-3.7-18.5-4-17.2,5.5C221.7,164.8,226.7,167.2,230.3,169.7z"/>
+ <path class="st0" d="M323.5,158.6c1.4-4.4,1.5-10.1-1.1-14.1c-2.3,0.7-4.6,1.3-7,1.8c-1.7,2.4-3.3,4.8-5,7.2
+ C312.3,158.5,318.8,163.1,323.5,158.6z"/>
+ <path class="st0" d="M319.1,255.3c-10.3-1.8-20.7-0.1-31-0.3c-4.6-3.1-9.1-6.7-14.8-7.1c-1.8,0.8-3.6,1.5-5.4,2.2
+ c4.7,0.5,9.6,1.6,13.2,5c-4.5-0.3-9.1-0.1-13.3-1.7c-5.7,2.1-11.1,5.3-11.9,11.9c-2.4-3.4,1.1-6.5,2.5-9.6
+ c-3.2-6.7-10.9-10.2-13.2-17.4c1.7-2.4,4.6-2.2,6.4-0.1c3.4,4.4,5.3,9.6,7.6,14.6c2.9,0.2,5.8,0.4,8.6,0.6c0-0.8,0-2.5,0-3.3
+ c-1.4,0.6-2.9,1.2-4.3,1.9c-2.5-5.5-4.6-11.1-6.4-16.8c3.4,0.8,6.7,2,10.1,2.7c15.6-2.4,32.3-5.5,44.5-16.3
+ c2.6-2.6,7.2-4.9,6.4-9.2c-0.3-2.2-1-4.3-2-6.2c-1.7-3.6-4.1-6.9-5.6-10.7c3.5-1.3,7.1-2.6,10.5-4.2
+ c12.2-11.9,18.3-28.9,19.6-45.7c-1.2-8.9-3.7-18.7-10.6-25c-12.6-6.3-27.4-4.3-40.2,0.3c-5.8,2.3-10,7-14.9,10.8
+ c-3.9-0.9-6.3-5.4-8.9-8.4c-5-8.5-11.8-16.3-21.1-20c-7.8-0.3-16.7-2.4-23.4,2.6c-3.4,2.2-7.2,4.2-9.6,7.7
+ c-5.4,10.1-8.5,21.3-9.4,32.6c-1.7-0.7-3.4-1.3-5.1-2c-11.9-4.4-24.3-7.4-37-7c-8.8,1.7-17.4,4.3-25.6,8
+ c-16.7,8.7-27.3,25.7-33.5,43c-3.8,7.6-6.5,15.6-8,23.9c-1.4,7.5-4.3,14.8-4.7,22.5c0,5.2,0.4,10.4,0.3,15.6
+ c-0.2,0.1-0.5,0.3-0.7,0.4c-5.4,3-11.8,2.9-17.8,3.9c-4.5-0.1-8.8-2.3-13.3-1c0,0-0.1,0-0.1,0c-4.8,2.3-9.9,3.6-14.7,5.8
+ c-1.1,6.8-2.2,16.2,6,18.8c2.9,0,5.9,0,8.8,0c10.4,0,20.7,0.1,31.1,0.2c0.8,0,1.6,0,2.4,0c2.5,13,5,26.4,11.9,37.9
+ c8.1,13.1,16.1,26.8,28.4,36.4c11.8,7.9,26.7,8.2,40.2,5.8c5.1-0.6,8.7-4.6,13.3-6.5c2.8-1.7,7-2.1,8-5.7
+ c9.2-15,2.2-33.5-6.2-47.2c-5.3-9.4-16.9-11.3-26.7-10.9c-5.8,0.9-9.4,5.8-14.1,8.8c-5.1,3.1-10.1,9.7-6.2,15.7
+ c3.3,6.3,7.4,14.7,15.8,14.2c5.3-0.6,12.3-1.8,14.6-7.3c1-6.7-6.9-9.9-12.2-11.1c0.3,3.3,0.6,6.5,0.9,9.8
+ c-2.7-1.9-5.5-3.7-8.3-5.6c1.7-8.8,11.5-8.6,18.3-11.3c6.9,10.7,14.1,24.5,8.5,37.3c-6.5,8.1-18.2,7.1-27.2,5
+ c-11.8-1.8-19.7-12.4-24.9-22.3c-7.9-13.7-17.5-28.4-15.8-44.9c5.5-0.1,11.1-0.5,16.5,0.1c5.3,1.2,10,5.8,15.7,3.6
+ c12.2-3.3,24.9-1.3,37.4-1.5c9.8-0.5,19.7-1,29.5-0.4c3.5,1,5.5,5.3,9.6,5c4.7,1.6,7.4-3.3,10.9-5.3c7.9-0.3,15.9-0.5,23.7,0
+ c3.7,6.5,9.3,13.5,17.3,14.5c9.7,0.4,18-6.5,23.2-14.1c6.9,1.6,14.3,3.7,21,0.3c14.5-6.1,30.5-6.1,45.4-10.4c0-1.1,0-3.2,0-4.3
+ C347.4,256.5,332.6,258.7,319.1,255.3z M252.2,255.6c-8.9,0.2-19.5,1.3-24.9-7.5c-3.6,1-7.2,2.4-9.1,5.9c-1.3-0.7-4-2.2-5.3-2.9
+ c0-3.3,0-6.6,0.3-9.9c1.4,0,4.3,0,5.7,0h0.3c5.5,0.3,10.9-0.6,16.3-1.3c2.8,0.3,3.5,3.7,5.3,5.4
+ C244,249.3,248.5,252.1,252.2,255.6z M245.9,264.7c-6.9,0.2-13.7,0.2-20.5-0.2c-0.7-4.1,4.5-3.3,7-3.9c5.8-0.4,11.5-0.1,17.3-0.1
+ C249.9,263.4,248.7,264.8,245.9,264.7z M277.9,140.6c6.2-11.1,19.1-15.3,30.8-17.3c8.9-1.1,20.2,2.3,22.5,12.1
+ c6.4,14.7-0.7,31-9.1,43.4c-4.9,4.6-10.5,8.3-15.1,13.2c-5.6-11.2-18-16.2-29.4-19C279.7,162.2,278.1,151.3,277.9,140.6z
+ M212.3,130.2c2.8-9.4,10-18.4,20.2-19.8c10-3.6,19.2,4.4,24.6,12c2.8,5.1,7.1,8.8,11.7,12.1c5.1,16.4,3.8,34.7-3.7,50.2
+ c-2.2,5-6.9,8-11.4,10.5c-12.1,3.5-24.8-1.8-33.4-10.4l0.2-1.2c-6.1-2.8-7.1-10.2-8.2-16C207.2,155.8,208.5,142.2,212.3,130.2z
+ M57.1,274.9c-3.6-0.1-7.1-0.3-10.7-0.9c-0.6-3.4-2.1-8.4,1.4-10.7c3.6-2,6.1-5.2,8.2-8.7c0.4,0.1,0.7,0.1,1.1,0.1
+ c3,0.4,6.1,0.3,9.1-0.3c-0.3,3.9-5.6,5.6-4.9,9.6c0.9,3.9,3.1,7.4,4.7,11.1C63,275,60.1,274.9,57.1,274.9z M73.2,272.2
+ c-0.6,0.3-1.8,0.8-2.3,1c-2-2.8-3.6-5.7-4.8-8.9c1.4-2.4,2.6-5,3.7-7.5c1.7-0.1,3.5-0.2,5.2-0.4C72.3,261.2,68.9,267.1,73.2,272.2
+ z M78.6,272.8c-0.4-0.7-1.3-2.2-1.7-3c0.3-3-0.2-6.4,2.4-8.6c0.2-0.2,0.5-0.6,0.7-0.9l1.1-1.3c0.2-0.4,0.5-1.2,0.6-1.6l0.4,1.1
+ l1.4-0.6c-0.5,3-2.7,5.2-4.6,7.5C82.3,265.6,83.1,275.5,78.6,272.8z M85.9,264.4c0.5-1.5,1.3-2.6,2.3-3.4c3.5-2.7,9.5-2,13.7-2.3
+ c5,0.7,11.2-1.3,15,3c-0.4,0.9-1.2,2.7-1.6,3.6c-9-0.4-18.1-0.6-27.1-0.8C87.4,264.5,86.7,264.5,85.9,264.4z M127.6,249.9
+ c-5.2,2.7-11,2.8-16.6,2.8c-1.2-8.6,4.2-15.9,8.2-23c1.8-0.4,3.6-0.8,5.4-1.3C122.1,235.8,123.5,243.4,127.6,249.9z M113.2,311.9
+ c3.8,6.2,6.9,12.7,10.5,19c3.8,6.5,10.1,10.9,16,15.4c12.6,9.3,33.4,7.9,42.3-5.8c5.7-12.2-1.4-25.1-6.3-36.3
+ c-8.4-13.2-30.3-3.2-29.7,11.2c4.8,2.9,10.2,8.8,16.2,5.1c-0.1-2.3-0.2-4.7-0.2-7.1c1.4,1.6,2.5,3.4,3.9,5.1
+ c-3.4,4.4-8.9,4.2-13.8,3.5c-2-2.2-4.1-4.4-6.1-6.6c-2.5-14.3,15.8-26.4,28-19.1c8.7,5.6,11.1,16.2,14.5,25.3
+ c4,10.9-1.9,23.8-12.2,28.6c-8,5.1-17.8,3.1-26.7,3.1c-12.2-0.6-20.1-10.5-28-18.4c-7.7-9.4-12.7-20.6-18.7-31.2
+ c-3.1-8.6-4.9-17.8-5.6-26.9c1.1,0.2,3.2,0.5,4.4,0.6C106.4,288.6,106.7,301.4,113.2,311.9z M89.6,272.5c-0.4-0.7-1-2.1-1.4-2.8
+ c10.6-1.7,21.2,0.8,31.8,1.2c0.4,0.5,1.2,1.4,1.7,1.9C111,272.8,100.2,273.6,89.6,272.5z M122.5,262.1c3.3-4.1,7.4-7.4,11.7-10.6
+ c-6.2-9.3-9-23.1-0.9-32.1c-1.6-1.9-3.4-5.2-6.3-3.5c-2.3,2.1-4.2,4.6-6.4,6.9c-9.3,7.1-12.9,18.4-18.5,28.1
+ c-2.7-0.1-5.4-0.2-8.1-0.2c0-0.8-0.1-2.5-0.2-3.4c-0.5-4.5-0.8-8.9-0.3-13.4c2-7.9,5.5-15.3,7.5-23.3c0.2-0.6,0.5-1.9,0.7-2.6
+ c0.3-1,0.8-2.9,1.1-3.9c6-16.3,13.4-33,26.6-44.8c8.5-8.4,20.7-10.7,31.8-14.2c12.5-0.7,25,3.1,36.3,8.3c0.2,0.1,0.4,0.2,0.6,0.3
+ c5,2,4.7,7.9,5.8,12.4c0.9,3.4,1.8,6.9,2.9,10.3c1.7,5.1,3.9,10.3,8.2,13.7c7.2,5.5,14.7,11.5,23.7,13.6c8,1.5,16.8,0.6,23.7-4
+ c6-5.4,8.8-13.3,15-18.5c5.8,2.9,12.3,4.2,17.9,7.5c5.8,3.7,8.6,10.3,12.1,16c0.2,0.5,0.4,1,0.6,1.5c0.9,2.1,1.7,4.2,2.6,6.3
+ c-10.4,10.4-25.7,13.1-39.4,16.3c-5.7,1.7-11-1.3-15.7-4c-2.4,1.3-4.9,2.8-7.3,4.1c-8.6,4.6-18.6,7.1-28.4,6
+ c-2.4-0.3-4.9-0.6-7.3-0.9c1.1-5,2.4-9.9,3.4-15c-1.2,0.1-3.7,0.3-4.9,0.4c-4.1,6.3-4.3,13.9-3.5,21.2c0.2,2.7,0.4,5.5,0.5,8.2
+ c-2.9-3.6-5.3-7.6-5.4-12.3c0.2-5.2,0.9-10.3,1.3-15.5c-5.4-2.3-7.6,3.9-8.6,7.9c0,2.2,0.2,4.4,0.3,6.6c-9.5,2.2-19.6,3.3-29,0.2
+ c-6.8-2.2-14.2-2.4-20.6-5.9c-0.2-2.6-0.5-5.3-0.7-7.9c-1.9-0.4-3.7-0.7-5.6-1.1c-2.5,6.7-6,13.5-5.6,20.9
+ c1.3,4.8,5.3,8.4,8.3,12.3c-4.4,1.3-10.5,0.3-13.5,4.4c-1.8,8,5.5,12.6,10.2,17.5C132.4,273.2,124.8,269.6,122.5,262.1z
+ M206.4,256.5c-12.4,0.2-24.9,0.6-37.3-0.5c0.8-4.1,2.2-8.1,3.3-12.2c8.7-0.3,17.4,0,26.1-0.4
+ C202.7,246.6,204.5,251.8,206.4,256.5z M164.4,255.3c-3.3-0.3-6.5-0.5-9.7-1.1c4.3-2.9,7.5-6.4,8.9-11.5l1.7-0.9
+ C165.6,246.3,167.7,251.5,164.4,255.3z M154.6,240.3c-0.6,2.3-1.1,4.6-1.5,7c-3.1,1.7-5.9,4-8.6,6.1c-3.6-5.3-5-11.5-3.8-17.8
+ C145.3,237,150.9,236.8,154.6,240.3z M136,264.9c-0.6-2.1-1.2-4.3-1.9-6.4c4.6,1.1,11.9-1.6,14.7,2.2c4.1,0.7,8,2.6,12.2,2.7
+ c14.9-4.4,30.7-2,46-2c0.1,1.3,0.3,4,0.4,5.3c-11.5,0.4-23,0.5-34.5,0.2c-6,0-11.7-4-17.7-2.2c-2.6,0.2-5.6,3-7.9,0.6
+ C143.4,265.1,139.7,265,136,264.9z M206.9,274.6c-17.3,0.6-34.5,0.3-51.8,0.2c-3.6-0.1-7.3-0.3-10.9-0.4c-0.9-1.2-1.8-2.5-2.7-3.7
+ c4.5,0,9,0.1,13.6,0c17.7,0.2,35.4,0.5,53.1,1.7C207.8,273,207.2,274.1,206.9,274.6z M209.5,250.4c2,2.5,4.2,4.7,6.6,6.8
+ c3.2-3.7,10.3-9.6,13.2-2.6c-4.8,2.3-10.8,4-12.4,9.8l-0.1,0.7c0.7,5.1,2.6,10,4.1,14.9C210.6,273.4,215.7,259.6,209.5,250.4z
+ M267.6,286.4c-4.8-2.3-7.8-6.9-11.5-10.5c5.7,2.5,11.3,5.2,17.3,7.2c3.4-1.4,8.2-8.9,11-3.4C279.9,283.7,273.8,287.8,267.6,286.4
+ z M296.8,274.1c-4.6,0.6-8.9-2.3-13.6-1.9c-9.2,0.6-18.5,1.4-27.6-0.6c-10.4,2.2-21.1,1.2-31.6,1.8c-0.1-1-0.2-3-0.3-4
+ c10.7-0.9,21.4-0.5,31.9,1.6c9.8-1.3,19.8-0.1,29.6-1.8C289.2,269.5,297.7,267.7,296.8,274.1z M279.2,265.6
+ c-6-0.8-12.3,0.3-18.2-1.5c0.4-0.7,1.2-2.2,1.6-3c10.7-0.9,21.4-2.4,32.3-1.8c3,0.6,5.3,3,7.8,4.6
+ C295.4,267.5,287,266.6,279.2,265.6z M331.3,270.1c-8.1,1.5-15.7,5.1-24,5.3c0.2-2.2,0.3-4.5,0.3-6.7c0.9-0.6,2.8-1.9,3.8-2.5
+ c0.2-2.4,0.5-4.8,0.7-7.2c6.7-0.3,13,2.2,19.6,2.9C331.8,264.5,332.6,267.5,331.3,270.1z"/>
+ <path class="st10" d="M160.4,208.5c2.6,2.5,5.1,5.3,8.5,6.7c6.4,2.5,10.9,8.5,17.6,10.6c-0.6,1-1.2,2.1-1.8,3.1
+ c-9.1-2.9-18.8-0.7-27.9-3.6c5.1-2.7,5.1-8.4,2.5-12.8C159.5,211.5,160.1,209.5,160.4,208.5L160.4,208.5z"/>
+ <path class="st11" d="M101.2,235.7c6.3-5.3,5.5-17.1,15.3-18.3c1.4,1.8,2.7,3.6,4,5.4c-9.3,7.1-12.9,18.4-18.5,28.1
+ c-2.7-0.1-5.4-0.2-8.1-0.2c0-0.8-0.1-2.5-0.2-3.4C97.4,244.1,97.2,238.6,101.2,235.7L101.2,235.7z"/>
+ <path class="st12" d="M233,221.3c5.3,2.1,10.2,4.9,15.2,7.6c-8.6,4.6-18.6,7.1-28.4,6c-0.5-3.7-0.6-7.4-0.2-11.1
+ c0.9-0.1,2.7-0.3,3.6-0.5c0.9,2.6,1.8,5.2,2.7,7.9C228.4,228,230.8,224.7,233,221.3L233,221.3z"/>
+ <path class="st13" d="M150.3,224.4c1.6,0.2,4.8,0.6,6.5,0.9c9.1,2.9,18.8,0.7,27.9,3.6c0.6-1,1.2-2.1,1.8-3.1c3,1.1,5.9,2,8.9,3
+ c0,2.2,0.2,4.4,0.3,6.6c-9.5,2.2-19.6,3.3-29,0.2c1-0.7,3-2.1,4-2.8C163.6,230.9,155.7,229.9,150.3,224.4L150.3,224.4z"/>
+ <path class="st14" d="M56.1,254.6c3.4,0.5,6.8,0.5,10.2-0.2c-0.3,3.9-5.6,5.6-4.9,9.6c0.9,3.9,3.1,7.4,4.7,11.1
+ c-6.5-0.3-13.1,0.1-19.5-1.1c-0.6-3.4-2.1-8.4,1.4-10.7C51.5,261.2,54,258.1,56.1,254.6L56.1,254.6z"/>
+ <path class="st15" d="M312.1,259c6.7-0.3,13,2.2,19.6,2.9c0,2.7,0.8,5.7-0.5,8.3c-8.1,1.5-15.7,5.1-24,5.3
+ c0.2-2.2,0.3-4.5,0.3-6.7c0.9-0.6,2.8-1.9,3.8-2.5C311.6,263.8,311.9,261.4,312.1,259L312.1,259z"/>
+ <path class="st16" d="M134.1,258.5c4.6,1.1,11.9-1.6,14.7,2.2c-0.8-0.1-2.4-0.3-3.2-0.4c0.5,1.6,1,3.3,1.6,4.9
+ c-3.7,0-7.5-0.2-11.2-0.2C135.4,262.8,134.7,260.6,134.1,258.5 M88.2,269.7c10.6-1.7,21.2,0.8,31.8,1.2c0.4,0.5,1.2,1.4,1.7,1.9
+ c-10.7,0-21.5,0.8-32.1-0.3C89.2,271.8,88.5,270.4,88.2,269.7L88.2,269.7z"/>
+ <path class="st17" d="M85.9,264.4c2-6.6,10.6-5.4,16.1-5.7c5,0.7,11.2-1.3,15,3c-0.4,0.9-1.2,2.7-1.6,3.6
+ C105.5,264.8,95.7,264.7,85.9,264.4 M155.1,270.8c17.7,0.2,35.4,0.5,53.1,1.7c-0.3,0.6-1,1.7-1.3,2.2c-17.3,0.6-34.5,0.3-51.8,0.2
+ C155.1,273.8,155.1,271.8,155.1,270.8L155.1,270.8z"/>
+ <path class="st18" d="M145.6,260.3c0.8,0.1,2.4,0.3,3.2,0.4c4.1,0.7,8,2.6,12.2,2.7c14.9-4.4,30.7-2,46-2c0.1,1.3,0.3,4,0.4,5.3
+ c-11.5,0.4-23,0.5-34.5,0.2c-6,0-11.7-4-17.7-2.2c-2.6,0.2-5.6,3-7.9,0.6C146.6,263.5,146.1,261.9,145.6,260.3 M141.5,270.7
+ c4.5,0,9,0.1,13.6,0c0,1,0,3.1,0,4.1c-3.6-0.1-7.3-0.3-10.9-0.4C143.3,273.2,142.4,272,141.5,270.7L141.5,270.7z"/>
+ <path class="st19" d="M225.4,264.5c-0.7-4.1,4.5-3.3,7-3.9c5.8-0.4,11.5-0.1,17.3-0.1c0.3,2.9-0.9,4.3-3.7,4.2
+ C239.1,264.9,232.2,264.9,225.4,264.5 M262.6,261.1c10.7-0.9,21.4-2.4,32.3-1.8c3,0.6,5.3,3,7.8,4.6c-7.3,3.6-15.6,2.8-23.5,1.7
+ c-6-0.8-12.3,0.3-18.2-1.5C261.4,263.3,262.2,261.8,262.6,261.1 M223.7,269.5c10.7-0.9,21.4-0.5,31.9,1.6
+ c9.8-1.3,19.8-0.1,29.6-1.8c4.1,0.3,12.6-1.5,11.6,4.9c-4.6,0.6-8.9-2.3-13.6-1.9c-9.2,0.6-18.5,1.4-27.6-0.6
+ c-10.4,2.2-21.1,1.2-31.6,1.8C223.9,272.5,223.8,270.5,223.7,269.5L223.7,269.5z"/>
+ <path class="st20" d="M216.8,265.2c0-0.2,0.1-0.5,0.1-0.7L216.8,265.2L216.8,265.2z"/>
+ </g>
+</g>
+</svg>
diff --git a/openbgpd.gif b/openbgpd.gif
new file mode 100644
index 0000000..5a7c67d
--- /dev/null
+++ b/openbgpd.gif
Binary files differ
diff --git a/openbsd.png b/openbsd.png
new file mode 100644
index 0000000..ea4cc2b
--- /dev/null
+++ b/openbsd.png
Binary files differ
diff --git a/ottawa-sens.jpg b/ottawa-sens.jpg
new file mode 100644
index 0000000..105b319
--- /dev/null
+++ b/ottawa-sens.jpg
Binary files differ
diff --git a/partials/footer.html b/partials/footer.html
new file mode 100644
index 0000000..7e80061
--- /dev/null
+++ b/partials/footer.html
@@ -0,0 +1,11 @@
+<footer class="site-footer">
+ <div class="footer-inner">
+ <div>© <span id="copyright-year">2026</span> SillyLaird — Licensed under <a href="/wtfpl.txt">WTFPL</a></div>
+ <div>Last updated: <time id="last-updated"></time></div>
+ <div>Privacy: Some pages load third-party content (Last.fm, guestbook, blog, embeds).</div>
+
+ <a class="badge" href="https://www.eff.org/issues/free-speech" target="_blank" rel="noopener">
+ <img src="/rib_bar_wh.png" alt="EFF free speech badge" loading="lazy" decoding="async" class="s9572e08b37">
+ </a>
+ </div>
+</footer>
diff --git a/partials/header.html b/partials/header.html
new file mode 100644
index 0000000..9bb3d47
--- /dev/null
+++ b/partials/header.html
@@ -0,0 +1,57 @@
+<header class="site-header">
+ <div class="header-inner">
+ <div class="brand">
+ <a href="/" class="logo" aria-label="SillyLaird home">
+ <img src="/lain.png" alt="SillyLaird logo" width="48" height="48" decoding="async" />
+ </a>
+ <div class="brand-text">
+ <strong>SillyLaird</strong>
+ <span>personal hub: links, logs, and vibes</span>
+ </div>
+ </div>
+
+ <div class="header-controls">
+ <a href="http://xyb4zkpbnssz2kgiklg5vfbepbnblykgfvemwadvufwzfcrjny46q6qd.onion/" class="header-button">Tor</a>
+
+ <div class="lang">
+ <div class="lang-toggle-wrapper">
+ <button class="header-button" id="lang-toggle" type="button" aria-haspopup="menu" aria-expanded="false">
+ Language: <span id="current-lang">EN</span>
+ </button>
+ </div>
+
+ <div class="lang-menu" id="lang-options" role="menu" hidden>
+ <a role="menuitem" href="#" data-lang="en" data-lang-href>English</a>
+ <a role="menuitem" href="#" data-lang="zh" data-lang-href>中文</a>
+ <a role="menuitem" href="#" data-lang="ja" data-lang-href>日本語</a>
+ </div>
+ </div>
+
+ <div class="menu-wrapper">
+ <button id="menu-toggle" type="button" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">☰</button>
+
+ <nav id="site-nav" class="site-nav" aria-label="Main navigation" hidden>
+ <ul class="nav-section">
+ <li class="nav-label">Pages</li>
+ <li><a href="/">Home</a></li>
+ <li><a href="/startpage/">StartPage</a></li>
+ <li><a href="/journal/">Journal</a></li>
+ <li><a href="/gaming/">Gaming</a></li>
+ <li><a href="/bookmarks/">Bookmarks</a></li>
+ <li><a href="/accounts/">Accounts</a></li>
+ <li><a href="/computers/">Computers</a></li>
+ <li><a href="/map/">Site Map</a></li>
+ </ul>
+ <ul class="nav-section">
+ <li class="nav-label">Subdomains</li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener">Blog</a></li>
+ <li><a href="https://guestbook.sillylaird.ca" target="_blank" rel="noopener">Guestbook</a></li>
+ <li><a href="/changelog/">Changelog</a></li>
+ <li><a href="https://diary.sillylaird.ca/bbs.php" target="_blank" rel="noopener">Diary</a></li>
+ <li><a href="http://9p.sillylaird.ca" target="_blank" rel="noopener">9p/9f</a></li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </div>
+</header>
diff --git a/pgpkey.txt b/pgpkey.txt
new file mode 100644
index 0000000..73791cb
--- /dev/null
+++ b/pgpkey.txt
@@ -0,0 +1,103 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: https://keybase.io/sillylaird
+Version: Keybase Go 6.0.1 (windows)
+
+xsFNBGQH4IQBEAD928ibEOpSgmTM6Yq6/abrOLXH7SynZoedFrcfW9MvMixAjx9G
+5ZtzcxZ2QJ0XqDPoLu/vgtq5lWpPPhFthMLbPPOqTZ00Lqcuhtw4VNswvnDqPTmZ
+KN36m3rdA6FiQBRfoIMgtOp8mmmDdaCz4Pxnbx48upg+2hJZRVoML9dGWCRR7kL+
+LZRPvPj7U/OXDGrVDV/d0LbQgnRJ5zMUV64IDiaVouMS9xTUSJQ7I10xMpRWSLks
+DGm8pr2OPkNncUpaQNPALiXUoJ7wfSvakP9SX23V/W9YdiqsljF7lcWQZDvQUHqI
+bxN8/qwiABCt59qS7E3YUqANBnx6627/PDV5y0HBIHhB0mUsycU7Y1RV3JO1AIQ5
+oDmNOCMkH8eVLkivvrPgVSW4HB7bDwhnYr9nMxHDe6SLd7Wq+T7BRBCK1PFjwEue
+T8pgXJS8ozT30/1DK2FF+54Cv4uIhGKTMizKkttutIqgV+fHxJ95ppVyAmwHiD18
+fI0iOtAvi78wYvJCBlGmbDKvJkcsrxv26CRAJZo7T3zT4KF1w9wABEUC+Nn01kxu
+BeT1SZPlWdiIvTEUUVDmjpe9Iru9lOJmpZ2kVTvuezNP+GLCNdNrHv9yT4JsMTJ8
+1enEfISavF5bEsTfeBXSBpBzamlTHzFLn3tN1dmpJnmlZ2Pbpbr4+HItTwARAQAB
+zSNMYWlyZCBMb25lcmdhbiA8c2lsbHlsYWlyZEB2ZXJuLmNjPsLBdQQTAQgAKQUC
+ZAfghAkQb4ruJDOKkGACGwMFCR4TOAAECwcJAwUVCAoCAwQWAAECAAAiFhAA6BZM
+f/6Vm6oEhLq1aB2EjKTafkolEDA0I/duA9gX7rD8LijyFh9T051cuvxCQMES7hLw
+Ikg3P1bUUSkorUbExDYQKVr7Xu+aAnmd3h0hswL6ht+fBd1+WhhMfQfC0vFjK2ji
+6xPyW303KCO/soAwkOP4f2eaHxchWsDlVNOFxJ4xI4FS1TaDv3CnTr2xiM4sdoXV
+2cX0J8Rz412VWE1X+Ytk7yp/DtmnHgG1B6bwacD7R7czrP49KhoYU012FGaMMGUU
+2KK3PxalJYYMFHicOjyDerO5t5rGkW/Xv/5TqMyxK8M3XDF48b58DQaek0BTE+E4
+j4aI+q6aIj0Cgr+d6vpxy2ahAVA935lirlYQoiLka82ByNZLRybGL04Odp3+t5AQ
+7Y/T6dAhLps125aob6MsbZK+fpY/XdSQcmpu35AJYR0H41s/R4g3Jilzg/nNDl3A
+Je4QH1aZRHiagvrrRCL+vQ0iiq8xRJRSzlwTZTIQmzxGGOcdBRJVj9txp3ryX8xX
+Daf54FDj/sXNjApSFNIHKfKKJEkYZjdPStLe0iG6W0zNvr6ZFKelo2LY3senRG0x
+thJtXoE9L/j/XvQ/GSBKIKMIN/Rm+0dVi/k9O3Bycx/RUWOcvJoNklyYxxua1tM6
+mVAbjehOnTJWeWRif2D3Vvufa0TWioL8znOPCXHNJ0xhaXJkIExvbmVyZ2FuIDxz
+aWxseWxhaXJkQGpvc2h3aG8ubmV0PsLBdQQTAQgAKQUCZAfghAkQb4ruJDOKkGAC
+GwMFCR4TOAAECwcJAwUVCAoCAwQWAAECAAB5fhAAF9Zjkxu1h6VRdFLasvbM3z1Z
+Xr3ACz9Q6VvtMmDlzJT9G3V2kqKgWRZzewKQcmuSfyuYW4Kxdafdr/VtGOYg+aU3
+aRACewox6H8j0x56W12lUsZwud15Two0psFl3tRi7FnkaPq5PfpgEFng16UzmUeV
+buSGTmvwvn/lC1RrNxyZiWRFkuH6Jlw/zD5M4CK5nzQQg+WY7mZbi6IzAL5kGa6G
+M2vbypcn+EhH8Q2LAi4SMZ6RYUMzlp0yE7o8jVhFj8Rkk2lFma4+7VSjCaEu9wWB
+gW0OrO6QN/MdfmbCRYPwHwt+QqQkx0RsQyMbo3/rObj4DKsKEP+XdjcXyug74vZJ
+W5TqyS6EZbuL1uW1kSCiVQ+zkauLgU9M8V9mWEbJEe6V6CDv11RsNTgRgFx3TpSp
+7lmC396yr4G1mbyM/BGEuUGkycVWpJQSAgbJDtaaApD4G+gcVMxZ9bARVOUm3sJH
+d32nAWp8N98m5ldEZSgmSODae9GlVKjEv2oH+MdtZVvr7l09pwawrZJZebeY+S6H
+TWU40U98/Z0jgG5Mzd7VtqU/170t8baD8Z1jicLzjcaoHZQEE6A+oiFBZCVKix6G
+mLpLg0/X3xmLRgeWWPYRtCwJJUgsL3dhjWzRLK1Dv9kg3/32LzF1INWX3UxCQgUB
+KhumHj4kBFSHHOd0PIbNJExhaXJkIExvbmVyZ2FuIDxzaWxseWxhaXJkQGRubXgu
+b3JnPsLBdQQTAQgAKQUCZAfghAkQb4ruJDOKkGACGwMFCR4TOAAECwcJAwUVCAoC
+AwQWAAECAAAJJBAA9tZsnS6TwZpwX2jMN4XZpOFUwRwLIvSaeu9UY8iCCl4bZSEI
+2I69ZZbMouW8jAwIQk2M0a1qF7zHnrg2HVqYrhTjHzTKp21UTmYvthztMFgGp1r1
+HRU+u4wlVT83Nt3loRVUvIIBU1G9YkjqAjWfyL8/C2QifKOzEGyOfGQRm2iKvHEN
+GISGKO/DjM1tSHRQ3xdXjKySl9f5o9lUnk9X/m802wxYQPOHMH4vQsrVBS7ppZEq
+YTkGLVcNSaK13hQ15/H5ibNkd5r8Pba/eE+eulwqh9onqT7SBvt8D+6q4v5XW3oh
+EiImEN5kG10ynlr7afjKDjnkOVYxyCol7SDFdZOU8pTdHNdfrWvuDpXi0wItP6zL
+xD7o0nKOrVNmL9ZvhDr+UBByr5EBZjjTjoBFWBLlH4LBICxDiYmHpAIrgHNyqkEI
+bHmiDfRkaos4jw83/50NWNTACp1F7IRpoYgdfgVX63tJCISsMrfUGItwU1nIGb1k
+BvovUu2GdinSjJFzIVfJoBnVh/i0s4Ep0/LQh08lH3G3cCY1EMpBtMZ3VSjvkBZx
+TOfvTZfqqdqzCGPcpffpXFoTWKvQ83jyIswQTZoWPWnpCrugZj//pUwzT2emggDq
+t9COp3TQaNp2stRrOmsvEUbA42BBGs0B3ty47eusBcHZ+YLFoBKDNgTEXsvNIUxh
+aXJkIExvbmVyZ2FuIDxtQHNpbGx5bGFpcmQudG9wPsLBeAQTAQgALAUCZAfghAkQ
+b4ruJDOKkGACGwMFCR4TOAACGQEECwcJAwUVCAoCAwQWAAECAABTRBAAk1Z6Lmjl
+4pTh80iQAqe7uj/T7il1eSiyuTFWOWEQ1u/lzl5DzOLYPljqWW7qlQsgnrW0C7fK
+yMTjpp3m4YhvIlzi9UY+hsJSQtY/bOoAhm3TEts+ZirNoxxOqynAM3Y8WeuFi/Q+
+Rw7c6UHHZIEEY1lAf+KXOdwTWoRQE9nf1zHJwhV9EZcVVfA5j0w7QlUwmxfJ3BZI
+3giWbAUXicrLTWh2G0K9jhsJSQ//3x2tVitPuYHaWjSDHyDu+lHLdFPH92KBRHs6
+xROMqx14Kgk/4Cd/L0lcAv5ddX8gBAZD7IT2FK6uKkyOPDn/pE0JxEvKHf3Ex6F5
+kYtnNNjKAomLK+u8Vg2Hhp/SC3urdrBfaYa78/ddA2Hcknsfa4rJtDZD8M1PJ55D
+ao8B80ZWd6xKgYfsIOc2UXm1MwWDB1GXQd9qdUov+NkrYvAsyRCPcGBD2SltK+kA
+zsIL1tPMhpqODg+oidsnDRuKP/m8cAnr8ASEhjZ9NHyblWAwBFmq4CGx8DQjBbU5
+YfvA/hO4VD6AcSKlztMgzehgVfCMCY2RUz7Gv3odRN/Hggvxxu68pD8WzuHU0Hh8
+CTJqFihn3UH48SOi68Keb/BxHbjZlyWjMLJ09FdIpjxc8YL20qImWuM8SjX752xF
+I43r6+IepgANYCHU+eNI3cgD6JNpnI62A8PNI0xhaXJkIExvbmVyZ2FuIDxzaWxs
+eWxhaXJkQHNkZi5vcmc+wsF1BBMBCAApBQJkB+CECRBviu4kM4qQYAIbAwUJHhM4
+AAQLBwkDBRUICgIDBBYAAQIAALuiEABSyPDoV14uen/H2TBMDaAk7QDu8Q5OEzcl
+ecyCJ7fRsHlADA2D9ba6jJRiSB9yyPpeknkyblXNO4Dll+dUj2Ks0OYF1jitVY2g
+/Ad+QkTmxZu4VFTIIMdtlF+IS1xGyH7DTJZBI9S+PLJnuyCf3C2FskDb65JyLQ4M
+CqZc5iq4NxnHKIHmgULIcySFL+X8vBaHnRSuGBbS3EPMC7qEmH+1GopBiZFeAWf5
+irRQzYApbg+mLc564loz2c/fk2ZcfcTGzuKNB5kai83OXwpF/QwxFG1fetxtOabp
+ldKUQWAEMEWgiYtTnnUBRyoTcydwbkQ5DHBHjJAFau7/S8eNBUXVAtzMDr5FPnBS
+6WcJ7kOsY7Xo4xI79jKRWDTiSL/6sCJy9aZshhCrLJJ7aRHQWgjymeh2rsCJfWp9
+jIamYXJESSESKX/Kz95XBVEvrRcdIaxlwJLimTS5lX7bsukBMKagOapcUVvNQ8f0
+eLZYp+wf4+81pzw3mfBwkJu1Dt4+T4sPgYnS6Ac4cafRJkFj3EQA/3UJeug1rbiY
+vTiZBxrqia2uSQp327hzWxrN3MjlZ3uxCvn6tWJATo9P9/7O1/4FihyyMtzfNC4x
+rzX2KuXcGRV0xIwRI2F+bNY3lhzSw5ZOPkjLIHDkqsFMxp/C7gZr7nEL5jcDyGxh
+TuuQnqzgtM7BTQRkB+CEARAAqXrq4qgwelGUrOUXmDYUcdgLIXiu0oP21D6XyQgv
+Q6l2Vv55EHf6UoXG5eD24/ewjjqUqeN6xA/caIpj2NR1R60vNs/C0Zb5WYqv0s7x
+Lk3t/MJsnCtX26gB4+Qk2Rvclj4Cz0KztnOPI0TbWoI84O3aEENrHmKVWPkPROvT
+XgOewvB55eymW9BmgH8gaEcxPnCxVhXhptxAaJn1Gxfgf+Dr4ttBZFobxyIh4wN1
+uHjaWbINR+3wC8p+2JQxbcUER7+5R5yoR7lmEHN/xgU1/4A4eZWa4BTWKCHCvuwU
+PCZxMsdCjR4sjwDpHTa6gNVfCVX7xauO7ebw9oTbHetnJ9eFWiTFk0WM1mdigexf
+6eYvVpcNCtlSMb4btr3IvioikfnrRzIna9kzfPF7Lku4VAyH2OdxhxYHSdx3GUl6
+pxEd0xlrMojKZYeGsm8VkNM80NZFw0A+tqwGimKIk/3TeXUInCSOW3QqlEyQd5gX
+x/K2o6xiYHxQSuhHNrz9Hw1B4sF04z8y31Rf1j8a4b72F1aWUFR1FDa6od11wsjT
+hwvldhKvsmSqhKVPwF3FGrue1wLClD+sevVrM6FmnaCBy2DmPDgaYR1Y08dcn9cW
+qU5olRmE/5oNIjBU+fjCys3Ikean1/8vfZG0w4b2qvoPLYHpRKgjoYbS64ykHED/
+i8MAEQEAAcLBdQQYAQgAKQUCZAfghAkQb4ruJDOKkGACGwwFCR4TOAAECwcJAwUV
+CAoCAwQWAAECAACUkhAAaAEvJJFMBDrFdbuDNKSiV8pgknV6gonTcRK7YBiLDMAE
+r3w7BuSHMuHn2I3TyzPtZwwjme+05peh56gNHcC5Q5RWud6OkSh3C3zbpA+KWhEt
+WzYz+x1+8lanHcNNuu6krMcCNLGDobmMh6Rahfi3w34VJwVcVNEcn1ACKUcHuKpZ
+vpAsMweqY76PyKNRfRESkEj/5O9GdtODiM/0vSEwfpxSt0/Hm0LOP6d1tYMUacHe
+VXtQixIl0iFNf9su0TbsEHdn0cvWBdlV3YzQ6mpeb7WoIFKjwyUcGXw+2/LOVXaq
+MftpRuriuL2nXtQmDzFcg0oO+EXYH/9GXqOR02DQe3q+CgGA98Jylg3af01t6eBf
+MQl7mVqVq2zL67WCfxmFPDsukVxvUf2m7shqRwxua5eC+Cq3nDTwkC7cOQ6XUaE9
+mij9Cf0CQ7QexXiejhx3wCjKfs2D6rAp3i3m685TOKjtd2ZoNktKLe4wz6JZoATL
+x9h8in9iF8zIzeY8j5xdjwR52Doh+1rRsWoTSDbbsNGMk3yX/A0r2w3TuJ47dw7h
+/AR8jCkbj85Plvvr/HLf26b8BgI10QReDjmDM0pN6nEcAAxMzp0CfMj0DRwHyIMH
+skuKtGc8gVYmwQb2EAbf2T9obrx7W74s470AJCCBzzE+a4OXc7ql0ze+DDo52N8=
+=mvoX
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/plan9.png b/plan9.png
new file mode 100644
index 0000000..6441f1d
--- /dev/null
+++ b/plan9.png
Binary files differ
diff --git a/plan9bunnysmwhite.jpg b/plan9bunnysmwhite.jpg
new file mode 100644
index 0000000..8829e16
--- /dev/null
+++ b/plan9bunnysmwhite.jpg
Binary files differ
diff --git a/playbilibili.png b/playbilibili.png
new file mode 100644
index 0000000..be995e8
--- /dev/null
+++ b/playbilibili.png
Binary files differ
diff --git a/power36.gif b/power36.gif
new file mode 100644
index 0000000..96f9c61
--- /dev/null
+++ b/power36.gif
Binary files differ
diff --git a/ps2.jpg b/ps2.jpg
new file mode 100644
index 0000000..065482b
--- /dev/null
+++ b/ps2.jpg
Binary files differ
diff --git a/pub/chrome_JF8NkbrJhc.png b/pub/chrome_JF8NkbrJhc.png
new file mode 100644
index 0000000..68909f9
--- /dev/null
+++ b/pub/chrome_JF8NkbrJhc.png
Binary files differ
diff --git a/pub/install.sh b/pub/install.sh
new file mode 100644
index 0000000..fcfbcf7
--- /dev/null
+++ b/pub/install.sh
@@ -0,0 +1,549 @@
+#!/bin/sh
+#
+# This script should be run via curl:
+# sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
+# or via wget:
+# sh -c "$(wget -qO- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
+# or via fetch:
+# sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
+#
+# As an alternative, you can first download the install script and run it afterwards:
+# wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
+# sh install.sh
+#
+# You can tweak the install behavior by setting variables when running the script. For
+# example, to change the path to the Oh My Zsh repository:
+# ZSH=~/.zsh sh install.sh
+#
+# Respects the following environment variables:
+# ZDOTDIR - path to Zsh dotfiles directory (default: unset). See [1][2]
+# [1] https://zsh.sourceforge.io/Doc/Release/Parameters.html#index-ZDOTDIR
+# [2] https://zsh.sourceforge.io/Doc/Release/Files.html#index-ZDOTDIR_002c-use-of
+# ZSH - path to the Oh My Zsh repository folder (default: $HOME/.oh-my-zsh)
+# REPO - name of the GitHub repo to install from (default: ohmyzsh/ohmyzsh)
+# REMOTE - full remote URL of the git repo to install (default: GitHub via HTTPS)
+# BRANCH - branch to check out immediately after install (default: master)
+#
+# Other options:
+# CHSH - 'no' means the installer will not change the default shell (default: yes)
+# RUNZSH - 'no' means the installer will not run zsh after the install (default: yes)
+# KEEP_ZSHRC - 'yes' means the installer will not replace an existing .zshrc (default: no)
+#
+# You can also pass some arguments to the install script to set some these options:
+# --skip-chsh: has the same behavior as setting CHSH to 'no'
+# --unattended: sets both CHSH and RUNZSH to 'no'
+# --keep-zshrc: sets KEEP_ZSHRC to 'yes'
+# For example:
+# sh install.sh --unattended
+# or:
+# sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
+#
+set -e
+
+# Make sure important variables exist if not already defined
+#
+# $USER is defined by login(1) which is not always executed (e.g. containers)
+# POSIX: https://pubs.opengroup.org/onlinepubs/009695299/utilities/id.html
+USER=${USER:-$(id -u -n)}
+# $HOME is defined at the time of login, but it could be unset. If it is unset,
+# a tilde by itself (~) will not be expanded to the current user's home directory.
+# POSIX: https://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap08.html#tag_08_03
+HOME="${HOME:-$(getent passwd $USER 2>/dev/null | cut -d: -f6)}"
+# macOS does not have getent, but this works even if $HOME is unset
+HOME="${HOME:-$(eval echo ~$USER)}"
+
+
+# Track if $ZSH was provided
+custom_zsh=${ZSH:+yes}
+
+# Use $zdot to keep track of where the directory is for zsh dotfiles
+# To check if $ZDOTDIR was provided, explicitly check for $ZDOTDIR
+zdot="${ZDOTDIR:-$HOME}"
+
+# Default value for $ZSH
+# a) if $ZDOTDIR is supplied and not $HOME: $ZDOTDIR/ohmyzsh
+# b) otherwise, $HOME/.oh-my-zsh
+[ "$ZDOTDIR" = "$HOME" ] || ZSH="${ZSH:-${ZDOTDIR:+$ZDOTDIR/ohmyzsh}}"
+ZSH="${ZSH:-$HOME/.oh-my-zsh}"
+
+# Default settings
+REPO=${REPO:-ohmyzsh/ohmyzsh}
+REMOTE=${REMOTE:-https://github.com/${REPO}.git}
+BRANCH=${BRANCH:-master}
+
+# Other options
+CHSH=${CHSH:-yes}
+RUNZSH=${RUNZSH:-yes}
+KEEP_ZSHRC=${KEEP_ZSHRC:-no}
+
+
+command_exists() {
+ command -v "$@" >/dev/null 2>&1
+}
+
+user_can_sudo() {
+ # Check if sudo is installed
+ command_exists sudo || return 1
+ # Termux can't run sudo, so we can detect it and exit the function early.
+ case "$PREFIX" in
+ *com.termux*) return 1 ;;
+ esac
+ # The following command has 3 parts:
+ #
+ # 1. Run `sudo` with `-v`. Does the following:
+ # • with privilege: asks for a password immediately.
+ # • without privilege: exits with error code 1 and prints the message:
+ # Sorry, user <username> may not run sudo on <hostname>
+ #
+ # 2. Pass `-n` to `sudo` to tell it to not ask for a password. If the
+ # password is not required, the command will finish with exit code 0.
+ # If one is required, sudo will exit with error code 1 and print the
+ # message:
+ # sudo: a password is required
+ #
+ # 3. Check for the words "may not run sudo" in the output to really tell
+ # whether the user has privileges or not. For that we have to make sure
+ # to run `sudo` in the default locale (with `LANG=`) so that the message
+ # stays consistent regardless of the user's locale.
+ #
+ ! LANG= sudo -n -v 2>&1 | grep -q "may not run sudo"
+}
+
+# The [ -t 1 ] check only works when the function is not called from
+# a subshell (like in `$(...)` or `(...)`, so this hack redefines the
+# function at the top level to always return false when stdout is not
+# a tty.
+if [ -t 1 ]; then
+ is_tty() {
+ true
+ }
+else
+ is_tty() {
+ false
+ }
+fi
+
+# This function uses the logic from supports-hyperlinks[1][2], which is
+# made by Kat Marchán (@zkat) and licensed under the Apache License 2.0.
+# [1] https://github.com/zkat/supports-hyperlinks
+# [2] https://crates.io/crates/supports-hyperlinks
+#
+# Copyright (c) 2021 Kat Marchán
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+supports_hyperlinks() {
+ # $FORCE_HYPERLINK must be set and be non-zero (this acts as a logic bypass)
+ if [ -n "$FORCE_HYPERLINK" ]; then
+ [ "$FORCE_HYPERLINK" != 0 ]
+ return $?
+ fi
+
+ # If stdout is not a tty, it doesn't support hyperlinks
+ is_tty || return 1
+
+ # DomTerm terminal emulator (domterm.org)
+ if [ -n "$DOMTERM" ]; then
+ return 0
+ fi
+
+ # VTE-based terminals above v0.50 (Gnome Terminal, Guake, ROXTerm, etc)
+ if [ -n "$VTE_VERSION" ]; then
+ [ $VTE_VERSION -ge 5000 ]
+ return $?
+ fi
+
+ # If $TERM_PROGRAM is set, these terminals support hyperlinks
+ case "$TERM_PROGRAM" in
+ Hyper|iTerm.app|terminology|WezTerm) return 0 ;;
+ esac
+
+ # kitty supports hyperlinks
+ if [ "$TERM" = xterm-kitty ]; then
+ return 0
+ fi
+
+ # Windows Terminal also supports hyperlinks
+ if [ -n "$WT_SESSION" ]; then
+ return 0
+ fi
+
+ # Konsole supports hyperlinks, but it's an opt-in setting that can't be detected
+ # https://github.com/ohmyzsh/ohmyzsh/issues/10964
+ # if [ -n "$KONSOLE_VERSION" ]; then
+ # return 0
+ # fi
+
+ return 1
+}
+
+# Adapted from code and information by Anton Kochkov (@XVilka)
+# Source: https://gist.github.com/XVilka/8346728
+supports_truecolor() {
+ case "$COLORTERM" in
+ truecolor|24bit) return 0 ;;
+ esac
+
+ case "$TERM" in
+ iterm |\
+ tmux-truecolor |\
+ linux-truecolor |\
+ xterm-truecolor |\
+ screen-truecolor) return 0 ;;
+ esac
+
+ return 1
+}
+
+fmt_link() {
+ # $1: text, $2: url, $3: fallback mode
+ if supports_hyperlinks; then
+ printf '\033]8;;%s\033\\%s\033]8;;\033\\\n' "$2" "$1"
+ return
+ fi
+
+ case "$3" in
+ --text) printf '%s\n' "$1" ;;
+ --url|*) fmt_underline "$2" ;;
+ esac
+}
+
+fmt_underline() {
+ is_tty && printf '\033[4m%s\033[24m\n' "$*" || printf '%s\n' "$*"
+}
+
+# shellcheck disable=SC2016 # backtick in single-quote
+fmt_code() {
+ is_tty && printf '`\033[2m%s\033[22m`\n' "$*" || printf '`%s`\n' "$*"
+}
+
+fmt_error() {
+ printf '%sError: %s%s\n' "${FMT_BOLD}${FMT_RED}" "$*" "$FMT_RESET" >&2
+}
+
+setup_color() {
+ # Only use colors if connected to a terminal
+ if ! is_tty; then
+ FMT_RAINBOW=""
+ FMT_RED=""
+ FMT_GREEN=""
+ FMT_YELLOW=""
+ FMT_BLUE=""
+ FMT_BOLD=""
+ FMT_RESET=""
+ return
+ fi
+
+ if supports_truecolor; then
+ FMT_RAINBOW="
+ $(printf '\033[38;2;255;0;0m')
+ $(printf '\033[38;2;255;97;0m')
+ $(printf '\033[38;2;247;255;0m')
+ $(printf '\033[38;2;0;255;30m')
+ $(printf '\033[38;2;77;0;255m')
+ $(printf '\033[38;2;168;0;255m')
+ $(printf '\033[38;2;245;0;172m')
+ "
+ else
+ FMT_RAINBOW="
+ $(printf '\033[38;5;196m')
+ $(printf '\033[38;5;202m')
+ $(printf '\033[38;5;226m')
+ $(printf '\033[38;5;082m')
+ $(printf '\033[38;5;021m')
+ $(printf '\033[38;5;093m')
+ $(printf '\033[38;5;163m')
+ "
+ fi
+
+ FMT_RED=$(printf '\033[31m')
+ FMT_GREEN=$(printf '\033[32m')
+ FMT_YELLOW=$(printf '\033[33m')
+ FMT_BLUE=$(printf '\033[34m')
+ FMT_BOLD=$(printf '\033[1m')
+ FMT_RESET=$(printf '\033[0m')
+}
+
+setup_ohmyzsh() {
+ # Prevent the cloned repository from having insecure permissions. Failing to do
+ # so causes compinit() calls to fail with "command not found: compdef" errors
+ # for users with insecure umasks (e.g., "002", allowing group writability). Note
+ # that this will be ignored under Cygwin by default, as Windows ACLs take
+ # precedence over umasks except for filesystems mounted with option "noacl".
+ umask g-w,o-w
+
+ echo "${FMT_BLUE}Cloning Oh My Zsh...${FMT_RESET}"
+
+ command_exists git || {
+ fmt_error "git is not installed"
+ exit 1
+ }
+
+ ostype=$(uname)
+ if [ -z "${ostype%CYGWIN*}" ] && git --version | grep -Eq 'msysgit|windows'; then
+ fmt_error "Windows/MSYS Git is not supported on Cygwin"
+ fmt_error "Make sure the Cygwin git package is installed and is first on the \$PATH"
+ exit 1
+ fi
+
+ # Manual clone with git config options to support git < v1.7.2
+ git init --quiet "$ZSH" && cd "$ZSH" \
+ && git config core.eol lf \
+ && git config core.autocrlf false \
+ && git config fsck.zeroPaddedFilemode ignore \
+ && git config fetch.fsck.zeroPaddedFilemode ignore \
+ && git config receive.fsck.zeroPaddedFilemode ignore \
+ && git config oh-my-zsh.remote origin \
+ && git config oh-my-zsh.branch "$BRANCH" \
+ && git remote add origin "$REMOTE" \
+ && git fetch --depth=1 origin \
+ && git checkout -b "$BRANCH" "origin/$BRANCH" || {
+ [ ! -d "$ZSH" ] || {
+ cd -
+ rm -rf "$ZSH" 2>/dev/null
+ }
+ fmt_error "git clone of oh-my-zsh repo failed"
+ exit 1
+ }
+ # Exit installation directory
+ cd -
+
+ echo
+}
+
+setup_zshrc() {
+ # Keep most recent old .zshrc at .zshrc.pre-oh-my-zsh, and older ones
+ # with datestamp of installation that moved them aside, so we never actually
+ # destroy a user's original zshrc
+ echo "${FMT_BLUE}Looking for an existing zsh config...${FMT_RESET}"
+
+ # Must use this exact name so uninstall.sh can find it
+ OLD_ZSHRC="$zdot/.zshrc.pre-oh-my-zsh"
+ if [ -f "$zdot/.zshrc" ] || [ -h "$zdot/.zshrc" ]; then
+ # Skip this if the user doesn't want to replace an existing .zshrc
+ if [ "$KEEP_ZSHRC" = yes ]; then
+ echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Keeping...${FMT_RESET}"
+ return
+ fi
+ if [ -e "$OLD_ZSHRC" ]; then
+ OLD_OLD_ZSHRC="${OLD_ZSHRC}-$(date +%Y-%m-%d_%H-%M-%S)"
+ if [ -e "$OLD_OLD_ZSHRC" ]; then
+ fmt_error "$OLD_OLD_ZSHRC exists. Can't back up ${OLD_ZSHRC}"
+ fmt_error "re-run the installer again in a couple of seconds"
+ exit 1
+ fi
+ mv "$OLD_ZSHRC" "${OLD_OLD_ZSHRC}"
+
+ echo "${FMT_YELLOW}Found old .zshrc.pre-oh-my-zsh." \
+ "${FMT_GREEN}Backing up to ${OLD_OLD_ZSHRC}${FMT_RESET}"
+ fi
+ echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Backing up to ${OLD_ZSHRC}${FMT_RESET}"
+ mv "$zdot/.zshrc" "$OLD_ZSHRC"
+ fi
+
+ echo "${FMT_GREEN}Using the Oh My Zsh template file and adding it to $zdot/.zshrc.${FMT_RESET}"
+
+ # Modify $ZSH variable in .zshrc directory to use the literal $ZDOTDIR or $HOME
+ omz="$ZSH"
+ if [ -n "$ZDOTDIR" ] && [ "$ZDOTDIR" != "$HOME" ]; then
+ omz=$(echo "$omz" | sed "s|^$ZDOTDIR/|\$ZDOTDIR/|")
+ fi
+ omz=$(echo "$omz" | sed "s|^$HOME/|\$HOME/|")
+
+ sed "s|^export ZSH=.*$|export ZSH=\"${omz}\"|" "$ZSH/templates/zshrc.zsh-template" > "$zdot/.zshrc-omztemp"
+ mv -f "$zdot/.zshrc-omztemp" "$zdot/.zshrc"
+
+ echo
+}
+
+setup_shell() {
+ # Skip setup if the user wants or stdin is closed (not running interactively).
+ if [ "$CHSH" = no ]; then
+ return
+ fi
+
+ # If this user's login shell is already "zsh", do not attempt to switch.
+ if [ "$(basename -- "$SHELL")" = "zsh" ]; then
+ return
+ fi
+
+ # If this platform doesn't provide a "chsh" command, bail out.
+ if ! command_exists chsh; then
+ cat <<EOF
+I can't change your shell automatically because this system does not have chsh.
+${FMT_BLUE}Please manually change your default shell to zsh${FMT_RESET}
+EOF
+ return
+ fi
+
+ echo "${FMT_BLUE}Time to change your default shell to zsh:${FMT_RESET}"
+
+ # Prompt for user choice on changing the default login shell
+ printf '%sDo you want to change your default shell to zsh? [Y/n]%s ' \
+ "$FMT_YELLOW" "$FMT_RESET"
+ read -r opt
+ case $opt in
+ y*|Y*|"") ;;
+ n*|N*) echo "Shell change skipped."; return ;;
+ *) echo "Invalid choice. Shell change skipped."; return ;;
+ esac
+
+ # Check if we're running on Termux
+ case "$PREFIX" in
+ *com.termux*) termux=true; zsh=zsh ;;
+ *) termux=false ;;
+ esac
+
+ if [ "$termux" != true ]; then
+ # Test for the right location of the "shells" file
+ if [ -f /etc/shells ]; then
+ shells_file=/etc/shells
+ elif [ -f /usr/share/defaults/etc/shells ]; then # Solus OS
+ shells_file=/usr/share/defaults/etc/shells
+ else
+ fmt_error "could not find /etc/shells file. Change your default shell manually."
+ return
+ fi
+
+ # Get the path to the right zsh binary
+ # 1. Use the most preceding one based on $PATH, then check that it's in the shells file
+ # 2. If that fails, get a zsh path from the shells file, then check it actually exists
+ if ! zsh=$(command -v zsh) || ! grep -qx "$zsh" "$shells_file"; then
+ if ! zsh=$(grep '^/.*/zsh$' "$shells_file" | tail -n 1) || [ ! -f "$zsh" ]; then
+ fmt_error "no zsh binary found or not present in '$shells_file'"
+ fmt_error "change your default shell manually."
+ return
+ fi
+ fi
+ fi
+
+ # We're going to change the default shell, so back up the current one
+ if [ -n "$SHELL" ]; then
+ echo "$SHELL" > "$zdot/.shell.pre-oh-my-zsh"
+ else
+ grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > "$zdot/.shell.pre-oh-my-zsh"
+ fi
+
+ echo "Changing your shell to $zsh..."
+
+ # Check if user has sudo privileges to run `chsh` with or without `sudo`
+ #
+ # This allows the call to succeed without password on systems where the
+ # user does not have a password but does have sudo privileges, like in
+ # Google Cloud Shell.
+ #
+ # On systems that don't have a user with passwordless sudo, the user will
+ # be prompted for the password either way, so this shouldn't cause any issues.
+ #
+ if user_can_sudo; then
+ sudo -k chsh -s "$zsh" "$USER" # -k forces the password prompt
+ else
+ chsh -s "$zsh" "$USER" # run chsh normally
+ fi
+
+ # Check if the shell change was successful
+ if [ $? -ne 0 ]; then
+ fmt_error "chsh command unsuccessful. Change your default shell manually."
+ else
+ export SHELL="$zsh"
+ echo "${FMT_GREEN}Shell successfully changed to '$zsh'.${FMT_RESET}"
+ fi
+
+ echo
+}
+
+# shellcheck disable=SC2183 # printf string has more %s than arguments ($FMT_RAINBOW expands to multiple arguments)
+print_success() {
+ printf '%s %s__ %s %s %s %s %s__ %s\n' $FMT_RAINBOW $FMT_RESET
+ printf '%s ____ %s/ /_ %s ____ ___ %s__ __ %s ____ %s_____%s/ /_ %s\n' $FMT_RAINBOW $FMT_RESET
+ printf '%s / __ \\%s/ __ \\ %s / __ `__ \\%s/ / / / %s /_ / %s/ ___/%s __ \\ %s\n' $FMT_RAINBOW $FMT_RESET
+ printf '%s/ /_/ /%s / / / %s / / / / / /%s /_/ / %s / /_%s(__ )%s / / / %s\n' $FMT_RAINBOW $FMT_RESET
+ printf '%s\\____/%s_/ /_/ %s /_/ /_/ /_/%s\\__, / %s /___/%s____/%s_/ /_/ %s\n' $FMT_RAINBOW $FMT_RESET
+ printf '%s %s %s %s /____/ %s %s %s %s....is now installed!%s\n' $FMT_RAINBOW $FMT_GREEN $FMT_RESET
+ printf '\n'
+ printf '\n'
+ printf "%s %s %s\n" "Before you scream ${FMT_BOLD}${FMT_YELLOW}Oh My Zsh!${FMT_RESET} look over the" \
+ "$(fmt_code "$(fmt_link ".zshrc" "file://$zdot/.zshrc" --text)")" \
+ "file to select plugins, themes, and options."
+ printf '\n'
+ printf '%s\n' "• Follow us on Twitter: $(fmt_link @ohmyzsh https://twitter.com/ohmyzsh)"
+ printf '%s\n' "• Join our Discord community: $(fmt_link "Discord server" https://discord.gg/ohmyzsh)"
+ printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "Planet Argon Shop" https://shop.planetargon.com/collections/oh-my-zsh)"
+ printf '%s\n' $FMT_RESET
+}
+
+main() {
+ # Run as unattended if stdin is not a tty
+ if [ ! -t 0 ]; then
+ RUNZSH=no
+ CHSH=no
+ fi
+
+ # Parse arguments
+ while [ $# -gt 0 ]; do
+ case $1 in
+ --unattended) RUNZSH=no; CHSH=no ;;
+ --skip-chsh) CHSH=no ;;
+ --keep-zshrc) KEEP_ZSHRC=yes ;;
+ esac
+ shift
+ done
+
+ setup_color
+
+ if ! command_exists zsh; then
+ echo "${FMT_YELLOW}Zsh is not installed.${FMT_RESET} Please install zsh first."
+ exit 1
+ fi
+
+ if [ -d "$ZSH" ]; then
+ echo "${FMT_YELLOW}The \$ZSH folder already exists ($ZSH).${FMT_RESET}"
+ if [ "$custom_zsh" = yes ]; then
+ cat <<EOF
+
+You ran the installer with the \$ZSH setting or the \$ZSH variable is
+exported. You have 3 options:
+
+1. Unset the ZSH variable when calling the installer:
+ $(fmt_code "ZSH= sh install.sh")
+2. Install Oh My Zsh to a directory that doesn't exist yet:
+ $(fmt_code "ZSH=path/to/new/ohmyzsh/folder sh install.sh")
+3. (Caution) If the folder doesn't contain important information,
+ you can just remove it with $(fmt_code "rm -r $ZSH")
+
+EOF
+ else
+ echo "You'll need to remove it if you want to reinstall."
+ fi
+ exit 1
+ fi
+
+ # Create ZDOTDIR folder structure if it doesn't exist
+ if [ -n "$ZDOTDIR" ]; then
+ mkdir -p "$ZDOTDIR"
+ fi
+
+ setup_ohmyzsh
+ setup_zshrc
+ setup_shell
+
+ print_success
+
+ if [ $RUNZSH = no ]; then
+ echo "${FMT_YELLOW}Run zsh to try it out.${FMT_RESET}"
+ exit
+ fi
+
+ exec zsh -l
+}
+
+main "$@"
diff --git a/pub/openbsd how to setup zsh shell.txt b/pub/openbsd how to setup zsh shell.txt
new file mode 100644
index 0000000..4be8f07
--- /dev/null
+++ b/pub/openbsd how to setup zsh shell.txt
@@ -0,0 +1,11 @@
+OpenBSD - How to Setup ZSH Shell
+doas pkg_add zsh
+chsh -s zsh
+which zsh
+doas nano /etc/passwd
+user:*:1000:1000:Firstname Lastname:/home/user:/usr/local/bin/zsh
+--exit
+doas pkg_add wget git
+wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
+sh install.sh
+source ~/.zshrc
diff --git a/pub/tor.txt b/pub/tor.txt
new file mode 100644
index 0000000..f6a1f40
--- /dev/null
+++ b/pub/tor.txt
@@ -0,0 +1,19 @@
+1. Download and install the Tor Browser to your Windows Server VPS from https://www.torproject.org/download/
+ 2. Navigate to C:\Tor Browser\Browser\TorBrowser\Data\Tor and open the torrc file in a text
+ editor
+ 3. Add the following two lines to the torrc file:
+ HiddenServiceDir C:\inetpub\directory_for_your_sillylaird.info_website
+ HiddenServicePort 80 127.0.0.1:80
+ 4. Save the torrc file, and start Tor Browser on your VPS
+ 5. Navigate to C:\inetpub\directory_for_your_sillylaird.info_website , search for a file
+ named hostname, and open it in a text editor. The hostname file should contain a single line
+ which ends in .onion; this is the newly generated onion address for your site. Copy this line to your clipboard
+ 6. Start up IIS with administrator privileges, and then navigate to the IIS settings page for sillylaird.info
+ 7. Add a new site binding for your sillylaird.info site under Edit Site > Bindings... with
+ the following configuration:
+ Type: http
+ IP address: All Unassigned
+ Port: 80
+ Host name: paste the .onion address which you copied in step 5
+ 8. Click "Ok", then "Close"
+ 9. Try accessing your site's onion address via Tor Browser on your local machine \ No newline at end of file
diff --git a/public.asc b/public.asc
new file mode 100644
index 0000000..0df862d
--- /dev/null
+++ b/public.asc
@@ -0,0 +1,13 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZDX0txYJKwYBBAHaRw8BAQdA7olI25+woWmQKeJ6HhSUYDzDm5G39/gt+fev
+IitEile0IUxhaXJkIExvbmVyZ2FuIDxtQHNpbGx5bGFpcmQudG9wPoiTBBMWCgA7
+FiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwMFCwkIBwICIgIGFQoJCAsC
+BBYCAwECHgcCF4AACgkQDtb+6Y7No4VyCwD6AmOU1j0AAf0f9n8YRuEO+pdg/RL3
+2E5huAAbJWR79oUBAIJbFyPaUCQZD2gVhn0RcBhhCX4qT2H8QxMF88XLV3MJuDgE
+ZDX0txIKKwYBBAGXVQEFAQEHQDBO58ovIL0AyxY5SS+cVC/tlZnKpxt79MvgwJkv
+vs5BAwEIB4h4BBgWCgAgFiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwwA
+CgkQDtb+6Y7No4WkgwEAp1ehHAxU8y+UWKwyXgqvMWaasxevvIawLDrWVSJ0l2YB
+AK0xdujZWh51jP98/opH81NZ55DzyDb/qceoQifVKu4A
+=/Io1
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/public.txt b/public.txt
new file mode 100644
index 0000000..0df862d
--- /dev/null
+++ b/public.txt
@@ -0,0 +1,13 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZDX0txYJKwYBBAHaRw8BAQdA7olI25+woWmQKeJ6HhSUYDzDm5G39/gt+fev
+IitEile0IUxhaXJkIExvbmVyZ2FuIDxtQHNpbGx5bGFpcmQudG9wPoiTBBMWCgA7
+FiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwMFCwkIBwICIgIGFQoJCAsC
+BBYCAwECHgcCF4AACgkQDtb+6Y7No4VyCwD6AmOU1j0AAf0f9n8YRuEO+pdg/RL3
+2E5huAAbJWR79oUBAIJbFyPaUCQZD2gVhn0RcBhhCX4qT2H8QxMF88XLV3MJuDgE
+ZDX0txIKKwYBBAGXVQEFAQEHQDBO58ovIL0AyxY5SS+cVC/tlZnKpxt79MvgwJkv
+vs5BAwEIB4h4BBgWCgAgFiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwwA
+CgkQDtb+6Y7No4WkgwEAp1ehHAxU8y+UWKwyXgqvMWaasxevvIawLDrWVSJ0l2YB
+AK0xdujZWh51jP98/opH81NZ55DzyDb/qceoQifVKu4A
+=/Io1
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rib_bar_wh.png b/rib_bar_wh.png
new file mode 100644
index 0000000..acc5ea8
--- /dev/null
+++ b/rib_bar_wh.png
Binary files differ
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..ca56147
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://www.sillylaird.ca/sitemap.xml
diff --git a/roundcube.png b/roundcube.png
new file mode 100644
index 0000000..4e44e3e
--- /dev/null
+++ b/roundcube.png
Binary files differ
diff --git a/roundcube.svg b/roundcube.svg
new file mode 100644
index 0000000..e3ee3fe
--- /dev/null
+++ b/roundcube.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="9.14 141.8 573.65 573.65">
+ <style>
+ .st0,.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#404f54}.st3{fill:#37beff}
+ </style>
+ <path class="st3" d="M582.79 549.77L295.96 384.1V207.27l286.83 165.68z"/>
+ <path class="st0" d="M9.14 549.77L295.96 384.1V207.27L9.14 372.95z"/>
+ <path d="M295.96 141.8c109.56 0 198.41 88.85 198.41 198.41s-88.85 198.41-198.41 198.41S97.55 449.77 97.55 340.21 186.4 141.8 295.96 141.8" fill-rule="evenodd" clip-rule="evenodd" fill="#ccc"/>
+ <path d="M295.96 141.8c109.6 0 198.48 88.85 198.48 198.41s-88.88 198.41-198.48 198.41c-62.91-42.34-88.94-127.64-88.94-198.3s26.03-156.1 88.94-198.52" fill-rule="evenodd" clip-rule="evenodd" fill="#e5e5e5"/>
+ <path class="st3" d="M582.79 372.95L295.96 538.62v176.83l286.83-165.68z"/>
+ <path class="st0" d="M9.14 372.95l286.82 165.67v176.83L9.14 549.77z"/>
+</svg>
diff --git a/runescape.png b/runescape.png
new file mode 100644
index 0000000..79a7531
--- /dev/null
+++ b/runescape.png
Binary files differ
diff --git a/runescape2.png b/runescape2.png
new file mode 100644
index 0000000..78904e1
--- /dev/null
+++ b/runescape2.png
Binary files differ
diff --git a/russia.png b/russia.png
new file mode 100644
index 0000000..1a5ff93
--- /dev/null
+++ b/russia.png
Binary files differ
diff --git a/russia.svg b/russia.svg
new file mode 100644
index 0000000..855b805
--- /dev/null
+++ b/russia.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 6" width="900" height="600"><rect fill="#fff" width="9" height="3"/><rect fill="#d52b1e" y="3" width="9" height="3"/><rect fill="#0039a6" y="2" width="9" height="2"/></svg> \ No newline at end of file
diff --git a/sapphireblue.png b/sapphireblue.png
new file mode 100644
index 0000000..8c34abc
--- /dev/null
+++ b/sapphireblue.png
Binary files differ
diff --git a/sealand.png b/sealand.png
new file mode 100644
index 0000000..1e70490
--- /dev/null
+++ b/sealand.png
Binary files differ
diff --git a/sflogo2.jpg b/sflogo2.jpg
new file mode 100644
index 0000000..1e88c97
--- /dev/null
+++ b/sflogo2.jpg
Binary files differ
diff --git a/sillylaird-88x31.png b/sillylaird-88x31.png
new file mode 100644
index 0000000..67037e6
--- /dev/null
+++ b/sillylaird-88x31.png
Binary files differ
diff --git a/sillylaird.png b/sillylaird.png
new file mode 100644
index 0000000..67037e6
--- /dev/null
+++ b/sillylaird.png
Binary files differ
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..affa7c6
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,419 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+ <url>
+ <loc>https://www.sillylaird.ca/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/Laird_Lonergan_profile.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/Laird_Lonergan_profile_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/Laird_Lonergan_profile_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/accounts/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/accounts/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/accounts/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/2023/04-10.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/2023/04-10_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/2023/04-10_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/2024/05-15.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/2024/05-15_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/2024/05-15_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/hello.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/hello_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/hello_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/runescape.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/runescape_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/runescape_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/sample.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/sample_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/articles/sample_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/bbs.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/blog/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/blog/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/blog/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/bookmarks/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/bookmarks/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/bookmarks/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/admin.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/api/latest.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/auth.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/db.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/latest.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/login.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/changelog/logout.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/computers/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/computers/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/computers/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/error/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/error/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/error/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/multibox/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/multibox/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/multibox/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/runescape/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/runescape/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/runescape/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/specialforce/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/specialforce/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/specialforce/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/stepmania/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/stepmania/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/gaming/stepmania/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/guestbook-comments.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/guestbook-form.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/guestbook.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/guestbook_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/guestbook_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/hatCollectionWebsite.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/hatCollectionWebsite_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/hatCollectionWebsite_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/hitcounter.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/hitcounter_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/hitcounter_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/journal/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/journal/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/journal/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/links.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/links_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/links_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/map/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/map/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/map/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/mstartpage/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/musictaste/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/musictaste/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/musictaste/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/startpage/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/startpage/test.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/submit.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/test.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/test_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/test_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/vblog/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/vblog/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/vblog/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/vidlii/</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/vidlii/index_jp.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://www.sillylaird.ca/vidlii/index_zh.html</loc>
+ <lastmod>2026-02-01</lastmod>
+ </url>
+</urlset>
diff --git a/soldierfront.png b/soldierfront.png
new file mode 100644
index 0000000..eb3aa97
--- /dev/null
+++ b/soldierfront.png
Binary files differ
diff --git a/startpage/.htaccess b/startpage/.htaccess
new file mode 100644
index 0000000..3f07952
--- /dev/null
+++ b/startpage/.htaccess
@@ -0,0 +1,8 @@
+<IfModule mod_headers.c>
+ <Files "index.html">
+ Header set X-Content-Type-Options "nosniff"
+ Header set Referrer-Policy "strict-origin-when-cross-origin"
+ Header set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()"
+ Header set Content-Security-Policy "default-src 'self'; base-uri 'self'; script-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' https://sirocco.accuweather.com; form-action 'self' https://www.google.com https://www.google.ca; object-src 'none'"
+ </Files>
+</IfModule>
diff --git a/startpage/amazon.png b/startpage/amazon.png
new file mode 100644
index 0000000..9be01b5
--- /dev/null
+++ b/startpage/amazon.png
Binary files differ
diff --git a/startpage/basedlii.png b/startpage/basedlii.png
new file mode 100644
index 0000000..db0451b
--- /dev/null
+++ b/startpage/basedlii.png
Binary files differ
diff --git a/startpage/belleville.png b/startpage/belleville.png
new file mode 100644
index 0000000..3d2eab0
--- /dev/null
+++ b/startpage/belleville.png
Binary files differ
diff --git a/startpage/buyvm.png b/startpage/buyvm.png
new file mode 100644
index 0000000..3e18331
--- /dev/null
+++ b/startpage/buyvm.png
Binary files differ
diff --git a/startpage/ctvnews.png b/startpage/ctvnews.png
new file mode 100644
index 0000000..87d7065
--- /dev/null
+++ b/startpage/ctvnews.png
Binary files differ
diff --git a/startpage/cytube.png b/startpage/cytube.png
new file mode 100644
index 0000000..6f47350
--- /dev/null
+++ b/startpage/cytube.png
Binary files differ
diff --git a/startpage/ebay.png b/startpage/ebay.png
new file mode 100644
index 0000000..9a75110
--- /dev/null
+++ b/startpage/ebay.png
Binary files differ
diff --git a/startpage/gitlogo.png b/startpage/gitlogo.png
new file mode 100644
index 0000000..34cd85c
--- /dev/null
+++ b/startpage/gitlogo.png
Binary files differ
diff --git a/startpage/heyuri.png b/startpage/heyuri.png
new file mode 100644
index 0000000..46510d5
--- /dev/null
+++ b/startpage/heyuri.png
Binary files differ
diff --git a/startpage/index.html b/startpage/index.html
new file mode 100644
index 0000000..976de31
--- /dev/null
+++ b/startpage/index.html
@@ -0,0 +1,463 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <title>SillyLaird // Terminal</title>
+
+ <meta name="color-scheme" content="dark" />
+ <meta name="theme-color" content="#000000" />
+ <meta name="description" content="SillyLaird's personal index and terminal-style startpage." />
+ <meta property="og:title" content="SillyLaird // Terminal" />
+ <meta property="og:description" content="SillyLaird" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/startpage/" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird // Terminal" />
+ <meta name="twitter:description" content="SillyLaird" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/startpage/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/startpage/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/startpage/" />
+
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
+ <link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@400;700&display=swap" rel="stylesheet" />
+ <link rel="stylesheet" href="/startpage/startpage.css" />
+ <script defer src="/startpage/startpage.js"></script>
+
+</head>
+<body>
+
+<!-- Age Verification Modal -->
+<div id="age-verification-modal" class="age-modal hidden">
+ <div class="age-modal-content">
+ <h2>⚠ AGE VERIFICATION REQUIRED</h2>
+ <p>This section contains content intended for users 18 years of age or older.</p>
+ <p>Are you of legal age (18+) to view this content?</p>
+
+ <!-- Added Google Search Box -->
+ <div class="search-container modal-search">
+ <p class="modal-search-hint">Or search Google instead:</p>
+ <form action="https://www.google.com/search" method="get" target="_blank" class="modal-search-form">
+ <input type="search" name="q" class="search-box modal-search-input" placeholder="Search Google..." autocomplete="off" />
+ <button type="submit" class="modal-search-button">
+ Search
+ </button>
+ </form>
+ </div>
+
+ <div class="age-modal-buttons">
+ <button class="age-modal-btn" id="age-verify-yes" type="button">YES, I AM 18+</button>
+ <button class="age-modal-btn deny" id="age-verify-no" type="button">NO</button>
+ </div>
+ </div>
+</div>
+
+<header>
+ <div class="logo">
+ <a href="/" aria-label="Portal Home">
+ <img src="lain.png" alt="Lain Interface" />
+ </a>
+ </div>
+
+ <nav class="nav-columns">
+ <div class="nav-group">
+ <h3>Directory</h3>
+ <div class="nav-list">
+ <a href="https://blog.sillylaird.ca/">Blog</a>
+ <a href="https://guestbook.sillylaird.ca">GuestBook</a>
+ <a href="https://changelog.sillylaird.ca/">ChangeLog</a>
+ <a href="/journal/">Journal</a>
+ <a href="https://diary.sillylaird.ca/bbs.php">Diary</a>
+ <a href="https://live.sillylaird.ca/">Live</a>
+ <a href="/gaming/">Gaming</a>
+ <a href="http://9p.sillylaird.ca/">9p.sillylaird.ca</a>
+ <a href="http://localhost:3000/">Local.Dev</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Projects</h3>
+ <div class="nav-list">
+ <a href="https://sillylaird.myportfolio.com/">MyPortfolio</a>
+ <a href="https://sillylaird.srht.site/">(srht.site) SH</a>
+ <a href="https://www.sillylaird.ca/startpage/">StartPage</a>
+ <a href="https://sr.ht/~sillylaird/">SourceHut</a>
+ <a href="https://www.heyaoi.net/">Heyaoi</a>
+ <a href="https://up.heyuri.net/user/boards/sillylaird/">up@heyuri</a>
+ <a href="https://basedlii.space/">Basedlii.space</a>
+ <a href="https://trello.com/">Trello</a>
+ <a href="https://chat.dot.org.es/">ChatRoom</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Follow</h3>
+ <div class="nav-list">
+ <a href="https://csgoani.me/">csgoani.me</a>
+ <a href="https://ytmnd.com/">ytmnd</a>
+ <a href="https://buyvm.net/">BuyVM</a>
+ <a href="https://www.1984hosting.com/">1984Hosting</a>
+ <a href="https://digdeeper.club/">DigDeeper</a>
+ <a href="https://djlain.com/">DJLain</a>
+ <a href="https://freezepeach.social/">FreezePeach</a>
+ <a href="https://polymarket.com/">PolyMarket</a>
+ <a href="https://www.livenowfox.com/live">Current News</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Email</h3>
+ <div class="nav-list">
+ <a href="https://app.fastmail.com/">FastMail</a>
+ <a href="https://mail.google.com/mail/u/0/">Gmail</a>
+ <a href="https://tuta.com/">Tuta</a>
+ <a href="https://app.secria.me/">Secria</a>
+ <a href="https://accounts.autistici.org/">Autistici</a>
+ <a href="https://riseup.net/">RiseUP</a>
+ <a href="https://proton.me/mail">Proton</a>
+ <a href="https://cock.li/">Cockli</a>
+ <a href="https://pissmail.com/">PissMail</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>MicroBlog</h3>
+ <div class="nav-list">
+ <a href="https://x.com">X/Twitter</a>
+ <a href="https://www.instagram.com/">Instagram</a>
+ <a href="https://truthsocial.com/">TruthSocial</a>
+ <a href="https://gab.com/home">Gab</a>
+ <a href="https://www.minds.com/">Minds</a>
+ <a href="https://freesoftwareextremist.com/users/sillylaird">FreeSoftwareEx</a>
+ <a href="https://detroitriotcity.com/">DetroitRiotCity</a>
+ <a href="https://noauthority.social/">NoAuthority</a>
+ <a href="https://lemmy.zip/">Lemmy.zip</a>
+ </div>
+ </div>
+
+
+ <div class="nav-group">
+ <h3>Ai/Tools</h3>
+ <div class="nav-list">
+ <a href="https://chatgpt.com/">ChatGpt</a>
+ <a href="https://gemini.google.com/app">Gemini</a>
+ <a href="https://claude.ai/new">Claude</a>
+ <a href="https://www.phind.com/">phind</a>
+ <a href="https://chat.deepseek.com/">DeepSeek</a>
+ <a href="https://chat.qwen.ai/">Qwen</a>
+ <a href="https://elephas.app/">Elephas</a>
+ <a href="https://www.diabrowser.com/">DiaBrowser</a>
+ <a href="https://ollama.com/search">Ollama</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Utilities</h3>
+ <div class="nav-list">
+ <a href="https://discord.com/">Discord</a>
+ <a href="https://www.remove.bg/">RemoveBG</a>
+ <a href="https://waifu2x.io/">Waifu2x</a>
+ <a href="https://tineye.com/">TinEye</a>
+ <a href="https://www.ilovepdf.com/">iLovePDF</a>
+ <a href="https://drive.google.com/">Google Drive</a>
+ <a href="https://www.sync.com/en/">Sync</a>
+ <a href="https://www.photopea.com/">Photopea</a>
+ <a href="https://www.adobe.com/">Adobe</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Intelligence</h3>
+ <div class="nav-list">
+ <a href="https://lobste.rs/">Lobsters</a>
+ <a href="https://news.ycombinator.com/">HackerNews</a>
+ <a href="https://www.reuters.com/">Reuters</a>
+ <a href="https://www.drudgereport.com/">Drudge Report</a>
+ <a href="https://www.foxnews.com/">Fox News</a>
+ <a href="https://www.ctvnews.ca/">CTV News</a>
+ <a href="https://www.cbc.ca/">CBC News</a>
+ <a href="https://weather.com/">Local Weather</a>
+ <a href="https://511on.ca/">Local Traffic</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Music</h3>
+ <div class="nav-list">
+ <a href="https://4chanmusic.miraheze.org/wiki/Sticky">/mu/ wiki</a>
+ <a href="https://rateyourmusic.com/">RateYourMusic</a>
+ <a href="https://pitchfork.com/">PitchFork</a>
+ <a href="http://www.last.fm/">LAST.FM</a>
+ <a href="https://www.discogs.com/">Discogs</a>
+ <a href="https://anonradio.net/">Anonradio</a>
+ <a href="https://r-a-d.io/">R/a/dio</a>
+ <a href="https://91x.fm/">Loyalist Radio</a>
+ <a href="https://chuo.fm/">CHUO Radio</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Network</h3>
+ <div class="nav-list">
+ <a href="https://www.youtube.com/">YouTube</a>
+ <a href="https://www.nicovideo.jp/">NicoVideo</a>
+ <a href="https://www.bilibili.com/">BiliBili</a>
+ <a href="https://www.tiktok.com/explore">TikTok</a>
+ <a href="https://www.twitch.tv/directory/following/live">Twitch</a>
+ <a href="https://fmhy.net/">FMHY</a>
+ <a href="https://deepwebnest.com/">DeepWebNest</a>
+ <a href="https://theindex.moe/">The index (Anime)</a>
+ <a href="https://theporndude.com/">ThePornDude (XXX)</a>
+ </div>
+ </div>
+
+ <div class="nav-group">
+ <h3>Img/Text</h3>
+ <div class="nav-list">
+ <a href="https://www.heyuri.net/">Heyuri</a>
+ <a href="https://endchan.net/">EndChan</a>
+ <a href="https://8chan.moe/">8chan.moe</a>
+ <a href="https://doushio.com/moe/">/moe/</a>
+ <a href="https://futabachannel.neocities.org/">FutabaChannel</a>
+ <a href="https://momizou.neocities.org/">Momizou</a>
+ <a href="https://momicha.neocities.org/">Momicha</a>
+ <a href="https://5ch.net/">5ch</a>
+ <a href="https://bbs.animanch.com/">Animan BBS</a>
+ </div>
+ </div>
+
+ <div class="nav-group locked" id="age-restricted-content">
+ <h3>XXX</h3>
+ <div class="nav-list">
+ <a href="https://www.pornhub.com/">PornHub</a>
+ <a href="https://www.xvideos.com/">XVideos</a>
+ <a href="https://www.redtube.com/">RedTube</a>
+ <a href="https://www.xnxx.com/">XNXX</a>
+ <a href="https://www.youporn.com/">YouPorn</a>
+ <a href="https://www.xhamster.com/">xHamster</a>
+ <a href="https://nhentai.net/">nhentai</a>
+ <a href="https://gelbooru.com/">Gelbooru</a>
+ <a href="https://jav.vercel.app">jav.vercel.app</a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+<main id="main">
+ <section class="search-section">
+ <h2>Google Search..</h2>
+ <form action="https://www.google.ca/search" method="get">
+ <input type="search" name="q" class="search-box" placeholder="Search With..." autocomplete="off" />
+ </form>
+ <div class="clock-container">
+ <div id="realtime-date"></div>
+ <div id="realtime-clock" class="clock-time"></div>
+ </div>
+ </section>
+
+ <section class="grid">
+ <article class="card">
+ <div class="thumb"><img src="basedlii.png" alt="Visual" /></div>
+ <div class="card-links">
+ <strong>Multimedia</strong>
+ <a href="https://www.youtube.com/">YouTube</a>
+ <a href="https://rumble.com/">Rumble</a>
+ <a href=https://www.bitchute.com/">BitChute</a>
+ <a href="https://www.nicovideo.jp/">NicoVideo</a>
+ <a href="https://www.bilibili.com/">BiliBili</a>
+ <a href="https://www.youku.com/ku/webhome">Youku</a>
+ <a href="https://basedlii.space/">Basedlii.space</a>
+ <a href="https://basedlii.ct.ws/">Basedlii.ct.ws</a>
+ <a href="https://peertube.1312.media/videos/browse?sort=-trending&scope=local&c=true&s=3">PeerTube</a>
+ <a href="https://www.tiktok.com/">TikTok</a>
+ <a href="https://www.douyin.com/">Douyin</a>
+ <a href=https://www.instagram.com/">Instagram</a>
+ <a href="https://www.twitch.tv/directory/following/live">Twitch</a>
+ <a href="https://kick.com/">Kick</a>
+ </div>
+ </article>
+
+ <article class="card">
+ <div class="thumb"><img src="sonemic.png" alt="Visual" /></div>
+ <div class="card-links">
+ <strong>Music</strong>
+ <a href="https://music.apple.com/ca/browse">Apple Music</a>
+ <a href="https://music.youtube.com/">Youtube Music</a>
+ <a href="https://soundcloud.com/discover">SoundCloud</a>
+ <a href="https://bandcamp.com/">BandCamp</a>
+ <a href="https://rateyourmusic.com/">RateYourMusic</a>
+ <a href="https://www.discogs.com/">Discogs</a>
+ <a href="https://www.last.fm/user/SillyLaird">Last.FM</a>
+ <a href="https://libre.fm/">Libre.FM</a>
+ <a href="https://consequenceofsound.net/">Consequence of Sound</a>
+ <a href="https://playlistor.io/">Playlistor</a>
+ <a href="https://boards.4chan.org/mu/">/mu/</a>
+ <a href="https://www.head-fi.org/">Head-Fi</a>
+ <a href="https://pitchfork.com/">PitchFork</a>
+ <a href="https://www.youtube.com/@theneedledrop">theneedledrop</a>
+ </div>
+ </article>
+
+ <article class="card">
+ <div class="thumb"><img src="shoppingcart.png" alt="Visual" /></div>
+ <div class="card-links">
+ <strong>Shopping</strong>
+ <a href="https://www.amazon.ca/">Amazon Canada</a>
+ <a href="https://www.amazon.ca/">Amazon USA</a>
+ <a href="https://www.ebay.ca/">Ebay Canada</a>
+ <a href="https://www.ebay.com/">Ebay USA</a>
+ <a href="https://www.jauce.com/">Yahoo Japan Auction</a>
+ <a href="https://www.newegg.ca/">NewEgg</a>
+ <a href="https://www.canadacomputers.com/en/">Canada Computers</a>
+ <a href="https://www.long-mcquade.com/">Long & McQuade</a>
+ <a href="https://www.temu.com/">Temu</a>
+ <a href="https://ottawateamshop.ca/">Ottawa Senators</a>
+ <a href="https://shop.bellevillesens.com/">Belleville Senators</a>
+ <a href="https://www.lansdownesports.ca/67s/">Ottawa 67's</a>
+ <a href="https://shop.baltimoreravens.com/">Baltimore Ravens</a>
+ <a href="https://www.mlbshop.com/baltimore-orioles/">Baltimore Orioles</a>
+ </div>
+ </article>
+
+ <article class="card">
+ <div class="thumb"><img src="gitlogo.png" alt="Source" /></div>
+ <div class="card-links">
+ <strong>Repository</strong>
+ <a href="https://github.com/">Git Hub</a>
+ <a href="https://cvsweb.openbsd.org/">OpenBSD CVS</a>
+ <a href="https://gitweb.gentoo.org/">GitWeb Gentoo</a>
+ <a href="https://github.com/ubuntu">GitHub Ubuntu</a>
+ <a href="https://github.com/archlinux">GitHub Arch Linux</a>
+ <a href="https://github.com/void-linux">GitHub Void Linux</a>
+ <a href="https://github.com/asottile/babi">GitHub Babi</a>
+ <a href="https://codeberg.org/">CodeBerg</a>
+ <a href="https://gitlab.lain.la/">Git Lain.La</a>
+ <a href="https://git.sdf.org/sillylaird">Git SDF</a>
+ <a href="https://git.termer.net/sillylaird">Git Termer</a>
+ <a href="https://sr.ht/~sillylaird/">SourceHut</a>
+ <a href="https://bisqwit.iki.fi/src/">Bisqwit</a>
+ <a href="https://gitee.com/">Gitee</a>
+ </div>
+ </article>
+
+ <article class="card">
+ <div class="thumb"><img src="heyuri.png" alt="BBS" /></div>
+ <div class="card-links">
+ <strong>BBS</strong>
+ <a href="https://heyuri.net/">Heyuri</a>
+ <a href="https://boards.4chan.org/s4s/">/s4s/</a>
+ <a href="https://futabachannel.neocities.org/">futabachannel</a>
+ <a href="https://dat.2chan.net/t/futaba.htm">Cooking</a>
+ <a href="https://dat.2chan.net/21/futaba.htm">Ramen</a>
+ <a href="https://dat.2chan.net/r/futaba.htm">Train</a>
+ <a href="https://zip.2chan.net/1/futaba.htm">BaseBall</a>
+ <a href="https://zip.2chan.net/12/futaba.htm">Soccer</a>
+ <a href="https://may.2chan.net/25/futaba.htm">Mahjong</a>
+ <a href="https://nov.2chan.net/35/futaba.htm">Politics</a>
+ <a href="https://dat.2chan.net/img2/futaba.htm">2d Img</a>
+ <a href="https://zip.2chan.net/3/futaba.htm">HomeBrew Pc</a>
+ <a href="https://dat.2chan.net/48/futaba.htm">Consumer Tech</a>
+ <a href="https://www.ptt.cc/bbs/index.html">ptt BBS</a>
+ </div>
+ </article>
+
+ <article class="card">
+ <div class="thumb"><img src="https://sirocco.accuweather.com/nx_mosaic_640x480_public/sir/inmasirne.gif" alt="Env" /></div>
+ <div class="card-links">
+ <strong>Local News/Weather</strong>
+ <a href="https://www.ctvnews.ca/weather">CTV News</a>
+ <a href="https://www.cbc.ca/news/canada/ottawa">CBC News</a>
+ <a href="https://globalnews.ca/">Global News</a>
+ <a href="https://japantoday.com/">JapanToday</a>
+ <a href="https://www.cgtn.com/">CGTN</a>
+ <a href="https://www.xinhuanet.com/">新华网 (Xinhuanet)</a>
+ <a href="https://www.theglobeandmail.com/">TheGlobeAndMail</a>
+ <a href="https://www.reuters.com/">Reuters</a>
+ <a href="https://www.foxnews.com/">Fox News</a>
+ <a href="https://www.drudgereport.com/">Drudge Report</a>
+ <a href="https://news.joshwho.net/">JoshWho News</a>
+ <a href="https://www.livenowfox.com/live">Current News</a>
+ <a href="https://weather.com/">Local Weather</a>
+ <a href="https://511on.ca/">Local Traffic</a>
+ </div>
+ </article>
+
+
+ <article class="card">
+ <div class="thumb"><img src="belleville.png" alt="Env" /></div>
+ <div class="card-links">
+ <strong>Sports</strong>
+ <a href="https://live.qq.com/directory/all">live.qq</a>
+ <a href="https://www.sportsmediawatch.com/sports-on-tv-today-games-time-channel/">SportsMediaWatch</a>
+ <a href="https://www.sofascore.com/">Sofascore</a>
+ <a href="https://theahl.com/">TheAHLInsider</a>
+ <a href="https://www.espn.com/">ESPN</a>
+ <a href="https://www.espn.com/watch/">ESPN WATCH</a>
+ <a href="https://www.sportsnet.ca/">SportsNet</a>
+ <a href="https://www.tsn.ca/">TSN</a>
+ <a href="https://www.tsn.ca/live/">TSN (WATCH)</a>
+ <a href="https://www.flosports.tv/">FloSports</a>
+ <a href="https://www.tsn.ca/lacrosse/article/nll-lacrosse-on-tsn-broadcast-schedule-2/">NLL</a>
+ <a href="https://plus.nll.com/">Plus Nll</a>
+ <a href="https://tglgolf.com/">TGL Golf</a>
+ <a href="https://bellevillesens.com/">BellevilleSens</a>
+ </div>
+ </article>
+
+ <article class="card">
+ <div class="thumb"><img src="somethingawful.png" alt="Env" /></div>
+ <div class="card-links">
+ <strong>Forums</strong>
+ <a href="https://www.somethingawful.com/">Something Awful </a>
+ <a href="https://forum.agoraroad.com/index.php">Agora Road</a>
+ <a href="https://slashdot.org/">SlashDot</a>
+ <a href="https://arstechnica.com/civis/">Ars Tech Forum</a>
+ <a href="https://www.quora.com/?prevent_redirect=1">Quora</a>
+ <a href="https://www.xda-developers.com/">XDA-Developers</a>
+ <a href="https://forum.level1techs.com/">level1techs</a>
+ <a href="https://www.head-fi.org/">Head-Fi</a>
+ <a href="https://www.newgrounds.com/">NewGrounds</a>
+ <a href="https://daemonforums.org/forumdisplay.php?f=11">DaemonForums</a>
+ <a href="https://forum.osdev.org/">OSDev</a>
+ <a href="https://idforums.net/">ID Forums</a>
+ <a href="https://hellsgamers.com/forums/">HellsGamers Forum</a>
+ <a href="https://linustechtips.com/">LTT Forum</a>
+ </div>
+ </article>
+
+ <article class="card">
+ <div class="thumb"><img src="videogame.png" alt="Env" /></div>
+ <div class="card-links">
+ <strong>Video Games</strong>
+ <a href="https://store.steampowered.com/">Steam</a>
+ <a href="https://www.gog.com/">GoG</a>
+ <a href="https://oldschool.runescape.com/">OSRS RuneScape</a>
+ <a href="https://rscrevolution.com/">RSCEvolution</a>
+ <a href="https://uooutlands.com/">UO Outlands</a>
+ <a href="https://dtxmania.net/">DtxMania</a>
+ <a href="https://approvedtx.blogspot.com/?m=1">ApprovedDTX</a>
+ <a href="https://dtx.furukon.com/">FuruKon</a>
+ <a href="https://djlain.com/gitadora/">DJLain Gitadora</a>
+ <a href="https://djlain.com/popn/">DJLain Pop'n</a>
+ <a href="https://iidx.org/">beatmania IIDX Guide</a>
+ <a href="https://www.flashflashrevolution.com/">FlashFlashRevolution</a>
+ <a href="https://wiki.realmofespionage.xyz/start">wiki.realmofespionage</a>
+ <a href="https://www.newgrounds.com/">NewGrounds</a>
+ </div>
+ </article>
+
+ </section>
+</main>
+
+<footer>
+ <div class="footer-content">
+ <p>SYSTEM.VERSION: 2026.01 &bull; PROTOCOL: INDIE-WEB &bull; USER: SILLYLAIRD</p>
+ </div>
+</footer>
+
+</body>
+</html>
diff --git a/startpage/lain.png b/startpage/lain.png
new file mode 100644
index 0000000..792f486
--- /dev/null
+++ b/startpage/lain.png
Binary files differ
diff --git a/startpage/liivid.png b/startpage/liivid.png
new file mode 100644
index 0000000..6fdb36b
--- /dev/null
+++ b/startpage/liivid.png
Binary files differ
diff --git a/startpage/news.png b/startpage/news.png
new file mode 100644
index 0000000..32d2b8c
--- /dev/null
+++ b/startpage/news.png
Binary files differ
diff --git a/startpage/newspaper.png b/startpage/newspaper.png
new file mode 100644
index 0000000..8ace873
--- /dev/null
+++ b/startpage/newspaper.png
Binary files differ
diff --git a/startpage/noteback.gif b/startpage/noteback.gif
new file mode 100644
index 0000000..2630a60
--- /dev/null
+++ b/startpage/noteback.gif
Binary files differ
diff --git a/startpage/old-youtube-icon-75.png b/startpage/old-youtube-icon-75.png
new file mode 100644
index 0000000..b16d3ae
--- /dev/null
+++ b/startpage/old-youtube-icon-75.png
Binary files differ
diff --git a/startpage/roundcube.png b/startpage/roundcube.png
new file mode 100644
index 0000000..d972dbe
--- /dev/null
+++ b/startpage/roundcube.png
Binary files differ
diff --git a/startpage/shoppingcart.png b/startpage/shoppingcart.png
new file mode 100644
index 0000000..fe3f85e
--- /dev/null
+++ b/startpage/shoppingcart.png
Binary files differ
diff --git a/startpage/sm_logo.png b/startpage/sm_logo.png
new file mode 100644
index 0000000..f17bc70
--- /dev/null
+++ b/startpage/sm_logo.png
Binary files differ
diff --git a/startpage/somethingawful.png b/startpage/somethingawful.png
new file mode 100644
index 0000000..e462ec7
--- /dev/null
+++ b/startpage/somethingawful.png
Binary files differ
diff --git a/startpage/sonemic.png b/startpage/sonemic.png
new file mode 100644
index 0000000..f266a34
--- /dev/null
+++ b/startpage/sonemic.png
Binary files differ
diff --git a/startpage/sonymp3.png b/startpage/sonymp3.png
new file mode 100644
index 0000000..b627d5a
--- /dev/null
+++ b/startpage/sonymp3.png
Binary files differ
diff --git a/startpage/startpage.css b/startpage/startpage.css
new file mode 100644
index 0000000..51a1334
--- /dev/null
+++ b/startpage/startpage.css
@@ -0,0 +1,272 @@
+:root {
+ --bg: #000;
+ --text: #ddd;
+ --accent: #ff0000;
+ --gold: #C69214;
+ --border: #222;
+ --radius: 4px; /* Sharper edges for a retro feel */
+ --logo-size: clamp(80px, 10vw, 100px);
+ --fs-base: clamp(13px, 1vw, 15px);
+}
+
+* { box-sizing: border-box; }
+body {
+ margin: 0; background: var(--bg); color: var(--text);
+ font: 400 var(--fs-base) 'Source Code Pro', monospace;
+ line-height: 1.4; display: flex; flex-direction: column; min-height: 100vh;
+}
+
+a { color: var(--accent); text-decoration: none; transition: 0.1s; }
+a:hover { background: var(--accent); color: #000 !important; }
+
+/* Left-Aligned Container */
+header, main, footer {
+ width: 100%;
+ max-width: 1200px; /* Constrains width so it doesn't float too far right on wide screens */
+ margin: 0; /* Align to left */
+ padding: 20px 40px;
+}
+
+/* Header Layout */
+header {
+ display: flex;
+ flex-direction: row;
+ gap: 40px;
+ align-items: flex-start;
+ border-bottom: 2px solid var(--border);
+}
+
+.logo a img {
+ width: var(--logo-size);
+ height: auto;
+ border: 2px solid #000;
+ display: block;
+}
+
+/* Lain border: black normally, red on hover/focus */
+.logo a:hover img,
+.logo a:focus-visible img {
+ border-color: var(--accent);
+}
+
+.nav-columns {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
+ gap: 20px;
+ flex-grow: 1;
+ text-align: left;
+}
+
+.nav-group h3 {
+ color: var(--gold);
+ font-size: 0.8rem;
+ text-transform: uppercase;
+ margin: 0 0 10px 0;
+ letter-spacing: 1px;
+}
+
+.nav-list { display: flex; flex-direction: column; gap: 4px; }
+.nav-list a { font-size: 0.85rem; width: fit-content; }
+
+/* Search Section: Left Aligned */
+.search-section {
+ padding: 40px 0;
+ text-align: left;
+}
+
+.search-section h2 {
+ color: var(--gold);
+ margin-bottom: 15px;
+ font-size: 1.2rem;
+ font-weight: bold;
+}
+
+.search-box {
+ width: 100%;
+ max-width: 450px; /* Kept focused for readability */
+ background: #000;
+ border: 1px solid var(--border);
+ padding: 10px;
+ color: var(--accent);
+ font-family: inherit;
+ outline: none;
+}
+.search-box:focus { border-color: var(--accent); }
+
+.clock-container { margin-top: 15px; color: var(--text); font-size: 0.9rem; opacity: 0.8; }
+.clock-time { color: var(--accent); letter-spacing: 1px; }
+
+/* Grid Layout: Left Aligned */
+.grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
+ gap: 20px;
+ padding: 0;
+}
+
+.card {
+ border: 1px solid var(--border);
+ background: #050505;
+ padding: 15px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start; /* Items start on the left */
+ transition: 0.2s;
+}
+.card:hover { border-color: var(--accent); }
+
+.card .thumb {
+ width: 100%;
+ height: 70px;
+ display: flex;
+ align-items: center;
+ justify-content: flex-start; /* Align icon to left */
+ margin-bottom: 15px;
+ opacity: 0.7;
+}
+.card img { max-width: 80px; max-height: 100%; object-fit: contain; }
+
+.card-links {
+ font-size: 0.8rem;
+ border-top: 1px solid var(--border);
+ width: 100%;
+ padding-top: 12px;
+ text-align: left;
+}
+.card-links a { display: block; padding: 1px 0; }
+
+footer { border-top: 1px solid var(--border); margin-top: auto; color: #555; }
+
+/* Age-Restricted Nav Group */
+#age-restricted-content {
+ position: relative;
+ cursor: pointer;
+}
+#age-restricted-content.locked .nav-list {
+ filter: blur(8px);
+ opacity: 0.3;
+ pointer-events: none;
+ user-select: none;
+}
+#age-restricted-content.locked::after {
+ content: '18+ RESTRICTED - CLICK TO VERIFY';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: var(--accent);
+ font-size: 0.7rem;
+ white-space: nowrap;
+ pointer-events: none;
+ text-align: center;
+ font-weight: bold;
+}
+#age-restricted-content.unlocked { cursor: default; }
+
+/* Age Verification Modal */
+.age-modal {
+ position: fixed;
+ top: 0; left: 0;
+ width: 100%; height: 100%;
+ background: rgba(0, 0, 0, 0.95);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 9999;
+}
+.age-modal.hidden { display: none; }
+.age-modal-content {
+ background: #000;
+ border: 2px solid var(--accent);
+ padding: 30px;
+ max-width: 500px;
+ text-align: center;
+}
+.age-modal-content h2 {
+ color: var(--accent);
+ margin: 0 0 20px 0;
+ font-size: 1.3rem;
+}
+.age-modal-content p {
+ margin: 0 0 25px 0;
+ line-height: 1.6;
+}
+.age-modal-buttons {
+ display: flex;
+ gap: 15px;
+ justify-content: center;
+}
+.age-modal-btn {
+ padding: 10px 25px;
+ border: 1px solid var(--border);
+ background: #000;
+ color: var(--text);
+ font-family: inherit;
+ font-size: 0.9rem;
+ cursor: pointer;
+ transition: 0.2s;
+}
+.age-modal-btn:hover {
+ background: var(--accent);
+ color: #000;
+ border-color: var(--accent);
+}
+.age-modal-btn.deny:hover {
+ background: #555;
+ border-color: #555;
+}
+
+@media (max-width: 850px) {
+ header, main, footer { padding: 20px; }
+ header { flex-direction: column; }
+ .nav-columns { width: 100%; }
+ .age-modal-content { margin: 20px; padding: 20px; }
+}
+
+/* Additional styles for modal search box */
+.search-container {
+ animation: fadeIn 0.5s ease-in;
+}
+
+@keyframes fadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+.age-modal-content form button:hover {
+ background: var(--accent);
+ color: #000;
+ border-color: var(--accent);
+}
+
+.modal-search {
+ margin: 20px 0;
+ border-top: 1px solid var(--border);
+ padding-top: 20px;
+}
+
+.modal-search-hint {
+ margin-bottom: 10px;
+ font-size: 0.9rem;
+}
+
+.modal-search-form {
+ display: flex;
+ gap: 10px;
+}
+
+.modal-search-input {
+ flex-grow: 1;
+ border: 1px solid var(--border);
+ padding: 8px;
+ background: #000;
+ color: var(--text);
+}
+
+.modal-search-button {
+ padding: 8px 15px;
+ border: 1px solid var(--border);
+ background: #000;
+ color: var(--text);
+ cursor: pointer;
+}
diff --git a/startpage/startpage.js b/startpage/startpage.js
new file mode 100644
index 0000000..3fc9701
--- /dev/null
+++ b/startpage/startpage.js
@@ -0,0 +1,87 @@
+(function () {
+ function byId(id) {
+ return document.getElementById(id);
+ }
+
+ function updateClock() {
+ const dateEl = byId('realtime-date');
+ const timeEl = byId('realtime-clock');
+ if (!dateEl || !timeEl) return;
+
+ const now = new Date();
+ const options = { weekday: 'short', year: 'numeric', month: 'short', day: 'numeric' };
+ dateEl.textContent = now.toLocaleDateString(undefined, options).toUpperCase();
+ timeEl.textContent = now.toLocaleTimeString();
+ }
+
+ setInterval(updateClock, 1000);
+ updateClock();
+
+ // Age Verification System
+ let isVerified = false;
+
+ const content = byId('age-restricted-content');
+ const modal = byId('age-verification-modal');
+ const yesBtn = byId('age-verify-yes');
+ const noBtn = byId('age-verify-no');
+
+ function unlockContent() {
+ if (!content) return;
+ content.classList.remove('locked');
+ content.classList.add('unlocked');
+ content.removeEventListener('click', handleContentClick);
+ isVerified = true;
+ localStorage.setItem('ageVerified', 'true');
+ }
+
+ function showAgeModal() {
+ if (!modal) return;
+ modal.classList.remove('hidden');
+ }
+
+ function hideAgeModal() {
+ if (!modal) return;
+ modal.classList.add('hidden');
+ }
+
+ function handleContentClick(e) {
+ if (isVerified) return;
+
+ e.preventDefault();
+ e.stopPropagation();
+ showAgeModal();
+ }
+
+ function confirmAge(isOfAge) {
+ if (!modal) return;
+
+ if (isOfAge) {
+ unlockContent();
+ hideAgeModal();
+ alert('Age verified. You can now access restricted content.');
+ } else {
+ hideAgeModal();
+ window.location.href = 'https://www.google.com';
+ }
+ }
+
+ if (content && modal) {
+ const storedVerification = localStorage.getItem('ageVerified');
+ if (storedVerification === 'true') {
+ unlockContent();
+ } else {
+ showAgeModal();
+ }
+
+ content.addEventListener('click', handleContentClick);
+
+ if (yesBtn) yesBtn.addEventListener('click', function () { confirmAge(true); });
+ if (noBtn) noBtn.addEventListener('click', function () { confirmAge(false); });
+
+ document.addEventListener('keydown', function (e) {
+ if (e.altKey && e.key === 'a') {
+ showAgeModal();
+ }
+ });
+ }
+})();
diff --git a/startpage/test.html b/startpage/test.html
new file mode 100644
index 0000000..468bf82
--- /dev/null
+++ b/startpage/test.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Accurate Belleville, Ontario Weather</title>
+ <meta property="og:title" content="Accurate Belleville, Ontario Weather" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/startpage/test.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Accurate Belleville, Ontario Weather" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/startpage/test.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/startpage/test.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/startpage/test.html" />
+
+ <!-- Tailwind removed: custom CSS is used instead -->
+ <link rel="stylesheet" href="/assets/css/pages/startpage-test.css" />
+
+</head>
+<body>
+
+ <h1>Live Weather for Belleville, Ontario</h1>
+
+ <div class="responsive-container">
+ <div class="iframe-wrapper">
+ <!--
+ This iframe embeds the ENTIRE MSN Weather forecast page for Belleville, Ontario.
+ This provides accurate, dynamic weather data directly from MSN.
+ It will include all elements of their page (navigation, ads, map, forecast details).
+ -->
+ <iframe
+ src="https://www.msn.com/en-us/weather/forecast/in-Belleville,Ontario?loc=eyJsIjoiQmVsbGV2aWxsZSIsInIiOiJPbnRhcmlvIiwicjIiOiJIYXN0aW5ncyIsImMiOiJDYW5hZGEiLCJpIjoiQ0EiLCJ0IjoxMDIsImciOiJlbi11cyIsIngiOiItNzcuMzgyNiIsInk6IjQ0LjE2NCJ9&weadegreetype=F&content=AlertNowcast_wxalncrb"
+ title="Accurate Belleville, Ontario Weather Forecast from MSN"
+ sandbox="allow-scripts allow-same-origin allow-popups allow-forms allow-top-navigation"
+ allowfullscreen
+ >
+ Your browser does not support iframes. Please visit
+ <a href="https://www.msn.com/en-us/weather/forecast/in-Belleville,Ontario?loc=eyJsIjoiQmVsbGV2aWxsZSIsInIiOiJPbnRhcmlvIiwicjIiOiJIYXN0aW5ncyIsImMiOiJDYW5hZGEiLCJpIjoiQ0EiLCJ0IjoxMDIsImciOiJlbi11cyIsIngiOiItNzcuMzgyNiIsInk6IjQ0LjE2NCJ9&weadegreetype=F&content=AlertNowcast_wxalncrb" target="_blank" rel="noopener noreferrer">MSN Weather for Belleville</a> directly.
+ </iframe>
+ </div>
+ <div class="desc">
+ The live weather data above is provided directly from MSN Weather for Belleville, Ontario.<br/>
+ For a general weather overview:
+ <a href="https://www.ctvnews.ca/weather" target="_blank" rel="noopener noreferrer">CTV News Weather</a><br/>
+ For local flying conditions:
+ <a href="https://www.uavforecast.com/" target="_blank" rel="noopener noreferrer">UAV Forecast</a>
+ </div>
+ </div>
+
+</body>
+</html>
diff --git a/startpage/test.old b/startpage/test.old
new file mode 100644
index 0000000..a71ae9c
--- /dev/null
+++ b/startpage/test.old
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Accurate Belleville, Ontario Weather</title>
+ <style>
+ body {
+ font-family: 'Inter', sans-serif; /* Using Inter font */
+ margin: 0; /* Remove default body margin */
+ padding: 20px;
+ background-color: #f0f0f0;
+ display: flex;
+ flex-direction: column; /* Arrange content vertically */
+ justify-content: center;
+ align-items: center;
+ min-height: 100vh;
+ }
+
+ h1 {
+ text-align: center;
+ color: #333;
+ margin-bottom: 20px;
+ font-size: 2em; /* Larger heading */
+ }
+
+ .responsive-container {
+ width: 95%; /* Make it wider to accommodate the full page embed */
+ max-width: 1200px; /* Max width for larger screens to prevent it from getting too wide */
+ padding: 10px;
+ box-sizing: border-box;
+ border: 1px solid #ccc;
+ border-radius: 12px; /* Slightly larger rounded corners */
+ box-shadow: 0 6px 15px rgba(0, 0, 0, 0.15); /* More prominent shadow */
+ background-color: white;
+ margin-bottom: 20px;
+ overflow: hidden; /* Ensure content stays within rounded corners */
+ }
+
+ .iframe-wrapper {
+ position: relative;
+ /* Maintain an aspect ratio that suits a full webpage, e.g., 16:9 or taller */
+ /* A good starting point for a full webpage, adjust as needed for optimal viewing */
+ padding-bottom: 120%; /* Height will be 120% of the width, making it taller */
+ height: 0;
+ overflow: hidden;
+ border-radius: 8px; /* Slightly smaller rounded corners for inner frame */
+ }
+
+ .iframe-wrapper iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: none;
+ border-radius: 8px;
+ }
+
+ .desc {
+ padding: 15px;
+ text-align: center;
+ font-size: 1.1em;
+ color: #555;
+ line-height: 1.6;
+ }
+
+ .desc a {
+ color: #007bff;
+ text-decoration: none;
+ font-weight: bold;
+ transition: color 0.3s ease; /* Smooth transition for hover effect */
+ }
+
+ .desc a:hover {
+ text-decoration: underline;
+ color: #0056b3; /* Darker blue on hover */
+ }
+
+ /* Responsive adjustments for the container */
+ @media only screen and (max-width: 768px) {
+ .responsive-container {
+ width: 100%; /* Full width on smaller screens */
+ padding: 5px;
+ border-radius: 0; /* No rounded corners on very small screens for edge-to-edge */
+ }
+ .iframe-wrapper {
+ padding-bottom: 150%; /* Make it even taller on mobile if needed */
+ }
+ body {
+ padding: 10px;
+ }
+ }
+ </style>
+ <!-- Tailwind CSS is not strictly necessary as custom CSS is used, but included if you plan to use it -->
+ <script src="https://cdn.tailwindcss.com"></script>
+</head>
+<body>
+
+ <h1>Live Weather for Belleville, Ontario</h1>
+
+ <div class="responsive-container">
+ <div class="iframe-wrapper">
+ <!--
+ This iframe embeds the ENTIRE MSN Weather forecast page for Belleville, Ontario.
+ This provides accurate, dynamic weather data directly from MSN.
+ It will include all elements of their page (navigation, ads, map, forecast details).
+ -->
+ <iframe
+ src="https://www.msn.com/en-us/weather/forecast/in-Belleville,Ontario?loc=eyJsIjoiQmVsbGV2aWxsZSIsInIiOiJPbnRhcmlvIiwicjIiOiJIYXN0aW5ncyIsImMiOiJDYW5hZGEiLCJpIjoiQ0EiLCJ0IjoxMDIsImciOiJlbi11cyIsIngiOiItNzcuMzgyNiIsInk6IjQ0LjE2NCJ9&weadegreetype=F&content=AlertNowcast_wxalncrb"
+ title="Accurate Belleville, Ontario Weather Forecast from MSN"
+ sandbox="allow-scripts allow-same-origin allow-popups allow-forms allow-top-navigation"
+ allowfullscreen
+ >
+ Your browser does not support iframes. Please visit
+ <a href="https://www.msn.com/en-us/weather/forecast/in-Belleville,Ontario?loc=eyJsIjoiQmVsbGV2aWxsZSIsInIiOiJPbnRhcmlvIiwicjIiOiJIYXN0aW5ncyIsImMiOiJDYW5hZGEiLCJpIjoiQ0EiLCJ0IjoxMDIsImciOiJlbi11cyIsIngiOiItNzcuMzgyNiIsInk6IjQ0LjE2NCJ9&weadegreetype=F&content=AlertNowcast_wxalncrb" target="_blank" rel="noopener noreferrer">MSN Weather for Belleville</a> directly.
+ </iframe>
+ </div>
+ <div class="desc">
+ The live weather data above is provided directly from MSN Weather for Belleville, Ontario.<br/>
+ For a general weather overview:
+ <a href="https://www.ctvnews.ca/weather" target="_blank" rel="noopener noreferrer">CTV News Weather</a><br/>
+ For local flying conditions:
+ <a href="https://www.uavforecast.com/" target="_blank" rel="noopener noreferrer">UAV Forecast</a>
+ </div>
+ </div>
+
+</body>
+</html>
diff --git a/startpage/tf2.png b/startpage/tf2.png
new file mode 100644
index 0000000..bd3794a
--- /dev/null
+++ b/startpage/tf2.png
Binary files differ
diff --git a/startpage/tilde.png b/startpage/tilde.png
new file mode 100644
index 0000000..20e1184
--- /dev/null
+++ b/startpage/tilde.png
Binary files differ
diff --git a/startpage/videogame.png b/startpage/videogame.png
new file mode 100644
index 0000000..3e2adb4
--- /dev/null
+++ b/startpage/videogame.png
Binary files differ
diff --git a/startpage/wallpaper.jpg b/startpage/wallpaper.jpg
new file mode 100644
index 0000000..d67ac74
--- /dev/null
+++ b/startpage/wallpaper.jpg
Binary files differ
diff --git a/stepmania.png b/stepmania.png
new file mode 100644
index 0000000..232f349
--- /dev/null
+++ b/stepmania.png
Binary files differ
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..6fb6edc
--- /dev/null
+++ b/style.css
@@ -0,0 +1,282 @@
+/* Base Styles for Desktop View */
+
+
+
+.button1 {
+ background-color: black;
+ font-family: Comic Sans MS;
+ font-weight: 300;
+}
+
+h1 {
+ font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif;
+ font-size: 1.875rem; /* 30px / 16px (base font size) */
+ padding-left: 40px;
+}
+
+pre {
+ font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif;
+ font-size: 12px;
+ padding-left: 40px;
+}
+
+nav {
+ text-align: left;
+ float: left;
+ width: 30%;
+ padding: 20px;
+}
+/* Consider using flexbox for navigation for better alignment */
+nav a {
+ display: inline-block; /* Keep the anchor as a block or inline-block for better alignment */
+}
+
+article {
+ float: left;
+ padding: 20px;
+ width: 70%;
+}
+
+body {
+ background-color: #ffd;
+ margin: 0; /* Remove default margin */
+}
+/* Consider using viewport units for more responsive sizing */
+iframe {
+ display: block; /* iframes are inline by default */
+ height: 100vh; /* Set height to 100% of the viewport height */
+ width: 100vw; /* Set width to 100% of the viewport width */
+ border: none; /* Remove default border */
+ background: #ffd; /* Just for styling */
+}
+/* Use a more descriptive ID or consider a class */
+#design-cast {
+ position: relative;
+ overflow: hidden;
+}
+
+.member {
+ float: left;
+ width: calc(20% - 2%); /* Adjust width to account for margins */
+ margin: 1% 1% 45px 1%;
+}
+
+.name {
+ bottom: 0px;
+}
+
+.member img {
+ width: 50%;
+ display: block;
+}
+
+ul.flowxl {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 0;
+}
+
+ul.flowxl > li {
+ list-style-type: none;
+ text-align: center;
+ width: var(--xiconsize);
+ min-width: var(--xiconsize);
+ max-width: var(--xiconsize);
+ max-height: calc(var(--xiconsize) + 60px);
+ padding: 2px;
+ margin: 0.125rem; /* Use rem for margin */
+ overflow: hidden;
+ font-size: 1rem;
+ line-height: 1;
+}
+
+ul.flowxl > li > a {
+ display: block;
+ /* vertical-align: middle; This property is not applicable to block-level elements. It only affects inline or inline-block elements. */
+ line-height: 1;
+ font-size: 1.2rem;
+}
+
+ul.flowxl li > a > img,
+ul.flowxl li > img {
+ display: block;
+ border-radius: 9px;
+ width: auto;
+ max-width: var(--xiconsize);
+ max-height: var(--xiconsize);
+ overflow: hidden;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+ul.flowxl li > a > img[src$=".svg"] {
+ max-width: 170px;
+ max-height: 170px;
+}
+
+table {
+ overflow: auto;
+}
+
+p, a, li, figcaption, div, span {
+ overflow-wrap: anywhere;
+}
+
+.content {
+ margin-left: 0; /* Ensure no extra margin is added */
+}
+/* Consider using a more semantic element like <aside> */
+/* Styling for the sidebar */
+.sidebar {
+ position: fixed; /* Keeps it fixed on all devices */
+ right: 0; /* Align it on the right */
+ top: 0; /* Start from the top */
+ width: 300px; /* Fixed width for larger devices */
+ height: 100%; /* Full height of the screen */
+ background-color: #ffd; /* Background color */
+ border-left: 1px solid #ccc; /* Separate it from the content */
+ box-shadow: -2px 0 5px rgba(0, 0, 0, 0.2); /* Subtle shadow */
+ overflow-y: auto; /* Allow scrolling for long content */
+ z-index: 1000; /* Higher than other elements */
+ display: none; /* Hidden by default */
+ padding: 15px;
+ scroll-behavior: smooth;
+}
+/* Consider using focus styles for accessibility */
+
+.sidebar :link,
+.sidebar :visited {
+ color: #8B8A64;
+ text-decoration: none;
+ border-bottom: 1px dotted;
+}
+
+/* Ensure links are easy to click */
+.sidebar a {
+ display: block;
+ margin: 0.3125rem 0; /* Use rem */
+ font-size: 16px; /* Slightly larger font size */
+}
+
+/* Menu toggle button */
+#menu-toggle {
+ position: fixed; /* It stays on the screen while scrolling */
+ top: 20px; /* 20px from the top */
+ right: 20px; /* 20px from the right */
+ background-color: #ffd; /* Button background */
+ color: black; /* Text color */
+ border: 1px solid #ccc; /* Border for the button */
+ padding: 10px 15px; /* Spacing for button content */
+ cursor: pointer; /* Pointer cursor on hover */
+ font-family: inherit; /* Consistent font */
+ box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); /* Shadow for aesthetics */
+ z-index: 1001; /* Slightly above sidebar */
+}
+/* Use more modern hover styles */
+/* Menu button hover effect */
+#menu-toggle:hover {
+ background-color: #ffd;
+}
+
+/* Responsive Sidebar Styling */
+@media (max-width: 768px) {
+ .sidebar {
+ position: fixed; /* Makes it fixed to the viewport */
+ bottom: 0; /* Position it at the bottom */
+ right: 0; /* Align it to the right */
+ width: 250px; /* Set a consistent width */
+ max-height: 50%; /* Limit the height to not cover too much screen space */
+ overflow-y: auto; /* Enable scrolling if content overflows */
+ background-color: #ffd; /* Set a translucent background */
+ border: 1px solid #ccc; /* Add a border for clarity */
+ box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2); /* Add a shadow for hover effect */
+ z-index: 1000; /* Ensure it hovers over other elements */
+ padding: 15px;
+ }
+
+ .sidebar.active {
+ display: block; /* Allow display when active */
+ }
+
+ #menu-toggle {
+ top: 10px; /* Less padding on top for mobile */
+ right: 10px; /* Align closer to the edge */
+ padding: 8px 12px; /* Smaller button padding */
+ }
+
+ /* Consider using a container for content and sidebar for better layout control */
+ /* General layout adjustments for smaller screens */
+ body { /* Apply styles to a more specific container if possible */
+ font-size: 14px; /* Adjust font size globally for readability */
+ }
+}
+
+/* Force the lain.png image always on the far left */
+
+
+
+/* Mobile Styles */
+@media screen and (max-width: 768px) {
+ /* Adjust logo for smaller screens */
+ .logo {
+ position: static; /* Make it flow naturally */
+ width: 80px; /* Resize for mobile */
+ margin: 0 auto;
+ display: block;
+ }
+} /* Base styles for desktop */
+
+
+/* Responsive design for mobile (media query for screens smaller than 768px) */
+@media screen and (max-width: 768px) {
+ .contact-section {
+ margin: 0; /* Remove margin for smaller screens */
+ text-align: center; /* Center-align content for better readability on mobile */
+ max-width: 100%; /* Take up the full width of the screen */
+ }
+
+ .logo {
+ position: static; /* Allow the image to flow naturally in the layout */
+ width: 100px; /* Resize image for smaller devices */
+ height: auto; /* Keep proportional scaling */
+ } /* Removed extra closing bracket */
+}
+
+.country-img {
+ height: 12.5rem; /* Use rem units for height */
+ width: 250px; /* Desired width */
+ object-fit: contain; /* Scales image to fit within the box while maintaining aspect ratio */
+ max-width: 100%; /* Ensures responsiveness */
+}
+
+.countries {
+ flex-wrap: wrap; /* Ensures images wrap if they exceed container width */
+ gap: 10px; /* Adds spacing between images */
+ justify-content: center; /* Centers the images horizontally */ /* Added a comment to explain the purpose */
+}
+
+.vpn-logo {
+ width: 200px; /* Set max-width for scaling */
+ max-width: 100%; /* Responsive width */
+ height: auto; /* Maintain aspect ratio */
+ object-fit: contain; /* Handle scaling gracefully */
+}
+
+.toesu-logo {
+ width: 200px; /* Set the default width */
+ max-width: 100%; /* Ensure image scales on smaller screens */
+ height: auto; /* Maintain original aspect ratio */
+ object-fit: contain; /* Gracefully handle image scaling */
+}
+
+.container {
+ display: flex; /* Arrange items side by side */
+ align-items: flex-start; /* Align items to the top */
+}
+
+.item {
+ display: flex; /* Enable flex layout per item */
+ flex-direction: column; /* Stack text on top of the image */
+}
+/* Consider using a CSS reset or normalization library */
+@import url('https://fonts.googleapis.com/css2?family=Anonymous+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap'); \ No newline at end of file
diff --git a/sublime_text.png b/sublime_text.png
new file mode 100644
index 0000000..8be1c1f
--- /dev/null
+++ b/sublime_text.png
Binary files differ
diff --git a/submit.html b/submit.html
new file mode 100644
index 0000000..e4698f5
--- /dev/null
+++ b/submit.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta http-equiv="refresh" content="0;url=/guestbook-form.html" />
+ <title>Guestbook Submit Disabled</title>
+</head>
+<body>
+ <p>This local submit endpoint is disabled. Use <a href="/guestbook-form.html">guestbook form</a>.</p>
+</body>
+</html>
diff --git a/test.html b/test.html
new file mode 100644
index 0000000..e39cff2
--- /dev/null
+++ b/test.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="keywords" content="sillylaird, silly, laird, Laird, lonergan, dot ca, 90s website design, 90s dot ca">
+ <title>SillyLaird - Laird Lonergan</title>
+ <meta property="og:title" content="SillyLaird - Laird Lonergan" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/test.html" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird - Laird Lonergan" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/test.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/test.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/test.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/test_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/test_jp.html" />
+ <link rel="stylesheet" href="/assets/css/site.css">
+</head>
+<body>
+<header>
+ <nav><a href="/" aria-label="Homepage"><img src="lain.png" alt="Home" class="logo"></a></nav>
+</header>
+
+<table class="layout"><tr><td class="content"></td></tr></table>
+
+<button id="menu-toggle">Menu</button>
+<div id="mobile-sidebar" class="sidebar">
+ <h2>Quick Links</h2>
+ <p><a href="/">Homepage</a></p>
+ <p><a href="/startpage/">Startpage</a></p>
+ <p><a href="https://sillylaird.srht.site/">SRHT Site</a></p>
+ <p><a href="https://dev.sillylaird.ca">Dev Site</a></p>
+ <p><a href="https://blog.sillylaird.ca">Blog</a></p>
+ <p><a href="/journal">Journal</a></p>
+ <p><a href="/bookmarks">Bookmarks</a></p>
+ <p><a href="/multibox">MultiLogging (WIP)</a></p>
+ <p><a href="/accounts/">Accounts</a></p>
+ <p><a href="https://app.mediafire.com/ncph2tqkddpli">Stepmania Downloads</a></p>
+</div>
+
+<main>
+ <section class="contact-section">
+ <h2>Laird Lonergan</h2>
+ <p>Email: <tt>sillylaird@fastmail.ca</tt></p>
+ <p>XMPP:<br><tt>sillylaird@xmpp.jp<br>sillylaird@chat.moddedbear.xyz</tt></p>
+ <p>Signal: <tt>sillylaird.77</tt></p>
+ <p><a href="https://lolwut.info/comp/4chan/serious-business.html" class="no-hover-box">
+ <q class="s7e8ca45906">The Internet is Serious Business! (article by lolwut)</q></a></p>
+ <p><i class="s7e8ca45906">This site last modified on <span id="lastmod"></span></i></p>
+ </section>
+
+ <section>
+ <h2>This is how you say my name Laird</h2>
+ <audio controls><source src="Laird.mp3" type="audio/mpeg"></audio>
+ </section>
+
+ <hr>
+ <section>
+ <h2>2025 ChangeLog</h2>
+ <ul>
+ <li><strong>1 March 2025:</strong> Site style + sidebar updates</li>
+ <li><strong>9 Feb 2025:</strong> Toggle sidebar button added</li>
+ <li><strong>16 Jan 2025:</strong> Sidebar redesign with "Quick Links"</li>
+ <li><strong>14 Jan 2025:</strong> Color scheme and layout updates</li>
+ <li><strong>1 Jan 2025:</strong> New year update & changelog archive</li>
+ </ul>
+ <p>
+ <a href="https://changelog.sillylaird.ca/2025-changelog.txt">2025</a>,
+ <a href="https://changelog.sillylaird.ca/2024-changelog.txt">2024</a>,
+ <a href="https://changelog.sillylaird.ca/2023-changelog.txt">2023</a>
+ </p>
+ </section>
+
+ <hr>
+ <section>
+ <h2>Friends</h2>
+ <p>Cool people to follow, hire, or support:</p>
+ <div class="links-container">
+ <ul>
+ <li><a href="https://kfarwell.org/">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info/">lolwut</a></li>
+ <li><a href="http://shystudios.us/">shystudios</a></li>
+ <li><a href="https://www.twitch.tv/mrdinklepuss">MrDinklepuss</a></li>
+ <li><a href="https://www.webtoons.com/...">MrsDinklepuss</a></li>
+ </ul>
+ <ul>
+ <li><a href="https://moddedbear.com/">bear</a></li>
+ <li><a href="https://web.archive.org/...">urof</a></li>
+ <li><a href="https://risingthumb.xyz/">risingthumb</a></li>
+ <li><a href="https://idkwhatthisis.serv00.net/">Star</a></li>
+ <li><a href="https://kans3n.codeberg.page/">Kans3n</a></li>
+ </ul>
+ </div>
+ </section>
+
+ <hr>
+ <iframe id="myIframe" src="./guestbook.html"></iframe>
+
+ <section>
+ <h2>Misc</h2>
+ <ul class="flowxl">
+ <li><a href="vidlii/vidlii-old-youtube.html"><img src="Vidlii6.png" alt="Vidlii" width="288" height="216">Vidlii</a></li>
+ <li><a href="gaming/runescape2.html"><img src="runescape2.png" alt="RuneScape2" width="150" height="216">RuneScape2</a></li>
+ <li><a href="specialforce/index.html"><img src="sflogo.jpg" alt="SpecialForce" width="238" height="262">SoldierFront</a></li>
+ </ul>
+ </section>
+
+ <hr>
+ <section class="container">
+ <div class="item">
+ <strong>Edited by JetBrains IDE</strong>
+ <img src="jetbrain.png" alt="JetBrains" height="200" width="250">
+ </div>
+ <div class="item">
+ <strong>Made on Windows</strong>
+ <img src="made-with-windows.png" alt="Made with Windows">
+ </div>
+ </section>
+
+ <section>
+ <p><strong>WTFPL License</strong><br><a href="wtfpl.txt"><img src="wtfpl.png" alt="WTFPL"></a></p>
+ <p><strong>Freedom of Speech Supporter</strong><br><a href="https://www.eff.org/blueribbon.html"><img src="rib_bar_wh.png" alt="EFF Ribbon"></a></p>
+ <div class="countries">
+ <a href="https://www.canada.ca/en.html"><img src="canada.png" alt="Canada"></a>
+ <a href="http://www.naenara.com.kp/main/index/en/first"><img src="northkorea.png" alt="North Korea"></a>
+ <a href="https://english.www.gov.cn/"><img src="china.png" alt="China"></a>
+ <a href="http://government.ru/en/"><img src="russia.png" alt="Russia"></a>
+ </div>
+ </section>
+
+ <section>
+ <p><strong>Encyclopedia Dramatica</strong><br><a href="https://edramatica.com/Main_Page"><img src="https://edramatica.com/images/d/d1/Aeplaine.gif" alt="ED"></a></p>
+ <p><strong>ToeSU</strong><br><a href="https://www.dinklemerch.com/toesu-pedals"><img src="toesu.jpg" alt="ToeSU"></a></p>
+ <p><strong>VPNs</strong><br><a href="https://refer-nordvpn.com/qSDeQqebcxI"><img src="nordvpn.png" alt="NordVPN"></a>
+ <a href="https://nicelandvpn.lemonsqueezy.com?aff=m7X09"><img src="niceland.png" alt="NiceLand VPN"></a></p>
+ <p>Hosted by <a href="https://client.elixior.cloud?ref=2296"><img src="elixior.png" alt="Elixior" height="200" width="250"></a></p>
+ </section>
+</main>
+
+
+
+ <script defer src="/assets/js/pages/test.js"></script>
+</body>
+</html>
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..8902861
--- /dev/null
+++ b/test.txt
@@ -0,0 +1,24 @@
+⠀⠀⠀⠀⠀⠀⢀⣤⣀⣀⣀⠀⠻⣷⣄
+⠀⠀⠀⠀⢀⣴⣿⣿⣿⡿⠋⠀⠀⠀⠹⣿⣦⡀
+⠀⠀⢀⣴⣿⣿⣿⣿⣏⠀⠀⠀⠀⠀⠀⢹⣿⣧
+⠀⠀⠙⢿⣿⡿⠋⠻⣿⣿⣦⡀⠀⠀⠀⢸⣿⣿⡆
+⠀⠀⠀⠀⠉⠀⠀⠀⠈⠻⣿⣿⣦⡀⠀⢸⣿⣿⡇
+⠀⠀⠀⠀⢀⣀⣄⡀⠀⠀⠈⠻⣿⣿⣶⣿⣿⣿⠁
+⠀⠀⠀⣠⣿⣿⢿⣿⣶⣶⣶⣶⣾⣿⣿⣿⣿⡁
+⢠⣶⣿⣿⠋⠀⠀⠉⠛⠿⠿⠿⠿⠿⠛⠻⣿⣿⣦⡀
+⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⡿
+
+
+ _,,ddF"""Ybb,,_
+ ,d@#@#@#@g, `"Yb,
+ ,d#@#V``V@#@#b "b,
+ d@#@#I I@#@8 "b
+d@#@#@#A..A@#@#P `b
+8#@#@#@#@#@#@8" 8
+8@#@#@#@#@#@J 8
+8#@#@#@#@#P 8
+Y@#@#@#@#P ,db, ,P
+ Y@#@#@#@) @DWB aP
+ "Y#@#@#b `69' aP"
+ "Y@#@#g,, _,dP"
+ `""YBBgggddP""'
diff --git a/test_jp.html b/test_jp.html
new file mode 100644
index 0000000..1d804e4
--- /dev/null
+++ b/test_jp.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="keywords" content="sillylaird, silly, laird, Laird, lonergan, dot ca, 90s website design, 90s dot ca">
+ <title>SillyLaird - Laird Lonergan</title>
+ <meta property="og:title" content="SillyLaird - Laird Lonergan" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/test_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird - Laird Lonergan" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/test_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/test.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/test.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/test_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/test_jp.html" />
+ <link rel="stylesheet" href="/assets/css/site.css">
+</head>
+<body>
+<header>
+ <nav><a href="/" aria-label="ホームpage"><img src="lain.png" alt="ホーム" class="logo"></a></nav>
+</header>
+
+<table class="layout"><tr><td class="content"></td></tr></table>
+
+<button id="menu-toggle">メニュー</button>
+<div id="mobile-sidebar" class="sidebar">
+ <h2>Quick Links</h2>
+ <p><a href="/">ホームpage</a></p>
+ <p><a href="/startpage/">Startpage</a></p>
+ <p><a href="https://sillylaird.srht.site/">SRHT Site</a></p>
+ <p><a href="https://dev.sillylaird.ca">Dev Site</a></p>
+ <p><a href="https://blog.sillylaird.ca">ブログ</a></p>
+ <p><a href="/journal">ジャーナル</a></p>
+ <p><a href="/bookmarks">ブックマーク</a></p>
+ <p><a href="/multibox">MultiLogging (WIP)</a></p>
+ <p><a href="/accounts/">アカウント</a></p>
+ <p><a href="https://app.mediafire.com/ncph2tqkddpli">Stepmania Downloads</a></p>
+</div>
+
+<main>
+ <section class="contact-section">
+ <h2>Laird Lonergan</h2>
+ <p>Email: <tt>sillylaird@fastmail.ca</tt></p>
+ <p>XMPP:<br><tt>sillylaird@xmpp.jp<br>sillylaird@chat.moddedbear.xyz</tt></p>
+ <p>Signal: <tt>sillylaird.77</tt></p>
+ <p><a href="https://lolwut.info/comp/4chan/serious-business.html" class="no-hover-box">
+ <q class="s7e8ca45906">The Internet is Serious Business! (article by lolwut)</q></a></p>
+ <p><i class="s7e8ca45906">This site last modified on <span id="lastmod"></span></i></p>
+ </section>
+
+ <section>
+ <h2>This is how you say my name Laird</h2>
+ <audio controls><source src="Laird.mp3" type="audio/mpeg"></audio>
+ </section>
+
+ <hr>
+ <section>
+ <h2>2025 ChangeLog</h2>
+ <ul>
+ <li><strong>1 March 2025:</strong> Site style + sidebar updates</li>
+ <li><strong>9 Feb 2025:</strong> Toggle sidebar button added</li>
+ <li><strong>16 Jan 2025:</strong> Sidebar redesign with "Quick Links"</li>
+ <li><strong>14 Jan 2025:</strong> Color scheme and layout updates</li>
+ <li><strong>1 Jan 2025:</strong> New year update & changelog archive</li>
+ </ul>
+ <p>
+ <a href="https://changelog.sillylaird.ca/2025-changelog.txt">2025</a>,
+ <a href="https://changelog.sillylaird.ca/2024-changelog.txt">2024</a>,
+ <a href="https://changelog.sillylaird.ca/2023-changelog.txt">2023</a>
+ </p>
+ </section>
+
+ <hr>
+ <section>
+ <h2>友達</h2>
+ <p>Cool people to follow, hire, or support:</p>
+ <div class="links-container">
+ <ul>
+ <li><a href="https://kfarwell.org/">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info/">lolwut</a></li>
+ <li><a href="http://shystudios.us/">shystudios</a></li>
+ <li><a href="https://www.twitch.tv/mrdinklepuss">MrDinklepuss</a></li>
+ <li><a href="https://www.webtoons.com/...">MrsDinklepuss</a></li>
+ </ul>
+ <ul>
+ <li><a href="https://moddedbear.com/">bear</a></li>
+ <li><a href="https://web.archive.org/...">urof</a></li>
+ <li><a href="https://risingthumb.xyz/">risingthumb</a></li>
+ <li><a href="https://idkwhatthisis.serv00.net/">Star</a></li>
+ <li><a href="https://kans3n.codeberg.page/">Kans3n</a></li>
+ </ul>
+ </div>
+ </section>
+
+ <hr>
+ <iframe id="myIframe" src="./guestbook.html"></iframe>
+
+ <section>
+ <h2>Misc</h2>
+ <ul class="flowxl">
+ <li><a href="vidlii/vidlii-old-youtube.html"><img src="Vidlii6.png" alt="Vidlii" width="288" height="216">Vidlii</a></li>
+ <li><a href="gaming/runescape2.html"><img src="runescape2.png" alt="RuneScape2" width="150" height="216">RuneScape2</a></li>
+ <li><a href="specialforce/index.html"><img src="sflogo.jpg" alt="SpecialForce" width="238" height="262">SoldierFront</a></li>
+ </ul>
+ </section>
+
+ <hr>
+ <section class="container">
+ <div class="item">
+ <strong>Edited by JetBrains IDE</strong>
+ <img src="jetbrain.png" alt="JetBrains" height="200" width="250">
+ </div>
+ <div class="item">
+ <strong>Made on Windows</strong>
+ <img src="made-with-windows.png" alt="Made with Windows">
+ </div>
+ </section>
+
+ <section>
+ <p><strong>WTFPL License</strong><br><a href="wtfpl.txt"><img src="wtfpl.png" alt="WTFPL"></a></p>
+ <p><strong>Freedom of Speech Supporter</strong><br><a href="https://www.eff.org/blueribbon.html"><img src="rib_bar_wh.png" alt="EFF Ribbon"></a></p>
+ <div class="countries">
+ <a href="https://www.canada.ca/en.html"><img src="canada.png" alt="Canada"></a>
+ <a href="http://www.naenara.com.kp/main/index/en/first"><img src="northkorea.png" alt="North Korea"></a>
+ <a href="https://english.www.gov.cn/"><img src="china.png" alt="China"></a>
+ <a href="http://government.ru/en/"><img src="russia.png" alt="Russia"></a>
+ </div>
+ </section>
+
+ <section>
+ <p><strong>Encyclopedia Dramatica</strong><br><a href="https://edramatica.com/Main_Page"><img src="https://edramatica.com/images/d/d1/Aeplaine.gif" alt="ED"></a></p>
+ <p><strong>ToeSU</strong><br><a href="https://www.dinklemerch.com/toesu-pedals"><img src="toesu.jpg" alt="ToeSU"></a></p>
+ <p><strong>VPNs</strong><br><a href="https://refer-nordvpn.com/qSDeQqebcxI"><img src="nordvpn.png" alt="NordVPN"></a>
+ <a href="https://nicelandvpn.lemonsqueezy.com?aff=m7X09"><img src="niceland.png" alt="NiceLand VPN"></a></p>
+ <p>Hosted by <a href="https://client.elixior.cloud?ref=2296"><img src="elixior.png" alt="Elixior" height="200" width="250"></a></p>
+ </section>
+</main>
+
+
+
+ <script defer src="/assets/js/pages/test_jp.js"></script>
+</body>
+</html>
diff --git a/test_zh.html b/test_zh.html
new file mode 100644
index 0000000..9f75b8e
--- /dev/null
+++ b/test_zh.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html lang="zh">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="keywords" content="sillylaird, silly, laird, Laird, lonergan, dot ca, 90s website design, 90s dot ca">
+ <title>SillyLaird - Laird Lonergan</title>
+ <meta property="og:title" content="SillyLaird - Laird Lonergan" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/test_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="SillyLaird - Laird Lonergan" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/test_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/test.html" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/test.html" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/test_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/test_jp.html" />
+<link rel="stylesheet" href="/assets/css/site.css">
+</head>
+<body>
+<header>
+ <nav><a href="/" aria-label="首页page"><img src="lain.png" alt="首页" class="logo"></a></nav>
+</header>
+
+<table class="layout"><tr><td class="content"></td></tr></table>
+
+<button id="menu-toggle">菜单</button>
+<div id="mobile-sidebar" class="sidebar">
+ <h2>Quick Links</h2>
+ <p><a href="/">首页page</a></p>
+ <p><a href="/startpage/">Startpage</a></p>
+ <p><a href="https://sillylaird.srht.site/">SRHT Site</a></p>
+ <p><a href="https://dev.sillylaird.ca">Dev Site</a></p>
+ <p><a href="https://blog.sillylaird.ca">博客</a></p>
+ <p><a href="/journal">日志</a></p>
+ <p><a href="/bookmarks">书签</a></p>
+ <p><a href="/multibox">MultiLogging (WIP)</a></p>
+ <p><a href="/accounts/">账户</a></p>
+ <p><a href="https://app.mediafire.com/ncph2tqkddpli">Stepmania Downloads</a></p>
+</div>
+
+<main>
+ <section class="contact-section">
+ <h2>Laird Lonergan</h2>
+ <p>Email: <tt>sillylaird@fastmail.ca</tt></p>
+ <p>XMPP:<br><tt>sillylaird@xmpp.jp<br>sillylaird@chat.moddedbear.xyz</tt></p>
+ <p>Signal: <tt>sillylaird.77</tt></p>
+ <p><a href="https://lolwut.info/comp/4chan/serious-business.html" class="no-hover-box">
+ <q class="s7e8ca45906">The Internet is Serious Business! (article by lolwut)</q></a></p>
+ <p><i class="s7e8ca45906">This 网站 last modified on <span id="lastmod"></span></i></p>
+ </section>
+
+ <section>
+ <h2>This is how you say my name Laird</h2>
+ <audio controls><source src="Laird.mp3" type="audio/mpeg"></audio>
+ </section>
+
+ <hr>
+ <section>
+ <h2>2025 ChangeLog</h2>
+ <ul>
+ <li><strong>1 March 2025:</strong> Site style + sidebar updates</li>
+ <li><strong>9 Feb 2025:</strong> Toggle sidebar button added</li>
+ <li><strong>16 Jan 2025:</strong> Sidebar redesign with "Quick Links"</li>
+ <li><strong>14 Jan 2025:</strong> Color scheme and layout updates</li>
+ <li><strong>1 Jan 2025:</strong> New year update & changelog archive</li>
+ </ul>
+ <p>
+ <a href="https://changelog.sillylaird.ca/2025-changelog.txt">2025</a>,
+ <a href="https://changelog.sillylaird.ca/2024-changelog.txt">2024</a>,
+ <a href="https://changelog.sillylaird.ca/2023-changelog.txt">2023</a>
+ </p>
+ </section>
+
+ <hr>
+ <section>
+ <h2>朋友们</h2>
+ <p>Cool people to follow, hire, or support:</p>
+ <div class="links-container">
+ <ul>
+ <li><a href="https://kfarwell.org/">Kyle Farwell</a></li>
+ <li><a href="https://lolwut.info/">lolwut</a></li>
+ <li><a href="http://shystudios.us/">shystudios</a></li>
+ <li><a href="https://www.twitch.tv/mrdinklepuss">MrDinklepuss</a></li>
+ <li><a href="https://www.webtoons.com/...">MrsDinklepuss</a></li>
+ </ul>
+ <ul>
+ <li><a href="https://moddedbear.com/">bear</a></li>
+ <li><a href="https://web.archive.org/...">urof</a></li>
+ <li><a href="https://risingthumb.xyz/">risingthumb</a></li>
+ <li><a href="https://idkwhatthisis.serv00.net/">Star</a></li>
+ <li><a href="https://kans3n.codeberg.page/">Kans3n</a></li>
+ </ul>
+ </div>
+ </section>
+
+ <hr>
+ <iframe id="myIframe" src="./guestbook.html"></iframe>
+
+ <section>
+ <h2>Misc</h2>
+ <ul class="flowxl">
+ <li><a href="vidlii/vidlii-old-youtube.html"><img src="Vidlii6.png" alt="Vidlii" width="288" height="216">Vidlii</a></li>
+ <li><a href="gaming/runescape2.html"><img src="runescape2.png" alt="RuneScape2" width="150" height="216">RuneScape2</a></li>
+ <li><a href="specialforce/index.html"><img src="sflogo.jpg" alt="SpecialForce" width="238" height="262">SoldierFront</a></li>
+ </ul>
+ </section>
+
+ <hr>
+ <section class="container">
+ <div class="item">
+ <strong>Edited by JetBrains IDE</strong>
+ <img src="jetbrain.png" alt="JetBrains" height="200" width="250">
+ </div>
+ <div class="item">
+ <strong>Made on Windows</strong>
+ <img src="made-with-windows.png" alt="Made with Windows">
+ </div>
+ </section>
+
+ <section>
+ <p><strong>WTFPL License</strong><br><a href="wtfpl.txt"><img src="wtfpl.png" alt="WTFPL"></a></p>
+ <p><strong>Freedom of Speech Supporter</strong><br><a href="https://www.eff.org/blueribbon.html"><img src="rib_bar_wh.png" alt="EFF Ribbon"></a></p>
+ <div class="countries">
+ <a href="https://www.canada.ca/en.html"><img src="canada.png" alt="Canada"></a>
+ <a href="http://www.naenara.com.kp/main/index/en/first"><img src="northkorea.png" alt="North Korea"></a>
+ <a href="https://english.www.gov.cn/"><img src="china.png" alt="China"></a>
+ <a href="http://government.ru/en/"><img src="russia.png" alt="Russia"></a>
+ </div>
+ </section>
+
+ <section>
+ <p><strong>Encyclopedia Dramatica</strong><br><a href="https://edramatica.com/Main_Page"><img src="https://edramatica.com/images/d/d1/Aeplaine.gif" alt="ED"></a></p>
+ <p><strong>ToeSU</strong><br><a href="https://www.dinklemerch.com/toesu-pedals"><img src="toesu.jpg" alt="ToeSU"></a></p>
+ <p><strong>VPNs</strong><br><a href="https://refer-nordvpn.com/qSDeQqebcxI"><img src="nordvpn.png" alt="NordVPN"></a>
+ <a href="https://nicelandvpn.lemonsqueezy.com?aff=m7X09"><img src="niceland.png" alt="NiceLand VPN"></a></p>
+ <p>Hosted by <a href="https://client.elixior.cloud?ref=2296"><img src="elixior.png" alt="Elixior" height="200" width="250"></a></p>
+ </section>
+</main>
+
+
+
+ <script defer src="/assets/js/pages/test_zh.js"></script>
+</body>
+</html>
diff --git a/toesu.jpg b/toesu.jpg
new file mode 100644
index 0000000..eaf4115
--- /dev/null
+++ b/toesu.jpg
Binary files differ
diff --git a/tools/README.md b/tools/README.md
new file mode 100644
index 0000000..e7cd71f
--- /dev/null
+++ b/tools/README.md
@@ -0,0 +1,10 @@
+# Tools
+
+Small maintenance helpers. No generator required.
+
+- `python tools/link_check.py` — check internal href/src targets exist
+- `python tools/html_audit.py` — quick a11y/markup audit (ids, alt, iframe titles, rel=noopener)
+- `python tools/generate_sitemap.py` — rebuild `sitemap.xml` with lastmod dates
+- `python tools/translate_pages.py` — generate `*_zh.html` and `*_jp.html` (except `startpage/`)
+- `./tools/backup.sh` — create a tar.gz backup (set `BACKUP_DIR` to override destination)
+- `./tools/uptime_check.sh` — curl-based uptime check (set `URL` to override target)
diff --git a/tools/__pycache__/translate_pages.cpython-312.pyc b/tools/__pycache__/translate_pages.cpython-312.pyc
new file mode 100644
index 0000000..dd9d69e
--- /dev/null
+++ b/tools/__pycache__/translate_pages.cpython-312.pyc
Binary files differ
diff --git a/tools/backup.sh b/tools/backup.sh
new file mode 100644
index 0000000..36790bf
--- /dev/null
+++ b/tools/backup.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+BACKUP_DIR="${BACKUP_DIR:-/tmp/www.sillylaird.ca-backups}"
+
+mkdir -p "$BACKUP_DIR"
+TS=$(date -u +"%Y%m%d-%H%M%S")
+ARCHIVE="$BACKUP_DIR/www.sillylaird.ca-$TS.tar.gz"
+
+tar -czf "$ARCHIVE" -C "$ROOT_DIR" .
+
+echo "Backup written to $ARCHIVE"
diff --git a/tools/generate_sitemap.py b/tools/generate_sitemap.py
new file mode 100644
index 0000000..4d34cd7
--- /dev/null
+++ b/tools/generate_sitemap.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python3
+"""Generate sitemap.xml from local HTML files."""
+
+from __future__ import annotations
+
+from pathlib import Path
+from datetime import datetime, timezone
+import re
+
+ROOT = Path(__file__).resolve().parents[1]
+SITE = "https://www.sillylaird.ca"
+
+EXCLUDE_FILES = {
+ "404.html",
+ "50x.html",
+}
+EXCLUDE_DIRS = {"partials", ".git"}
+
+
+def should_skip(path: Path) -> bool:
+ if any(part in EXCLUDE_DIRS for part in path.parts):
+ return True
+ if path.name.endswith("~"):
+ return True
+ if path.name in EXCLUDE_FILES:
+ return True
+ return False
+
+
+def url_for_path(path: Path) -> str:
+ rel = path.relative_to(ROOT).as_posix()
+ if rel == "index.html":
+ return SITE + "/"
+ if rel.endswith("/index.html"):
+ return SITE + "/" + rel[:-len("index.html")]
+ return SITE + "/" + rel
+
+
+def lastmod_for_path(path: Path) -> str:
+ ts = path.stat().st_mtime
+ dt = datetime.fromtimestamp(ts, tz=timezone.utc)
+ return dt.strftime("%Y-%m-%d")
+
+
+def main() -> int:
+ urls = []
+ for html in ROOT.rglob("*.html"):
+ if should_skip(html):
+ continue
+ urls.append((url_for_path(html), lastmod_for_path(html)))
+
+ urls.sort(key=lambda item: item[0])
+
+ lines = [
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
+ '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
+ ]
+ for loc, lastmod in urls:
+ lines.append(" <url>")
+ lines.append(f" <loc>{loc}</loc>")
+ lines.append(f" <lastmod>{lastmod}</lastmod>")
+ lines.append(" </url>")
+ lines.append("</urlset>")
+
+ (ROOT / "sitemap.xml").write_text("\n".join(lines) + "\n", encoding="utf-8")
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/tools/html_audit.py b/tools/html_audit.py
new file mode 100644
index 0000000..4e85c36
--- /dev/null
+++ b/tools/html_audit.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+"""Lightweight HTML audit for common a11y/markup issues."""
+
+from __future__ import annotations
+
+from html.parser import HTMLParser
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parents[1]
+
+SKIP_DIRS = {"partials", ".git"}
+SKIP_FILES = {
+ "test.html",
+ "test_jp.html",
+ "test_zh.html",
+ "startpage/test.html",
+}
+
+
+class AuditParser(HTMLParser):
+ def __init__(self) -> None:
+ super().__init__()
+ self.ids: dict[str, int] = {}
+ self.duplicate_ids: set[str] = set()
+ self.missing_alt: list[str] = []
+ self.missing_iframe_title: list[str] = []
+ self.blank_rel: list[str] = []
+
+ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
+ attr_map = {k.lower(): (v or "") for k, v in attrs}
+
+ if "id" in attr_map:
+ ident = attr_map["id"]
+ if ident:
+ if ident in self.ids:
+ self.duplicate_ids.add(ident)
+ self.ids[ident] = self.ids.get(ident, 0) + 1
+
+ if tag == "img":
+ if "alt" not in attr_map:
+ src = attr_map.get("src", "")
+ self.missing_alt.append(src)
+
+ if tag == "iframe":
+ if not attr_map.get("title", ""):
+ src = attr_map.get("src", "")
+ self.missing_iframe_title.append(src)
+
+ if tag == "a":
+ if attr_map.get("target", "") == "_blank":
+ rel = attr_map.get("rel", "")
+ if "noopener" not in rel:
+ href = attr_map.get("href", "")
+ self.blank_rel.append(href)
+
+
+def main() -> int:
+ issues = []
+
+ for html in ROOT.rglob("*.html"):
+ if any(part in SKIP_DIRS for part in html.parts):
+ continue
+ rel = html.relative_to(ROOT).as_posix()
+ if rel in SKIP_FILES:
+ continue
+
+ parser = AuditParser()
+ parser.feed(html.read_text(encoding="utf-8", errors="ignore"))
+
+ if parser.duplicate_ids:
+ issues.append((rel, "duplicate-ids", sorted(parser.duplicate_ids)))
+ if parser.missing_alt:
+ issues.append((rel, "img-missing-alt", parser.missing_alt))
+ if parser.missing_iframe_title:
+ issues.append((rel, "iframe-missing-title", parser.missing_iframe_title))
+ if parser.blank_rel:
+ issues.append((rel, "target-blank-missing-noopener", parser.blank_rel))
+
+ if not issues:
+ print("OK: no audit issues found")
+ return 0
+
+ print("HTML audit issues:")
+ for rel, kind, items in issues:
+ print(f"- {rel}: {kind}")
+ for item in items[:10]:
+ print(f" - {item}")
+ if len(items) > 10:
+ print(f" - ... ({len(items) - 10} more)")
+ return 1
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/tools/link_check.py b/tools/link_check.py
new file mode 100644
index 0000000..246eaf8
--- /dev/null
+++ b/tools/link_check.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+"""Very small internal link checker.
+
+Checks:
+- href="/path" and src="/path" for local files
+- Only checks local paths (starting with / or relative), skips http(s), mailto, xmpp, onion, etc.
+
+Usage:
+ python tools/link_check.py
+"""
+
+from __future__ import annotations
+
+import re
+from pathlib import Path
+
+
+ROOT = Path(__file__).resolve().parents[1]
+
+SKIP_DIRS = {".git"}
+SKIP_FILES = {
+ "test.html",
+ "test_jp.html",
+ "test_zh.html",
+ "startpage/test.html",
+}
+
+RE_URL = re.compile(r"\b(?:href|src)=(['\"])(.*?)\1", re.I)
+
+
+def is_external(u: str) -> bool:
+ u = u.strip()
+ return (
+ u.startswith("http://")
+ or u.startswith("https://")
+ or u.startswith("mailto:")
+ or u.startswith("xmpp:")
+ or u.startswith("signal:")
+ or u.startswith("data:")
+ or u.startswith("javascript:")
+ or u.startswith("#")
+ or u.startswith("//")
+ or u.endswith(".onion/")
+ or ".onion" in u
+ )
+
+
+def normalize(p: Path, url: str) -> Path | None:
+ url = url.split("#", 1)[0].split("?", 1)[0].strip()
+ if not url:
+ return None
+ if is_external(url):
+ return None
+
+ if url.startswith("/"):
+ return (ROOT / url.lstrip("/")).resolve()
+
+ # relative
+ return (p.parent / url).resolve()
+
+
+def main() -> int:
+ missing = []
+ for html in ROOT.rglob("*.html"):
+ if any(part in SKIP_DIRS for part in html.parts):
+ continue
+ rel = html.relative_to(ROOT).as_posix()
+ if rel in SKIP_FILES:
+ continue
+ text = html.read_text(encoding="utf-8", errors="ignore")
+ for m in RE_URL.finditer(text):
+ url = m.group(2)
+ target = normalize(html, url)
+ if not target:
+ continue
+ # if it points to a directory, allow index.html
+ if target.is_dir():
+ if (target / "index.html").exists():
+ continue
+ if not target.exists():
+ missing.append((str(html.relative_to(ROOT)), url))
+
+ if missing:
+ print("Missing local links:")
+ for src, url in missing:
+ print(f"- {src}: {url}")
+ return 1
+
+ print("OK: no missing local href/src found")
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/tools/translate_pages.py b/tools/translate_pages.py
new file mode 100644
index 0000000..3127d66
--- /dev/null
+++ b/tools/translate_pages.py
@@ -0,0 +1,258 @@
+#!/usr/bin/env python3
+"""Generate zh/jp copies of all HTML pages (except startpage/).
+
+This is a best-effort, offline translation helper.
+
+- It copies each *.html to *_zh.html and *_jp.html (same directory).
+- It preserves all HTML structure, links, ids, classes.
+- It translates only user-visible text nodes and some common attributes.
+- It skips anything under "startpage/".
+
+Notes:
+- This is not a static site generator. It only writes additional files.
+- Translation quality depends on the dictionaries below.
+"""
+
+from __future__ import annotations
+
+import os
+import re
+from pathlib import Path
+
+
+ROOT = Path(__file__).resolve().parents[1]
+
+
+SKIP_DIRS = {
+ "startpage",
+ "mstartpage",
+ "partials",
+}
+
+
+# Tags whose text content should not be translated.
+SKIP_TAGS = {
+ "script",
+ "style",
+ "code",
+ "pre",
+ "kbd",
+ "samp",
+}
+
+
+# Very small phrase dictionaries (hand-tuned for this repo).
+# For anything not in the dictionary, we leave the text as-is.
+ZH = {
+ "Skip to content": "跳至内容",
+ "Menu": "菜单",
+ "Language": "语言",
+ "Home": "首页",
+ "StartPage": "StartPage",
+ "Blog": "博客",
+ "Guestbook": "留言板",
+ "Journal": "日志",
+ "Diary": "日记",
+ "Gaming": "游戏",
+ "Bookmarks": "书签",
+ "Accounts": "账户",
+ "Computers": "电脑设备",
+ "Contact": "联系",
+ "Welcome": "欢迎",
+ "My Current Vibe": "当前氛围",
+ "Music": "音乐",
+ "Current Blog": "当前博客",
+ "Changelog": "更新日志",
+ "Friends": "朋友们",
+ "Games": "游戏",
+ "Countries": "国家",
+ "Sponsors / VPNs / Buttons": "赞助商 / VPN / 按钮",
+ "Open guestbook": "打开留言板",
+ "Loading…": "加载中…",
+ "Loading...": "加载中…",
+ "Licensed under": "采用",
+ "site": "网站",
+ "Error": "错误",
+}
+
+
+JA = {
+ "Skip to content": "本文へ移動",
+ "Menu": "メニュー",
+ "Language": "言語",
+ "Home": "ホーム",
+ "StartPage": "StartPage",
+ "Blog": "ブログ",
+ "Guestbook": "ゲストブック",
+ "Journal": "ジャーナル",
+ "Diary": "日記",
+ "Gaming": "ゲーム",
+ "Bookmarks": "ブックマーク",
+ "Accounts": "アカウント",
+ "Computers": "コンピューター",
+ "Contact": "連絡先",
+ "Welcome": "ようこそ",
+ "My Current Vibe": "今の雰囲気",
+ "Music": "音楽",
+ "Current Blog": "現在のブログ",
+ "Changelog": "更新履歴",
+ "Friends": "友達",
+ "Games": "ゲーム",
+ "Countries": "国",
+ "Sponsors / VPNs / Buttons": "スポンサー / VPN / ボタン",
+ "Open guestbook": "ゲストブックを開く",
+ "Loading…": "読み込み中…",
+ "Loading...": "読み込み中…",
+ "Licensed under": "ライセンス:",
+ "Error": "エラー",
+}
+
+
+ATTR_TRANSLATE = {
+ "title",
+ "aria-label",
+ "aria-labelledby", # generally ids; don't translate
+ "alt",
+ "placeholder",
+}
+
+
+RE_TAG = re.compile(r"(<[^>]+>)")
+RE_TEXT_NODE = re.compile(r"^(\s*)(.*?)(\s*)$", re.S)
+RE_ATTR = re.compile(r'(\s)([a-zA-Z_:.-]+)=("[^"]*"|\'[\s\S]*?\')')
+
+
+def should_skip_path(p: Path) -> bool:
+ rel = p.relative_to(ROOT)
+ parts = set(rel.parts)
+ return any(d in parts for d in SKIP_DIRS)
+
+
+def translate_phrase(s: str, mapping: dict[str, str]) -> str:
+ # Exact match first
+ if s in mapping:
+ return mapping[s]
+
+ # Replace common UI tokens inside longer strings (simple, conservative)
+ out = s
+ for k, v in mapping.items():
+ if k and k in out:
+ out = out.replace(k, v)
+ return out
+
+
+def translate_text_node(text: str, mapping: dict[str, str]) -> str:
+ m = RE_TEXT_NODE.match(text)
+ if not m:
+ return text
+ lead, core, tail = m.group(1), m.group(2), m.group(3)
+
+ # Skip empty or purely whitespace
+ if not core.strip():
+ return text
+
+ # Skip if it's just punctuation/symbols
+ if not re.search(r"[A-Za-z]", core):
+ return text
+
+ translated = translate_phrase(core, mapping)
+ return f"{lead}{translated}{tail}"
+
+
+def tag_name(tag: str) -> str | None:
+ # tag is like <div ...> or </div>
+ t = tag.strip()[1:-1].strip()
+ if not t:
+ return None
+ if t.startswith("!") or t.startswith("?"):
+ return None
+ if t.startswith("/"):
+ t = t[1:].lstrip()
+ name = re.split(r"\s+", t, maxsplit=1)[0].lower()
+ return name
+
+
+def translate_attrs(tag: str, mapping: dict[str, str]) -> str:
+ # Don't touch aria-labelledby since it's usually an id.
+ def repl(m: re.Match[str]) -> str:
+ space, key, val = m.group(1), m.group(2), m.group(3)
+ k = key.lower()
+ if k not in ATTR_TRANSLATE or k == "aria-labelledby":
+ return m.group(0)
+ quote = val[0]
+ inner = val[1:-1]
+ new_inner = translate_phrase(inner, mapping)
+ if new_inner == inner:
+ return m.group(0)
+ return f"{space}{key}={quote}{new_inner}{quote}"
+
+ return RE_ATTR.sub(repl, tag)
+
+
+def translate_html(src: str, mapping: dict[str, str]) -> str:
+ parts = RE_TAG.split(src)
+ out: list[str] = []
+
+ skip_depth = 0
+ for part in parts:
+ if part.startswith("<") and part.endswith(">"):
+ name = tag_name(part)
+
+ # track skip tags nesting
+ if name in SKIP_TAGS:
+ if part.lstrip().startswith("</"):
+ if skip_depth > 0:
+ skip_depth -= 1
+ else:
+ skip_depth += 1
+
+ out.append(translate_attrs(part, mapping))
+ else:
+ if skip_depth > 0:
+ out.append(part)
+ else:
+ out.append(translate_text_node(part, mapping))
+
+ return "".join(out)
+
+
+def write_if_changed(path: Path, content: str) -> None:
+ old = path.read_text(encoding="utf-8", errors="ignore") if path.exists() else None
+ if old == content:
+ return
+ path.write_text(content, encoding="utf-8")
+
+
+def main() -> int:
+ html_files = sorted(ROOT.rglob("*.html"))
+ for p in html_files:
+ if should_skip_path(p):
+ continue
+
+ # Skip already translated files
+ if p.name.endswith("_zh.html") or p.name.endswith("_jp.html"):
+ continue
+
+ # Only translate pages that look like they are part of the unified site
+ # (Keep legacy old HTML alone unless user explicitly wants all)
+ src = p.read_text(encoding="utf-8", errors="ignore")
+
+ # Output names
+ zh_path = p.with_name(p.stem + "_zh.html")
+ jp_path = p.with_name(p.stem + "_jp.html")
+
+ zh = translate_html(src, ZH)
+ jp = translate_html(src, JA)
+
+ # Set lang attribute if present
+ zh = re.sub(r"<html\s+lang=\"[^\"]*\"", '<html lang="zh"', zh, count=1)
+ jp = re.sub(r"<html\s+lang=\"[^\"]*\"", '<html lang="ja"', jp, count=1)
+
+ write_if_changed(zh_path, zh)
+ write_if_changed(jp_path, jp)
+
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/tools/uptime_check.sh b/tools/uptime_check.sh
new file mode 100644
index 0000000..0bbc6e8
--- /dev/null
+++ b/tools/uptime_check.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+URL="${URL:-https://www.sillylaird.ca/}"
+
+curl -fsS -o /dev/null -w "HTTP %{http_code} in %{time_total}s\n" "$URL"
diff --git a/ubuntu.jpg b/ubuntu.jpg
new file mode 100644
index 0000000..dc31e7d
--- /dev/null
+++ b/ubuntu.jpg
Binary files differ
diff --git a/ubuntu.png b/ubuntu.png
new file mode 100644
index 0000000..9211a48
--- /dev/null
+++ b/ubuntu.png
Binary files differ
diff --git a/vblog/index.html b/vblog/index.html
new file mode 100644
index 0000000..37053e3
--- /dev/null
+++ b/vblog/index.html
@@ -0,0 +1,58 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Video Blog — SillyLaird</title>
+ <meta name="description" content="Video blog links and embeds." />
+ <meta property="og:title" content="Video Blog — SillyLaird" />
+ <meta property="og:description" content="Video blog links and embeds." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/vblog/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Video Blog — SillyLaird" />
+ <meta name="twitter:description" content="Video blog links and embeds." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/vblog/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/vblog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/vblog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/vblog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/vblog/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vblog-title">
+ <h1 id="vblog-title">Video Blog</h1>
+ <p class="muted">Video links and embeds.</p>
+ <p><a href="https://odysee.com/@sillylaird:4" target="_blank" rel="noopener">@sillylaird on Odysee</a></p>
+ </section>
+
+ <section aria-labelledby="embed-title">
+ <h2 id="embed-title">Embed</h2>
+ <iframe
+ class="embed-frame sed328f664c"
+
+ src="https://www.vidlii.com/embed?v=SWdc86RdmDL&a=0"
+ title="Vidlii video"
+ allowfullscreen></iframe>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/vblog/index_jp.html b/vblog/index_jp.html
new file mode 100644
index 0000000..5325d83
--- /dev/null
+++ b/vblog/index_jp.html
@@ -0,0 +1,58 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Video ブログ — SillyLaird</title>
+ <meta name="description" content="Video blog links and embeds." />
+ <meta property="og:title" content="Video ブログ — SillyLaird" />
+ <meta property="og:description" content="Video blog links and embeds." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/vblog/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Video ブログ — SillyLaird" />
+ <meta name="twitter:description" content="Video blog links and embeds." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/vblog/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/vblog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/vblog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/vblog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/vblog/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vblog-title">
+ <h1 id="vblog-title">Video ブログ</h1>
+ <p class="muted">Video links and embeds.</p>
+ <p><a href="https://odysee.com/@sillylaird:4" target="_blank" rel="noopener">@sillylaird on Odysee</a></p>
+ </section>
+
+ <section aria-labelledby="embed-title">
+ <h2 id="embed-title">Embed</h2>
+ <iframe
+ class="embed-frame sed328f664c"
+
+ src="https://www.vidlii.com/embed?v=SWdc86RdmDL&a=0"
+ title="Vidlii video"
+ allowfullscreen></iframe>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/vblog/index_zh.html b/vblog/index_zh.html
new file mode 100644
index 0000000..0cdda8c
--- /dev/null
+++ b/vblog/index_zh.html
@@ -0,0 +1,58 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Video 博客 — SillyLaird</title>
+ <meta name="description" content="Video blog links and embeds." />
+ <meta property="og:title" content="Video 博客 — SillyLaird" />
+ <meta property="og:description" content="Video blog links and embeds." />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/vblog/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Video 博客 — SillyLaird" />
+ <meta name="twitter:description" content="Video blog links and embeds." />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/vblog/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/vblog/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/vblog/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/vblog/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/vblog/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vblog-title">
+ <h1 id="vblog-title">Video 博客</h1>
+ <p class="muted">Video links and embeds.</p>
+ <p><a href="https://odysee.com/@sillylaird:4" target="_blank" rel="noopener">@sillylaird on Odysee</a></p>
+ </section>
+
+ <section aria-labelledby="embed-title">
+ <h2 id="embed-title">Embed</h2>
+ <iframe
+ class="embed-frame sed328f664c"
+
+ src="https://www.vidlii.com/embed?v=SWdc86RdmDL&a=0"
+ title="Vidlii video"
+ allowfullscreen></iframe>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/vblog/lain.png b/vblog/lain.png
new file mode 100644
index 0000000..1614204
--- /dev/null
+++ b/vblog/lain.png
Binary files differ
diff --git a/vidlii.png b/vidlii.png
new file mode 100644
index 0000000..540c3a5
--- /dev/null
+++ b/vidlii.png
Binary files differ
diff --git a/vidlii/index.html b/vidlii/index.html
new file mode 100644
index 0000000..122b720
--- /dev/null
+++ b/vidlii/index.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Vidlii — SillyLaird</title>
+ <meta name="description" content="SillyLaird's Vidlii links and nostalgia." />
+ <meta property="og:title" content="Vidlii — SillyLaird" />
+ <meta property="og:description" content="SillyLaird" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/vidlii/" />
+ <meta property="og:locale" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Vidlii — SillyLaird" />
+ <meta name="twitter:description" content="SillyLaird" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/vidlii/" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/vidlii/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/vidlii/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/vidlii/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/vidlii/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">Skip to content</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vidlii-title">
+ <h1 id="vidlii-title">Vidlii</h1>
+ <p class="muted">Old-school video site vibes.</p>
+ <img src="/Vidlii6.png" alt="Vidlii screenshot" loading="lazy" decoding="async" class="s63501a3337" />
+ </section>
+
+ <section aria-labelledby="vidlii-links-title">
+ <h2 id="vidlii-links-title">Links</h2>
+ <ul class="contact-list">
+ <li><a href="https://www.vidlii.com/" target="_blank" rel="noopener">Vidlii</a></li>
+ <li><a href="https://www.vidlii.st/" target="_blank" rel="noopener">vidlii.st</a></li>
+ <li><a href="http://vidlii3kemmoa2rwvpuch5tzztyxhlwpuogpttgzc25ckqszaiy7gmyd.onion/" target="_blank" rel="noopener">vidlii.onion</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/vidlii/index_jp.html b/vidlii/index_jp.html
new file mode 100644
index 0000000..bc2051a
--- /dev/null
+++ b/vidlii/index_jp.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Vidlii — SillyLaird</title>
+ <meta name="description" content="SillyLaird's Vidlii links and nostalgia." />
+ <meta property="og:title" content="Vidlii — SillyLaird" />
+ <meta property="og:description" content="SillyLaird" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/vidlii/index_jp.html" />
+ <meta property="og:locale" content="ja_JP" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="zh_CN" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Vidlii — SillyLaird" />
+ <meta name="twitter:description" content="SillyLaird" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/vidlii/index_jp.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/vidlii/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/vidlii/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/vidlii/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/vidlii/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">本文へ移動</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vidlii-title">
+ <h1 id="vidlii-title">Vidlii</h1>
+ <p class="muted">Old-school video site vibes.</p>
+ <img src="/Vidlii6.png" alt="Vidlii screenshot" loading="lazy" decoding="async" class="s63501a3337" />
+ </section>
+
+ <section aria-labelledby="vidlii-links-title">
+ <h2 id="vidlii-links-title">Links</h2>
+ <ul class="contact-list">
+ <li><a href="https://www.vidlii.com/" target="_blank" rel="noopener">Vidlii</a></li>
+ <li><a href="https://www.vidlii.st/" target="_blank" rel="noopener">vidlii.st</a></li>
+ <li><a href="http://vidlii3kemmoa2rwvpuch5tzztyxhlwpuogpttgzc25ckqszaiy7gmyd.onion/" target="_blank" rel="noopener">vidlii.onion</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/vidlii/index_zh.html b/vidlii/index_zh.html
new file mode 100644
index 0000000..ef118bf
--- /dev/null
+++ b/vidlii/index_zh.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="zh">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <title>Vidlii — SillyLaird</title>
+ <meta name="description" content="SillyLaird's Vidlii links and nostalgia." />
+ <meta property="og:title" content="Vidlii — SillyLaird" />
+ <meta property="og:description" content="SillyLaird" />
+ <meta property="og:image" content="https://www.sillylaird.ca/lain.png" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://www.sillylaird.ca/vidlii/index_zh.html" />
+ <meta property="og:locale" content="zh_CN" />
+ <meta property="og:locale:alternate" content="en_US" />
+ <meta property="og:locale:alternate" content="ja_JP" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <meta name="twitter:title" content="Vidlii — SillyLaird" />
+ <meta name="twitter:description" content="SillyLaird" />
+ <meta name="twitter:image" content="https://www.sillylaird.ca/lain.png" />
+ <link rel="canonical" href="https://www.sillylaird.ca/vidlii/index_zh.html" />
+ <link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/vidlii/" />
+ <link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/vidlii/" />
+ <link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/vidlii/index_zh.html" />
+ <link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/vidlii/index_jp.html" />
+ <link rel="icon" href="/favicon.ico" />
+
+ <link rel="stylesheet" href="/assets/css/site.css" />
+
+
+ <script defer src="/assets/js/includes.js"></script>
+</head>
+
+<body>
+ <a class="skip-link" href="#main">跳至内容</a>
+
+ <div data-include="header"></div>
+
+ <main id="main" class="wrap">
+ <section aria-labelledby="vidlii-title">
+ <h1 id="vidlii-title">Vidlii</h1>
+ <p class="muted">Old-school video 网站 vibes.</p>
+ <img src="/Vidlii6.png" alt="Vidlii screenshot" loading="lazy" decoding="async" class="s63501a3337" />
+ </section>
+
+ <section aria-labelledby="vidlii-links-title">
+ <h2 id="vidlii-links-title">Links</h2>
+ <ul class="contact-list">
+ <li><a href="https://www.vidlii.com/" target="_blank" rel="noopener">Vidlii</a></li>
+ <li><a href="https://www.vidlii.st/" target="_blank" rel="noopener">vidlii.st</a></li>
+ <li><a href="http://vidlii3kemmoa2rwvpuch5tzztyxhlwpuogpttgzc25ckqszaiy7gmyd.onion/" target="_blank" rel="noopener">vidlii.onion</a></li>
+ </ul>
+ </section>
+ </main>
+
+ <div data-include="footer"></div>
+</body>
+</html>
diff --git a/vscode.png b/vscode.png
new file mode 100644
index 0000000..ad4dfb6
--- /dev/null
+++ b/vscode.png
Binary files differ
diff --git a/windowserver.jpg b/windowserver.jpg
new file mode 100644
index 0000000..ebfbd27
--- /dev/null
+++ b/windowserver.jpg
Binary files differ
diff --git a/windowserver.png b/windowserver.png
new file mode 100644
index 0000000..b177b72
--- /dev/null
+++ b/windowserver.png
Binary files differ
diff --git a/wtfpl.png b/wtfpl.png
new file mode 100644
index 0000000..27f7433
--- /dev/null
+++ b/wtfpl.png
Binary files differ
diff --git a/wtfpl.txt b/wtfpl.txt
new file mode 100644
index 0000000..9042c25
--- /dev/null
+++ b/wtfpl.txt
@@ -0,0 +1,13 @@
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/zh-laird.mp3 b/zh-laird.mp3
new file mode 100644
index 0000000..8d34ad1
--- /dev/null
+++ b/zh-laird.mp3
Binary files differ