@litfamily/litopencode 1.0.16 → 1.0.17

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.
Files changed (117) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README-Ko-KR.md +11 -11
  3. package/README.md +11 -11
  4. package/dist/activation-routing.js +1 -1
  5. package/dist/features.js +2 -2
  6. package/dist/skills.js +6 -4
  7. package/docs/assets/readme/badge-version.svg +1 -1
  8. package/docs/reference-Ko-KR.md +1 -1
  9. package/package.json +1 -1
  10. package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +1 -3
  11. package/skills/lit-docx/SKILL.md +80 -19
  12. package/skills/lit-docx/references/components.md +253 -0
  13. package/skills/lit-docx/references/direction-step.md +234 -0
  14. package/skills/lit-docx/references/examples/01-report-ko.md +160 -0
  15. package/skills/lit-docx/references/examples/02-brief-ko.md +58 -0
  16. package/skills/lit-docx/references/examples/03-manual-ko.md +107 -0
  17. package/skills/lit-docx/references/examples/04-proposal-ko.md +93 -0
  18. package/skills/lit-docx/references/examples/05-memo-ko.md +42 -0
  19. package/skills/lit-docx/references/examples/06-journal-en.md +84 -0
  20. package/skills/lit-docx/references/examples/07-report-en.md +137 -0
  21. package/skills/lit-docx/references/examples/08-journal-ko.md +93 -0
  22. package/skills/lit-docx/references/examples/09-brief-en.md +64 -0
  23. package/skills/lit-docx/references/page-composition.md +306 -0
  24. package/skills/lit-docx/references/tonalities/brief.md +104 -0
  25. package/skills/lit-docx/references/tonalities/journal.md +101 -0
  26. package/skills/lit-docx/references/tonalities/manual.md +111 -0
  27. package/skills/lit-docx/references/tonalities/memo.md +105 -0
  28. package/skills/lit-docx/references/tonalities/proposal.md +101 -0
  29. package/skills/lit-docx/references/tonalities/report.md +126 -0
  30. package/skills/lit-docx/run.py +2 -1
  31. package/skills/lit-docx/scripts/convert_md_to_docx.py +384 -67
  32. package/skills/lit-docx/scripts/craft_docx.py +204 -1
  33. package/skills/lit-docx/scripts/docx_design.py +2445 -0
  34. package/skills/lit-docx/scripts/docx_layout.py +959 -0
  35. package/skills/lit-docx/scripts/slop_lint.py +23 -6
  36. package/skills/lit-docx/templates/tonalities/brief.yaml +29 -0
  37. package/skills/lit-docx/templates/tonalities/journal.yaml +26 -0
  38. package/skills/lit-docx/templates/tonalities/manual.yaml +27 -0
  39. package/skills/lit-docx/templates/tonalities/memo.yaml +27 -0
  40. package/skills/lit-docx/templates/tonalities/proposal.yaml +27 -0
  41. package/skills/lit-docx/templates/tonalities/report.yaml +27 -0
  42. package/skills/lit-pptx/NOTICE.md +1 -1
  43. package/skills/lit-pptx/SKILL.md +108 -19
  44. package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf +0 -0
  45. package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf +0 -0
  46. package/skills/lit-pptx/references/density-and-fill.md +283 -0
  47. package/skills/lit-pptx/references/direction-step.md +249 -0
  48. package/skills/lit-pptx/references/examples/01-ops-review-ledger-ko.md +173 -0
  49. package/skills/lit-pptx/references/examples/02-launch-pitch-signal-en.md +153 -0
  50. package/skills/lit-pptx/references/examples/03-field-survey-atlas-ko.md +120 -0
  51. package/skills/lit-pptx/references/examples/04-lecture-chalk-ko.md +132 -0
  52. package/skills/lit-pptx/references/examples/05-research-talk-paper-en.md +162 -0
  53. package/skills/lit-pptx/references/examples/06-policy-briefing-gazette-ko.md +176 -0
  54. package/skills/lit-pptx/references/examples/07-annual-story-studio-en.md +131 -0
  55. package/skills/lit-pptx/references/examples/08-reliability-keynote-night-en.md +182 -0
  56. package/skills/lit-pptx/references/examples/09-status-update-ledger-en.md +147 -0
  57. package/skills/lit-pptx/references/examples/10-investor-pitch-signal-ko.md +136 -0
  58. package/skills/lit-pptx/references/examples/11-forecast-review-night-ko.md +177 -0
  59. package/skills/lit-pptx/references/examples/12-exhibition-proposal-studio-ko.md +149 -0
  60. package/skills/lit-pptx/references/layout-families.md +470 -0
  61. package/skills/lit-pptx/references/title-treatments.md +271 -0
  62. package/skills/lit-pptx/references/tonalities/atlas.md +132 -0
  63. package/skills/lit-pptx/references/tonalities/chalk.md +132 -0
  64. package/skills/lit-pptx/references/tonalities/gazette.md +137 -0
  65. package/skills/lit-pptx/references/tonalities/ledger.md +151 -0
  66. package/skills/lit-pptx/references/tonalities/night.md +148 -0
  67. package/skills/lit-pptx/references/tonalities/paper.md +136 -0
  68. package/skills/lit-pptx/references/tonalities/signal.md +148 -0
  69. package/skills/lit-pptx/references/tonalities/studio.md +149 -0
  70. package/skills/lit-pptx/scripts/compile-deck.js +68 -21
  71. package/skills/lit-pptx/scripts/craft-thresholds.json +45 -1
  72. package/skills/lit-pptx/scripts/craft_extras.py +37 -8
  73. package/skills/lit-pptx/scripts/deck_output.py +654 -0
  74. package/skills/lit-pptx/scripts/embed_fonts.py +2 -2
  75. package/skills/lit-pptx/scripts/layout_inventory.py +35 -2
  76. package/skills/lit-pptx/scripts/lib/directive-parser.js +2 -2
  77. package/skills/lit-pptx/scripts/lib/font-map.js +4 -4
  78. package/skills/lit-pptx/scripts/lib/grid-resolver.js +521 -0
  79. package/skills/lit-pptx/scripts/lib/layout-resolver.js +403 -21
  80. package/skills/lit-pptx/scripts/lib/markdown-loader.js +6 -4
  81. package/skills/lit-pptx/scripts/lib/render-adapter-html.js +3 -9
  82. package/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +500 -113
  83. package/skills/lit-pptx/scripts/lib/render-pack.js +3558 -0
  84. package/skills/lit-pptx/scripts/lib/slide-ast.js +55 -24
  85. package/skills/lit-pptx/scripts/lib/spec-validator.js +2 -2
  86. package/skills/lit-pptx/scripts/lib/template-registry.js +335 -11
  87. package/skills/lit-pptx/scripts/qa_deck.py +48 -13
  88. package/skills/lit-pptx/scripts/validate_pptx.py +17 -5
  89. package/skills/lit-pptx/specs/template-enrollment-contract.md +4 -4
  90. package/skills/lit-pptx/templates/boilerplate_professional.css +13 -13
  91. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +1 -1
  92. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +5 -2
  93. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +20 -20
  94. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +1 -11
  95. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +10 -7
  96. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +17 -17
  97. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +8 -8
  98. package/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +105 -0
  99. package/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +110 -0
  100. package/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +106 -0
  101. package/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +107 -0
  102. package/skills/lit-pptx/templates/tonalities/night/pack.yaml +106 -0
  103. package/skills/lit-pptx/templates/tonalities/paper/pack.yaml +111 -0
  104. package/skills/lit-pptx/templates/tonalities/signal/pack.yaml +107 -0
  105. package/skills/lit-pptx/templates/tonalities/studio/pack.yaml +105 -0
  106. package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +1 -1
  107. package/skills/lit-typographic-motion/engine/stage/capture.mjs +2 -2
  108. package/skills/lit-typographic-motion/engine/treatment.mjs +1 -1
  109. package/skills/lit-typographic-motion/fonts/pins.json +2 -2
  110. package/skills/lit-typographic-motion/gate.mjs +1 -1
  111. package/skills/lit-typographic-motion/references/stage.md +1 -1
  112. package/skills/lit-typographic-motion/references/style-bibles.md +2 -2
  113. package/skills/lit-typographic-motion/references/treatment.md +1 -1
  114. package/skills/lit-typographic-motion/references/type-craft.md +3 -3
  115. package/skills/managed-skill-manifest.json +288 -44
  116. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf +0 -0
  117. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf +0 -0
