@chengzhao-dev/dsh-quarto-book 0.4.3 → 0.5.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 +2 -2
- package/README.md +2 -2
- package/package.json +5 -2
- package/skills/designing-theme/SKILL.md +2 -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 +150 -52
- 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/quarto/render.md +2 -2
- package/skills/writing-quarto/scripts/checking-dom.py +14 -7
- 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
|
@@ -3,9 +3,14 @@
|
|
|
3
3
|
/* ---------- 顶部 navbar(品牌栏 + 次级导航) ---------- */
|
|
4
4
|
/* Quarto 书籍启用 navbar 后,#quarto-header 内含两层:
|
|
5
5
|
nav.navbar(品牌 + 搜索 + 主题切换)与 nav.quarto-secondary-nav(侧栏开关 + 面包屑)。
|
|
6
|
-
|
|
6
|
+
两层共用底色,整体视为一个 header:只在 #quarto-header 的底边画唯一一条通栏发丝线,
|
|
7
|
+
让它横贯左栏、正文、右目录三栏;品牌行与面包屑行之间不加线。 */
|
|
7
8
|
#quarto-header {
|
|
8
9
|
background-color: var(--navbar-bg);
|
|
10
|
+
/* 全站唯一的通栏分隔线:三栏共用同一条,栏与栏之间不再用竖线切开。
|
|
11
|
+
画在 header 上而不是次级导航上,侧栏列上方才不会断线,
|
|
12
|
+
也不会和窄屏侧栏自带的底边叠成两条。 */
|
|
13
|
+
border-bottom: 1px solid var(--card-border);
|
|
9
14
|
padding-left: env(safe-area-inset-left);
|
|
10
15
|
padding-right: env(safe-area-inset-right);
|
|
11
16
|
/* 注入 Bootstrap 变量,使 navbar 内组件在明暗两态都改用我们的 token
|
|
@@ -36,6 +41,7 @@ nav.navbar.navbar-expand-lg {
|
|
|
36
41
|
flex: 1 1 auto;
|
|
37
42
|
}
|
|
38
43
|
#quarto-search {
|
|
44
|
+
position: relative;
|
|
39
45
|
order: 2;
|
|
40
46
|
margin-left: 0;
|
|
41
47
|
flex: 0 1 auto;
|
|
@@ -44,13 +50,226 @@ nav.navbar.navbar-expand-lg {
|
|
|
44
50
|
order: 3;
|
|
45
51
|
margin-left: 0 !important;
|
|
46
52
|
flex: 0 0 auto;
|
|
53
|
+
display: flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
gap: 0.35rem;
|
|
56
|
+
}
|
|
57
|
+
/* 控件顺序:分段控件在明暗圆钮左侧(阅读顺序:先选色板、再切明暗)。
|
|
58
|
+
Quarto 默认把明暗钮排在分段控件前,这里只挪明暗钮,源码链接图标仍在前。 */
|
|
59
|
+
.quarto-navbar-tools.tools-end .quarto-color-scheme-toggle {
|
|
60
|
+
order: 1;
|
|
61
|
+
}
|
|
62
|
+
/* ---------- 色板切换:下拉菜单 ----------
|
|
63
|
+
Flexoki / Solarized / Hill Light 三选一。早先是一枚三段胶囊,Hill Light 出现后
|
|
64
|
+
又要并排一段四时辰,顶栏右端被挤到近 190px,窄屏只能把名字全裁掉。改成
|
|
65
|
+
「当前色板 + 菜单」:闭合态一个色点加名字,展开后三套一次看全、选中项带勾。
|
|
66
|
+
色点是三套色板各自的强调色,必须写死——菜单要同时显示三套,而激活态令牌互斥。 */
|
|
67
|
+
.palette-picker {
|
|
68
|
+
display: inline-flex;
|
|
69
|
+
align-items: center;
|
|
70
|
+
margin: 0 0.25rem;
|
|
71
|
+
}
|
|
72
|
+
.palette-menu {
|
|
73
|
+
position: relative;
|
|
74
|
+
}
|
|
75
|
+
.palette-trigger {
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: 0.4rem;
|
|
79
|
+
height: 2rem;
|
|
80
|
+
padding: 0 0.45rem 0 0.55rem;
|
|
81
|
+
background-color: var(--navbar-input-bg);
|
|
82
|
+
color: var(--navbar-muted);
|
|
83
|
+
border: 1px solid var(--navbar-border);
|
|
84
|
+
border-radius: 999px;
|
|
85
|
+
font-family: var(--ui-font);
|
|
86
|
+
font-size: 0.75rem;
|
|
87
|
+
line-height: 1;
|
|
88
|
+
white-space: nowrap;
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
transition: color 0.12s ease;
|
|
91
|
+
}
|
|
92
|
+
.palette-trigger:hover,
|
|
93
|
+
.palette-trigger[aria-expanded="true"] {
|
|
94
|
+
color: var(--navbar-fg);
|
|
95
|
+
}
|
|
96
|
+
.palette-trigger:focus-visible {
|
|
97
|
+
/* 用强调色而不是 --link-color:Flexoki 的链接是墨色下划线文本,2px 墨环压在胶囊上
|
|
98
|
+
像误触的浏览器默认框;强调色与同排控件、选中态同一套语言。 */
|
|
99
|
+
outline: 2px solid var(--action-color);
|
|
100
|
+
outline-offset: 2px;
|
|
101
|
+
}
|
|
102
|
+
.palette-swatch {
|
|
103
|
+
flex: none;
|
|
104
|
+
width: 0.55rem;
|
|
105
|
+
height: 0.55rem;
|
|
106
|
+
border-radius: 50%;
|
|
107
|
+
background-color: var(--swatch, var(--navbar-muted));
|
|
108
|
+
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.14);
|
|
109
|
+
}
|
|
110
|
+
.palette-caret {
|
|
111
|
+
flex: none;
|
|
112
|
+
width: 10px;
|
|
113
|
+
height: 10px;
|
|
114
|
+
opacity: 0.65;
|
|
115
|
+
transition: transform 0.15s ease;
|
|
116
|
+
}
|
|
117
|
+
.palette-trigger[aria-expanded="true"] .palette-caret {
|
|
118
|
+
transform: rotate(180deg);
|
|
119
|
+
}
|
|
120
|
+
.palette-menu-list {
|
|
121
|
+
position: absolute;
|
|
122
|
+
top: calc(100% + 0.45rem);
|
|
123
|
+
right: 0;
|
|
124
|
+
z-index: 1060;
|
|
125
|
+
display: flex;
|
|
126
|
+
flex-direction: column;
|
|
127
|
+
gap: 0.1rem;
|
|
128
|
+
min-width: 10.5rem;
|
|
129
|
+
padding: 0.3rem;
|
|
130
|
+
background-color: var(--surface-raised);
|
|
131
|
+
border: 1px solid var(--card-border);
|
|
132
|
+
border-radius: 0.5rem;
|
|
133
|
+
box-shadow: 0 10px 26px rgba(0, 0, 0, 0.14);
|
|
134
|
+
}
|
|
135
|
+
.palette-menu-list[hidden] {
|
|
136
|
+
display: none;
|
|
137
|
+
}
|
|
138
|
+
.palette-menu-item {
|
|
139
|
+
display: flex;
|
|
140
|
+
align-items: center;
|
|
141
|
+
gap: 0.5rem;
|
|
142
|
+
width: 100%;
|
|
143
|
+
padding: 0.45rem 0.5rem;
|
|
144
|
+
border: 0;
|
|
145
|
+
border-radius: 0.35rem;
|
|
146
|
+
background-color: transparent;
|
|
147
|
+
color: var(--body-color);
|
|
148
|
+
font-family: var(--ui-font);
|
|
149
|
+
font-size: 0.8125rem;
|
|
150
|
+
line-height: 1;
|
|
151
|
+
text-align: left;
|
|
152
|
+
cursor: pointer;
|
|
153
|
+
}
|
|
154
|
+
.palette-menu-item.is-active,
|
|
155
|
+
.palette-menu-item:hover {
|
|
156
|
+
background-color: var(--navbar-hover-bg);
|
|
157
|
+
}
|
|
158
|
+
.palette-check {
|
|
159
|
+
flex: none;
|
|
160
|
+
width: 12px;
|
|
161
|
+
height: 12px;
|
|
162
|
+
margin-left: auto;
|
|
163
|
+
color: var(--action-color);
|
|
164
|
+
opacity: 0;
|
|
165
|
+
}
|
|
166
|
+
.palette-menu-item[aria-selected="true"] .palette-check {
|
|
167
|
+
opacity: 1;
|
|
168
|
+
}
|
|
169
|
+
.palette-trigger[data-key="flexoki"],
|
|
170
|
+
.palette-menu-item[data-key="flexoki"] {
|
|
171
|
+
--swatch: #24837b;
|
|
172
|
+
}
|
|
173
|
+
.palette-trigger[data-key="solarized"],
|
|
174
|
+
.palette-menu-item[data-key="solarized"] {
|
|
175
|
+
--swatch: #268bd2;
|
|
176
|
+
}
|
|
177
|
+
.palette-trigger[data-key="hill-light"],
|
|
178
|
+
.palette-menu-item[data-key="hill-light"] {
|
|
179
|
+
--swatch: #2d6a66;
|
|
180
|
+
}
|
|
181
|
+
/* ---------- 时辰切换(Hill Light):与色板同一胶囊,只在 Hill Light 下出现 ----------
|
|
182
|
+
Hill Light 的明暗由时辰决定(夜月是唯一暗色时辰),所以这种色板下让 Quarto 的
|
|
183
|
+
明暗圆钮让位,避免两套开关同时出现、互相看不出谁生效。 */
|
|
184
|
+
.palette-picker[hidden] {
|
|
185
|
+
display: none;
|
|
186
|
+
}
|
|
187
|
+
.mode-picker .palette-segment {
|
|
188
|
+
display: inline-flex;
|
|
189
|
+
align-items: stretch;
|
|
190
|
+
height: 2rem;
|
|
191
|
+
padding: 2px;
|
|
192
|
+
gap: 2px;
|
|
193
|
+
background-color: var(--navbar-input-bg);
|
|
194
|
+
border: 1px solid var(--navbar-border);
|
|
195
|
+
border-radius: 999px;
|
|
196
|
+
}
|
|
197
|
+
.mode-picker .palette-segment-option {
|
|
198
|
+
display: inline-flex;
|
|
199
|
+
align-items: center;
|
|
200
|
+
justify-content: center;
|
|
201
|
+
gap: 0.3rem;
|
|
202
|
+
min-width: 0;
|
|
203
|
+
padding: 0 0.5rem;
|
|
204
|
+
border: 0;
|
|
205
|
+
border-radius: 999px;
|
|
206
|
+
background-color: transparent;
|
|
207
|
+
color: var(--navbar-muted);
|
|
208
|
+
font-family: var(--ui-font);
|
|
209
|
+
font-size: 0.75rem;
|
|
210
|
+
line-height: 1;
|
|
211
|
+
white-space: nowrap;
|
|
212
|
+
cursor: pointer;
|
|
213
|
+
transition: color 0.12s ease, background-color 0.12s ease;
|
|
214
|
+
}
|
|
215
|
+
.mode-picker .palette-segment-option svg {
|
|
216
|
+
flex: none;
|
|
217
|
+
width: 12px;
|
|
218
|
+
height: 12px;
|
|
219
|
+
}
|
|
220
|
+
.mode-picker .palette-segment-option:hover {
|
|
221
|
+
color: var(--navbar-fg);
|
|
222
|
+
}
|
|
223
|
+
.mode-picker .palette-segment-option[aria-checked="true"] {
|
|
224
|
+
background-color: var(--navbar-hover-bg);
|
|
225
|
+
color: var(--navbar-fg);
|
|
226
|
+
}
|
|
227
|
+
.mode-picker .palette-segment-option:focus-visible {
|
|
228
|
+
outline: 2px solid var(--action-color);
|
|
229
|
+
outline-offset: 2px;
|
|
230
|
+
}
|
|
231
|
+
html[data-palette="hill-light"] #quarto-header .quarto-navbar-tools .quarto-color-scheme-toggle {
|
|
232
|
+
display: none;
|
|
233
|
+
}
|
|
234
|
+
/* 窄屏先收控件本身:色板只留色点与箭头、四时只留图标,选中态仍是填色胶囊。 */
|
|
235
|
+
@media (max-width: 575.98px) {
|
|
236
|
+
.palette-picker {
|
|
237
|
+
margin: 0 0.05rem;
|
|
238
|
+
}
|
|
239
|
+
.palette-trigger {
|
|
240
|
+
padding: 0 0.4rem;
|
|
241
|
+
}
|
|
242
|
+
.palette-trigger-label {
|
|
243
|
+
display: none;
|
|
244
|
+
}
|
|
245
|
+
.mode-picker .palette-segment-option {
|
|
246
|
+
/* 图标态是触摸目标:低于 24×24 就不合 WCAG 2.5.8 */
|
|
247
|
+
min-width: 1.5rem;
|
|
248
|
+
min-height: 1.75rem;
|
|
249
|
+
padding: 0 0.35rem;
|
|
250
|
+
}
|
|
251
|
+
.palette-menu-item {
|
|
252
|
+
/* 手机上菜单项就是触摸目标,抬到 36px 一行 */
|
|
253
|
+
min-height: 2.25rem;
|
|
254
|
+
padding: 0.55rem 0.5rem;
|
|
255
|
+
}
|
|
256
|
+
.mode-picker .palette-mode-label {
|
|
257
|
+
display: none;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/* 420 以下标题已隐藏,再收掉仓库源图标:手机上没有「看源文件」的使用场景,
|
|
261
|
+
腾出的宽度留给色板与四时,让搜索留在同一行而不是掉到第二行。 */
|
|
262
|
+
@media (max-width: 419.98px) {
|
|
263
|
+
.quarto-navbar-tools.tools-end > .quarto-navigation-tool {
|
|
264
|
+
display: none;
|
|
265
|
+
}
|
|
47
266
|
}
|
|
48
267
|
.navbar-brand,
|
|
49
268
|
.navbar-title {
|
|
50
269
|
color: var(--navbar-fg);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
font-weight:
|
|
270
|
+
/* 与内容标题同一套黑体:顶栏书名是「站点标题」,不是正文,走 --heading-font */
|
|
271
|
+
font-family: var(--heading-font);
|
|
272
|
+
font-weight: 600;
|
|
54
273
|
font-size: 1.125rem;
|
|
55
274
|
letter-spacing: 0;
|
|
56
275
|
}
|
|
@@ -59,25 +278,29 @@ nav.navbar.navbar-expand-lg {
|
|
|
59
278
|
align-items: center;
|
|
60
279
|
min-width: 0;
|
|
61
280
|
min-height: 2rem;
|
|
281
|
+
/* 图标与标题之间留出一枚字距的呼吸,避免书标贴着“C” */
|
|
62
282
|
gap: 0.5rem;
|
|
63
283
|
}
|
|
64
|
-
/*
|
|
65
|
-
|
|
284
|
+
/* 品牌图标:顶部栏使用与 favicon 同一枚「打开的书」,纯黑剪影由 mask 取 --navbar-fg。
|
|
285
|
+
图形墨迹占画布约四分之三,尺寸取标题字号的 1.11 倍,让墨迹略高于汉字字面高度;
|
|
66
286
|
CJK 字形的墨迹中心比行框中心高约 0.17rem,用 margin-bottom 把图标抬到同一视觉基线,
|
|
67
287
|
使图标底边与标题基线对齐,避免图标看上去比标题“坐得更低”。
|
|
68
|
-
|
|
69
|
-
跟随运行环境,会在站点主题与系统偏好不一致时反转明暗,遮挡品牌形状。 */
|
|
288
|
+
色板切换只换 mask 源,轮廓本身两套相同。 */
|
|
70
289
|
.navbar-brand::before {
|
|
71
290
|
content: "";
|
|
72
291
|
display: inline-block;
|
|
73
|
-
width: 1.
|
|
74
|
-
height: 1.
|
|
292
|
+
width: 1.25rem;
|
|
293
|
+
height: 1.25rem;
|
|
75
294
|
flex: 0 0 auto;
|
|
76
295
|
margin-right: 0;
|
|
77
|
-
margin-bottom: 0.
|
|
296
|
+
margin-bottom: 0.2rem;
|
|
78
297
|
background-color: var(--navbar-fg);
|
|
79
|
-
-webkit-mask: url("../
|
|
80
|
-
mask: url("../
|
|
298
|
+
-webkit-mask: url("../palettes/flexoki/brand-mark.svg") center / contain no-repeat;
|
|
299
|
+
mask: url("../palettes/flexoki/brand-mark.svg") center / contain no-repeat;
|
|
300
|
+
}
|
|
301
|
+
html[data-palette="solarized"] .navbar-brand::before {
|
|
302
|
+
-webkit-mask: url("../palettes/solarized/brand-mark.svg") center / contain no-repeat;
|
|
303
|
+
mask: url("../palettes/solarized/brand-mark.svg") center / contain no-repeat;
|
|
81
304
|
}
|
|
82
305
|
.navbar-brand:hover {
|
|
83
306
|
color: var(--navbar-fg);
|
|
@@ -100,8 +323,195 @@ nav.navbar.navbar-expand-lg {
|
|
|
100
323
|
text-underline-offset: 0.25rem;
|
|
101
324
|
text-decoration-thickness: 1px;
|
|
102
325
|
}
|
|
103
|
-
/*
|
|
104
|
-
|
|
326
|
+
/* 搜索:Quarto 1.10 的 overlay 搜索由 Algolia 在运行时生成
|
|
327
|
+
#quarto-search > .aa-Autocomplete > button.aa-DetachedSearchButton,
|
|
328
|
+
按钮内部已有一枚 svg.aa-SubmitIcon。不要再给 #quarto-search 画伪元素,
|
|
329
|
+
否则同一位置会出现两个放大镜。这里只把内置按钮改成顶栏里的安静图标键。 */
|
|
330
|
+
#quarto-search .aa-Autocomplete {
|
|
331
|
+
display: inline-flex;
|
|
332
|
+
align-items: center;
|
|
333
|
+
}
|
|
334
|
+
#quarto-search .aa-DetachedSearchButton {
|
|
335
|
+
display: inline-flex;
|
|
336
|
+
align-items: center;
|
|
337
|
+
justify-content: center;
|
|
338
|
+
width: 2rem;
|
|
339
|
+
height: 2rem;
|
|
340
|
+
padding: 0;
|
|
341
|
+
border: 1px solid transparent;
|
|
342
|
+
border-radius: var(--radius-sm);
|
|
343
|
+
background: transparent;
|
|
344
|
+
color: var(--navbar-muted);
|
|
345
|
+
line-height: 1;
|
|
346
|
+
cursor: pointer;
|
|
347
|
+
transition: var(--transition);
|
|
348
|
+
}
|
|
349
|
+
#quarto-search .aa-DetachedSearchButton:hover {
|
|
350
|
+
background-color: var(--navbar-hover-bg);
|
|
351
|
+
color: var(--navbar-fg);
|
|
352
|
+
}
|
|
353
|
+
#quarto-search .aa-DetachedSearchButton:focus-visible {
|
|
354
|
+
outline: 2px solid var(--accent);
|
|
355
|
+
outline-offset: 2px;
|
|
356
|
+
}
|
|
357
|
+
#quarto-search .aa-DetachedSearchButtonIcon {
|
|
358
|
+
display: flex;
|
|
359
|
+
align-items: center;
|
|
360
|
+
justify-content: center;
|
|
361
|
+
margin: 0;
|
|
362
|
+
}
|
|
363
|
+
#quarto-search .aa-SubmitIcon {
|
|
364
|
+
width: 1.125rem;
|
|
365
|
+
height: 1.125rem;
|
|
366
|
+
}
|
|
367
|
+
/* Quarto 的 `.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon`
|
|
368
|
+
带 3 个类名 + 2 个类型选择器,特异性高于上面的单类规则,会把图标钉回 26px
|
|
369
|
+
并染成 darkly 的浅色。用同等特异性、后加载的规则覆盖成 18px 的顶栏静音色。 */
|
|
370
|
+
.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon {
|
|
371
|
+
width: 1.125rem !important;
|
|
372
|
+
height: 1.125rem !important;
|
|
373
|
+
color: var(--navbar-muted) !important;
|
|
374
|
+
fill: currentColor;
|
|
375
|
+
}
|
|
376
|
+
/* 搜索浮层:scrim + 纸面容器,输入与结果全部走令牌,暗色下不再是白底黑字 */
|
|
377
|
+
.aa-DetachedOverlay {
|
|
378
|
+
background: var(--overlay-scrim);
|
|
379
|
+
}
|
|
380
|
+
.aa-DetachedContainer {
|
|
381
|
+
background: var(--page-bg);
|
|
382
|
+
color: var(--body-color);
|
|
383
|
+
border: 1px solid var(--card-border);
|
|
384
|
+
border-radius: var(--radius-md);
|
|
385
|
+
box-shadow: none;
|
|
386
|
+
}
|
|
387
|
+
.aa-DetachedContainer--modal {
|
|
388
|
+
border: 1px solid var(--card-border);
|
|
389
|
+
border-radius: var(--radius-md);
|
|
390
|
+
max-width: 46rem;
|
|
391
|
+
}
|
|
392
|
+
/* 手机搜索条贴顶:Quarto 的桌面 top:100px 在窄屏会把搜索条压在正文中部;
|
|
393
|
+
这里收掉左右圆角,做成一条通栏搜索栏。 */
|
|
394
|
+
@media (max-width: 575.98px) {
|
|
395
|
+
.aa-DetachedContainer--modal {
|
|
396
|
+
top: 0;
|
|
397
|
+
width: 100%;
|
|
398
|
+
max-width: 100%;
|
|
399
|
+
border-left: 0;
|
|
400
|
+
border-right: 0;
|
|
401
|
+
border-radius: 0;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/* Quarto 按 darkly 编译了浮层:容器 #222、表单 #222、输入 #2B2B2A。
|
|
405
|
+
这里用 `.aa-DetachedContainer` 作用域把表单、面板、结果全部拉回纸面令牌。 */
|
|
406
|
+
.aa-DetachedContainer .aa-DetachedFormContainer {
|
|
407
|
+
background-color: var(--page-bg);
|
|
408
|
+
border-bottom: 1px solid var(--card-border);
|
|
409
|
+
}
|
|
410
|
+
.aa-DetachedContainer .aa-Form {
|
|
411
|
+
background: transparent;
|
|
412
|
+
border: 0;
|
|
413
|
+
}
|
|
414
|
+
.aa-DetachedContainer .aa-Input {
|
|
415
|
+
background: transparent;
|
|
416
|
+
color: var(--body-color);
|
|
417
|
+
font-family: var(--ui-font);
|
|
418
|
+
font-size: 1rem;
|
|
419
|
+
}
|
|
420
|
+
/* Quarto 的输入框规则是 4 个类名(.aa-DetachedFormContainer .aa-Form
|
|
421
|
+
.aa-InputWrapper .aa-Input),暗色版把文字钉成 #2B2B2A、背景钉成浅灰。
|
|
422
|
+
用同等长度的选择器把输入框拉回纸面。 */
|
|
423
|
+
.aa-DetachedContainer .aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input {
|
|
424
|
+
background: transparent !important;
|
|
425
|
+
background-color: transparent !important;
|
|
426
|
+
color: var(--body-color) !important;
|
|
427
|
+
box-shadow: none;
|
|
428
|
+
border: 0;
|
|
429
|
+
}
|
|
430
|
+
.aa-DetachedContainer .aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder {
|
|
431
|
+
color: var(--text-secondary) !important;
|
|
432
|
+
opacity: 1;
|
|
433
|
+
}
|
|
434
|
+
/* 去掉浏览器默认的蓝色焦点环,改由表单底边变动作色表示焦点。 */
|
|
435
|
+
.aa-DetachedContainer .aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus {
|
|
436
|
+
outline: none !important;
|
|
437
|
+
box-shadow: none !important;
|
|
438
|
+
}
|
|
439
|
+
.aa-DetachedContainer .aa-DetachedFormContainer {
|
|
440
|
+
transition: border-color var(--transition);
|
|
441
|
+
}
|
|
442
|
+
.aa-DetachedContainer .aa-DetachedFormContainer:focus-within {
|
|
443
|
+
border-bottom-color: var(--action-color);
|
|
444
|
+
}
|
|
445
|
+
.aa-DetachedContainer .aa-DetachedCancelButton {
|
|
446
|
+
flex: 0 0 auto;
|
|
447
|
+
padding: 0 0.25em;
|
|
448
|
+
margin-left: 0.4em;
|
|
449
|
+
white-space: nowrap;
|
|
450
|
+
font-size: 0.8125rem;
|
|
451
|
+
}
|
|
452
|
+
.aa-DetachedContainer .aa-SubmitButton,
|
|
453
|
+
.aa-DetachedContainer .aa-ClearButton,
|
|
454
|
+
.aa-DetachedContainer .aa-DetachedCancelButton {
|
|
455
|
+
color: var(--text-secondary);
|
|
456
|
+
font-family: var(--ui-font);
|
|
457
|
+
}
|
|
458
|
+
.aa-DetachedContainer .aa-SubmitButton:hover,
|
|
459
|
+
.aa-DetachedContainer .aa-ClearButton:hover,
|
|
460
|
+
.aa-DetachedContainer .aa-DetachedCancelButton:hover {
|
|
461
|
+
color: var(--body-color);
|
|
462
|
+
}
|
|
463
|
+
.aa-DetachedContainer .aa-Panel,
|
|
464
|
+
.aa-DetachedContainer .aa-PanelLayout,
|
|
465
|
+
.aa-DetachedContainer .aa-List {
|
|
466
|
+
background: var(--page-bg);
|
|
467
|
+
color: var(--body-color);
|
|
468
|
+
}
|
|
469
|
+
.aa-DetachedContainer .aa-Panel {
|
|
470
|
+
border: 0;
|
|
471
|
+
box-shadow: none;
|
|
472
|
+
}
|
|
473
|
+
.aa-DetachedContainer .aa-Item .search-result-doc {
|
|
474
|
+
border-top-color: var(--card-border);
|
|
475
|
+
}
|
|
476
|
+
.aa-DetachedContainer .aa-Item {
|
|
477
|
+
border-radius: 0;
|
|
478
|
+
}
|
|
479
|
+
.aa-DetachedContainer .aa-Item .search-item {
|
|
480
|
+
background-color: transparent;
|
|
481
|
+
border-color: var(--card-border);
|
|
482
|
+
color: var(--body-color);
|
|
483
|
+
}
|
|
484
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="true"] .search-item,
|
|
485
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="true"] .search-item .search-result-section,
|
|
486
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="true"] .search-item .search-result-text,
|
|
487
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="true"] .search-item .search-result-title-container,
|
|
488
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="true"] .search-item .search-result-text-container {
|
|
489
|
+
background-color: var(--surface-raised);
|
|
490
|
+
color: var(--body-color);
|
|
491
|
+
}
|
|
492
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="false"] .search-item,
|
|
493
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="false"] .search-item .search-result-section,
|
|
494
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="false"] .search-item .search-result-text,
|
|
495
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="false"] .search-item .search-result-title-container,
|
|
496
|
+
.aa-DetachedContainer li.aa-Item[aria-selected="false"] .search-item .search-result-text-container {
|
|
497
|
+
background-color: transparent;
|
|
498
|
+
color: var(--body-color);
|
|
499
|
+
}
|
|
500
|
+
.aa-DetachedContainer .aa-Item .search-item mark.search-match {
|
|
501
|
+
background-color: var(--mark-bg);
|
|
502
|
+
color: inherit;
|
|
503
|
+
}
|
|
504
|
+
.aa-DetachedContainer .aa-SourceHeader .search-result-header {
|
|
505
|
+
background-color: var(--surface-raised);
|
|
506
|
+
color: var(--text-secondary);
|
|
507
|
+
}
|
|
508
|
+
.aa-DetachedContainer .aa-ItemContentTitle {
|
|
509
|
+
color: var(--body-color);
|
|
510
|
+
}
|
|
511
|
+
.aa-DetachedContainer .aa-ItemContentDescription {
|
|
512
|
+
color: var(--text-secondary);
|
|
513
|
+
}
|
|
514
|
+
/* 旧版搜索输入(非 overlay)若被启用,同样走令牌 */
|
|
105
515
|
#quarto-search input,
|
|
106
516
|
.quarto-navbar-search input {
|
|
107
517
|
background-color: var(--navbar-input-bg);
|
|
@@ -109,37 +519,29 @@ nav.navbar.navbar-expand-lg {
|
|
|
109
519
|
border-radius: var(--radius-sm);
|
|
110
520
|
color: var(--navbar-fg);
|
|
111
521
|
height: 1.875rem;
|
|
112
|
-
|
|
113
|
-
padding-left: 1.9rem;
|
|
522
|
+
padding: 0 0.6rem;
|
|
114
523
|
font-size: 0.8125rem;
|
|
115
|
-
transition: border-color var(--transition);
|
|
116
|
-
/* data URI 无法读取 CSS 变量;图标颜色与 --navbar-muted 同步。 */
|
|
117
|
-
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="%23656D76" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/></svg>');
|
|
118
|
-
background-repeat: no-repeat;
|
|
119
|
-
background-position: 0.6rem center;
|
|
120
|
-
background-size: 1.125rem 1.125rem;
|
|
121
|
-
}
|
|
122
|
-
body.quarto-dark #quarto-search input,
|
|
123
|
-
body.quarto-dark .quarto-navbar-search input {
|
|
124
|
-
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="%23B1BAC4" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 1 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/></svg>');
|
|
125
524
|
}
|
|
126
525
|
#quarto-search input:focus,
|
|
127
526
|
.quarto-navbar-search input:focus {
|
|
128
527
|
border-color: var(--accent);
|
|
129
528
|
box-shadow: none;
|
|
130
529
|
}
|
|
131
|
-
/* 占位符颜色:顶栏深色,占位符用 --navbar-muted */
|
|
132
530
|
#quarto-search input::placeholder,
|
|
133
531
|
.quarto-navbar-search input::placeholder {
|
|
134
532
|
color: var(--navbar-muted);
|
|
135
533
|
opacity: 1;
|
|
136
534
|
}
|
|
137
|
-
/*
|
|
535
|
+
/* Quarto 会在 body 顶部插入一个空的结果容器;没有结果时不要它画出 1px 边框 */
|
|
138
536
|
#quarto-search-results {
|
|
139
|
-
background-color:
|
|
140
|
-
border:
|
|
537
|
+
background-color: transparent;
|
|
538
|
+
border: 0;
|
|
141
539
|
color: var(--body-color);
|
|
142
540
|
}
|
|
541
|
+
#quarto-search-results .aa-Panel {
|
|
542
|
+
background-color: var(--page-bg);
|
|
543
|
+
border: 1px solid var(--card-border);
|
|
544
|
+
}
|
|
143
545
|
#quarto-search-results a {
|
|
144
546
|
color: var(--text-link);
|
|
145
547
|
}
|
|
@@ -177,7 +579,7 @@ body.quarto-dark .quarto-navbar-search input {
|
|
|
177
579
|
display: none;
|
|
178
580
|
}
|
|
179
581
|
}
|
|
180
|
-
/* 主题切换:可点区域 44px,图标仍是
|
|
582
|
+
/* 主题切换:可点区域 44px,图标仍是 16px */
|
|
181
583
|
#quarto-header .quarto-color-scheme-toggle {
|
|
182
584
|
color: var(--navbar-fg);
|
|
183
585
|
border-radius: 50%;
|
|
@@ -192,12 +594,37 @@ body.quarto-dark .quarto-navbar-search input {
|
|
|
192
594
|
color: var(--navbar-fg);
|
|
193
595
|
background-color: var(--navbar-hover-bg);
|
|
194
596
|
}
|
|
195
|
-
/*
|
|
597
|
+
/* 换了 Quarto 自带的图标:它塞的是一枚「开关」位图(bi-toggle-off/on 的
|
|
598
|
+
data-URI background-image),填充色写死在 SVG 里,和我们这套描边图标不是
|
|
599
|
+
一味,紧挨着色板胶囊时两枚圆角疙瘩还容易看混。改画一枚对比圆盘:
|
|
600
|
+
::before 只做遮罩,颜色吃 currentColor,明暗两种顶栏都自动适配;
|
|
601
|
+
夜间(.alternate)旋转半圈,实心那半换边,点一下能看出翻面了。 */
|
|
602
|
+
#quarto-header .quarto-color-scheme-toggle .bi::before {
|
|
603
|
+
content: "";
|
|
604
|
+
width: 1rem;
|
|
605
|
+
height: 1rem;
|
|
606
|
+
background-image: none;
|
|
607
|
+
background-color: currentColor;
|
|
608
|
+
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6.2' fill='none' stroke='%23000' stroke-width='1.2'/%3E%3Cpath d='M8 2.4a5.6 5.6 0 0 0 0 11.2z' fill='%23000'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
609
|
+
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6.2' fill='none' stroke='%23000' stroke-width='1.2'/%3E%3Cpath d='M8 2.4a5.6 5.6 0 0 0 0 11.2z' fill='%23000'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
610
|
+
transition: transform 0.18s ease;
|
|
611
|
+
}
|
|
612
|
+
#quarto-header .quarto-color-scheme-toggle.alternate .bi::before {
|
|
613
|
+
transform: rotate(180deg);
|
|
614
|
+
}
|
|
615
|
+
@media (prefers-reduced-motion: reduce) {
|
|
616
|
+
#quarto-header .quarto-color-scheme-toggle .bi::before {
|
|
617
|
+
transition: none;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
/* 次级导航:gitcn 风半透明毛玻璃(sticky 由 headroom 提供)。
|
|
621
|
+
底边线不画在这里:它只跟着面包屑行走,会在侧栏列上方断开,
|
|
622
|
+
并可能与窄屏侧栏的底边叠成两条;唯一那条线归 #quarto-header 所有。 */
|
|
196
623
|
nav.quarto-secondary-nav {
|
|
197
624
|
background-color: var(--navbar-secondary-bg);
|
|
198
625
|
-webkit-backdrop-filter: blur(8px);
|
|
199
626
|
backdrop-filter: blur(8px);
|
|
200
|
-
border-bottom:
|
|
627
|
+
border-bottom: 0;
|
|
201
628
|
min-height: 2.75rem;
|
|
202
629
|
padding-top: 0;
|
|
203
630
|
padding-bottom: 0;
|
|
@@ -219,7 +646,7 @@ nav.quarto-secondary-nav .quarto-btn-toggle {
|
|
|
219
646
|
}
|
|
220
647
|
/* 修「>」与前后文字不在一条水平线:条目做成 flex 行(清掉 Quarto 的 .33em padding);
|
|
221
648
|
分隔符不用 ">" 字符——Segoe UI 的 ">" 在字框内光学偏高(盒居中≠光学居中,CJK 字形
|
|
222
|
-
偏满放大观感),改用 SVG chevron(mask + currentColor
|
|
649
|
+
偏满放大观感),改用 SVG chevron(mask + currentColor,与常见文档站一致)几何居中、
|
|
223
650
|
与字体度量彻底解耦;箭头左右等距:左距 = 本元素 margin-left,右距 = li 的 flex gap;
|
|
224
651
|
ol 自身 margin 清零,标题块 nav→标题的间距由 .quarto-title-breadcrumbs 统一控制 */
|
|
225
652
|
.quarto-page-breadcrumbs .breadcrumb {
|