diff --git a/archetypes/default.md b/archetypes/default.md index c6f3fce..eaf2b52 100644 --- a/archetypes/default.md +++ b/archetypes/default.md @@ -1,5 +1,5 @@ +++ title = '{{ replace .File.ContentBaseName "-" " " | title }}' -date = {{ .Date }} -draft = true +# date = {{ .Date }} +draft = false +++ diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml index 65cd0ba..ff53512 100644 --- a/config/_default/hugo.toml +++ b/config/_default/hugo.toml @@ -31,3 +31,6 @@ enableEmoji = true [outputs] home = ["HTML", "RSS", "JSON"] + +[params.footer] + icp = "苏ICP备2024145451号" diff --git a/config/_default/languages.en.toml b/config/_default/languages.en.toml index 126e9b4..bd44505 100644 --- a/config/_default/languages.en.toml +++ b/config/_default/languages.en.toml @@ -1,7 +1,7 @@ languageCode = "en" languageName = "English" weight = 1 -title = "SWang Nice" +title = "SWangNice" contentDir = 'content/en' @@ -17,7 +17,7 @@ contentDir = 'content/en' [params.author] name = "SWang" image = "img/avatar.png" - headline = "Welcome to my website" + headline = "A new graduate engineer" bio = "New Graduate Engineer, interested in Robotics and AI" links = [ { link = "https://swangnice.com" }, diff --git a/config/_default/languages.zh-CN.toml b/config/_default/languages.zh-CN.toml index dc0f264..ab9e541 100644 --- a/config/_default/languages.zh-CN.toml +++ b/config/_default/languages.zh-CN.toml @@ -1,12 +1,12 @@ languageCode = "zh-CN" languageName = "简体中文" weight = 2 -title = "Swangnice的空间" +title = "SwangNice的空间" contentDir = 'content/zh' [params] - displayName = "CN" + displayName = "中文" isoCode = "zh-CN" rtl = false # logo = "img/logo.png" @@ -18,7 +18,7 @@ dateFormat = "2 January 2006" [params.author] name = "SWang" image = "img/avatar.png" - headline = "欢迎来到我的网站" + headline = "一名刚毕业的工程师" bio = "新毕业工程师,对机器人和人工智能感兴趣" links = [ { link = "https://swangnice.com" }, diff --git a/config/_default/menus.en.toml b/config/_default/menus.en.toml index af1ea00..d449a78 100644 --- a/config/_default/menus.en.toml +++ b/config/_default/menus.en.toml @@ -15,63 +15,85 @@ url = "/en/" weight = 1 + # Notes [[main]] identifier = "notes" name = "Notes" - pageRef = "/en/notes/" - weight = 10 + pageRef = "/notes/" + weight = 30 [[main]] name = "Coding" - url = "/en/notes/coding/" + url = "/notes/coding/" parent = "notes" weight = 10 [[main]] name = "PDF Collection" - url = "/en/notes/pdf/" + url = "/notes/pdf/" parent = "notes" weight = 20 -# Projects +# ===============Projects=============== [[main]] identifier = "projects" name = "Projects" - pageRef = "/en/projects/" - weight = 20 + pageRef = "/projects/" + weight = 50 + +# [[main]] +# name = "AI" +# url = "/projects/ai/" +# parent = "projects" +# weight = 10 [[main]] - name = "AI" - url = "/en/projects/ai/" + name = "Fancy Things on Boards" + url = "/projects/embedded/" parent = "projects" + weight = 20 + +# [[main]] +# name = "Game" +# url = "/projects/game/" +# parent = "projects" +# weight = 30 + +# [[main]] +# name = "Robotics" +# url = "/projects/robotics/" +# parent = "projects" +# weight = 40 + +[[main]] + name = "Self-host" + url = "/projects/self_host/" + parent = "projects" + weight = 50 + +# Life +[[main]] + identifier = "life" + name = "RestHere" + pageRef = "/life/" + weight = 70 + +[[main]] + name = "My Pet" + url = "/life/pet/" + parent = "life" + weight = 5 + +[[main]] + name = "My Travel" + url = "/life/travel/" + parent = "life" weight = 10 -[[main]] - name = "Embedded Systems" - url = "/en/projects/embedded/" - parent = "projects" - weight = 20 - -[[main]] - name = "Game" - url = "/en/projects/game/" - parent = "projects" - weight = 30 - -[[main]] - name = "Robotics" - url = "/en/projects/robotics/" - parent = "projects" - weight = 40 -# Archive -[[main]] - name = "Archive" - pageRef = "/en/archive/" - weight = 70 [[main]] identifier = "web" diff --git a/config/_default/menus.zh-CN.toml b/config/_default/menus.zh-CN.toml index 6903a54..86cc4fe 100644 --- a/config/_default/menus.zh-CN.toml +++ b/config/_default/menus.zh-CN.toml @@ -10,22 +10,94 @@ # overridden by providing a weight value. The menu will then be # ordered by weight from lowest to highest. +# Notes [[main]] - name = "Blog" - pageRef = "posts" + identifier = "notes" + name = "笔记" + pageRef = "/zh-cn/notes/" + weight = 30 + +[[main]] + name = "编程笔记" + url = "/zh-cn/notes/coding/" + parent = "notes" weight = 10 +[[main]] + name = "PDF归档" + url = "/zh-cn/notes/pdf/" + parent = "notes" + weight = 20 + +# Projects +[[main]] + identifier = "projects" + name = "项目" + pageRef = "/zh-cn/projects/" + weight = 50 + +# [[main]] +# name = "人工智能" +# url = "/zh-cn/projects/ai/" +# parent = "projects" +# weight = 10 + +[[main]] + name = "妙板生花" + url = "/zh-cn/projects/embedded/" + parent = "projects" + weight = 20 + +# [[main]] +# name = "游戏开发" +# url = "/zh-cn/projects/game/" +# parent = "projects" +# weight = 30 + +# [[main]] +# name = "机器人" +# url = "/zh-cn/projects/robotics/" +# parent = "projects" +# weight = 40 + +[[main]] + name = "自托管" + url = "/zh-cn/projects/self_host/" + parent = "projects" + weight = 50 + +# Life +[[main]] + identifier = "life" + name = "此处休息" + pageRef = "/zh-cn/life/" + weight = 70 + +[[main]] + name = "宠物" + url = "/zh-cn/life/pet/" + parent = "life" + weight = 5 + +[[main]] + name = "游记" + url = "/zh-cn/life/travel/" + parent = "life" + weight = 10 + + + [[main]] identifier = "web" pre = "link" url = "https://swangnice.com" - weight = 40 + weight = 80 [[main]] identifier = "github" pre = "github" url = "https://github.com/swangnice" - weight = 50 + weight = 90 diff --git a/config/_default/params.toml b/config/_default/params.toml index 71e8593..b641f0d 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -3,23 +3,39 @@ # customise the display of your website. # # Refer to the theme docs for more details about each of these parameters. -# https://nunocoracao.github.io/blowfish/docs/configuration/#theme-parameters +# https://blowfish.page/docs/configuration/#theme-parameters -colorScheme = "slate" +colorScheme = "blowfish" defaultAppearance = "light" # valid options: light or dark autoSwitchAppearance = true enableSearch = true -enableCodeCopy = true +enableCodeCopy = false -mainSections = ["posts"] +replyByEmail = false + +# mainSections = ["section1", "section2"] # robots = "" +disableImageOptimization = false +disableTextInHeader = false +# backgroundImageWidth = 1200 + +# defaultBackgroundImage = "IMAGE.jpg" # used as default for background images +# defaultFeaturedImage = "IMAGE.jpg" # used as default for featured images in all articles + +# highlightCurrentMenuArea = true +# smartTOC = true +# smartTOCHideUnfocusedChildren = true + +giteaDefaultServer = "https://git.fsfe.org" +forgejoDefaultServer = "https://v8.next.forgejo.org" + [header] - layout = "basic" # valid options: basic, fixed + layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur [footer] - # showMenu = true + showMenu = true showCopyright = true showThemeAttribution = true showAppearanceSwitcher = true @@ -28,23 +44,27 @@ mainSections = ["posts"] [homepage] layout = "profile" # valid options: page, profile, hero, card, background, custom #homepageImage = "IMAGE.jpg" # used in: hero, and card - showRecent = true + showRecent = false showRecentItems = 5 - showMoreLink = true - showMoreLinkDest = "/blowfish_lite/posts" + showMoreLink = false + showMoreLinkDest = "/posts/" cardView = false cardViewScreenWidth = false layoutBackgroundBlur = false # only used when layout equals background [article] - showDate = true - #showViews = true - #showLikes = true + showDate = false + showViews = false + showLikes = false + showDateOnlyInArticle = false showDateUpdated = false - showAuthor = true - showHero = true - heroStyle = "basic" # valid options: basic, big, background - showBreadcrumbs = true + showAuthor = false + # showAuthorBottom = false + showHero = false + # heroStyle = "basic" # valid options: basic, big, background, thumbAndBackground + layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground + layoutBackgroundHeaderSpace = true # only used when heroStyle equals background + showBreadcrumbs = false showDraftLabel = true showEdit = false # editURL = "https://github.com/username/repo/" @@ -55,27 +75,54 @@ mainSections = ["posts"] invertPagination = false showReadingTime = true showTableOfContents = true - showTaxonomies = false - showAuthorsBadges = false + # showRelatedContent = false + # relatedContentLimit = 3 + showTaxonomies = true + showAuthorsBadges = false showWordCount = true - showSummary = true - sharingLinks = [ "linkedin", "twitter", "whatsapp", "pinterest", "reddit", "facebook", "email"] + # sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram"] + showZenMode = false [list] + showHero = false + # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground + layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground + layoutBackgroundHeaderSpace = true # only used when heroStyle equals background showBreadcrumbs = false - showSummary = true - showTableOfContents = false - showCards = false - groupByYear = true - cardView = false + showSummary = false + showViews = false + showLikes = false + showTableOfContents = true + showCards = true + orderByWeight = true + groupByYear = false + cardView = true cardViewScreenWidth = false - constrainItemsWidth = true + constrainItemsWidth = false [sitemap] - excludedKinds = [] + excludedKinds = ["taxonomy", "term"] [taxonomy] showTermCount = true + showHero = false + # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground + showBreadcrumbs = false + showViews = false + showLikes = false + showTableOfContents = false + cardView = false + +[term] + showHero = false + # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground + showBreadcrumbs = false + showViews = false + showLikes = false + showTableOfContents = true + groupByYear = false + cardView = false + cardViewScreenWidth = false [firebase] # apiKey = "XXXXXX" @@ -90,8 +137,31 @@ mainSections = ["posts"] # site = "ABC12345" # domain = "llama.yoursite.com" +[umamiAnalytics] + # websiteid = "ABC12345" + # domain = "llama.yoursite.com" + # dataDomains = "yoursite.com,yoursite2.com" + # scriptName = "" + # enableTrackEvent = true + +[selineAnalytics] + # token = "XXXXXX" + # enableTrackEvent = true + +[buymeacoffee] + # identifier = "" + # globalWidget = true + # globalWidgetMessage = "Hello" + # globalWidgetColor = "#FFDD00" + # globalWidgetPosition = "Right" + [verification] # google = "" # bing = "" # pinterest = "" # yandex = "" + # fediverse = "" + +[rssnext] + # feedId = "" + # userId = "" \ No newline at end of file diff --git a/content/en/_index.md b/content/en/_index.md index 45cd41b..0ec6075 100644 --- a/content/en/_index.md +++ b/content/en/_index.md @@ -3,4 +3,10 @@ title = 'Home Page' draft = false +++ +{{< typeit + tag=h3 + lifeLike=true +>}} +Welcome to my website! I'm really happy you stopped by. +{{< /typeit >}} # This is My Page \ No newline at end of file diff --git a/content/en/notes/_index.md b/content/en/notes/_index.md new file mode 100644 index 0000000..0fed3fc --- /dev/null +++ b/content/en/notes/_index.md @@ -0,0 +1,6 @@ ++++ +title = 'Notes' +date = 2024-09-20T04:17:50Z +draft = false ++++ +Personal notes, may not be readable. diff --git a/content/en/notes/coding/_index.md b/content/en/notes/coding/_index.md new file mode 100644 index 0000000..3e8c8d5 --- /dev/null +++ b/content/en/notes/coding/_index.md @@ -0,0 +1,7 @@ ++++ +title = 'Coding' +date = 2024-09-20T04:17:50Z +draft = false ++++ + + diff --git a/content/en/notes/coding/cheat_sheet/_index.md b/content/en/notes/coding/cheat_sheet/_index.md new file mode 100644 index 0000000..8905ddf --- /dev/null +++ b/content/en/notes/coding/cheat_sheet/_index.md @@ -0,0 +1,7 @@ ++++ +title = 'Cheat Sheets' +date = 2024-09-20T04:17:50Z +draft = false ++++ + +Here’s a cheat sheet of some programming languages, tools, and libraries that I use often—but somehow always forget. diff --git a/content/en/notes/coding/cheat_sheet/c/feature.png b/content/en/notes/coding/cheat_sheet/c/feature.png new file mode 100644 index 0000000..1b70c29 Binary files /dev/null and b/content/en/notes/coding/cheat_sheet/c/feature.png differ diff --git a/content/en/notes/coding/cheat_sheet/c/index.md b/content/en/notes/coding/cheat_sheet/c/index.md new file mode 100644 index 0000000..04d75b2 --- /dev/null +++ b/content/en/notes/coding/cheat_sheet/c/index.md @@ -0,0 +1,5 @@ ++++ +title = 'C' +date = 2024-09-20T04:17:50Z +draft = false ++++ \ No newline at end of file diff --git a/content/en/notes/coding/cheat_sheet/cpp/feature.png b/content/en/notes/coding/cheat_sheet/cpp/feature.png new file mode 100644 index 0000000..e6942a4 Binary files /dev/null and b/content/en/notes/coding/cheat_sheet/cpp/feature.png differ diff --git a/content/en/notes/coding/cheat_sheet/cpp/index.md b/content/en/notes/coding/cheat_sheet/cpp/index.md new file mode 100644 index 0000000..f93eeef --- /dev/null +++ b/content/en/notes/coding/cheat_sheet/cpp/index.md @@ -0,0 +1,5 @@ ++++ +title = 'C++' +date = 2024-09-20T04:17:50Z +draft = false ++++ \ No newline at end of file diff --git a/content/en/notes/coding/cheat_sheet/feature.png b/content/en/notes/coding/cheat_sheet/feature.png new file mode 100644 index 0000000..4efe943 Binary files /dev/null and b/content/en/notes/coding/cheat_sheet/feature.png differ diff --git a/content/en/notes/coding/cheat_sheet/git/feature.png b/content/en/notes/coding/cheat_sheet/git/feature.png new file mode 100644 index 0000000..8167f08 Binary files /dev/null and b/content/en/notes/coding/cheat_sheet/git/feature.png differ diff --git a/content/en/notes/coding/cheat_sheet/git/index.md b/content/en/notes/coding/cheat_sheet/git/index.md new file mode 100644 index 0000000..69476ef --- /dev/null +++ b/content/en/notes/coding/cheat_sheet/git/index.md @@ -0,0 +1,14 @@ ++++ +title = 'Git' +date = 2024-09-20T04:17:50Z +draft = false ++++ + +## submodule + + +## Commit +1. Add date and time in commit messages: +``` bash +git commit -m "$(date '+%Y-%m-%d %H:%M:%S')" +``` \ No newline at end of file diff --git a/content/en/notes/coding/cheat_sheet/python/feature.png b/content/en/notes/coding/cheat_sheet/python/feature.png new file mode 100644 index 0000000..ef62aa9 Binary files /dev/null and b/content/en/notes/coding/cheat_sheet/python/feature.png differ diff --git a/content/en/notes/coding/cheat_sheet/python/index.md b/content/en/notes/coding/cheat_sheet/python/index.md new file mode 100644 index 0000000..64db60b --- /dev/null +++ b/content/en/notes/coding/cheat_sheet/python/index.md @@ -0,0 +1,5 @@ ++++ +title = 'Python' +date = 2024-09-20T04:17:50Z +draft = false ++++ \ No newline at end of file diff --git a/content/en/notes/coding/feature.jpg b/content/en/notes/coding/feature.jpg new file mode 100644 index 0000000..d4bbb20 Binary files /dev/null and b/content/en/notes/coding/feature.jpg differ diff --git a/content/en/projects/_index.md b/content/en/projects/_index.md new file mode 100644 index 0000000..6a1a0af --- /dev/null +++ b/content/en/projects/_index.md @@ -0,0 +1,19 @@ ++++ +title = 'Projects' +date = 2024-09-20T04:17:50Z +draft = false ++++ + +This is the Projects page, where I keep track of all my personal and collaborative work. + +I use several tags to describe the status and nature of each project: + +- `Private`/ `Public`: Private projects won’t reveal too many details, but I’ll still document the process, to-do lists, and partial results. For Public projects, I aim to share as much as possible — from design to implementation. + +- `Idea`, `Ongoing`, `Improving`, `Archived`: These tags indicate the current state of a project — whether it’s just a thought, actively being developed, being refined, or no longer maintained. + +- `Original`, `Reproduce`: Original means the project was initiated and designed by me. Reproduce refers to work based on existing ideas, papers, or open-source projects — typically with modifications or improvements. + +- ``: Some projects are interdisciplinary. Additional tags will be added to reflect relevant topics, but each project will be placed under the one category it’s most closely related to. + + diff --git a/content/en/projects/embedded/_index.md b/content/en/projects/embedded/_index.md new file mode 100644 index 0000000..70bc744 --- /dev/null +++ b/content/en/projects/embedded/_index.md @@ -0,0 +1,6 @@ ++++ +title = 'Fancy Things on Boards' +date = 2024-09-20T04:17:50Z +draft = false +weight = 90 ++++ \ No newline at end of file diff --git a/content/en/projects/embedded/feature.png b/content/en/projects/embedded/feature.png new file mode 100644 index 0000000..2e8133b Binary files /dev/null and b/content/en/projects/embedded/feature.png differ diff --git a/content/en/projects/self_host/_index.md b/content/en/projects/self_host/_index.md new file mode 100644 index 0000000..0f39ada --- /dev/null +++ b/content/en/projects/self_host/_index.md @@ -0,0 +1,31 @@ ++++ +title = 'Self-host Projects' +date = 2024-09-20T04:17:50Z +draft = false +weight = 90 ++++ + +I’ve recently been exploring the world of self-hosted solutions, and it’s nothing short of amazing. There are some great collections out there that showcase powerful, privacy-respecting tools you can run on your own hardware: +- [A collection on GitHub](https://github.com/awesome-selfhosted/awesome-selfhosted) +- [selfh.st](https://selfh.st/) + +## ❓ Why Self-Host? + +I enjoy automating tasks and making my life smarter with scripts and small tools. Having control over the services I use, running them on my own hardware, and customizing everything to suit my needs—it’s both empowering and educational. + + + + + + +I’ll use this space to document the projects I build and share what I learn along the way. + + +## List \ No newline at end of file diff --git a/content/en/projects/self_host/feature.png b/content/en/projects/self_host/feature.png new file mode 100644 index 0000000..8490fc1 Binary files /dev/null and b/content/en/projects/self_host/feature.png differ diff --git a/content/en/projects/self_host/mac_mini_m4/01_website_hosting.md b/content/en/projects/self_host/mac_mini_m4/01_website_hosting.md new file mode 100644 index 0000000..e2b0d69 --- /dev/null +++ b/content/en/projects/self_host/mac_mini_m4/01_website_hosting.md @@ -0,0 +1,81 @@ ++++ +title = 'Website Setup' +date = 2024-09-20T04:17:50Z +draft = false +series = ["My First Server in Room"] +series_order = 1 +weight = 10 ++++ + +I don't have a public IP, so my solution is SSH tunnel + reverse Proxy on cloud server. + +## 🍎Mac Mini Side +As a server, my Mac won't sleep, so change the setting firstly. +``` +sudo systemsetup -setcomputersleep Never # never sleep +sudo systemsetup -setdisplaysleep 10 # display will sleep in 10 min +``` + +Use autossh to avoid timeout: +``` +brew install autossh +``` + +Add the configuration below in `~/.ssh/config`, Mac Mini will send package per 30 seconds to keep the connection alive. +``` +Host + ServerAliveInterval 30 + ServerAliveCountMax 5 + TCPKeepAlive yes +``` + +Build the connection: +``` +autossh -M 0 -f -N \ +-i ~/.ssh/id_ed25519 \ +-o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \ +-R 0.0.0.0:9000:localhost:1313 \ +root@ +``` +``` +autossh -M 0 -f -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 0.0.0.0:9000:localhost:1313 user@ +``` + +A watchdog script to try reconnection when the network lost(add to LaunchAgent): +``` +#!/bin/bash +while true; do + ping -c 1 > /dev/null 2>&1 + if [ $? -ne 0 ]; then + pkill -f autossh + autossh -M 0 -f -N -R 0.0.0.0:9000:localhost:1313 + fi + sleep 60 +done +``` + + +## 💻Server Side +Install and config the Nginx, for me the config file in `/etc/nginx/sites-available`: +``` +server { + listen 80; + server_name www. ; + + location / { + proxy_pass http://localhost:9000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} +``` + +To obtain a security certificate, use the certbot: +``` +sudo apt update +sudo apt install certbot python3-certbot-nginx +sudo certbot --nginx -d swangnice.cn +``` + + diff --git a/content/en/projects/self_host/mac_mini_m4/02_nas.md b/content/en/projects/self_host/mac_mini_m4/02_nas.md new file mode 100644 index 0000000..768b330 --- /dev/null +++ b/content/en/projects/self_host/mac_mini_m4/02_nas.md @@ -0,0 +1,33 @@ ++++ +title = 'NAS: Network Attachment Storage' +date = 2024-09-20T04:17:50Z +draft = false +series = ["My First Server in Room"] +series_order = 2 +weight = 20 ++++ + +## Hardware +I went with the UNITEK 3373BBK for one of my drive enclosures—and honestly, it wasn’t the best decision. + +The first big letdown? The bandwidth tops out at just 5Gbps. That’s fine for basic tasks, but definitely underwhelming if you’re dealing with high-speed storage or large file transfers. + +Even worse, it doesn’t support S.M.A.R.T passthrough, which makes monitoring drive health a hassle. That was a big deal-breaker for me. + +Still, none of the other options really fit my expectations either. One day, I might just go all-in and make my own enclosure—design the PCB, write the firmware, the whole deal. Maybe not today… but someday. + + +``` +diskutil list +``` + +Solution: HFS+ + SMB3.0, 客户端设置“延迟加载目录”或“按需索引” + +```diskutil list``` + +``` +sudo smartctl -a /dev/disk2 +``` + +```brew install smartmontools``` + diff --git a/content/en/projects/self_host/mac_mini_m4/03_gitea.md b/content/en/projects/self_host/mac_mini_m4/03_gitea.md new file mode 100644 index 0000000..f1c856d --- /dev/null +++ b/content/en/projects/self_host/mac_mini_m4/03_gitea.md @@ -0,0 +1,43 @@ ++++ +title = 'My Own Code Vault: Gitea on Mac Mini' +date = 2024-09-20T04:17:50Z +draft = false +series = ["My First Server in Room"] +series_order = 3 +weight = 30 ++++ + +Install dependence of gitea: +``` +brew install git +brew install gitea +``` + +Start the configuration page of Gitea: +``` +gitea web +``` + +Install MySQL: +``` +brew install mysql +brew services start mysql +``` + +Login MySQL and create the database and user: +``` +mysql -u root +``` +Then, execute: +``` +CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE USER 'gitea'@'localhost' IDENTIFIED BY ''; +GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost'; +FLUSH PRIVILEGES; +``` + + +CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'gitea'; +GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost'; +FLUSH PRIVILEGES; \ No newline at end of file diff --git a/content/en/projects/self_host/mac_mini_m4/_index.md b/content/en/projects/self_host/mac_mini_m4/_index.md new file mode 100644 index 0000000..6cbedd5 --- /dev/null +++ b/content/en/projects/self_host/mac_mini_m4/_index.md @@ -0,0 +1,13 @@ ++++ +title = 'My First Server in Room: Mac Mini + SSD Enclosure' +date = 2024-09-20T04:17:50Z +draft = false +tags = ["Public", "Ongoing", "Original", "AI"] +weight = 10 ++++ + +For my first physical server in my life, I got an Mac Mini with M4 and an HDD enclosure. + + + + diff --git a/content/en/projects/self_host/mac_mini_m4/feature.png b/content/en/projects/self_host/mac_mini_m4/feature.png new file mode 100644 index 0000000..693f333 Binary files /dev/null and b/content/en/projects/self_host/mac_mini_m4/feature.png differ diff --git a/content/en/projects/self_host/stock_bot/01_todo.md b/content/en/projects/self_host/stock_bot/01_todo.md new file mode 100644 index 0000000..4c6382d --- /dev/null +++ b/content/en/projects/self_host/stock_bot/01_todo.md @@ -0,0 +1,15 @@ ++++ +title = 'TODO List' +date = 2024-09-20T04:17:50Z +draft = false +series = ["StockBot"] +series_order = 1 +weight = 10 ++++ + +## Short-term TODO +- 🚧 The Initial Policy implement (Parameterizing transaction variables) +- ⬜️ The evaluate & logger script +- ⬜ The automatic scripts with Email Sender deployed on the Server +- ⬜ Web UI, will not be too complex just a simple one to synchronous my account for customized policy +- ⬜️ Implement RL algorithms \ No newline at end of file diff --git a/content/en/projects/self_host/stock_bot/02_results.md b/content/en/projects/self_host/stock_bot/02_results.md new file mode 100644 index 0000000..4413c0b --- /dev/null +++ b/content/en/projects/self_host/stock_bot/02_results.md @@ -0,0 +1,10 @@ ++++ +title = 'Showcases' +date = 2024-09-20T04:17:50Z +draft = false +series = ["StockBot"] +series_order = 2 +weight = 20 ++++ + +This section will feature occasional showcases of my technical achievements—focused purely on the engineering side, not the income. \ No newline at end of file diff --git a/content/en/projects/self_host/stock_bot/_index.md b/content/en/projects/self_host/stock_bot/_index.md new file mode 100644 index 0000000..64bb01d --- /dev/null +++ b/content/en/projects/self_host/stock_bot/_index.md @@ -0,0 +1,20 @@ ++++ +title = 'StockBot' +date = 2024-09-20T04:17:50Z +draft = false +tags = ["Private", "Ongoing", "Original", "AI"] +weight = 10 ++++ + +This is a bot that assists in making daily index fund trading decisions. + +## Introduction + +This project was inspired by my mother. Over the course of ten years, she watched my father struggle in the stock market. From those hard lessons, she developed her own strategy—one that focuses on the predictable fluctuations in index fund values. Armed with nothing more than paper, a pen, and a calculator, she’s been able to achieve steady profits. + +I believe there’s even more potential here. + +By digitizing her process and gradually introducing quantifiable algorithms, I hope to both increase efficiency and explore new edges for profitability. My strategy might cause others' losses, so this project is private permanently. + +## List +Here, I’ll keep track of the to-do list and showcase the results as the project evolves. I’ll also highlight some interesting technical insights along the way. diff --git a/content/en/projects/self_host/stock_bot/feature.png b/content/en/projects/self_host/stock_bot/feature.png new file mode 100644 index 0000000..277ac30 Binary files /dev/null and b/content/en/projects/self_host/stock_bot/feature.png differ diff --git a/content/zh/_index.md b/content/zh/_index.md index d8725b4..bdd0613 100644 --- a/content/zh/_index.md +++ b/content/zh/_index.md @@ -3,4 +3,17 @@ title = '主页' draft = false +++ -# 这是我的主页 \ No newline at end of file +{{< typeit + tag=h3 + lifeLike=true +>}} +欢迎来到我的网页!希望可以在这里找到您需要的! +{{< /typeit >}} + +我是一名刚毕业的大学生。 + +我的兴趣涵盖机器人 🤖、嵌入式系统 📟 以及摄影 📸。 + +在这里,我将分享我的想法、笔记、项目,还有一些有趣的内容。敬请关注! + +## 目录 \ No newline at end of file diff --git a/content/zh/notes/_index.md b/content/zh/notes/_index.md new file mode 100644 index 0000000..0c1e28f --- /dev/null +++ b/content/zh/notes/_index.md @@ -0,0 +1,7 @@ ++++ +title = 'Notes' +date = 2024-09-20T04:17:50Z +draft = false ++++ +Personal notes, may not be readable. +个人笔记, 不保证可读性 diff --git a/content/zh/notes/coding/_index.md b/content/zh/notes/coding/_index.md new file mode 100644 index 0000000..d9977c3 --- /dev/null +++ b/content/zh/notes/coding/_index.md @@ -0,0 +1,5 @@ ++++ +title = 'Coding' +date = 2024-09-20T04:17:50Z +draft = false ++++ diff --git a/content/zh/notes/coding/cheat_sheet/_index.md b/content/zh/notes/coding/cheat_sheet/_index.md new file mode 100644 index 0000000..e17bbf0 --- /dev/null +++ b/content/zh/notes/coding/cheat_sheet/_index.md @@ -0,0 +1,8 @@ ++++ +title = 'Cheat Sheets' +date = 2024-09-20T04:17:50Z +draft = false ++++ + +记录一些我的常用指令 + diff --git a/content/zh/notes/coding/cheat_sheet/c/feature.png b/content/zh/notes/coding/cheat_sheet/c/feature.png new file mode 100644 index 0000000..1b70c29 Binary files /dev/null and b/content/zh/notes/coding/cheat_sheet/c/feature.png differ diff --git a/content/zh/notes/coding/cheat_sheet/c/index.md b/content/zh/notes/coding/cheat_sheet/c/index.md new file mode 100644 index 0000000..04d75b2 --- /dev/null +++ b/content/zh/notes/coding/cheat_sheet/c/index.md @@ -0,0 +1,5 @@ ++++ +title = 'C' +date = 2024-09-20T04:17:50Z +draft = false ++++ \ No newline at end of file diff --git a/content/zh/notes/coding/cheat_sheet/cpp/feature.png b/content/zh/notes/coding/cheat_sheet/cpp/feature.png new file mode 100644 index 0000000..e6942a4 Binary files /dev/null and b/content/zh/notes/coding/cheat_sheet/cpp/feature.png differ diff --git a/content/zh/notes/coding/cheat_sheet/cpp/index.md b/content/zh/notes/coding/cheat_sheet/cpp/index.md new file mode 100644 index 0000000..f93eeef --- /dev/null +++ b/content/zh/notes/coding/cheat_sheet/cpp/index.md @@ -0,0 +1,5 @@ ++++ +title = 'C++' +date = 2024-09-20T04:17:50Z +draft = false ++++ \ No newline at end of file diff --git a/content/zh/notes/coding/cheat_sheet/feature.png b/content/zh/notes/coding/cheat_sheet/feature.png new file mode 100644 index 0000000..4efe943 Binary files /dev/null and b/content/zh/notes/coding/cheat_sheet/feature.png differ diff --git a/content/zh/notes/coding/cheat_sheet/git/feature.png b/content/zh/notes/coding/cheat_sheet/git/feature.png new file mode 100644 index 0000000..8167f08 Binary files /dev/null and b/content/zh/notes/coding/cheat_sheet/git/feature.png differ diff --git a/content/zh/notes/coding/cheat_sheet/git/index.md b/content/zh/notes/coding/cheat_sheet/git/index.md new file mode 100644 index 0000000..30dd799 --- /dev/null +++ b/content/zh/notes/coding/cheat_sheet/git/index.md @@ -0,0 +1,11 @@ ++++ +title = 'Git' +date = 2024-09-20T04:17:50Z +draft = false ++++ + +## Commit +1. Add date and time in commit messages: +``` bash +git commit -m "$(date '+%Y-%m-%d %H:%M:%S')" +``` \ No newline at end of file diff --git a/content/zh/notes/coding/cheat_sheet/python/feature.png b/content/zh/notes/coding/cheat_sheet/python/feature.png new file mode 100644 index 0000000..ef62aa9 Binary files /dev/null and b/content/zh/notes/coding/cheat_sheet/python/feature.png differ diff --git a/content/zh/notes/coding/cheat_sheet/python/index.md b/content/zh/notes/coding/cheat_sheet/python/index.md new file mode 100644 index 0000000..64db60b --- /dev/null +++ b/content/zh/notes/coding/cheat_sheet/python/index.md @@ -0,0 +1,5 @@ ++++ +title = 'Python' +date = 2024-09-20T04:17:50Z +draft = false ++++ \ No newline at end of file diff --git a/content/zh/notes/coding/feature.jpg b/content/zh/notes/coding/feature.jpg new file mode 100644 index 0000000..d4bbb20 Binary files /dev/null and b/content/zh/notes/coding/feature.jpg differ diff --git a/content/zh/projects/_index.md b/content/zh/projects/_index.md new file mode 100644 index 0000000..5a3a17e --- /dev/null +++ b/content/zh/projects/_index.md @@ -0,0 +1,9 @@ ++++ +title = 'Projects' +date = 2024-09-20T04:17:50Z +draft = false ++++ + +This is projects page. I will list my projects here. Here are several tags here to describe the status of my projects: + +- `private`/ `public`: I won't show too many details of my private, but I will record the process, to-do list and part of results on this site. diff --git a/content/zh/projects/self_host/_index.md b/content/zh/projects/self_host/_index.md new file mode 100644 index 0000000..50909a7 --- /dev/null +++ b/content/zh/projects/self_host/_index.md @@ -0,0 +1,5 @@ ++++ +title = 'Self-host Projects' +date = 2024-09-20T04:17:50Z +draft = false ++++ \ No newline at end of file diff --git a/content/zh/projects/self_host/feature.png b/content/zh/projects/self_host/feature.png new file mode 100644 index 0000000..8490fc1 Binary files /dev/null and b/content/zh/projects/self_host/feature.png differ diff --git a/content/zh/projects/self_host/stock_bot/01_todo.md b/content/zh/projects/self_host/stock_bot/01_todo.md new file mode 100644 index 0000000..6fb2538 --- /dev/null +++ b/content/zh/projects/self_host/stock_bot/01_todo.md @@ -0,0 +1,14 @@ ++++ +title = 'TODO List' +date = 2024-09-20T04:17:50Z +draft = false +series = ["StockBot"] +series_order = 1 +weight = 10 ++++ + +## Short-term TODO +- 🚧 The Initial Policy implement +- ⬜️ The evaluate & logger script +- ⬜️ The automatic scripts with Email Sender deployed on the Server +- ⬜️ Implement RL \ No newline at end of file diff --git a/content/zh/projects/self_host/stock_bot/02_results.md b/content/zh/projects/self_host/stock_bot/02_results.md new file mode 100644 index 0000000..4413c0b --- /dev/null +++ b/content/zh/projects/self_host/stock_bot/02_results.md @@ -0,0 +1,10 @@ ++++ +title = 'Showcases' +date = 2024-09-20T04:17:50Z +draft = false +series = ["StockBot"] +series_order = 2 +weight = 20 ++++ + +This section will feature occasional showcases of my technical achievements—focused purely on the engineering side, not the income. \ No newline at end of file diff --git a/content/zh/projects/self_host/stock_bot/_index.md b/content/zh/projects/self_host/stock_bot/_index.md new file mode 100644 index 0000000..64bb01d --- /dev/null +++ b/content/zh/projects/self_host/stock_bot/_index.md @@ -0,0 +1,20 @@ ++++ +title = 'StockBot' +date = 2024-09-20T04:17:50Z +draft = false +tags = ["Private", "Ongoing", "Original", "AI"] +weight = 10 ++++ + +This is a bot that assists in making daily index fund trading decisions. + +## Introduction + +This project was inspired by my mother. Over the course of ten years, she watched my father struggle in the stock market. From those hard lessons, she developed her own strategy—one that focuses on the predictable fluctuations in index fund values. Armed with nothing more than paper, a pen, and a calculator, she’s been able to achieve steady profits. + +I believe there’s even more potential here. + +By digitizing her process and gradually introducing quantifiable algorithms, I hope to both increase efficiency and explore new edges for profitability. My strategy might cause others' losses, so this project is private permanently. + +## List +Here, I’ll keep track of the to-do list and showcase the results as the project evolves. I’ll also highlight some interesting technical insights along the way. diff --git a/content/zh/projects/self_host/stock_bot/feature.png b/content/zh/projects/self_host/stock_bot/feature.png new file mode 100644 index 0000000..277ac30 Binary files /dev/null and b/content/zh/projects/self_host/stock_bot/feature.png differ diff --git a/public/404.html b/public/404.html index d9212d0..9204b91 100644 --- a/public/404.html +++ b/public/404.html @@ -8,8 +8,8 @@ - 404 Page not found · SWang Nice - + 404 Page not found · SWangNice + @@ -26,8 +26,8 @@ - + + @@ -68,7 +65,7 @@ - + @@ -151,7 +148,7 @@ @@ -174,7 +171,7 @@
- + Notes @@ -203,14 +200,14 @@
- +

