@chengzhao-dev/dsh-quarto-book 0.4.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +3 -3
- package/README.md +3 -3
- package/lib/tools/render-check.js +5 -2
- package/package.json +5 -2
- package/skills/designing-theme/SKILL.md +3 -2
- package/skills/designing-theme/assets/theme/css/base.css +216 -55
- package/skills/designing-theme/assets/theme/css/callouts.css +32 -23
- package/skills/designing-theme/assets/theme/css/code.css +84 -2
- package/skills/designing-theme/assets/theme/css/content.css +152 -36
- package/skills/designing-theme/assets/theme/css/landing.css +175 -54
- package/skills/designing-theme/assets/theme/css/nav.css +462 -35
- package/skills/designing-theme/assets/theme/css/sidebar.css +76 -31
- package/skills/designing-theme/assets/theme/css/tokens.css +34 -16
- package/skills/designing-theme/assets/theme/includes/fonts.html +1 -1
- package/skills/designing-theme/assets/theme/includes/footer.html +16 -7
- package/skills/designing-theme/assets/theme/includes/palette.html +420 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/brand-mark.svg +3 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/favicon-dark.svg +5 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/favicon-light.svg +5 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/highlight-dark.theme +214 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/highlight-light.theme +214 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/meta.md +53 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/theme-dark.scss +43 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/theme-light.scss +40 -0
- package/skills/designing-theme/assets/theme/palettes/flexoki/tokens.css +156 -0
- package/skills/designing-theme/assets/theme/palettes/hill-light/brand-mark.svg +3 -0
- package/skills/designing-theme/assets/theme/palettes/hill-light/favicon-dark.svg +5 -0
- package/skills/designing-theme/assets/theme/palettes/hill-light/favicon-light.svg +5 -0
- package/skills/designing-theme/assets/theme/palettes/hill-light/meta.md +78 -0
- package/skills/designing-theme/assets/theme/palettes/hill-light/syntax.css +150 -0
- package/skills/designing-theme/assets/theme/palettes/hill-light/tokens.css +322 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/brand-mark.svg +3 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/favicon-dark.svg +5 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/favicon-light.svg +5 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/highlight-dark.theme +214 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/highlight-light.theme +214 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/meta.md +66 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/syntax.css +67 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/theme-dark.scss +43 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/theme-light.scss +41 -0
- package/skills/designing-theme/assets/theme/palettes/solarized/tokens.css +154 -0
- package/skills/designing-theme/knowledge/reading-surface.md +27 -15
- package/skills/designing-theme/references/theme-spine.md +2 -2
- package/skills/designing-theme/references/theme-system.md +82 -36
- package/skills/designing-theme/scripts/checking-layout.py +306 -48
- package/skills/designing-theme/scripts/measuring-pages.mjs +40 -3
- package/skills/writing-quarto/examples/01-language-scope.md +3 -3
- package/skills/writing-quarto/examples/02-structure-shape.md +5 -5
- package/skills/writing-quarto/examples/03-block-after.md +2 -2
- package/skills/writing-quarto/examples/03-excerpt-lead.md +6 -6
- package/skills/writing-quarto/examples/03-layout-list.md +15 -15
- package/skills/writing-quarto/examples/03-qmd-elements.md +4 -4
- package/skills/writing-quarto/examples/04-paragraph-cases.md +5 -5
- package/skills/writing-quarto/examples/04-paragraph-opening.md +3 -3
- package/skills/writing-quarto/examples/05-sentence-brevity.md +5 -5
- package/skills/writing-quarto/examples/05-sentence-frame.md +6 -6
- package/skills/writing-quarto/examples/05-sentence-reference.md +5 -5
- package/skills/writing-quarto/examples/06-wording-cases.md +8 -8
- package/skills/writing-quarto/examples/08-appendix.md +4 -4
- package/skills/writing-quarto/quarto/basics.md +24 -2
- package/skills/writing-quarto/quarto/comments.md +43 -0
- package/skills/writing-quarto/quarto/coords.md +4 -4
- package/skills/writing-quarto/quarto/encoding.md +35 -0
- package/skills/writing-quarto/quarto/mermaid.md +1 -1
- package/skills/writing-quarto/quarto/prose.md +86 -0
- package/skills/writing-quarto/quarto/render.md +17 -16
- package/skills/writing-quarto/quarto/terminal.md +3 -3
- package/skills/writing-quarto/scripts/checking-dom.py +20 -8
- package/skills/writing-quarto/scripts/verifying-content.py +12 -3
- package/skills/writing-quarto/steps/01-task.md +6 -6
- package/skills/writing-quarto/steps/02-structure.md +19 -19
- package/skills/writing-quarto/steps/03-blocks.md +40 -40
- package/skills/writing-quarto/steps/04-paragraphs.md +55 -55
- package/skills/writing-quarto/steps/05-sentences.md +42 -43
- package/skills/writing-quarto/steps/06-wording.md +9 -11
- package/skills/writing-quarto/steps/07-layout.md +21 -17
- package/skills/writing-quarto/steps/08-reread.md +9 -13
- package/templates/quarto-book-project/SKILL.md +1 -1
- package/skills/designing-theme/assets/theme/assets/brand-mark.svg +0 -4
- package/skills/designing-theme/assets/theme/assets/favicon.svg +0 -9
- package/skills/designing-theme/assets/theme/palettes/github/highlight-dark.theme +0 -213
- package/skills/designing-theme/assets/theme/palettes/github/highlight-light.theme +0 -213
- package/skills/designing-theme/assets/theme/palettes/github/meta.md +0 -38
- package/skills/designing-theme/assets/theme/palettes/github/theme-dark.scss +0 -35
- package/skills/designing-theme/assets/theme/palettes/github/theme-light.scss +0 -34
- package/skills/designing-theme/assets/theme/palettes/github/tokens.css +0 -160
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* dsh-quarto-book Quarto 主题 · 侧栏 / TOC /
|
|
1
|
+
/* dsh-quarto-book Quarto 主题 · 侧栏 / TOC / 翻页(自 common.css 拆分) */
|
|
2
2
|
|
|
3
3
|
/* ---------- 侧栏 / TOC ---------- */
|
|
4
4
|
/* 分组标题(sidebar 含分组时生成,向前兼容):冷灰 docs 风——13px、不大写、正文色;
|
|
@@ -25,6 +25,16 @@
|
|
|
25
25
|
border-right: 1px solid var(--card-border);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
/* 桌面压掉 Quarto 的栏间竖线:`sidebar.border` 默认 true,Quarto 编出
|
|
29
|
+
`.sidebar.sidebar-navigation:not(.rollup) { border-right: 1px solid … !important }`,
|
|
30
|
+
会在左栏与正文之间立一道竖墙。桌面三栏是同一张纸上的三个区域,
|
|
31
|
+
分隔统一归顶栏下那条通栏横线;这里的 !important 只为压过 Quarto 的同名 !important。
|
|
32
|
+
限定 ≥992px:窄屏的浮层右缘还要那条线当抽屉边。 */
|
|
33
|
+
@media (min-width: 992px) {
|
|
34
|
+
#quarto-sidebar.sidebar.sidebar-navigation {
|
|
35
|
+
border-right: 0 !important;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
28
38
|
#quarto-margin-sidebar {
|
|
29
39
|
background-color: transparent;
|
|
30
40
|
}
|
|
@@ -54,9 +64,8 @@ body::-webkit-scrollbar-thumb {
|
|
|
54
64
|
border-radius: 5px;
|
|
55
65
|
}
|
|
56
66
|
/* 章节链接:通栏条目(margin 0 + 1.5rem 内边距),默认灰字 14px/400/1.4;
|
|
57
|
-
|
|
58
|
-
单字面字体 + font-synthesis: none 下 600
|
|
59
|
-
不写无效字重 */
|
|
67
|
+
当前项只用左侧 2px 色条与正文色,不加底色、不加圆角,像书页边缘的索引。
|
|
68
|
+
单字面字体 + font-synthesis: none 下 600 不会变粗,不写无效字重 */
|
|
60
69
|
#quarto-sidebar .sidebar-item-text.sidebar-link {
|
|
61
70
|
display: block;
|
|
62
71
|
padding: 0.3rem 1.5rem;
|
|
@@ -80,9 +89,9 @@ body::-webkit-scrollbar-thumb {
|
|
|
80
89
|
}
|
|
81
90
|
#quarto-sidebar .sidebar-item-text.sidebar-link.active {
|
|
82
91
|
color: var(--body-color);
|
|
83
|
-
background-color:
|
|
92
|
+
background-color: transparent;
|
|
84
93
|
border-left: 2px solid var(--accent);
|
|
85
|
-
border-radius:
|
|
94
|
+
border-radius: 0;
|
|
86
95
|
}
|
|
87
96
|
/* 嵌套子项(章节分组 / 小节):缩进由条目 padding-left 提供,色条与 part 标题左缘对齐 */
|
|
88
97
|
#quarto-sidebar .sidebar-section .sidebar-item {
|
|
@@ -96,24 +105,52 @@ body::-webkit-scrollbar-thumb {
|
|
|
96
105
|
line-height: 1.4;
|
|
97
106
|
color: var(--sidebar-fg);
|
|
98
107
|
}
|
|
99
|
-
/*
|
|
108
|
+
/* 嵌套激活项:与上一级激活规则同观感,只靠色条与正文色区分 */
|
|
100
109
|
#quarto-sidebar .sidebar-section .sidebar-item-text.sidebar-link.active {
|
|
101
110
|
color: var(--body-color);
|
|
102
|
-
background-color:
|
|
111
|
+
background-color: transparent;
|
|
103
112
|
border-left: 2px solid var(--accent);
|
|
104
|
-
border-radius:
|
|
113
|
+
border-radius: 0;
|
|
114
|
+
}
|
|
115
|
+
/* 可折叠章节的箭头:Quarto 把 .sidebar-item-container 设成 space-between,
|
|
116
|
+
而 part 标题那条规则又给链接 flex: 1 1 0%,两下一夹,箭头被推到 300px 侧栏的最右缘,
|
|
117
|
+
离标题隔着一大片空白,像一枚落在栏外的游标。只有「带折叠箭头」的行才收拢标题,
|
|
118
|
+
不带箭头的 part 标题仍保持通栏底色。 */
|
|
119
|
+
#quarto-sidebar .sidebar-item-container {
|
|
120
|
+
justify-content: flex-start;
|
|
121
|
+
align-items: center;
|
|
122
|
+
}
|
|
123
|
+
#quarto-sidebar .sidebar-item-container:has(> .sidebar-item-toggle) > .sidebar-item-text.sidebar-link,
|
|
124
|
+
#quarto-sidebar ul.list-unstyled.mt-1 > li.sidebar-item-section > .sidebar-item-container:has(> .sidebar-item-toggle) > .sidebar-item-text.sidebar-link {
|
|
125
|
+
flex: 0 0 auto;
|
|
126
|
+
width: auto;
|
|
127
|
+
min-width: 0;
|
|
128
|
+
}
|
|
129
|
+
#quarto-sidebar .sidebar-item-container > .sidebar-item-toggle {
|
|
130
|
+
flex: none;
|
|
131
|
+
margin-left: 0.35rem;
|
|
132
|
+
padding: 0.15rem;
|
|
133
|
+
color: var(--text-secondary);
|
|
134
|
+
line-height: 1;
|
|
135
|
+
}
|
|
136
|
+
#quarto-sidebar .sidebar-item-container > .sidebar-item-toggle:hover {
|
|
137
|
+
color: var(--body-color);
|
|
138
|
+
}
|
|
139
|
+
#quarto-sidebar .sidebar-item-container > .sidebar-item-toggle i {
|
|
140
|
+
font-size: 0.72rem;
|
|
105
141
|
}
|
|
106
142
|
|
|
107
|
-
/* 右 TOC:分组标题 +
|
|
143
|
+
/* 右 TOC:分组标题 + 滚动高亮(安静的书页边注:14px 常规、不大写) */
|
|
108
144
|
.sidebar.margin-sidebar nav[role="doc-toc"] h2#toc-title {
|
|
109
145
|
font-size: 0.875rem;
|
|
110
146
|
font-weight: 400;
|
|
111
147
|
color: var(--body-color);
|
|
112
148
|
margin-bottom: 0.75rem;
|
|
113
149
|
}
|
|
114
|
-
/* 基础项(含嵌套):13px
|
|
115
|
-
每项保留 1px
|
|
116
|
-
边框色令牌化(替换硬编码 #e9ecef,暗色下可见度走 --card-border
|
|
150
|
+
/* 基础项(含嵌套):13px 次要色、无底色圆角(书页边注风)。
|
|
151
|
+
每项保留 1px 左轨(Quarto 原生),竖线↔文字 0.75rem(覆盖 Quarto 的 .6rem 并修复贴字),
|
|
152
|
+
边框色令牌化(替换硬编码 #e9ecef,暗色下可见度走 --card-border)。
|
|
153
|
+
这条轨标的是「读到哪一节」,不是栏与栏的墙;栏间分隔已收成顶栏下那一条通栏横线。 */
|
|
117
154
|
.sidebar.margin-sidebar nav[role="doc-toc"] a.nav-link {
|
|
118
155
|
color: var(--sidebar-fg);
|
|
119
156
|
border-left: 1px solid var(--card-border);
|
|
@@ -129,13 +166,13 @@ body::-webkit-scrollbar-thumb {
|
|
|
129
166
|
display: flex;
|
|
130
167
|
align-items: center;
|
|
131
168
|
}
|
|
132
|
-
/* hover:正文色(!important 压过 Quarto
|
|
169
|
+
/* hover:正文色(!important 压过 Quarto 产物中写死的亮蓝 !important) */
|
|
133
170
|
.sidebar.margin-sidebar nav[role="doc-toc"] a.nav-link:hover {
|
|
134
171
|
color: var(--body-color) !important;
|
|
135
172
|
background-color: transparent;
|
|
136
173
|
}
|
|
137
174
|
/* 右 TOC 激活项:与侧栏当前项同策略——正文色 + 2px 色条(!important 压过 Quarto
|
|
138
|
-
|
|
175
|
+
写死的亮蓝激活规则,暗色下必须继续压住,不能漏出亮色蓝),无背景 */
|
|
139
176
|
.sidebar.margin-sidebar nav[role="doc-toc"] a.nav-link.active {
|
|
140
177
|
color: var(--toc-active) !important;
|
|
141
178
|
background-color: transparent;
|
|
@@ -170,11 +207,14 @@ body::-webkit-scrollbar-thumb {
|
|
|
170
207
|
font-weight: 400;
|
|
171
208
|
color: var(--sidebar-fg);
|
|
172
209
|
}
|
|
173
|
-
/* prev/next
|
|
210
|
+
/* prev/next 章节导航(书页脚注式):一条顶线分开正文与翻页,不用边框卡片;
|
|
211
|
+
字用正文色,hover 才转 accent,箭头仍用 < 与 > 符号 */
|
|
174
212
|
nav.page-navigation {
|
|
175
213
|
display: flex;
|
|
176
|
-
gap:
|
|
177
|
-
margin-top:
|
|
214
|
+
gap: 2rem;
|
|
215
|
+
margin-top: 3rem;
|
|
216
|
+
padding-top: 1.25rem;
|
|
217
|
+
border-top: 1px solid var(--card-border);
|
|
178
218
|
}
|
|
179
219
|
.nav-page.nav-page-previous,
|
|
180
220
|
.nav-page.nav-page-next {
|
|
@@ -182,14 +222,15 @@ nav.page-navigation {
|
|
|
182
222
|
}
|
|
183
223
|
.nav-page .pagination-link {
|
|
184
224
|
display: flex;
|
|
185
|
-
align-items:
|
|
186
|
-
height:
|
|
187
|
-
border:
|
|
188
|
-
border-radius:
|
|
225
|
+
align-items: baseline;
|
|
226
|
+
height: auto;
|
|
227
|
+
border: 0;
|
|
228
|
+
border-radius: 0;
|
|
229
|
+
background: transparent;
|
|
189
230
|
color: var(--body-color);
|
|
190
|
-
font-size: 0.
|
|
191
|
-
padding: 0.
|
|
192
|
-
min-height:
|
|
231
|
+
font-size: 0.875rem;
|
|
232
|
+
padding: 0.25rem 0;
|
|
233
|
+
min-height: 0;
|
|
193
234
|
}
|
|
194
235
|
.nav-page .pagination-link .bi {
|
|
195
236
|
display: none; /* 隐藏 Bootstrap 图标,改用 < > */
|
|
@@ -202,12 +243,15 @@ nav.page-navigation {
|
|
|
202
243
|
content: ">";
|
|
203
244
|
margin-left: 0.5rem;
|
|
204
245
|
}
|
|
246
|
+
.nav-page-next .pagination-link {
|
|
247
|
+
justify-content: flex-end;
|
|
248
|
+
text-align: right;
|
|
249
|
+
}
|
|
205
250
|
.nav-page .pagination-link:hover {
|
|
206
251
|
color: var(--accent);
|
|
207
|
-
border-color: var(--card-hover-border);
|
|
208
252
|
}
|
|
209
253
|
.nav-page .nav-page-text {
|
|
210
|
-
color:
|
|
254
|
+
color: inherit;
|
|
211
255
|
}
|
|
212
256
|
.nav-page .pagination-link:hover .nav-page-text {
|
|
213
257
|
color: var(--accent);
|
|
@@ -221,13 +265,14 @@ nav.page-navigation {
|
|
|
221
265
|
@media (max-width: 767.98px) {
|
|
222
266
|
nav.page-navigation {
|
|
223
267
|
flex-direction: column;
|
|
224
|
-
gap: 0.
|
|
225
|
-
margin-top:
|
|
268
|
+
gap: 0.6rem;
|
|
269
|
+
margin-top: 2.25rem;
|
|
270
|
+
padding-top: 1rem;
|
|
226
271
|
}
|
|
227
272
|
|
|
228
273
|
.nav-page .pagination-link {
|
|
229
|
-
min-height:
|
|
230
|
-
padding: 0.
|
|
274
|
+
min-height: 0;
|
|
275
|
+
padding: 0.3rem 0;
|
|
231
276
|
}
|
|
232
277
|
}
|
|
233
278
|
|
|
@@ -5,24 +5,29 @@
|
|
|
5
5
|
============================================================ */
|
|
6
6
|
|
|
7
7
|
body {
|
|
8
|
-
/*
|
|
9
|
-
--code-padding: 0.
|
|
10
|
-
--code-font-size:
|
|
11
|
-
--code-line-height: 1.
|
|
12
|
-
--code-title-font-size: 0.
|
|
13
|
-
--code-title-padding: 0.
|
|
14
|
-
--code-followup-gap:
|
|
8
|
+
/* 代码块几何与排版(明暗共用);宽度贴满 840px 正文内容列 */
|
|
9
|
+
--code-padding: 0.85rem 1.05rem;
|
|
10
|
+
--code-font-size: 0.9375rem;
|
|
11
|
+
--code-line-height: 1.7;
|
|
12
|
+
--code-title-font-size: 0.75rem;
|
|
13
|
+
--code-title-padding: 0.45rem 0.85rem;
|
|
14
|
+
--code-followup-gap: 0.9rem;
|
|
15
15
|
--toc-indent: 0.75rem;
|
|
16
|
-
--transition: 0.
|
|
17
|
-
/*
|
|
18
|
-
|
|
19
|
-
--radius-
|
|
20
|
-
--radius-
|
|
21
|
-
--radius
|
|
22
|
-
|
|
16
|
+
--transition: 0.12s ease-in-out;
|
|
17
|
+
/* 书页半径:编辑注、代码块和图片都收窄;大圆角只留给触控目标 */
|
|
18
|
+
--radius-sm: 3px;
|
|
19
|
+
--radius-md: 4px;
|
|
20
|
+
--radius-lg: 6px;
|
|
21
|
+
--code-radius: 4px;
|
|
22
|
+
/* 浮层遮罩:搜索浮层等压在内容之上的一层,深色下加重。 */
|
|
23
|
+
--overlay-scrim: rgba(0, 0, 0, 0.42);
|
|
23
24
|
/* 正文单字面:LXGW Bright Medium(登记 weight 400,层级靠字号);
|
|
24
25
|
栈尾 CJK 系统字体兜底:自托管子集缺字时不落浏览器默认宋体 */
|
|
25
26
|
--ui-font: "LXGW Bright Medium", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", "Apple Color Emoji", "Segoe UI Emoji", sans-serif;
|
|
27
|
+
/* 标题与顶栏/侧栏标题:系统黑体栈。标题短、不需要楷体的长文耐读性,
|
|
28
|
+
黑体自带真 600/700 字重,能把「标题—正文」的字面差与字重差同时拉开;
|
|
29
|
+
不新增字体文件,只调用系统已装字体(Noto Sans SC / PingFang SC / 微软雅黑)。 */
|
|
30
|
+
--heading-font: "Noto Sans SC", "Source Han Sans SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
26
31
|
/* 栈尾 CJK 系统字体兜底:自托管子集缺字时不落浏览器默认宋体 */
|
|
27
32
|
--mono-font: "LXGW Bright Code", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", monospace;
|
|
28
33
|
/* 正文内容列宽 = body-width(872px) 减去 Quarto 栅格两侧各 1rem 内边距后的 840px;
|
|
@@ -30,11 +35,24 @@ body {
|
|
|
30
35
|
--content-width: 840px;
|
|
31
36
|
color: var(--body-color);
|
|
32
37
|
background-color: var(--page-bg);
|
|
33
|
-
line-height: 1.
|
|
34
|
-
font-size:
|
|
38
|
+
line-height: 1.85;
|
|
39
|
+
font-size: 1.0625rem;
|
|
35
40
|
font-synthesis: none;
|
|
36
41
|
text-wrap: pretty;
|
|
37
42
|
/* 显式声明浅色,使内嵌 SVG(顶栏品牌徽标)与原生控件跟随页面明暗,
|
|
38
43
|
而不是跟随系统偏好;深色由 palette 的 body.quarto-dark 覆盖。 */
|
|
39
44
|
color-scheme: light;
|
|
40
45
|
}
|
|
46
|
+
|
|
47
|
+
/* 系统开了「减少动态效果」时,色板切换、箭头翻转、浮层淡入都收敛到瞬时:
|
|
48
|
+
保留状态变化,去掉过程。 */
|
|
49
|
+
@media (prefers-reduced-motion: reduce) {
|
|
50
|
+
*,
|
|
51
|
+
*::before,
|
|
52
|
+
*::after {
|
|
53
|
+
animation-duration: 0.01ms !important;
|
|
54
|
+
animation-iteration-count: 1 !important;
|
|
55
|
+
scroll-behavior: auto !important;
|
|
56
|
+
transition-duration: 0.01ms !important;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<!-- 仅注入移动端浏览器地址栏主题色;自托管 @font-face 在 css/fonts.css。 -->
|
|
2
|
-
<meta name="theme-color" id="meta-theme-color" content="#
|
|
2
|
+
<meta name="theme-color" id="meta-theme-color" content="#fffcf0">
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
</
|
|
1
|
+
<footer class="book-footer">
|
|
2
|
+
<p>© 2026 Quarto Book · 用 <a href="https://quarto.org">Quarto</a> 构建</p>
|
|
3
|
+
</footer>
|
|
4
4
|
<button id="back-to-top" type="button" title="返回顶部" aria-label="返回顶部">↑</button>
|
|
5
5
|
<script>
|
|
6
6
|
(function () {
|
|
@@ -21,16 +21,25 @@
|
|
|
21
21
|
(function () {
|
|
22
22
|
var meta = document.getElementById('meta-theme-color');
|
|
23
23
|
if (!meta) return;
|
|
24
|
-
// 地址栏主题色直接读 tokens.css 的 --page-bg
|
|
25
|
-
//
|
|
24
|
+
// 地址栏主题色直接读 tokens.css 的 --page-bg 计算值(明暗与色板切换后自动重取),
|
|
25
|
+
// 避免与令牌双写漂移;取不到时按当前色板的纸色兜底。
|
|
26
|
+
// favicon 也在这里再同步一次:file:// 下 Quarto 不写 localStorage,只能靠 body class 变化触发。
|
|
26
27
|
var sync = function () {
|
|
28
|
+
var solarized = document.documentElement.getAttribute('data-palette') === 'solarized';
|
|
27
29
|
var v = window.getComputedStyle(document.body).getPropertyValue('--page-bg').trim();
|
|
28
|
-
if (!v)
|
|
30
|
+
if (!v) {
|
|
31
|
+
var dark = document.body.classList.contains('quarto-dark');
|
|
32
|
+
if (solarized) v = dark ? '#002B36' : '#FDF6E3';
|
|
33
|
+
else v = dark ? '#100F0F' : '#FFFCF0';
|
|
34
|
+
}
|
|
29
35
|
meta.setAttribute('content', v);
|
|
36
|
+
if (window.__bookSyncFavicon) window.__bookSyncFavicon();
|
|
30
37
|
};
|
|
31
38
|
sync();
|
|
32
39
|
if (window.MutationObserver) {
|
|
33
|
-
new MutationObserver(sync)
|
|
40
|
+
var observer = new MutationObserver(sync);
|
|
41
|
+
observer.observe(document.body, { attributes: true, attributeFilter: ['class'] });
|
|
42
|
+
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-palette'] });
|
|
34
43
|
}
|
|
35
44
|
})();
|
|
36
45
|
</script>
|