<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stack 테마 on Physical AI 드림팀</title><link>https://ditis3g.github.io/tags/stack-%ED%85%8C%EB%A7%88/</link><description>Recent content in Stack 테마 on Physical AI 드림팀</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Tue, 30 Jun 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ditis3g.github.io/tags/stack-%ED%85%8C%EB%A7%88/index.xml" rel="self" type="application/rss+xml"/><item><title>PaperMod에서 Stack 테마로 갈아타며 배운 것들</title><link>https://ditis3g.github.io/posts/2026-06-30-study-2/</link><pubDate>Tue, 30 Jun 2026 00:00:00 +0900</pubDate><guid>https://ditis3g.github.io/posts/2026-06-30-study-2/</guid><description>&lt;p&gt;블로그 테마를 PaperMod에서 Stack(&lt;code&gt;CaiJimmy/hugo-theme-stack&lt;/code&gt;)으로 교체했다. 색은 무채색(zinc) 톤으로, 폰트는 Pretendard로 커스텀했다. 단순히 &amp;ldquo;옷 갈아입기&amp;quot;로 끝나는 작업이 아니라 글 메타데이터와 자동화 prompt까지 한 사이클로 묶어야 일이 닫힌다는 걸 새삼 느꼈다. 헤맸던 지점 위주로 정리한다.&lt;/p&gt;
&lt;h2 id="테마-붙이고-config에서-처음에-헤매는-것들"&gt;테마 붙이고 config에서 처음에 헤매는 것들
&lt;/h2&gt;&lt;p&gt;Stack은 submodule로 붙인다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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 submodule add https://github.com/CaiJimmy/hugo-theme-stack themes/hugo-theme-stack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GitHub Actions로 빌드한다면 &lt;code&gt;checkout&lt;/code&gt; 단계에 &lt;code&gt;submodules: recursive&lt;/code&gt; 옵션이 있어야 테마가 같이 받아진다. 이게 없으면 로컬에선 멀쩡한데 배포 빌드만 깨진다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hugo.toml&lt;/code&gt;은 길지만, 처음에 발목 잡히는 건 세 가지뿐이다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;mainSections = [&amp;quot;posts&amp;quot;]&lt;/code&gt;&lt;/strong&gt; — Stack 기본값은 단수형 &lt;code&gt;&amp;quot;post&amp;quot;&lt;/code&gt;다. 우리 폴더가 &lt;code&gt;posts/&lt;/code&gt;라면 이걸 명시하지 않으면 홈에 글이 한 개도 안 뜬다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sidebar.avatar&lt;/code&gt;는 문자열 한 줄로.&lt;/strong&gt; &lt;code&gt;{enabled=..., src=...}&lt;/code&gt; 같은 중첩 테이블을 쓰면 빌드 에러가 난다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;메뉴 아이콘은 실재하는 파일명으로.&lt;/strong&gt; &lt;code&gt;themes/.../assets/icons/&lt;/code&gt;에 실제로 있는 이름이어야 한다. &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;category&lt;/code&gt;처럼 없는 이름을 쓰면 빌드가 fail한다. &lt;code&gt;archives&lt;/code&gt;, &lt;code&gt;categories&lt;/code&gt;, &lt;code&gt;tag&lt;/code&gt;, &lt;code&gt;hash&lt;/code&gt;, &lt;code&gt;home&lt;/code&gt; 정도가 안전하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="커스텀의-90는-customscss-한-파일에서-끝난다"&gt;커스텀의 90%는 custom.scss 한 파일에서 끝난다
&lt;/h2&gt;&lt;p&gt;Stack은 자기 &lt;code&gt;style.scss&lt;/code&gt; 마지막에 &lt;code&gt;@import &amp;quot;custom.scss&amp;quot;;&lt;/code&gt;를 박아둔다. 그래서 우리 사이트의 &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;만 만들면 별도 설정 없이 자동으로 끼워져 컴파일된다. 이게 Stack 커스텀의 핵심이다.&lt;/p&gt;
&lt;p&gt;이 파일에서 한 일은 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;색 변수(&lt;code&gt;--body-background&lt;/code&gt;, &lt;code&gt;--accent-color&lt;/code&gt;, &lt;code&gt;--card-background&lt;/code&gt; 등)를 라이트/다크 모두 zinc 톤으로 override. 다크 모드는 &lt;code&gt;:root[data-scheme=&amp;quot;dark&amp;quot;]&lt;/code&gt; 블록에서 따로 잡는다.&lt;/li&gt;
&lt;li&gt;Pretendard를 &lt;code&gt;@import url(...)&lt;/code&gt; CDN으로 불러오고 &lt;code&gt;--base-font-family&lt;/code&gt;를 교체. Stack 기본 폰트인 Lato는 한글 글리프가 없어서 시스템 fallback으로 떨어지면 글자가 둔탁해진다.&lt;/li&gt;
&lt;li&gt;카드 타이틀을 2.2rem → 1.9rem으로 줄이고 &lt;code&gt;letter-spacing: -0.01em&lt;/code&gt;. 한글은 영문보다 자간을 살짝 좁히는 쪽이 균형이 맞는다.&lt;/li&gt;
&lt;li&gt;본문에 &lt;code&gt;word-break: keep-all; overflow-wrap: anywhere;&lt;/code&gt; — 한국어가 어절 단위로 줄바꿈되어 훨씬 깔끔해진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="가장-큰-함정-카테고리-배지의-inline-style"&gt;가장 큰 함정: 카테고리 배지의 inline style
&lt;/h2&gt;&lt;p&gt;제일 오래 잡아먹은 건 카테고리/태그 배지였다. Stack은 카테고리·태그마다 hash로 색을 자동 생성해서 &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 태그에 &lt;strong&gt;inline style&lt;/strong&gt;로 직접 박는다. inline style은 외부 CSS를 이기기 때문에, SCSS로 그냥 덮어쓰면 먹지 않는다.&lt;/p&gt;
&lt;p&gt;해결은 &lt;code&gt;!important&lt;/code&gt;로 강제하는 것이다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="nc"&gt;.article-category&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.article-tags&lt;/span&gt; &lt;span class="nt"&gt;a&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;background-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;card-background-selected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;!important&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;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;card-text-color-secondary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;!important&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이걸 안 하면 사이트 전체는 무채색인데 카테고리 배지만 알록달록하게 튄다.&lt;/p&gt;
&lt;h2 id="글-메타데이터와-자동화-prompt까지-함께-손보기"&gt;글 메타데이터와 자동화 prompt까지 함께 손보기
&lt;/h2&gt;&lt;p&gt;Stack 사이드바의 카테고리 위젯이 살아나려면 각 글의 frontmatter에 &lt;code&gt;categories:&lt;/code&gt;가 있어야 한다. 기존 글들은 PaperMod 시절이라 &lt;code&gt;tags:&lt;/code&gt;만 있어서 위젯이 비어 있었다. 그래서 모든 글에 카테고리를 VLA / 피지컬 AI / 메타 3개 분류로 채워 넣었다.&lt;/p&gt;
&lt;p&gt;여기서 멈추면 다음 날 새로 생기는 글에서 같은 문제가 반복된다. 그래서 매일 밤 자동 초안을 만드는 &lt;code&gt;prompt-instructions.txt&lt;/code&gt;에도 categories 지시를 추가했다. 이제 다음 날부터 새 글은 자동으로 올바른 분류에 들어간다. 테마 교체를 글 메타데이터·자동화 prompt까지 한 사이클로 묶어야 일이 닫힌다는 게 이 작업의 교훈이다.&lt;/p&gt;
&lt;p&gt;작업 흐름에서 챙긴 팁도 적어둔다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;별도 브랜치에서 작업.&lt;/strong&gt; main은 머지 시점까지 건드리지 않는다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로컬에서 &lt;code&gt;hugo server&lt;/code&gt;를 띄워두고&lt;/strong&gt; SCSS를 고치면 hot reload된다. 확인할 때마다 GitHub Pages에 push하지 말 것.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;배포 후 옛 모양으로 보이면 십중팔구 브라우저 캐시다.&lt;/strong&gt; &lt;code&gt;Ctrl+Shift+R&lt;/code&gt;이나 시크릿 창으로 먼저 확인하자. 빌드 자체를 의심하기 전에 &lt;code&gt;curl&lt;/code&gt;로 라이브 CSS에 새 규칙이 들어갔는지 보는 게 더 빠르다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="한-줄-정리"&gt;한 줄 정리
&lt;/h2&gt;&lt;p&gt;Stack 테마 교체의 핵심은 &lt;code&gt;custom.scss&lt;/code&gt; 한 파일과 inline style을 이기는 &lt;code&gt;!important&lt;/code&gt;이며, 테마 변경은 글 메타데이터와 자동화 prompt까지 한 사이클로 묶어야 비로소 끝난다.&lt;/p&gt;</description></item></channel></rss>