@taloswork/ose-shared 0.1.3 → 0.1.5
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/package.json +3 -3
- package/skills/document/SKILL.md +54 -47
- package/skills/document/assets/fonts/ChakraPetch-600.woff2 +0 -0
- package/skills/document/assets/fonts/DMSerifDisplay-400.woff2 +0 -0
- package/skills/document/assets/fonts/Lexend-500.woff2 +0 -0
- package/skills/document/assets/fonts/Nunito-700.woff2 +0 -0
- package/skills/document/assets/fonts/PlayfairDisplay-600.woff2 +0 -0
- package/skills/document/assets/fonts/Quicksand-600.woff2 +0 -0
- package/skills/document/assets/fonts/SpaceGrotesk-500.woff2 +0 -0
- package/skills/document/assets/fonts/Syne-700.woff2 +0 -0
- package/skills/document/assets/fonts/ZillaSlab-600.woff2 +0 -0
- package/skills/document/assets/fonts/fonts.json +314 -216
- package/skills/document/bin/html2pptx.cjs +7 -5
- package/skills/document/catalog.json +37 -19
- package/skills/document/layouts/README.md +1 -0
- package/skills/document/layouts/big-stat.tpl +1 -1
- package/skills/document/layouts/quote-aside.tpl +11 -0
- package/skills/document/layouts/slots.json +1 -1
- package/skills/document/motion/README.md +19 -1
- package/skills/document/motion/anthropic.json +29 -0
- package/skills/document/motion/apple.json +41 -0
- package/skills/document/motion/bistro-warm.json +16 -0
- package/skills/document/motion/black-gold.json +29 -0
- package/skills/document/motion/board-brief.json +14 -0
- package/skills/document/motion/bold-clash.json +16 -0
- package/skills/document/motion/branding.json +22 -0
- package/skills/document/motion/campus-teal.json +22 -0
- package/skills/document/motion/cinereel.json +23 -0
- package/skills/document/motion/clinic-care.json +22 -0
- package/skills/document/motion/cool.json +41 -0
- package/skills/document/motion/dark-glass.json +22 -0
- package/skills/document/motion/gov-brief.json +14 -0
- package/skills/document/motion/grid-tech.json +16 -0
- package/skills/document/motion/hand-drawn.json +23 -0
- package/skills/document/motion/ivory-gold.json +22 -0
- package/skills/document/motion/legal-slate.json +15 -0
- package/skills/document/motion/magazine-ink.json +29 -0
- package/skills/document/motion/mckinsey.json +28 -0
- package/skills/document/motion/memphis.json +16 -0
- package/skills/document/motion/mono.json +21 -0
- package/skills/document/motion/neon-cyber.json +42 -0
- package/skills/document/motion/olive-gold.json +22 -0
- package/skills/document/motion/organic-earth.json +15 -0
- package/skills/document/motion/pastel-saas.json +15 -0
- package/skills/document/motion/portfolio-noir.json +21 -0
- package/skills/document/motion/press-room.json +14 -0
- package/skills/document/motion/retro-press.json +15 -0
- package/skills/document/motion/sport-arena.json +16 -0
- package/skills/document/motion/swiss-grid.json +34 -0
- package/skills/document/motion/wedding-blush.json +15 -0
- package/skills/document/packs/README.md +20 -1
- package/skills/document/packs/board-brief/backdrop.html +4 -0
- package/skills/document/packs/board-brief/layouts/cover.tpl +12 -0
- package/skills/document/packs/board-brief/layouts/toc-agenda.tpl +20 -0
- package/skills/document/packs/board-brief/pack.css +27 -0
- package/skills/document/packs/press-room/backdrop.html +4 -0
- package/skills/document/packs/press-room/layouts/cover.tpl +12 -0
- package/skills/document/packs/press-room/layouts/section.tpl +13 -0
- package/skills/document/packs/press-room/pack.css +27 -0
- package/skills/document/styles/README.md +32 -4
- package/skills/document/styles/_samples/_groups/biz-premium.webp +0 -0
- package/skills/document/styles/_samples/_groups/creative.webp +0 -0
- package/skills/document/styles/_samples/_groups/editorial.webp +0 -0
- package/skills/document/styles/_samples/_groups/minimal.webp +0 -0
- package/skills/document/styles/_samples/_groups/natural.webp +0 -0
- package/skills/document/styles/_samples/_groups/tech-future.webp +0 -0
- package/skills/document/styles/_samples/anthropic.webp +0 -0
- package/skills/document/styles/_samples/apple.webp +0 -0
- package/skills/document/styles/_samples/bistro-warm.webp +0 -0
- package/skills/document/styles/_samples/black-gold.webp +0 -0
- package/skills/document/styles/_samples/board-brief.webp +0 -0
- package/skills/document/styles/_samples/bold-clash.webp +0 -0
- package/skills/document/styles/_samples/campus-teal.webp +0 -0
- package/skills/document/styles/_samples/cinereel.webp +0 -0
- package/skills/document/styles/_samples/clinic-care.webp +0 -0
- package/skills/document/styles/_samples/cool.webp +0 -0
- package/skills/document/styles/_samples/dark-glass.webp +0 -0
- package/skills/document/styles/_samples/gov-brief.webp +0 -0
- package/skills/document/styles/_samples/grid-tech.webp +0 -0
- package/skills/document/styles/_samples/hand-drawn.webp +0 -0
- package/skills/document/styles/_samples/ivory-gold.webp +0 -0
- package/skills/document/styles/_samples/legal-slate.webp +0 -0
- package/skills/document/styles/_samples/magazine-ink.webp +0 -0
- package/skills/document/styles/_samples/memphis.webp +0 -0
- package/skills/document/styles/_samples/mono.webp +0 -0
- package/skills/document/styles/_samples/neon-cyber.webp +0 -0
- package/skills/document/styles/_samples/olive-gold.webp +0 -0
- package/skills/document/styles/_samples/organic-earth.webp +0 -0
- package/skills/document/styles/_samples/pastel-saas.webp +0 -0
- package/skills/document/styles/_samples/portfolio-noir.webp +0 -0
- package/skills/document/styles/_samples/press-room.webp +0 -0
- package/skills/document/styles/_samples/retro-press.webp +0 -0
- package/skills/document/styles/_samples/sport-arena.webp +0 -0
- package/skills/document/styles/_samples/wedding-blush.webp +0 -0
- package/skills/document/styles/anthropic/skin.css +1 -1
- package/skills/document/styles/bistro-warm/backdrop.html +4 -0
- package/skills/document/styles/bistro-warm/skin.css +27 -0
- package/skills/document/styles/black-gold/skin.css +1 -1
- package/skills/document/styles/bold-clash/backdrop.html +4 -0
- package/skills/document/styles/bold-clash/skin.css +27 -0
- package/skills/document/styles/branding/skin.css +1 -1
- package/skills/document/styles/campus-teal/backdrop.html +3 -0
- package/skills/document/styles/campus-teal/skin.css +27 -0
- package/skills/document/styles/cinereel/skin.css +2 -2
- package/skills/document/styles/clinic-care/backdrop.html +4 -0
- package/skills/document/styles/clinic-care/skin.css +27 -0
- package/skills/document/styles/dark-glass/backdrop.html +4 -0
- package/skills/document/styles/dark-glass/skin.css +27 -0
- package/skills/document/styles/gov-brief/backdrop.html +4 -0
- package/skills/document/styles/gov-brief/skin.css +27 -0
- package/skills/document/styles/grid-tech/backdrop.html +37 -0
- package/skills/document/styles/grid-tech/skin.css +27 -0
- package/skills/document/styles/hand-drawn/skin.css +2 -2
- package/skills/document/styles/ivory-gold/skin.css +2 -2
- package/skills/document/styles/legal-slate/backdrop.html +6 -0
- package/skills/document/styles/legal-slate/skin.css +27 -0
- package/skills/document/styles/magazine-ink/skin.css +1 -1
- package/skills/document/styles/memphis/backdrop.html +5 -0
- package/skills/document/styles/memphis/skin.css +27 -0
- package/skills/document/styles/mono/skin.css +1 -1
- package/skills/document/styles/neon-cyber/backdrop.html +4 -0
- package/skills/document/styles/neon-cyber/skin.css +27 -0
- package/skills/document/styles/olive-gold/skin.css +1 -1
- package/skills/document/styles/organic-earth/backdrop.html +4 -0
- package/skills/document/styles/organic-earth/skin.css +27 -0
- package/skills/document/styles/pastel-saas/backdrop.html +4 -0
- package/skills/document/styles/pastel-saas/skin.css +27 -0
- package/skills/document/styles/portfolio-noir/backdrop.html +4 -0
- package/skills/document/styles/portfolio-noir/skin.css +27 -0
- package/skills/document/styles/retro-press/backdrop.html +6 -0
- package/skills/document/styles/retro-press/skin.css +27 -0
- package/skills/document/styles/sport-arena/backdrop.html +4 -0
- package/skills/document/styles/sport-arena/skin.css +27 -0
- package/skills/document/styles/wedding-blush/backdrop.html +6 -0
- package/skills/document/styles/wedding-blush/skin.css +27 -0
- package/skills/image-compose/LICENSE.txt +30 -0
- package/skills/image-compose/SKILL.md +137 -0
- package/skills/image-compose/bin/html2img.cjs +122 -0
|
@@ -1,218 +1,316 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
2
|
+
"_comment": "Single source of truth for the skill's bundled font set. Consumed by bin-src/html2pptx.mjs (base64 @font-face injection at render) and by scripts/deck-skin-samples.mjs + scripts/deck-fidelity.mjs (served from disk via page.route). Add a face HERE, drop the .woff2 beside it, and every renderer picks it up — never inline a base64 @font-face into a skin.css. `substitutesInvisibly: true` marks a neutral grotesque: it is NOT on any OS, so the native pptx text layer swaps it for Helvetica/Arial, but the swap differs by a hair and no reader would name it — such a face may lead a skin unbaked. A serif or display face is the opposite call: bake every rule that uses it, or the audience sees a different font (deck-layouts.test.ts enforces both directions, and gen-skin refuses a family that gets it wrong).",
|
|
3
|
+
"cjkUnicodeRange": "U+2E80-2EFF,U+3000-303F,U+3040-30FF,U+3200-4DBF,U+4E00-9FFF,U+F900-FAFF,U+FE30-FE4F,U+FF00-FFEF",
|
|
4
|
+
"cjk": [
|
|
5
|
+
{
|
|
6
|
+
"file": "NotoSansSC.woff2",
|
|
7
|
+
"families": [
|
|
8
|
+
"PingFang SC",
|
|
9
|
+
"Hiragino Sans GB",
|
|
10
|
+
"Microsoft YaHei",
|
|
11
|
+
"Noto Sans SC",
|
|
12
|
+
"Noto Sans CJK SC",
|
|
13
|
+
"Source Han Sans SC",
|
|
14
|
+
"WenQuanYi Zen Hei"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"file": "NotoSerifSC.woff2",
|
|
19
|
+
"families": [
|
|
20
|
+
"Songti SC",
|
|
21
|
+
"STSong",
|
|
22
|
+
"SimSun",
|
|
23
|
+
"Noto Serif SC",
|
|
24
|
+
"Noto Serif CJK SC",
|
|
25
|
+
"Source Han Serif SC"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"latin": [
|
|
30
|
+
{
|
|
31
|
+
"file": "Anton-Regular.woff2",
|
|
32
|
+
"families": [
|
|
33
|
+
"Anton"
|
|
34
|
+
],
|
|
35
|
+
"note": "Ultra-condensed display face. cinereel + ivory-gold use it for --font-head and BAKE their titles, which is why it survives into the pptx. Also staged into the xhs skill by scripts/build-xhs-skills.mjs.",
|
|
36
|
+
"license": "SIL OFL 1.1 (Google Fonts)"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"file": "Inter-Regular.woff2",
|
|
40
|
+
"families": [
|
|
41
|
+
"Inter"
|
|
42
|
+
],
|
|
43
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
44
|
+
"note": "Neutral UI grotesque. swiss-grid asks for it as its whole type system, ivory-gold as --font-body. Neither OS ships it, so before this entry even the backdrop/preview render fell back to Helvetica/Arial. Their native text still does — see _scope.",
|
|
45
|
+
"substitutesInvisibly": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"file": "GochiHand-Regular.woff2",
|
|
49
|
+
"families": [
|
|
50
|
+
"Gochi Hand"
|
|
51
|
+
],
|
|
52
|
+
"license": "Apache License 2.0 (Google Fonts)",
|
|
53
|
+
"note": "Handwriting face, hand-drawn's signature marker-pen heading. Latin-only, so a CJK deck barely shows it; and hand-drawn does NOT bake its titles, so the native text layer still resolves the stack's `cursive` keyword (LibreOffice → Snell Roundhand). Bundling fixes the backdrop/preview render only — see _scope."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"file": "BigShouldersDisplay-Bold.woff2",
|
|
57
|
+
"families": [
|
|
58
|
+
"Big Shoulders Display"
|
|
59
|
+
],
|
|
60
|
+
"weight": "700",
|
|
61
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
62
|
+
"note": "Ultra-condensed display face, narrower and more open-countered than Anton. cinereel's --font-head; picked to match the slidescarnival music-video template this skin is modelled on. Every rule that uses it is baked."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"file": "Jost-Regular.woff2",
|
|
66
|
+
"families": [
|
|
67
|
+
"Jost"
|
|
68
|
+
],
|
|
69
|
+
"weight": "400",
|
|
70
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
71
|
+
"note": "Geometric sans, cinereel's --font-body. Body copy is NOT baked (it must stay editable/searchable), so the native pptx text layer still substitutes — this face governs the backdrop and previews. See deck-design.md § Fonts.",
|
|
72
|
+
"substitutesInvisibly": true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"file": "Jost-SemiBold.woff2",
|
|
76
|
+
"families": [
|
|
77
|
+
"Jost"
|
|
78
|
+
],
|
|
79
|
+
"weight": "600",
|
|
80
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
81
|
+
"note": "The 600 companion, so bold body runs (.toc-title etc.) use a real semibold instead of a synthesised smear.",
|
|
82
|
+
"substitutesInvisibly": true
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"file": "Fraunces-SemiBold.woff2",
|
|
86
|
+
"families": [
|
|
87
|
+
"Fraunces"
|
|
88
|
+
],
|
|
89
|
+
"weight": "600",
|
|
90
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
91
|
+
"note": "anthropic 标题。有机人文衬线,替下与 black-gold/branding 共用的 Georgia。"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"file": "PublicSans-Regular.woff2",
|
|
95
|
+
"families": [
|
|
96
|
+
"Public Sans"
|
|
97
|
+
],
|
|
98
|
+
"weight": "400",
|
|
99
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
100
|
+
"note": "anthropic 正文。",
|
|
101
|
+
"substitutesInvisibly": true
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"file": "Manrope-Regular.woff2",
|
|
105
|
+
"families": [
|
|
106
|
+
"Manrope"
|
|
107
|
+
],
|
|
108
|
+
"weight": "400",
|
|
109
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
110
|
+
"note": "apple 正文。",
|
|
111
|
+
"substitutesInvisibly": true
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"file": "Manrope-Bold.woff2",
|
|
115
|
+
"families": [
|
|
116
|
+
"Manrope"
|
|
117
|
+
],
|
|
118
|
+
"weight": "700",
|
|
119
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
120
|
+
"note": "apple 标题。几何圆润无衬线,产品发布会的舞台感。",
|
|
121
|
+
"substitutesInvisibly": true
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"file": "BodoniModa-SemiBold.woff2",
|
|
125
|
+
"families": [
|
|
126
|
+
"Bodoni Moda"
|
|
127
|
+
],
|
|
128
|
+
"weight": "600",
|
|
129
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
130
|
+
"note": "black-gold 标题。高反差 didone,金融年报/奢侈品的经典。"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"file": "Lora-Regular.woff2",
|
|
134
|
+
"families": [
|
|
135
|
+
"Lora"
|
|
136
|
+
],
|
|
137
|
+
"weight": "400",
|
|
138
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
139
|
+
"note": "black-gold 正文衬线。"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"file": "CormorantGaramond-SemiBold.woff2",
|
|
143
|
+
"families": [
|
|
144
|
+
"Cormorant Garamond"
|
|
145
|
+
],
|
|
146
|
+
"weight": "600",
|
|
147
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
148
|
+
"note": "branding 标题。低反差优雅 garalde,品牌手册/美妆。"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"file": "Karla-Regular.woff2",
|
|
152
|
+
"families": [
|
|
153
|
+
"Karla"
|
|
154
|
+
],
|
|
155
|
+
"weight": "400",
|
|
156
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
157
|
+
"note": "branding + olive-gold 正文。带点个性的 grotesque。",
|
|
158
|
+
"substitutesInvisibly": true
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"file": "Sora-Regular.woff2",
|
|
162
|
+
"families": [
|
|
163
|
+
"Sora"
|
|
164
|
+
],
|
|
165
|
+
"weight": "400",
|
|
166
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
167
|
+
"note": "cool 正文。",
|
|
168
|
+
"substitutesInvisibly": true
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"file": "Sora-SemiBold.woff2",
|
|
172
|
+
"families": [
|
|
173
|
+
"Sora"
|
|
174
|
+
],
|
|
175
|
+
"weight": "600",
|
|
176
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
177
|
+
"note": "cool 标题。几何科技感,替下与 olive-gold 共用的 Avenir Next。",
|
|
178
|
+
"substitutesInvisibly": true
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"file": "IBMPlexSans-Regular.woff2",
|
|
182
|
+
"families": [
|
|
183
|
+
"IBM Plex Sans"
|
|
184
|
+
],
|
|
185
|
+
"weight": "400",
|
|
186
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
187
|
+
"note": "mckinsey 正文。",
|
|
188
|
+
"substitutesInvisibly": true
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"file": "IBMPlexSans-SemiBold.woff2",
|
|
192
|
+
"families": [
|
|
193
|
+
"IBM Plex Sans"
|
|
194
|
+
],
|
|
195
|
+
"weight": "600",
|
|
196
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
197
|
+
"note": "mckinsey 标题。企业/咨询语气,替下与 apple/mono 共用的 Helvetica Neue。",
|
|
198
|
+
"substitutesInvisibly": true
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"file": "Archivo-Regular.woff2",
|
|
202
|
+
"families": [
|
|
203
|
+
"Archivo"
|
|
204
|
+
],
|
|
205
|
+
"weight": "400",
|
|
206
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
207
|
+
"note": "mono 正文。",
|
|
208
|
+
"substitutesInvisibly": true
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"file": "Archivo-SemiBold.woff2",
|
|
212
|
+
"families": [
|
|
213
|
+
"Archivo"
|
|
214
|
+
],
|
|
215
|
+
"weight": "600",
|
|
216
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
217
|
+
"note": "mono 标题。骨架清晰的中性 grotesque,极简报告。",
|
|
218
|
+
"substitutesInvisibly": true
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"file": "Marcellus-Regular.woff2",
|
|
222
|
+
"families": [
|
|
223
|
+
"Marcellus"
|
|
224
|
+
],
|
|
225
|
+
"weight": "400",
|
|
226
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
227
|
+
"note": "olive-gold 标题。古典罗马体大写,证书/招商的仪式感。"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"file": "SpaceGrotesk-500.woff2",
|
|
231
|
+
"families": [
|
|
232
|
+
"Space Grotesk"
|
|
233
|
+
],
|
|
234
|
+
"weight": "500",
|
|
235
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
236
|
+
"substitutesInvisibly": true,
|
|
237
|
+
"note": "Neutral-with-a-quirk grotesque (flat-sided o, angled terminals). dark-glass 的 --font-head。落到 Helvetica 只丢那点怪味,不烤。"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"file": "Syne-700.woff2",
|
|
241
|
+
"families": [
|
|
242
|
+
"Syne"
|
|
243
|
+
],
|
|
244
|
+
"weight": "700",
|
|
245
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
246
|
+
"note": "Extended geometric display,字宽与字重都反常规 —— memphis 的招牌。展示体,必烤。"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"file": "DMSerifDisplay-400.woff2",
|
|
250
|
+
"families": [
|
|
251
|
+
"DM Serif Display"
|
|
252
|
+
],
|
|
253
|
+
"weight": "400",
|
|
254
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
255
|
+
"note": "High-contrast display serif,retro-press 的标题脸。展示衬线,必烤。"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"file": "Quicksand-600.woff2",
|
|
259
|
+
"families": [
|
|
260
|
+
"Quicksand"
|
|
261
|
+
],
|
|
262
|
+
"weight": "600",
|
|
263
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
264
|
+
"substitutesInvisibly": true,
|
|
265
|
+
"note": "Rounded geometric sans,pastel-saas 的柔和标题。圆角是它唯一的怪味,落到 Helvetica 不至于换风格,不烤。"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"file": "ChakraPetch-600.woff2",
|
|
269
|
+
"families": [
|
|
270
|
+
"Chakra Petch"
|
|
271
|
+
],
|
|
272
|
+
"weight": "600",
|
|
273
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
274
|
+
"note": "Squared techno face,neon-grid 一类硬科技族的标题脸。展示体,必烤。"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"file": "Lexend-500.woff2",
|
|
278
|
+
"families": [
|
|
279
|
+
"Lexend"
|
|
280
|
+
],
|
|
281
|
+
"weight": "500",
|
|
282
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
283
|
+
"substitutesInvisibly": true,
|
|
284
|
+
"note": "为可读性设计的中性无衬线(字宽略放)。campus-teal 的标题脸;落到 Helvetica 只丢那点从容,不烤。"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"file": "Nunito-700.woff2",
|
|
288
|
+
"families": [
|
|
289
|
+
"Nunito"
|
|
290
|
+
],
|
|
291
|
+
"weight": "700",
|
|
292
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
293
|
+
"substitutesInvisibly": true,
|
|
294
|
+
"note": "圆角人文无衬线,clinic-care 的标题脸。圆角是它唯一的怪味,不至于换风格,不烤。"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"file": "PlayfairDisplay-600.woff2",
|
|
298
|
+
"families": [
|
|
299
|
+
"Playfair Display"
|
|
300
|
+
],
|
|
301
|
+
"weight": "600",
|
|
302
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
303
|
+
"note": "高反差过渡期衬线,wedding-blush 的标题脸。展示衬线,必烤。"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"file": "ZillaSlab-600.woff2",
|
|
307
|
+
"families": [
|
|
308
|
+
"Zilla Slab"
|
|
309
|
+
],
|
|
310
|
+
"weight": "600",
|
|
311
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
312
|
+
"note": "板衬线,bistro-warm 的标题脸 —— 菜单/招牌的口吻。衬线,必烤。"
|
|
313
|
+
}
|
|
314
|
+
],
|
|
315
|
+
"_scope": "These faces are injected as @font-face and therefore apply to the BROWSER render only — the raster backdrop, any --talos-bake:1 text, --rasterize output and styles/_samples previews. They do NOT reach the NATIVE pptx text layer: there a run carries only a typeface NAME, and the consuming app (PowerPoint / LibreOffice) substitutes whatever it has. So bundling a face makes a skin's own rendering correct, but a native title still needs --talos-bake:1 (see cinereel) or an OOXML embed via bin/pptx-embed-fonts.cjs to survive into the deck the audience opens."
|
|
218
316
|
}
|
|
@@ -148066,15 +148066,17 @@ async function fontManifest() {
|
|
|
148066
148066
|
}
|
|
148067
148067
|
return _fontManifest;
|
|
148068
148068
|
}
|
|
148069
|
-
async function faceCss(entries, range) {
|
|
148069
|
+
async function faceCss(entries, range, doc) {
|
|
148070
148070
|
const { dir } = await fontManifest();
|
|
148071
148071
|
const rules = [];
|
|
148072
148072
|
for (const entry of entries ?? []) {
|
|
148073
|
+
const families = doc ? (entry.families ?? []).filter((f) => doc.includes(f)) : entry.families ?? [];
|
|
148074
|
+
if (!families.length) continue;
|
|
148073
148075
|
const path = (0, import_node_path.join)(dir, entry.file);
|
|
148074
148076
|
if (!(0, import_node_fs.existsSync)(path)) continue;
|
|
148075
148077
|
const b64 = (await (0, import_promises.readFile)(path).catch(() => null))?.toString("base64");
|
|
148076
148078
|
if (!b64) continue;
|
|
148077
|
-
for (const family of
|
|
148079
|
+
for (const family of families) {
|
|
148078
148080
|
rules.push(
|
|
148079
148081
|
`@font-face{font-family:'${family}';src:local('${family}'),url(data:font/woff2;base64,${b64}) format('woff2');${entry.weight ? `font-weight:${entry.weight};` : ""}${range ? `unicode-range:${range};` : ""}font-display:swap}`
|
|
148080
148082
|
);
|
|
@@ -148083,10 +148085,10 @@ async function faceCss(entries, range) {
|
|
|
148083
148085
|
return rules.join("");
|
|
148084
148086
|
}
|
|
148085
148087
|
var _cjkFontCss;
|
|
148086
|
-
async function cjkFontFaceCss() {
|
|
148088
|
+
async function cjkFontFaceCss(doc) {
|
|
148087
148089
|
if (_cjkFontCss === void 0) {
|
|
148088
148090
|
const m = await fontManifest();
|
|
148089
|
-
_cjkFontCss = await faceCss(m.cjk, m.cjkUnicodeRange);
|
|
148091
|
+
_cjkFontCss = await faceCss(m.cjk, m.cjkUnicodeRange, doc);
|
|
148090
148092
|
}
|
|
148091
148093
|
return _cjkFontCss;
|
|
148092
148094
|
}
|
|
@@ -148317,7 +148319,7 @@ async function main() {
|
|
|
148317
148319
|
if (skinChart1) rawInlined = rawInlined.replaceAll("__CHART1__", skinChart1);
|
|
148318
148320
|
}
|
|
148319
148321
|
const tw = await tailwindCss();
|
|
148320
|
-
const cjk = !hasService && CJK_RE2.test(rawInlined) ? await cjkFontFaceCss() : "";
|
|
148322
|
+
const cjk = !hasService && CJK_RE2.test(rawInlined) ? await cjkFontFaceCss(rawInlined + skinCss + themeCss + SKELETON_CSS) : "";
|
|
148321
148323
|
const latin = await latinFontFaceCss(rawInlined + skinCss);
|
|
148322
148324
|
const fontCss = cjk + latin;
|
|
148323
148325
|
const html = injectHead(rawInlined, `${fontCss ? `<style>${fontCss}</style>` : ""}${tw ? `<style>${tw}</style>` : ""}<style>${themeCss}${SKELETON_CSS}${skinCss}</style>`);
|