@chengzhao-dev/dsh-quarto-book 0.4.2 → 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
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
{
|
|
2
|
+
"metadata": {
|
|
3
|
+
"name": "Quarto Book Flexoki Light",
|
|
4
|
+
"revision": 1,
|
|
5
|
+
"license": "SPDX-License-Identifier: MIT",
|
|
6
|
+
"copyright": [
|
|
7
|
+
"SPDX-FileCopyrightText: Steph Ango (Flexoki, MIT)",
|
|
8
|
+
"SPDX-FileCopyrightText: 2020 Waqar Ahmed <waqar.17a@gmail.com> (skylighting 结构基础)"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"background-color": "#f2f0e5",
|
|
12
|
+
"editor-colors": {
|
|
13
|
+
"BackgroundColor": "#f2f0e5",
|
|
14
|
+
"BracketMatching": "#e6e4d9",
|
|
15
|
+
"CodeFolding": "#f2f0e5",
|
|
16
|
+
"CurrentLine": "#f2f0e5",
|
|
17
|
+
"CurrentLineNumber": "#100f0f",
|
|
18
|
+
"IconBorder": "#f2f0e5",
|
|
19
|
+
"IndentationLine": "#e6e4d9",
|
|
20
|
+
"LineNumbers": "#6f6e69",
|
|
21
|
+
"MarkBookmark": "#205ea6",
|
|
22
|
+
"MarkBreakpointActive": "#af3029",
|
|
23
|
+
"MarkBreakpointDisabled": "#5e409d",
|
|
24
|
+
"MarkBreakpointReached": "#ad8301",
|
|
25
|
+
"MarkError": "#af3029",
|
|
26
|
+
"MarkExecution": "#5e409d",
|
|
27
|
+
"MarkWarning": "#bc5215",
|
|
28
|
+
"ModifiedLines": "#af3029",
|
|
29
|
+
"ReplaceHighlight": "#66800b",
|
|
30
|
+
"SavedLines": "#66800b",
|
|
31
|
+
"SearchHighlight": "#d0a215",
|
|
32
|
+
"Separator": "#dad8ce",
|
|
33
|
+
"SpellChecking": "#af3029",
|
|
34
|
+
"TabMarker": "#b7b5ac",
|
|
35
|
+
"TextSelection": "#e6e4d9",
|
|
36
|
+
"WordWrapMarker": "#dad8ce"
|
|
37
|
+
},
|
|
38
|
+
"text-styles": {
|
|
39
|
+
"Alert": {
|
|
40
|
+
"bold": true,
|
|
41
|
+
"selected-text-color": "#af3029",
|
|
42
|
+
"text-color": "#af3029"
|
|
43
|
+
},
|
|
44
|
+
"Annotation": {
|
|
45
|
+
"selected-text-color": "#6f6e69",
|
|
46
|
+
"text-color": "#6f6e69"
|
|
47
|
+
},
|
|
48
|
+
"Attribute": {
|
|
49
|
+
"selected-text-color": "#ad8301",
|
|
50
|
+
"text-color": "#ad8301"
|
|
51
|
+
},
|
|
52
|
+
"BaseN": {
|
|
53
|
+
"selected-text-color": "#5e409d",
|
|
54
|
+
"text-color": "#5e409d"
|
|
55
|
+
},
|
|
56
|
+
"BuiltIn": {
|
|
57
|
+
"selected-text-color": "#a02f6f",
|
|
58
|
+
"text-color": "#a02f6f"
|
|
59
|
+
},
|
|
60
|
+
"Char": {
|
|
61
|
+
"selected-text-color": "#24837b",
|
|
62
|
+
"text-color": "#24837b"
|
|
63
|
+
},
|
|
64
|
+
"Comment": {
|
|
65
|
+
"selected-text-color": "#575653",
|
|
66
|
+
"text-color": "#575653"
|
|
67
|
+
},
|
|
68
|
+
"CommentVar": {
|
|
69
|
+
"selected-text-color": "#575653",
|
|
70
|
+
"text-color": "#575653"
|
|
71
|
+
},
|
|
72
|
+
"Constant": {
|
|
73
|
+
"selected-text-color": "#5e409d",
|
|
74
|
+
"text-color": "#5e409d"
|
|
75
|
+
},
|
|
76
|
+
"ControlFlow": {
|
|
77
|
+
"selected-text-color": "#66800b",
|
|
78
|
+
"text-color": "#66800b"
|
|
79
|
+
},
|
|
80
|
+
"DataType": {
|
|
81
|
+
"selected-text-color": "#ad8301",
|
|
82
|
+
"text-color": "#ad8301"
|
|
83
|
+
},
|
|
84
|
+
"DecVal": {
|
|
85
|
+
"selected-text-color": "#5e409d",
|
|
86
|
+
"text-color": "#5e409d"
|
|
87
|
+
},
|
|
88
|
+
"Documentation": {
|
|
89
|
+
"selected-text-color": "#575653",
|
|
90
|
+
"text-color": "#575653"
|
|
91
|
+
},
|
|
92
|
+
"Error": {
|
|
93
|
+
"selected-text-color": "#af3029",
|
|
94
|
+
"text-color": "#af3029",
|
|
95
|
+
"underline": true
|
|
96
|
+
},
|
|
97
|
+
"Extension": {
|
|
98
|
+
"bold": true,
|
|
99
|
+
"selected-text-color": "#af3029",
|
|
100
|
+
"text-color": "#af3029"
|
|
101
|
+
},
|
|
102
|
+
"Float": {
|
|
103
|
+
"selected-text-color": "#5e409d",
|
|
104
|
+
"text-color": "#5e409d"
|
|
105
|
+
},
|
|
106
|
+
"Function": {
|
|
107
|
+
"selected-text-color": "#bc5215",
|
|
108
|
+
"text-color": "#bc5215",
|
|
109
|
+
"bold": true
|
|
110
|
+
},
|
|
111
|
+
"Import": {
|
|
112
|
+
"selected-text-color": "#af3029",
|
|
113
|
+
"text-color": "#af3029"
|
|
114
|
+
},
|
|
115
|
+
"Information": {
|
|
116
|
+
"selected-text-color": "#6f6e69",
|
|
117
|
+
"text-color": "#6f6e69"
|
|
118
|
+
},
|
|
119
|
+
"Keyword": {
|
|
120
|
+
"selected-text-color": "#66800b",
|
|
121
|
+
"text-color": "#66800b"
|
|
122
|
+
},
|
|
123
|
+
"Normal": {
|
|
124
|
+
"selected-text-color": "#100f0f",
|
|
125
|
+
"text-color": "#100f0f"
|
|
126
|
+
},
|
|
127
|
+
"Operator": {
|
|
128
|
+
"selected-text-color": "#af3029",
|
|
129
|
+
"text-color": "#af3029"
|
|
130
|
+
},
|
|
131
|
+
"Others": {
|
|
132
|
+
"selected-text-color": "#5e409d",
|
|
133
|
+
"text-color": "#5e409d"
|
|
134
|
+
},
|
|
135
|
+
"Preprocessor": {
|
|
136
|
+
"selected-text-color": "#205ea6",
|
|
137
|
+
"text-color": "#205ea6"
|
|
138
|
+
},
|
|
139
|
+
"RegionMarker": {
|
|
140
|
+
"selected-text-color": "#6f6e69",
|
|
141
|
+
"text-color": "#6f6e69"
|
|
142
|
+
},
|
|
143
|
+
"SpecialChar": {
|
|
144
|
+
"selected-text-color": "#5e409d",
|
|
145
|
+
"text-color": "#5e409d"
|
|
146
|
+
},
|
|
147
|
+
"SpecialString": {
|
|
148
|
+
"selected-text-color": "#24837b",
|
|
149
|
+
"text-color": "#24837b"
|
|
150
|
+
},
|
|
151
|
+
"String": {
|
|
152
|
+
"selected-text-color": "#24837b",
|
|
153
|
+
"text-color": "#24837b"
|
|
154
|
+
},
|
|
155
|
+
"Variable": {
|
|
156
|
+
"selected-text-color": "#205ea6",
|
|
157
|
+
"text-color": "#205ea6"
|
|
158
|
+
},
|
|
159
|
+
"VerbatimString": {
|
|
160
|
+
"selected-text-color": "#24837b",
|
|
161
|
+
"text-color": "#24837b"
|
|
162
|
+
},
|
|
163
|
+
"Warning": {
|
|
164
|
+
"selected-text-color": "#bc5215",
|
|
165
|
+
"text-color": "#bc5215"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"custom-styles": {
|
|
169
|
+
"INI Files": {
|
|
170
|
+
"Section": {
|
|
171
|
+
"selected-text-color": "#5e409d",
|
|
172
|
+
"text-color": "#5e409d"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"Python": {
|
|
176
|
+
"Builtin Function": {
|
|
177
|
+
"selected-text-color": "#a02f6f",
|
|
178
|
+
"text-color": "#a02f6f"
|
|
179
|
+
},
|
|
180
|
+
"Import": {
|
|
181
|
+
"selected-text-color": "#af3029",
|
|
182
|
+
"text-color": "#af3029"
|
|
183
|
+
},
|
|
184
|
+
"Special Variable": {
|
|
185
|
+
"selected-text-color": "#205ea6",
|
|
186
|
+
"text-color": "#205ea6"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"Rust": {
|
|
190
|
+
"Attribute": {
|
|
191
|
+
"selected-text-color": "#ad8301",
|
|
192
|
+
"text-color": "#ad8301"
|
|
193
|
+
},
|
|
194
|
+
"Macro": {
|
|
195
|
+
"selected-text-color": "#205ea6",
|
|
196
|
+
"text-color": "#205ea6"
|
|
197
|
+
},
|
|
198
|
+
"Self": {
|
|
199
|
+
"selected-text-color": "#a02f6f",
|
|
200
|
+
"text-color": "#a02f6f"
|
|
201
|
+
},
|
|
202
|
+
"Trait": {
|
|
203
|
+
"selected-text-color": "#bc5215",
|
|
204
|
+
"text-color": "#bc5215"
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"XML": {
|
|
208
|
+
"Element": {
|
|
209
|
+
"selected-text-color": "#205ea6",
|
|
210
|
+
"text-color": "#205ea6"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Palette: flexoki
|
|
2
|
+
|
|
3
|
+
编译默认色板。亮色用 Flexoki 的纸色页面(`#FFFCF0`)与墨色正文(`#100F0F`),暗色反转为墨色页面(`#100F0F`)与纸色正文(`#CECDC3`);链接遵循 Flexoki 官方 UI 映射:常态与正文同墨色(亮 `#100F0F` / 暗 `#CECDC3`)并保留下划线,hover 才转 `cy`(亮 `#24837B` / 暗 `#3AA99F`);`bl` 蓝只留给变量/属性与语法。代码语法色用本目录两份 skylighting 主题 `highlight-light.theme` / `highlight-dark.theme`,按 Flexoki 官方 VS Code 主题的语法映射取色([kepano/flexoki](https://github.com/kepano/flexoki)),不再用 Quarto 内置高亮。Solarized 作为运行时可选色板放在同级 `solarized/`,只覆盖令牌与语法色,不改编译配置。
|
|
4
|
+
|
|
5
|
+
一处抬色:亮色注释从官方 `#6F6E69` 抬到 base-700 `#575653`(代码底 `#F2F0E5` 上 4.47:1 → 6.42:1),行号同步用 `#575653`;暗色注释保持官方 `#878580`(`#1C1B1A` 上 4.67:1)。亮色强调色与正文同为 `#100F0F`,靠字重区分,不引入纯黑。官方文档注释档(亮 `#B7B5AC` / 暗 `#575653`)对比不足,未采用。取舍见 `knowledge/reading-surface.md` 的「颜色与对比度的取值依据」。
|
|
6
|
+
|
|
7
|
+
## 接线
|
|
8
|
+
|
|
9
|
+
| 项 | 路径 / 值 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| tokens | `palettes/flexoki/tokens.css` |
|
|
12
|
+
| SCSS light | `palettes/flexoki/theme-light.scss` |
|
|
13
|
+
| SCSS dark | `palettes/flexoki/theme-dark.scss` |
|
|
14
|
+
| highlight light | `assets/theme/palettes/flexoki/highlight-light.theme` |
|
|
15
|
+
| highlight dark | `assets/theme/palettes/flexoki/highlight-dark.theme` |
|
|
16
|
+
| brand mark | `palettes/flexoki/brand-mark.svg` |
|
|
17
|
+
| favicon light | `palettes/flexoki/favicon-light.svg` |
|
|
18
|
+
| favicon dark | `palettes/flexoki/favicon-dark.svg` |
|
|
19
|
+
|
|
20
|
+
`_quarto.yml` 的 `theme` 与 `highlight-style` 指向本目录;`css` 里本目录 tokens 必须排在 `palettes/solarized/tokens.css` 之前。
|
|
21
|
+
|
|
22
|
+
## 书标与标签图标
|
|
23
|
+
|
|
24
|
+
两套色板共用同一枚「打开的书」:`brand-mark.svg` 是纯黑剪影、中缝镂空,16px 仍可辨认,顶栏用 mask 取 `--navbar-fg`,一份覆盖该色板明暗;`favicon-light.svg` / `favicon-dark.svg` 是圆角方底加同一枚书,底色/书/中缝分别用该色板的纸色、墨色、动作色。Flexoki 亮色 `#FFFCF0`/`#100F0F`/`#24837B`,暗色 `#100F0F`/`#FFFCF0`/`#3AA99F`。
|
|
25
|
+
|
|
26
|
+
用书项目在 `_quarto.yml` 设 `book.favicon: theme/palettes/flexoki/favicon-light.svg`,并把另外三份 favicon 放进 `resources`。`includes/palette.html` 在 head 内按 `book-palette` 与明暗改 `link[rel=icon]` 的 href,只替换 URL 里的色板名与 `favicon-light|dark`,保留 Quarto 写好的 `./` / `../` 前缀;发布 URL 仍带 `palettes/<name>/`。
|
|
27
|
+
|
|
28
|
+
## 页面分层
|
|
29
|
+
|
|
30
|
+
| 表面 | 亮色 | 暗色 |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| page / navbar | `#FFFCF0` | `#100F0F` |
|
|
33
|
+
| surface-raised / code / card | `#F2F0E5` | `#1C1B1A` |
|
|
34
|
+
| 代码标题条 | `#E6E4D9` | `#282726` |
|
|
35
|
+
| 边框 | `#DAD8CE` | `#343331` |
|
|
36
|
+
| 正文 / 次要文字 | `#100F0F` / `#6F6E69` | `#CECDC3` / `#9F9D96` |
|
|
37
|
+
| 链接常态 / hover | `#100F0F` / `#24837B` | `#CECDC3` / `#3AA99F` |
|
|
38
|
+
|
|
39
|
+
Callout 是编辑注:2px 左条、`-bg: transparent`、无圆角;note 用中性 base-600 / base-400,warning 用官方 orange(亮 `#BC5215` / 暗 `#DA702C`),不把黄当警告。
|
|
40
|
+
|
|
41
|
+
暗色次要文字保留 Flexoki base-400 `#9F9D96`:它在墨色底上 7.05:1,介于 base-300 `#B7B5AC` 与 base-500 `#878580` 之间,比正文 `#CECDC3` 低一档,不抢正文但仍高于 4.5:1。
|
|
42
|
+
|
|
43
|
+
## 切换
|
|
44
|
+
|
|
45
|
+
Flexoki 是编译默认:`_quarto.yml` 的 `theme`、`highlight-style` 都指向本目录。读者切到 Solarized 只改 `html[data-palette="solarized"]`,由 `palettes/solarized/tokens.css` 与 `syntax.css` 覆盖;选择器与首屏恢复在 `includes/palette.html`。
|
|
46
|
+
|
|
47
|
+
## 来源
|
|
48
|
+
|
|
49
|
+
- [Flexoki](https://stephango.com/flexoki)(Steph Ango,MIT)
|
|
50
|
+
- [kepano/flexoki](https://github.com/kepano/flexoki)(色值与 VS Code 语法映射)
|
|
51
|
+
- Flexoki 官方 VS Code 主题 `Flexoki Light` / `Flexoki Dark`
|
|
52
|
+
|
|
53
|
+
本目录 9 个文件随主题资产走;项目副本只同步到 `_quarto.yml` 实际引用的那份。
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*-- scss:defaults --*/
|
|
2
|
+
|
|
3
|
+
$font-family-sans-serif: "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 !default;
|
|
4
|
+
|
|
5
|
+
$font-family-monospace: "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 !default;
|
|
6
|
+
|
|
7
|
+
$web-font-path: false !default;
|
|
8
|
+
|
|
9
|
+
$font-size-root: 16px !default;
|
|
10
|
+
$line-height-base: 1.75 !default;
|
|
11
|
+
$font-size-base: 1rem !default;
|
|
12
|
+
|
|
13
|
+
// Flexoki Dark:墨色页面 + accent-400;链接同正文色,cy 只作 hover / 动作色
|
|
14
|
+
$primary: #3AA99F !default;
|
|
15
|
+
|
|
16
|
+
$body-color: #CECDC3 !default;
|
|
17
|
+
$link-color: #CECDC3 !default;
|
|
18
|
+
|
|
19
|
+
$code-bg: #1C1B1A !default;
|
|
20
|
+
$code-color: #CECDC3 !default;
|
|
21
|
+
|
|
22
|
+
$body-secondary: #9F9D96 !default;
|
|
23
|
+
|
|
24
|
+
$navbar-fg: #CECDC3 !default;
|
|
25
|
+
|
|
26
|
+
$callout-color-note: #9F9D96 !default;
|
|
27
|
+
$callout-color-tip: #879A39 !default;
|
|
28
|
+
$callout-color-warning: #DA702C !default;
|
|
29
|
+
$callout-color-important: #8B7EC8 !default;
|
|
30
|
+
$callout-color-caution: #D14D41 !default;
|
|
31
|
+
$callout-color-danger: #D14D41 !default;
|
|
32
|
+
|
|
33
|
+
$border-color: rgba(206, 205, 195, 0.1) !default;
|
|
34
|
+
|
|
35
|
+
// 面包屑用页面底色:清除 darkly 默认灰底与内边距,明暗布局一致
|
|
36
|
+
$breadcrumb-bg: transparent !default;
|
|
37
|
+
$breadcrumb-padding-y: 0 !default;
|
|
38
|
+
$breadcrumb-padding-x: 0 !default;
|
|
39
|
+
$breadcrumb-margin-bottom: 0 !default;
|
|
40
|
+
|
|
41
|
+
$table-bg: transparent !default;
|
|
42
|
+
|
|
43
|
+
/*-- scss:rules --*/
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*-- scss:defaults --*/
|
|
2
|
+
|
|
3
|
+
$font-family-sans-serif: "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 !default;
|
|
4
|
+
|
|
5
|
+
$font-family-monospace: "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 !default;
|
|
6
|
+
|
|
7
|
+
$web-font-path: false !default;
|
|
8
|
+
|
|
9
|
+
$font-size-root: 16px !default;
|
|
10
|
+
$line-height-base: 1.75 !default;
|
|
11
|
+
$font-size-base: 1rem !default;
|
|
12
|
+
|
|
13
|
+
// Flexoki Light:纸色页面 + 低饱和功能色;链接同墨色,cy 只作 hover / 动作色
|
|
14
|
+
$primary: #24837B !default;
|
|
15
|
+
|
|
16
|
+
$body-color: #100F0F !default;
|
|
17
|
+
$link-color: #100F0F !default;
|
|
18
|
+
$code-bg: #F2F0E5 !default;
|
|
19
|
+
$code-color: #100F0F !default;
|
|
20
|
+
$border-color: #DAD8CE !default;
|
|
21
|
+
|
|
22
|
+
// 面包屑用页面底色:清除 darkly 默认灰底与内边距,明暗布局一致
|
|
23
|
+
$breadcrumb-bg: transparent !default;
|
|
24
|
+
$breadcrumb-padding-y: 0 !default;
|
|
25
|
+
$breadcrumb-padding-x: 0 !default;
|
|
26
|
+
$breadcrumb-margin-bottom: 0 !default;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
$navbar-bg: #FFFCF0 !default;
|
|
30
|
+
$navbar-fg: #100F0F !default;
|
|
31
|
+
|
|
32
|
+
// Callout 语义色(与 palettes/flexoki/tokens.css --callout-*-border 亮色一致;驱动编译期图标 data URI)
|
|
33
|
+
$callout-color-note: #6F6E69 !default;
|
|
34
|
+
$callout-color-tip: #66800B !default;
|
|
35
|
+
$callout-color-warning: #BC5215 !default;
|
|
36
|
+
$callout-color-important: #5E409D !default;
|
|
37
|
+
$callout-color-caution: #AF3029 !default;
|
|
38
|
+
$callout-color-danger: #AF3029 !default;
|
|
39
|
+
|
|
40
|
+
/*-- scss:rules --*/
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Palette: flexoki · Flexoki Light / Dark 色值
|
|
3
|
+
结构尺度见 css/tokens.css;本文件只提供语义颜色。
|
|
4
|
+
官方页面色:亮纸 #FFFCF0、暗底 #100F0F。
|
|
5
|
+
链接按官方映射取 cy(亮 accent-600 #24837B、暗 accent-400 #3AA99F),
|
|
6
|
+
常态与正文同墨色,hover 才转为 cy;bl 只留给变量/属性。
|
|
7
|
+
============================================================ */
|
|
8
|
+
|
|
9
|
+
body {
|
|
10
|
+
/* Flexoki Light 页面令牌 */
|
|
11
|
+
--body-color: #100F0F;
|
|
12
|
+
/* 正文强调(strong):与正文同一墨色,靠字重区分;Flexoki 的墨色本就不是纯黑。 */
|
|
13
|
+
--emphasis-color: #100F0F;
|
|
14
|
+
/* Flexoki Light 代码块色板;语义 token 由 Pandoc/Quarto 提供。 */
|
|
15
|
+
--code-bg: #F2F0E5;
|
|
16
|
+
--code-border: #DAD8CE;
|
|
17
|
+
--code-fg: #100F0F;
|
|
18
|
+
--code-title-bg: #E6E4D9;
|
|
19
|
+
--code-title-fg: #575653;
|
|
20
|
+
--line-num-color: #575653;
|
|
21
|
+
--inline-code-bg: rgba(16, 15, 15, 0.06);
|
|
22
|
+
--inline-code-fg: #100F0F;
|
|
23
|
+
--text-secondary: #6F6E69;
|
|
24
|
+
/* 链接常态=墨色(Tufte / 官方站点);hover 才用 cy。 */
|
|
25
|
+
--link-color: #100F0F;
|
|
26
|
+
--link-hover-color: #24837B;
|
|
27
|
+
--link-underline: rgba(16, 15, 15, 0.38);
|
|
28
|
+
--text-link: var(--link-color);
|
|
29
|
+
--text-underline: var(--link-underline);
|
|
30
|
+
--action-color: #24837B;
|
|
31
|
+
--table-border: #B7B5AC;
|
|
32
|
+
/* callout:编辑注,无填充;note 用中性灰,tip/warning/important/caution 用官方语义 accent。 */
|
|
33
|
+
--callout-note-border: #6F6E69;
|
|
34
|
+
--callout-note-bg: transparent;
|
|
35
|
+
--callout-tip-border: #66800B;
|
|
36
|
+
--callout-tip-bg: transparent;
|
|
37
|
+
--callout-warning-border: #BC5215;
|
|
38
|
+
--callout-warning-bg: transparent;
|
|
39
|
+
--callout-important-border: #5E409D;
|
|
40
|
+
--callout-important-bg: transparent;
|
|
41
|
+
--callout-caution-border: #AF3029;
|
|
42
|
+
--callout-caution-bg: transparent;
|
|
43
|
+
--copy-btn-bg: #FFFCF0;
|
|
44
|
+
--copy-btn-border: #DAD8CE;
|
|
45
|
+
--scrollbar-thumb: #B7B5AC;
|
|
46
|
+
--selection-bg: rgba(187, 220, 206, 0.30);
|
|
47
|
+
--mark-bg: rgba(208, 162, 21, 0.28);
|
|
48
|
+
--sidebar-hover-bg: rgba(16, 15, 15, 0.04);
|
|
49
|
+
--sidebar-active-bg: rgba(36, 131, 123, 0.10);
|
|
50
|
+
--sidebar-fg: #6F6E69;
|
|
51
|
+
--accent: var(--action-color);
|
|
52
|
+
--navbar-bg: #FFFCF0;
|
|
53
|
+
--navbar-fg: #100F0F;
|
|
54
|
+
--navbar-muted: #6F6E69;
|
|
55
|
+
--navbar-border: #DAD8CE;
|
|
56
|
+
--navbar-input-bg: #F2F0E5;
|
|
57
|
+
--navbar-hover-bg: rgba(16, 15, 15, 0.04);
|
|
58
|
+
--navbar-secondary-bg: rgba(255, 252, 240, 0.88);
|
|
59
|
+
--dot-accent: #24837B;
|
|
60
|
+
--card-bg: transparent;
|
|
61
|
+
--card-border: #DAD8CE;
|
|
62
|
+
--overlay-scrim: rgba(0, 0, 0, 0.42);
|
|
63
|
+
/* 右目录当前项与侧栏一致:正文色加色条,不涂链接色 */
|
|
64
|
+
--toc-active: var(--body-color);
|
|
65
|
+
--page-bg: #FFFCF0;
|
|
66
|
+
--surface-raised: #F2F0E5;
|
|
67
|
+
--sidebar-bg: transparent;
|
|
68
|
+
--line-num-bg: rgba(16, 15, 15, 0.04);
|
|
69
|
+
--line-hover-bg: rgba(36, 131, 123, 0.06);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
body.quarto-dark {
|
|
73
|
+
/* Flexoki Dark 页面令牌 */
|
|
74
|
+
--body-color: #CECDC3;
|
|
75
|
+
/* 正文强调(strong):比正文更亮一档的纸白 */
|
|
76
|
+
--emphasis-color: #FFFCF0;
|
|
77
|
+
/* Flexoki Dark 代码块色板,与页面明暗模式同步。 */
|
|
78
|
+
--code-bg: #1C1B1A;
|
|
79
|
+
--code-border: #343331;
|
|
80
|
+
--code-fg: #CECDC3;
|
|
81
|
+
--code-title-bg: #282726;
|
|
82
|
+
--code-title-fg: #B7B5AC;
|
|
83
|
+
--line-num-color: #878580;
|
|
84
|
+
--inline-code-bg: rgba(206, 205, 195, 0.08);
|
|
85
|
+
--inline-code-fg: #CECDC3;
|
|
86
|
+
--text-secondary: #9F9D96;
|
|
87
|
+
/* 链接常态=正文纸色;hover 才用 cy-400。 */
|
|
88
|
+
--link-color: #CECDC3;
|
|
89
|
+
--link-hover-color: #3AA99F;
|
|
90
|
+
--link-underline: rgba(206, 205, 195, 0.35);
|
|
91
|
+
--text-link: var(--link-color);
|
|
92
|
+
--text-underline: var(--link-underline);
|
|
93
|
+
--action-color: #3AA99F;
|
|
94
|
+
--table-border: #575653;
|
|
95
|
+
--callout-note-border: #9F9D96;
|
|
96
|
+
--callout-note-bg: transparent;
|
|
97
|
+
--callout-tip-border: #879A39;
|
|
98
|
+
--callout-tip-bg: transparent;
|
|
99
|
+
--callout-warning-border: #DA702C;
|
|
100
|
+
--callout-warning-bg: transparent;
|
|
101
|
+
--callout-important-border: #8B7EC8;
|
|
102
|
+
--callout-important-bg: transparent;
|
|
103
|
+
--callout-caution-border: #D14D41;
|
|
104
|
+
--callout-caution-bg: transparent;
|
|
105
|
+
/* 复制按钮边框:半透明 --text-secondary——按钮底与代码块底同为 #1C1B1A */
|
|
106
|
+
--copy-btn-bg: #1C1B1A;
|
|
107
|
+
--copy-btn-border: rgba(183, 181, 172, 0.4);
|
|
108
|
+
--scrollbar-thumb: #575653;
|
|
109
|
+
--selection-bg: rgba(30, 95, 91, 0.30);
|
|
110
|
+
--mark-bg: rgba(208, 162, 21, 0.28);
|
|
111
|
+
--sidebar-hover-bg: rgba(206, 205, 195, 0.06);
|
|
112
|
+
--sidebar-active-bg: rgba(58, 169, 159, 0.16);
|
|
113
|
+
--sidebar-fg: #9F9D96;
|
|
114
|
+
--accent: var(--action-color);
|
|
115
|
+
--navbar-bg: #100F0F;
|
|
116
|
+
--navbar-fg: #CECDC3;
|
|
117
|
+
--navbar-muted: #9F9D96;
|
|
118
|
+
--navbar-border: #343331;
|
|
119
|
+
--navbar-input-bg: #1C1B1A;
|
|
120
|
+
--navbar-hover-bg: rgba(206, 205, 195, 0.07);
|
|
121
|
+
--navbar-secondary-bg: rgba(16, 15, 15, 0.90);
|
|
122
|
+
--dot-accent: #3AA99F;
|
|
123
|
+
--card-bg: transparent;
|
|
124
|
+
--card-border: #343331;
|
|
125
|
+
--overlay-scrim: rgba(0, 0, 0, 0.62);
|
|
126
|
+
/* 右目录当前项与侧栏一致:正文色加色条,不涂链接色 */
|
|
127
|
+
--toc-active: var(--body-color);
|
|
128
|
+
--page-bg: #100F0F;
|
|
129
|
+
--surface-raised: #1C1B1A;
|
|
130
|
+
--sidebar-bg: transparent;
|
|
131
|
+
--line-num-bg: rgba(206, 205, 195, 0.05);
|
|
132
|
+
--line-hover-bg: rgba(58, 169, 159, 0.08);
|
|
133
|
+
color-scheme: dark;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@media (prefers-contrast: more) {
|
|
137
|
+
body {
|
|
138
|
+
--body-color: #000000;
|
|
139
|
+
--emphasis-color: #000000;
|
|
140
|
+
--link-color: #000000;
|
|
141
|
+
--code-border: #878580;
|
|
142
|
+
--card-border: #878580;
|
|
143
|
+
--navbar-border: #878580;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
body.quarto-dark {
|
|
147
|
+
--body-color: #FFFCF0;
|
|
148
|
+
--code-fg: #FFFCF0;
|
|
149
|
+
--inline-code-fg: #FFFCF0;
|
|
150
|
+
--emphasis-color: #FFFCF0;
|
|
151
|
+
--link-color: #FFFCF0;
|
|
152
|
+
--code-border: #6F6E69;
|
|
153
|
+
--card-border: #6F6E69;
|
|
154
|
+
--navbar-border: #6F6E69;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="书">
|
|
2
|
+
<path fill="#000000" fill-rule="evenodd" d="M32 18c-6-5-15-7-24-6v36c9-1 18 1 24 6 6-5 15-7 24-6V12c-9-1-18 1-24 6Zm-2 3v29c-5-3-11-4-17-4V16c6 0 12 2 17 5Zm4 0c5-3 11-5 17-5v30c-6 0-12 1-17 4V21Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="书">
|
|
2
|
+
<rect width="64" height="64" rx="14" fill="#1B2223"/>
|
|
3
|
+
<path fill="#D7DDD9" fill-rule="evenodd" d="M32 18c-6-5-15-7-24-6v36c9-1 18 1 24 6 6-5 15-7 24-6V12c-9-1-18 1-24 6Zm-2 3v29c-5-3-11-4-17-4V16c6 0 12 2 17 5Zm4 0c5-3 11-5 17-5v30c-6 0-12 1-17 4V21Z"/>
|
|
4
|
+
<rect x="30" y="20" width="4" height="32" fill="#8CB9AE"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="书">
|
|
2
|
+
<rect width="64" height="64" rx="14" fill="#F2EFE7"/>
|
|
3
|
+
<path fill="#2B3538" fill-rule="evenodd" d="M32 18c-6-5-15-7-24-6v36c9-1 18 1 24 6 6-5 15-7 24-6V12c-9-1-18 1-24 6Zm-2 3v29c-5-3-11-4-17-4V16c6 0 12 2 17 5Zm4 0c5-3 11-5 17-5v30c-6 0-12 1-17 4V21Z"/>
|
|
4
|
+
<rect x="30" y="20" width="4" height="32" fill="#2D6A66"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Palette: hill-light(山光)
|
|
2
|
+
|
|
3
|
+
运行时可选色板。读者在导航栏选「山光」后,`html[data-palette="hill-light"]` 与 `html[data-mode="dawn|noon|dusk|night"]` 同时生效:`tokens.css` 覆盖语义颜色,`syntax.css` 覆盖语法色。色值取自用户自己的仓库 `D:\Github\hill-light\hill-light-theme\css\tokens.css`(单一色值来源),四种时辰沿用原站命名:晓雾 `dawn`、午荫 `noon`、暮烟 `dusk`、夜月 `night`;夜月是唯一暗色时辰,其余三种都在浅纸上。
|
|
4
|
+
|
|
5
|
+
本插件与山光原站的取舍写在「与 hill-light 的偏离」一节:栏宽、字体、callout 类型色、语法色都没有照搬原站,理由逐条记录。
|
|
6
|
+
|
|
7
|
+
## 接线
|
|
8
|
+
|
|
9
|
+
| 项 | 路径 / 值 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| tokens | `palettes/hill-light/tokens.css` |
|
|
12
|
+
| syntax 覆盖 | `palettes/hill-light/syntax.css` |
|
|
13
|
+
| brand mark | `palettes/hill-light/brand-mark.svg` |
|
|
14
|
+
| favicon light | `palettes/hill-light/favicon-light.svg`(晓雾/午荫/暮烟共用) |
|
|
15
|
+
| favicon dark | `palettes/hill-light/favicon-dark.svg`(夜月) |
|
|
16
|
+
|
|
17
|
+
当前 `_quarto.yml` **不**引用本目录的 SCSS 与 highlight 主题,只挂 `tokens.css` + `syntax.css`,原因和 Solarized 不同:Quarto 只能编译一对 light/dark 高亮与一对 Bootstrap 主题,而山光有四种时辰,任何一种都会被编译期固定成两态。所以山光只做运行时层:语法色由 `syntax.css` 按 `html[data-palette="hill-light"][data-mode]` 覆盖 `code span.*`,没有 `.theme` 与 SCSS 素材。
|
|
18
|
+
|
|
19
|
+
## 四时切换
|
|
20
|
+
|
|
21
|
+
| 项 | 值 |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| 属性 | `html[data-palette="hill-light"][data-mode="dawn\|noon\|dusk\|night"]` |
|
|
24
|
+
| 存储键 | `localStorage["book-hill-mode"]` |
|
|
25
|
+
| 默认时辰 | 按本地时间:06–11 晓雾、11–17 午荫、17–20 暮烟,其余夜月 |
|
|
26
|
+
| 明暗 | `data-mode="night"` 同时声明 `color-scheme: dark`,`includes/palette.html` 的 `isDark()` 也以夜月为准 |
|
|
27
|
+
| Quarto 明暗钮 | 山光下隐藏(`css/nav.css`):山光的明暗由时辰决定,两套开关并存会互相看不出谁生效 |
|
|
28
|
+
| 控件 | 导航栏色板分段控件右侧的四段胶囊;≤575.98px 退成四个圆点 |
|
|
29
|
+
|
|
30
|
+
切走山光时 `data-mode` 被移除,避免其他色板误吃四时令牌。四种模式的 `body` 令牌用 `html[data-palette="hill-light"][data-mode="…"] body` 选择器,比共享的 `body` / `body.quarto-dark` 令牌(Flexoki 默认)特异性高,因此无论 Quarto 处在明暗哪一态,山光都稳定生效。
|
|
31
|
+
|
|
32
|
+
## 页面分层
|
|
33
|
+
|
|
34
|
+
| 表面 | 晓雾 dawn | 午荫 noon | 暮烟 dusk | 夜月 night |
|
|
35
|
+
| --- | --- | --- | --- | --- |
|
|
36
|
+
| page / navbar | `#F2EFE7` | `#FAF6EC` | `#F1E2D0` | `#1B2223` |
|
|
37
|
+
| surface-raised | `#F8F5EE` | `#FFFCF4` | `#F8EBDA` | `#232B2C` |
|
|
38
|
+
| 代码底 / 代码边 | `#E9E5DA` / `#D6D2C6` | `#F0EBDD` / `#D8D3C3` | `#E8D6C1` / `#D8C4AE` | `#283132` / `#3A4644` |
|
|
39
|
+
| 正文 / 次要文字 | `#2B3538` / `#58686B` | `#263230` / `#4F615B` | `#3A2C26` / `#67534A` | `#D7DDD9` / `#A2AEA9` |
|
|
40
|
+
| 动作色 / hover | `#2D6A66` / `#1F4F4C` | `#1D6A55` / `#14503F` | `#35645D` / `#264E49` | `#8CB9AE` / `#A9CFC5` |
|
|
41
|
+
| 表格行线 | `#DCD8CD` | `#E0DACC` | `#DECCB8` | `#313C3A` |
|
|
42
|
+
| 选中底色 | `#CFE0DA` | `#CCE5D8` | `#E4CFB6` | `#35514B` |
|
|
43
|
+
|
|
44
|
+
链接沿用本插件的「常态墨色 + 动作色下划线」,hover 才转动作色(山光原站是常态动作色);其余令牌直接映射原站语义。
|
|
45
|
+
|
|
46
|
+
## 对比度记录
|
|
47
|
+
|
|
48
|
+
`temp/hill-light-build/gen.py` 生成令牌时逐对校验,四种模式全部 ≥ 目标值:
|
|
49
|
+
|
|
50
|
+
| 组合 | 晓雾 | 午荫 | 暮烟 | 夜月 |
|
|
51
|
+
| --- | --- | --- | --- | --- |
|
|
52
|
+
| 正文 / 纸 | 10.95 | 12.31 | 10.54 | 11.72 |
|
|
53
|
+
| 次要文字 / 纸 | 5.07 | 6.09 | 5.67 | 7.05 |
|
|
54
|
+
| 图注 / 纸(≥3.0) | 4.63 | 5.24 | 4.75 | 5.07 |
|
|
55
|
+
| 动作色 / 纸 | 5.43 | 6.00 | 5.28 | 7.44 |
|
|
56
|
+
| 代码字 / 代码底 | 10.00 | 11.15 | 9.45 | 9.67 |
|
|
57
|
+
| 代码标题字 / 标题条 | 4.85 | 5.78 | 5.37 | 5.33 |
|
|
58
|
+
| callout 四型 / 纸(最低) | 5.15 | 6.16 | 4.87 | 6.70 |
|
|
59
|
+
| 边框 / 纸(≥1.3) | 1.32 | 1.39 | 1.33 | 1.65 |
|
|
60
|
+
|
|
61
|
+
callout 五型条色由山光的低饱和色相派生:note 用次要文字灰、tip 青绿、warning 赭黄、important 靛蓝、caution 砖红;四时各一套,全部 ≥4.5:1。
|
|
62
|
+
|
|
63
|
+
## 与 hill-light 的偏离
|
|
64
|
+
|
|
65
|
+
| 项 | 山光原站 | 本插件 | 理由 |
|
|
66
|
+
| --- | --- | --- | --- |
|
|
67
|
+
| 栏宽 | `--measure: 680px` | `--content-width: 840px` | 本插件面向 C++ 书籍:代码块、方向表、终端输出在 680px 下折行严重 |
|
|
68
|
+
| 字体 | 思源宋体 / 思源黑体 / JetBrains Mono(系统栈) | 自托管 LXGW Bright Medium / Code | 多数 Windows 用户没有思源宋体,会落到 SimSun;1.25MB 字体的取舍见 `knowledge/reading-surface.md` |
|
|
69
|
+
| callout | 五型同色,只靠图标形状区分 | 五型各一条 2px 色条 | 技术书里「这是注意还是危险」必须一眼可辨;只靠色相区分又违反 WCAG 1.4.1,所以色条 + 图标 + 标题词三重编码 |
|
|
70
|
+
| 语法高亮 | 单色(正文色 + 淡注释) | 四色克制版(关键字/字符串/数字/注释) | 代码是本书主体,单色会让长代码块难扫读;色相仍取山光的低饱和色 |
|
|
71
|
+
| 组件语言 | 3px 强调条、卡片式抬升面 | 2px 强调条、无卡片、发丝线 | 本插件全站统一的设计语言,三套色板共享,不随色板变化 |
|
|
72
|
+
| 链接 | 常态动作色 | 常态墨色 + 动作色下划线 | 同上,三套色板一致 |
|
|
73
|
+
| 行号色 | 直接取次要文字色(`#5F6E6F` / `#725F55` / `#87938E`) | 各压/抬一档(`#556565` / `#68554B` / `#8F9B96`) | 原值在各自代码底上 4.19–4.25:1,行号虽属辅助信息,但它是代码块里最常被读到的小字,够不到 4.5 线就压一档 |
|
|
74
|
+
|
|
75
|
+
## 来源
|
|
76
|
+
|
|
77
|
+
- 用户仓库 `D:\Github\hill-light\hill-light-theme`:`css/tokens.css`(四时令牌)、`DESIGN.md`(设计决策)
|
|
78
|
+
- 生成脚本:`temp/hill-light-build/gen.py`(令牌映射 + 语法色派生 + 对比度校验)
|