@taloswork/ose-shared 0.1.2 → 0.1.3
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 +29 -33
- package/skills/document/assets/fonts/Archivo-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Archivo-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/BigShouldersDisplay-Bold.woff2 +0 -0
- package/skills/document/assets/fonts/BodoniModa-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/CormorantGaramond-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/Fraunces-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/GochiHand-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/Inter-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Jost-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Jost-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/Karla-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Lora-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Manrope-Bold.woff2 +0 -0
- package/skills/document/assets/fonts/Manrope-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Marcellus-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/PublicSans-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Sora-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Sora-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/fonts.json +218 -0
- package/skills/document/bin/deck-build.cjs +273 -5
- package/skills/document/bin/doc-gen.cjs +108 -23
- package/skills/document/bin/html2pptx.cjs +280 -49
- package/skills/document/catalog.json +25 -0
- package/skills/document/deck-design.md +191 -0
- package/skills/document/layouts/README.md +32 -0
- package/skills/document/layouts/banner-columns.tpl +9 -9
- package/skills/document/layouts/bento.tpl +3 -3
- package/skills/document/layouts/big-stat.tpl +3 -3
- package/skills/document/layouts/blocks-2x2.tpl +12 -12
- package/skills/document/layouts/brand-values.tpl +5 -5
- package/skills/document/layouts/cards-3.tpl +3 -3
- package/skills/document/layouts/cards-grid.tpl +3 -3
- package/skills/document/layouts/chart-full.tpl +3 -3
- package/skills/document/layouts/chart-kpi.tpl +3 -3
- package/skills/document/layouts/color-palette.tpl +5 -5
- package/skills/document/layouts/comparison.tpl +3 -3
- package/skills/document/layouts/concept-hub.tpl +3 -3
- package/skills/document/layouts/cover-centered.tpl +1 -1
- package/skills/document/layouts/cover-image.tpl +1 -1
- package/skills/document/layouts/cover-minimal.tpl +3 -3
- package/skills/document/layouts/cover-statement.tpl +3 -3
- package/skills/document/layouts/cover.tpl +1 -1
- package/skills/document/layouts/data-table.tpl +3 -3
- package/skills/document/layouts/dos-donts.tpl +14 -14
- package/skills/document/layouts/editorial-panel.tpl +11 -11
- package/skills/document/layouts/ending-contact.tpl +1 -1
- package/skills/document/layouts/ending.tpl +1 -1
- package/skills/document/layouts/funnel.tpl +3 -3
- package/skills/document/layouts/gantt.tpl +3 -3
- package/skills/document/layouts/hero.tpl +3 -3
- package/skills/document/layouts/icon-row.tpl +3 -3
- package/skills/document/layouts/image-full.tpl +5 -5
- package/skills/document/layouts/image-grid.tpl +3 -3
- package/skills/document/layouts/image-left.tpl +3 -3
- package/skills/document/layouts/list.tpl +3 -3
- package/skills/document/layouts/logo-guidelines.tpl +8 -8
- package/skills/document/layouts/map-distribution.tpl +3 -3
- package/skills/document/layouts/map-quad.tpl +6 -6
- package/skills/document/layouts/matrix-2x2.tpl +3 -3
- package/skills/document/layouts/numbered-brief.tpl +12 -12
- package/skills/document/layouts/org-tree.tpl +3 -3
- package/skills/document/layouts/problem-solution-banner.tpl +7 -7
- package/skills/document/layouts/problem-solution.tpl +3 -3
- package/skills/document/layouts/pyramid.tpl +3 -3
- package/skills/document/layouts/quote.tpl +1 -1
- package/skills/document/layouts/radar.tpl +3 -3
- package/skills/document/layouts/ring-progress.tpl +3 -3
- package/skills/document/layouts/section-fullbleed.tpl +3 -3
- package/skills/document/layouts/section-image.tpl +1 -1
- package/skills/document/layouts/section-stat.tpl +1 -1
- package/skills/document/layouts/section.tpl +1 -1
- package/skills/document/layouts/slots.json +1 -1
- package/skills/document/layouts/split-two-col.tpl +3 -3
- package/skills/document/layouts/stats-chart.tpl +3 -3
- package/skills/document/layouts/steps-serpentine.tpl +11 -11
- package/skills/document/layouts/steps-vertical.tpl +3 -3
- package/skills/document/layouts/steps.tpl +3 -3
- package/skills/document/layouts/team-row.tpl +4 -4
- package/skills/document/layouts/three-kpi.tpl +3 -3
- package/skills/document/layouts/timeline.tpl +3 -3
- package/skills/document/layouts/title-meta.tpl +5 -5
- package/skills/document/layouts/title.tpl +2 -2
- package/skills/document/layouts/toc-agenda.tpl +3 -3
- package/skills/document/layouts/toc-editorial.tpl +15 -0
- package/skills/document/layouts/toc-panel.tpl +4 -4
- package/skills/document/layouts/toc.tpl +3 -3
- package/skills/document/layouts/transition.tpl +1 -1
- package/skills/document/layouts/two-kpi.tpl +3 -3
- package/skills/document/layouts/type-specimen.tpl +10 -10
- package/skills/document/layouts/versus.tpl +3 -3
- package/skills/document/motion/README.md +11 -0
- package/skills/document/packs/README.md +9 -0
- package/skills/document/styles/README.md +36 -15
- package/skills/document/styles/_contract-defaults.css +55 -0
- 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/black-gold.webp +0 -0
- package/skills/document/styles/_samples/branding.webp +0 -0
- package/skills/document/styles/_samples/cinereel.webp +0 -0
- package/skills/document/styles/_samples/cool.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/magazine-ink.webp +0 -0
- package/skills/document/styles/_samples/mckinsey.webp +0 -0
- package/skills/document/styles/_samples/mono.webp +0 -0
- package/skills/document/styles/_samples/olive-gold.webp +0 -0
- package/skills/document/styles/_samples/swiss-grid.webp +0 -0
- package/skills/document/styles/anthropic/backdrop.html +4 -0
- package/skills/document/styles/anthropic/skin.css +15 -8
- package/skills/document/styles/apple/backdrop.html +4 -1
- package/skills/document/styles/apple/skin.css +5 -2
- package/skills/document/styles/black-gold/backdrop.html +3 -0
- package/skills/document/styles/black-gold/skin.css +15 -8
- package/skills/document/styles/branding/backdrop.html +4 -0
- package/skills/document/styles/branding/skin.css +14 -7
- package/skills/document/styles/cinereel/skin.css +28 -10
- package/skills/document/styles/cool/backdrop.html +3 -0
- package/skills/document/styles/cool/skin.css +5 -2
- package/skills/document/styles/hand-drawn/skin.css +14 -6
- package/skills/document/styles/ivory-gold/skin.css +19 -6
- package/skills/document/styles/magazine-ink/skin.css +6 -1
- package/skills/document/styles/mckinsey/backdrop.html +5 -0
- package/skills/document/styles/mckinsey/skin.css +5 -2
- package/skills/document/styles/mono/backdrop.html +6 -0
- package/skills/document/styles/mono/skin.css +5 -2
- package/skills/document/styles/olive-gold/backdrop.html +5 -0
- package/skills/document/styles/olive-gold/skin.css +15 -8
- package/skills/document/styles/swiss-grid/skin.css +6 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taloswork/ose-shared",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Talos cross-OSE shared library — skills + MCP servers auto-loaded into every OSE (P93 2026-07-27).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -10,6 +10,6 @@
|
|
|
10
10
|
"publishConfig": {
|
|
11
11
|
"access": "public"
|
|
12
12
|
},
|
|
13
|
-
"_talosPublishHash": "sha256-
|
|
14
|
-
"_talosPublishedAt": "2026-09-
|
|
13
|
+
"_talosPublishHash": "sha256-RfTV3yagoQYs34T0xBwaQJ1l6PXSqIzzesBbFROxxaA",
|
|
14
|
+
"_talosPublishedAt": "2026-09-03T06:44:08.968Z"
|
|
15
15
|
}
|
package/skills/document/SKILL.md
CHANGED
|
@@ -47,39 +47,32 @@ script only when:
|
|
|
47
47
|
split into a second call and do NOT drop the style question):
|
|
48
48
|
**(1) content source** (提供材料 / 联网调研 / 自由创作); **(2) scenario** (pitch /
|
|
49
49
|
内审 / 销售 / 讲座 / 发布会 / 培训 / 大会 — sets tone, density, required sections);
|
|
50
|
-
**(3) style — pick ONE
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
14 cards). If you catch yourself sending fewer than 13 skin cards, you mis-applied the
|
|
56
|
-
text cap — send all 13.
|
|
57
|
-
One option per skin `{ label: skin 名, description: <the skin's **picker one-liner**
|
|
58
|
-
from styles/README.md, copied VERBATIM — one short line, must NOT wrap, no 首选/风/
|
|
59
|
-
keynote padding>, imagePath: <absolute path to styles/_samples/<skin>.webp under the
|
|
60
|
-
skill dir> }`. **The `适用场景` column is for MATCHING a skin to the scenario ONLY —
|
|
61
|
-
never copy it (or synthesize from it) into the shown `description`; the description is
|
|
62
|
-
the fixed picker one-liner, nothing else.** Those sample images are
|
|
63
|
-
**PRE-RENDERED** WebP (a fixed cover + content page stacked per skin, all the same size)
|
|
64
|
-
and shipped with the skill — pass them straight through as `imagePath`; do NOT
|
|
65
|
-
render anything at question time. (The picker UI lays the cards out itself; the skill
|
|
66
|
-
only supplies the options + images.) `styles/README.md` lists each skin's 适用场景 +
|
|
67
|
-
light/dark; order the cards best-fit-for-scenario first, but show them all.
|
|
68
|
-
**ALSO add one more option AFTER the skins** so the user can bring their OWN template:
|
|
50
|
+
**(3) style — pick ONE 风格。两级选择,名单一律读 `catalog.json`,本文件不列族名。**
|
|
51
|
+
第一级(放在这次四问里):展示 `catalog.json` 的 **`groups`** 作为 image-card 选项,
|
|
52
|
+
`{ label: group.name_cn, description: <该 group 的 scenarios 前两项,用 " · " 连接>,
|
|
53
|
+
imagePath: <skill 目录下 group.sample 的绝对路径> }`。大类顺序按 Q2 的场景答案匹配
|
|
54
|
+
`group.scenarios`,最贴合的排前面。**外加一张卡放在最后**:
|
|
69
55
|
`{ label: "使用我的模板文件", description: "复用现成 PPT 的版式/风格", filePick: "file" }`
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
56
|
+
(无 imagePath,渲染成文件夹卡)。选中它 → 走 `pptx-tokenize`/`pptx-theme` 复用路径
|
|
57
|
+
(rewrite.md B2),不进下面的第二级。
|
|
58
|
+
|
|
59
|
+
第二级(四问返回后**单独发一次单问题调用**):把所选 group 下的 `entries` 展示为
|
|
60
|
+
image-card,`{ label: entry.name_cn, description: entry.oneliner(**逐字照抄,不得改写、
|
|
61
|
+
不得加"风"/"首选"之类的尾巴**), imagePath: <entry.sample 的绝对路径> }`。
|
|
62
|
+
**该 group 只有一个 entry 时跳过第二级,直接用它。** 用户在别处已经点名族 id 的,
|
|
63
|
+
两级全跳过。
|
|
64
|
+
|
|
65
|
+
样图都是**预渲染**的 WebP,随 skill 一起分发 —— 直接把路径传过去,**不要在提问时渲染任何东西**。
|
|
66
|
+
|
|
67
|
+
选中的 `entry.id` 即 `--style` 的取值:`html2pptx deck.html out.pptx --style <id>`。
|
|
68
|
+
entry 是 skin 还是 pack 由 `catalog.json` 决定,渲染命令**完全相同**,不需要分情况处理。
|
|
77
69
|
**(4) slide count.**
|
|
78
70
|
**Keep the call LEAN — it streams in full before the panel becomes interactive,
|
|
79
71
|
so every extra token is dead wait.** Questions (1)(2)(4) pass options as **bare
|
|
80
72
|
label strings** (e.g. `["提供材料","联网调研","自由创作"]`) — NO per-option
|
|
81
73
|
`description`/`detail` objects; each question stem is ONE short sentence. The ONLY
|
|
82
|
-
descriptions in the whole call are Q3's
|
|
74
|
+
descriptions in the whole call are Q3's group descriptions (第二级的族 one-liner 在
|
|
75
|
+
单独那次调用里,不算进这次的四问). Skip any chat
|
|
83
76
|
preamble before the tool (or keep it to a single short line) — the questions speak
|
|
84
77
|
for themselves.
|
|
85
78
|
Every question carries an implicit "其他/自定义" free-text escape (the panel adds
|
|
@@ -88,9 +81,12 @@ script only when:
|
|
|
88
81
|
"small/quick" — only an explicit user spec or "你决定" skips it.
|
|
89
82
|
|
|
90
83
|
**Pick the skin** (in this order): a remembered deck-skin preference → user named
|
|
91
|
-
a style →
|
|
92
|
-
|
|
93
|
-
|
|
84
|
+
a style → 按 Q2 的场景去匹配 `catalog.json` 里 group/entry 的 `scenarios`(要 clean/
|
|
85
|
+
formal/light 的就再按 `entry.mode === "light"` 收窄)→ 仍并列时取最贴合那个 group 的
|
|
86
|
+
第一个 entry。**本文件不写死任何族 id** —— 名单只有 `catalog.json` 一份,写在这里的
|
|
87
|
+
默认族会在下一次增删族时静默过期,而没有任何闸门抓得住。`styles/README.md` 是同一份
|
|
88
|
+
名单的人读版,用来理解各族的气质,不作为选择依据。Never unstyled. After the user
|
|
89
|
+
confirms, save the preference to memory.
|
|
94
90
|
|
|
95
91
|
**Custom style (user picked 其他/自定义 on Q3)** — clarify which route, **prefer B
|
|
96
92
|
(derive a bespoke look)**:
|
|
@@ -101,9 +97,9 @@ script only when:
|
|
|
101
97
|
palette → fill the class contract; see deck-design "build a skin from a reference
|
|
102
98
|
image"). *(A deck given here is for its STYLE — distinct from a deck given as
|
|
103
99
|
content, which is text-only; see content-pipeline Q1.)*
|
|
104
|
-
- **A — map to the nearest of
|
|
100
|
+
- **A — map to the nearest of catalog 里的族** (they only described a vibe): pick the
|
|
105
101
|
closest, render its sample, confirm.
|
|
106
|
-
- **C — tweak an existing skin** ("
|
|
102
|
+
- **C — tweak an existing skin** ("刚才那个族但换绿色"): clone it, swap accent/palette or
|
|
107
103
|
flip light↔dark.
|
|
108
104
|
Then render a cover+content sample of the result and confirm (same image-card step as
|
|
109
105
|
a normal pick) before authoring; save the resulting preference to memory.
|
|
@@ -218,7 +214,7 @@ Fidelity-decision self-correct, but pointed at your OWN output:
|
|
|
218
214
|
- `bin/xlsx-recalc.cjs <in.xlsx> <out.xlsx>` — re-evaluate all formulas (HyperFormula) and cache the results, keeping the formulas. Use when a spreadsheet's formula cells show stale/blank values.
|
|
219
215
|
- `bin/doc-run.cjs <script.js> [args…]` — run a custom Node script with the engine's libraries bundled in (`require("pptxgenjs"|"docx"|"xlsx"|"pdf-lib"|"jszip"|"pizzip"|"hyperformula")` guaranteed on any machine; `--list` prints the registry). The long-tail escape hatch when no verb fits — see rewrite.md "Custom scripts"; ALWAYS doc-validate the output.
|
|
220
216
|
- `bin/html2pptx.cjs <deck.html|snapshot.layout.json> <out.pptx> [--style <skin>] [--backdrop <variant>] [--theme <theme.json>] [--editable] [--rasterize]` — **THE deck path**: write slide HTML (`<section class="slide" data-layout="…">` on a 1280×720 canvas), Chromium lays it out → NATIVE editable pptx. **Compose from `layouts/*.tpl` (structure) + `--style <skin>` (paint)** — the preferred structure/skin split (`styles/README.md`); `--style` injects the skin's CSS, fills each `.slide-backdrop`, colors `data-chart` from the skin. `--backdrop <variant>` picks a signature backdrop. **DEFAULT = hybrid**: each slide's visuals bake into a full-fidelity raster backdrop with native EDITABLE text on top; auto-falls back to plain native if backdrop capture is unavailable. `--editable` = plain native only (effects flatten). `--rasterize` = full image slides (ZERO editability — tell the user). Advisory warnings on hardcoded brand colors + repeated layouts (P3). Runs in the app's Chromium OR bundled headless Chromium (Playwright) — works off-app (CI/cloud); layout JSON works anywhere. **Tailwind + `size="1".."7"` scale available** (vendored offline). See deck-design.md + layouts/README.md. `[--theme <theme.json>]` is the legacy path (superseded by `--style`). **Don't confuse the two `--style` flags:** html2pptx's `--style` = the whole deck **skin** (backgrounds, cards, the lot); doc-gen's `--style` on **docx/pdf** is a different, narrower flag that borrows only the skin's ONE accent color onto black-text paper (a document, not a deck).
|
|
221
|
-
- `bin/deck-build.cjs <spec.json> <deck.html>` — **THE FAST deck path** for catalog slides: emit a COMPACT spec (per slide a `layout` id + its content `slots` `{…}`, plus `rows` for list/figure layouts and an optional `chart`) and this reads each `layouts/<id>.tpl`, fills it, and assembles `deck.html` — so you stream ~content only, not ~40KB of boilerplate HTML (much faster). Then `html2pptx deck.html out.pptx --style <spec.style>` as usual. **What each layout takes is in `layouts/slots.json`** (`slots` + `rows` per layout; `"chart":"derived"` means the layout BUILDS its chart from its rows — pass rows, never `chart`). Un-filled slots fall back to the template default, but a spec the catalog can't satisfy (unknown layout/slot/field, a `rows` block with no data, a figure row missing its numbers) **exits 1 and writes nothing** — fix the spec rather than shipping demo data. For a **bespoke** slide the catalog can't express, hand-author that ONE `<section>` and append it to deck.html (deck-build handles the catalog slides). spec: `{ "style":"
|
|
217
|
+
- `bin/deck-build.cjs <spec.json> <deck.html>` — **THE FAST deck path** for catalog slides: emit a COMPACT spec (per slide a `layout` id + its content `slots` `{…}`, plus `rows` for list/figure layouts and an optional `chart`) and this reads each `layouts/<id>.tpl`, fills it, and assembles `deck.html` — so you stream ~content only, not ~40KB of boilerplate HTML (much faster). Then `html2pptx deck.html out.pptx --style <spec.style>` as usual. **What each layout takes is in `layouts/slots.json`** (`slots` + `rows` per layout; `"chart":"derived"` means the layout BUILDS its chart from its rows — pass rows, never `chart`). Un-filled slots fall back to the template default, but a spec the catalog can't satisfy (unknown layout/slot/field, a `rows` block with no data, a figure row missing its numbers) **exits 1 and writes nothing** — fix the spec rather than shipping demo data. For a **bespoke** slide the catalog can't express, hand-author that ONE `<section>` and append it to deck.html (deck-build handles the catalog slides). spec: `{ "style":"<catalog entry id>", "slides":[ {"layout":"cover","slots":{"title":"…"}}, {"layout":"chart-kpi","slots":{…},"chart":{…}}, {"layout":"gantt","slots":{…},"rows":{"cols":[{"label":"Q1"}],"tasks":[{"name":"调研","from":1,"to":2}]}} ] }`.
|
|
222
218
|
|
|
223
219
|
All scripts are Node and print a machine-readable result plus a human note. On a
|
|
224
220
|
missing dependency or unreadable file they exit non-zero with a clear message —
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
{
|
|
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.",
|
|
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
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"file": "GochiHand-Regular.woff2",
|
|
48
|
+
"families": [
|
|
49
|
+
"Gochi Hand"
|
|
50
|
+
],
|
|
51
|
+
"license": "Apache License 2.0 (Google Fonts)",
|
|
52
|
+
"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."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"file": "BigShouldersDisplay-Bold.woff2",
|
|
56
|
+
"families": [
|
|
57
|
+
"Big Shoulders Display"
|
|
58
|
+
],
|
|
59
|
+
"weight": "700",
|
|
60
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
61
|
+
"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."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"file": "Jost-Regular.woff2",
|
|
65
|
+
"families": [
|
|
66
|
+
"Jost"
|
|
67
|
+
],
|
|
68
|
+
"weight": "400",
|
|
69
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
70
|
+
"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."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"file": "Jost-SemiBold.woff2",
|
|
74
|
+
"families": [
|
|
75
|
+
"Jost"
|
|
76
|
+
],
|
|
77
|
+
"weight": "600",
|
|
78
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
79
|
+
"note": "The 600 companion, so bold body runs (.toc-title etc.) use a real semibold instead of a synthesised smear."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"file": "Fraunces-SemiBold.woff2",
|
|
83
|
+
"families": [
|
|
84
|
+
"Fraunces"
|
|
85
|
+
],
|
|
86
|
+
"weight": "600",
|
|
87
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
88
|
+
"note": "anthropic 标题。有机人文衬线,替下与 black-gold/branding 共用的 Georgia。"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"file": "PublicSans-Regular.woff2",
|
|
92
|
+
"families": [
|
|
93
|
+
"Public Sans"
|
|
94
|
+
],
|
|
95
|
+
"weight": "400",
|
|
96
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
97
|
+
"note": "anthropic 正文。"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"file": "Manrope-Regular.woff2",
|
|
101
|
+
"families": [
|
|
102
|
+
"Manrope"
|
|
103
|
+
],
|
|
104
|
+
"weight": "400",
|
|
105
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
106
|
+
"note": "apple 正文。"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"file": "Manrope-Bold.woff2",
|
|
110
|
+
"families": [
|
|
111
|
+
"Manrope"
|
|
112
|
+
],
|
|
113
|
+
"weight": "700",
|
|
114
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
115
|
+
"note": "apple 标题。几何圆润无衬线,产品发布会的舞台感。"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"file": "BodoniModa-SemiBold.woff2",
|
|
119
|
+
"families": [
|
|
120
|
+
"Bodoni Moda"
|
|
121
|
+
],
|
|
122
|
+
"weight": "600",
|
|
123
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
124
|
+
"note": "black-gold 标题。高反差 didone,金融年报/奢侈品的经典。"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"file": "Lora-Regular.woff2",
|
|
128
|
+
"families": [
|
|
129
|
+
"Lora"
|
|
130
|
+
],
|
|
131
|
+
"weight": "400",
|
|
132
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
133
|
+
"note": "black-gold 正文衬线。"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"file": "CormorantGaramond-SemiBold.woff2",
|
|
137
|
+
"families": [
|
|
138
|
+
"Cormorant Garamond"
|
|
139
|
+
],
|
|
140
|
+
"weight": "600",
|
|
141
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
142
|
+
"note": "branding 标题。低反差优雅 garalde,品牌手册/美妆。"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"file": "Karla-Regular.woff2",
|
|
146
|
+
"families": [
|
|
147
|
+
"Karla"
|
|
148
|
+
],
|
|
149
|
+
"weight": "400",
|
|
150
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
151
|
+
"note": "branding + olive-gold 正文。带点个性的 grotesque。"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"file": "Sora-Regular.woff2",
|
|
155
|
+
"families": [
|
|
156
|
+
"Sora"
|
|
157
|
+
],
|
|
158
|
+
"weight": "400",
|
|
159
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
160
|
+
"note": "cool 正文。"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"file": "Sora-SemiBold.woff2",
|
|
164
|
+
"families": [
|
|
165
|
+
"Sora"
|
|
166
|
+
],
|
|
167
|
+
"weight": "600",
|
|
168
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
169
|
+
"note": "cool 标题。几何科技感,替下与 olive-gold 共用的 Avenir Next。"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"file": "IBMPlexSans-Regular.woff2",
|
|
173
|
+
"families": [
|
|
174
|
+
"IBM Plex Sans"
|
|
175
|
+
],
|
|
176
|
+
"weight": "400",
|
|
177
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
178
|
+
"note": "mckinsey 正文。"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"file": "IBMPlexSans-SemiBold.woff2",
|
|
182
|
+
"families": [
|
|
183
|
+
"IBM Plex Sans"
|
|
184
|
+
],
|
|
185
|
+
"weight": "600",
|
|
186
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
187
|
+
"note": "mckinsey 标题。企业/咨询语气,替下与 apple/mono 共用的 Helvetica Neue。"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"file": "Archivo-Regular.woff2",
|
|
191
|
+
"families": [
|
|
192
|
+
"Archivo"
|
|
193
|
+
],
|
|
194
|
+
"weight": "400",
|
|
195
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
196
|
+
"note": "mono 正文。"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"file": "Archivo-SemiBold.woff2",
|
|
200
|
+
"families": [
|
|
201
|
+
"Archivo"
|
|
202
|
+
],
|
|
203
|
+
"weight": "600",
|
|
204
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
205
|
+
"note": "mono 标题。骨架清晰的中性 grotesque,极简报告。"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"file": "Marcellus-Regular.woff2",
|
|
209
|
+
"families": [
|
|
210
|
+
"Marcellus"
|
|
211
|
+
],
|
|
212
|
+
"weight": "400",
|
|
213
|
+
"license": "SIL OFL 1.1 (Google Fonts)",
|
|
214
|
+
"note": "olive-gold 标题。古典罗马体大写,证书/招商的仪式感。"
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"_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
|
+
}
|