Coding

- +

PDF Collection @@ -229,7 +226,7 @@

- + Projects @@ -258,31 +255,17 @@
- +

- AI + Fancy Things on Boards

- +

- Embedded Systems -

-
- - - -

- Game -

-
- - - -

- Robotics + Self-host

@@ -294,13 +277,57 @@ - - + +
+
-

- Archive -

-
+ + RestHere + + + + + + + + + + + +
+ +
@@ -378,7 +405,7 @@

- CN + 中文

@@ -465,7 +492,7 @@

- CN + 中文

@@ -568,9 +595,9 @@
  • - + -

    +

    Notes

    @@ -598,7 +625,7 @@
  • - +

    Coding @@ -607,7 +634,7 @@

  • - +

    PDF Collection @@ -624,9 +651,9 @@

  • - + -

    +

    Projects

    @@ -654,37 +681,19 @@
  • - +

    - AI + Fancy Things on Boards

  • - +

    - Embedded Systems -

    -
    -
  • - -
  • - - -

    - Game -

    -
    -
  • - -
  • - - -

    - Robotics + Self-host

  • @@ -696,16 +705,57 @@ - +
  • - +

    - Archive + RestHere +

    + + + + + + + + + + +
    +
  • + +
  • + + +

    + My Pet

  • +
  • + + +

    + My Travel +

    +
    +
  • + +
  • + @@ -798,7 +848,7 @@
  • + title="Tags"> Tags @@ -820,6 +870,14 @@ +

    + + 苏ICP备2024145451号 + +

    + + +

    diff --git a/public/authors/index.html b/public/authors/index.html index 715ad92..f7ff98f 100644 --- a/public/authors/index.html +++ b/public/authors/index.html @@ -8,8 +8,8 @@ - Authors · SWang Nice - + Authors · SWangNice + @@ -17,7 +17,7 @@ - + @@ -28,8 +28,8 @@ - + + @@ -70,7 +67,7 @@ - + @@ -153,7 +150,7 @@

    @@ -176,7 +173,7 @@
  • - + -

    +

    Notes

    @@ -600,7 +627,7 @@
  • - +

    Coding @@ -609,7 +636,7 @@

  • - +

    PDF Collection @@ -626,9 +653,9 @@

  • - + -

    +

    Projects

    @@ -656,37 +683,19 @@
  • - +

    - AI + Fancy Things on Boards

  • - +

    - Embedded Systems -

    -
    -
  • - -
  • - - -

    - Game -

    -
    -
  • - -
  • - - -

    - Robotics + Self-host

  • @@ -698,16 +707,57 @@ - +
  • - +

    - Archive + RestHere +

    + + + + + + + + + + +
    +
  • + +
  • + + +

    + My Pet

  • +
  • + + +

    + My Travel +

    +
    +
  • + +
  • + @@ -842,7 +892,7 @@
  • + title="Tags"> Tags @@ -864,6 +914,14 @@ +

    + + 苏ICP备2024145451号 + +

    + + +

    diff --git a/public/authors/index.xml b/public/authors/index.xml index 5a88ab6..a6b3858 100644 --- a/public/authors/index.xml +++ b/public/authors/index.xml @@ -1,9 +1,9 @@ - Authors on SWang Nice + Authors on SWangNice http://localhost:1313/authors/ - Recent content in Authors on SWang Nice + Recent content in Authors on SWangNice Hugo -- gohugo.io en © 2025 SWang diff --git a/public/categories/index.html b/public/categories/index.html index 694d7fb..95988a6 100644 --- a/public/categories/index.html +++ b/public/categories/index.html @@ -8,8 +8,8 @@ - Categories · SWang Nice - + Categories · SWangNice + @@ -17,7 +17,7 @@ - + @@ -28,8 +28,8 @@ - + + @@ -70,7 +67,7 @@ - + @@ -153,7 +150,7 @@

    @@ -176,7 +173,7 @@
  • - + -

    +

    Notes

    @@ -600,7 +627,7 @@
  • - +

    Coding @@ -609,7 +636,7 @@

  • - +

    PDF Collection @@ -626,9 +653,9 @@

  • - + -

    +

    Projects

    @@ -656,37 +683,19 @@
  • - +

    - AI + Fancy Things on Boards

  • - +

    - Embedded Systems -

    -
    -
  • - -
  • - - -

    - Game -

    -
    -
  • - -
  • - - -

    - Robotics + Self-host

  • @@ -698,16 +707,57 @@ - +
  • - +

    - Archive + RestHere +

    + + + + + + + + + + +
    +
  • + +
  • + + +

    + My Pet

  • +
  • + + +

    + My Travel +

    +
    +
  • + +
  • + @@ -842,7 +892,7 @@
  • + title="Tags"> Tags @@ -864,6 +914,14 @@ +

    + + 苏ICP备2024145451号 + +

    + + +

    diff --git a/public/categories/index.xml b/public/categories/index.xml index 8bdbf69..5b900ba 100644 --- a/public/categories/index.xml +++ b/public/categories/index.xml @@ -1,9 +1,9 @@ - Categories on SWang Nice + Categories on SWangNice http://localhost:1313/categories/ - Recent content in Categories on SWang Nice + Recent content in Categories on SWangNice Hugo -- gohugo.io en © 2025 SWang diff --git a/public/css/main.bundle.min.3d98b0e3c7886b2be13facfb539c8f79843dd3cff84d1c41763deb363c668c308c7c7ac9ecb3923f8602e257866ff553de4228ff50492074acc6d07b3d232fb1.css b/public/css/main.bundle.min.3d98b0e3c7886b2be13facfb539c8f79843dd3cff84d1c41763deb363c668c308c7c7ac9ecb3923f8602e257866ff553de4228ff50492074acc6d07b3d232fb1.css new file mode 100644 index 0000000..2542cd6 --- /dev/null +++ b/public/css/main.bundle.min.3d98b0e3c7886b2be13facfb539c8f79843dd3cff84d1c41763deb363c668c308c7c7ac9ecb3923f8602e257866ff553de4228ff50492074acc6d07b3d232fb1.css @@ -0,0 +1,4341 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99}/*!tailwindcss v4.1.4 | MIT License | https://tailwindcss.com*//*!Blowfish | MIT License | https://github.com/nunocoracao/blowfish*/@layer properties;#zen-mode-button{cursor:pointer}.zen-mode{position:relative}body.zen-mode-enable{ #bmc-wbtn, .author { display: none !important; }}@layer theme,base,components,utilities;@layer theme{:root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; + --spacing: 0.25rem; + --container-xs: 20rem; + --container-xl: 36rem; + --container-3xl: 48rem; + --container-7xl: 80rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); + --text-sm: 0.875rem; + --text-sm--line-height: calc(1.25 / 0.875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-extrabold: 800; + --tracking-normal: 0em; + --leading-snug: 1.375; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; + --radius-xl: 0.75rem; + --radius-2xl: 1rem; + --ease-in: cubic-bezier(0.4, 0, 1, 1); + --ease-out: cubic-bezier(0, 0, 0.2, 1); + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; + --blur-sm: 8px; + --blur-2xl: 40px; + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + } +}@layer base{*, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::placeholder { + opacity: 1; + } + @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { + ::placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +}@layer utilities{.pointer-events-auto { + pointer-events: auto; + } + .pointer-events-none { + pointer-events: none; + } + .\!visible { + visibility: visible !important; + } + .collapse { + visibility: collapse; + } + .invisible { + visibility: hidden; + } + .visible { + visibility: visible; + } + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; + } + .\!absolute { + position: absolute !important; + } + .absolute { + position: absolute; + } + .fixed { + position: fixed; + } + .relative { + position: relative; + } + .static { + position: static; + } + .sticky { + position: sticky; + } + .inset-0 { + inset: calc(var(--spacing) * 0); + } + .inset-x-0 { + inset-inline: calc(var(--spacing) * 0); + } + .top-0 { + top: calc(var(--spacing) * 0); + } + .top-20 { + top: calc(var(--spacing) * 20); + } + .top-\[110vh\] { + top: 110vh; + } + .top-\[calc\(100vh-5\.5rem\)\] { + top: calc(100vh - 5.5rem); + } + .right-0 { + right: calc(var(--spacing) * 0); + } + .bottom-0 { + bottom: calc(var(--spacing) * 0); + } + .left-0 { + left: calc(var(--spacing) * 0); + } + .z-10 { + z-index: 10; + } + .z-30 { + z-index: 30; + } + .z-\[1\] { + z-index: 1; + } + .z-\[2\] { + z-index: 2; + } + .z-\[999\] { + z-index: 999; + } + .z-\[1040\] { + z-index: 1040; + } + .z-\[1070\] { + z-index: 1070; + } + .z-\[1080\] { + z-index: 1080; + } + .order-first { + order: -9999; + } + .float-left { + float: left; + } + .container { + width: 100%; + @media (width >= 640px) { + max-width: 640px; + } + @media (width >= 853px) { + max-width: 853px; + } + @media (width >= 1024px) { + max-width: 1024px; + } + @media (width >= 1280px) { + max-width: 1280px; + } + @media (width >= 1536px) { + max-width: 1536px; + } + } + .\!-m-px { + margin: -1px !important; + } + .m-0 { + margin: calc(var(--spacing) * 0); + } + .m-1 { + margin: calc(var(--spacing) * 1); + } + .m-2 { + margin: calc(var(--spacing) * 2); + } + .m-300 { + margin: calc(var(--spacing) * 300); + } + .m-auto { + margin: auto; + } + .-mx-2 { + margin-inline: calc(var(--spacing) * -2); + } + .mx-1 { + margin-inline: calc(var(--spacing) * 1); + } + .mx-\[3px\] { + margin-inline: 3px; + } + .mx-\[15\%\] { + margin-inline: 15%; + } + .mx-auto { + margin-inline: auto; + } + .-my-2 { + margin-block: calc(var(--spacing) * -2); + } + .my-0 { + margin-block: calc(var(--spacing) * 0); + } + .my-3 { + margin-block: calc(var(--spacing) * 3); + } + .prose { + color: var(--tw-prose-body); + max-width: 65ch; + :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; + } + :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-lead); + font-size: 1.25em; + line-height: 1.6; + margin-top: 1.2em; + margin-bottom: 1.2em; + } + :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-links); + text-decoration: none; + font-weight: 500; + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-primary-300), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-primary-300), 1) 100%, transparent); + } + &:hover { + color: color-mix(in srgb, rgba(rgba(var(--color-primary-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, rgba(var(--color-primary-600), 1) 100%, transparent); + } + text-decoration: none; + border-radius: 0.09rem; + } + } + :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-bold); + font-weight: 600; + } + :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: decimal; + margin-top: 1.25em; + margin-bottom: 1.25em; + padding-inline-start: 1.625em; + } + :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; + } + :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; + } + :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; + } + :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; + } + :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; + } + :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; + } + :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; + } + :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; + } + :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: decimal; + } + :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: disc; + margin-top: 1.25em; + margin-bottom: 1.25em; + padding-inline-start: 1.625em; + } + :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + font-weight: 400; + color: var(--tw-prose-counters); + } + :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + color: var(--tw-prose-bullets); + } + :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.25em; + } + :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-color: var(--tw-prose-hr); + border-top-width: 1; + margin-top: 3em; + margin-bottom: 3em; + } + :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 500; + font-style: italic; + color: var(--tw-prose-quotes); + border-inline-start-width: 0.25rem; + border-inline-start-color: var(--tw-prose-quote-borders); + quotes: "\201C""\201D""\2018""\2019"; + margin-top: 1.6em; + margin-bottom: 1.6em; + padding-inline-start: 1em; + } + :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: open-quote; + } + :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: close-quote; + } + :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 800; + font-size: 2.25em; + margin-top: 0; + margin-bottom: 0.8888889em; + line-height: 1.1111111; + } + :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 900; + color: inherit; + } + :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 700; + font-size: 1.5em; + margin-top: 2em; + margin-bottom: 1em; + line-height: 1.3333333; + } + :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 800; + color: inherit; + } + :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + font-size: 1.25em; + margin-top: 1.6em; + margin-bottom: 0.6em; + line-height: 1.6; + } + :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; + } + :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.5em; + margin-bottom: 0.5em; + line-height: 1.5; + } + :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; + } + :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + display: block; + margin-top: 2em; + margin-bottom: 2em; + } + :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 600; + font-family: inherit; + color: var(--tw-prose-kbd); + box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%); + font-size: 0.9rem; + border-radius: 0.25rem; + padding-top: 0.1875em; + padding-inline-end: 0.375em; + padding-bottom: 0.1875em; + padding-inline-start: 0.375em; + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-200), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-200), 1) 100%, transparent); + } + padding: 0.1rem 0.4rem; + } + :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-code); + font-weight: 600; + font-size: 0.875em; + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-50), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-50), 1) 100%, transparent); + } + padding-top: 3px; + padding-bottom: 3px; + padding-left: 5px; + padding-right: 5px; + border-radius: 0.25rem; + } + :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: "`"; + display: none; + } + :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: "`"; + display: none; + } + :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-code); + } + :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.875em; + } + :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.9em; + } + :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-pre-code); + background-color: var(--tw-prose-pre-bg); + overflow-x: auto; + font-weight: 400; + font-size: 0.875em; + line-height: 1.7142857; + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; + border-radius: 0.375rem; + padding-top: 0.8571429em; + padding-inline-end: 1.1428571em; + padding-bottom: 0.8571429em; + padding-inline-start: 1.1428571em; + } + :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + background-color: transparent; + border-width: 0; + border-radius: 0; + padding: 0; + font-weight: inherit; + color: inherit; + font-size: inherit; + font-family: inherit; + line-height: inherit; + } + :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: none; + } + :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: none; + } + :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + width: 100%; + table-layout: auto; + margin-top: 2em; + margin-bottom: 2em; + font-size: 0.875em; + line-height: 1.7142857; + } + :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-th-borders); + } + :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + vertical-align: bottom; + padding-inline-end: 0.5714286em; + padding-bottom: 0.5714286em; + padding-inline-start: 0.5714286em; + } + :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-td-borders); + } + :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 0; + } + :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: baseline; + } + :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-top-width: 1px; + border-top-color: var(--tw-prose-th-borders); + } + :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: top; + } + :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-align: start; + } + :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-captions); + font-size: 0.875em; + line-height: 1.4285714; + margin-top: 0.8571429em; + } + --tw-prose-body: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-body: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + --tw-prose-headings: color-mix(in srgb, rgba(rgba(var(--color-neutral-800), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-headings: color-mix(in oklab, rgba(var(--color-neutral-800), 1) 100%, transparent); + } + --tw-prose-lead: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-lead: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 100%, transparent); + } + --tw-prose-links: color-mix(in srgb, rgba(rgba(var(--color-primary-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-links: color-mix(in oklab, rgba(var(--color-primary-600), 1) 100%, transparent); + } + --tw-prose-bold: color-mix(in srgb, rgba(rgba(var(--color-neutral-900), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-bold: color-mix(in oklab, rgba(var(--color-neutral-900), 1) 100%, transparent); + } + --tw-prose-counters: color-mix(in srgb, rgba(rgba(var(--color-neutral-800), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-counters: color-mix(in oklab, rgba(var(--color-neutral-800), 1) 100%, transparent); + } + --tw-prose-bullets: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-bullets: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 100%, transparent); + } + --tw-prose-hr: color-mix(in srgb, rgba(rgba(var(--color-neutral-200), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-hr: color-mix(in oklab, rgba(var(--color-neutral-200), 1) 100%, transparent); + } + --tw-prose-quotes: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-quotes: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + --tw-prose-quote-borders: color-mix(in srgb, rgba(rgba(var(--color-primary-200), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-quote-borders: color-mix(in oklab, rgba(var(--color-primary-200), 1) 100%, transparent); + } + --tw-prose-captions: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-captions: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 100%, transparent); + } + --tw-prose-kbd: oklch(21% 0.034 264.665); + --tw-prose-kbd-shadows: NaN NaN NaN; + --tw-prose-code: color-mix(in srgb, rgba(rgba(var(--color-secondary-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-code: color-mix(in oklab, rgba(var(--color-secondary-700), 1) 100%, transparent); + } + --tw-prose-pre-code: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-pre-code: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + --tw-prose-pre-bg: color-mix(in srgb, rgba(rgba(var(--color-neutral-50), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-pre-bg: color-mix(in oklab, rgba(var(--color-neutral-50), 1) 100%, transparent); + } + --tw-prose-th-borders: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-th-borders: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 100%, transparent); + } + --tw-prose-td-borders: color-mix(in srgb, rgba(rgba(var(--color-neutral-300), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-td-borders: color-mix(in oklab, rgba(var(--color-neutral-300), 1) 100%, transparent); + } + --tw-prose-invert-body: color-mix(in srgb, rgba(rgba(var(--color-neutral-300), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-body: color-mix(in oklab, rgba(var(--color-neutral-300), 1) 100%, transparent); + } + --tw-prose-invert-headings: color-mix(in srgb, rgba(rgba(var(--color-neutral-50), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-headings: color-mix(in oklab, rgba(var(--color-neutral-50), 1) 100%, transparent); + } + --tw-prose-invert-lead: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-lead: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 100%, transparent); + } + --tw-prose-invert-links: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-links: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + --tw-prose-invert-bold: color-mix(in srgb, rgba(rgba(var(--color-neutral), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-bold: color-mix(in oklab, rgba(var(--color-neutral), 1) 100%, transparent); + } + --tw-prose-invert-counters: color-mix(in srgb, rgba(rgba(var(--color-neutral-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-counters: color-mix(in oklab, rgba(var(--color-neutral-400), 1) 100%, transparent); + } + --tw-prose-invert-bullets: color-mix(in srgb, rgba(rgba(var(--color-neutral-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-bullets: color-mix(in oklab, rgba(var(--color-neutral-600), 1) 100%, transparent); + } + --tw-prose-invert-hr: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-hr: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 100%, transparent); + } + --tw-prose-invert-quotes: color-mix(in srgb, rgba(rgba(var(--color-neutral-200), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-quotes: color-mix(in oklab, rgba(var(--color-neutral-200), 1) 100%, transparent); + } + --tw-prose-invert-quote-borders: color-mix(in srgb, rgba(rgba(var(--color-primary-900), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-quote-borders: color-mix(in oklab, rgba(var(--color-primary-900), 1) 100%, transparent); + } + --tw-prose-invert-captions: color-mix(in srgb, rgba(rgba(var(--color-neutral-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-captions: color-mix(in oklab, rgba(var(--color-neutral-400), 1) 100%, transparent); + } + --tw-prose-invert-kbd: #fff; + --tw-prose-invert-kbd-shadows: 255 255 255; + --tw-prose-invert-code: color-mix(in srgb, rgba(rgba(var(--color-secondary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-code: color-mix(in oklab, rgba(var(--color-secondary-400), 1) 100%, transparent); + } + --tw-prose-invert-pre-code: color-mix(in srgb, rgba(rgba(var(--color-neutral-200), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-pre-code: color-mix(in oklab, rgba(var(--color-neutral-200), 1) 100%, transparent); + } + --tw-prose-invert-pre-bg: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-pre-bg: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + --tw-prose-invert-th-borders: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-th-borders: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 100%, transparent); + } + --tw-prose-invert-td-borders: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-prose-invert-td-borders: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + font-size: 1rem; + line-height: 1.75; + :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + margin-bottom: 0.5em; + } + :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; + } + :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; + } + :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; + } + :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + } + :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; + } + :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + } + :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; + } + :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; + } + :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; + } + :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + padding-inline-start: 1.625em; + } + :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; + } + :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; + } + :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-top: 0.5714286em; + padding-inline-end: 0.5714286em; + padding-bottom: 0.5714286em; + padding-inline-start: 0.5714286em; + } + :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; + } + :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; + } + :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 0; + } + :where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: color-mix(in srgb, rgba(rgba(var(--color-neutral-800), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, rgba(var(--color-neutral-800), 1) 100%, transparent); + } + background-color: color-mix(in srgb, rgba(rgba(var(--color-primary-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-primary-600), 1) 100%, transparent); + } + padding: 0.1rem 0.2rem; + border-radius: 0.25rem; + } + :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + display: none; + } + :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + display: none; + } + :where(a.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-primary-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-primary-600), 1) 100%, transparent); + } + } + :where(p.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-primary-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-primary-600), 1) 100%, transparent); + } + } + } + .\!mt-0 { + margin-top: calc(var(--spacing) * 0) !important; + } + .mt-0 { + margin-top: calc(var(--spacing) * 0); + } + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } + .mt-3 { + margin-top: calc(var(--spacing) * 3); + } + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } + .mt-5 { + margin-top: calc(var(--spacing) * 5); + } + .mt-6 { + margin-top: calc(var(--spacing) * 6); + } + .mt-8 { + margin-top: calc(var(--spacing) * 8); + } + .mt-10 { + margin-top: calc(var(--spacing) * 10); + } + .mt-12 { + margin-top: calc(var(--spacing) * 12); + } + .mt-20 { + margin-top: calc(var(--spacing) * 20); + } + .mt-\[-2px\] { + margin-top: -2px; + } + .mt-\[0\.1rem\] { + margin-top: 0.1rem; + } + .-mr-48 { + margin-right: calc(var(--spacing) * -48); + } + .-mr-\[100\%\] { + margin-right: calc(100% * -1); + } + .mr-1 { + margin-right: calc(var(--spacing) * 1); + } + .mr-2 { + margin-right: calc(var(--spacing) * 2); + } + .mr-3 { + margin-right: calc(var(--spacing) * 3); + } + .mr-5 { + margin-right: calc(var(--spacing) * 5); + } + .mr-auto { + margin-right: auto; + } + .\!mb-0 { + margin-bottom: calc(var(--spacing) * 0) !important; + } + .\!mb-9 { + margin-bottom: calc(var(--spacing) * 9) !important; + } + .-mb-1 { + margin-bottom: calc(var(--spacing) * -1); + } + .mb-0 { + margin-bottom: calc(var(--spacing) * 0); + } + .mb-1 { + margin-bottom: calc(var(--spacing) * 1); + } + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + .mb-3 { + margin-bottom: calc(var(--spacing) * 3); + } + .mb-5 { + margin-bottom: calc(var(--spacing) * 5); + } + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + .mb-8 { + margin-bottom: calc(var(--spacing) * 8); + } + .mb-10 { + margin-bottom: calc(var(--spacing) * 10); + } + .mb-12 { + margin-bottom: calc(var(--spacing) * 12); + } + .mb-16 { + margin-bottom: calc(var(--spacing) * 16); + } + .mb-20 { + margin-bottom: calc(var(--spacing) * 20); + } + .mb-\[2px\] { + margin-bottom: 2px; + } + .-ml-12 { + margin-left: calc(var(--spacing) * -12); + } + .ml-2 { + margin-left: calc(var(--spacing) * 2); + } + .ml-3 { + margin-left: calc(var(--spacing) * 3); + } + .ml-6 { + margin-left: calc(var(--spacing) * 6); + } + .ml-auto { + margin-left: auto; + } + .box-border { + box-sizing: border-box; + } + .box-content { + box-sizing: content-box; + } + .scrollbar { + &::-webkit-scrollbar-track { + background-color: var(--scrollbar-track); + border-radius: var(--scrollbar-track-radius); + } + &::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-thumb); + border-radius: var(--scrollbar-thumb-radius); + } + &::-webkit-scrollbar-corner { + background-color: var(--scrollbar-corner); + border-radius: var(--scrollbar-corner-radius); + } + @supports (-moz-appearance:none) { + scrollbar-width: auto; + scrollbar-color: var(--scrollbar-thumb, initial) var(--scrollbar-track, initial); + } + &::-webkit-scrollbar { + display: block; + width: var(--scrollbar-width, 16px); + height: var(--scrollbar-height, 16px); + } + } + .scrollbar-thin { + &::-webkit-scrollbar-track { + background-color: var(--scrollbar-track); + border-radius: var(--scrollbar-track-radius); + } + &::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-thumb); + border-radius: var(--scrollbar-thumb-radius); + } + &::-webkit-scrollbar-corner { + background-color: var(--scrollbar-corner); + border-radius: var(--scrollbar-corner-radius); + } + @supports (-moz-appearance:none) { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb, initial) var(--scrollbar-track, initial); + } + &::-webkit-scrollbar { + display: block; + width: 8px; + height: 8px; + } + } + .\!block { + display: block !important; + } + .block { + display: block; + } + .contents { + display: contents; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .inline-block { + display: inline-block; + } + .list-item { + display: list-item; + } + .table { + display: table; + } + .table-cell { + display: table-cell; + } + .size-1 { + width: calc(var(--spacing) * 1); + height: calc(var(--spacing) * 1); + } + .\!h-px { + height: 1px !important; + } + .h-0 { + height: calc(var(--spacing) * 0); + } + .h-1\/2 { + height: calc(1/2 * 100%); + } + .h-3 { + height: calc(var(--spacing) * 3); + } + .h-6 { + height: calc(var(--spacing) * 6); + } + .h-8 { + height: calc(var(--spacing) * 8); + } + .h-12 { + height: calc(var(--spacing) * 12); + } + .h-24 { + height: calc(var(--spacing) * 24); + } + .h-36 { + height: calc(var(--spacing) * 36); + } + .h-40 { + height: calc(var(--spacing) * 40); + } + .h-48 { + height: calc(var(--spacing) * 48); + } + .h-84 { + height: calc(var(--spacing) * 84); + } + .h-\[3px\] { + height: 3px; + } + .h-\[150px\] { + height: 150px; + } + .h-\[800px\] { + height: 800px; + } + .h-\[1000px\] { + height: 1000px; + } + .h-auto { + height: auto; + } + .h-full { + height: 100%; + } + .h-screen { + height: 100vh; + } + .max-h-3 { + max-height: calc(var(--spacing) * 3); + } + .max-h-\[5rem\] { + max-height: 5rem; + } + .min-h-0 { + min-height: calc(var(--spacing) * 0); + } + .min-h-\[130px\] { + min-height: 130px; + } + .min-h-\[148px\] { + min-height: 148px; + } + .min-h-full { + min-height: 100%; + } + .\!w-px { + width: 1px !important; + } + .w-0 { + width: calc(var(--spacing) * 0); + } + .w-2 { + width: calc(var(--spacing) * 2); + } + .w-3 { + width: calc(var(--spacing) * 3); + } + .w-6 { + width: calc(var(--spacing) * 6); + } + .w-8 { + width: calc(var(--spacing) * 8); + } + .w-12 { + width: calc(var(--spacing) * 12); + } + .w-24 { + width: calc(var(--spacing) * 24); + } + .w-36 { + width: calc(var(--spacing) * 36); + } + .w-\[15\%\] { + width: 15%; + } + .w-\[30px\] { + width: 30px; + } + .w-auto { + width: auto; + } + .w-full { + width: 100%; + } + .w-screen { + width: 100vw; + } + .max-w-3xl { + max-width: var(--container-3xl); + } + .max-w-7xl { + max-width: var(--container-7xl); + } + .max-w-\[5rem\] { + max-width: 5rem; + } + .max-w-\[64rem\] { + max-width: 64rem; + } + .max-w-\[200px\] { + max-width: 200px; + } + .max-w-\[267px\] { + max-width: 267px; + } + .max-w-\[1600px\] { + max-width: 1600px; + } + .max-w-\[calc\(100\%-1rem\)\] { + max-width: calc(100% - 1rem); + } + .max-w-fit { + max-width: fit-content; + } + .max-w-full { + max-width: 100%; + } + .max-w-prose { + max-width: 65ch; + } + .max-w-xl { + max-width: var(--container-xl); + } + .min-w-0 { + min-width: calc(var(--spacing) * 0); + } + .min-w-\[1\.8rem\] { + min-width: 1.8rem; + } + .min-w-\[30px\] { + min-width: 30px; + } + .min-w-\[220px\] { + min-width: 220px; + } + .min-w-full { + min-width: 100%; + } + .flex-1 { + flex: 1; + } + .flex-auto { + flex: auto; + } + .flex-initial { + flex: 0 auto; + } + .flex-none { + flex: none; + } + .flex-shrink { + flex-shrink: 1; + } + .shrink { + flex-shrink: 1; + } + .shrink-0 { + flex-shrink: 0; + } + .grow { + flex-grow: 1; + } + .grow-0 { + flex-grow: 0; + } + .basis-auto { + flex-basis: auto; + } + .border-collapse { + border-collapse: collapse; + } + .-translate-x-full { + --tw-translate-x: -100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .translate-x-full { + --tw-translate-x: 100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .-translate-y-8 { + --tw-translate-y: calc(var(--spacing) * -8); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .scale-0 { + --tw-scale-x: 0%; + --tw-scale-y: 0%; + --tw-scale-z: 0%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + .scale-100 { + --tw-scale-x: 100%; + --tw-scale-y: 100%; + --tw-scale-z: 100%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + .scale-\[1\.02\] { + scale: 1.02; + } + .transform { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + } + .transform\! { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,) !important; + } + .transform-none { + transform: none; + } + .animate-pulse { + animation: var(--animate-pulse); + } + .cursor-default { + cursor: default; + } + .cursor-pointer { + cursor: pointer; + } + .touch-pan-y { + --tw-pan-y: pan-y; + touch-action: var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,); + } + .touch-none { + touch-action: none; + } + .resize { + resize: both; + } + .list-none { + list-style-type: none; + } + .appearance-none { + appearance: none; + } + .flex-col { + flex-direction: column; + } + .flex-row { + flex-direction: row; + } + .flex-wrap { + flex-wrap: wrap; + } + .items-center { + align-items: center; + } + .items-end { + align-items: flex-end; + } + .justify-between { + justify-content: space-between; + } + .justify-center { + justify-content: center; + } + .gap-4 { + gap: calc(var(--spacing) * 4); + } + .space-y-2 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-3 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-10 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse))); + } + } + .gap-x-3 { + column-gap: calc(var(--spacing) * 3); + } + .gap-x-5 { + column-gap: calc(var(--spacing) * 5); + } + .space-x-2 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); + } + } + .space-x-3 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse))); + } + } + .space-x-5 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 5) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-x-reverse))); + } + } + .place-self-center { + place-self: center; + } + .self-center { + align-self: center; + } + .\!overflow-hidden { + overflow: hidden !important; + } + .overflow-auto { + overflow: auto; + } + .overflow-hidden { + overflow: hidden; + } + .overflow-visible { + overflow: visible; + } + .overflow-y-scroll { + overflow-y: scroll; + } + .overscroll-contain { + overscroll-behavior: contain; + } + .scroll-smooth { + scroll-behavior: smooth; + } + .\!rounded-md { + border-radius: var(--radius-md) !important; + } + .rounded { + border-radius: 0.25rem; + } + .rounded-2xl { + border-radius: var(--radius-2xl); + } + .rounded-\[50\%\] { + border-radius: 50%; + } + .rounded-full { + border-radius: calc(infinity * 1px); + } + .rounded-lg { + border-radius: var(--radius-lg); + } + .rounded-md { + border-radius: var(--radius-md); + } + .rounded-xl { + border-radius: var(--radius-xl); + } + .rounded-s-\[0\.25rem\] { + border-start-start-radius: 0.25rem; + border-end-start-radius: 0.25rem; + } + .rounded-e-\[0\.25rem\] { + border-start-end-radius: 0.25rem; + border-end-end-radius: 0.25rem; + } + .rounded-t-lg { + border-top-left-radius: var(--radius-lg); + border-top-right-radius: var(--radius-lg); + } + .rounded-b-lg { + border-bottom-right-radius: var(--radius-lg); + border-bottom-left-radius: var(--radius-lg); + } + .\!border-0 { + border-style: var(--tw-border-style) !important; + border-width: 0px !important; + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-0 { + border-style: var(--tw-border-style); + border-width: 0px; + } + .border-2 { + border-style: var(--tw-border-style); + border-width: 2px; + } + .border-y-\[10px\] { + border-block-style: var(--tw-border-style); + border-block-width: 10px; + } + .border-s-0 { + border-inline-start-style: var(--tw-border-style); + border-inline-start-width: 0px; + } + .border-s-\[0\.125rem\] { + border-inline-start-style: var(--tw-border-style); + border-inline-start-width: 0.125rem; + } + .border-e-0 { + border-inline-end-style: var(--tw-border-style); + border-inline-end-width: 0px; + } + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + .border-b-2 { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 2px; + } + .border-l-2 { + border-left-style: var(--tw-border-style); + border-left-width: 2px; + } + .border-dotted { + --tw-border-style: dotted; + border-style: dotted; + } + .border-solid { + --tw-border-style: solid; + border-style: solid; + } + .border-neutral-100 { + border-color: rgba(var(--color-neutral-100), 1); + } + .border-neutral-200 { + border-color: rgba(var(--color-neutral-200), 1); + } + .border-neutral-300 { + border-color: rgba(var(--color-neutral-300), 1); + } + .border-primary-400 { + border-color: rgba(var(--color-primary-400), 1); + } + .border-primary-500 { + border-color: rgba(var(--color-primary-500), 1); + } + .border-secondary-500 { + border-color: rgba(var(--color-secondary-500), 1); + } + .border-transparent { + border-color: transparent; + } + .prose-invert { + --tw-prose-body: var(--tw-prose-invert-body); + --tw-prose-headings: var(--tw-prose-invert-headings); + --tw-prose-lead: var(--tw-prose-invert-lead); + --tw-prose-links: var(--tw-prose-invert-links); + --tw-prose-bold: var(--tw-prose-invert-bold); + --tw-prose-counters: var(--tw-prose-invert-counters); + --tw-prose-bullets: var(--tw-prose-invert-bullets); + --tw-prose-hr: var(--tw-prose-invert-hr); + --tw-prose-quotes: var(--tw-prose-invert-quotes); + --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders); + --tw-prose-captions: var(--tw-prose-invert-captions); + --tw-prose-kbd: var(--tw-prose-invert-kbd); + --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows); + --tw-prose-code: var(--tw-prose-invert-code); + --tw-prose-pre-code: var(--tw-prose-invert-pre-code); + --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); + --tw-prose-th-borders: var(--tw-prose-invert-th-borders); + --tw-prose-td-borders: var(--tw-prose-invert-td-borders); + :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-neutral-600), 1) 100%, transparent); + } + &:hover { + color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + } + :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: color-mix(in srgb, rgba(rgba(var(--color-neutral-200), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, rgba(var(--color-neutral-200), 1) 100%, transparent); + } + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + } + :where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + background-color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + } + :where(a.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + :where(p.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + } + .bg-\[\#6d6d6d\] { + background-color: #6d6d6d; + } + .bg-neutral { + background-color: rgba(var(--color-neutral), 1); + } + .bg-neutral-100 { + background-color: rgba(var(--color-neutral-100), 1); + } + .bg-neutral-100\/50 { + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-100), 1), 1) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-100), 1) 50%, transparent); + } + } + .bg-neutral-300 { + background-color: rgba(var(--color-neutral-300), 1); + } + .bg-neutral-500\/50 { + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-500), 1), 1) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-500), 1) 50%, transparent); + } + } + .bg-neutral\/50 { + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral), 1), 1) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral), 1) 50%, transparent); + } + } + .bg-primary-100 { + background-color: rgba(var(--color-primary-100), 1); + } + .bg-primary-200 { + background-color: rgba(var(--color-primary-200), 1); + } + .bg-primary-500 { + background-color: rgba(var(--color-primary-500), 1); + } + .bg-primary-600 { + background-color: rgba(var(--color-primary-600), 1); + } + .bg-transparent { + background-color: transparent; + } + .bg-gradient-to-b { + --tw-gradient-position: to bottom in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + .bg-gradient-to-r { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + .bg-gradient-to-t { + --tw-gradient-position: to top in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + .bg-none { + background-image: none; + } + .from-neutral { + --tw-gradient-from: rgba(var(--color-neutral), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .from-primary-500 { + --tw-gradient-from: rgba(var(--color-primary-500), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .from-60\% { + --tw-gradient-from-position: 60%; + } + .to-neutral { + --tw-gradient-to: rgba(var(--color-neutral), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-neutral-100 { + --tw-gradient-to: rgba(var(--color-neutral-100), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-secondary-600 { + --tw-gradient-to: rgba(var(--color-secondary-600), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-transparent { + --tw-gradient-to: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .bg-clip-padding { + background-clip: padding-box; + } + .object-cover { + object-fit: cover; + } + .object-scale-down { + object-fit: scale-down; + } + .object-left { + object-position: left; + } + .\!p-0 { + padding: calc(var(--spacing) * 0) !important; + } + .p-0 { + padding: calc(var(--spacing) * 0); + } + .p-1\.5 { + padding: calc(var(--spacing) * 1.5); + } + .p-4 { + padding: calc(var(--spacing) * 4); + } + .p-5 { + padding: calc(var(--spacing) * 5); + } + .p-6 { + padding: calc(var(--spacing) * 6); + } + .px-0 { + padding-inline: calc(var(--spacing) * 0); + } + .px-1 { + padding-inline: calc(var(--spacing) * 1); + } + .px-1\.5 { + padding-inline: calc(var(--spacing) * 1.5); + } + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + .px-6 { + padding-inline: calc(var(--spacing) * 6); + } + .px-\[0\.4rem\] { + padding-inline: 0.4rem; + } + .px-\[30px\] { + padding-inline: 30px; + } + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + .py-3 { + padding-block: calc(var(--spacing) * 3); + } + .py-4 { + padding-block: calc(var(--spacing) * 4); + } + .py-6 { + padding-block: calc(var(--spacing) * 6); + } + .py-8 { + padding-block: calc(var(--spacing) * 8); + } + .py-10 { + padding-block: calc(var(--spacing) * 10); + } + .py-16 { + padding-block: calc(var(--spacing) * 16); + } + .py-\[0\.4rem\] { + padding-block: 0.4rem; + } + .py-\[1px\] { + padding-block: 1px; + } + .pt-2 { + padding-top: calc(var(--spacing) * 2); + } + .pt-3 { + padding-top: calc(var(--spacing) * 3); + } + .pt-4 { + padding-top: calc(var(--spacing) * 4); + } + .pt-8 { + padding-top: calc(var(--spacing) * 8); + } + .pt-16 { + padding-top: calc(var(--spacing) * 16); + } + .pr-\[24px\] { + padding-right: 24px; + } + .pb-2 { + padding-bottom: calc(var(--spacing) * 2); + } + .pb-3 { + padding-bottom: calc(var(--spacing) * 3); + } + .pb-4 { + padding-bottom: calc(var(--spacing) * 4); + } + .pb-6 { + padding-bottom: calc(var(--spacing) * 6); + } + .pb-32 { + padding-bottom: calc(var(--spacing) * 32); + } + .pl-2 { + padding-left: calc(var(--spacing) * 2); + } + .pl-\[24px\] { + padding-left: 24px; + } + .text-center { + text-align: center; + } + .text-left { + text-align: left; + } + .text-right { + text-align: right; + } + .-indent-\[999px\] { + text-indent: calc(999px * -1); + } + .align-bottom { + vertical-align: bottom; + } + .align-middle { + vertical-align: middle; + } + .align-text-bottom { + vertical-align: text-bottom; + } + .align-top { + vertical-align: top; + } + .text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + .text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + .text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + .text-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + .text-lg { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + .text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + .text-\[0\.6rem\] { + font-size: 0.6rem; + } + .leading-3 { + --tw-leading: calc(var(--spacing) * 3); + line-height: calc(var(--spacing) * 3); + } + .leading-6 { + --tw-leading: calc(var(--spacing) * 6); + line-height: calc(var(--spacing) * 6); + } + .leading-7 { + --tw-leading: calc(var(--spacing) * 7); + line-height: calc(var(--spacing) * 7); + } + .leading-\[1\.6\] { + --tw-leading: 1.6; + line-height: 1.6; + } + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + .font-extrabold { + --tw-font-weight: var(--font-weight-extrabold); + font-weight: var(--font-weight-extrabold); + } + .font-light { + --tw-font-weight: var(--font-weight-light); + font-weight: var(--font-weight-light); + } + .font-medium { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + .font-normal { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + } + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + .tracking-normal { + --tw-tracking: var(--tracking-normal); + letter-spacing: var(--tracking-normal); + } + .text-wrap { + text-wrap: wrap; + } + .break-normal { + overflow-wrap: normal; + word-break: normal; + } + .break-words { + overflow-wrap: break-word; + } + .\!whitespace-nowrap { + white-space: nowrap !important; + } + .whitespace-normal { + white-space: normal; + } + .\!text-neutral { + color: rgba(var(--color-neutral), 1) !important; + } + .text-neutral-50 { + color: rgba(var(--color-neutral-50), 1); + } + .text-neutral-200 { + color: rgba(var(--color-neutral-200), 1); + } + .text-neutral-300 { + color: rgba(var(--color-neutral-300), 1); + } + .text-neutral-400 { + color: rgba(var(--color-neutral-400), 1); + } + .text-neutral-500 { + color: rgba(var(--color-neutral-500), 1); + } + .text-neutral-700 { + color: rgba(var(--color-neutral-700), 1); + } + .text-neutral-800 { + color: rgba(var(--color-neutral-800), 1); + } + .text-neutral-900 { + color: rgba(var(--color-neutral-900), 1); + } + .text-primary-100 { + color: rgba(var(--color-primary-100), 1); + } + .text-primary-300 { + color: rgba(var(--color-primary-300), 1); + } + .text-primary-400 { + color: rgba(var(--color-primary-400), 1); + } + .text-primary-500 { + color: rgba(var(--color-primary-500), 1); + } + .text-primary-600 { + color: rgba(var(--color-primary-600), 1); + } + .text-primary-700 { + color: rgba(var(--color-primary-700), 1); + } + .text-primary-800 { + color: rgba(var(--color-primary-800), 1); + } + .text-transparent { + color: transparent; + } + .capitalize { + text-transform: capitalize; + } + .lowercase { + text-transform: lowercase; + } + .normal-case { + text-transform: none; + } + .uppercase { + text-transform: uppercase; + } + .italic { + font-style: italic; + } + .not-italic { + font-style: normal; + } + .ordinal { + --tw-ordinal: ordinal; + font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,); + } + .\!no-underline { + text-decoration-line: none !important; + } + .line-through { + text-decoration-line: line-through; + } + .no-underline { + text-decoration-line: none; + } + .overline { + text-decoration-line: overline; + } + .underline { + text-decoration-line: underline; + } + .decoration-neutral-300 { + text-decoration-color: rgba(var(--color-neutral-300), 1); + } + .decoration-primary-500 { + text-decoration-color: rgba(var(--color-primary-500), 1); + } + .underline-offset-auto { + text-underline-offset: auto; + } + .\!opacity-0 { + opacity: 0% !important; + } + .\!opacity-100 { + opacity: 100% !important; + } + .opacity-0 { + opacity: 0%; + } + .opacity-30 { + opacity: 30%; + } + .opacity-50 { + opacity: 50%; + } + .opacity-60 { + opacity: 60%; + } + .opacity-65 { + opacity: 65%; + } + .opacity-100 { + opacity: 100%; + } + .mix-blend-multiply { + mix-blend-mode: multiply; + } + .mix-blend-normal { + mix-blend-mode: normal; + } + .shadow { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-2xl { + --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-lg { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-xl { + --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .ring { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .outline { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + .blur { + --tw-blur: blur(8px); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .blur\! { + --tw-blur: blur(8px) !important; + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,) !important; + } + .invert { + --tw-invert: invert(100%); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .filter\! { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,) !important; + } + .backdrop-blur { + --tw-backdrop-blur: blur(8px); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } + .backdrop-blur-2xl { + --tw-backdrop-blur: blur(var(--blur-2xl)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } + .backdrop-blur-sm { + --tw-backdrop-blur: blur(var(--blur-sm)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-\[height\] { + transition-property: height; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-\[transform\,_opacity\] { + transition-property: transform, opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-\[width\] { + transition-property: width; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-opacity { + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .duration-150 { + --tw-duration: 150ms; + transition-duration: 150ms; + } + .duration-200 { + --tw-duration: 200ms; + transition-duration: 200ms; + } + .duration-300 { + --tw-duration: 300ms; + transition-duration: 300ms; + } + .duration-\[350ms\] { + --tw-duration: 350ms; + transition-duration: 350ms; + } + .duration-\[600ms\] { + --tw-duration: 600ms; + transition-duration: 600ms; + } + .ease-\[cubic-bezier\(0\,0\,0\.15\,1\)\,_cubic-bezier\(0\,0\,0\.15\,1\)\] { + --tw-ease: cubic-bezier(0,0,0.15,1), cubic-bezier(0,0,0.15,1); + transition-timing-function: cubic-bezier(0,0,0.15,1), cubic-bezier(0,0,0.15,1); + } + .ease-\[cubic-bezier\(0\.25\,0\.1\,0\.25\,1\.0\)\] { + --tw-ease: cubic-bezier(0.25,0.1,0.25,1.0); + transition-timing-function: cubic-bezier(0.25,0.1,0.25,1.0); + } + .ease-in { + --tw-ease: var(--ease-in); + transition-timing-function: var(--ease-in); + } + .ease-in-out { + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } + .ease-linear { + --tw-ease: linear; + transition-timing-function: linear; + } + .ease-out { + --tw-ease: var(--ease-out); + transition-timing-function: var(--ease-out); + } + .\!\[clip\:rect\(0\,0\,0\,0\)\] { + clip: rect(0,0,0,0) !important; + } + .scrollbar-thumb-neutral-400 { + --scrollbar-thumb: oklch(70.8% 0 0); + } + .scrollbar-track-neutral-200 { + --scrollbar-track: oklch(92.2% 0 0); + } + .group-hover\:text-primary-300 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: rgba(var(--color-primary-300), 1); + } + } + } + .group-hover\:text-primary-600 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: rgba(var(--color-primary-600), 1); + } + } + } + .group-hover\:underline { + &:is(:where(.group):hover *) { + @media (hover: hover) { + text-decoration-line: underline; + } + } + } + .group-hover\:decoration-primary-500 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + text-decoration-color: rgba(var(--color-primary-500), 1); + } + } + } + .group-hover\:opacity-100 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + opacity: 100%; + } + } + } + .group-data-\[twe-input-focused\]\:border-x-0 { + &:is(:where(.group)[data-twe-input-focused] *) { + border-inline-style: var(--tw-border-style); + border-inline-width: 0px; + } + } + .group-data-\[twe-input-focused\]\:border-s-0 { + &:is(:where(.group)[data-twe-input-focused] *) { + border-inline-start-style: var(--tw-border-style); + border-inline-start-width: 0px; + } + } + .group-data-\[twe-input-focused\]\:border-e-0 { + &:is(:where(.group)[data-twe-input-focused] *) { + border-inline-end-style: var(--tw-border-style); + border-inline-end-width: 0px; + } + } + .group-data-\[twe-input-focused\]\:border-t { + &:is(:where(.group)[data-twe-input-focused] *) { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + } + .group-data-\[twe-input-focused\]\:border-solid { + &:is(:where(.group)[data-twe-input-focused] *) { + --tw-border-style: solid; + border-style: solid; + } + } + .group-data-\[twe-input-focused\]\:border-t-transparent { + &:is(:where(.group)[data-twe-input-focused] *) { + border-top-color: transparent; + } + } + .group-data-\[twe-input-state-active\]\:border-x-0 { + &:is(:where(.group)[data-twe-input-state-active] *) { + border-inline-style: var(--tw-border-style); + border-inline-width: 0px; + } + } + .group-data-\[twe-input-state-active\]\:border-s-0 { + &:is(:where(.group)[data-twe-input-state-active] *) { + border-inline-start-style: var(--tw-border-style); + border-inline-start-width: 0px; + } + } + .group-data-\[twe-input-state-active\]\:border-e-0 { + &:is(:where(.group)[data-twe-input-state-active] *) { + border-inline-end-style: var(--tw-border-style); + border-inline-end-width: 0px; + } + } + .group-data-\[twe-input-state-active\]\:border-t { + &:is(:where(.group)[data-twe-input-state-active] *) { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + } + .group-data-\[twe-input-state-active\]\:border-solid { + &:is(:where(.group)[data-twe-input-state-active] *) { + --tw-border-style: solid; + border-style: solid; + } + } + .group-data-\[twe-input-state-active\]\:border-t-transparent { + &:is(:where(.group)[data-twe-input-state-active] *) { + border-top-color: transparent; + } + } + .after\:clear-both { + &::after { + content: var(--tw-content); + clear: both; + } + } + .after\:block { + &::after { + content: var(--tw-content); + display: block; + } + } + .after\:content-\[\'\'\] { + &::after { + content: var(--tw-content); + --tw-content: ''; + content: var(--tw-content); + } + } + .first\:mt-8 { + &:first-child { + margin-top: calc(var(--spacing) * 8); + } + } + .empty\:hidden { + &:empty { + display: none; + } + } + .hover\:border-transparent { + &:hover { + @media (hover: hover) { + border-color: transparent; + } + } + } + .hover\:\!bg-primary-500 { + &:hover { + @media (hover: hover) { + background-color: rgba(var(--color-primary-500), 1) !important; + } + } + } + .hover\:bg-primary-100 { + &:hover { + @media (hover: hover) { + background-color: rgba(var(--color-primary-100), 1); + } + } + } + .hover\:bg-primary-500 { + &:hover { + @media (hover: hover) { + background-color: rgba(var(--color-primary-500), 1); + } + } + } + .hover\:bg-primary-600 { + &:hover { + @media (hover: hover) { + background-color: rgba(var(--color-primary-600), 1); + } + } + } + .hover\:text-neutral { + &:hover { + @media (hover: hover) { + color: rgba(var(--color-neutral), 1); + } + } + } + .hover\:text-primary-400 { + &:hover { + @media (hover: hover) { + color: rgba(var(--color-primary-400), 1); + } + } + } + .hover\:text-primary-500 { + &:hover { + @media (hover: hover) { + color: rgba(var(--color-primary-500), 1); + } + } + } + .hover\:text-primary-600 { + &:hover { + @media (hover: hover) { + color: rgba(var(--color-primary-600), 1); + } + } + } + .hover\:text-primary-700 { + &:hover { + @media (hover: hover) { + color: rgba(var(--color-primary-700), 1); + } + } + } + .hover\:no-underline { + &:hover { + @media (hover: hover) { + text-decoration-line: none; + } + } + } + .hover\:underline { + &:hover { + @media (hover: hover) { + text-decoration-line: underline; + } + } + } + .hover\:decoration-neutral-300 { + &:hover { + @media (hover: hover) { + text-decoration-color: rgba(var(--color-neutral-300), 1); + } + } + } + .hover\:decoration-primary-400 { + &:hover { + @media (hover: hover) { + text-decoration-color: rgba(var(--color-primary-400), 1); + } + } + } + .hover\:decoration-primary-500 { + &:hover { + @media (hover: hover) { + text-decoration-color: rgba(var(--color-primary-500), 1); + } + } + } + .hover\:decoration-2 { + &:hover { + @media (hover: hover) { + text-decoration-thickness: 2px; + } + } + } + .hover\:underline-offset-2 { + &:hover { + @media (hover: hover) { + text-underline-offset: 2px; + } + } + } + .hover\:opacity-90 { + &:hover { + @media (hover: hover) { + opacity: 90%; + } + } + } + .hover\:outline-none { + &:hover { + @media (hover: hover) { + --tw-outline-style: none; + outline-style: none; + } + } + } + .focus\:translate-y-0 { + &:focus { + --tw-translate-y: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .focus\:bg-primary-100 { + &:focus { + background-color: rgba(var(--color-primary-100), 1); + } + } + .focus\:no-underline { + &:focus { + text-decoration-line: none; + } + } + .focus\:opacity-90 { + &:focus { + opacity: 90%; + } + } + .focus\:outline-2 { + &:focus { + outline-style: var(--tw-outline-style); + outline-width: 2px; + } + } + .focus\:outline-transparent { + &:focus { + outline-color: transparent; + } + } + .focus\:outline-dotted { + &:focus { + --tw-outline-style: dotted; + outline-style: dotted; + } + } + .focus\:outline-none { + &:focus { + --tw-outline-style: none; + outline-style: none; + } + } + .data-\[popper-reference-hidden\]\:hidden { + &[data-popper-reference-hidden] { + display: none; + } + } + .data-\[twe-carousel-fade\]\:z-0 { + &[data-twe-carousel-fade] { + z-index: 0; + } + } + .data-\[twe-carousel-fade\]\:z-\[1\] { + &[data-twe-carousel-fade] { + z-index: 1; + } + } + .data-\[twe-carousel-fade\]\:opacity-0 { + &[data-twe-carousel-fade] { + opacity: 0%; + } + } + .data-\[twe-carousel-fade\]\:opacity-100 { + &[data-twe-carousel-fade] { + opacity: 100%; + } + } + .data-\[twe-carousel-fade\]\:delay-600 { + &[data-twe-carousel-fade] { + transition-delay: 600ms; + } + } + .data-\[twe-carousel-fade\]\:duration-\[600ms\] { + &[data-twe-carousel-fade] { + --tw-duration: 600ms; + transition-duration: 600ms; + } + } + .motion-reduce\:transition-none { + @media (prefers-reduced-motion: reduce) { + transition-property: none; + } + } + .sm\:mt-16 { + @media (width >= 640px) { + margin-top: calc(var(--spacing) * 16); + } + } + .sm\:mb-0 { + @media (width >= 640px) { + margin-bottom: calc(var(--spacing) * 0); + } + } + .sm\:w-1\/2 { + @media (width >= 640px) { + width: calc(1/2 * 100%); + } + } + .sm\:grid-cols-2 { + @media (width >= 640px) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .sm\:flex-row { + @media (width >= 640px) { + flex-direction: row; + } + } + .sm\:overflow-hidden { + @media (width >= 640px) { + overflow: hidden; + } + } + .sm\:p-6 { + @media (width >= 640px) { + padding: calc(var(--spacing) * 6); + } + } + .sm\:px-6 { + @media (width >= 640px) { + padding-inline: calc(var(--spacing) * 6); + } + } + .sm\:px-14 { + @media (width >= 640px) { + padding-inline: calc(var(--spacing) * 14); + } + } + .sm\:py-24 { + @media (width >= 640px) { + padding-block: calc(var(--spacing) * 24); + } + } + .sm\:text-lg { + @media (width >= 640px) { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + } + .md\:mt-0 { + @media (width >= 853px) { + margin-top: calc(var(--spacing) * 0); + } + } + .md\:-mr-16 { + @media (width >= 853px) { + margin-right: calc(var(--spacing) * -16); + } + } + .md\:mr-7 { + @media (width >= 853px) { + margin-right: calc(var(--spacing) * 7); + } + } + .md\:ml-12 { + @media (width >= 853px) { + margin-left: calc(var(--spacing) * 12); + } + } + .md\:flex { + @media (width >= 853px) { + display: flex; + } + } + .md\:hidden { + @media (width >= 853px) { + display: none; + } + } + .md\:h-56 { + @media (width >= 853px) { + height: calc(var(--spacing) * 56); + } + } + .md\:h-\[200px\] { + @media (width >= 853px) { + height: 200px; + } + } + .md\:w-1\/3 { + @media (width >= 853px) { + width: calc(1/3 * 100%); + } + } + .md\:w-auto { + @media (width >= 853px) { + width: auto; + } + } + .md\:grid-cols-3 { + @media (width >= 853px) { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + .md\:flex-nowrap { + @media (width >= 853px) { + flex-wrap: nowrap; + } + } + .md\:justify-start { + @media (width >= 853px) { + justify-content: flex-start; + } + } + .md\:p-\[10vh\] { + @media (width >= 853px) { + padding: 10vh; + } + } + .md\:px-24 { + @media (width >= 853px) { + padding-inline: calc(var(--spacing) * 24); + } + } + .lg\:absolute { + @media (width >= 1024px) { + position: absolute; + } + } + .lg\:relative { + @media (width >= 1024px) { + position: relative; + } + } + .lg\:sticky { + @media (width >= 1024px) { + position: sticky; + } + } + .lg\:top-10 { + @media (width >= 1024px) { + top: calc(var(--spacing) * 10); + } + } + .lg\:top-\[140px\] { + @media (width >= 1024px) { + top: 140px; + } + } + .lg\:left-0 { + @media (width >= 1024px) { + left: calc(var(--spacing) * 0); + } + } + .lg\:order-last { + @media (width >= 1024px) { + order: 9999; + } + } + .lg\:m-0 { + @media (width >= 1024px) { + margin: calc(var(--spacing) * 0); + } + } + .lg\:mx-0 { + @media (width >= 1024px) { + margin-inline: calc(var(--spacing) * 0); + } + } + .lg\:mx-auto { + @media (width >= 1024px) { + margin-inline: auto; + } + } + .lg\:mt-0 { + @media (width >= 1024px) { + margin-top: calc(var(--spacing) * 0); + } + } + .lg\:ml-auto { + @media (width >= 1024px) { + margin-left: auto; + } + } + .lg\:block { + @media (width >= 1024px) { + display: block; + } + } + .lg\:grid { + @media (width >= 1024px) { + display: grid; + } + } + .lg\:hidden { + @media (width >= 1024px) { + display: none; + } + } + .lg\:h-72 { + @media (width >= 1024px) { + height: calc(var(--spacing) * 72); + } + } + .lg\:h-full { + @media (width >= 1024px) { + height: 100%; + } + } + .lg\:w-1\/4 { + @media (width >= 1024px) { + width: calc(1/4 * 100%); + } + } + .lg\:w-auto { + @media (width >= 1024px) { + width: auto; + } + } + .lg\:max-w-7xl { + @media (width >= 1024px) { + max-width: var(--container-7xl); + } + } + .lg\:max-w-none { + @media (width >= 1024px) { + max-width: none; + } + } + .lg\:max-w-xs { + @media (width >= 1024px) { + max-width: var(--container-xs); + } + } + .lg\:grid-flow-col-dense { + @media (width >= 1024px) { + grid-auto-flow: column dense; + } + } + .lg\:grid-cols-2 { + @media (width >= 1024px) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .lg\:flex-row { + @media (width >= 1024px) { + flex-direction: row; + } + } + .lg\:gap-24 { + @media (width >= 1024px) { + gap: calc(var(--spacing) * 24); + } + } + .lg\:p-\[12vh\] { + @media (width >= 1024px) { + padding: 12vh; + } + } + .lg\:px-0 { + @media (width >= 1024px) { + padding-inline: calc(var(--spacing) * 0); + } + } + .lg\:px-8 { + @media (width >= 1024px) { + padding-inline: calc(var(--spacing) * 8); + } + } + .lg\:px-32 { + @media (width >= 1024px) { + padding-inline: calc(var(--spacing) * 32); + } + } + .lg\:py-16 { + @media (width >= 1024px) { + padding-block: calc(var(--spacing) * 16); + } + } + .lg\:py-32 { + @media (width >= 1024px) { + padding-block: calc(var(--spacing) * 32); + } + } + .xl\:w-1\/4 { + @media (width >= 1280px) { + width: calc(1/4 * 100%); + } + } + .xl\:grid-cols-4 { + @media (width >= 1280px) { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + .\32 xl\:grid-cols-5 { + @media (width >= 1536px) { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + } + .ltr\:right-0 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + right: calc(var(--spacing) * 0); + } + } + .ltr\:-left-6 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + left: calc(var(--spacing) * -6); + } + } + .ltr\:mr-1 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + margin-right: calc(var(--spacing) * 1); + } + } + .ltr\:mr-4 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + margin-right: calc(var(--spacing) * 4); + } + } + .ltr\:-ml-5 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + margin-left: calc(var(--spacing) * -5); + } + } + .ltr\:ml-2 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + margin-left: calc(var(--spacing) * 2); + } + } + .ltr\:block { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + display: block; + } + } + .ltr\:hidden { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + display: none; + } + } + .ltr\:inline { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + display: inline; + } + } + .ltr\:border-l { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + border-left-style: var(--tw-border-style); + border-left-width: 1px; + } + } + .ltr\:pr-2 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + padding-right: calc(var(--spacing) * 2); + } + } + .ltr\:pr-3 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + padding-right: calc(var(--spacing) * 3); + } + } + .ltr\:pl-5 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + padding-left: calc(var(--spacing) * 5); + } + } + .ltr\:text-right { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + text-align: right; + } + } + .ltr\:sm\:mr-7 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + @media (width >= 640px) { + margin-right: calc(var(--spacing) * 7); + } + } + } + .ltr\:sm\:last\:mr-0 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + @media (width >= 640px) { + &:last-child { + margin-right: calc(var(--spacing) * 0); + } + } + } + } + .ltr\:lg\:pl-8 { + &:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { + @media (width >= 1024px) { + padding-left: calc(var(--spacing) * 8); + } + } + } + .rtl\:-right-6 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + right: calc(var(--spacing) * -6); + } + } + .rtl\:left-0 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + left: calc(var(--spacing) * 0); + } + } + .rtl\:-mr-5 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + margin-right: calc(var(--spacing) * -5); + } + } + .rtl\:mr-2 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + margin-right: calc(var(--spacing) * 2); + } + } + .rtl\:ml-1 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + margin-left: calc(var(--spacing) * 1); + } + } + .rtl\:ml-4 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + margin-left: calc(var(--spacing) * 4); + } + } + .rtl\:block { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + display: block; + } + } + .rtl\:hidden { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + display: none; + } + } + .rtl\:inline { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + display: inline; + } + } + .rtl\:border-r { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + border-right-style: var(--tw-border-style); + border-right-width: 1px; + } + } + .rtl\:pr-5 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + padding-right: calc(var(--spacing) * 5); + } + } + .rtl\:pl-2 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + padding-left: calc(var(--spacing) * 2); + } + } + .rtl\:pl-3 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + padding-left: calc(var(--spacing) * 3); + } + } + .rtl\:text-left { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + text-align: left; + } + } + .rtl\:sm\:ml-7 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + @media (width >= 640px) { + margin-left: calc(var(--spacing) * 7); + } + } + } + .rtl\:sm\:last\:ml-0 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + @media (width >= 640px) { + &:last-child { + margin-left: calc(var(--spacing) * 0); + } + } + } + } + .rtl\:lg\:pr-8 { + &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { + @media (width >= 1024px) { + padding-right: calc(var(--spacing) * 8); + } + } + } + .dark\:flex { + &:is(.dark *) { + display: flex; + } + } + .dark\:hidden { + &:is(.dark *) { + display: none; + } + } + .dark\:border-neutral-400 { + &:is(.dark *) { + border-color: rgba(var(--color-neutral-400), 1); + } + } + .dark\:border-neutral-600 { + &:is(.dark *) { + border-color: rgba(var(--color-neutral-600), 1); + } + } + .dark\:border-neutral-700 { + &:is(.dark *) { + border-color: rgba(var(--color-neutral-700), 1); + } + } + .dark\:border-primary-300 { + &:is(.dark *) { + border-color: rgba(var(--color-primary-300), 1); + } + } + .dark\:border-primary-600 { + &:is(.dark *) { + border-color: rgba(var(--color-primary-600), 1); + } + } + .dark\:prose-invert { + &:is(.dark *) { + --tw-prose-body: var(--tw-prose-invert-body); + --tw-prose-headings: var(--tw-prose-invert-headings); + --tw-prose-lead: var(--tw-prose-invert-lead); + --tw-prose-links: var(--tw-prose-invert-links); + --tw-prose-bold: var(--tw-prose-invert-bold); + --tw-prose-counters: var(--tw-prose-invert-counters); + --tw-prose-bullets: var(--tw-prose-invert-bullets); + --tw-prose-hr: var(--tw-prose-invert-hr); + --tw-prose-quotes: var(--tw-prose-invert-quotes); + --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders); + --tw-prose-captions: var(--tw-prose-invert-captions); + --tw-prose-kbd: var(--tw-prose-invert-kbd); + --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows); + --tw-prose-code: var(--tw-prose-invert-code); + --tw-prose-pre-code: var(--tw-prose-invert-pre-code); + --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); + --tw-prose-th-borders: var(--tw-prose-invert-th-borders); + --tw-prose-td-borders: var(--tw-prose-invert-td-borders); + :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-600), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-neutral-600), 1) 100%, transparent); + } + &:hover { + color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + } + :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: color-mix(in srgb, rgba(rgba(var(--color-neutral-200), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, rgba(var(--color-neutral-200), 1) 100%, transparent); + } + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + } + :where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + background-color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 100%, transparent); + } + } + :where(a.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + :where(p.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: color-mix(in srgb, rgba(rgba(var(--color-primary-400), 1), 1) 100%, transparent); + @supports (color: color-mix(in lab, red, red)) { + text-decoration-color: color-mix(in oklab, rgba(var(--color-primary-400), 1) 100%, transparent); + } + } + } + } + .dark\:bg-neutral-400 { + &:is(.dark *) { + background-color: rgba(var(--color-neutral-400), 1); + } + } + .dark\:bg-neutral-600 { + &:is(.dark *) { + background-color: rgba(var(--color-neutral-600), 1); + } + } + .dark\:bg-neutral-700 { + &:is(.dark *) { + background-color: rgba(var(--color-neutral-700), 1); + } + } + .dark\:bg-neutral-800 { + &:is(.dark *) { + background-color: rgba(var(--color-neutral-800), 1); + } + } + .dark\:bg-neutral-800\/50 { + &:is(.dark *) { + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-800), 1), 1) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-800), 1) 50%, transparent); + } + } + } + .dark\:bg-neutral-900\/50 { + &:is(.dark *) { + background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-900), 1), 1) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, rgba(var(--color-neutral-900), 1) 50%, transparent); + } + } + } + .dark\:bg-primary-300 { + &:is(.dark *) { + background-color: rgba(var(--color-primary-300), 1); + } + } + .dark\:bg-primary-400 { + &:is(.dark *) { + background-color: rgba(var(--color-primary-400), 1); + } + } + .dark\:bg-primary-800 { + &:is(.dark *) { + background-color: rgba(var(--color-primary-800), 1); + } + } + .dark\:bg-primary-900 { + &:is(.dark *) { + background-color: rgba(var(--color-primary-900), 1); + } + } + .dark\:from-neutral-800 { + &:is(.dark *) { + --tw-gradient-from: rgba(var(--color-neutral-800), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:from-primary-600 { + &:is(.dark *) { + --tw-gradient-from: rgba(var(--color-primary-600), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:to-neutral-800 { + &:is(.dark *) { + --tw-gradient-to: rgba(var(--color-neutral-800), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:to-secondary-800 { + &:is(.dark *) { + --tw-gradient-to: rgba(var(--color-secondary-800), 1); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:text-neutral { + &:is(.dark *) { + color: rgba(var(--color-neutral), 1); + } + } + .dark\:text-neutral-100 { + &:is(.dark *) { + color: rgba(var(--color-neutral-100), 1); + } + } + .dark\:text-neutral-200 { + &:is(.dark *) { + color: rgba(var(--color-neutral-200), 1); + } + } + .dark\:text-neutral-300 { + &:is(.dark *) { + color: rgba(var(--color-neutral-300), 1); + } + } + .dark\:text-neutral-400 { + &:is(.dark *) { + color: rgba(var(--color-neutral-400), 1); + } + } + .dark\:text-neutral-500 { + &:is(.dark *) { + color: rgba(var(--color-neutral-500), 1); + } + } + .dark\:text-neutral-700 { + &:is(.dark *) { + color: rgba(var(--color-neutral-700), 1); + } + } + .dark\:text-neutral-800 { + &:is(.dark *) { + color: rgba(var(--color-neutral-800), 1); + } + } + .dark\:text-primary-200 { + &:is(.dark *) { + color: rgba(var(--color-primary-200), 1); + } + } + .dark\:text-primary-400 { + &:is(.dark *) { + color: rgba(var(--color-primary-400), 1); + } + } + .dark\:opacity-60 { + &:is(.dark *) { + opacity: 60%; + } + } + .dark\:scrollbar-thumb-neutral-600 { + &:is(.dark *) { + --scrollbar-thumb: oklch(43.9% 0 0); + } + } + .dark\:scrollbar-track-neutral-800 { + &:is(.dark *) { + --scrollbar-track: oklch(26.9% 0 0); + } + } + .dark\:group-hover\:text-neutral-700 { + &:is(.dark *) { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: rgba(var(--color-neutral-700), 1); + } + } + } + } + .dark\:group-hover\:text-primary-400 { + &:is(.dark *) { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: rgba(var(--color-primary-400), 1); + } + } + } + } + .dark\:hover\:\!bg-primary-700 { + &:is(.dark *) { + &:hover { + @media (hover: hover) { + background-color: rgba(var(--color-primary-700), 1) !important; + } + } + } + } + .dark\:hover\:bg-primary-400 { + &:is(.dark *) { + &:hover { + @media (hover: hover) { + background-color: rgba(var(--color-primary-400), 1); + } + } + } + } + .dark\:hover\:bg-primary-900 { + &:is(.dark *) { + &:hover { + @media (hover: hover) { + background-color: rgba(var(--color-primary-900), 1); + } + } + } + } + .dark\:hover\:text-neutral-800 { + &:is(.dark *) { + &:hover { + @media (hover: hover) { + color: rgba(var(--color-neutral-800), 1); + } + } + } + } + .dark\:hover\:text-primary-400 { + &:is(.dark *) { + &:hover { + @media (hover: hover) { + color: rgba(var(--color-primary-400), 1); + } + } + } + } + .dark\:focus\:bg-primary-900 { + &:is(.dark *) { + &:focus { + background-color: rgba(var(--color-primary-900), 1); + } + } + } + .print\:hidden { + @media print { + display: none; + } + } +}body a,body button{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.icon svg{height:1em;width:1em}.logo svg{height:5rem;width:5rem}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}.prose blockquote{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { border-right-style:var(--tw-border-style); border-right-width:4px; } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { border-left-style:var(--tw-border-style); border-left-width:0px; } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 4); }}.prose ul>li,.prose ol>li{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { margin-right:calc(var(--spacing) * 7); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 2); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-left:calc(var(--spacing) * 0); }}.prose ol>li:before,.prose ul>li:before{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { right:calc(var(--spacing) * 1); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { left:auto; }}.prose thead td:first-child,.prose thead th:first-child{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 0); }}.prose thead td:last-child,.prose thead th:last-child{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-left:calc(var(--spacing) * 0); }}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:calc(var(--spacing) * 3)}.toc ul,.toc li{list-style-type:none;padding-inline:calc(var(--spacing) * 0);--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.toc ul ul{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"] *) { padding-left:calc(var(--spacing) * 4); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 4); }}.toc a{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:rgba(var(--color-neutral-700),1);&:is(.dark *) { color:rgba(var(--color-neutral-400),1); }}.toc ul>li{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { margin-right:calc(var(--spacing) * 0); }}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;top:calc(var(--spacing) * 0);right:calc(var(--spacing) * 0);z-index:10;width:calc(var(--spacing) * 20);cursor:pointer;border-top-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md);background-color:rgba(var(--color-neutral-200),1);padding-block:calc(var(--spacing) * 1);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;color:rgba(var(--color-neutral-700),1);opacity:90%;&:is(.dark *) { background-color:rgba(var(--color-neutral-600),1); } &:is(.dark *) { color:rgba(var(--color-neutral-200),1); }}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{background-color:rgba(var(--color-primary-100),1);&:is(.dark *) { background-color:rgba(var(--color-primary-600),1); }}.copy-textarea{position:absolute;z-index:calc(10 * -1);opacity:5%}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}code{word-wrap:break-word;overflow-wrap:break-word}a{word-break:break-word;word-wrap:break-word;overflow-wrap:break-word}.prose .chroma{position:static;border-radius:var(--radius-md);background-color:rgba(var(--color-neutral-50),1);color:rgba(var(--color-neutral-700),1);&:is(.dark *) { background-color:rgba(var(--color-neutral-700),1); } &:is(.dark *) { color:rgba(var(--color-neutral-200),1); }}.chroma .lntd,.chroma .lntd pre{margin:calc(var(--spacing) * 0);--tw-border-style:none;border-style:none;padding:calc(var(--spacing) * 0);vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));border-spacing:0}.chroma .hl{margin-inline:calc(var(--spacing) * -4);display:block;width:auto;background-color:rgba(var(--color-primary-100),1);padding-inline:calc(var(--spacing) * 4);&:is(.dark *) { background-color:rgba(var(--color-primary-900),1); }}.chroma .lntd .hl{margin:calc(var(--spacing) * 0);padding:calc(var(--spacing) * 0)}.chroma .lnt,.chroma .ln{margin-right:.4em;padding-inline:.4em;padding-block:calc(var(--spacing) * 0);color:rgba(var(--color-neutral-600),1);&:is(.dark *) { color:rgba(var(--color-neutral-300),1); }}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{color:rgba(var(--color-primary-600),1);&:is(.dark *) { color:rgba(var(--color-primary-300),1); }}.chroma .kc{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:rgba(var(--color-secondary-400),1);&:is(.dark *) { color:rgba(var(--color-secondary-500),1); }}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:rgba(var(--color-secondary-400),1);&:is(.dark *) { color:rgba(var(--color-secondary-600),1); }}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{color:rgba(var(--color-secondary-900),1);&:is(.dark *) { color:rgba(var(--color-secondary-200),1); }}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{color:rgba(var(--color-secondary-800),1);&:is(.dark *) { color:rgba(var(--color-secondary-300),1); }}.chroma .no,.chroma .ne,.chroma .vg{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:rgba(var(--color-secondary-400),1);&:is(.dark *) { color:rgba(var(--color-secondary-500),1); }}.chroma .nf{color:rgba(var(--color-secondary-600),1);&:is(.dark *) { color:rgba(var(--color-secondary-500),1); }}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gi,.chroma .go,.chroma .gp{color:rgba(var(--color-primary-800),1);&:is(.dark *) { color:rgba(var(--color-primary-400),1); }}.chroma .se{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:rgba(var(--color-secondary-400),1);&:is(.dark *) { color:rgba(var(--color-secondary-500),1); }}.chroma .sr,.chroma .ss{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:rgba(var(--color-primary-800),1);&:is(.dark *) { color:rgba(var(--color-primary-400),1); }}.chroma .ow{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:rgba(var(--color-primary-400),1);&:is(.dark *) { color:rgba(var(--color-primary-600),1); }}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:rgba(var(--color-neutral-500),1);font-style:italic;&:is(.dark *) { color:rgba(var(--color-neutral-400),1); }}.chroma .ch{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:rgba(var(--color-neutral-500),1);font-style:italic;&:is(.dark *) { color:rgba(var(--color-neutral-400),1); }}.chroma .ge{font-style:italic}.chroma .gh{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:rgba(var(--color-neutral-500),1)}.chroma .gs{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.chroma .gu,.chroma .gt{color:rgba(var(--color-neutral-500),1)}.chroma .gl{text-decoration-line:underline}pre{text-align:left}.thumbnail{min-width:300px;height:180px;background-repeat:no-repeat;background-size:cover;background-position:50%}.thumbnail_card{height:200px;background-repeat:no-repeat;background-size:cover;background-position:50%}.thumbnail_card_related{height:150px;background-repeat:no-repeat;background-size:cover;background-position:50%}.thumbnail_card_term{height:150px;background-repeat:no-repeat;background-size:cover;background-position:50%}.single_hero_basic{background-repeat:no-repeat;background-size:cover;background-position:50%}.single_hero_round{max-height:50vh;object-fit:cover}.single_hero_background{background-repeat:no-repeat;background-size:cover;background-position:50%;width:calc(100% + 40px);z-index:-10;margin-left:-20px}.hero_gradient{width:100%;height:100%}.thumbnailshadow{box-shadow:5px 5px 20px 1px rgba(0,0,0,.3)}.anchor{display:block;position:relative;top:-150px;height:0;visibility:hidden}@screen sm{.thumbnail { + min-width: 100%; + height: 180px; + } + .article { + flex-wrap: wrap; + } +}@screen md{.thumbnail { + min-width: 300px; + min-height: 180px; + height: auto; + } + .article { + flex-wrap: nowrap; + } +}.medium-zoom-image--opened{z-index:100}.nested-menu:hover+.menuhide{visibility:visible;opacity:1;transition:visibility .3s,opacity .3s ease-in-out}.menuhide:hover{visibility:visible;opacity:1;transition:visibility .3s,opacity .3s ease-in-out}.menuhide{visibility:hidden;opacity:0;transition:visibility .3s,opacity .3s ease-in-out;z-index:1000}.active{text-decoration-line:underline;text-decoration-thickness:3px;text-underline-offset:4px}.grid-w10{width:calc(10% - 5px);margin:0 !important}.grid-w15{width:calc(15% - 5px);margin:0 !important}.grid-w20{width:calc(20% - 5px);margin:0 !important}.grid-w25{width:calc(25% - 5px);margin:0 !important}.grid-w30{width:calc(30% - 5px);margin:0 !important}.grid-w33{width:calc(33% - 5px);margin:0 !important}.grid-w35{width:calc(35% - 5px);margin:0 !important}.grid-w40{width:calc(40% - 5px);margin:0 !important}.grid-w45{width:calc(45% - 5px);margin:0 !important}.grid-w50{width:calc(50% - 5px);margin:0 !important}.grid-w55{width:calc(55% - 5px);margin:0 !important}.grid-w60{width:calc(60% - 5px);margin:0 !important}.grid-w65{width:calc(65% - 5px);margin:0 !important}.grid-w66{width:calc(66% - 5px);margin:0 !important}.grid-w70{width:calc(70% - 5px);margin:0 !important}.grid-w75{width:calc(75% - 5px);margin:0 !important}.grid-w80{width:calc(80% - 5px);margin:0 !important}.grid-w85{width:calc(85% - 5px);margin:0 !important}.grid-w90{width:calc(90% - 5px);margin:0 !important}.grid-w95{width:calc(95% - 5px);margin:0 !important}.grid-w100{width:calc(100% - 5px);margin:0 !important}@screen sm{.sm\:grid-w10 { + width: calc(10% - 5px); + margin: 0px !important; + } + .sm\:grid-w15 { + width: calc(15% - 5px); + margin: 0px !important; + } + .sm\:grid-w20 { + width: calc(20% - 5px); + margin: 0px !important; + } + .sm\:grid-w25 { + width: calc(25% - 5px); + margin: 0px !important; + } + .sm\:grid-w30 { + width: calc(30% - 5px); + margin: 0px !important; + } + .sm\:grid-w33 { + width: calc(33% - 5px); + margin: 0px !important; + } + .sm\:grid-w35 { + width: calc(35% - 5px); + margin: 0px !important; + } + .sm\:grid-w40 { + width: calc(40% - 5px); + margin: 0px !important; + } + .sm\:grid-w45 { + width: calc(45% - 5px); + margin: 0px !important; + } + .sm\:grid-w50 { + width: calc(50% - 5px); + margin: 0px !important; + } + .sm\:grid-w55 { + width: calc(55% - 5px); + margin: 0px !important; + } + .sm\:grid-w60 { + width: calc(60% - 5px); + margin: 0px !important; + } + .sm\:grid-w65 { + width: calc(65% - 5px); + margin: 0px !important; + } + .sm\:grid-w66 { + width: calc(66% - 5px); + margin: 0px !important; + } + .sm\:grid-w70 { + width: calc(70% - 5px); + margin: 0px !important; + } + .sm\:grid-w75 { + width: calc(75% - 5px); + margin: 0px !important; + } + .sm\:grid-w80 { + width: calc(80% - 5px); + margin: 0px !important; + } + .sm\:grid-w85 { + width: calc(85% - 5px); + margin: 0px !important; + } + .sm\:grid-w90 { + width: calc(90% - 5px); + margin: 0px !important; + } + .sm\:grid-w95 { + width: calc(95% - 5px); + margin: 0px !important; + } + .sm\:grid-w100 { + width: calc(100% - 5px); + margin: 0px !important; + } +}@screen md{.md\:grid-w10 { + width: calc(10% - 5px); + margin: 0px !important; + } + .md\:grid-w15 { + width: calc(15% - 5px); + margin: 0px !important; + } + .md\:grid-w20 { + width: calc(20% - 5px); + margin: 0px !important; + } + .md\:grid-w25 { + width: calc(25% - 5px); + margin: 0px !important; + } + .md\:grid-w30 { + width: calc(30% - 5px); + margin: 0px !important; + } + .md\:grid-w33 { + width: calc(33% - 5px); + margin: 0px !important; + } + .md\:grid-w35 { + width: calc(35% - 5px); + margin: 0px !important; + } + .md\:grid-w40 { + width: calc(40% - 5px); + margin: 0px !important; + } + .md\:grid-w45 { + width: calc(45% - 5px); + margin: 0px !important; + } + .md\:grid-w50 { + width: calc(50% - 5px); + margin: 0px !important; + } + .md\:grid-w55 { + width: calc(55% - 5px); + margin: 0px !important; + } + .md\:grid-w60 { + width: calc(60% - 5px); + margin: 0px !important; + } + .md\:grid-w65 { + width: calc(65% - 5px); + margin: 0px !important; + } + .md\:grid-w66 { + width: calc(66% - 5px); + margin: 0px !important; + } + .md\:grid-w70 { + width: calc(70% - 5px); + margin: 0px !important; + } + .md\:grid-w75 { + width: calc(75% - 5px); + margin: 0px !important; + } + .md\:grid-w80 { + width: calc(80% - 5px); + margin: 0px !important; + } + .md\:grid-w85 { + width: calc(85% - 5px); + margin: 0px !important; + } + .md\:grid-w90 { + width: calc(90% - 5px); + margin: 0px !important; + } + .md\:grid-w95 { + width: calc(95% - 5px); + margin: 0px !important; + } + .md\:grid-w100 { + width: calc(100% - 5px); + margin: 0px !important; + } +}@screen lg{.lg\:grid-w10 { + width: calc(10% - 5px); + margin: 0px !important; + } + .lg\:grid-w15 { + width: calc(15% - 5px); + margin: 0px !important; + } + .lg\:grid-w20 { + width: calc(20% - 5px); + margin: 0px !important; + } + .lg\:grid-w25 { + width: calc(25% - 5px); + margin: 0px !important; + } + .lg\:grid-w30 { + width: calc(30% - 5px); + margin: 0px !important; + } + .lg\:grid-w33 { + width: calc(33% - 5px); + margin: 0px !important; + } + .lg\:grid-w35 { + width: calc(35% - 5px); + margin: 0px !important; + } + .lg\:grid-w40 { + width: calc(40% - 5px); + margin: 0px !important; + } + .lg\:grid-w45 { + width: calc(45% - 5px); + margin: 0px !important; + } + .lg\:grid-w50 { + width: calc(50% - 5px); + margin: 0px !important; + } + .lg\:grid-w55 { + width: calc(55% - 5px); + margin: 0px !important; + } + .lg\:grid-w60 { + width: calc(60% - 5px); + margin: 0px !important; + } + .lg\:grid-w65 { + width: calc(65% - 5px); + margin: 0px !important; + } + .lg\:grid-w66 { + width: calc(66% - 5px); + margin: 0px !important; + } + .lg\:grid-w70 { + width: calc(70% - 5px); + margin: 0px !important; + } + .lg\:grid-w75 { + width: calc(75% - 5px); + margin: 0px !important; + } + .lg\:grid-w80 { + width: calc(80% - 5px); + margin: 0px !important; + } + .lg\:grid-w85 { + width: calc(85% - 5px); + margin: 0px !important; + } + .lg\:grid-w90 { + width: calc(90% - 5px); + margin: 0px !important; + } + .lg\:grid-w95 { + width: calc(95% - 5px); + margin: 0px !important; + } + .lg\:grid-w100 { + width: calc(100% - 5px); + margin: 0px !important; + } +}@screen xl{.xl\:grid-w10 { + width: calc(10% - 5px); + margin: 0px !important; + } + .xl\:grid-w15 { + width: calc(15% - 5px); + margin: 0px !important; + } + .xl\:grid-w20 { + width: calc(20% - 5px); + margin: 0px !important; + } + .xl\:grid-w25 { + width: calc(25% - 5px); + margin: 0px !important; + } + .xl\:grid-w30 { + width: calc(30% - 5px); + margin: 0px !important; + } + .xl\:grid-w33 { + width: calc(33% - 5px); + margin: 0px !important; + } + .xl\:grid-w35 { + width: calc(35% - 5px); + margin: 0px !important; + } + .xl\:grid-w40 { + width: calc(40% - 5px); + margin: 0px !important; + } + .xl\:grid-w45 { + width: calc(45% - 5px); + margin: 0px !important; + } + .xl\:grid-w50 { + width: calc(50% - 5px); + margin: 0px !important; + } + .xl\:grid-w55 { + width: calc(55% - 5px); + margin: 0px !important; + } + .xl\:grid-w60 { + width: calc(60% - 5px); + margin: 0px !important; + } + .xl\:grid-w65 { + width: calc(65% - 5px); + margin: 0px !important; + } + .xl\:grid-w66 { + width: calc(66% - 5px); + margin: 0px !important; + } + .xl\:grid-w70 { + width: calc(70% - 5px); + margin: 0px !important; + } + .xl\:grid-w75 { + width: calc(75% - 5px); + margin: 0px !important; + } + .xl\:grid-w80 { + width: calc(80% - 5px); + margin: 0px !important; + } + .xl\:grid-w85 { + width: calc(85% - 5px); + margin: 0px !important; + } + .xl\:grid-w90 { + width: calc(90% - 5px); + margin: 0px !important; + } + .xl\:grid-w95 { + width: calc(95% - 5px); + margin: 0px !important; + } + .xl\:grid-w100 { + width: calc(100% - 5px); + margin: 0px !important; + } +}@screen 2xl{.2xl\:grid-w10 { + width: calc(10% - 5px); + margin: 0px !important; + } + .2xl\:grid-w15 { + width: calc(15% - 5px); + margin: 0px !important; + } + .2xl\:grid-w20 { + width: calc(20% - 5px); + margin: 0px !important; + } + .2xl\:grid-w25 { + width: calc(25% - 5px); + margin: 0px !important; + } + .2xl\:grid-w30 { + width: calc(30% - 5px); + margin: 0px !important; + } + .2xl\:grid-w33 { + width: calc(33% - 5px); + margin: 0px !important; + } + .2xl\:grid-w35 { + width: calc(35% - 5px); + margin: 0px !important; + } + .2xl\:grid-w40 { + width: calc(40% - 5px); + margin: 0px !important; + } + .2xl\:grid-w45 { + width: calc(45% - 5px); + margin: 0px !important; + } + .2xl\:grid-w50 { + width: calc(50% - 5px); + margin: 0px !important; + } + .2xl\:grid-w55 { + width: calc(55% - 5px); + margin: 0px !important; + } + .2xl\:grid-w60 { + width: calc(60% - 5px); + margin: 0px !important; + } + .2xl\:grid-w65 { + width: calc(65% - 5px); + margin: 0px !important; + } + .2xl\:grid-w66 { + width: calc(66% - 5px); + margin: 0px !important; + } + .2xl\:grid-w70 { + width: calc(70% - 5px); + margin: 0px !important; + } + .2xl\:grid-w75 { + width: calc(75% - 5px); + margin: 0px !important; + } + .2xl\:grid-w80 { + width: calc(80% - 5px); + margin: 0px !important; + } + .2xl\:grid-w85 { + width: calc(85% - 5px); + margin: 0px !important; + } + .2xl\:grid-w90 { + width: calc(90% - 5px); + margin: 0px !important; + } + .2xl\:grid-w95 { + width: calc(95% - 5px); + margin: 0px !important; + } + .2xl\:grid-w100 { + width: calc(100% - 5px); + margin: 0px !important; + } +}.ratio-16-9{padding-top:56.25%}.ratio-21-9{padding-top:42.85%}.ratio-32-9{padding-top:28.125%}@screen sm{.sm\:ratio-16-9 { + padding-top: 56.25%; + } + .sm\:ratio-21-9 { + padding-top: 42.85%; + } + .sm\:ratio-32-9 { + padding-top: 28.125%; + } +}@screen md{.md\:ratio-16-9 { + padding-top: 56.25%; + } + .md\:ratio-21-9 { + padding-top: 42.85%; + } + .md\:ratio-32-9 { + padding-top: 28.125%; + } +}@screen lg{.lg\:ratio-16-9 { + padding-top: 56.25%; + } + .lg\:ratio-21-9 { + padding-top: 42.85%; + } + .lg\:ratio-32-9 { + padding-top: 28.125%; + } +}@screen xl{.xl\:ratio-16-9 { + padding-top: 56.25%; + } + .xl\:ratio-21-9 { + padding-top: 42.85%; + } + .xl\:ratio-32-9 { + padding-top: 28.125%; + } +}@screen 2xl{.2xl\:ratio-16-9 { + padding-top: 56.25%; + } + .2xl\:ratio-21-9 { + padding-top: 42.85%; + } + .2xl\:ratio-32-9 { + padding-top: 28.125%; + } +}@layer base{[type='text'],input:where(:not([type])),[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { + appearance: none; + background-color: #fff; + border-color: oklch(55.1% 0.027 264.364); + border-width: 1px; + border-radius: 0px; + padding-top: 0.5rem; + padding-right: 0.75rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + font-size: 1rem; + line-height: 1.5rem; + --tw-shadow: 0 0 #0000; + &:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty, ); + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: oklch(54.6% 0.245 262.881); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + border-color: oklch(54.6% 0.245 262.881); + } + } + input::placeholder,textarea::placeholder { + color: oklch(55.1% 0.027 264.364); + opacity: 1; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-date-and-time-value { + min-height: 1.5em; + } + ::-webkit-date-and-time-value { + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { + padding-top: 0; + padding-bottom: 0; + } + select { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='oklch(55.1%25 0.027 264.364)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); + background-position: right 0.5rem center; + background-repeat: no-repeat; + background-size: 1.5em 1.5em; + padding-right: 2.5rem; + print-color-adjust: exact; + } + [multiple],[size]:where(select:not([size="1"])) { + background-image: initial; + background-position: initial; + background-repeat: unset; + background-size: initial; + padding-right: 0.75rem; + print-color-adjust: unset; + } + [type='checkbox'],[type='radio'] { + appearance: none; + padding: 0; + print-color-adjust: exact; + display: inline-block; + vertical-align: middle; + background-origin: border-box; + user-select: none; + flex-shrink: 0; + height: 1rem; + width: 1rem; + color: oklch(54.6% 0.245 262.881); + background-color: #fff; + border-color: oklch(55.1% 0.027 264.364); + border-width: 1px; + --tw-shadow: 0 0 #0000; + } + [type='checkbox'] { + border-radius: 0px; + } + [type='radio'] { + border-radius: 100%; + } + [type='checkbox']:focus,[type='radio']:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty, ); + --tw-ring-offset-width: 2px; + --tw-ring-offset-color: #fff; + --tw-ring-color: oklch(54.6% 0.245 262.881); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + [type='checkbox']:checked,[type='radio']:checked { + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; + } + [type='checkbox']:checked { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); + @media (forced-colors: active) { + appearance: auto; + } + } + [type='radio']:checked { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); + @media (forced-colors: active) { + appearance: auto; + } + } + [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { + border-color: transparent; + background-color: currentColor; + } + [type='checkbox']:indeterminate { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; + @media (forced-colors: active) { + appearance: auto; + } + } + [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { + border-color: transparent; + background-color: currentColor; + } + [type='file'] { + background: unset; + border-color: inherit; + border-width: 0; + border-radius: 0; + padding: 0; + font-size: unset; + line-height: inherit; + } + [type='file']:focus { + outline: 1px solid ButtonText; + outline: 1px auto -webkit-focus-ring-color; + } +}@layer base{* { + @supports (-moz-appearance:none) { + scrollbar-color: initial; + scrollbar-width: initial; + } + } +}@property --tw-translate-x{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-translate-y{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-translate-z{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-scale-x{syntax: "*"; + inherits: false; + initial-value: 1; +}@property --tw-scale-y{syntax: "*"; + inherits: false; + initial-value: 1; +}@property --tw-scale-z{syntax: "*"; + inherits: false; + initial-value: 1; +}@property --tw-rotate-x{syntax: "*"; + inherits: false; +}@property --tw-rotate-y{syntax: "*"; + inherits: false; +}@property --tw-rotate-z{syntax: "*"; + inherits: false; +}@property --tw-skew-x{syntax: "*"; + inherits: false; +}@property --tw-skew-y{syntax: "*"; + inherits: false; +}@property --tw-pan-x{syntax: "*"; + inherits: false; +}@property --tw-pan-y{syntax: "*"; + inherits: false; +}@property --tw-pinch-zoom{syntax: "*"; + inherits: false; +}@property --tw-space-y-reverse{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-space-x-reverse{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-border-style{syntax: "*"; + inherits: false; + initial-value: solid; +}@property --tw-gradient-position{syntax: "*"; + inherits: false; +}@property --tw-gradient-from{syntax: ""; + inherits: false; + initial-value: #0000; +}@property --tw-gradient-via{syntax: ""; + inherits: false; + initial-value: #0000; +}@property --tw-gradient-to{syntax: ""; + inherits: false; + initial-value: #0000; +}@property --tw-gradient-stops{syntax: "*"; + inherits: false; +}@property --tw-gradient-via-stops{syntax: "*"; + inherits: false; +}@property --tw-gradient-from-position{syntax: ""; + inherits: false; + initial-value: 0%; +}@property --tw-gradient-via-position{syntax: ""; + inherits: false; + initial-value: 50%; +}@property --tw-gradient-to-position{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-leading{syntax: "*"; + inherits: false; +}@property --tw-font-weight{syntax: "*"; + inherits: false; +}@property --tw-tracking{syntax: "*"; + inherits: false; +}@property --tw-ordinal{syntax: "*"; + inherits: false; +}@property --tw-slashed-zero{syntax: "*"; + inherits: false; +}@property --tw-numeric-figure{syntax: "*"; + inherits: false; +}@property --tw-numeric-spacing{syntax: "*"; + inherits: false; +}@property --tw-numeric-fraction{syntax: "*"; + inherits: false; +}@property --tw-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-shadow-color{syntax: "*"; + inherits: false; +}@property --tw-shadow-alpha{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-inset-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-inset-shadow-color{syntax: "*"; + inherits: false; +}@property --tw-inset-shadow-alpha{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-ring-color{syntax: "*"; + inherits: false; +}@property --tw-ring-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-inset-ring-color{syntax: "*"; + inherits: false; +}@property --tw-inset-ring-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-ring-inset{syntax: "*"; + inherits: false; +}@property --tw-ring-offset-width{syntax: ""; + inherits: false; + initial-value: 0px; +}@property --tw-ring-offset-color{syntax: "*"; + inherits: false; + initial-value: #fff; +}@property --tw-ring-offset-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-outline-style{syntax: "*"; + inherits: false; + initial-value: solid; +}@property --tw-blur{syntax: "*"; + inherits: false; +}@property --tw-brightness{syntax: "*"; + inherits: false; +}@property --tw-contrast{syntax: "*"; + inherits: false; +}@property --tw-grayscale{syntax: "*"; + inherits: false; +}@property --tw-hue-rotate{syntax: "*"; + inherits: false; +}@property --tw-invert{syntax: "*"; + inherits: false; +}@property --tw-opacity{syntax: "*"; + inherits: false; +}@property --tw-saturate{syntax: "*"; + inherits: false; +}@property --tw-sepia{syntax: "*"; + inherits: false; +}@property --tw-drop-shadow{syntax: "*"; + inherits: false; +}@property --tw-drop-shadow-color{syntax: "*"; + inherits: false; +}@property --tw-drop-shadow-alpha{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-drop-shadow-size{syntax: "*"; + inherits: false; +}@property --tw-backdrop-blur{syntax: "*"; + inherits: false; +}@property --tw-backdrop-brightness{syntax: "*"; + inherits: false; +}@property --tw-backdrop-contrast{syntax: "*"; + inherits: false; +}@property --tw-backdrop-grayscale{syntax: "*"; + inherits: false; +}@property --tw-backdrop-hue-rotate{syntax: "*"; + inherits: false; +}@property --tw-backdrop-invert{syntax: "*"; + inherits: false; +}@property --tw-backdrop-opacity{syntax: "*"; + inherits: false; +}@property --tw-backdrop-saturate{syntax: "*"; + inherits: false; +}@property --tw-backdrop-sepia{syntax: "*"; + inherits: false; +}@property --tw-duration{syntax: "*"; + inherits: false; +}@property --tw-ease{syntax: "*"; + inherits: false; +}@property --tw-content{syntax: "*"; + initial-value: ""; + inherits: false; +}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-pan-x: initial; + --tw-pan-y: initial; + --tw-pinch-zoom: initial; + --tw-space-y-reverse: 0; + --tw-space-x-reverse: 0; + --tw-border-style: solid; + --tw-gradient-position: initial; + --tw-gradient-from: #0000; + --tw-gradient-via: #0000; + --tw-gradient-to: #0000; + --tw-gradient-stops: initial; + --tw-gradient-via-stops: initial; + --tw-gradient-from-position: 0%; + --tw-gradient-via-position: 50%; + --tw-gradient-to-position: 100%; + --tw-leading: initial; + --tw-font-weight: initial; + --tw-tracking: initial; + --tw-ordinal: initial; + --tw-slashed-zero: initial; + --tw-numeric-figure: initial; + --tw-numeric-spacing: initial; + --tw-numeric-fraction: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-outline-style: solid; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; + --tw-duration: initial; + --tw-ease: initial; + --tw-content: ""; + } + } +} \ No newline at end of file diff --git a/public/de/404.html b/public/de/404.html deleted file mode 100644 index 17e8332..0000000 --- a/public/de/404.html +++ /dev/null @@ -1,535 +0,0 @@ - - - - - - - - - - 404 Page not found · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - - - - - - - - - -
    -
    - -

    Seite nicht gefunden 😕

    -

    - Fehler 404 -

    -
    -

    Es sieht so aus, als ob es diese Seite nicht gibt.

    -
    - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Erstellt mit Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/de/categories/index.html b/public/de/categories/index.html deleted file mode 100644 index 63e2ed0..0000000 --- a/public/de/categories/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Categories · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Categories

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Erstellt mit Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/de/categories/index.xml b/public/de/categories/index.xml deleted file mode 100644 index 7503669..0000000 --- a/public/de/categories/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Categories on Swangnice - http://localhost:1313/de/categories/ - Recent content in Categories on Swangnice - Hugo -- gohugo.io - de - © 2025 - - - - diff --git a/public/de/index.html b/public/de/index.html deleted file mode 100644 index f053617..0000000 --- a/public/de/index.html +++ /dev/null @@ -1,574 +0,0 @@ - - - - - - - - - - - Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -

    - Swangnice -

    - -
    - - -
    -
    -
    -
    -
    - - - - -
    - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Erstellt mit Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/de/index.xml b/public/de/index.xml deleted file mode 100644 index 529ae9f..0000000 --- a/public/de/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Swangnice - http://localhost:1313/de/ - Recent content on Swangnice - Hugo -- gohugo.io - de - © 2025 - - - - diff --git a/public/de/sitemap.xml b/public/de/sitemap.xml deleted file mode 100644 index c3a59bb..0000000 --- a/public/de/sitemap.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - http://localhost:1313/de/ - - - - - diff --git a/public/de/tags/index.html b/public/de/tags/index.html deleted file mode 100644 index 76d54a4..0000000 --- a/public/de/tags/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Tags · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Tags

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Erstellt mit Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/de/tags/index.xml b/public/de/tags/index.xml deleted file mode 100644 index 22ddf1b..0000000 --- a/public/de/tags/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Tags on Swangnice - http://localhost:1313/de/tags/ - Recent content in Tags on Swangnice - Hugo -- gohugo.io - de - © 2025 - - - - diff --git a/public/en/404.html b/public/en/404.html deleted file mode 100644 index 71434b9..0000000 --- a/public/en/404.html +++ /dev/null @@ -1,535 +0,0 @@ - - - - - - - - - - 404 Page not found · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -

    Page Not Found 😕

    -

    - Error 404 -

    -
    -

    It seems that the page you've requested does not exist.

    -
    - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/en/categories/index.html b/public/en/categories/index.html deleted file mode 100644 index 7004719..0000000 --- a/public/en/categories/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Categories · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Categories

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/en/categories/index.xml b/public/en/categories/index.xml deleted file mode 100644 index 15a6050..0000000 --- a/public/en/categories/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Categories on Swangnice - http://localhost:1313/en/categories/ - Recent content in Categories on Swangnice - Hugo -- gohugo.io - en-US - © 2025 - - - - diff --git a/public/en/en/index.html b/public/en/en/index.html deleted file mode 100644 index 0173fdf..0000000 --- a/public/en/en/index.html +++ /dev/null @@ -1,539 +0,0 @@ - - - - - - - - - - Home Page · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    - -

    Home Page

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    - - - - - - - - - - - - -
    -
    - -
    - - -

    This is My Page -
    - - - # - - -

    - -
    - - - - -
    - -
    -

    - There are no articles to list here yet. -

    -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/en/en/index.xml b/public/en/en/index.xml deleted file mode 100644 index 7d9a80b..0000000 --- a/public/en/en/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Home Page on Swangnice - http://localhost:1313/en/en/ - Recent content in Home Page on Swangnice - Hugo -- gohugo.io - en-US - © 2025 - - - - diff --git a/public/en/index.xml b/public/en/index.xml deleted file mode 100644 index e29a4a0..0000000 --- a/public/en/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Home Page on Gray Blowfish - //localhost:1313/en/ - Recent content in Home Page on Gray Blowfish - Hugo -- gohugo.io - en - © 2025 Gray Blowfish - - - - diff --git a/public/en/page/1/index.html b/public/en/page/1/index.html deleted file mode 100644 index fd2f135..0000000 --- a/public/en/page/1/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - //localhost:1313/en/ - - - - - - diff --git a/public/en/sitemap.xml b/public/en/sitemap.xml index 35ac4bd..5d3ff9a 100644 --- a/public/en/sitemap.xml +++ b/public/en/sitemap.xml @@ -3,37 +3,176 @@ xmlns:xhtml="http://www.w3.org/1999/xhtml"> - http://localhost:1313/authors/ + http://localhost:1313/projects/self_host/mac_mini_m4/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + http://localhost:1313/projects/self_host/stock_bot/ + 2024-09-20T04:17:50+00:00 daily 0.5 - http://localhost:1313/categories/ + http://localhost:1313/projects/self_host/stock_bot/01_todo/ + 2024-09-20T04:17:50+00:00 daily 0.5 + + + http://localhost:1313/projects/self_host/mac_mini_m4/01_website_hosting/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + http://localhost:1313/projects/self_host/mac_mini_m4/02_nas/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + http://localhost:1313/projects/self_host/stock_bot/02_results/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + + + http://localhost:1313/projects/embedded/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + http://localhost:1313/projects/self_host/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + + + http://localhost:1313/notes/coding/cheat_sheet/c/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + + + http://localhost:1313/notes/coding/cheat_sheet/cpp/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + + + http://localhost:1313/notes/coding/cheat_sheet/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + + + http://localhost:1313/notes/coding/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + + + + http://localhost:1313/notes/coding/cheat_sheet/git/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + http://localhost:1313/ + 2024-09-20T04:17:50+00:00 daily 0.5 - http://localhost:1313/series/ + http://localhost:1313/notes/ + 2024-09-20T04:17:50+00:00 daily 0.5 - http://localhost:1313/tags/ + http://localhost:1313/projects/ + 2024-09-20T04:17:50+00:00 daily 0.5 + + + http://localhost:1313/notes/coding/cheat_sheet/python/ + 2024-09-20T04:17:50+00:00 + daily + 0.5 + + diff --git a/public/en/tags/index.html b/public/en/tags/index.html deleted file mode 100644 index aabe08d..0000000 --- a/public/en/tags/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Tags · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Tags

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/en/tags/index.xml b/public/en/tags/index.xml deleted file mode 100644 index 667d5a3..0000000 --- a/public/en/tags/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Tags on Swangnice - http://localhost:1313/en/tags/ - Recent content in Tags on Swangnice - Hugo -- gohugo.io - en-US - © 2025 - - - - diff --git a/public/en/zh/index.html b/public/en/zh/index.html deleted file mode 100644 index 78bfc2f..0000000 --- a/public/en/zh/index.html +++ /dev/null @@ -1,539 +0,0 @@ - - - - - - - - - - 主页 · Swangnice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    - -

    主页

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    - - - - - - - - - - - - -
    -
    - -
    - - -

    这是我的主页 -
    - - - # - - -

    - -
    - - - - -
    - -
    -

    - There are no articles to list here yet. -

    -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/en/zh/index.xml b/public/en/zh/index.xml deleted file mode 100644 index 4cdc6aa..0000000 --- a/public/en/zh/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - 主页 on Swangnice - http://localhost:1313/en/zh/ - Recent content in 主页 on Swangnice - Hugo -- gohugo.io - en-US - © 2025 - - - - diff --git a/public/fr/404.html b/public/fr/404.html deleted file mode 100644 index f3293c0..0000000 --- a/public/fr/404.html +++ /dev/null @@ -1,535 +0,0 @@ - - - - - - - - - - 404 Page not found · Multilingue Exemple Hugo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -

    Cette page n'existe pas 😕

    -

    - Erreur 404 -

    -
    -

    Il semble que la page que vous cherchez n'existe pas.

    -
    - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Propulsé par Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/fr/categories/index.html b/public/fr/categories/index.html deleted file mode 100644 index beaeafc..0000000 --- a/public/fr/categories/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Categories · Multilingue Exemple Hugo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Categories

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Propulsé par Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/fr/categories/index.xml b/public/fr/categories/index.xml deleted file mode 100644 index f2bdb03..0000000 --- a/public/fr/categories/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Categories on Multilingue Exemple Hugo - http://localhost:1313/fr/categories/ - Recent content in Categories on Multilingue Exemple Hugo - Hugo -- gohugo.io - fr - © 2025 - - - - diff --git a/public/fr/index.html b/public/fr/index.html deleted file mode 100644 index 3caf259..0000000 --- a/public/fr/index.html +++ /dev/null @@ -1,574 +0,0 @@ - - - - - - - - - - - Multilingue Exemple Hugo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -

    - Multilingue Exemple Hugo -

    - -
    - - -
    -
    -
    -
    -
    - - - - -
    - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Propulsé par Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/fr/index.xml b/public/fr/index.xml deleted file mode 100644 index 67c8abe..0000000 --- a/public/fr/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Multilingue Exemple Hugo - http://localhost:1313/fr/ - Recent content on Multilingue Exemple Hugo - Hugo -- gohugo.io - fr - © 2025 - - - - diff --git a/public/fr/sitemap.xml b/public/fr/sitemap.xml deleted file mode 100644 index cd4ed2f..0000000 --- a/public/fr/sitemap.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - http://localhost:1313/fr/ - - - - - diff --git a/public/fr/tags/index.html b/public/fr/tags/index.html deleted file mode 100644 index 24653bb..0000000 --- a/public/fr/tags/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Tags · Multilingue Exemple Hugo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Tags

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Propulsé par Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/fr/tags/index.xml b/public/fr/tags/index.xml deleted file mode 100644 index 589ea7c..0000000 --- a/public/fr/tags/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Tags on Multilingue Exemple Hugo - http://localhost:1313/fr/tags/ - Recent content in Tags on Multilingue Exemple Hugo - Hugo -- gohugo.io - fr - © 2025 - - - - diff --git a/public/img/avatar_hu_439860065524bd6d.png b/public/img/avatar_hu_439860065524bd6d.png new file mode 100644 index 0000000..a0e2721 Binary files /dev/null and b/public/img/avatar_hu_439860065524bd6d.png differ diff --git a/public/index.html b/public/index.html index ac749d5..aec59c3 100644 --- a/public/index.html +++ b/public/index.html @@ -1,7 +1,7 @@ - + @@ -9,8 +9,8 @@ - SWang Nice - + SWangNice + @@ -18,9 +18,9 @@ - + - + @@ -31,8 +31,8 @@ - + + @@ -73,16 +70,16 @@ - + - + - + + + @@ -172,7 +172,7 @@ @@ -195,7 +195,7 @@
  • - + -

    +

    Notes

    @@ -619,7 +649,7 @@
  • - +

    Coding @@ -628,7 +658,7 @@

  • - +

    PDF Collection @@ -645,9 +675,9 @@

  • - + -

    +

    Projects

    @@ -675,37 +705,19 @@
  • - +

    - AI + Fancy Things on Boards

  • - +

    - Embedded Systems -

    -
    -
  • - -
  • - - -

    - Game -

    -
    -
  • - -
  • - - -

    - Robotics + Self-host

  • @@ -717,16 +729,57 @@ - +
  • - +

    - Archive + RestHere +

    + + + + + + + + + + +
    +
  • + +
  • + + +

    + My Pet

  • +
  • + + +

    + My Travel +

    +
    +
  • + +
  • + @@ -804,7 +857,9 @@ -
    +
    @@ -816,7 +871,7 @@ SWang + src="/img/avatar_hu_439860065524bd6d.png" />

    @@ -824,7 +879,7 @@

    - Welcome to my website + A new graduate engineer

    @@ -872,7 +927,22 @@
    -
    +

    + + +

    This is My Page
    @@ -891,34 +961,6 @@ - - -

    Recent

    - - - - - -
    - -
    - - - - - - - - - -
    @@ -939,7 +981,7 @@
  • + title="Tags"> Tags @@ -961,6 +1003,14 @@ +

    + + 苏ICP备2024145451号 + +

    + + +

    diff --git a/public/index.json b/public/index.json index 317c757..7399509 100644 --- a/public/index.json +++ b/public/index.json @@ -1,4 +1,4 @@ -[{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" This is My Page # ","externalUrl":null,"permalink":"/","section":"Home Page","summary":"\u003ch1 class=\"relative group\"\u003eThis is My Page \n \u003cdiv id=\"this-is-my-page\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#this-is-my-page\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e","title":"Home Page","type":"page"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"}] \ No newline at end of file +[{"content":"For my first physical server in my life, I got an Mac Mini with M4 and an HDD enclosure.\n","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/mac_mini_m4/","section":"Projects","summary":"\u003cp\u003eFor my first physical server in my life, I got an Mac Mini with M4 and an HDD enclosure.\u003c/p\u003e","title":"My First Server in Room: Mac Mini + SSD Enclosure","type":"projects"},{"content":"This is a bot that assists in making daily index fund trading decisions.\nIntroduction # This project was inspired by my mother. Over the course of ten years, she watched my father struggle in the stock market. From those hard lessons, she developed her own strategy—one that focuses on the predictable fluctuations in index fund values. Armed with nothing more than paper, a pen, and a calculator, she’s been able to achieve steady profits.\nI believe there’s even more potential here.\nBy digitizing her process and gradually introducing quantifiable algorithms, I hope to both increase efficiency and explore new edges for profitability. My strategy might cause others\u0026rsquo; losses, so this project is private permanently.\nList # Here, I’ll keep track of the to-do list and showcase the results as the project evolves. I’ll also highlight some interesting technical insights along the way.\n","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/stock_bot/","section":"Projects","summary":"\u003cp\u003eThis is a bot that assists in making daily index fund trading decisions.\u003c/p\u003e\n\n\n\u003ch2 class=\"relative group\"\u003eIntroduction \n \u003cdiv id=\"introduction\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#introduction\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eThis project was inspired by my mother. Over the course of ten years, she watched my father struggle in the stock market. From those hard lessons, she developed her own strategy—one that focuses on the predictable fluctuations in index fund values. Armed with nothing more than paper, a pen, and a calculator, she’s been able to achieve steady profits.\u003c/p\u003e","title":"StockBot","type":"projects"},{"content":" Short-term TODO # 🚧 The Initial Policy implement (Parameterizing transaction variables) ⬜️ The evaluate \u0026amp; logger script ⬜ The automatic scripts with Email Sender deployed on the Server ⬜ Web UI, will not be too complex just a simple one to synchronous my account for customized policy ⬜️ Implement RL algorithms ","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/stock_bot/01_todo/","section":"Projects","summary":"\u003ch2 class=\"relative group\"\u003eShort-term TODO \n \u003cdiv id=\"short-term-todo\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#short-term-todo\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🚧 The Initial Policy implement (Parameterizing transaction variables)\u003c/li\u003e\n\u003cli\u003e⬜️ The evaluate \u0026amp; logger script\u003c/li\u003e\n\u003cli\u003e⬜ The automatic scripts with Email Sender deployed on the Server\u003c/li\u003e\n\u003cli\u003e⬜ Web UI, will not be too complex just a simple one to synchronous my account for customized policy\u003c/li\u003e\n\u003cli\u003e⬜️ Implement RL algorithms\u003c/li\u003e\n\u003c/ul\u003e","title":"TODO List","type":"projects"},{"content":"I don\u0026rsquo;t have a public IP, so my solution is SSH tunnel + reverse Proxy on cloud server.\n🍎Mac Mini Side # As a server, my Mac won\u0026rsquo;t sleep, so change the setting firstly.\nsudo systemsetup -setcomputersleep Never # never sleep sudo systemsetup -setdisplaysleep 10 # display will sleep in 10 min Use autossh to avoid timeout:\nbrew install autossh Add the configuration below in ~/.ssh/config, Mac Mini will send package per 30 seconds to keep the connection alive.\nHost \u0026lt;ip address\u0026gt; ServerAliveInterval 30 ServerAliveCountMax 5 TCPKeepAlive yes Build the connection:\nautossh -M 0 -f -N \\ -i ~/.ssh/id_ed25519 \\ -o \u0026#34;ServerAliveInterval 30\u0026#34; -o \u0026#34;ServerAliveCountMax 3\u0026#34; \\ -R 0.0.0.0:9000:localhost:1313 \\ root@\u0026lt;ip address\u0026gt; autossh -M 0 -f -N -o \u0026#34;ServerAliveInterval 30\u0026#34; -o \u0026#34;ServerAliveCountMax 3\u0026#34; -R 0.0.0.0:9000:localhost:1313 user@\u0026lt;your.server.com\u0026gt; A watchdog script to try reconnection when the network lost(add to LaunchAgent):\n#!/bin/bash while true; do ping -c 1 \u0026lt;ip address\u0026gt; \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 if [ $? -ne 0 ]; then pkill -f autossh autossh -M 0 -f -N -R 0.0.0.0:9000:localhost:1313 \u0026lt;ip address\u0026gt; fi sleep 60 done 💻Server Side # Install and config the Nginx, for me the config file in /etc/nginx/sites-available:\nserver { listen 80; server_name www.\u0026lt;your domain\u0026gt; \u0026lt;your domain\u0026gt;; location / { proxy_pass http://localhost:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } To obtain a security certificate, use the certbot:\nsudo apt update sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d swangnice.cn ","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/mac_mini_m4/01_website_hosting/","section":"Projects","summary":"\u003cp\u003eI don\u0026rsquo;t have a public IP, so my solution is SSH tunnel + reverse Proxy on cloud server.\u003c/p\u003e\n\n\n\u003ch2 class=\"relative group\"\u003e🍎Mac Mini Side \n \u003cdiv id=\"mac-mini-side\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#mac-mini-side\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eAs a server, my Mac won\u0026rsquo;t sleep, so change the setting firstly.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo systemsetup -setcomputersleep Never # never sleep\nsudo systemsetup -setdisplaysleep 10 # display will sleep in 10 min\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUse autossh to avoid timeout:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew install autossh\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAdd the configuration below in \u003ccode\u003e~/.ssh/config\u003c/code\u003e, Mac Mini will send package per 30 seconds to keep the connection alive.\u003c/p\u003e","title":"Website Setup","type":"projects"},{"content":" Hardware # I went with the UNITEK 3373BBK for one of my drive enclosures—and honestly, it wasn’t the best decision.\nThe first big letdown? The bandwidth tops out at just 5Gbps. That’s fine for basic tasks, but definitely underwhelming if you’re dealing with high-speed storage or large file transfers.\nEven worse, it doesn’t support S.M.A.R.T passthrough, which makes monitoring drive health a hassle. That was a big deal-breaker for me.\nStill, none of the other options really fit my expectations either. One day, I might just go all-in and make my own enclosure—design the PCB, write the firmware, the whole deal. Maybe not today… but someday.\ndiskutil list Solution: HFS+ + SMB3.0, 客户端设置“延迟加载目录”或“按需索引”\ndiskutil list\nsudo smartctl -a /dev/disk2 brew install smartmontools\n","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/mac_mini_m4/02_nas/","section":"Projects","summary":"\u003ch2 class=\"relative group\"\u003eHardware \n \u003cdiv id=\"hardware\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#hardware\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eI went with the UNITEK 3373BBK for one of my drive enclosures—and honestly, it wasn’t the best decision.\u003c/p\u003e\n\u003cp\u003eThe first big letdown? The bandwidth tops out at just 5Gbps. That’s fine for basic tasks, but definitely underwhelming if you’re dealing with high-speed storage or large file transfers.\u003c/p\u003e\n\u003cp\u003eEven worse, it doesn’t support S.M.A.R.T passthrough, which makes monitoring drive health a hassle. That was a big deal-breaker for me.\u003c/p\u003e","title":"NAS: Network Attachment Storage","type":"projects"},{"content":"This section will feature occasional showcases of my technical achievements—focused purely on the engineering side, not the income.\n","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/stock_bot/02_results/","section":"Projects","summary":"\u003cp\u003eThis section will feature occasional showcases of my technical achievements—focused purely on the engineering side, not the income.\u003c/p\u003e","title":"Showcases","type":"projects"},{"content":"Install dependence of gitea:\nbrew install git brew install gitea Start the configuration page of Gitea:\ngitea web Install MySQL:\nbrew install mysql brew services start mysql Login MySQL and create the database and user:\nmysql -u root Then, execute:\nCREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER \u0026#39;gitea\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;\u0026lt;yourpassword\u0026gt;\u0026#39;; GRANT ALL PRIVILEGES ON gitea.* TO \u0026#39;gitea\u0026#39;@\u0026#39;localhost\u0026#39;; FLUSH PRIVILEGES; CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER \u0026lsquo;gitea\u0026rsquo;@\u0026rsquo;localhost\u0026rsquo; IDENTIFIED BY \u0026lsquo;gitea\u0026rsquo;; GRANT ALL PRIVILEGES ON gitea.* TO \u0026lsquo;gitea\u0026rsquo;@\u0026rsquo;localhost\u0026rsquo;; FLUSH PRIVILEGES;\n","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/mac_mini_m4/03_gitea/","section":"Projects","summary":"\u003cp\u003eInstall dependence of gitea:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew install git\nbrew install gitea\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eStart the configuration page of Gitea:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egitea web\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eInstall MySQL:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew install mysql\nbrew services start mysql\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eLogin MySQL and create the database and user:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003emysql -u root\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen, execute:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;\nCREATE USER \u0026#39;gitea\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;\u0026lt;yourpassword\u0026gt;\u0026#39;;\nGRANT ALL PRIVILEGES ON gitea.* TO \u0026#39;gitea\u0026#39;@\u0026#39;localhost\u0026#39;;\nFLUSH PRIVILEGES;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eCREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;\nCREATE USER \u0026lsquo;gitea\u0026rsquo;@\u0026rsquo;localhost\u0026rsquo; IDENTIFIED BY \u0026lsquo;gitea\u0026rsquo;;\nGRANT ALL PRIVILEGES ON gitea.* TO \u0026lsquo;gitea\u0026rsquo;@\u0026rsquo;localhost\u0026rsquo;;\nFLUSH PRIVILEGES;\u003c/p\u003e","title":"My Own Code Vault: Gitea on Mac Mini","type":"projects"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/projects/embedded/","section":"Projects","summary":"","title":"Fancy Things on Boards","type":"projects"},{"content":"I’ve recently been exploring the world of self-hosted solutions, and it’s nothing short of amazing. There are some great collections out there that showcase powerful, privacy-respecting tools you can run on your own hardware:\nA collection on GitHub selfh.st ❓ Why Self-Host? # I enjoy automating tasks and making my life smarter with scripts and small tools. Having control over the services I use, running them on my own hardware, and customizing everything to suit my needs—it’s both empowering and educational.\nI’ll use this space to document the projects I build and share what I learn along the way.\nList # ","date":"20 September 2024","externalUrl":null,"permalink":"/projects/self_host/","section":"Projects","summary":"\u003cp\u003eI’ve recently been exploring the world of self-hosted solutions, and it’s nothing short of amazing. There are some great collections out there that showcase powerful, privacy-respecting tools you can run on your own hardware:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/awesome-selfhosted/awesome-selfhosted\" target=\"_blank\"\u003eA collection on GitHub\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://selfh.st/\" target=\"_blank\"\u003eselfh.st\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n\n\u003ch2 class=\"relative group\"\u003e❓ Why Self-Host? \n \u003cdiv id=\"-why-self-host\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#-why-self-host\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eI enjoy automating tasks and making my life smarter with scripts and small tools. Having control over the services I use, running them on my own hardware, and customizing everything to suit my needs—it’s both empowering and educational.\u003c/p\u003e","title":"Self-host Projects","type":"projects"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/notes/coding/cheat_sheet/c/","section":"Notes","summary":"","title":"C","type":"notes"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/notes/coding/cheat_sheet/cpp/","section":"Notes","summary":"","title":"C++","type":"notes"},{"content":"Here’s a cheat sheet of some programming languages, tools, and libraries that I use often—but somehow always forget.\n","date":"20 September 2024","externalUrl":null,"permalink":"/notes/coding/cheat_sheet/","section":"Notes","summary":"\u003cp\u003eHere’s a cheat sheet of some programming languages, tools, and libraries that I use often—but somehow always forget.\u003c/p\u003e","title":"Cheat Sheets","type":"notes"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/notes/coding/","section":"Notes","summary":"","title":"Coding","type":"notes"},{"content":" submodule # Commit # Add date and time in commit messages: git commit -m \u0026#34;$(date \u0026#39;+%Y-%m-%d %H:%M:%S\u0026#39;)\u0026#34; ","date":"20 September 2024","externalUrl":null,"permalink":"/notes/coding/cheat_sheet/git/","section":"Notes","summary":"\u003ch2 class=\"relative group\"\u003esubmodule \n \u003cdiv id=\"submodule\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#submodule\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\n\n\u003ch2 class=\"relative group\"\u003eCommit \n \u003cdiv id=\"commit\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#commit\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eAdd date and time in commit messages:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate \u003cspan class=\"s1\"\u003e\u0026#39;+%Y-%m-%d %H:%M:%S\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"Git","type":"notes"},{"content":" This is My Page # ","date":"20 September 2024","externalUrl":null,"permalink":"/","section":"Home Page","summary":"\u003ch3 id=\"typeit-6fb22d3943ec7794c447a8e7c1bb77a4\"\u003e\u003c/h3\u003e\n\n\u003cscript\u003e\n document.addEventListener(\"DOMContentLoaded\", function () {\n new TypeIt(\"#typeit-6fb22d3943ec7794c447a8e7c1bb77a4\", {\n strings: [\"\",\"Welcome to my website! I'm really happy you stopped by.\",\"\"],\n speed: 100 ,\n lifeLike: true ,\n startDelay: 0 ,\n breakLines: true ,\n waitUntilVisible: true ,\n loop: false \n }).go();\n });\n\u003c/script\u003e\n\n\n\u003ch1 class=\"relative group\"\u003eThis is My Page \n \u003cdiv id=\"this-is-my-page\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#this-is-my-page\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e","title":"Home Page","type":"page"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/series/my-first-server-in-room/","section":"Series","summary":"","title":"My First Server in Room","type":"series"},{"content":"Personal notes, may not be readable.\n","date":"20 September 2024","externalUrl":null,"permalink":"/notes/","section":"Notes","summary":"\u003cp\u003ePersonal notes, may not be readable.\u003c/p\u003e","title":"Notes","type":"notes"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/tags/ongoing/","section":"Tags","summary":"","title":"Ongoing","type":"tags"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/tags/original/","section":"Tags","summary":"","title":"Original","type":"tags"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/tags/private/","section":"Tags","summary":"","title":"Private","type":"tags"},{"content":"This is the Projects page, where I keep track of all my personal and collaborative work.\nI use several tags to describe the status and nature of each project:\nPrivate/ Public: Private projects won’t reveal too many details, but I’ll still document the process, to-do lists, and partial results. For Public projects, I aim to share as much as possible — from design to implementation.\nIdea, Ongoing, Improving, Archived: These tags indicate the current state of a project — whether it’s just a thought, actively being developed, being refined, or no longer maintained.\nOriginal, Reproduce: Original means the project was initiated and designed by me. Reproduce refers to work based on existing ideas, papers, or open-source projects — typically with modifications or improvements.\n\u0026lt;Tags with other topic\u0026gt;: Some projects are interdisciplinary. Additional tags will be added to reflect relevant topics, but each project will be placed under the one category it’s most closely related to.\n","date":"20 September 2024","externalUrl":null,"permalink":"/projects/","section":"Projects","summary":"\u003cp\u003eThis is the Projects page, where I keep track of all my personal and collaborative work.\u003c/p\u003e\n\u003cp\u003eI use several tags to describe the status and nature of each project:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ePrivate\u003c/code\u003e/ \u003ccode\u003ePublic\u003c/code\u003e: Private projects won’t reveal too many details, but I’ll still document the process, to-do lists, and partial results. For Public projects, I aim to share as much as possible — from design to implementation.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eIdea\u003c/code\u003e, \u003ccode\u003eOngoing\u003c/code\u003e, \u003ccode\u003eImproving\u003c/code\u003e, \u003ccode\u003eArchived\u003c/code\u003e: These tags indicate the current state of a project — whether it’s just a thought, actively being developed, being refined, or no longer maintained.\u003c/p\u003e","title":"Projects","type":"projects"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/tags/public/","section":"Tags","summary":"","title":"Public","type":"tags"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/notes/coding/cheat_sheet/python/","section":"Notes","summary":"","title":"Python","type":"notes"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/series/stockbot/","section":"Series","summary":"","title":"StockBot","type":"series"},{"content":"","date":"20 September 2024","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"}] \ No newline at end of file diff --git a/public/index.xml b/public/index.xml index daeb932..61d8794 100644 --- a/public/index.xml +++ b/public/index.xml @@ -1,13 +1,193 @@ - Home Page on SWang Nice + Home Page on SWangNice http://localhost:1313/ - Recent content in Home Page on SWang Nice + Recent content in Home Page on SWangNice Hugo -- gohugo.io en © 2025 SWang - + Fri, 20 Sep 2024 04:17:50 +0000 + + + TODO List + http://localhost:1313/projects/self_host/stock_bot/01_todo/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/stock_bot/01_todo/ + <h2 class="relative group">Short-term TODO + <div id="short-term-todo" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#short-term-todo" aria-label="Anchor">#</a> + </span> + +</h2> +<ul> +<li>🚧 The Initial Policy implement (Parameterizing transaction variables)</li> +<li>⬜️ The evaluate &amp; logger script</li> +<li>⬜ The automatic scripts with Email Sender deployed on the Server</li> +<li>⬜ Web UI, will not be too complex just a simple one to synchronous my account for customized policy</li> +<li>⬜️ Implement RL algorithms</li> +</ul> + + + + + Website Setup + http://localhost:1313/projects/self_host/mac_mini_m4/01_website_hosting/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/01_website_hosting/ + <p>I don&rsquo;t have a public IP, so my solution is SSH tunnel + reverse Proxy on cloud server.</p> + + +<h2 class="relative group">🍎Mac Mini Side + <div id="mac-mini-side" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#mac-mini-side" aria-label="Anchor">#</a> + </span> + +</h2> +<p>As a server, my Mac won&rsquo;t sleep, so change the setting firstly.</p> +<pre tabindex="0"><code>sudo systemsetup -setcomputersleep Never # never sleep +sudo systemsetup -setdisplaysleep 10 # display will sleep in 10 min +</code></pre><p>Use autossh to avoid timeout:</p> +<pre tabindex="0"><code>brew install autossh +</code></pre><p>Add the configuration below in <code>~/.ssh/config</code>, Mac Mini will send package per 30 seconds to keep the connection alive.</p> + + + + + NAS: Network Attachment Storage + http://localhost:1313/projects/self_host/mac_mini_m4/02_nas/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/02_nas/ + <h2 class="relative group">Hardware + <div id="hardware" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#hardware" aria-label="Anchor">#</a> + </span> + +</h2> +<p>I went with the UNITEK 3373BBK for one of my drive enclosures—and honestly, it wasn’t the best decision.</p> +<p>The first big letdown? The bandwidth tops out at just 5Gbps. That’s fine for basic tasks, but definitely underwhelming if you’re dealing with high-speed storage or large file transfers.</p> +<p>Even worse, it doesn’t support S.M.A.R.T passthrough, which makes monitoring drive health a hassle. That was a big deal-breaker for me.</p> + + + + + Showcases + http://localhost:1313/projects/self_host/stock_bot/02_results/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/stock_bot/02_results/ + <p>This section will feature occasional showcases of my technical achievements—focused purely on the engineering side, not the income.</p> + + + + + My Own Code Vault: Gitea on Mac Mini + http://localhost:1313/projects/self_host/mac_mini_m4/03_gitea/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/03_gitea/ + <p>Install dependence of gitea:</p> +<pre tabindex="0"><code>brew install git +brew install gitea +</code></pre><p>Start the configuration page of Gitea:</p> +<pre tabindex="0"><code>gitea web +</code></pre><p>Install MySQL:</p> +<pre tabindex="0"><code>brew install mysql +brew services start mysql +</code></pre><p>Login MySQL and create the database and user:</p> +<pre tabindex="0"><code>mysql -u root +</code></pre><p>Then, execute:</p> +<pre tabindex="0"><code>CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE USER &#39;gitea&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;&lt;yourpassword&gt;&#39;; +GRANT ALL PRIVILEGES ON gitea.* TO &#39;gitea&#39;@&#39;localhost&#39;; +FLUSH PRIVILEGES; +</code></pre><p>CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE USER &lsquo;gitea&rsquo;@&rsquo;localhost&rsquo; IDENTIFIED BY &lsquo;gitea&rsquo;; +GRANT ALL PRIVILEGES ON gitea.* TO &lsquo;gitea&rsquo;@&rsquo;localhost&rsquo;; +FLUSH PRIVILEGES;</p> + + + + + C + http://localhost:1313/notes/coding/cheat_sheet/c/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/c/ + + + + + + C++ + http://localhost:1313/notes/coding/cheat_sheet/cpp/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/cpp/ + + + + + + Git + http://localhost:1313/notes/coding/cheat_sheet/git/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/git/ + <h2 class="relative group">submodule + <div id="submodule" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#submodule" aria-label="Anchor">#</a> + </span> + +</h2> + + +<h2 class="relative group">Commit + <div id="commit" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#commit" aria-label="Anchor">#</a> + </span> + +</h2> +<ol> +<li>Add date and time in commit messages:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git commit -m <span class="s2">&#34;</span><span class="k">$(</span>date <span class="s1">&#39;+%Y-%m-%d %H:%M:%S&#39;</span><span class="k">)</span><span class="s2">&#34;</span> +</span></span></code></pre></div> + + + + + Python + http://localhost:1313/notes/coding/cheat_sheet/python/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/python/ + + + diff --git a/public/ja/404.html b/public/ja/404.html deleted file mode 100644 index 7f03c16..0000000 --- a/public/ja/404.html +++ /dev/null @@ -1,535 +0,0 @@ - - - - - - - - - - 404 Page not found · Hugoの多言語例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - - - - - - - - - -
    -
    - -

    ページが見つかりませんでした。 😕

    -

    - Error 404 -

    -
    -

    ご要望のページは存在しないようです。

    -
    - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/ja/categories/index.html b/public/ja/categories/index.html deleted file mode 100644 index 6c51c84..0000000 --- a/public/ja/categories/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Categories · Hugoの多言語例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Categories

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/ja/categories/index.xml b/public/ja/categories/index.xml deleted file mode 100644 index 28c8c3a..0000000 --- a/public/ja/categories/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Categories on Hugoの多言語例 - http://localhost:1313/ja/categories/ - Recent content in Categories on Hugoの多言語例 - Hugo -- gohugo.io - ja - © 2025 - - - - diff --git a/public/ja/index.html b/public/ja/index.html deleted file mode 100644 index 35b062c..0000000 --- a/public/ja/index.html +++ /dev/null @@ -1,574 +0,0 @@ - - - - - - - - - - - Hugoの多言語例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -

    - Hugoの多言語例 -

    - -
    - - -
    -
    -
    -
    -
    - - - - -
    - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/ja/index.xml b/public/ja/index.xml deleted file mode 100644 index 7c32e26..0000000 --- a/public/ja/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Hugoの多言語例 - http://localhost:1313/ja/ - Recent content on Hugoの多言語例 - Hugo -- gohugo.io - ja - © 2025 - - - - diff --git a/public/ja/sitemap.xml b/public/ja/sitemap.xml deleted file mode 100644 index 5d98798..0000000 --- a/public/ja/sitemap.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - http://localhost:1313/ja/ - - - - - diff --git a/public/ja/tags/index.html b/public/ja/tags/index.html deleted file mode 100644 index 3cc4f06..0000000 --- a/public/ja/tags/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - Tags · Hugoの多言語例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - -

    Tags

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    -
    - - - - -
    - -
    - - - - - - -
    - - - - -
    - - - -

    - © - 2025 - -

    - - - - -

    - - - Powered by Hugo & Blowfish -

    - - -
    - - - - - - -
    - - -
    - - - diff --git a/public/ja/tags/index.xml b/public/ja/tags/index.xml deleted file mode 100644 index c2a8ea3..0000000 --- a/public/ja/tags/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Tags on Hugoの多言語例 - http://localhost:1313/ja/tags/ - Recent content in Tags on Hugoの多言語例 - Hugo -- gohugo.io - ja - © 2025 - - - - diff --git a/public/js/main.bundle.min.f8f2cec11308434554dfdbe3a0963bc19265192ebb9e2d644f3f9250731c879dfb09b44d2d58fcd06e8a1c9051b57f594719b37d21689d366ffd2db050df40a0.js b/public/js/main.bundle.min.f8f2cec11308434554dfdbe3a0963bc19265192ebb9e2d644f3f9250731c879dfb09b44d2d58fcd06e8a1c9051b57f594719b37d21689d366ffd2db050df40a0.js new file mode 100644 index 0000000..63a4065 --- /dev/null +++ b/public/js/main.bundle.min.f8f2cec11308434554dfdbe3a0963bc19265192ebb9e2d644f3f9250731c879dfb09b44d2d58fcd06e8a1c9051b57f594719b37d21689d366ffd2db050df40a0.js @@ -0,0 +1,15 @@ +e=this,t=function(){"use strict";function R(e,t){var n,s=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),s.push.apply(s,n)),s}function h(e){for(var t,n=1;ne.length)&&(t=e.length);for(var n=0,s=new Array(t);n0&&0[0]!==arguments[0]?arguments[0]:{},s=n.getFn,i=0[0]===s?e.getFn:s,o=n.fieldNormWeight,r=0[0]===o?e.fieldNormWeight:o;t(this,a),this.norm=function(){var n=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:1,s=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:3,e=new Map,t=10**s;return{get:function(s){if(o=s.match(ce).length,e.has(o))return e.get(o);var o,a=1/o**(.5*n),i=parseFloat(Math.round(a*t)/t);return e.set(o,i),i},clear:function(){e.clear()}}}(r,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return n(a,[{key:"setSources",value:function(){var e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var t=this,e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.keys=e,this._keysMap={},e.forEach(function(e,n){t._keysMap[e.id]=n})}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,o(this.docs[0])?this.docs.forEach(function(t,n){e._addString(t,n)}):this.docs.forEach(function(t,n){e._addObject(t,n)}),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();o(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&0[0]!==arguments[2]?arguments[2]:{},i=o.getFn,r=0[0]===i?e.getFn:i,a=o.fieldNormWeight,c=0[0]===a?e.fieldNormWeight:a,s=new E({getFn:r,fieldNormWeight:c});return s.setKeys(t.map(H)),s.setSources(n),s.create(),s}function p(t){var s,n=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},d=n.errors,f=0[0]===d?0:d,l=n.currentLocation,u=0[0]===l?0:l,a=n.expectedLocation,h=0[0]===a?0:a,r=n.distance,c=0[0]===r?e.distance:r,i=n.ignoreLocation,m=0[0]===i?e.ignoreLocation:i,o=f/t.length;return m?o:(s=Math.abs(h-u),c?o+s/c:s?1:o)}a=32;function K(t,n,s){var o,r,f,v,b,w,k,A,H,c=arguments.length>3&&0[0]!==arguments[3]?arguments[3]:{},F=c.location,$=0[0]===F?e.location:F,R=c.distance,C=0[0]===R?e.distance:R,N=c.threshold,V=0[0]===N?e.threshold:N,I=c.findAllMatches,W=0[0]===I?e.findAllMatches:I,P=c.minMatchCharLength,z=0[0]===P?e.minMatchCharLength:P,B=c.includeMatches,D=0[0]===B?e.includeMatches:B,L=c.ignoreLocation,y=0[0]===L?e.ignoreLocation:L;if(n.length>a)throw new Error("Pattern length exceeds max of ".concat(a,"."));for(var _,d=n.length,g=t.length,i=Math.max(0,Math.min($,g)),m=V,h=i,x=z>1||D,S=x?Array(g):[];(_=t.indexOf(n,h))>-1;)if(H=p(n,{currentLocation:_,expectedLocation:i,distance:C,ignoreLocation:y}),m=Math.min(H,m),h=_+d,x)for(b=0;b=T;o-=1)if(v=o-1,A=s[t.charAt(v)],x&&(S[v]=+!!A),u[o]=(u[o+1]<<1|1)&A,l&&(u[o]|=(O[o+1]|O[o])<<1|1|O[o+1]),u[o]&U&&(E=p(n,{errors:l,currentLocation:v,expectedLocation:i,distance:C,ignoreLocation:y}))<=m){if(m=E,(h=v)<=i)break;T=Math.max(1,2*i-h)}if(p(n,{errors:l+1,currentLocation:i,expectedLocation:i,distance:C,ignoreLocation:y})>m)break;O=u}return w={isMatch:h>=0,score:Math.max(.001,E)},x&&(k=function(){for(var i,s=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[],a=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:e.minMatchCharLength,o=[],t=-1,r=-1,n=0,c=s.length;n=a&&o.push([t,r]),t=-1);return s[n-1]&&n-t>=a&&o.push([t,n-1]),o}(S,z),k.length?D&&(w.indices=k):w.isMatch=!1),w}function ee(e){for(var s,n={},t=0,o=e.length;t1&&0[0]!==arguments[1]?arguments[1]:{},h=o.location,A=0[0]===h?e.location:h,u=o.threshold,E=0[0]===u?e.threshold:u,v=o.distance,F=0[0]===v?e.distance:v,f=o.includeMatches,S=0[0]===f?e.includeMatches:f,g=o.findAllMatches,k=0[0]===g?e.findAllMatches:g,d=o.minMatchCharLength,O=0[0]===d?e.minMatchCharLength:d,y=o.isCaseSensitive,_=0[0]===y?e.isCaseSensitive:y,w=o.ignoreDiacritics,j=0[0]===w?e.ignoreDiacritics:w,b=o.ignoreLocation,C=0[0]===b?e.ignoreLocation:b;if(t(this,s),this.options={location:A,threshold:E,distance:F,includeMatches:S,findAllMatches:k,minMatchCharLength:O,isCaseSensitive:_,ignoreDiacritics:j,ignoreLocation:C},n=_?n:n.toLowerCase(),n=j?m(n):n,this.pattern=n,this.chunks=[],this.pattern.length)if(r=function(e,t){x.chunks.push({pattern:e,alphabet:ee(e),startIndex:t})},i=this.pattern.length,i>a){for(var c=0,p=i%a,M=i-p;c1&&0[0]!==arguments[1]?arguments[1]:{},r=s.location,O=0[0]===r?e.location:r,l=s.threshold,g=0[0]===l?e.threshold:l,u=s.distance,_=0[0]===u?e.distance:u,m=s.includeMatches,j=0[0]===m?e.includeMatches:m,p=s.findAllMatches,v=0[0]===p?e.findAllMatches:p,a=s.minMatchCharLength,b=0[0]===a?e.minMatchCharLength:a,f=s.isCaseSensitive,y=0[0]===f?e.isCaseSensitive:f,h=s.ignoreDiacritics,w=0[0]===h?e.ignoreDiacritics:h,c=s.ignoreLocation,x=0[0]===c?e.ignoreLocation:c;return t(this,o),(d=i.call(this,n))._bitapSearch=new V(n,{location:O,threshold:g,distance:_,includeMatches:j,findAllMatches:v,minMatchCharLength:b,isCaseSensitive:y,ignoreDiacritics:w,ignoreLocation:x}),d}return n(o,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),o}(c),U=function(e){r(s,e);var o=l(s);function s(e){return t(this,s),o.call(this,e)}return n(s,[{key:"search",value:function(e){for(var t,o,n=0,s=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,s.push([t,n-1]);return o=!!s.length,{isMatch:o,score:o?0:1,indices:s}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),s}(c),j=[Z,U,se,Y,X,G,Q,S],I=j.length,te=/ +(?=(?:[^"]*"[^"]*")*[^"]*$)/,ne=new Set([S.type,U.type]),q=function(){function s(n){var o=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},a=o.isCaseSensitive,r=0[0]===a?e.isCaseSensitive:a,c=o.ignoreDiacritics,l=0[0]===c?e.ignoreDiacritics:c,d=o.includeMatches,O=0[0]===d?e.includeMatches:d,h=o.minMatchCharLength,v=0[0]===h?e.minMatchCharLength:h,f=o.ignoreLocation,_=0[0]===f?e.ignoreLocation:f,g=o.findAllMatches,b=0[0]===g?e.findAllMatches:g,i=o.location,y=0[0]===i?e.location:i,p=o.threshold,w=0[0]===p?e.threshold:p,u=o.distance,x=0[0]===u?e.distance:u;t(this,s),this.query=null,this.options={isCaseSensitive:r,ignoreDiacritics:l,includeMatches:O,minMatchCharLength:v,findAllMatches:b,ignoreLocation:_,location:y,threshold:w,distance:x},n=r?n:n.toLowerCase(),n=l?m(n):n,this.pattern=n,this.query=function(e){var t=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{};return e.split("|").map(function(e){for(var a,r,c,l,d=e.trim().split(te).filter(function(e){return e&&!!e.trim()}),s=[],o=0,h=d.length;o2&&0[0]!==arguments[2]?arguments[2]:{}).auto,s=0[0]===n||n;return b(e)||(e=T(e)),function e(n){var r,c,d,u,a=Object.keys(n),l=function(e){return!!e[D]}(n);if(!l&&a.length>1&&!b(n))return e(T(n));if(function(e){return!i(e)&&B(e)&&!b(e)}(n)){if(r=l?n[D]:a[0],c=l?n[le]:n[r],!o(c))throw new Error(function(e){return"Invalid value for key ".concat(e)}(r));return d={keyId:_(r),pattern:c},s&&(d.searcher=w(c,t)),d}return u={children:[],operator:a[0]},a.forEach(function(t){var s=n[t];i(s)&&s.forEach(function(t){u.children.push(e(t))})}),u}(e)}function me(e,t){var n=e.matches;t.matches=[],s(n)&&n.forEach(function(e){if(s(e.indices)&&e.indices.length){var n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.src),e.idx>-1&&(n.refIndex=e.idx),t.matches.push(n)}})}function fe(e,t){t.score=e.score}return u=function(){function a(n){var s=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:0[0];t(this,a),this.options=h(h({},e),s),this.options.useExtendedSearch,this._keyStore=new pe(this.options.keys),this.setCollection(n,o)}return n(a,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof E))throw new Error("Incorrect 'index' type");this._myIndex=t||L(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){s(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var t,o=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:function(){return!1},n=[],e=0,s=this._docs.length;e1&&0[0]!==arguments[1]?arguments[1]:{}).limit,i=0[0]===a?-1:a,n=this.options,r=n.includeMatches,c=n.includeScore,l=n.shouldSort,d=n.sortFn,u=n.ignoreFieldNorm,s=o(t)?o(this._docs[0])?this._searchStringList(t):this._searchObjectList(t):this._searchLogical(t);return function(t,n){var s=n.ignoreFieldNorm,o=0[0]===s?e.ignoreFieldNorm:s;t.forEach(function(e){var t=1;e.matches.forEach(function(e){var n=e.key,a=e.norm,s=e.score,i=n?n.weight:null;t*=(0===s&&i?Number.EPSILON:s)**((i||1)*(o?1:a))}),e.score=t})}(s,{ignoreFieldNorm:u}),l&&s.sort(d),$(i)&&i>-1&&(s=s.slice(0,i)),function(t,n){var o=arguments.length>2&&0[0]!==arguments[2]?arguments[2]:{},i=o.includeMatches,r=0[0]===i?e.includeMatches:i,a=o.includeScore,c=0[0]===a?e.includeScore:a,s=[];return r&&s.push(me),c&&s.push(fe),t.map(function(e){var t=e.idx,o={item:n[t],refIndex:t};return s.length&&s.forEach(function(t){t(e,o)}),o})}(s,this._docs,{includeMatches:r,includeScore:c})}},{key:"_searchStringList",value:function(e){var n=w(e,this.options),o=this._myIndex.records,t=[];return o.forEach(function(e){var o=e.v,a=e.i,r=e.n;if(s(o)){var i=n.searchIn(o),c=i.isMatch,l=i.score,d=i.indices;c&&t.push({item:o,idx:a,matches:[{score:l,value:o,norm:r,indices:d}]})}}),t}},{key:"_searchLogical",value:function(e){var n=this,i=he(e,this.options),a=function e(t,s,o){if(!t.children){var c,l=t.keyId,u=t.searcher,i=n._findMatches({key:n._keyStore.get(l),value:n._myIndex.getValueForItemAtKeyId(s,l),searcher:u});return i&&i.length?[{idx:o,item:s,matches:i}]:[]}for(var a=[],r=0,h=t.children.length;r1&&0[0]!==arguments[1]?arguments[1]:{},o=s.getFn,a=0[0]===o?e.getFn:o,i=s.fieldNormWeight,r=0[0]===i?e.fieldNormWeight:i,c=t.keys,l=t.records,n=new E({getFn:a,fieldNormWeight:r});return n.setKeys(c),n.setIndexRecords(l),n},u.config=e,function(){f.push.apply(f,arguments)}(q),u},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t();var e,t,fuse,menuButton,menuCloseButton,menuWrapper,menuOpen,openMenu,closeMenu,showButton=document.getElementById("search-button"),showButtonMobile=document.getElementById("search-button-mobile"),hideButton=document.getElementById("close-search-button"),wrapper=document.getElementById("search-wrapper"),modal=document.getElementById("search-modal"),input=document.getElementById("search-query"),output=document.getElementById("search-results"),first=output.firstChild,last=output.lastChild,searchVisible=!1,indexed=!1,hasResults=!1;showButton?showButton.addEventListener("click",displaySearch):null,showButtonMobile?showButtonMobile.addEventListener("click",displaySearch):null,hideButton.addEventListener("click",hideSearch),wrapper.addEventListener("click",hideSearch),modal.addEventListener("click",function(e){return e.stopPropagation(),e.stopImmediatePropagation(),!1}),document.addEventListener("keydown",function(e){e.key=="/"&&(searchVisible||(e.preventDefault(),displaySearch())),e.key=="Escape"&&hideSearch(),e.key=="ArrowDown"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?first.focus():document.activeElement==last?last.focus():document.activeElement.parentElement.nextSibling.firstElementChild.focus()),e.key=="ArrowUp"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?input.focus():document.activeElement==first?input.focus():document.activeElement.parentElement.previousSibling.firstElementChild.focus()),e.key=="Enter"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?first.focus():document.activeElement.click())}),input.onkeyup=function(){executeQuery(this.value)};function displaySearch(){indexed||buildIndex(),searchVisible||(document.body.style.overflow="hidden",wrapper.style.visibility="visible",input.focus(),searchVisible=!0)}function hideSearch(){searchVisible&&(document.body.style.overflow="visible",wrapper.style.visibility="hidden",input.value="",output.innerHTML="",document.activeElement.blur(),searchVisible=!1)}function fetchJSON(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4&&n.status===200){var e=JSON.parse(n.responseText);t&&t(e)}},n.open("GET",e),n.send()}function buildIndex(){var e=wrapper.getAttribute("data-url"),e=e.replace(/\/?$/,"/");fetchJSON(e+"index.json",function(e){var t={shouldSort:!0,ignoreLocation:!0,threshold:0,includeMatches:!0,keys:[{name:"title",weight:.8},{name:"section",weight:.2},{name:"summary",weight:.6},{name:"content",weight:.4}]};fuse=new Fuse(e,t),indexed=!0})}function executeQuery(e){let n=fuse.search(e),t="";n.length>0?(n.forEach(function(e){console.log(e.item.summary);var o,i,a=e.item.summary,s=document.createElement("div");s.innerHTML=a,e.item.summary=s.textContent||s.innerText||"",o=e.item.externalUrl?e.item.title+''+e.item.externalUrl+"":e.item.title,i=e.item.externalUrl?'target="_blank" rel="noopener" href="'+e.item.externalUrl+'"':'href="'+e.item.permalink+'"',t=t+`
  • + +
    +
    + ${o} +
    +
    ${e.item.section}·${e.item.date?e.item.date:""}
    +
    ${e.item.summary}
    +
    +
    +
    +
    +
  • `}),hasResults=!0):(t="",hasResults=!1),output.innerHTML=t,n.length>0&&(first=output.firstChild.firstElementChild,last=output.lastChild.firstElementChild)}menuButton=document.getElementById("menu-button"),menuCloseButton=document.getElementById("menu-close-button"),menuWrapper=document.getElementById("menu-wrapper"),menuOpen=!1,openMenu=function(){menuOpen||(menuOpen=!0,document.body.style.overflowY="hidden",menuButton.style.visibility="hidden",menuWrapper.style.visibility="visible",menuWrapper.style.opacity="1",window.onbeforeunload=function(){closeMenu()})},closeMenu=function(e){menuOpen&&(menuOpen=!1,document.body.style.overflowY="auto",menuButton.style.visibility="visible",menuWrapper.style.visibility="hidden",menuWrapper.style.opacity="0",window.onbeforeunload=function(){},e.stopPropagation())},menuButton.addEventListener("click",openMenu),menuCloseButton.addEventListener("click",closeMenu) \ No newline at end of file diff --git a/public/lib/typeit/typeit.umd.57f9bc6e047efc875cb4f2e9ca74c802de33638d2c3aff6d9b7eb3c7588c24649b6c3e51cd45f49c0ed0cf72aedbd694bf2d35f358a34076d63f9febabc0bd6f.js b/public/lib/typeit/typeit.umd.57f9bc6e047efc875cb4f2e9ca74c802de33638d2c3aff6d9b7eb3c7588c24649b6c3e51cd45f49c0ed0cf72aedbd694bf2d35f358a34076d63f9febabc0bd6f.js new file mode 100644 index 0000000..d201783 --- /dev/null +++ b/public/lib/typeit/typeit.umd.57f9bc6e047efc875cb4f2e9ca74c802de33638d2c3aff6d9b7eb3c7588c24649b6c3e51cd45f49c0ed0cf72aedbd694bf2d35f358a34076d63f9febabc0bd6f.js @@ -0,0 +1,2 @@ +// TypeIt by Alex MacArthur - https://typeitjs.com +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).TypeIt=t()}(this,(function(){"use strict";const e=e=>Array.isArray(e),t=t=>e(t)?t:[t];const s="data-typeit-id",i="ti-cursor",r={started:!1,completed:!1,frozen:!1,destroyed:!1},n={breakLines:!0,cursor:{autoPause:!0,autoPauseDelay:500,animation:{frames:[0,0,1].map((e=>({opacity:e}))),options:{iterations:1/0,easing:"steps(2, start)",fill:"forwards"}}},cursorChar:"|",cursorSpeed:1e3,deleteSpeed:null,html:!0,lifeLike:!0,loop:!1,loopDelay:750,nextStringDelay:750,speed:100,startDelay:250,startDelete:!1,strings:[],waitUntilVisible:!1,beforeString:()=>{},afterString:()=>{},beforeStep:()=>{},afterStep:()=>{},afterComplete:()=>{}},o=`[${s}]:before {content: '.'; display: inline-block; width: 0; visibility: hidden;}`,a=e=>document.createElement(e),u=e=>document.createTextNode(e),l=(e,t="")=>{let s=a("style");s.id=t,s.appendChild(u(e)),document.head.appendChild(s)},h=t=>(e(t)||(t=[t/2,t/2]),t),d=(e,t)=>Math.abs(Math.random()*(e+t-(e-t))+(e-t));let p=e=>e/2;const c=e=>Array.from(e);let f=e=>([...e.childNodes].forEach((e=>{if(e.nodeValue)return[...e.nodeValue].forEach((t=>{e.parentNode.insertBefore(u(t),e)})),void e.remove();f(e)})),e);const m=e=>{let t=document.implementation.createHTMLDocument();return t.body.innerHTML=e,f(t.body)};function y(e,t=!1,s=!1){let r,n=e.querySelector(`.${i}`),o=document.createTreeWalker(e,NodeFilter.SHOW_ALL,{acceptNode:e=>{if(n&&s){if(e.classList?.contains(i))return NodeFilter.FILTER_ACCEPT;if(n.contains(e))return NodeFilter.FILTER_REJECT}return e.classList?.contains(i)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),a=[];for(;r=o.nextNode();)r.originalParent||(r.originalParent=r.parentNode),a.push(r);return t?a.reverse():a}function g(e,t=!0){return t?y(m(e)):c(e).map(u)}const b=({index:e,newIndex:t,queueItems:s,cleanUp:i})=>{for(let r=e+1;rNumber.isInteger(e),C=({queueItems:e,selector:t,cursorPosition:s,to:i})=>{if(P(t))return-1*t;let r=new RegExp("END","i").test(i),n=t?[...e].reverse().findIndex((({char:e})=>{let s=e.parentElement,i=s.matches(t);return!(!r||!i)||i&&s.firstChild.isSameNode(e)})):-1;return n<0&&(n=r?0:e.length-1),n-s+(r?0:1)},I=(e,t)=>new Array(t).fill(e);let v=e=>new Promise((t=>{requestAnimationFrame((async()=>{t(await e())}))})),w=e=>e?.getAnimations().find((t=>t.id===e.dataset.tiAnimationId)),T=({cursor:e,frames:t,options:s})=>{let i=e.animate(t,s);return i.pause(),i.id=e.dataset.tiAnimationId,v((()=>{v((()=>{i.play()}))})),i},q=e=>e.func?.call(null),S=async({index:e,queueItems:t,wait:s,cursor:i,cursorOptions:r})=>{let n=t[e][1],o=[],a=e,u=n,l=()=>u&&!u.delay,h=n.shouldPauseCursor()&&r.autoPause;for(;l();)o.push(u),l()&&a++,u=t[a]?t[a][1]:null;if(o.length)return await v((async()=>{for(let e of o)await q(e)})),a-1;let d,p=w(i);return p&&(d={...p.effect.getComputedTiming(),delay:h?r.autoPauseDelay:0}),await s((async()=>{p&&h&&p.cancel(),await v((()=>{q(n)}))}),n.delay),await(({cursor:e,options:t,cursorOptions:s})=>{if(!e||!s)return;let i,r=w(e);r&&(t.delay=r.effect.getComputedTiming().delay,i=r.currentTime,r.cancel());let n=T({cursor:e,frames:s.animation.frames,options:t});return i&&(n.currentTime=i),n})({cursor:i,options:d,cursorOptions:r}),e};const E=e=>"value"in e;let N=e=>"function"==typeof e?e():e,A=(e,t=document,s=!1)=>t["querySelector"+(s?"All":"")](e);const L=(e,t)=>Object.assign({},e,t);let x={"font-family":"","font-weight":"","font-size":"","font-style":"","line-height":"",color:"",transform:"translateX(-.125em)"};return class{element;timeouts;cursorPosition;predictedCursorPosition;statuses={started:!1,completed:!1,frozen:!1,destroyed:!1,firing:!1};opts;id;queue;cursor;flushCallback=null;unfreeze=()=>{};constructor(e,s={}){var i;this.opts=L(n,s),this.element="string"==typeof(i=e)?A(i):i,this.timeouts=[],this.cursorPosition=0,this.unfreeze=()=>{},this.predictedCursorPosition=null,this.statuses=L({},r),this.id=Math.random().toString().substring(2,9),this.queue=function(e){let s=function(e){return t(e).forEach((e=>o.set(Symbol(e.char?.innerText),i({...e})))),this},i=e=>(e.shouldPauseCursor=function(){return Boolean(this.typeable||this.cursorable||this.deletable)},e),r=()=>o,n=()=>Array.from(o.values()),o=new Map;return s(e),{add:s,set:function(e,t){let s=[...o.keys()];o.set(s[e],i(t))},wipe:function(){o=new Map,s(e)},done:(e,t=!1)=>t?o.delete(e):o.get(e).done=!0,reset:function(){o.forEach((e=>delete e.done))},destroy:e=>o.delete(e),getItems:(e=!1)=>e?n():n().filter((e=>!e.done)),getQueue:r,getTypeable:()=>n().filter((e=>e.typeable)),getPendingQueueItems:()=>{const e=[];for(let[,t]of r())t.done||e.push(t);return e}}}([{delay:this.opts.startDelay}]),this.#e(s),this.cursor=this.#t(),this.element.dataset.typeitId=this.id,l(o),this.opts.strings.length&&this.#s()}go(){return this.statuses.started?this:(this.#i(),this.opts.waitUntilVisible?(e=this.element,t=this.#r.bind(this),new IntersectionObserver(((s,i)=>{s.forEach((s=>{s.isIntersecting&&(t(),i.unobserve(e))}))}),{threshold:1}).observe(e),this):(this.#r(),this));var e,t}destroy(e=!0){this.timeouts=(this.timeouts.forEach(clearTimeout),[]),N(e)&&this.cursor&&this.#n(this.cursor),this.statuses.destroyed=!0}reset(e){!this.is("destroyed")&&this.destroy(),e?(this.queue.wipe(),e(this)):this.queue.reset(),this.cursorPosition=0;for(let t in this.statuses)this.statuses[t]=!1;return this.element[this.#o()?"value":"innerHTML"]="",this}is=function(e){return this.statuses[e]};type(e,t={}){e=N(e);let{instant:s}=t,i=this.#a(t),r=g(e,this.opts.html).map((e=>{return{func:()=>this.#u(e),char:e,delay:s||(t=e,/<(.+)>(.*?)<\/(.+)>/.test(t.outerHTML))?0:this.#l(),typeable:e.nodeType===Node.TEXT_NODE};var t})),n=[i[0],{func:async()=>await this.opts.beforeString(e,this)},...r,{func:async()=>await this.opts.afterString(e,this)},i[1]];return this.#h(n,t)}break(e={}){return this.#h({func:()=>this.#u(a("BR")),typeable:!0},e)}move(e,t={}){e=N(e);let s=this.#a(t),{instant:i,to:r}=t,n=C({queueItems:this.queue.getTypeable(),selector:null===e?"":e,to:r,cursorPosition:this.#d}),o=n<0?-1:1;return this.predictedCursorPosition=this.#d+n,this.#h([s[0],...I({func:()=>this.#p(o),delay:i?0:this.#l(),cursorable:!0},Math.abs(n)),s[1]],t)}exec(e,t={}){let s=this.#a(t);return this.#h([s[0],{func:()=>e(this)},s[1]],t)}options(e,t={}){return e=N(e),this.#c(e),this.#h({},t)}pause(e,t={}){return this.#h({delay:N(e)},t)}delete(e=null,t={}){e=N(e);let s=this.#a(t),i=e,{instant:r,to:n}=t,o=this.queue.getTypeable(),a=(()=>null===i?o.length:P(i)?i:C({queueItems:o,selector:i,cursorPosition:this.#d,to:n}))();return this.#h([s[0],...I({func:this.#f.bind(this),delay:r?0:this.#l(1),deletable:!0},a),s[1]],t)}freeze(){this.statuses.frozen=!0}flush(e=null){return this.flushCallback=e||this.flushCallback,this.statuses.firing||(this.#i(),this.#r(!1).then((()=>{if(this.queue.getPendingQueueItems().length>0)return this.flush();this.flushCallback(),this.flushCallback=null}))),this}getQueue(){return this.queue}getOptions(){return this.opts}updateOptions(e){return this.#c(e)}getElement(){return this.element}empty(e={}){return this.#h({func:this.#m.bind(this)},e)}async#m(){this.#o()?this.element.value="":this.#y.forEach(this.#n.bind(this))}async#r(e=!0){this.statuses.started=!0,this.statuses.firing=!0;let t=t=>{this.queue.done(t,!e)};try{let s=[...this.queue.getQueue()];for(let e=0;e{await this.#P(i[0]),this.#r()}),i[1])}catch(s){}return this.statuses.firing=!1,this}async#p(e){var t,s,r;this.cursorPosition=(t=e,s=this.cursorPosition,r=this.#y,Math.min(Math.max(s+t,0),r.length)),((e,t,s)=>{let r=t[s-1],n=A(`.${i}`,e);(e=r?.parentNode||e).insertBefore(n,r||null)})(this.element,this.#y,this.cursorPosition)}async#P(e){let t=this.#d;t&&await this.#p({value:t});let s=this.#y.map((e=>[Symbol(),{func:this.#f.bind(this),delay:this.#l(1),deletable:!0,shouldPauseCursor:()=>!0}]));for(let i=0;i{this.unfreeze=()=>{this.statuses.frozen=!1,e()}})),s||await this.opts.beforeStep(this),await((e,t,s)=>new Promise((i=>{s.push(setTimeout((async()=>{await e(),i()}),t||0))})))(e,t,this.timeouts),s||await this.opts.afterStep(this)}async#i(){if(!this.#o()&&this.cursor&&this.element.appendChild(this.cursor),this.#C){((e,t)=>{let r=`[${s}='${e}'] .${i}`,n=getComputedStyle(t),o=Object.entries(x).reduce(((e,[t,s])=>`${e} ${t}: var(--ti-cursor-${t}, ${s||n[t]});`),"");l(`${r} { display: inline-block; width: 0; ${o} }`,e)})(this.id,this.element),this.cursor.dataset.tiAnimationId=this.id;let{animation:e}=this.opts.cursor,{frames:t,options:r}=e;T({frames:t,cursor:this.cursor,options:{duration:this.opts.cursorSpeed,...r}})}}#o(){return E(this.element)}#h(e,t){return this.queue.add(e),this.#I(t),this}#I(e={}){let t=e.delay;t&&this.queue.add({delay:t})}#a(e={}){return[{func:()=>this.#c(e)},{func:()=>this.#c(this.opts)}]}async#c(e){this.opts=L(this.opts,e)}#s(){let e=this.opts.strings.filter((e=>!!e));e.forEach(((t,s)=>{if(this.type(t),s+1===e.length)return;let i=this.opts.breakLines?[{func:()=>this.#u(a("BR")),typeable:!0}]:I({func:this.#f.bind(this),delay:this.#l(1)},this.queue.getTypeable().length);this.#v(i)}))}#e=e=>{this.opts.cursor=(e=>{if("object"==typeof e){let t={},{frames:s,options:i}=n.cursor.animation;return t.animation=e.animation||{},t.animation.frames=e.animation?.frames||s,t.animation.options=L(i,e.animation?.options||{}),t.autoPause=e.autoPause??n.cursor.autoPause,t.autoPauseDelay=e.autoPauseDelay||n.cursor.autoPauseDelay,t}return!0===e?n.cursor:e})(e.cursor??n.cursor),this.opts.strings=this.#w(t(this.opts.strings)),this.opts=L(this.opts,{html:!this.#T&&this.opts.html,nextStringDelay:h(this.opts.nextStringDelay),loopDelay:h(this.opts.loopDelay)})};#w(e){let t=this.element.innerHTML;return t?(this.element.innerHTML="",this.opts.startDelete?(this.element.innerHTML=t,f(this.element),this.#v(I({func:this.#f.bind(this),delay:this.#l(1),deletable:!0},this.#y.length)),e):(s=t,s.replace(//g,"").trim().split(//)).concat(e)):e;var s}#t(){if(this.#T)return null;let e=a("span");return e.className=i,this.#C?(e.innerHTML=m(this.opts.cursorChar).innerHTML,e):(e.style.visibility="hidden",e)}#v(e){let t=this.opts.nextStringDelay;this.queue.add([{delay:t[0]},...e,{delay:t[1]}])}#u(e){((e,t)=>{if(E(e))return void(e.value=`${e.value}${t.textContent}`);t.innerHTML="";let s=(r=t.originalParent,/body/i.test(r?.tagName)?e:t.originalParent||e);var r;let n=A("."+i,s)||null;n&&n.parentElement!==s&&(s=n.parentElement),s.insertBefore(t,n)})(this.element,e)}#f(){this.#y.length&&(this.#T?this.element.value=this.element.value.slice(0,-1):this.#n(this.#y[this.cursorPosition]))}#n(e){((e,t)=>{if(!e)return;let s=e.parentNode;(s.childNodes.length>1||s.isSameNode(t)?e:s).remove()})(e,this.element)}#l(e=0){return function(e){let{speed:t,deleteSpeed:s,lifeLike:i}=e;return s=null!==s?s:t/3,i?[d(t,p(t)),d(s,p(s))]:[t,s]}(this.opts)[e]}get#d(){return this.predictedCursorPosition??this.cursorPosition}get#T(){return E(this.element)}get#C(){return!!this.opts.cursor&&!this.#T}get#y(){return e=this.element,E(e)?c(e.value):y(e,!0).filter((e=>!(e.childNodes.length>0)));var e}}})); diff --git a/public/notes/coding/cheat_sheet/c/feature.png b/public/notes/coding/cheat_sheet/c/feature.png new file mode 100644 index 0000000..1b70c29 Binary files /dev/null and b/public/notes/coding/cheat_sheet/c/feature.png differ diff --git a/public/notes/coding/cheat_sheet/c/feature_hu17671025689089448716.png b/public/notes/coding/cheat_sheet/c/feature_hu17671025689089448716.png new file mode 100644 index 0000000..14ca8a6 Binary files /dev/null and b/public/notes/coding/cheat_sheet/c/feature_hu17671025689089448716.png differ diff --git a/public/notes/coding/cheat_sheet/c/feature_hu_bbabc31cd745661a.png b/public/notes/coding/cheat_sheet/c/feature_hu_bbabc31cd745661a.png new file mode 100644 index 0000000..14ca8a6 Binary files /dev/null and b/public/notes/coding/cheat_sheet/c/feature_hu_bbabc31cd745661a.png differ diff --git a/public/notes/coding/cheat_sheet/c/image.png b/public/notes/coding/cheat_sheet/c/image.png new file mode 100644 index 0000000..1b70c29 Binary files /dev/null and b/public/notes/coding/cheat_sheet/c/image.png differ diff --git a/public/notes/coding/cheat_sheet/c/index.html b/public/notes/coding/cheat_sheet/c/index.html new file mode 100644 index 0000000..ab206f6 --- /dev/null +++ b/public/notes/coding/cheat_sheet/c/index.html @@ -0,0 +1,1173 @@ + + + + + + + + + + C · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + C +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + + +
    + + + + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/notes/coding/cheat_sheet/cpp/feature.png b/public/notes/coding/cheat_sheet/cpp/feature.png new file mode 100644 index 0000000..e6942a4 Binary files /dev/null and b/public/notes/coding/cheat_sheet/cpp/feature.png differ diff --git a/public/notes/coding/cheat_sheet/cpp/feature_hu10527623921138011856.png b/public/notes/coding/cheat_sheet/cpp/feature_hu10527623921138011856.png new file mode 100644 index 0000000..e98f29c Binary files /dev/null and b/public/notes/coding/cheat_sheet/cpp/feature_hu10527623921138011856.png differ diff --git a/public/notes/coding/cheat_sheet/cpp/feature_hu_9a52efb71936bc32.png b/public/notes/coding/cheat_sheet/cpp/feature_hu_9a52efb71936bc32.png new file mode 100644 index 0000000..e98f29c Binary files /dev/null and b/public/notes/coding/cheat_sheet/cpp/feature_hu_9a52efb71936bc32.png differ diff --git a/public/notes/coding/cheat_sheet/cpp/image.png b/public/notes/coding/cheat_sheet/cpp/image.png new file mode 100644 index 0000000..e6942a4 Binary files /dev/null and b/public/notes/coding/cheat_sheet/cpp/image.png differ diff --git a/public/notes/coding/cheat_sheet/cpp/index.html b/public/notes/coding/cheat_sheet/cpp/index.html new file mode 100644 index 0000000..b2720e1 --- /dev/null +++ b/public/notes/coding/cheat_sheet/cpp/index.html @@ -0,0 +1,1193 @@ + + + + + + + + + + C++ · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + C++ +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + + +
    + + + + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/notes/coding/cheat_sheet/feature.png b/public/notes/coding/cheat_sheet/feature.png new file mode 100644 index 0000000..4efe943 Binary files /dev/null and b/public/notes/coding/cheat_sheet/feature.png differ diff --git a/public/notes/coding/cheat_sheet/feature_hu5367704742554595008.png b/public/notes/coding/cheat_sheet/feature_hu5367704742554595008.png new file mode 100644 index 0000000..5de8f09 Binary files /dev/null and b/public/notes/coding/cheat_sheet/feature_hu5367704742554595008.png differ diff --git a/public/notes/coding/cheat_sheet/feature_hu_1436f3ddd11d8c30.png b/public/notes/coding/cheat_sheet/feature_hu_1436f3ddd11d8c30.png new file mode 100644 index 0000000..5de8f09 Binary files /dev/null and b/public/notes/coding/cheat_sheet/feature_hu_1436f3ddd11d8c30.png differ diff --git a/public/notes/coding/cheat_sheet/git/feature.png b/public/notes/coding/cheat_sheet/git/feature.png new file mode 100644 index 0000000..8167f08 Binary files /dev/null and b/public/notes/coding/cheat_sheet/git/feature.png differ diff --git a/public/notes/coding/cheat_sheet/git/feature_hu10228242090265357828.png b/public/notes/coding/cheat_sheet/git/feature_hu10228242090265357828.png new file mode 100644 index 0000000..c5388e5 Binary files /dev/null and b/public/notes/coding/cheat_sheet/git/feature_hu10228242090265357828.png differ diff --git a/public/notes/coding/cheat_sheet/git/feature_hu_e3375000cb3b08e0.png b/public/notes/coding/cheat_sheet/git/feature_hu_e3375000cb3b08e0.png new file mode 100644 index 0000000..c5388e5 Binary files /dev/null and b/public/notes/coding/cheat_sheet/git/feature_hu_e3375000cb3b08e0.png differ diff --git a/public/notes/coding/cheat_sheet/git/image.png b/public/notes/coding/cheat_sheet/git/image.png new file mode 100644 index 0000000..8167f08 Binary files /dev/null and b/public/notes/coding/cheat_sheet/git/image.png differ diff --git a/public/notes/coding/cheat_sheet/git/index.html b/public/notes/coding/cheat_sheet/git/index.html new file mode 100644 index 0000000..af4535c --- /dev/null +++ b/public/notes/coding/cheat_sheet/git/index.html @@ -0,0 +1,1307 @@ + + + + + + + + + + Git · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + Git +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 17 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    + + Table of Contents + +
    + +
    +
    + + +
    +
    + + +
    + + + + +
    + + +

    submodule +
    + + + # + + +

    + + +

    Commit +
    + + + # + + +

    +
      +
    1. Add date and time in commit messages:
    2. +
    +
    git commit -m "$(date '+%Y-%m-%d %H:%M:%S')"
    +
    + + + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/notes/coding/cheat_sheet/image.png b/public/notes/coding/cheat_sheet/image.png new file mode 100644 index 0000000..4efe943 Binary files /dev/null and b/public/notes/coding/cheat_sheet/image.png differ diff --git a/public/notes/coding/cheat_sheet/index.html b/public/notes/coding/cheat_sheet/index.html new file mode 100644 index 0000000..cbcd197 --- /dev/null +++ b/public/notes/coding/cheat_sheet/index.html @@ -0,0 +1,1426 @@ + + + + + + + + + + Cheat Sheets · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Cheat Sheets

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    +
    + +
    +

    Here’s a cheat sheet of some programming languages, tools, and libraries that I use often—but somehow always forget.

    + +
    + + + + +
    + + + + + + + + + + + + + +
    + + + + + + + +
    + +
    + + + +
    + + +
    C
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + + + +
    + + +
    C++
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + + + +
    + + +
    Git
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 17 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + + + +
    + + +
    Python
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/notes/coding/cheat_sheet/index.xml b/public/notes/coding/cheat_sheet/index.xml new file mode 100644 index 0000000..b556ac8 --- /dev/null +++ b/public/notes/coding/cheat_sheet/index.xml @@ -0,0 +1,79 @@ + + + + Cheat Sheets on SWangNice + http://localhost:1313/notes/coding/cheat_sheet/ + Recent content in Cheat Sheets on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + C + http://localhost:1313/notes/coding/cheat_sheet/c/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/c/ + + + + + + C++ + http://localhost:1313/notes/coding/cheat_sheet/cpp/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/cpp/ + + + + + + Git + http://localhost:1313/notes/coding/cheat_sheet/git/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/git/ + <h2 class="relative group">submodule + <div id="submodule" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#submodule" aria-label="Anchor">#</a> + </span> + +</h2> + + +<h2 class="relative group">Commit + <div id="commit" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#commit" aria-label="Anchor">#</a> + </span> + +</h2> +<ol> +<li>Add date and time in commit messages:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git commit -m <span class="s2">&#34;</span><span class="k">$(</span>date <span class="s1">&#39;+%Y-%m-%d %H:%M:%S&#39;</span><span class="k">)</span><span class="s2">&#34;</span> +</span></span></code></pre></div> + + + + + Python + http://localhost:1313/notes/coding/cheat_sheet/python/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/notes/coding/cheat_sheet/python/ + + + + + + diff --git a/public/notes/coding/cheat_sheet/page/1/index.html b/public/notes/coding/cheat_sheet/page/1/index.html new file mode 100644 index 0000000..8c17b89 --- /dev/null +++ b/public/notes/coding/cheat_sheet/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/notes/coding/cheat_sheet/ + + + + + + diff --git a/public/notes/coding/cheat_sheet/python/feature.png b/public/notes/coding/cheat_sheet/python/feature.png new file mode 100644 index 0000000..ef62aa9 Binary files /dev/null and b/public/notes/coding/cheat_sheet/python/feature.png differ diff --git a/public/notes/coding/cheat_sheet/python/feature_hu17124185846623107975.png b/public/notes/coding/cheat_sheet/python/feature_hu17124185846623107975.png new file mode 100644 index 0000000..358c064 Binary files /dev/null and b/public/notes/coding/cheat_sheet/python/feature_hu17124185846623107975.png differ diff --git a/public/notes/coding/cheat_sheet/python/feature_hu_6da16468d1d58e07.png b/public/notes/coding/cheat_sheet/python/feature_hu_6da16468d1d58e07.png new file mode 100644 index 0000000..358c064 Binary files /dev/null and b/public/notes/coding/cheat_sheet/python/feature_hu_6da16468d1d58e07.png differ diff --git a/public/notes/coding/cheat_sheet/python/image.png b/public/notes/coding/cheat_sheet/python/image.png new file mode 100644 index 0000000..ef62aa9 Binary files /dev/null and b/public/notes/coding/cheat_sheet/python/image.png differ diff --git a/public/notes/coding/cheat_sheet/python/index.html b/public/notes/coding/cheat_sheet/python/index.html new file mode 100644 index 0000000..281dfa5 --- /dev/null +++ b/public/notes/coding/cheat_sheet/python/index.html @@ -0,0 +1,1173 @@ + + + + + + + + + + Python · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + Python +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + + +
    + + + + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/notes/coding/feature.JPG b/public/notes/coding/feature.JPG new file mode 100644 index 0000000..d4bbb20 Binary files /dev/null and b/public/notes/coding/feature.JPG differ diff --git a/public/notes/coding/feature.png b/public/notes/coding/feature.png new file mode 100644 index 0000000..d4bbb20 Binary files /dev/null and b/public/notes/coding/feature.png differ diff --git a/public/notes/coding/feature_hu5436334178309711235.jpg b/public/notes/coding/feature_hu5436334178309711235.jpg new file mode 100644 index 0000000..6a34d05 Binary files /dev/null and b/public/notes/coding/feature_hu5436334178309711235.jpg differ diff --git a/public/notes/coding/feature_hu_9f46d918bd8690ec.jpg b/public/notes/coding/feature_hu_9f46d918bd8690ec.jpg new file mode 100644 index 0000000..6a34d05 Binary files /dev/null and b/public/notes/coding/feature_hu_9f46d918bd8690ec.jpg differ diff --git a/public/notes/coding/image.png b/public/notes/coding/image.png new file mode 100644 index 0000000..d4bbb20 Binary files /dev/null and b/public/notes/coding/image.png differ diff --git a/public/notes/coding/index.html b/public/notes/coding/index.html new file mode 100644 index 0000000..7db0f1c --- /dev/null +++ b/public/notes/coding/index.html @@ -0,0 +1,1149 @@ + + + + + + + + + + Coding · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Coding

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    +
    + +
    + +
    + + + + +
    + + + + + + + + + + + + + +
    + + + + + + + +
    + +
    + + + +
    + + +
    Cheat Sheets
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 18 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/notes/coding/index.xml b/public/notes/coding/index.xml new file mode 100644 index 0000000..3738bb1 --- /dev/null +++ b/public/notes/coding/index.xml @@ -0,0 +1,13 @@ + + + + Coding on SWangNice + http://localhost:1313/notes/coding/ + Recent content in Coding on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + diff --git a/public/notes/coding/page/1/index.html b/public/notes/coding/page/1/index.html new file mode 100644 index 0000000..ccf6126 --- /dev/null +++ b/public/notes/coding/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/notes/coding/ + + + + + + diff --git a/public/notes/index.html b/public/notes/index.html new file mode 100644 index 0000000..7349296 --- /dev/null +++ b/public/notes/index.html @@ -0,0 +1,1148 @@ + + + + + + + + + + Notes · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Notes

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    +
    + +
    +

    Personal notes, may not be readable.

    + +
    + + + + +
    + + + + + + + + + + + + + +
    + + + + + + + +
    + +
    + + + +
    + + +
    Coding
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/notes/index.xml b/public/notes/index.xml new file mode 100644 index 0000000..bcba5f5 --- /dev/null +++ b/public/notes/index.xml @@ -0,0 +1,13 @@ + + + + Notes on SWangNice + http://localhost:1313/notes/ + Recent content in Notes on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + diff --git a/public/en/en/page/1/index.html b/public/notes/page/1/index.html similarity index 54% rename from public/en/en/page/1/index.html rename to public/notes/page/1/index.html index bde55e1..82da3fa 100644 --- a/public/en/en/page/1/index.html +++ b/public/notes/page/1/index.html @@ -1,10 +1,10 @@ - + - http://localhost:1313/en/en/ - + http://localhost:1313/notes/ + - + diff --git a/public/projects/embedded/feature.png b/public/projects/embedded/feature.png new file mode 100644 index 0000000..2e8133b Binary files /dev/null and b/public/projects/embedded/feature.png differ diff --git a/public/projects/embedded/feature_hu10397017516568815061.png b/public/projects/embedded/feature_hu10397017516568815061.png new file mode 100644 index 0000000..cf70091 Binary files /dev/null and b/public/projects/embedded/feature_hu10397017516568815061.png differ diff --git a/public/projects/embedded/feature_hu_2a7b0cc8cf570380.png b/public/projects/embedded/feature_hu_2a7b0cc8cf570380.png new file mode 100644 index 0000000..cf70091 Binary files /dev/null and b/public/projects/embedded/feature_hu_2a7b0cc8cf570380.png differ diff --git a/public/projects/embedded/image.png b/public/projects/embedded/image.png new file mode 100644 index 0000000..2e8133b Binary files /dev/null and b/public/projects/embedded/image.png differ diff --git a/public/projects/embedded/index.html b/public/projects/embedded/index.html new file mode 100644 index 0000000..b93bf7b --- /dev/null +++ b/public/projects/embedded/index.html @@ -0,0 +1,961 @@ + + + + + + + + + + Fancy Things on Boards · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Fancy Things on Boards

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + + + + + + +
    +
    + +
    + +
    + + + + +
    + +
    +

    + There are no articles to list here yet. +

    +
    + + + + + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/embedded/index.xml b/public/projects/embedded/index.xml new file mode 100644 index 0000000..2003d67 --- /dev/null +++ b/public/projects/embedded/index.xml @@ -0,0 +1,13 @@ + + + + Fancy Things on Boards on SWangNice + http://localhost:1313/projects/embedded/ + Recent content in Fancy Things on Boards on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + diff --git a/public/projects/embedded/page/1/index.html b/public/projects/embedded/page/1/index.html new file mode 100644 index 0000000..7b95f4c --- /dev/null +++ b/public/projects/embedded/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/projects/embedded/ + + + + + + diff --git a/public/projects/index.html b/public/projects/index.html new file mode 100644 index 0000000..0279151 --- /dev/null +++ b/public/projects/index.html @@ -0,0 +1,1265 @@ + + + + + + + + + + Projects · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Projects

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    +
    + +
    +

    This is the Projects page, where I keep track of all my personal and collaborative work.

    +

    I use several tags to describe the status and nature of each project:

    +
      +
    • +

      Private/ Public: Private projects won’t reveal too many details, but I’ll still document the process, to-do lists, and partial results. For Public projects, I aim to share as much as possible — from design to implementation.

      +
    • +
    • +

      Idea, Ongoing, Improving, Archived: These tags indicate the current state of a project — whether it’s just a thought, actively being developed, being refined, or no longer maintained.

      +
    • +
    • +

      Original, Reproduce: Original means the project was initiated and designed by me. Reproduce refers to work based on existing ideas, papers, or open-source projects — typically with modifications or improvements.

      +
    • +
    • +

      <Tags with other topic>: Some projects are interdisciplinary. Additional tags will be added to reflect relevant topics, but each project will be placed under the one category it’s most closely related to.

      +
    • +
    + +
    + + + + +
    + + + + + + + + + + + + + +
    + + + + + + + +
    + +
    + + + +
    + + +
    Fancy Things on Boards
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + + + +
    + + +
    Self-host Projects
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 101 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/index.xml b/public/projects/index.xml new file mode 100644 index 0000000..5bbc133 --- /dev/null +++ b/public/projects/index.xml @@ -0,0 +1,13 @@ + + + + Projects on SWangNice + http://localhost:1313/projects/ + Recent content in Projects on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + diff --git a/public/projects/page/1/index.html b/public/projects/page/1/index.html new file mode 100644 index 0000000..b6881e8 --- /dev/null +++ b/public/projects/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/projects/ + + + + + + diff --git a/public/projects/self_host/feature.png b/public/projects/self_host/feature.png new file mode 100644 index 0000000..8490fc1 Binary files /dev/null and b/public/projects/self_host/feature.png differ diff --git a/public/projects/self_host/feature_hu17957593513808174590.png b/public/projects/self_host/feature_hu17957593513808174590.png new file mode 100644 index 0000000..3ad5df0 Binary files /dev/null and b/public/projects/self_host/feature_hu17957593513808174590.png differ diff --git a/public/projects/self_host/feature_hu_b139a3f43f0b42e7.png b/public/projects/self_host/feature_hu_b139a3f43f0b42e7.png new file mode 100644 index 0000000..3ad5df0 Binary files /dev/null and b/public/projects/self_host/feature_hu_b139a3f43f0b42e7.png differ diff --git a/public/projects/self_host/image.png b/public/projects/self_host/image.png new file mode 100644 index 0000000..8490fc1 Binary files /dev/null and b/public/projects/self_host/image.png differ diff --git a/public/projects/self_host/index.html b/public/projects/self_host/index.html new file mode 100644 index 0000000..d2492c4 --- /dev/null +++ b/public/projects/self_host/index.html @@ -0,0 +1,1435 @@ + + + + + + + + + + Self-host Projects · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Self-host Projects

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    +
    + +
    +
    + +
    + + Table of Contents + +
    + +
    +
    + + + +
    +
    + +
    +

    I’ve recently been exploring the world of self-hosted solutions, and it’s nothing short of amazing. There are some great collections out there that showcase powerful, privacy-respecting tools you can run on your own hardware:

    + + + +

    ❓ Why Self-Host? +
    + + + # + + +

    +

    I enjoy automating tasks and making my life smarter with scripts and small tools. Having control over the services I use, running them on my own hardware, and customizing everything to suit my needs—it’s both empowering and educational.

    + + +

    I’ll use this space to document the projects I build and share what I learn along the way.

    + + +

    List +
    + + + # + + +

    + +
    + + + + +
    + + + + + + + + + + + + + +
    + + + + + + + +
    + +
    + + + +
    + + +
    My First Server in Room: Mac Mini + SSD Enclosure
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 19 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + + + + Public + + + + + + + + Ongoing + + + + + + + + Original + + + + + + + + AI + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + + + +
    + + +
    StockBot
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 142 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + + + + Private + + + + + + + + Ongoing + + + + + + + + Original + + + + + + + + AI + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/self_host/index.xml b/public/projects/self_host/index.xml new file mode 100644 index 0000000..f4870ef --- /dev/null +++ b/public/projects/self_host/index.xml @@ -0,0 +1,13 @@ + + + + Self-host Projects on SWangNice + http://localhost:1313/projects/self_host/ + Recent content in Self-host Projects on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + diff --git a/public/projects/self_host/mac_mini_m4/01_ssh/index.html b/public/projects/self_host/mac_mini_m4/01_ssh/index.html new file mode 100644 index 0000000..58bb9b0 --- /dev/null +++ b/public/projects/self_host/mac_mini_m4/01_ssh/index.html @@ -0,0 +1,1256 @@ + + + + + + + + + + Setup · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + Setup +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 127 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    + + Table of Contents + +
    + +
    +
    + + +
    +
    + + +
    + + +
    + + + StockBot - This article is part of a series. + + + + +
    + Part 1: This Article +
    + + + + + + + + + + + + +
    + + + +
    + + +

    🍎Mac Mini Side +
    + + + # + + +

    +

    As a server, my Mac won’t sleep, so change the setting firstly.

    +
    sudo systemsetup -setcomputersleep Never        # never sleep
    +sudo systemsetup -setdisplaysleep 10            # display will sleep in 10 min
    +

    Use autossh to avoid timeout:

    +
    brew install autossh
    +

    Add the configuration below in ~/.ssh/config, Mac Mini will send package per 30 seconds to keep the connection alive.

    +
    Host <ip address>
    +    ServerAliveInterval 30
    +    ServerAliveCountMax 5
    +    TCPKeepAlive yes
    +

    Build the connection:

    +
    autossh -M 0 -f -N \
    +-i ~/.ssh/id_ed25519 \
    +-R 0.0.0.0:9000:localhost:1313 \
    +root@<ip address>
    +
    + +

    💻Server Side +
    + + + # + + +

    +

    Install and config the Nginx, for me the config file in /etc/nginx/sites-available:

    +
    server {
    +    listen 80;
    +    server_name www.<your domain> <your domain>;
    +
    +    location / {
    +        proxy_pass http://localhost:9000;
    +        proxy_set_header Host $host;
    +        proxy_set_header X-Real-IP $remote_addr;
    +        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    +    }
    +}
    +
    + + + +
    + + + + +
    + + + StockBot - This article is part of a series. + + + + +
    + Part 1: This Article +
    + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/self_host/mac_mini_m4/01_website_hosting/index.html b/public/projects/self_host/mac_mini_m4/01_website_hosting/index.html new file mode 100644 index 0000000..4e07200 --- /dev/null +++ b/public/projects/self_host/mac_mini_m4/01_website_hosting/index.html @@ -0,0 +1,1334 @@ + + + + + + + + + + Website Setup · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + Website Setup +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 234 words·2 mins + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    + + Table of Contents + +
    + +
    +
    + + +
    +
    + + +
    + + +
    + + + My First Server in Room - This article is part of a series. + + + + +
    + Part 1: This Article +
    + + + + + + + + + + + + +
    + + + +
    +

    I don’t have a public IP, so my solution is SSH tunnel + reverse Proxy on cloud server.

    + + +

    🍎Mac Mini Side +
    + + + # + + +

    +

    As a server, my Mac won’t sleep, so change the setting firstly.

    +
    sudo systemsetup -setcomputersleep Never        # never sleep
    +sudo systemsetup -setdisplaysleep 10            # display will sleep in 10 min
    +

    Use autossh to avoid timeout:

    +
    brew install autossh
    +

    Add the configuration below in ~/.ssh/config, Mac Mini will send package per 30 seconds to keep the connection alive.

    +
    Host <ip address>
    +    ServerAliveInterval 30
    +    ServerAliveCountMax 5
    +    TCPKeepAlive yes
    +

    Build the connection:

    +
    autossh -M 0 -f -N \
    +-i ~/.ssh/id_ed25519 \
    +-o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \
    +-R 0.0.0.0:9000:localhost:1313 \
    +root@<ip address>
    +
    autossh -M 0 -f -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 0.0.0.0:9000:localhost:1313 user@<your.server.com>
    +

    A watchdog script to try reconnection when the network lost(add to LaunchAgent):

    +
    #!/bin/bash
    +while true; do
    +  ping -c 1 <ip address> > /dev/null 2>&1
    +  if [ $? -ne 0 ]; then
    +    pkill -f autossh
    +    autossh -M 0 -f -N -R 0.0.0.0:9000:localhost:1313 <ip address>
    +  fi
    +  sleep 60
    +done
    +
    + +

    💻Server Side +
    + + + # + + +

    +

    Install and config the Nginx, for me the config file in /etc/nginx/sites-available:

    +
    server {
    +    listen 80;
    +    server_name www.<your domain> <your domain>;
    +
    +    location / {
    +        proxy_pass http://localhost:9000;
    +        proxy_set_header Host $host;
    +        proxy_set_header X-Real-IP $remote_addr;
    +        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    +    }
    +}
    +

    To obtain a security certificate, use the certbot:

    +
    sudo apt update
    +sudo apt install certbot python3-certbot-nginx
    +sudo certbot --nginx -d swangnice.cn
    +
    + + + +
    + + + + +
    + + + My First Server in Room - This article is part of a series. + + + + +
    + Part 1: This Article +
    + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/self_host/mac_mini_m4/02_nas/index.html b/public/projects/self_host/mac_mini_m4/02_nas/index.html new file mode 100644 index 0000000..061543f --- /dev/null +++ b/public/projects/self_host/mac_mini_m4/02_nas/index.html @@ -0,0 +1,1303 @@ + + + + + + + + + + NAS: Network Attachment Storage · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + NAS: Network Attachment Storage +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 122 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    + + Table of Contents + +
    + +
    +
    + + +
    +
    + + +
    + + +
    + + + My First Server in Room - This article is part of a series. + + + + + + + + +
    + Part 2: This Article +
    + + + + + + + + +
    + + + +
    + + +

    Hardware +
    + + + # + + +

    +

    I went with the UNITEK 3373BBK for one of my drive enclosures—and honestly, it wasn’t the best decision.

    +

    The first big letdown? The bandwidth tops out at just 5Gbps. That’s fine for basic tasks, but definitely underwhelming if you’re dealing with high-speed storage or large file transfers.

    +

    Even worse, it doesn’t support S.M.A.R.T passthrough, which makes monitoring drive health a hassle. That was a big deal-breaker for me.

    +

    Still, none of the other options really fit my expectations either. One day, I might just go all-in and make my own enclosure—design the PCB, write the firmware, the whole deal. Maybe not today… but someday.

    +
    diskutil list
    +

    Solution: HFS+ + SMB3.0, 客户端设置“延迟加载目录”或“按需索引”

    +

    diskutil list

    +
    sudo smartctl -a /dev/disk2
    +

    brew install smartmontools

    + + + + +
    + + + + +
    + + + My First Server in Room - This article is part of a series. + + + + + + + + +
    + Part 2: This Article +
    + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/self_host/mac_mini_m4/03_gitea/index.html b/public/projects/self_host/mac_mini_m4/03_gitea/index.html new file mode 100644 index 0000000..596f8e2 --- /dev/null +++ b/public/projects/self_host/mac_mini_m4/03_gitea/index.html @@ -0,0 +1,1215 @@ + + + + + + + + + + My Own Code Vault: Gitea on Mac Mini · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + My Own Code Vault: Gitea on Mac Mini +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 86 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + +
    + + + My First Server in Room - This article is part of a series. + + + + + + + + + + + + +
    + Part 3: This Article +
    + + + + +
    + + + +
    +

    Install dependence of gitea:

    +
    brew install git
    +brew install gitea
    +

    Start the configuration page of Gitea:

    +
    gitea web
    +

    Install MySQL:

    +
    brew install mysql
    +brew services start mysql
    +

    Login MySQL and create the database and user:

    +
    mysql -u root
    +

    Then, execute:

    +
    CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    +CREATE USER 'gitea'@'localhost' IDENTIFIED BY '<yourpassword>';
    +GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
    +FLUSH PRIVILEGES;
    +

    CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE USER ‘gitea’@’localhost’ IDENTIFIED BY ‘gitea’; +GRANT ALL PRIVILEGES ON gitea.* TO ‘gitea’@’localhost’; +FLUSH PRIVILEGES;

    + + + + +
    + + + + +
    + + + My First Server in Room - This article is part of a series. + + + + + + + + + + + + +
    + Part 3: This Article +
    + + + + +
    + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/self_host/mac_mini_m4/feature.png b/public/projects/self_host/mac_mini_m4/feature.png new file mode 100644 index 0000000..693f333 Binary files /dev/null and b/public/projects/self_host/mac_mini_m4/feature.png differ diff --git a/public/projects/self_host/mac_mini_m4/feature_hu11742598689762319383.png b/public/projects/self_host/mac_mini_m4/feature_hu11742598689762319383.png new file mode 100644 index 0000000..b96368e Binary files /dev/null and b/public/projects/self_host/mac_mini_m4/feature_hu11742598689762319383.png differ diff --git a/public/projects/self_host/mac_mini_m4/feature_hu_82680b0f84597f45.png b/public/projects/self_host/mac_mini_m4/feature_hu_82680b0f84597f45.png new file mode 100644 index 0000000..b96368e Binary files /dev/null and b/public/projects/self_host/mac_mini_m4/feature_hu_82680b0f84597f45.png differ diff --git a/public/projects/self_host/mac_mini_m4/image.png b/public/projects/self_host/mac_mini_m4/image.png new file mode 100644 index 0000000..693f333 Binary files /dev/null and b/public/projects/self_host/mac_mini_m4/image.png differ diff --git a/public/projects/self_host/mac_mini_m4/index.html b/public/projects/self_host/mac_mini_m4/index.html new file mode 100644 index 0000000..000ca66 --- /dev/null +++ b/public/projects/self_host/mac_mini_m4/index.html @@ -0,0 +1,1263 @@ + + + + + + + + + + My First Server in Room: Mac Mini + SSD Enclosure · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    My First Server in Room: Mac Mini + SSD Enclosure

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + + + + + + +
    +
    + +
    +

    For my first physical server in my life, I got an Mac Mini with M4 and an HDD enclosure.

    + +
    + + + + +
    + + + + + + + + + + + + + +
    + + + + + + + +
    + +
    + + +
    Website Setup
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 234 words·2 mins + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + + +
    NAS: Network Attachment Storage
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 122 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + + +
    My Own Code Vault: Gitea on Mac Mini
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 86 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/self_host/mac_mini_m4/index.xml b/public/projects/self_host/mac_mini_m4/index.xml new file mode 100644 index 0000000..b34bcd4 --- /dev/null +++ b/public/projects/self_host/mac_mini_m4/index.xml @@ -0,0 +1,91 @@ + + + + My First Server in Room: Mac Mini + SSD Enclosure on SWangNice + http://localhost:1313/projects/self_host/mac_mini_m4/ + Recent content in My First Server in Room: Mac Mini + SSD Enclosure on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + Website Setup + http://localhost:1313/projects/self_host/mac_mini_m4/01_website_hosting/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/01_website_hosting/ + <p>I don&rsquo;t have a public IP, so my solution is SSH tunnel + reverse Proxy on cloud server.</p> + + +<h2 class="relative group">🍎Mac Mini Side + <div id="mac-mini-side" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#mac-mini-side" aria-label="Anchor">#</a> + </span> + +</h2> +<p>As a server, my Mac won&rsquo;t sleep, so change the setting firstly.</p> +<pre tabindex="0"><code>sudo systemsetup -setcomputersleep Never # never sleep +sudo systemsetup -setdisplaysleep 10 # display will sleep in 10 min +</code></pre><p>Use autossh to avoid timeout:</p> +<pre tabindex="0"><code>brew install autossh +</code></pre><p>Add the configuration below in <code>~/.ssh/config</code>, Mac Mini will send package per 30 seconds to keep the connection alive.</p> + + + + + NAS: Network Attachment Storage + http://localhost:1313/projects/self_host/mac_mini_m4/02_nas/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/02_nas/ + <h2 class="relative group">Hardware + <div id="hardware" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#hardware" aria-label="Anchor">#</a> + </span> + +</h2> +<p>I went with the UNITEK 3373BBK for one of my drive enclosures—and honestly, it wasn’t the best decision.</p> +<p>The first big letdown? The bandwidth tops out at just 5Gbps. That’s fine for basic tasks, but definitely underwhelming if you’re dealing with high-speed storage or large file transfers.</p> +<p>Even worse, it doesn’t support S.M.A.R.T passthrough, which makes monitoring drive health a hassle. That was a big deal-breaker for me.</p> + + + + + My Own Code Vault: Gitea on Mac Mini + http://localhost:1313/projects/self_host/mac_mini_m4/03_gitea/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/03_gitea/ + <p>Install dependence of gitea:</p> +<pre tabindex="0"><code>brew install git +brew install gitea +</code></pre><p>Start the configuration page of Gitea:</p> +<pre tabindex="0"><code>gitea web +</code></pre><p>Install MySQL:</p> +<pre tabindex="0"><code>brew install mysql +brew services start mysql +</code></pre><p>Login MySQL and create the database and user:</p> +<pre tabindex="0"><code>mysql -u root +</code></pre><p>Then, execute:</p> +<pre tabindex="0"><code>CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE USER &#39;gitea&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;&lt;yourpassword&gt;&#39;; +GRANT ALL PRIVILEGES ON gitea.* TO &#39;gitea&#39;@&#39;localhost&#39;; +FLUSH PRIVILEGES; +</code></pre><p>CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE USER &lsquo;gitea&rsquo;@&rsquo;localhost&rsquo; IDENTIFIED BY &lsquo;gitea&rsquo;; +GRANT ALL PRIVILEGES ON gitea.* TO &lsquo;gitea&rsquo;@&rsquo;localhost&rsquo;; +FLUSH PRIVILEGES;</p> + + + + + diff --git a/public/projects/self_host/mac_mini_m4/page/1/index.html b/public/projects/self_host/mac_mini_m4/page/1/index.html new file mode 100644 index 0000000..c7e6095 --- /dev/null +++ b/public/projects/self_host/mac_mini_m4/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/projects/self_host/mac_mini_m4/ + + + + + + diff --git a/public/projects/self_host/page/1/index.html b/public/projects/self_host/page/1/index.html new file mode 100644 index 0000000..6d02dee --- /dev/null +++ b/public/projects/self_host/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/projects/self_host/ + + + + + + diff --git a/public/projects/self_host/stock_bot/01_todo/index.html b/public/projects/self_host/stock_bot/01_todo/index.html new file mode 100644 index 0000000..f453d16 --- /dev/null +++ b/public/projects/self_host/stock_bot/01_todo/index.html @@ -0,0 +1,1331 @@ + + + + + + + + + + TODO List · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + TODO List +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 51 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    + + Table of Contents + +
    + +
    +
    + + +
    +
    + + +
    + + +
    + + + StockBot - This article is part of a series. + + + + +
    + Part 1: This Article +
    + + + + + + + + +
    + + + +
    + + +

    Short-term TODO +
    + + + # + + +

    +
      +
    • 🚧 The Initial Policy implement (Parameterizing transaction variables)
    • +
    • ⬜️ The evaluate & logger script
    • +
    • ⬜ The automatic scripts with Email Sender deployed on the Server
    • +
    • ⬜ Web UI, will not be too complex just a simple one to synchronous my account for customized policy
    • +
    • ⬜️ Implement RL algorithms
    • +
    + + + + +
    + + + + +
    + + + StockBot - This article is part of a series. + + + + +
    + Part 1: This Article +
    + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/projects/self_host/stock_bot/02_results/index.html b/public/projects/self_host/stock_bot/02_results/index.html new file mode 100644 index 0000000..e6c5c59 --- /dev/null +++ b/public/projects/self_host/stock_bot/02_results/index.html @@ -0,0 +1,1241 @@ + + + + + + + + + + Showcases · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
    + +

    + Showcases +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 18 words·1 min + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + +
    + + + StockBot - This article is part of a series. + + + + + + + + +
    + Part 2: This Article +
    + + + + +
    + + + +
    +

    This section will feature occasional showcases of my technical achievements—focused purely on the engineering side, not the income.

    + + + + +
    + + + + +
    + + + StockBot - This article is part of a series. + + + + + + + + +
    + Part 2: This Article +
    + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + +
    + + + +

    + © + 2025 + SWang +

    + + + +

    + + 苏ICP备2024145451号 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + + +
    + + + + + + +
    + + +
    + + + diff --git a/public/pt-pt/categories/index.html b/public/projects/self_host/stock_bot/10_todo/index.html similarity index 70% rename from public/pt-pt/categories/index.html rename to public/projects/self_host/stock_bot/10_todo/index.html index 8960ef4..1167b07 100644 --- a/public/pt-pt/categories/index.html +++ b/public/projects/self_host/stock_bot/10_todo/index.html @@ -1,23 +1,21 @@ - - + - Categories · - + TODO List · SWangNice + + + - - - - - + @@ -28,8 +26,8 @@ - + + @@ -69,18 +64,64 @@ - - - - + + + + + + + + + - + + + + + + - + + + + + + + + + + + @@ -126,7 +167,7 @@
    Ir para o conteúdo principal + class="font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400">↓Skip to main content
    @@ -137,7 +178,7 @@ @@ -146,18 +187,139 @@ - +

    - Blog + Home

    + +
    +
    + + + Notes + + + + + + + + + + + +
    + +
    + + + - + + + +

    + Projects +

    +
    + + + + + +
    +
    + + + RestHere + + + + + + + + + + + +
    + +
    + + + + + + @@ -179,7 +341,7 @@ - + @@ -201,71 +363,8 @@ - - - - - - - - - - - - - -

    - -

    -
    - - - - - -
    -
    - - - - - - - - - - -
    PT-PT
    -
    - -
    - @@ -318,47 +417,6 @@ -
    -
    - - - - - - - - - - -
    PT-PT
    -
    - -
    - @@ -438,10 +496,10 @@
  • - +

    - Blog + Home

  • @@ -451,9 +509,136 @@ + +
  • + + +

    + Notes +

    + + + + + + + + + + +
    +
  • + +
  • + + +

    + Coding +

    +
    +
  • + +
  • + + +

    + PDF Collection +

    +
    +
  • + +
  • + + + + + +
  • - + + +

    + Projects +

    +
    +
  • + + + + + + + +
  • + + +

    + RestHere +

    + + + + + + + + + + +
    +
  • + +
  • + + +

    + My Pet +

    +
    +
  • + +
  • + + +

    + My Travel +

    +
    +
  • + +
  • + + + + + + + +
  • +
    @@ -479,7 +664,7 @@
  • - +
    @@ -503,32 +688,6 @@ - -
  • - - -
    - - - - - - - - -
    - -

    - -

    -
    -
  • - - - - - - @@ -548,18 +707,32 @@ - +
    + -
    +
    -

    Categories

    -
    +

    + TODO List +

    +
    + + + + + + + + + + + @@ -579,22 +752,106 @@
    + + +
    + + + +
    + + + + + + + + + + + + + +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    - - - -
    +
    + -
    +
    + + + + +
    + + + + +
    + + + + + + + +
    + + + + + + + + + + + + + + +
    +
    + + + +
    +
    @@ -605,7 +862,7 @@
    • - Tags @@ -623,7 +880,7 @@

      © 2025 - + SWang

      @@ -632,7 +889,7 @@

      - Criado por Hugo & Blowfish

      @@ -657,7 +914,7 @@ + + + + + + +
      +
      + + + +
      + + +
      + +

      + TODO List +

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + +
      + + + + + +
      + + + + + + + + + + + + + +
      + + + + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + + +
      + + + StockBot - This article is part of a series. + + + + +
      + Part 1: This Article +
      + + + + + + + + +
      + + + +
      + + + + +
      + + + + +
      + + + StockBot - This article is part of a series. + + + + +
      + Part 1: This Article +
      + + + + + + + + +
      + + + + +
      + + + + + + + + + + + + + + +
      + +
      + + +
      + + + + + + +
      + + + +

      + © + 2025 + SWang +

      + + + + +

      + + + Powered by Hugo & Blowfish +

      + + +
      + + + + + + +
      + + +
      + + + diff --git a/public/projects/self_host/stock_bot/2_results/index.html b/public/projects/self_host/stock_bot/2_results/index.html new file mode 100644 index 0000000..0143a22 --- /dev/null +++ b/public/projects/self_host/stock_bot/2_results/index.html @@ -0,0 +1,1062 @@ + + + + + + + + + + Showcases · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + +
      + + +
      + +

      + Showcases +

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + +
      + + + + + +
      + + + + + + + + + + + + + +
      + + + + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + + +
      + + + StockBot - This article is part of a series. + + + + + + + + +
      + Part 2: This Article +
      + + + + +
      + + + +
      + + + + +
      + + + + +
      + + + StockBot - This article is part of a series. + + + + + + + + +
      + Part 2: This Article +
      + + + + +
      + + + + +
      + + + + + + + + + + + + + + +
      + +
      + + +
      + + + + + + +
      + + + +

      + © + 2025 + SWang +

      + + + + +

      + + + Powered by Hugo & Blowfish +

      + + +
      + + + + + + +
      + + +
      + + + diff --git a/public/projects/self_host/stock_bot/feature.png b/public/projects/self_host/stock_bot/feature.png new file mode 100644 index 0000000..277ac30 Binary files /dev/null and b/public/projects/self_host/stock_bot/feature.png differ diff --git a/public/projects/self_host/stock_bot/feature_hu15309324853505185147.png b/public/projects/self_host/stock_bot/feature_hu15309324853505185147.png new file mode 100644 index 0000000..77a3c1c Binary files /dev/null and b/public/projects/self_host/stock_bot/feature_hu15309324853505185147.png differ diff --git a/public/projects/self_host/stock_bot/feature_hu_a34f2b6ec6aba749.png b/public/projects/self_host/stock_bot/feature_hu_a34f2b6ec6aba749.png new file mode 100644 index 0000000..77a3c1c Binary files /dev/null and b/public/projects/self_host/stock_bot/feature_hu_a34f2b6ec6aba749.png differ diff --git a/public/projects/self_host/stock_bot/image.png b/public/projects/self_host/stock_bot/image.png new file mode 100644 index 0000000..277ac30 Binary files /dev/null and b/public/projects/self_host/stock_bot/image.png differ diff --git a/public/projects/self_host/stock_bot/index.html b/public/projects/self_host/stock_bot/index.html new file mode 100644 index 0000000..4681ee5 --- /dev/null +++ b/public/projects/self_host/stock_bot/index.html @@ -0,0 +1,1348 @@ + + + + + + + + + + StockBot · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + +
      + +

      StockBot

      +
      + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      + + + + + + + + + + + + + + + +
      +
      + +
      +
      + +
      + + Table of Contents + +
      + +
      +
      + + + +
      +
      + +
      +

      This is a bot that assists in making daily index fund trading decisions.

      + + +

      Introduction +
      + + + # + + +

      +

      This project was inspired by my mother. Over the course of ten years, she watched my father struggle in the stock market. From those hard lessons, she developed her own strategy—one that focuses on the predictable fluctuations in index fund values. Armed with nothing more than paper, a pen, and a calculator, she’s been able to achieve steady profits.

      +

      I believe there’s even more potential here.

      +

      By digitizing her process and gradually introducing quantifiable algorithms, I hope to both increase efficiency and explore new edges for profitability. My strategy might cause others’ losses, so this project is private permanently.

      + + +

      List +
      + + + # + + +

      +

      Here, I’ll keep track of the to-do list and showcase the results as the project evolves. I’ll also highlight some interesting technical insights along the way.

      + +
      + + + + +
      + + + + + + + + + + + + + +
      + + + + + + + +
      + +
      + + +
      TODO List
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + 51 words·1 min + + + + +
      + + + + + +
      + + + + + + + + + + + + + +
      + + + + +
      + + +
      +
      + +
      +
      +
      + + + + + + +
      + +
      + + +
      Showcases
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + 18 words·1 min + + + + +
      + + + + + +
      + + + + + + + + + + + + + +
      + + + + +
      + + +
      +
      + +
      +
      +
      + + + +
      + + + + + + + + + + + + +
      + + + + + + +
      + + + +

      + © + 2025 + SWang +

      + + + +

      + + 苏ICP备2024145451号 + +

      + + + + +

      + + + Powered by Hugo & Blowfish +

      + + +
      + + + + + + +
      + + +
      + + + diff --git a/public/projects/self_host/stock_bot/index.xml b/public/projects/self_host/stock_bot/index.xml new file mode 100644 index 0000000..b32fc43 --- /dev/null +++ b/public/projects/self_host/stock_bot/index.xml @@ -0,0 +1,49 @@ + + + + StockBot on SWangNice + http://localhost:1313/projects/self_host/stock_bot/ + Recent content in StockBot on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + TODO List + http://localhost:1313/projects/self_host/stock_bot/01_todo/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/stock_bot/01_todo/ + <h2 class="relative group">Short-term TODO + <div id="short-term-todo" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#short-term-todo" aria-label="Anchor">#</a> + </span> + +</h2> +<ul> +<li>🚧 The Initial Policy implement (Parameterizing transaction variables)</li> +<li>⬜️ The evaluate &amp; logger script</li> +<li>⬜ The automatic scripts with Email Sender deployed on the Server</li> +<li>⬜ Web UI, will not be too complex just a simple one to synchronous my account for customized policy</li> +<li>⬜️ Implement RL algorithms</li> +</ul> + + + + + Showcases + http://localhost:1313/projects/self_host/stock_bot/02_results/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/stock_bot/02_results/ + <p>This section will feature occasional showcases of my technical achievements—focused purely on the engineering side, not the income.</p> + + + + + diff --git a/public/projects/self_host/stock_bot/page/1/index.html b/public/projects/self_host/stock_bot/page/1/index.html new file mode 100644 index 0000000..472e243 --- /dev/null +++ b/public/projects/self_host/stock_bot/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/projects/self_host/stock_bot/ + + + + + + diff --git a/public/pt-pt/404.html b/public/pt-pt/404.html deleted file mode 100644 index 52b74f6..0000000 --- a/public/pt-pt/404.html +++ /dev/null @@ -1,669 +0,0 @@ - - - - - - - - - - 404 Page not found · - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -
      - -

      Página não econtrada 😕

      -

      - Erro 404 -

      -
      -

      Aparentemente a página pretendida não existe.

      -
      - - -
      - - - - - - -
      - - - -

      - © - 2025 - -

      - - - - -

      - - - Criado por Hugo & Blowfish -

      - - -
      - - - - - - -
      - - -
      - - - diff --git a/public/pt-pt/authors/index.xml b/public/pt-pt/authors/index.xml deleted file mode 100644 index 6e81b87..0000000 --- a/public/pt-pt/authors/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Authors on - //localhost:1313/pt-pt/authors/ - Recent content in Authors on - Hugo -- gohugo.io - pt-pt - © 2025 - - - - diff --git a/public/pt-pt/categories/index.xml b/public/pt-pt/categories/index.xml deleted file mode 100644 index 1bc3206..0000000 --- a/public/pt-pt/categories/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Categories on - //localhost:1313/pt-pt/categories/ - Recent content in Categories on - Hugo -- gohugo.io - pt-pt - © 2025 - - - - diff --git a/public/pt-pt/index.html b/public/pt-pt/index.html deleted file mode 100644 index 1e5972d..0000000 --- a/public/pt-pt/index.html +++ /dev/null @@ -1,734 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -
      - - - - -
      -
      - -

      - -

      - -
      - - -
      -
      -
      -
      -
      - - - - - - -

      Recentes

      - - - - - -
      - -
      - - - - - - - - - - -
      - - - - -
      - - - - - - -
      - - - -

      - © - 2025 - -

      - - - - -

      - - - Criado por Hugo & Blowfish -

      - - -
      - - - - - - -
      - - -
      - - - diff --git a/public/pt-pt/index.json b/public/pt-pt/index.json deleted file mode 100644 index 5ed2fc3..0000000 --- a/public/pt-pt/index.json +++ /dev/null @@ -1,6 +0,0 @@ - - - - - -[{"content":"","externalUrl":null,"permalink":"/pt-pt/","section":"","summary":"","title":"","type":"page"},{"content":"","externalUrl":null,"permalink":"/pt-pt/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/pt-pt/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" This is My Page # ","externalUrl":null,"permalink":"/en/","section":"Home Page","summary":"\u003ch1 class=\"relative group\"\u003eThis is My Page \n \u003cdiv id=\"this-is-my-page\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#this-is-my-page\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e","title":"Home Page","type":"en"},{"content":"","externalUrl":null,"permalink":"/pt-pt/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","externalUrl":null,"permalink":"/pt-pt/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":" 这是我的主页 # ","externalUrl":null,"permalink":"/zh/","section":"主页","summary":"\u003ch1 class=\"relative group\"\u003e这是我的主页 \n \u003cdiv id=\"%E8%BF%99%E6%98%AF%E6%88%91%E7%9A%84%E4%B8%BB%E9%A1%B5\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E8%BF%99%E6%98%AF%E6%88%91%E7%9A%84%E4%B8%BB%E9%A1%B5\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e","title":"主页","type":"zh"}] \ No newline at end of file diff --git a/public/pt-pt/index.xml b/public/pt-pt/index.xml deleted file mode 100644 index 30d7a22..0000000 --- a/public/pt-pt/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - //localhost:1313/pt-pt/ - Recent content on - Hugo -- gohugo.io - pt-pt - © 2025 - - - - diff --git a/public/pt-pt/page/1/index.html b/public/pt-pt/page/1/index.html deleted file mode 100644 index f531666..0000000 --- a/public/pt-pt/page/1/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - //localhost:1313/pt-pt/ - - - - - - diff --git a/public/pt-pt/series/index.xml b/public/pt-pt/series/index.xml deleted file mode 100644 index 1e14397..0000000 --- a/public/pt-pt/series/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Series on - //localhost:1313/pt-pt/series/ - Recent content in Series on - Hugo -- gohugo.io - pt-pt - © 2025 - - - - diff --git a/public/pt-pt/sitemap.xml b/public/pt-pt/sitemap.xml deleted file mode 100644 index 4726710..0000000 --- a/public/pt-pt/sitemap.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - //localhost:1313/pt-pt/ - daily - 0.5 - - - - - - //localhost:1313/pt-pt/authors/ - daily - 0.5 - - - - - - //localhost:1313/pt-pt/categories/ - daily - 0.5 - - - - - - //localhost:1313/pt-pt/series/ - daily - 0.5 - - - - - - //localhost:1313/pt-pt/tags/ - daily - 0.5 - - - - - diff --git a/public/pt-pt/tags/index.xml b/public/pt-pt/tags/index.xml deleted file mode 100644 index bb1f122..0000000 --- a/public/pt-pt/tags/index.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Tags on - //localhost:1313/pt-pt/tags/ - Recent content in Tags on - Hugo -- gohugo.io - pt-pt - © 2025 - - - - diff --git a/public/series/index.html b/public/series/index.html index 55a61a6..6a4a861 100644 --- a/public/series/index.html +++ b/public/series/index.html @@ -8,8 +8,8 @@ - Series · SWang Nice - + Series · SWangNice + @@ -17,7 +17,7 @@ - + @@ -28,8 +28,8 @@ - + + @@ -70,7 +67,7 @@ - + @@ -153,7 +150,7 @@ @@ -176,7 +173,7 @@
    • - + -

      +

      Notes

      @@ -600,7 +627,7 @@
    • - +

      Coding @@ -609,7 +636,7 @@

    • - +

      PDF Collection @@ -626,9 +653,9 @@

    • - + -

      +

      Projects

      @@ -656,37 +683,19 @@
    • - +

      - AI + Fancy Things on Boards

    • - +

      - Embedded Systems -

      -
      -
    • - -
    • - - -

      - Game -

      -
      -
    • - -
    • - - -

      - Robotics + Self-host

    • @@ -698,16 +707,57 @@ - +
    • - +

      - Archive + RestHere +

      + + + + + + + + + + +
      +
    • + +
    • + + +

      + My Pet

    • +
    • + + +

      + My Travel +

      +
      +
    • + +
    • + @@ -826,6 +876,38 @@
      + + + +
      @@ -842,7 +924,7 @@
    • + title="Tags"> Tags @@ -864,6 +946,14 @@ +

      + + 苏ICP备2024145451号 + +

      + + +

      diff --git a/public/series/index.xml b/public/series/index.xml index 907d092..bf5af53 100644 --- a/public/series/index.xml +++ b/public/series/index.xml @@ -1,13 +1,33 @@ - Series on SWang Nice + Series on SWangNice http://localhost:1313/series/ - Recent content in Series on SWang Nice + Recent content in Series on SWangNice Hugo -- gohugo.io en © 2025 SWang - + Fri, 20 Sep 2024 04:17:50 +0000 + + + My First Server in Room + http://localhost:1313/series/my-first-server-in-room/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/series/my-first-server-in-room/ + + + + + + StockBot + http://localhost:1313/series/stockbot/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/series/stockbot/ + + + diff --git a/public/series/my-first-server-in-room/index.html b/public/series/my-first-server-in-room/index.html new file mode 100644 index 0000000..7ae7c11 --- /dev/null +++ b/public/series/my-first-server-in-room/index.html @@ -0,0 +1,1165 @@ + + + + + + + + + + My First Server in Room · SWangNice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      + + + + + + + + + +
      +
      + + + +
      + +

      My First Server in Room

      +
      + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +
      + +
      + +
      + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      File management system
      + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + 16 words·1 min + + + + +
      + + + + + +
      + + + + + + + + + + + + + +
      + + + + +
      + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      Website Setup
      + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + 216 words·2 mins + + + + +
      + + + + + +
      + + + + + + + + + + + + + +
      + + + + +
      + +
      +
      + + + +
      + + + + + + + + + +
      + + + + + + +
      + + + +

      + © + 2025 + SWang +

      + + + +

      + + 苏ICP备2024145451号 + +

      + + + + +

      + + + Powered by Hugo & Blowfish +

      + + +
      + + + + + + +
      + + +
      + + + diff --git a/public/series/my-first-server-in-room/index.xml b/public/series/my-first-server-in-room/index.xml new file mode 100644 index 0000000..f258f54 --- /dev/null +++ b/public/series/my-first-server-in-room/index.xml @@ -0,0 +1,52 @@ + + + + My First Server in Room on SWangNice + http://localhost:1313/series/my-first-server-in-room/ + Recent content in My First Server in Room on SWangNice + Hugo -- gohugo.io + en + © 2025 SWang + Fri, 20 Sep 2024 04:17:50 +0000 + + + Website Setup + http://localhost:1313/projects/self_host/mac_mini_m4/01_website_hosting/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/01_website_hosting/ + <h2 class="relative group">🍎Mac Mini Side + <div id="mac-mini-side" class="anchor"></div> + + <span + class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"> + <a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" + style="text-decoration-line: none !important;" href="#mac-mini-side" aria-label="Anchor">#</a> + </span> + +</h2> +<p>As a server, my Mac won&rsquo;t sleep, so change the setting firstly.</p> +<pre tabindex="0"><code>sudo systemsetup -setcomputersleep Never # never sleep +sudo systemsetup -setdisplaysleep 10 # display will sleep in 10 min +</code></pre><p>Use autossh to avoid timeout:</p> +<pre tabindex="0"><code>brew install autossh +</code></pre><p>Add the configuration below in <code>~/.ssh/config</code>, Mac Mini will send package per 30 seconds to keep the connection alive.</p> + + + + + File management system + http://localhost:1313/projects/self_host/mac_mini_m4/02_nas/ + Fri, 20 Sep 2024 04:17:50 +0000 + + http://localhost:1313/projects/self_host/mac_mini_m4/02_nas/ + <pre tabindex="0"><code>diskutil list +</code></pre><p>Solution: HFS+ + SMB3.0, 客户端设置“延迟加载目录”或“按需索引”</p> +<p><code>diskutil list</code></p> +<pre tabindex="0"><code>sudo smartctl -a /dev/disk2 +</code></pre><p><code>brew install smartmontools</code></p> + + + + + diff --git a/public/series/my-first-server-in-room/page/1/index.html b/public/series/my-first-server-in-room/page/1/index.html new file mode 100644 index 0000000..95a92d9 --- /dev/null +++ b/public/series/my-first-server-in-room/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/series/my-first-server-in-room/ + + + + + + diff --git a/public/pt-pt/authors/index.html b/public/series/projects/index.html similarity index 73% rename from public/pt-pt/authors/index.html rename to public/series/projects/index.html index e41455c..b023e76 100644 --- a/public/pt-pt/authors/index.html +++ b/public/series/projects/index.html @@ -1,23 +1,23 @@ - - + - Authors · - + Projects · SWangNice + + + + - - - - + @@ -28,8 +28,8 @@ - + + @@ -69,20 +66,36 @@ - - - + + + + + - + + + + + + + + + + + + + + + @@ -126,7 +139,7 @@
      Ir para o conteúdo principal + class="font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400">↓Skip to main content
      @@ -137,7 +150,7 @@ @@ -146,18 +159,139 @@ - +

      - Blog + Home

      + +
      +
      + + + Notes + + + + + + + + + + + +
      + +
      + + + - + + + +

      + Projects +

      +
      + + + + + +
      +
      + + + RestHere + + + + + + + + + + + +
      + +
      + + + + + + @@ -179,7 +313,7 @@ - + @@ -201,71 +335,8 @@ - - - - - - - - - - - - - -

      - -

      -
      - - - - - -
      -
      - - - - - - - - - - -
      PT-PT
      -
      - -
      - @@ -318,47 +389,6 @@ -
      -
      - - - - - - - - - - -
      PT-PT
      -
      - -
      - @@ -438,10 +468,10 @@
    • - +

      - Blog + Home

    • @@ -451,9 +481,136 @@ + +
    • + + +

      + Notes +

      + + + + + + + + + + +
      +
    • + +
    • + + +

      + Coding +

      +
      +
    • + +
    • + + +

      + PDF Collection +

      +
      +
    • + +
    • + + + + + +
    • - + + +

      + Projects +

      +
      +
    • + + + + + + + +
    • + + +

      + RestHere +

      + + + + + + + + + + +
      +
    • + +
    • + + +

      + My Pet +

      +
      +
    • + +
    • + + +

      + My Travel +

      +
      +
    • + +
    • + + + + + + + +
    • +
      @@ -479,7 +636,7 @@
    • - +
      @@ -503,32 +660,6 @@ - -
    • - - -
      - - - - - - - - -
      - -

      - -

      -
      -
    • - - - - - -
    @@ -548,13 +679,11 @@ - - -
    +
    + +

    Projects

    +
    -

    Authors

    -
    - @@ -582,20 +711,137 @@
    -
    +
    + +
    + +
    + + + + + + -
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    TODO List
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + +
    +
    + +
    + + +