@import "tailwindcss";
@custom-variant dark (&:where(.dark, .dark *));
@theme {
--font-serif: 'Source Serif 4', 'Noto Serif SC', 'Source Han Serif SC', 'Songti SC', Georgia, serif;
/* Catppuccin Latte(亮色)。语义 token → 调色板角色:
theme=base entry=mantle primary=text secondary=subtext1
tertiary=overlay0 content=subtext0 code-block=crust code-bg=surface0
border=surface1 accent=green accent-2=teal(主/次强调色) */
--color-paper-theme: #eff1f5;
--color-paper-entry: #e6e9ef;
--color-paper-primary: #4c4f69;
--color-paper-secondary: #5c5f77;
--color-paper-tertiary: #9ca0b0;
--color-paper-content: #6c6f85;
--color-paper-code-block: #dce0e8;
--color-paper-code-bg: #ccd0da;
--color-paper-border: #bcc0cc;
--color-paper-accent: #40a02b;
--color-paper-accent-soft: #ccd0da;
--color-paper-accent-2: #179299;
--color-paper-accent-2-soft: #ccd0da;
--radius-paper: 8px;
--gap-paper: 24px;
--content-gap-paper: 20px;
--nav-width-paper: 1024px;
--main-width-paper: 720px;
}
@layer base {
html {
scroll-behavior: smooth;
background-color: var(--color-paper-theme);
}
body {
background-color: var(--color-paper-theme);
color: var(--color-paper-primary);
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.dark {
/* Catppuccin Mocha(暗色)。accent-soft 带绿调、accent-2-soft 带 teal 调,
在 surface0 暗底上透出微弱主/次强调色。 */
--color-paper-theme: #1e1e2e;
--color-paper-entry: #181825;
--color-paper-primary: #cdd6f4;
--color-paper-secondary: #bac2de;
--color-paper-tertiary: #6c7086;
--color-paper-content: #a6adc8;
--color-paper-code-block: #313244;
--color-paper-code-bg: #313244;
--color-paper-border: #45475a;
--color-paper-accent: #a6e3a1;
--color-paper-accent-soft: #1e2e22;
--color-paper-accent-2: #94e2d5;
--color-paper-accent-2-soft: #1e2a28;
}
}
@layer components {
.post-single {
margin: 0 auto;
}
.post-header {
margin: 24px auto var(--content-gap-paper) auto;
}
.post-title {
font-size: 40px;
line-height: 1.2;
color: var(--color-paper-primary);
word-break: break-word;
letter-spacing: -0.02em;
}
.post-description {
margin-top: 10px;
color: var(--color-paper-secondary);
font-size: 16px;
line-height: 1.7;
}
.post-meta {
margin-top: 5px;
color: var(--color-paper-secondary);
font-size: 14px;
display: flex;
align-items: center;
gap: 0.5rem;
flex-wrap: wrap;
}
.post-meta a {
color: var(--color-paper-secondary);
text-decoration-style: dotted;
text-underline-offset: 0.3rem;
text-decoration: underline;
}
.post-meta a:hover {
color: var(--color-paper-primary);
}
.breadcrumbs {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.2rem;
color: var(--color-paper-secondary);
font-size: 14px;
margin-bottom: 10px;
}
.breadcrumbs a {
font-size: 16px;
color: var(--color-paper-primary);
}
.breadcrumbs a:hover {
text-decoration: underline;
text-underline-offset: 0.2rem;
}
.entry-hint {
display: inline-flex;
margin-left: 0.5rem;
color: var(--color-paper-secondary);
}
details.toc {
margin-bottom: var(--content-gap-paper);
background: var(--color-paper-code-bg);
border-radius: var(--radius-paper);
border: 1px solid var(--color-paper-border);
}
details.toc summary {
padding: 0.3rem 1.2rem;
border-radius: var(--radius-paper);
cursor: pointer;
display: list-item;
width: 100%;
user-select: none;
color: var(--color-paper-primary);
}
details.toc .title {
display: inline;
font-weight: 500;
margin-inline-start: 0.2rem;
}
details.toc .inner {
margin: 0 2.4rem;
padding-bottom: 0.6rem;
}
details.toc ul {
list-style: none;
padding: 0;
margin: 0;
}
details.toc li {
margin: 0.3rem 0;
}
details.toc a {
color: var(--color-paper-secondary);
text-decoration: none;
font-size: 14px;
}
details.toc a:hover {
color: var(--color-paper-primary);
text-decoration: underline;
text-underline-offset: 0.3rem;
}
details.toc li ul {
margin-inline-start: var(--gap-paper);
}
details {
interpolate-size: allow-keywords;
}
details::details-content {
height: 0;
opacity: 0;
overflow: clip;
transition: height 150ms ease, opacity 150ms ease, content-visibility 150ms allow-discrete;
}
details[open]::details-content {
height: auto;
opacity: 1;
}
.entry-cover {
margin-bottom: var(--content-gap-paper);
}
/* 封面用 blur-img 结构:去 margin、保持圆角,内层 img cover 填充 */
.entry-cover .blur-img {
margin: 0;
border-radius: var(--radius-paper);
}
.entry-cover img {
width: 100%;
height: 100%;
object-fit: cover;
}
.post-content {
color: var(--color-paper-content);
margin: 30px 0;
}
.md-content h1 {
margin: 40px auto 32px;
font-size: 40px;
color: var(--color-paper-primary);
letter-spacing: -0.01em;
}
.md-content h2 {
margin: 32px auto 24px;
font-size: 32px;
color: var(--color-paper-primary);
letter-spacing: -0.01em;
}
.md-content h3 {
margin: 24px 0 16px;
font-size: 24px;
color: var(--color-paper-primary);
}
.md-content h4 {
margin: 24px 0 16px;
font-size: 16px;
color: var(--color-paper-primary);
}
.md-content h5 {
margin: 24px 0 16px;
font-size: 14px;
color: var(--color-paper-primary);
}
.md-content h6 {
margin: 24px 0 16px;
font-size: 12px;
color: var(--color-paper-primary);
}
.md-content a:not(.anchor) {
text-underline-offset: 0.3rem;
text-decoration: underline;
color: var(--color-paper-accent);
}
.md-content a:not(.anchor):hover {
color: var(--color-paper-accent-2);
}
.md-content p {
margin-bottom: var(--content-gap-paper);
line-height: 1.85;
}
.md-content p:last-child {
margin-bottom: 0;
}
.md-content blockquote {
margin: 1rem 0;
padding-inline-start: 1rem;
border-inline-start: 0.3rem solid var(--color-paper-content);
color: var(--color-paper-secondary);
}
.md-content blockquote p:last-child {
margin-bottom: 0;
}
.md-content ol,
.md-content ul {
padding-inline-start: 1.25rem;
margin-bottom: var(--content-gap-paper);
}
/* Tailwind Preflight 把 list-style 清成 none,这里恢复被清掉的 marker。
* 任务列表项(含 checkbox 的 li)另有规则覆盖为 none,不受影响。 */
.md-content ul {
list-style-type: disc;
}
.md-content ol {
list-style-type: decimal;
}
.md-content li {
margin-top: 0.3rem;
}
.md-content li p {
margin-bottom: 0;
}
/* 任务列表:pulldown-cmark 把 - [ ] / - [x] 渲染成裸
…
* (无