@@ -0,0 +1,105 @@
1
+ # Studio: a magazine spread. The 12-column grid is visible, titles live in a side rail or open a
2
+ # page at large size, real numbers are set huge, splits are asymmetric, and a dark ochre accent
3
+ # marks the one thing to look at. Wrong for dense data reviews: editorial white space starves tables.
4
+ id: studio
5
+ name: Studio
6
+ version: "1.0.0"
7
+ intent: "Editorial narratives on a visible grid with large numerals."
8
+ canvas: ["16:9", "4:3"]
9
+
10
+ # Pretendard by default; the A2Z map below applies only when the source asks (faces: a2z).
11
+ faces:
12
+ display: Pretendard Bold
13
+ title: Pretendard Bold
14
+ body: Pretendard Regular
15
+ label: Pretendard Regular
16
+ numeral: Pretendard Bold
17
+ faces-pretendard-only:
18
+ display: Pretendard Bold
19
+ title: Pretendard Bold
20
+ body: Pretendard Regular
21
+ label: Pretendard Regular
22
+ numeral: Pretendard Bold
23
+ faces-a2z:
24
+ display: A2Z Black
25
+ title: A2Z Medium
26
+ body: Pretendard Regular
27
+ label: Pretendard Regular
28
+ numeral: A2Z Black
29
+
30
+ palette:
31
+ ground: "#FFFFFF"
32
+ surface: "#F2F2F0"
33
+ ink: "#141414"
34
+ ink-muted: "#525252"
35
+ line: "#D2D2CE"
36
+ accent: "#8A5A00"
37
+ accent-deep: "#4D3200"
38
+ accent-tint: "#F5ECD9"
39
+ field: "#141414"
40
+ on-field: "#FFFFFF"
41
+ positive: "#1E7A3F"
42
+ negative: "#B3261E"
43
+ series: ["#8A5A00", "#141414", "#525252", "#3B5F7F"]
44
+
45
+ ramp: reading
46
+ hero: false
47
+ type-voice:
48
+ title-tracking: -1
49
+ display-tracking: -2
50
+ latin-case: sentence
51
+ figures: proportional
52
+
53
+ density: 10
54
+ variance: 8
55
+ radius: 0
56
+ edge: fill
57
+
58
+ treatments: [side-rail, statement, top-plain-large, bottom-anchor, overlay]
59
+ role-defaults:
60
+ content: side-rail
61
+ data: top-plain-large
62
+ data-takeaway: side-rail
63
+ sequence: side-rail
64
+ image: side-rail
65
+ statement: statement
66
+ reference: side-rail
67
+ definition: side-rail
68
+
69
+ decoration: [column-hairlines, numeral, rail-fill, colour-field, caption-band]
70
+ layout-families: [asymmetric-feature, big-number, image-split, image-full, photo-grid, text-two-column, chart-insight, kpi-row, timeline, comparison, statement]
71
+ # Display slides: the device a type-led cover, a statement, a big number and a closing's next step
72
+ # are drawn with (see references/layout-families.md, "Display slides").
73
+ display:
74
+ # The offset rail stood empty beside a quote: the sentence takes two hairlines instead.
75
+ statement: rules
76
+ number: tint
77
+ closing: band
78
+ covers: [cover-split-image, cover-rail, cover-numeral]
79
+ sections: [section-numeral, section-rail]
80
+ closings: [closing-contact-split, closing-summary-list]
81
+
82
+ table:
83
+ style: open
84
+ header: none
85
+ header-ink: ink
86
+ rules: header-rule
87
+ banding: none
88
+ numbers: right-tabular
89
+ totals: bold
90
+ chart:
91
+ gridlines: none
92
+ labels: direct
93
+ highlight: accent-on-muted
94
+ annotation: on
95
+ image:
96
+ bleed: allowed
97
+ crop: allowed
98
+ frame: none
99
+
100
+ fill-order: [change-family, step-up, anchor-visual, distribute]
101
+ avoid:
102
+ - large numerals that are not real figures
103
+ - column hairlines through text
104
+ - two side-rail slides with the same split in a row
105
+ - centred body text
@@ -10,7 +10,7 @@ Fonts bundled in this skill (paths relative to this file):
10
10
  - EMS single-stroke SVG fonts (EMSAllure, EMSFelix, EMSOsmotron, EMSReadability, EMSTech), fonts/stroke/*.svg: SIL OFL 1.1, licence at fonts/stroke/OFL.txt, credits at fonts/stroke/CREDITS
11
11
 
12
12
  Fonts reused by path from the sibling lit-pptx skill:
13
- - LitOpenCode Sans Regular and Bold, ../lit-pptx/pretendard-font/public/static/LitOpenCodeSans-{Regular,Bold}.otf: SIL OFL 1.1, licence at ../lit-pptx/pretendard-font/LICENSE.txt
13
+ - Pretendard Regular and Bold, ../lit-pptx/pretendard-font/public/static/Pretendard-{Regular,Bold}.otf: SIL OFL 1.1, licence at ../lit-pptx/pretendard-font/LICENSE.txt
14
14
 
15
15
  Fonts fetched at pre-warm (litopencode motion-runtime install) into the motion runtime cache,
16
16
  ${XDG_CACHE_HOME:-~/.cache}/litopencode/motion-runtime/fonts-<pin hash>/, each verified against fonts/pins.json:
@@ -30,8 +30,8 @@ export function stageFonts(skillRoot, state, pins) {
30
30
  const faces = [];
31
31
  for (const [stretch, width] of [[75, "75%"], [100, "100%"], [125, "125%"]]) for (const weight of [400, 700, 900]) faces.push({ family: "Archivo", weight, stretch: width, file: path.join(skillRoot, "fonts", `Archivo-${stretch}-${weight}.ttf`) });
32
32
  if (state.hangul === "lit-pptx") {
33
- faces.push({ family: "LitOpenCode Sans", weight: 400, file: path.resolve(skillRoot, pins.litPptxPair.Regular.path) }, { family: "LitOpenCode Sans", weight: 700, file: path.resolve(skillRoot, pins.litPptxPair.Bold.path) });
34
- } else faces.push({ family: "LitOpenCode Sans", weight: 400, file: path.join(state.fontDir, "Pretendard-Regular.otf") }, { family: "LitOpenCode Sans", weight: 700, file: path.join(state.fontDir, "Pretendard-Regular.otf") });
33
+ faces.push({ family: "Pretendard", weight: 400, file: path.resolve(skillRoot, pins.litPptxPair.Regular.path) }, { family: "Pretendard", weight: 700, file: path.resolve(skillRoot, pins.litPptxPair.Bold.path) });
34
+ } else faces.push({ family: "Pretendard", weight: 400, file: path.join(state.fontDir, "Pretendard-Regular.otf") }, { family: "Pretendard", weight: 700, file: path.join(state.fontDir, "Pretendard-Regular.otf") });
35
35
  faces.push({ family: "VT323", weight: 400, file: path.join(skillRoot, "fonts", "VT323-Regular.ttf") });
36
36
  faces.push({ family: "Silkscreen", weight: 400, file: path.join(skillRoot, "fonts", "Silkscreen-Regular.ttf") }, { family: "Silkscreen", weight: 700, file: path.join(skillRoot, "fonts", "Silkscreen-Bold.ttf") });
37
37
  faces.push({ family: "MesloLGS NF", weight: 400, file: path.join(state.fontDir, "MesloLGS-NF-Regular.ttf") });
@@ -14,7 +14,7 @@ export const textureKinds = Object.freeze(["grid", "gradient", "particles", "pho
14
14
  export const soundModes = Object.freeze(["generated", "supplied", "authored", "none"]);
15
15
  export const soundPalettes = Object.freeze(["glass", "warm", "pulse", "air"]);
16
16
  // The product's own verified faces: the families `/lit/fonts.css` serves and the type engine draws.
17
- export const productFaces = Object.freeze(["Archivo", "LitOpenCode Sans", "VT323", "Silkscreen", "MesloLGS NF", "Galmuri9"]);
17
+ export const productFaces = Object.freeze(["Archivo", "Pretendard", "VT323", "Silkscreen", "MesloLGS NF", "Galmuri9"]);
18
18
  const floorTenGenres = new Set(["announcement", "event", "explainer", "motion-graphics"]);
19
19
 
20
20
  // NFC, lowercase, then no whitespace and no punctuation.
@@ -13,8 +13,8 @@
13
13
  "Pretendard-LICENSE": { "url": "https://raw.githubusercontent.com/orioncactus/pretendard/v1.3.9/LICENSE", "sha256": "d31ddd9f2bed32fd7e302a205cf2380ba0de6529152d239ef99cfb6f261bfc04" }
14
14
  },
15
15
  "litPptxPair": {
16
- "Regular": { "path": "../lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf", "sha256": "c77d9a1b2941f4c30a9de454ff645753ddbd1a512cf56dca77377bba3b85d1ea" },
17
- "Bold": { "path": "../lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf", "sha256": "87fcc1bc47ea1d7c2a000808c53e4b3f9b7ca4a434a607644e25209b09167d65" },
16
+ "Regular": { "path": "../lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf", "sha256": "3ffbacde6ab8411f1d2db54bb9b1f0b3ee2a738932033722cf0388c06aed1c93" },
17
+ "Bold": { "path": "../lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf", "sha256": "2e91915fab54df71cc9598ebf608b2bdb54c6fe3c066ac61dff0bc44fca71cc7" },
18
18
  "licence": "../lit-pptx/pretendard-font/LICENSE.txt"
19
19
  },
20
20
  "bundled": {
@@ -283,7 +283,7 @@ export function checkRun(dir, options = {}) {
283
283
  const actionViolations = graphics.filter((g) => g.bbox && (g.bbox[0] < limits.actionSafeX - eps || g.bbox[1] < limits.actionSafeY - eps || g.bbox[2] > FRAME.width - limits.actionSafeX + eps || g.bbox[3] > FRAME.height - limits.actionSafeY + eps));
284
284
  checks["MO-C-05"] = actionViolations.length ? fail(`${actionViolations[0].elementId} at frame ${actionViolations[0].frame} crosses the 95% action-safe border`) : pass(`${new Set(graphics.map((g) => g.elementId)).size} graphic elements inside action-safe`);
285
285
  const trackingErrors = [], hangulErrors = [], outlineErrors = [], leadingErrors = [], measureErrors = [], measureNotes = [], breakErrors = [];
286
- const pairFiles = ["LitOpenCodeSans-Regular.otf", "LitOpenCodeSans-Bold.otf", "Galmuri9.ttf", "Pretendard-Regular.otf"];
286
+ const pairFiles = ["Pretendard-Regular.otf", "Pretendard-Bold.otf", "Galmuri9.ttf"];
287
287
  for (const box of boxes) {
288
288
  for (const run of box.runs ?? []) {
289
289
  if (run.script === "latin" && box.voice === "display" && run.trackingEm < limits.displayTrackingFloorEm - eps) trackingErrors.push(`"${box.text}" display tracking ${run.trackingEm}em @${box.frame}`);
@@ -41,7 +41,7 @@ is yours; the kit gives motion primitives, never ready-made scenes, objects or l
41
41
  - The page is served from `http://lit.stage/` with no listening socket. Only files inside `stage/`,
42
42
  the kit and the fonts are served; `..` and symlinks that leave the directory are refused.
43
43
  - Fonts: `/lit/fonts.css` declares the product's faces with `font-display: block`: `Archivo` (widths
44
- 75 %, 100 %, 125 %; weights 400, 700, 900), `LitOpenCode Sans` (400, 700; Hangul), `VT323`,
44
+ 75 %, 100 %, 125 %; weights 400, 700, 900), `Pretendard` (400, 700; Hangul), `VT323`,
45
45
  `Silkscreen` (400, 700), `MesloLGS NF` and `Galmuri9`. Use only these; the QA checks the platform
46
46
  font behind every copy line.
47
47
 
@@ -41,7 +41,7 @@ about payment systems, design systems and workflows that want nothing terminal-l
41
41
  - Contrast facts: bone on ink is about 16:1. Teal on ink is about 3.8:1, so teal is a rule, a bar or
42
42
  large type (32 px and up, or 25 px bold) only, never body copy.
43
43
  - Voices: Archivo display (static width x weight instances; width steps are Latin-only), MesloLGS NF
44
- for small machine annotations, the lit-pptx LitOpenCode Sans pair for Hangul running text.
44
+ for small machine annotations, the lit-pptx Pretendard pair for Hangul running text.
45
45
  - Motion: `slam` (180 ms on the proven deceleration curve) lands a title on a downbeat, `hold`
46
46
  keeps it still, `snap-cut` changes scene with no easing. Nothing bounces.
47
47
  - Passes: `swiss-grid` hairline rules, then a low-strength Bayer `dither` as a print texture, then
@@ -72,7 +72,7 @@ about payment systems, design systems and workflows that want nothing terminal-l
72
72
  - Palette: indigo `#0E1420` background, off-white `#E8ECEF` type, deep teal `#124559` and violet
73
73
  `#4C3B6E` gradient stops, coral `#E07856` for one punctuation moment.
74
74
  - Contrast facts: off-white clears 8:1 on every stop, so type sits directly on the flow.
75
- - Voices: Archivo display used calmly (little width or weight motion), LitOpenCode Sans for Hangul,
75
+ - Voices: Archivo display used calmly (little width or weight motion), Pretendard for Hangul,
76
76
  MesloLGS NF for small timestamps.
77
77
  - Motion: `drift` (a slow in-out curve over seconds, matched to the flow speed) and a short
78
78
  `surge-punch` tied to a gradient surge. No hold-then-snap rhythm as the default.
@@ -23,7 +23,7 @@ comparison with `request`, every quoted span (`"…"`, `“…”`, `'…'`, `
23
23
  | `beats[]` | `{t0, t1, purpose, onScreen, motion, sound}` in order, each at least 1.2 s, covering 0 to `durationSec` with no gap over 0.25 s. At least as many beats as the genre's arc has stages; `type-led` has one beat per supplied line. |
24
24
  | `subject` | `{name, source: user or invented, specifics[]}` with at least 2 concrete specifics: what it is or does, for whom, one distinctive detail. `source: user` only when the request names it. |
25
25
  | `visualDevices[]` | `{kind, role: subject, support or texture, beats[]}`; `beats` lists beat indices (from 0). Kinds: `illustration`, `diagram`, `chart`, `icon`, `shape`, `path`, `mask`, `depth3d`, `particles`, `grid`, `gradient`, `photo-texture`. |
26
- | `typePlan` | `{faces[], hierarchy, maxWordsOnScreen}`; faces come from `Archivo`, `LitOpenCode Sans`, `VT323`, `Silkscreen`, `MesloLGS NF`, `Galmuri9`. Optional `showIndex: true` prints a shot index on the type path. |
26
+ | `typePlan` | `{faces[], hierarchy, maxWordsOnScreen}`; faces come from `Archivo`, `Pretendard`, `VT323`, `Silkscreen`, `MesloLGS NF`, `Galmuri9`. Optional `showIndex: true` prints a shot index on the type path. |
27
27
  | `palette[]` | 3-6 entries `{hex: "#rrggbb", role}`. |
28
28
  | `sound` | `{mode, plan, ...}`. `mode` is `generated`, `supplied`, `authored` or `none`. |
29
29
  | `copy` | `{source: user or invented, lines[]}`. |
@@ -4,9 +4,9 @@
4
4
 
5
5
  | Voice | Latin | Hangul | Source |
6
6
  | --- | --- | --- | --- |
7
- | display | Archivo, static instances at widths 75/100/125 x weights 400/700/900 | LitOpenCode Sans Regular/Bold | Archivo instanced at development time from the pinned variable font (OFL); Hangul pair reused by path from `../lit-pptx` |
8
- | body | Archivo 400/700 | LitOpenCode Sans Regular/Bold | as above |
9
- | machine | MesloLGS NF | LitOpenCode Sans | Meslo fetched at pre-warm with its Apache-2.0 notice, the Apache text and the Vera/Arev notices |
7
+ | display | Archivo, static instances at widths 75/100/125 x weights 400/700/900 | Pretendard Regular/Bold | Archivo instanced at development time from the pinned variable font (OFL); Hangul pair reused by path from `../lit-pptx` |
8
+ | body | Archivo 400/700 | Pretendard Regular/Bold | as above |
9
+ | machine | MesloLGS NF | Pretendard | Meslo fetched at pre-warm with its Apache-2.0 notice, the Apache text and the Vera/Arev notices |
10
10
  | pixel | VT323 | Galmuri9 (outline build) | VT323 bundled; Galmuri9 fetched at pre-warm with its OFL text, unmodified |
11
11
  | chrome | Silkscreen Regular/Bold (labels only) | none | bundled |
12
12
  | stroke | EMS Allure, Felix, Osmotron, Readability, Tech (single-stroke SVG) | none | bundled with the OFL 1.1 text and a CREDITS file |