<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>My Blog</title><link>https://liu-houliang.github.io/hugo-stack-starter/en/</link><description>Recent content on My Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://liu-houliang.github.io/hugo-stack-starter/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Quick Start: Deploy Your Blog with One Click</title><link>https://liu-houliang.github.io/hugo-stack-starter/en/post/hello-world/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/en/post/hello-world/</guid><description>&lt;h2 id="welcome-to-hugo-theme-stack-starter"&gt;&lt;a href="#welcome-to-hugo-theme-stack-starter" class="header-anchor"&gt;&lt;/a&gt;Welcome to Hugo Theme Stack Starter
&lt;/h2&gt;&lt;p&gt;This is a ready-to-use blog template based on &lt;strong&gt;Hugo Theme Stack v4&lt;/strong&gt;, featuring enhanced styling, bilingual support, and GitHub Actions auto-deployment. &lt;strong&gt;You can get started without installing anything locally.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="option-1-github-template--one-click-deploy-recommended"&gt;&lt;a href="#option-1-github-template--one-click-deploy-recommended" class="header-anchor"&gt;&lt;/a&gt;Option 1: GitHub Template — One Click Deploy (Recommended)
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;The easiest way — everything happens in your browser.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="step-1-create-your-repository-from-this-template"&gt;&lt;a href="#step-1-create-your-repository-from-this-template" class="header-anchor"&gt;&lt;/a&gt;Step 1: Create your repository from this template
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Open this project&amp;rsquo;s GitHub page&lt;/li&gt;
&lt;li&gt;Click the green &lt;strong&gt;&amp;ldquo;Use this template&amp;rdquo;&lt;/strong&gt; button → &lt;strong&gt;&amp;ldquo;Create a new repository&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Enter a repository name (e.g., &lt;code&gt;my-blog&lt;/code&gt;), select &lt;strong&gt;Public&lt;/strong&gt; (required for free GitHub Pages)&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;&amp;ldquo;Create repository&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="step-2-enable-github-pages"&gt;&lt;a href="#step-2-enable-github-pages" class="header-anchor"&gt;&lt;/a&gt;Step 2: Enable GitHub Pages
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;In your new repository, go to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;&amp;ldquo;Source&amp;rdquo;&lt;/strong&gt;, select &lt;strong&gt;&amp;ldquo;GitHub Actions&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="step-3-update-your-configuration"&gt;&lt;a href="#step-3-update-your-configuration" class="header-anchor"&gt;&lt;/a&gt;Step 3: Update your configuration
&lt;/h3&gt;&lt;p&gt;Edit &lt;code&gt;config/_default/config.toml&lt;/code&gt; directly on GitHub:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Replace with your GitHub Pages URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;baseurl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-username.github.io/repo-name/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;My Blog&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-4-push-to-trigger-auto-deployment"&gt;&lt;a href="#step-4-push-to-trigger-auto-deployment" class="header-anchor"&gt;&lt;/a&gt;Step 4: Push to trigger auto-deployment
&lt;/h3&gt;&lt;p&gt;Every commit triggers GitHub Actions to build and deploy automatically. Wait 1–2 minutes, then visit your GitHub Pages URL to see your blog live!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="option-2-local-development"&gt;&lt;a href="#option-2-local-development" class="header-anchor"&gt;&lt;/a&gt;Option 2: Local Development
&lt;/h2&gt;&lt;p&gt;If you prefer to write and preview locally:&lt;/p&gt;
&lt;h3 id="install-hugo-extended-edition"&gt;&lt;a href="#install-hugo-extended-edition" class="header-anchor"&gt;&lt;/a&gt;Install Hugo (Extended edition)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Windows (Scoop)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scoop install hugo-extended
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Linux (apt)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install hugo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verify it&amp;rsquo;s the extended edition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo version
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Output should include &amp;#34;extended&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="clone-and-run"&gt;&lt;a href="#clone-and-run" class="header-anchor"&gt;&lt;/a&gt;Clone and run
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/your-username/my-blog.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Visit &lt;code&gt;http://localhost:1313&lt;/code&gt; to preview your blog.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="configuration-guide"&gt;&lt;a href="#configuration-guide" class="header-anchor"&gt;&lt;/a&gt;Configuration Guide
&lt;/h2&gt;&lt;p&gt;All config files are in &lt;code&gt;config/_default/&lt;/code&gt;:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;config.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Site title, base URL, default language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;languages.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Multilingual settings (zh/en)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;params.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Theme parameters (comments, homepage layout)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;params.en.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;English-specific parameters (avatar, subtitle)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;menu.en.toml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;English navigation menu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="required-changes"&gt;&lt;a href="#required-changes" class="header-anchor"&gt;&lt;/a&gt;Required changes
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;1. Site title and URL&lt;/strong&gt; (&lt;code&gt;config.toml&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;baseurl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-domain.com/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;My Blog&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2. Your avatar and bio&lt;/strong&gt; (&lt;code&gt;params.en.toml&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sidebar&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;subtitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Your personal tagline&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;avatar&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;img/avatar.jpg&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# replace assets/img/avatar.jpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;3. Blog launch date&lt;/strong&gt; (&lt;code&gt;params.toml&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;launchDate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-01-01&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# your blog&amp;#39;s start date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="project-structure"&gt;&lt;a href="#project-structure" class="header-anchor"&gt;&lt;/a&gt;Project Structure
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;my-blog/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .github/workflows/ # GitHub Actions (no changes needed)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── assets/scss/ # Style customization
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── custom.scss # Colors, global styles
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── partials/custom-components/ # Component styles
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── config/_default/ # All configuration files
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── content/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── post/ # Blog posts (write here)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── layouts/ # Custom layouts and Shortcodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── static/ # Static assets (images, etc.)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="whats-next"&gt;&lt;a href="#whats-next" class="header-anchor"&gt;&lt;/a&gt;What&amp;rsquo;s Next
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;📖 &lt;a class="link" href="https://liu-houliang.github.io/hugo-stack-starter/post/theme-customization/" &gt;&lt;strong&gt;Theme Customizations&lt;/strong&gt;&lt;/a&gt; — What this template changes from the original&lt;/li&gt;
&lt;li&gt;💬 &lt;a class="link" href="https://liu-houliang.github.io/hugo-stack-starter/post/waline-setup/" &gt;&lt;strong&gt;Set Up Waline Comments&lt;/strong&gt;&lt;/a&gt; — Add a comment section to your blog&lt;/li&gt;
&lt;li&gt;✏️ &lt;a class="link" href="https://liu-houliang.github.io/hugo-stack-starter/post/start-writing/" &gt;&lt;strong&gt;Start Writing&lt;/strong&gt;&lt;/a&gt; — Learn Markdown and multilingual posts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy blogging! 🎉&lt;/p&gt;</description></item><item><title>Theme Customizations: What I Have Changed</title><link>https://liu-houliang.github.io/hugo-stack-starter/en/post/theme-customization/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/en/post/theme-customization/</guid><description>&lt;p&gt;This template is developed based on &lt;a class="link" href="https://github.com/CaiJimmy/hugo-theme-stack" target="_blank" rel="noopener"
 &gt;Hugo Theme Stack v4&lt;/a&gt;. While maintaining the integrity of the original features, a series of visual and interactive enhancements have been made.&lt;/p&gt;
&lt;p&gt;All modifications are implemented using Hugo&amp;rsquo;s override mechanism (by creating files with the same names in &lt;code&gt;assets/&lt;/code&gt; and &lt;code&gt;layouts/&lt;/code&gt;), &lt;strong&gt;without modifying the original theme&amp;rsquo;s source code&lt;/strong&gt;, making it easy to upgrade the theme version at any time.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-global-color-system"&gt;&lt;a href="#1-global-color-system" class="header-anchor"&gt;&lt;/a&gt;1. Global Color System
&lt;/h2&gt;&lt;p&gt;The entire set of color variables has been redefined, adopting a deep blue + warm off-white color scheme:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Light Mode&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background color: Warm off-white &lt;code&gt;#f8f7f2&lt;/code&gt; (easier on the eyes than pure white)&lt;/li&gt;
&lt;li&gt;Accent color: Deep sea blue &lt;code&gt;#1B365D&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Card background: &lt;code&gt;#fdfdfb&lt;/code&gt; (slightly warm white)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Dark Mode&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background color: &lt;code&gt;#101214&lt;/code&gt; (dark grayish-black)&lt;/li&gt;
&lt;li&gt;Card background: &lt;code&gt;#1c2128&lt;/code&gt; (GitHub dark style)&lt;/li&gt;
&lt;li&gt;In dark mode, images are automatically dimmed, restoring brightness on hover&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Modification location: &lt;code&gt;:root&lt;/code&gt; variables in &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-mac-style-code-blocks"&gt;&lt;a href="#2-mac-style-code-blocks" class="header-anchor"&gt;&lt;/a&gt;2. Mac-Style Code Blocks
&lt;/h2&gt;&lt;p&gt;The original theme&amp;rsquo;s code blocks are quite simple, but this template comprehensively beautifies them:&lt;/p&gt;
&lt;h3 id="top-title-bar"&gt;&lt;a href="#top-title-bar" class="header-anchor"&gt;&lt;/a&gt;Top Title Bar
&lt;/h3&gt;&lt;p&gt;A macOS-style three-color dot decoration (red, yellow, green) has been added to every code block, simulating a terminal window appearance.&lt;/p&gt;
&lt;h3 id="redesigned-copy-button"&gt;&lt;a href="#redesigned-copy-button" class="header-anchor"&gt;&lt;/a&gt;Redesigned Copy Button
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Changed from an inconspicuous icon button to a text button floating on the right side of the title bar&lt;/li&gt;
&lt;li&gt;Light mode: Frosted glass style (&lt;code&gt;backdrop-filter: blur&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Dark mode: Dark translucent background&lt;/li&gt;
&lt;li&gt;Clicking the button changes the text to &amp;ldquo;✓ Copied!&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="auto-collapse-long-code-blocks"&gt;&lt;a href="#auto-collapse-long-code-blocks" class="header-anchor"&gt;&lt;/a&gt;Auto-Collapse Long Code Blocks
&lt;/h3&gt;&lt;p&gt;Code blocks taller than 600px automatically collapse, with an &amp;ldquo;Expand Code&amp;rdquo; button at the bottom:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When collapsed, a gradient overlay appears at the bottom&lt;/li&gt;
&lt;li&gt;After expanding, the button text changes to &amp;ldquo;Collapse Code&amp;rdquo;&lt;/li&gt;
&lt;li&gt;When collapsing, it automatically scrolls back to the top of the code block, preventing page layout confusion&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="beautified-scrollbars"&gt;&lt;a href="#beautified-scrollbars" class="header-anchor"&gt;&lt;/a&gt;Beautified Scrollbars
&lt;/h3&gt;&lt;p&gt;The horizontal scrollbar of code blocks is transparent by default and only appears on hover, keeping the interface clean.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-homepage-two-column-grid-layout"&gt;&lt;a href="#3-homepage-two-column-grid-layout" class="header-anchor"&gt;&lt;/a&gt;3. Homepage Two-Column Grid Layout
&lt;/h2&gt;&lt;p&gt;On desktop screens (width ≥ 1024px), the homepage article list changes to a 2-column grid display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each article is presented as a card containing a cover image, title, summary, and meta information&lt;/li&gt;
&lt;li&gt;Cards have a slight floating animation on hover&lt;/li&gt;
&lt;li&gt;Long article titles and summaries are automatically truncated (2 lines)&lt;/li&gt;
&lt;li&gt;Automatically reverts to a single-column list on mobile devices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To enable: Set it in &lt;code&gt;params.toml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;homepage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;grid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-redesigned-mobile-navigation"&gt;&lt;a href="#4-redesigned-mobile-navigation" class="header-anchor"&gt;&lt;/a&gt;4. Redesigned Mobile Navigation
&lt;/h2&gt;&lt;p&gt;The original theme&amp;rsquo;s mobile navigation is relatively basic. This template completely rewrites the mobile experience:&lt;/p&gt;
&lt;h3 id="sticky-top-navigation-bar"&gt;&lt;a href="#sticky-top-navigation-bar" class="header-anchor"&gt;&lt;/a&gt;Sticky Top Navigation Bar
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Fixed to the top (sticky), remaining visible as you scroll down the page&lt;/li&gt;
&lt;li&gt;Left side: Avatar + Site name (click to return home)&lt;/li&gt;
&lt;li&gt;Right side: Dark mode toggle, language switch, search, and hamburger menu&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hamburger-menu"&gt;&lt;a href="#hamburger-menu" class="header-anchor"&gt;&lt;/a&gt;Hamburger Menu
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Clicking expands the side menu with a fade-in animation&lt;/li&gt;
&lt;li&gt;The top bar title fades out when the menu expands to prevent overlap&lt;/li&gt;
&lt;li&gt;The current page&amp;rsquo;s menu item is highlighted&lt;/li&gt;
&lt;li&gt;Automatically closes when the screen width recovers (e.g., rotating device)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="search-box"&gt;&lt;a href="#search-box" class="header-anchor"&gt;&lt;/a&gt;Search Box
&lt;/h3&gt;&lt;p&gt;The search box in the desktop sidebar has been redesigned to match the card style.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-blog-stats-page"&gt;&lt;a href="#5-blog-stats-page" class="header-anchor"&gt;&lt;/a&gt;5. Blog Stats Page
&lt;/h2&gt;&lt;p&gt;A feature-rich &lt;code&gt;/stats/&lt;/code&gt; statistics page has been added, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Summary Cards&lt;/strong&gt;: Total articles, total words, running days (animated scrolling numbers)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Category Distribution&lt;/strong&gt;: Category list with progress bars, clickable to enter category pages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Popular Tags&lt;/strong&gt;: Tag cloud display (top 30 tags)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writing Habits&lt;/strong&gt;: Posting habit analysis by day of the week and time of day (based on Git commit times)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yearly Heatmap&lt;/strong&gt;: GitHub-style contribution heatmap (publishing record for the past year)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Configuration page entry: Set &lt;code&gt;layout: stats&lt;/code&gt; in &lt;code&gt;content/stats/index.en.md&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="6-footer-runtime"&gt;&lt;a href="#6-footer-runtime" class="header-anchor"&gt;&lt;/a&gt;6. Footer Runtime
&lt;/h2&gt;&lt;p&gt;The footer now displays the blog&amp;rsquo;s runtime, calculating the days, hours, and minutes since the launch date.&lt;/p&gt;
&lt;p&gt;Clicking it navigates to the Stats page.&lt;/p&gt;
&lt;p&gt;Configure launch date:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;launchDate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-09-09&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-custom-shortcodes"&gt;&lt;a href="#7-custom-shortcodes" class="header-anchor"&gt;&lt;/a&gt;7. Custom Shortcodes
&lt;/h2&gt;&lt;h3 id="timeline"&gt;&lt;a href="#timeline" class="header-anchor"&gt;&lt;/a&gt;Timeline
&lt;/h3&gt;&lt;p&gt;Suitable for displaying growth history, tech stack evolution, etc.:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-01&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Started learning Hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-06&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Blog officially launched
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="title-divider"&gt;&lt;a href="#title-divider" class="header-anchor"&gt;&lt;/a&gt;Title Divider
&lt;/h3&gt;&lt;p&gt;Suitable for separating content sections like diaries or fitness logs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;Morning Run&amp;#34; &amp;#34;green&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Supported colors: &lt;code&gt;red&lt;/code&gt;, &lt;code&gt;orange&lt;/code&gt;, &lt;code&gt;yellow&lt;/code&gt;, &lt;code&gt;green&lt;/code&gt;, &lt;code&gt;teal&lt;/code&gt;, &lt;code&gt;blue&lt;/code&gt;, &lt;code&gt;indigo&lt;/code&gt;, &lt;code&gt;purple&lt;/code&gt;, &lt;code&gt;pink&lt;/code&gt;, &lt;code&gt;gray&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-to-customize-colors"&gt;&lt;a href="#how-to-customize-colors" class="header-anchor"&gt;&lt;/a&gt;How to Customize Colors
&lt;/h2&gt;&lt;p&gt;Edit &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;, modifying the variables in &lt;code&gt;:root&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1B365D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Accent color (buttons, links, etc.) */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f8f7f2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Page background */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--card-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fdfdfb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Card background */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After saving, Hugo will automatically recompile and refresh the browser in real-time.&lt;/p&gt;</description></item><item><title>Set Up Waline Comments</title><link>https://liu-houliang.github.io/hugo-stack-starter/en/post/waline-setup/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/en/post/waline-setup/</guid><description>&lt;p&gt;&lt;a class="link" href="https://waline.js.org/en/" target="_blank" rel="noopener"
 &gt;Waline&lt;/a&gt; is a safe and concise comment system that supports Markdown, offers free deployment, and allows users to comment without registering.&lt;/p&gt;
&lt;p&gt;This template has built-in integration for Waline. You just need to deploy the server-side application and fill in one line of configuration to enable it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="step-1-deploy-waline-server"&gt;&lt;a href="#step-1-deploy-waline-server" class="header-anchor"&gt;&lt;/a&gt;Step 1: Deploy Waline Server
&lt;/h2&gt;&lt;p&gt;Please refer to the &lt;strong&gt;Waline Official Quick Start Guide&lt;/strong&gt; to complete the server deployment:&lt;/p&gt;
&lt;p&gt;👉 &lt;a class="link" href="https://waline.js.org/en/guide/get-started/" target="_blank" rel="noopener"
 &gt;https://waline.js.org/en/guide/get-started/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The official documentation provides a &lt;strong&gt;free one-click deployment&lt;/strong&gt; solution on Vercel. The entire process takes about 5 minutes.&lt;/p&gt;
&lt;p&gt;Once deployed, you will receive a Waline service address, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://your-waline-project.vercel.app/&lt;/code&gt; (Default Vercel domain)&lt;/li&gt;
&lt;li&gt;Or your bound custom domain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Save this address; you will need it in the next step.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="step-2-configure-in-this-template"&gt;&lt;a href="#step-2-configure-in-this-template" class="header-anchor"&gt;&lt;/a&gt;Step 2: Configure in This Template
&lt;/h2&gt;&lt;p&gt;Edit &lt;code&gt;config/_default/params.toml&lt;/code&gt; and fill in your service address:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;waline&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waline&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;serverURL&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-waline-project.vercel.app/&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# ← Fill in your address here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;pageview&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c"&gt;# Also enable article pageview statistics&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;# Optional: Custom emoji package (default is Weibo emoji)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;emoji&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://unpkg.com/@waline/emojis@1.0.1/weibo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;# Required fields for comments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;requiredMeta&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;admin&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Admin&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# Administrator badge&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Save and restart &lt;code&gt;hugo server&lt;/code&gt;, and the comment section will appear at the bottom of your article pages.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="features-overview"&gt;&lt;a href="#features-overview" class="header-anchor"&gt;&lt;/a&gt;Features Overview
&lt;/h2&gt;&lt;h3 id="pageview-statistics"&gt;&lt;a href="#pageview-statistics" class="header-anchor"&gt;&lt;/a&gt;Pageview Statistics
&lt;/h3&gt;&lt;p&gt;After setting &lt;code&gt;pageview = true&lt;/code&gt;, pageviews will automatically be displayed at the top of the article (Requires Waline server support).&lt;/p&gt;
&lt;h3 id="comment-management-dashboard"&gt;&lt;a href="#comment-management-dashboard" class="header-anchor"&gt;&lt;/a&gt;Comment Management Dashboard
&lt;/h3&gt;&lt;p&gt;Visit &lt;code&gt;https://your-waline-project.vercel.app/ui/&lt;/code&gt; to access the management interface. The first registered account automatically becomes the administrator, who can review and delete comments.&lt;/p&gt;
&lt;h3 id="email-notifications"&gt;&lt;a href="#email-notifications" class="header-anchor"&gt;&lt;/a&gt;Email Notifications
&lt;/h3&gt;&lt;p&gt;You can be notified via email when someone replies. This requires configuring SMTP information in Vercel environment variables. See the &lt;a class="link" href="https://waline.js.org/en/guide/features/notification.html" target="_blank" rel="noopener"
 &gt;Official Documentation - Notification&lt;/a&gt; for details.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="faq"&gt;&lt;a href="#faq" class="header-anchor"&gt;&lt;/a&gt;FAQ
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Comment section not showing up?&lt;/strong&gt;&lt;br&gt;
Check if there is a trailing slash &lt;code&gt;/&lt;/code&gt; at the end of &lt;code&gt;serverURL&lt;/code&gt;, and ensure the Vercel service is running normally (you should see the Waline welcome page when visiting the serverURL directly).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cookie banner blocking the comment section?&lt;/strong&gt;&lt;br&gt;
If you have enabled the Cookie consent feature, users must accept &amp;ldquo;Functional Cookies&amp;rdquo; before the comment section will appear. You can disable the Cookie prompt in &lt;code&gt;params.toml&lt;/code&gt; or instruct users to accept it.&lt;/p&gt;</description></item><item><title>Start Writing: Markdown Basics and Multilingual Posts</title><link>https://liu-houliang.github.io/hugo-stack-starter/en/post/start-writing/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/en/post/start-writing/</guid><description>&lt;h2 id="create-your-first-post"&gt;&lt;a href="#create-your-first-post" class="header-anchor"&gt;&lt;/a&gt;Create Your First Post
&lt;/h2&gt;&lt;h3 id="option-1-using-commands-recommended"&gt;&lt;a href="#option-1-using-commands-recommended" class="header-anchor"&gt;&lt;/a&gt;Option 1: Using Commands (Recommended)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create an English post&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo new content post/my-first-post/index.en.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create the corresponding Chinese version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo new content post/my-first-post/index.zh.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hugo will automatically populate initial content based on the &lt;code&gt;archetypes/default.md&lt;/code&gt; template.&lt;/p&gt;
&lt;h3 id="option-2-manual-creation"&gt;&lt;a href="#option-2-manual-creation" class="header-anchor"&gt;&lt;/a&gt;Option 2: Manual Creation
&lt;/h3&gt;&lt;p&gt;Create a new folder under &lt;code&gt;content/post/&lt;/code&gt;, and then create &lt;code&gt;index.en.md&lt;/code&gt; inside it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── post/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── my-first-post/ ← Post directory (Name becomes the URL)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── index.en.md ← English body
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── index.zh.md ← Chinese body (Optional)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── cover.jpg ← Cover image (Optional)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="front-matter-explanation"&gt;&lt;a href="#front-matter-explanation" class="header-anchor"&gt;&lt;/a&gt;Front Matter Explanation
&lt;/h2&gt;&lt;p&gt;The section between the &lt;code&gt;---&lt;/code&gt; at the top of each article is called Front Matter, used to define article metadata:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Post Title&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Post summary, displayed on the list page and in SEO descriptions&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Publish date&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;lastmod&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Last modified date (optional)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# true = draft, will not be published&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Technology &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Category (recommended to pick only one)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Hugo &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Tags (can have multiple)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Markdown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cover.jpg &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Cover image (relative to the post directory)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: The &lt;code&gt;date&lt;/code&gt; determines the sort order of posts in lists. Posts with future dates require &lt;code&gt;hugo server -F&lt;/code&gt; to be visible during local preview.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="basic-markdown-syntax"&gt;&lt;a href="#basic-markdown-syntax" class="header-anchor"&gt;&lt;/a&gt;Basic Markdown Syntax
&lt;/h2&gt;&lt;h3 id="headings"&gt;&lt;a href="#headings" class="header-anchor"&gt;&lt;/a&gt;Headings
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Heading 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### Heading 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;#### Heading 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;Avoid using Heading 1 (&lt;code&gt;# H1&lt;/code&gt;) in the article body because the &lt;code&gt;title&lt;/code&gt; field is already an H1.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="text-formatting"&gt;&lt;a href="#text-formatting" class="header-anchor"&gt;&lt;/a&gt;Text Formatting
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**Bold** Bold text
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ge"&gt;*Italic*&lt;/span&gt; Italic text
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;~~Strikethrough~~&lt;/span&gt; Strikethrough
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;`Inline code`&lt;/span&gt; Code
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Result: &lt;strong&gt;Bold&lt;/strong&gt;, &lt;em&gt;Italic&lt;/em&gt;, &lt;del&gt;Strikethrough&lt;/del&gt;, &lt;code&gt;Inline code&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="links-and-images"&gt;&lt;a href="#links-and-images" class="header-anchor"&gt;&lt;/a&gt;Links and Images
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;Link text&lt;/span&gt;](&lt;span class="na"&gt;https://example.com&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;Internal link&lt;/span&gt;](&lt;span class="na"&gt;/post/hello-world/&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;Image description&lt;/span&gt;](&lt;span class="na"&gt;image.jpg&lt;/span&gt;) # Relative path (same directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;Image description&lt;/span&gt;](&lt;span class="na"&gt;/img/photo.jpg&lt;/span&gt;) # Absolute path (in static directory)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="lists"&gt;&lt;a href="#lists" class="header-anchor"&gt;&lt;/a&gt;Lists
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Unordered list item
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Second item
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;-&lt;/span&gt; Nested item
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Ordered list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Second item
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Third item
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="code-blocks"&gt;&lt;a href="#code-blocks" class="header-anchor"&gt;&lt;/a&gt;Code Blocks
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```python
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hello, World!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Supports syntax highlighting for: &lt;code&gt;python&lt;/code&gt;, &lt;code&gt;go&lt;/code&gt;, &lt;code&gt;javascript&lt;/code&gt;, &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;toml&lt;/code&gt;, &lt;code&gt;yaml&lt;/code&gt;, &lt;code&gt;markdown&lt;/code&gt;, etc.&lt;/p&gt;
&lt;h3 id="blockquotes"&gt;&lt;a href="#blockquotes" class="header-anchor"&gt;&lt;/a&gt;Blockquotes
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;This is a blockquote.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;It can span multiple lines.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Result:&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;This is a blockquote.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="tables"&gt;&lt;a href="#tables" class="header-anchor"&gt;&lt;/a&gt;Tables
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| Column 1 | Column 2 | Column 3 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|----------|----------|----------|
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| Content 1| Content 2| Content 3|
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| Content 4| Content 5| Content 6|
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="horizontal-rule"&gt;&lt;a href="#horizontal-rule" class="header-anchor"&gt;&lt;/a&gt;Horizontal Rule
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="multilingual-writing"&gt;&lt;a href="#multilingual-writing" class="header-anchor"&gt;&lt;/a&gt;Multilingual Writing
&lt;/h2&gt;&lt;p&gt;This template has built-in support for Chinese and English.&lt;/p&gt;
&lt;h3 id="file-naming-convention"&gt;&lt;a href="#file-naming-convention" class="header-anchor"&gt;&lt;/a&gt;File Naming Convention
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Filename&lt;/th&gt;
 &lt;th&gt;Language&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;index.en.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;English&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Chinese&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Place both files in the same directory, and Hugo will automatically link them as different language versions of the same post.&lt;/p&gt;
&lt;h3 id="writing-only-in-english"&gt;&lt;a href="#writing-only-in-english" class="header-anchor"&gt;&lt;/a&gt;Writing Only in English
&lt;/h3&gt;&lt;p&gt;If you don&amp;rsquo;t want to write a Chinese version, just create &lt;code&gt;index.en.md&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="adding-a-chinese-version"&gt;&lt;a href="#adding-a-chinese-version" class="header-anchor"&gt;&lt;/a&gt;Adding a Chinese Version
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;index.zh.md&lt;/code&gt; in the same directory.&lt;/li&gt;
&lt;li&gt;Translate the article content (also translate &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; in the Front Matter).&lt;/li&gt;
&lt;li&gt;Images and other resources are shared between both language versions; no need to duplicate them.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;index.en.md&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;My First Post&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;This is my first blog post&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-12&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Content...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;index.zh.md&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;我的第一篇文章&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;这是我的第一篇博客文章&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-04-12&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;内容...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="inserting-images"&gt;&lt;a href="#inserting-images" class="header-anchor"&gt;&lt;/a&gt;Inserting Images
&lt;/h2&gt;&lt;h3 id="using-images-from-the-post-directory-recommended"&gt;&lt;a href="#using-images-from-the-post-directory-recommended" class="header-anchor"&gt;&lt;/a&gt;Using Images from the Post Directory (Recommended)
&lt;/h3&gt;&lt;p&gt;Place the image in the post directory, and reference it using a relative path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content/post/my-post/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── index.en.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── cover.jpg ← Cover image
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── screenshot.png ← Image inside the post
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In Markdown:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;Screenshot description&lt;/span&gt;](&lt;span class="na"&gt;screenshot.png&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Specify the cover image in the Front Matter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cover.jpg&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="using-images-from-the-static-directory"&gt;&lt;a href="#using-images-from-the-static-directory" class="header-anchor"&gt;&lt;/a&gt;Using Images from the static Directory
&lt;/h3&gt;&lt;p&gt;Place the image in &lt;code&gt;static/img/&lt;/code&gt;, and reference it using an absolute path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;Image&lt;/span&gt;](&lt;span class="na"&gt;img/photo.jpg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="using-template-shortcodes"&gt;&lt;a href="#using-template-shortcodes" class="header-anchor"&gt;&lt;/a&gt;Using Template Shortcodes
&lt;/h2&gt;&lt;h3 id="title-divider"&gt;&lt;a href="#title-divider" class="header-anchor"&gt;&lt;/a&gt;Title Divider
&lt;/h3&gt;&lt;p&gt;Suitable for separating paragraphs in diary-style posts:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;Morning Run&amp;#34; &amp;#34;green&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ran 5 km today, feeling great.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;Afternoon Reading&amp;#34; &amp;#34;blue&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Read two chapters of &amp;#34;Deep Work&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="timeline"&gt;&lt;a href="#timeline" class="header-anchor"&gt;&lt;/a&gt;Timeline
&lt;/h3&gt;&lt;p&gt;Suitable for showing experiences and growth trajectories:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-01&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Started learning programming
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-06&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Completed first project
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="writing-tips"&gt;&lt;a href="#writing-tips" class="header-anchor"&gt;&lt;/a&gt;Writing Tips
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The post directory name&lt;/strong&gt; becomes the URL. It is recommended to use lowercase English letters and hyphens, like &lt;code&gt;my-first-post&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cover images&lt;/strong&gt; are recommended to be 1200×630px, which is the optimal size for social sharing.&lt;/li&gt;
&lt;li&gt;Keep the &lt;strong&gt;description&lt;/strong&gt; under 160 characters for SEO friendliness.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;hugo server -D&lt;/code&gt; during local preview to view draft posts.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Happy writing! ✍️&lt;/p&gt;</description></item><item><title>Shortcodes Guide</title><link>https://liu-houliang.github.io/hugo-stack-starter/en/post/shortcodes-guide/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/en/post/shortcodes-guide/</guid><description>&lt;p&gt;Hugo Shortcodes are a way to embed special components within Markdown. This article demonstrates the &lt;strong&gt;actual rendering effects&lt;/strong&gt; of all custom Shortcodes included in this template.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="title-divider-title"&gt;&lt;a href="#title-divider-title" class="header-anchor"&gt;&lt;/a&gt;Title Divider (title)
&lt;/h2&gt;&lt;p&gt;Ideal for content that requires section headings, such as diaries, workout logs, or study notes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; title &amp;#34;Heading Text&amp;#34; &amp;#34;color&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Actual Effects — Different Colors:&lt;/strong&gt;&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #43a047;"&gt;Green Heading&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;This is the content under the green divider, suitable for sports or health-related logs.&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #1e88e5;"&gt;Blue Heading&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;This is the content under the blue divider, suitable for tech or study-related logs.&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #fb8c00;"&gt;Orange Heading&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;This is the content under the orange divider, suitable for creative or design-related logs.&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #8e24aa;"&gt;Purple Heading&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;This is the content under the purple divider, suitable for diaries or essays.&lt;/p&gt;




&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #E91E63;"&gt;Custom Color #E91E63&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;You can also use hex color codes directly.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;All Built-in Colors:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Color Name&lt;/th&gt;
 &lt;th&gt;Preview&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;red&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #FF6666;"&gt;Red&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;orange&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #fb8c00;"&gt;Orange&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;yellow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #fdd835;"&gt;Yellow&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;green&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #43a047;"&gt;Green&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;teal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #00897b;"&gt;Teal&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;blue&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #1e88e5;"&gt;Blue&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;indigo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #3949ab;"&gt;Indigo&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;purple&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #8e24aa;"&gt;Purple&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pink&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #d81b60;"&gt;Pink&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gray&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;



&lt;div class="short-divider"&gt;
 &lt;span class="divider-title" style="color: #6b7280;"&gt;Gray&lt;/span&gt;
&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="timeline"&gt;&lt;a href="#timeline" class="header-anchor"&gt;&lt;/a&gt;Timeline
&lt;/h2&gt;&lt;p&gt;Suitable for showcasing personal experiences, project milestones, tech growth trajectories, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; timeline-item date=&amp;#34;2024-01&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Content...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline-item &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /timeline &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Actual Effect:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class="timeline-container"&gt;
 

&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2024-01&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
Started learning Hugo and understanding the benefits of static blogs.
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;


&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2024-06&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
Blog officially launched. Published the first technical article and gained the first batch of readers.
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;


&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2025-01&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
Integrated the Waline comment system to interact with readers. The comment section is becoming active.
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;


&lt;li class="timeline-item"&gt;
 &lt;div class="timeline-marker"&gt;&lt;/div&gt;
 &lt;div class="timeline-content"&gt;
 &lt;p class="timeline-date"&gt;2025-09&lt;/p&gt;
 &lt;div class="timeline-text"&gt;
Beautified the blog theme, adding features like Mac-style code blocks and a comprehensive Stats page.
&lt;/div&gt;
 &lt;/div&gt;
&lt;/li&gt;



&lt;/ul&gt;

&lt;p&gt;Timeline content supports full Markdown, such as &lt;strong&gt;bold&lt;/strong&gt;, &lt;code&gt;inline code&lt;/code&gt;, &lt;a class="link" href="#" &gt;links&lt;/a&gt;, etc.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="code-block-features-theme-enhancement"&gt;&lt;a href="#code-block-features-theme-enhancement" class="header-anchor"&gt;&lt;/a&gt;Code Block Features (Theme Enhancement)
&lt;/h2&gt;&lt;p&gt;Code blocks are not Shortcodes themselves, but this template has enhanced them:&lt;/p&gt;
&lt;h3 id="copy-button"&gt;&lt;a href="#copy-button" class="header-anchor"&gt;&lt;/a&gt;Copy Button
&lt;/h3&gt;&lt;p&gt;Every code block has a copy button in the top right corner (inside the macOS title bar):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Try clicking the copy button in the top right corner
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sb"&gt;`Hello, &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hugo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="auto-collapse-long-code"&gt;&lt;a href="#auto-collapse-long-code" class="header-anchor"&gt;&lt;/a&gt;Auto-Collapse Long Code
&lt;/h3&gt;&lt;p&gt;Code blocks taller than 600px automatically collapse, and an &amp;ldquo;Expand Code&amp;rdquo; button appears at the bottom. Here is a long snippet to test the collapse feature:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# This code is long enough to trigger the auto-collapse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BlogStats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;posts_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;posts_dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;scan_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Scan all article directories&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dirs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts_dir&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.md&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;filepath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Parse front matter of a single article&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Extract front matter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;front_matter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_words&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_front_matter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;front_matter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_front_matter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;front_matter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Parse YAML front matter&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;front_matter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;categories:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt; &lt;span class="c1"&gt;# Simplified handling&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tags:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt; &lt;span class="c1"&gt;# Simplified handling&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; - &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lstrip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;- &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Generate statistical report&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;total_posts&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;total_words&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_words&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;categories&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;tags&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)[:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BlogStats&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./content/post&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scan_posts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_report&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ensure_ascii&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="hugo-built-in-shortcodes"&gt;&lt;a href="#hugo-built-in-shortcodes" class="header-anchor"&gt;&lt;/a&gt;Hugo Built-in Shortcodes
&lt;/h2&gt;&lt;p&gt;Hugo comes with some very useful Shortcodes:&lt;/p&gt;
&lt;h3 id="figure-enhanced-images"&gt;&lt;a href="#figure-enhanced-images" class="header-anchor"&gt;&lt;/a&gt;Figure (Enhanced Images)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; figure src=&amp;#34;image.jpg&amp;#34; title=&amp;#34;Image Title&amp;#34; caption=&amp;#34;Image Caption&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This adds titles and captions, which the standard &lt;code&gt;![](image.jpg)&lt;/code&gt; doesn&amp;rsquo;t support easily.&lt;/p&gt;
&lt;h3 id="gist"&gt;&lt;a href="#gist" class="header-anchor"&gt;&lt;/a&gt;Gist
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; gist username gist-id &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Embeds a GitHub Gist code snippet directly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-to-create-your-own-shortcode"&gt;&lt;a href="#how-to-create-your-own-shortcode" class="header-anchor"&gt;&lt;/a&gt;How to Create Your Own Shortcode
&lt;/h2&gt;&lt;p&gt;Simply create an HTML file under &lt;code&gt;layouts/shortcodes/&lt;/code&gt;. For example, create &lt;code&gt;badge.html&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- layouts/shortcodes/badge.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; display: inline-block;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; padding: 2px 10px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; border-radius: 4px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; font-size: 12px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; font-weight: 600;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; background: {{ .Get 1 | default `var(--accent-color)` }};
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; color: {{ .Get 2 | default `#fff` }};
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ .Get 0 }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Usage: &lt;code&gt;{{&amp;lt; badge &amp;quot;New&amp;quot; &amp;quot;#059669&amp;quot; &amp;gt;}}&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Style Customization Guide</title><link>https://liu-houliang.github.io/hugo-stack-starter/en/post/custom-style/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://liu-houliang.github.io/hugo-stack-starter/en/post/custom-style/</guid><description>&lt;p&gt;The styling system of this template is based on SCSS. All custom styles are located in the &lt;code&gt;assets/scss/&lt;/code&gt; directory, so you &lt;strong&gt;do not need to modify the original theme files&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="modify-theme-colors"&gt;&lt;a href="#modify-theme-colors" class="header-anchor"&gt;&lt;/a&gt;Modify Theme Colors
&lt;/h2&gt;&lt;p&gt;Open &lt;code&gt;assets/scss/custom.scss&lt;/code&gt; and modify the CSS variables inside &lt;code&gt;:root&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/* Light Mode */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1B365D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Accent color: buttons, links, highlights */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#202A44&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Darker accent: hover states */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--accent-color-text&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#FFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Text color on top of the accent color */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f8f7f2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Page background */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--card-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fdfdfb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Card background */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-text-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#2D3748&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Body text color */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-scheme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dark&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/* Dark Mode Overrides */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#101214&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--card-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1c2128&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After saving, Hugo automatically recompiles and the browser refreshes instantly.&lt;/p&gt;
&lt;h3 id="popular-color-palette-references"&gt;&lt;a href="#popular-color-palette-references" class="header-anchor"&gt;&lt;/a&gt;Popular Color Palette References
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Purple Scheme&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#7C3AED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#6D28D9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Green Scheme&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#059669&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#047857&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Orange Scheme&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#EA580C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;--accent-color-darker&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#C2410C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="modify-code-block-styles"&gt;&lt;a href="#modify-code-block-styles" class="header-anchor"&gt;&lt;/a&gt;Modify Code Block Styles
&lt;/h2&gt;&lt;p&gt;Code block related styles are in &lt;code&gt;assets/scss/partials/custom-components/_code.scss&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="disable-mac-style-title-bar"&gt;&lt;a href="#disable-mac-style-title-bar" class="header-anchor"&gt;&lt;/a&gt;Disable Mac-Style Title Bar
&lt;/h3&gt;&lt;p&gt;If you don&amp;rsquo;t like the macOS three-color dots, comment out the following code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Comment out this before pseudo-element to disable the title bar */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;.article-content .highlight:before {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="change-collapse-threshold"&gt;&lt;a href="#change-collapse-threshold" class="header-anchor"&gt;&lt;/a&gt;Change Collapse Threshold
&lt;/h3&gt;&lt;p&gt;In &lt;code&gt;_code.scss&lt;/code&gt; and &lt;code&gt;layouts/_partials/footer/custom.html&lt;/code&gt;, change &lt;code&gt;600&lt;/code&gt; to your desired pixel value:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* _code.scss */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;.collapsed&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;max-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Change to your desired height */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* JS in custom.html */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MAX_HEIGHT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Keep consistent with CSS */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="add-custom-fonts"&gt;&lt;a href="#add-custom-fonts" class="header-anchor"&gt;&lt;/a&gt;Add Custom Fonts
&lt;/h2&gt;&lt;p&gt;Add Google Fonts in &lt;code&gt;assets/scss/custom.scss&lt;/code&gt; and set the font family:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Import font */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url(&amp;#39;https://fonts.googleapis.com/css2?family=Outfit:wght@400;700&amp;amp;display=swap&amp;#39;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Apply to body */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;font-family&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Outfit&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="ni"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Apply to article content */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;.article-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;font-family&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Outfit&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="ni"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="component-style-files-overview"&gt;&lt;a href="#component-style-files-overview" class="header-anchor"&gt;&lt;/a&gt;Component Style Files Overview
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;custom.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Global variables, TOC scrollbar&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_code.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;All code block styles&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_footer.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Footer runtime button&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_homepage-grid.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Homepage two-column grid&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_mobile-menu.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Mobile top navigation bar&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_timeline.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Timeline Shortcode styles&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;_title.scss&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Title divider Shortcode styles&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each file has a single responsibility and can be modified independently without affecting others.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="disable-homepage-grid-layout"&gt;&lt;a href="#disable-homepage-grid-layout" class="header-anchor"&gt;&lt;/a&gt;Disable Homepage Grid Layout
&lt;/h2&gt;&lt;p&gt;If you prefer the traditional single-column list, edit &lt;code&gt;params.toml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;homepage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;grid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="overriding-theme-layouts"&gt;&lt;a href="#overriding-theme-layouts" class="header-anchor"&gt;&lt;/a&gt;Overriding Theme Layouts
&lt;/h2&gt;&lt;p&gt;If you need to modify other layout files of the theme, simply create a file with the same name in the &lt;code&gt;layouts/&lt;/code&gt; directory to override it:&lt;/p&gt;
&lt;p&gt;For example, to modify the article page layout, view the original file at &lt;code&gt;hugo-theme-stack-v4/layouts/single.html&lt;/code&gt;, then copy it to &lt;code&gt;layouts/single.html&lt;/code&gt; in your project root and modify it.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Hugo&amp;rsquo;s override mechanism prioritizes files in the project&amp;rsquo;s root directory over the theme&amp;rsquo;s files.&lt;/p&gt;

 &lt;/blockquote&gt;</description></item></channel></rss>