@litfamily/litopencode 1.0.16 → 1.0.18

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 (119) hide show
  1. package/CHANGELOG.md +13 -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/deliverable-hedge-guard.js +3 -1
  6. package/dist/features.js +2 -2
  7. package/dist/hooks.js +2 -1
  8. package/dist/skills.js +6 -4
  9. package/docs/assets/readme/badge-version.svg +1 -1
  10. package/docs/reference-Ko-KR.md +1 -1
  11. package/package.json +1 -1
  12. package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +1 -3
  13. package/skills/lit-docx/SKILL.md +80 -19
  14. package/skills/lit-docx/references/components.md +253 -0
  15. package/skills/lit-docx/references/direction-step.md +234 -0
  16. package/skills/lit-docx/references/examples/01-report-ko.md +160 -0
  17. package/skills/lit-docx/references/examples/02-brief-ko.md +58 -0
  18. package/skills/lit-docx/references/examples/03-manual-ko.md +107 -0
  19. package/skills/lit-docx/references/examples/04-proposal-ko.md +93 -0
  20. package/skills/lit-docx/references/examples/05-memo-ko.md +42 -0
  21. package/skills/lit-docx/references/examples/06-journal-en.md +84 -0
  22. package/skills/lit-docx/references/examples/07-report-en.md +137 -0
  23. package/skills/lit-docx/references/examples/08-journal-ko.md +93 -0
  24. package/skills/lit-docx/references/examples/09-brief-en.md +64 -0
  25. package/skills/lit-docx/references/page-composition.md +306 -0
  26. package/skills/lit-docx/references/tonalities/brief.md +104 -0
  27. package/skills/lit-docx/references/tonalities/journal.md +101 -0
  28. package/skills/lit-docx/references/tonalities/manual.md +111 -0
  29. package/skills/lit-docx/references/tonalities/memo.md +105 -0
  30. package/skills/lit-docx/references/tonalities/proposal.md +101 -0
  31. package/skills/lit-docx/references/tonalities/report.md +126 -0
  32. package/skills/lit-docx/run.py +2 -1
  33. package/skills/lit-docx/scripts/convert_md_to_docx.py +384 -67
  34. package/skills/lit-docx/scripts/craft_docx.py +204 -1
  35. package/skills/lit-docx/scripts/docx_design.py +2445 -0
  36. package/skills/lit-docx/scripts/docx_layout.py +959 -0
  37. package/skills/lit-docx/scripts/slop_lint.py +23 -6
  38. package/skills/lit-docx/templates/tonalities/brief.yaml +28 -0
  39. package/skills/lit-docx/templates/tonalities/journal.yaml +25 -0
  40. package/skills/lit-docx/templates/tonalities/manual.yaml +26 -0
  41. package/skills/lit-docx/templates/tonalities/memo.yaml +26 -0
  42. package/skills/lit-docx/templates/tonalities/proposal.yaml +26 -0
  43. package/skills/lit-docx/templates/tonalities/report.yaml +26 -0
  44. package/skills/lit-pptx/NOTICE.md +1 -1
  45. package/skills/lit-pptx/SKILL.md +108 -19
  46. package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf +0 -0
  47. package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf +0 -0
  48. package/skills/lit-pptx/references/density-and-fill.md +283 -0
  49. package/skills/lit-pptx/references/direction-step.md +249 -0
  50. package/skills/lit-pptx/references/examples/01-ops-review-ledger-ko.md +173 -0
  51. package/skills/lit-pptx/references/examples/02-launch-pitch-signal-en.md +153 -0
  52. package/skills/lit-pptx/references/examples/03-field-survey-atlas-ko.md +120 -0
  53. package/skills/lit-pptx/references/examples/04-lecture-chalk-ko.md +132 -0
  54. package/skills/lit-pptx/references/examples/05-research-talk-paper-en.md +162 -0
  55. package/skills/lit-pptx/references/examples/06-policy-briefing-gazette-ko.md +176 -0
  56. package/skills/lit-pptx/references/examples/07-annual-story-studio-en.md +131 -0
  57. package/skills/lit-pptx/references/examples/08-reliability-keynote-night-en.md +182 -0
  58. package/skills/lit-pptx/references/examples/09-status-update-ledger-en.md +147 -0
  59. package/skills/lit-pptx/references/examples/10-investor-pitch-signal-ko.md +136 -0
  60. package/skills/lit-pptx/references/examples/11-forecast-review-night-ko.md +177 -0
  61. package/skills/lit-pptx/references/examples/12-exhibition-proposal-studio-ko.md +149 -0
  62. package/skills/lit-pptx/references/layout-families.md +470 -0
  63. package/skills/lit-pptx/references/title-treatments.md +271 -0
  64. package/skills/lit-pptx/references/tonalities/atlas.md +131 -0
  65. package/skills/lit-pptx/references/tonalities/chalk.md +132 -0
  66. package/skills/lit-pptx/references/tonalities/gazette.md +137 -0
  67. package/skills/lit-pptx/references/tonalities/ledger.md +150 -0
  68. package/skills/lit-pptx/references/tonalities/night.md +148 -0
  69. package/skills/lit-pptx/references/tonalities/paper.md +135 -0
  70. package/skills/lit-pptx/references/tonalities/signal.md +147 -0
  71. package/skills/lit-pptx/references/tonalities/studio.md +149 -0
  72. package/skills/lit-pptx/scripts/compile-deck.js +68 -21
  73. package/skills/lit-pptx/scripts/craft-thresholds.json +45 -1
  74. package/skills/lit-pptx/scripts/craft_extras.py +37 -8
  75. package/skills/lit-pptx/scripts/deck_output.py +654 -0
  76. package/skills/lit-pptx/scripts/embed_fonts.py +2 -2
  77. package/skills/lit-pptx/scripts/layout_inventory.py +35 -2
  78. package/skills/lit-pptx/scripts/lib/directive-parser.js +2 -2
  79. package/skills/lit-pptx/scripts/lib/font-map.js +4 -4
  80. package/skills/lit-pptx/scripts/lib/grid-resolver.js +521 -0
  81. package/skills/lit-pptx/scripts/lib/layout-resolver.js +403 -21
  82. package/skills/lit-pptx/scripts/lib/markdown-loader.js +6 -4
  83. package/skills/lit-pptx/scripts/lib/render-adapter-html.js +3 -9
  84. package/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +500 -113
  85. package/skills/lit-pptx/scripts/lib/render-pack.js +3558 -0
  86. package/skills/lit-pptx/scripts/lib/slide-ast.js +55 -24
  87. package/skills/lit-pptx/scripts/lib/spec-validator.js +2 -2
  88. package/skills/lit-pptx/scripts/lib/template-registry.js +335 -11
  89. package/skills/lit-pptx/scripts/qa_deck.py +48 -13
  90. package/skills/lit-pptx/scripts/validate_pptx.py +25 -7
  91. package/skills/lit-pptx/specs/template-enrollment-contract.md +4 -4
  92. package/skills/lit-pptx/templates/boilerplate_professional.css +13 -13
  93. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +1 -1
  94. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +5 -2
  95. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +20 -20
  96. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +1 -11
  97. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +10 -7
  98. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +17 -17
  99. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +8 -8
  100. package/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +99 -0
  101. package/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +104 -0
  102. package/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +100 -0
  103. package/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +101 -0
  104. package/skills/lit-pptx/templates/tonalities/night/pack.yaml +100 -0
  105. package/skills/lit-pptx/templates/tonalities/paper/pack.yaml +105 -0
  106. package/skills/lit-pptx/templates/tonalities/signal/pack.yaml +101 -0
  107. package/skills/lit-pptx/templates/tonalities/studio/pack.yaml +99 -0
  108. package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +1 -1
  109. package/skills/lit-typographic-motion/engine/stage/capture.mjs +2 -2
  110. package/skills/lit-typographic-motion/engine/treatment.mjs +1 -1
  111. package/skills/lit-typographic-motion/fonts/pins.json +2 -2
  112. package/skills/lit-typographic-motion/gate.mjs +1 -1
  113. package/skills/lit-typographic-motion/references/stage.md +1 -1
  114. package/skills/lit-typographic-motion/references/style-bibles.md +2 -2
  115. package/skills/lit-typographic-motion/references/treatment.md +1 -1
  116. package/skills/lit-typographic-motion/references/type-craft.md +3 -3
  117. package/skills/managed-skill-manifest.json +288 -44
  118. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf +0 -0
  119. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf +0 -0
@@ -0,0 +1,470 @@
1
+ # Layout families
2
+
3
+ A slide's `layout:` line names its family. The family decides what content the slide holds, how
4
+ the treatment's body zone is split into regions on the 12-column grid, and which title treatments
5
+ the slide may take. The engine knows 28 content families plus 9 cover, 6 section and 5 closing
6
+ variants (`FAMILIES` and `VARIANTS` in `scripts/lib/grid-resolver.js`). Each pack lists the ones it
7
+ draws; `node <skill>/run.mjs compile --list-layouts <tonality>` prints that list with the treatments
8
+ each family takes in the pack.
9
+
10
+ Use only the names in this file. An unknown name stops the compile with the full list. A known
11
+ family that the pack does not list still compiles, with a log note
12
+ (`slide 6: photo-grid is not a ledger layout family (...); drawn with its own geometry`), but it
13
+ then borrows geometry from outside the pack's design; treat the note as a sign the slide or the
14
+ pack is wrong.
15
+
16
+ ## Source rules that apply to every family
17
+
18
+ - A slide starts with `layout: <family>`, optionally followed by `variant:` or `title:` lines, then a
19
+ blank line, then the body. Slides are separated by a line holding only `---`.
20
+ - The first `#`, `##` or `###` heading is the title. Covers and sections use `#`; content slides `##`.
21
+ - A bullet that is only bold (`- **비용**`) opens a group; `(1)`, `(2)` lines under it are its
22
+ sub-points. A bullet that starts with a bold head and continues (`- **입고** 납품 영수증 ...`) is a
23
+ headed point; many families read the head as a label, a step name or a date. Write the colon after a
24
+ run-in label (`- **요약:** 누리집에서 신청하면 …`): the compiler adds one when the label ends without a
25
+ separator, because a bold word running into its sentence reads as part of it, and the gate fails a
26
+ hand-set label without one (OF-118). A bold line with nothing after it opens a group and takes no
27
+ colon.
28
+ - A line starting with `출처:`, `자료:`, `주:`, `Source:` or `Note:` is taken out of the takeaways
29
+ and set as a source strip at the foot of the body (see `density-and-fill.md`). Closings keep
30
+ theirs inside the next step instead.
31
+ - A pipe table is a table. `::: chart type=column|bar|line|area|pie|doughnut|stacked` around a pipe
32
+ table is a native, editable chart (first column categories, one column per series;
33
+ `unit="..."` states the unit once: as a level axis title, or nowhere on the axis when every series
34
+ name in the legend already carries it). A series keeps one colour across the deck: alone on a chart
35
+ it takes the colour it has beside the highlighted series elsewhere. `> ...` directly under a table or inside a chart fence is its
36
+ caption, numbered automatically (`표 1.` / `Table 1.` for tables, `도 1.` / `Figure 1.` for charts
37
+ and images; a number you type is replaced, not doubled).
38
+ - Body text and table cells that wrap are broken by the compiler at spaces: a number stays with its
39
+ unit, and a short parenthetical such as `(▲ +3.9%)` (up to 16 characters) stays whole on its line.
40
+ - In the chart families (`chart-insight`, `full-chart`, `kpi-over-chart`, `dashboard-grid`) a plain
41
+ pipe table whose data columns are all numbers over three or more rows is drawn as a chart anyway.
42
+ - `![caption](assets/example-a.png)` is an image; its alt text becomes its numbered caption. Paths
43
+ resolve from the deck source's folder.
44
+ - `::: key-message` holds a lead sentence; `::: main-box` holds a boxed note; `::: notes` holds
45
+ speaker notes that never appear on the slide.
46
+ - Cover slides accept only the title (and notes). A cover that shows a photograph takes the first
47
+ image found anywhere in the deck; never put an image on the cover slide itself, the compile
48
+ rejects it.
49
+ - Content slides accept titles, `key-message`, body text, `main-box`, tables, charts, images,
50
+ captions and notes, plus the placement blocks `region`, `columns`, `box` and `shape` from
51
+ `specs/markdown-slide-spec-v2.md`. Reach for `box` and `shape` last: a hand-placed box is never
52
+ reflowed and the gate reports anything it covers.
53
+
54
+ ## Text families
55
+
56
+ ### text-column
57
+
58
+ - **Holds.** Running points, a short argument, a scope or method description.
59
+ - **Write it as.** Five or six headed points (`- **조사 기간** 2026년 9월 8~19일 ...`), or groups with
60
+ sub-points, plus the source strip.
61
+ - **Behaviour.** Plain bullets keep a reading measure (about seven of twelve columns on the compact
62
+ step) and leave the rest of the width empty. Two to five headed points that leave the body short
63
+ run as rows instead, the head in its own column and the point beside it, spread down the page.
64
+ Groups of sub-points under bold heads run in two columns. A slide that also holds a visual sets
65
+ the visual on seven columns with the text beside it.
66
+ - **Packs.** atlas, chalk, paper, gazette. Legacy names `content` and `main` resolve here.
67
+
68
+ ### text-two-column
69
+
70
+ - **Holds.** Two parallel halves of one argument: background and goals, scope and exclusions.
71
+ - **Write it as.** Four to six groups (`- **기획 배경**` with two or three `(1)` sub-points each).
72
+ - **Behaviour.** The groups are split at the group boundary nearest half the height, so each column
73
+ starts with a heading. Too little text leaves both columns short; this family needs about 14
74
+ lines a column at density 10.
75
+ - **Packs.** ledger, gazette, studio.
76
+
77
+ ### summary-box-list
78
+
79
+ - **Holds.** The Korean briefing page: one boxed conclusion, then the itemised evidence (개조식).
80
+ - **Write it as.** A `::: key-message` with the one-line conclusion (up to three lines), then four to
81
+ six headed groups with one or two sub-points each.
82
+ - **Behaviour.** The conclusion is set bold at lead size in an outlined box across the body (gazette
83
+ draws the outline); the groups run in two columns under it. Without a key-message the first point
84
+ becomes the box.
85
+ - **Packs.** gazette.
86
+
87
+ ### sidebar-note
88
+
89
+ - **Holds.** A main explanation with a fenced aside: a definition, a tip, the common mistake.
90
+ - **Write it as.** The main text (groups or headed points, ideally 14 lines or more), then
91
+ `::: main-box` with the aside. Without a main-box the last text item becomes the aside.
92
+ - **Behaviour.** Main content on columns 1-8; the aside in a tinted box on columns 9-12, as tall as
93
+ its text. An aside too short for its column first narrows to three columns at body size; if the
94
+ main content still runs far past it, the aside stands across the top at lead size and the main
95
+ points run in two columns under it. Under a side title the aside stands in the rail.
96
+ - **Packs.** chalk.
97
+
98
+ ### agenda
99
+
100
+ - **Holds.** The parts of the deck.
101
+ - **Write it as.** Three to six headed points, the head being the part name and the rest one line of
102
+ what it covers: `- **처리 실적** 출고량, 비용, 정시 출고율의 분기 추이`.
103
+ - **Behaviour.** No numeral beside the title (OF-119): the rows carry the numbers. One numbered row
104
+ per part (`01`, `02` ...), the name at lead size and the description
105
+ under it, rows spread down to the floor at most 108 pt apart. The part names become the deck's
106
+ index: `cover-index` lists them, section slides whose titles match a part name (or its description)
107
+ number themselves by that position and show the part count, and in packs with an index display
108
+ the section page repeats the agenda with the current part marked. Under kicker-numeral the
109
+ numeral is the number of parts.
110
+ - **Packs.** ledger, chalk, gazette.
111
+
112
+ ### statement
113
+
114
+ - **Holds.** One line set large, and at most one support line.
115
+ - **Write it as.** The `#` heading, then one plain sentence of support.
116
+ - **Behaviour.** Drawn under the statement treatment in the pack's statement device (see "Display
117
+ slides"). Ledger and gazette have no statement treatment and do not list the family; there the
118
+ line becomes a top title over an empty body, which is rarely what you want.
119
+ - **Packs.** signal, atlas, chalk, paper, studio, night.
120
+
121
+ ### quote
122
+
123
+ - **Holds.** A pull quote with its attribution.
124
+ - **Write it as.** The quote as a plain paragraph wrapped in quotation marks (`“...”`), then a line
125
+ starting with `— ` naming the source. Never attribute a quote to a real person in a sample deck;
126
+ name the interview or the document.
127
+ - **Behaviour.** Under the statement treatment the quote itself becomes the title shape and the
128
+ attribution its support line; the opening quotation mark keeps the label check from reading the
129
+ quote as a sentence title. Under top-rule it is set at title size below the heading.
130
+ - **Packs.** signal, chalk, paper.
131
+
132
+ ## Number and table families
133
+
134
+ ### kpi-row
135
+
136
+ - **Holds.** Four to six headline figures, each with its basis.
137
+ - **Write it as.** A pipe table: labels in the header row, the values in the first body row (each
138
+ 12 characters or fewer), and an optional second row giving each figure's basis or comparison (24
139
+ characters or fewer): `| 412만 건 | ...` over `| 계획 대비 +4.1% | ...`. Then two or three takeaways and
140
+ the source strip.
141
+ - **Behaviour.** Under a top title the figures run as a row of cards with labels and basis lines.
142
+ Under a side rail, on a narrow body, or when the visual is told to take the room, they run down the
143
+ page as figure rows (value, label, basis). On the compact step a card row whose takeaways leave
144
+ the body short becomes figure rows on seven columns with the takeaways beside. Values are never
145
+ set above title size. A table that does not look like a KPI row falls back to `table-insight`.
146
+ - **Packs.** ledger, signal, atlas, studio, night.
147
+
148
+ ### big-number
149
+
150
+ - **Holds.** One to four figures that carry the slide, with the evidence behind them.
151
+ - **Write it as.** A KPI table of one to four columns with a basis row, then three or four evidence
152
+ points and the source strip.
153
+ - **Behaviour.** Every pack sets a `display.number` device, so the figures stand on a panel seven
154
+ columns wide (five beside a rail): one row per figure, the value at title size, its label and
155
+ basis beside it. The panel is filled, tinted or outlined according to the pack and stays under
156
+ half the page. The evidence runs beside the panel.
157
+ - **Packs.** ledger, signal, studio, night.
158
+
159
+ ### table-insight
160
+
161
+ - **Holds.** A lookup table of five to eight rows with what it means.
162
+ - **Write it as.** The table, its caption, three or four takeaways, the source strip.
163
+ - **Behaviour.** The table takes eight columns and the takeaways four. When the takeaways are short
164
+ enough that the slide would leave a band empty, they move under the table in two columns and the
165
+ table's rows open up by up to one minimum row height each. Numbers are right-aligned in the pack's
166
+ table style.
167
+ - **Packs.** ledger, signal, chalk, paper, gazette.
168
+
169
+ ### ledger-table
170
+
171
+ - **Holds.** A full-width table that is the message: an account, a plan, a schedule, a status list.
172
+ - **Write it as.** Five to eight rows including a totals row (`합계` / `Total`, set bold), the caption,
173
+ then three or four takeaways (they run under the table across the width).
174
+ - **Packs.** ledger, gazette.
175
+
176
+ ### kpi-over-chart
177
+
178
+ - **Holds.** Headline figures and the trend behind them.
179
+ - **Write it as.** A KPI table with a basis row, then a `::: chart` fence, then one takeaway and the
180
+ source and note lines.
181
+ - **Behaviour.** Figures across the top, the chart under them to the floor. Without both a KPI table
182
+ and a chart it falls back to `chart-insight`.
183
+ - **Packs.** ledger, night.
184
+
185
+ ### dashboard-grid
186
+
187
+ - **Holds.** Two to four related small charts or tables seen together.
188
+ - **Write it as.** Two to four `::: chart` fences (or tables), each with its caption, then one
189
+ takeaway and the source strip.
190
+ - **Behaviour.** Two panels sit side by side, three run across, four form a two-by-two grid; the
191
+ takeaways run under the grid. With fewer than two visuals it falls back to `chart-insight`.
192
+ - **Packs.** ledger, night.
193
+
194
+ ### matrix-2x2
195
+
196
+ - **Holds.** Four options placed on two axes (effect against effort, urgency against cost).
197
+ - **Write it as.** A table with exactly three header cells and two body rows. The first header names
198
+ both axes, `효과 \ 난이도` or `Impact / Effort`; the other two headers are the column positions,
199
+ the first cell of each row the row position. Each cell is `item · detail · detail`.
200
+
201
+ ```text
202
+ | 효과 \ 난이도 | 쉬움 | 어려움 |
203
+ |---|---|---|
204
+ | 큼 | 상차 도크 시간 조정 · 대기 −8분 · 11월 시행 | 자동 분류기 증설 · 검수 −7분 · 12월 설치 |
205
+ | 작음 | 피킹 동선 재배치 · 피킹 −3분 · 10월 시행 | 포장재 규격 통일 · 포장 −1분 · 내년 검토 |
206
+ ```
207
+
208
+ - **Behaviour.** Each quadrant shows its item as a head and each detail on its own line. Takeaways
209
+ stand in the last four columns beside the matrix (under it on a narrow body). Any other table shape
210
+ falls back to `table-insight`.
211
+ - **Packs.** ledger, gazette.
212
+
213
+ ### comparison
214
+
215
+ - **Holds.** Two options, two periods, or plan against actual, judged on the same criteria.
216
+ - **Write it as.** Two columns with the same three or four labelled criteria on both sides:
217
+
218
+ ```text
219
+ :::: columns 1fr 1fr
220
+ ::: col
221
+ - **Hold the 16 November date**
222
+ (1) Effort: two extra data engineers for five weeks
223
+ (2) Cost: 84k EUR from contingency
224
+ :::
225
+ ::: col
226
+ - **Move cutover to 7 December**
227
+ (1) Effort: current team, no additions
228
+ (2) Cost: 120k EUR for three more weeks of dual running
229
+ :::
230
+ ::::
231
+ ```
232
+
233
+ Then the source strip.
234
+ - **Behaviour.** When the points on both sides open with the same short label, the compact step
235
+ draws a criteria column: the label once on the left, each side's text in its own column, one row
236
+ per criterion spread down the page. Under a top title this reads as a grid. Beside a side rail
237
+ the labels stand in the rail under the title, level with their rows, and the two sides take the
238
+ body; a label is a short name of three words at most, or the criteria stay inside the sides. A
239
+ comparison dense with figures takes the data role, otherwise the content role. Without columns,
240
+ bold-headed entries are split half and half; a visual without columns sits beside the text.
241
+ - **Packs.** all eight. The legacy name `summary` resolves here.
242
+
243
+ ## Chart families
244
+
245
+ ### chart-insight
246
+
247
+ - **Holds.** One chart and what it shows.
248
+ - **Write it as.** A `::: chart` fence with five to nine categories and a caption, two to four
249
+ takeaways, the source strip and a note where a definition matters.
250
+ - **Behaviour.** The chart takes eight columns and the takeaways four. On the compact step the
251
+ chart's values also appear as a small table under the takeaways when they fit (eight rows and four
252
+ columns at most), else under the chart when the chart keeps at least 150 pt; takeaways too long
253
+ for a third of the body take half.
254
+ - **Packs.** ledger, signal, paper, studio, night.
255
+
256
+ ### full-chart
257
+
258
+ - **Holds.** A chart that needs the whole width: many categories, several series.
259
+ - **Write it as.** The chart, then one or two takeaways and the source strip; they run under it.
260
+ - **Packs.** ledger, signal, paper, night.
261
+
262
+ ## Sequence families
263
+
264
+ ### process
265
+
266
+ - **Holds.** Two to five steps in order.
267
+ - **Write it as.** One bold head per step, numbered in the head (`- **1. Survey**`), with the step's
268
+ text after the head or as `(1)` sub-points (they are joined into one line). Plain bullets after the
269
+ steps are takeaways and run under them.
270
+ - **Behaviour.** On the compact step with a full-width body, each step is a row read across: numeral,
271
+ step name, what happens. Up to four steps whose columns would stop high also run as rows.
272
+ - **Packs.** signal, chalk.
273
+
274
+ ### step-diagram
275
+
276
+ - **Holds.** A teaching sequence, each step with its own small worked value.
277
+ - **Write it as.** As `process`; include the number or formula each step produces.
278
+ - **Behaviour.** The same plan as `process`.
279
+ - **Packs.** chalk.
280
+
281
+ ### timeline
282
+
283
+ - **Holds.** Up to six dated events.
284
+ - **Write it as.** A table whose first column is the date, the second the event, and the rest (owner,
285
+ status) joined under it; then two or three takeaways. Bullets with a bold date head also work when
286
+ there is no table. Keep each event under about 20 Hangul or 40 Latin characters: an event cell has
287
+ a sixth of the width and two lines.
288
+ - **Behaviour.** Dates sit over an axis; events and owners under it in equal slots; the takeaways
289
+ under the axis. Room left over is shared evenly above the axis, between axis and takeaways, and
290
+ under them. A single takeaway moves with the axis instead, the room shared over and under the
291
+ pair; with a short title that still leaves a tall band under it (OF-109), so give a timeline two or
292
+ three takeaways.
293
+ - **Packs.** ledger, atlas, gazette, studio, night.
294
+
295
+ ## Image and figure families
296
+
297
+ ### image-full
298
+
299
+ - **Holds.** One photograph that is the slide.
300
+ - **Write it as.** The title and one image line; nothing else.
301
+ - **Behaviour.** Always drawn under the overlay treatment: the picture bleeds to all edges, cropped
302
+ to its own proportions, with the title and caption on a dark panel at the lower left.
303
+ - **Packs.** atlas, studio.
304
+
305
+ ### image-split
306
+
307
+ - **Holds.** One image beside its explanation.
308
+ - **Write it as.** The image, then four or five headed points and the source strip.
309
+ - **Behaviour.** Image on seven columns, text on five.
310
+ - **Packs.** signal, atlas, chalk, studio.
311
+
312
+ ### photo-grid
313
+
314
+ - **Holds.** Two or three images seen together.
315
+ - **Write it as.** Two or three image lines in a row (each with a caption), then one takeaway and the
316
+ source strip. A fourth image is ignored. With one image it falls back to `image-split`.
317
+ - **Packs.** atlas, studio.
318
+
319
+ ### figure-pair
320
+
321
+ - **Holds.** Two figures to compare: before and after, condition A and B, day and night.
322
+ - **Write it as.** Two image lines, then one interpretation line that names the difference with
323
+ numbers, then the source strip.
324
+ - **Behaviour.** The figures share the width equally at the same height; the text runs under them.
325
+ With one figure it falls back to `figure-academic`.
326
+ - **Packs.** atlas, paper.
327
+
328
+ ### figure-academic
329
+
330
+ - **Holds.** One figure with numbered caption and its reading.
331
+ - **Write it as.** The image, three or four points, the source strip.
332
+ - **Behaviour.** Figure on eight columns, points on four.
333
+ - **Packs.** paper.
334
+
335
+ ### asymmetric-feature
336
+
337
+ - **Holds.** One strong element (a photograph, a chart) beside a fuller explanation.
338
+ - **Write it as.** The visual, then four or five headed points and the source strip.
339
+ - **Behaviour.** The visual takes five columns and the text seven. A slide whose only visual is a
340
+ one-row KPI table is drawn as `big-number`.
341
+ - **Packs.** signal, atlas, studio.
342
+
343
+ ### method
344
+
345
+ - **Holds.** A formula and its terms, or a figure and its terms.
346
+ - **Write it as.** The formula as one plain (non-bullet) line, then four or five headed terms, each
347
+ with one or two `(1)` sub-points, then the source strip.
348
+
349
+ ```text
350
+ budget = (1 − SLO) × total requests in the window
351
+
352
+ - **SLO** service level objective
353
+ (1) 99.95% of checkout requests succeed over a rolling 28 days
354
+ ```
355
+
356
+ - **Behaviour.** On the compact step the formula runs across the top in the accent colour and the
357
+ terms in two columns under it; on every step a formula with two or three columns of terms runs
358
+ across. With a figure instead, the figure takes seven columns (five or four when the terms are
359
+ long) and the terms run beside it; a figure at least twice as wide as tall runs across the body over
360
+ its terms (two or three columns, the source closing the shortest) when it keeps 130 pt of height. A slide that holds a figure does not draw a
361
+ formula line, so do not combine the two; put the formula in the figure's caption if both matter.
362
+ - **Packs.** chalk, paper, night.
363
+
364
+ ## References
365
+
366
+ ### references-appendix
367
+
368
+ - **Holds.** Eight to ten sources and definitions.
369
+ - **Write it as.** One bullet per entry, `- [1] ...`, sources first and definitions after.
370
+ - **Behaviour.** One entry per row, rows spread down the page with rules between. A list longer than
371
+ the body steps down to label size, then runs in two columns.
372
+ - **Packs.** ledger, paper, gazette.
373
+
374
+ ## Covers
375
+
376
+ A cover takes its title from the `#` heading and its subtitle and meta line from the frontmatter:
377
+ `subtitle`, `date`, `department`, `presenter`. Write `layout: cover` to get the pack's first cover
378
+ that can be drawn, or name one. A named cover the deck cannot supply falls back to the next one in
379
+ the pack's list, with a note.
380
+
381
+ | Variant | Needs from the deck | What it draws | Packs |
382
+ |---|---|---|---|
383
+ | cover-typographic | nothing | Title large on the ground, subtitle and meta under it, drawn with the pack's cover device | ledger, signal, atlas, chalk, paper, gazette, night |
384
+ | cover-split-field | nothing | Title in the left columns beside a colour field bleeding off the right edge | signal |
385
+ | cover-split-image | an image anywhere in the deck | Title on the left, the deck's first image filling the right side | atlas, paper, studio |
386
+ | cover-full-image | an image anywhere in the deck | The first image full-bleed with the title on a dark panel | atlas |
387
+ | cover-band | nothing | A deep band carrying the title, then the deck's parts (or its headline figures) across the page under it | gazette |
388
+ | cover-numeral | a year in the title or the `date:` | The year at title size in the accent over the title | signal, chalk, studio, night |
389
+ | cover-index | an agenda, or two or more sections | Title on the left, the part names listed on the right | ledger, paper, gazette |
390
+ | cover-figures | a KPI table somewhere in the deck | Title over the deck's first row of headline figures (up to four) | ledger, night |
391
+ | cover-rail | nothing | A dark rail on the left holding organisation and date, the title beside it | chalk, studio |
392
+
393
+ Never invent a number to enable `cover-numeral` or `cover-figures`; the figures come from the deck.
394
+
395
+ ## Sections
396
+
397
+ A section slide holds the `#` title (and may hold an image for `section-image`). It numbers itself
398
+ by its position in the agenda when its title matches an agenda part or its description, and then
399
+ shows the part count (`02 / 04`). In packs with `display.index` (ledger, paper, gazette)
400
+ `section-rule` and `section-numeral` with an agenda become an index page: the part numeral over the
401
+ part title on the left, the whole agenda on the right with this part marked. A section with no
402
+ agenda behind it shows no numeral; it sets its title as a statement with a preview of the slides it
403
+ opens under it: each slide's title and up to two of its first lines, a bold run-in label keeping its
404
+ colon (`**결과:** …`), in a column from the left margin no wider than 70 % of the page or about 70
405
+ characters of body text (eight columns for Korean, six for English). Lines and then slides drop
406
+ until the preview fits above the body floor.
407
+
408
+ | Variant | What it draws | Packs |
409
+ |---|---|---|
410
+ | section-field | Title on a field-coloured ground | signal, atlas, paper, night |
411
+ | section-numeral | Part number in the accent with the title | ledger, signal, chalk, studio, night |
412
+ | section-rail | Dark rail with the part number, title beside it | chalk, studio |
413
+ | section-image | The section slide's own image full-bleed with the title on a panel (needs an image on that slide) | atlas |
414
+ | section-rule | Title over a hairline, or the index page | ledger, paper, gazette |
415
+ | section-band | Deep band; the deck's parts with this one marked, the title as a statement under the band | gazette |
416
+
417
+ ## Closings
418
+
419
+ A closing other than the statement is a content slide whose title names the ask, drawn under a top
420
+ title. Write `layout: closing` for the pack's first closing, or name one.
421
+
422
+ | Variant | Write it as | What it draws | Packs |
423
+ |---|---|---|---|
424
+ | closing-ask | One `Next step:` line and a table of asks (item, amount or date, owner) | Action rows keyed by the amount column (same unit; each row gets a bar for its share and the total closes the list) or else the date column; the next step on the floor in the pack's closing device; a next-step line that fits the box sets on one line across it, a longer one keeps the reading measure, set as narrow as keeps its line count so no line ends on a lone word | ledger, signal, atlas, chalk, paper, gazette |
425
+ | closing-decision-box | One `결정할 것:` / `Decide:` line and a table of decisions | The decision bold at lead size in a box at the top, the table as action rows under it | ledger, gazette, night |
426
+ | closing-statement | The `##` ask and one support line; no table or image | The ask set as a statement | signal, night |
427
+ | closing-summary-list | Four to six one-line conclusions, or a visual plus points | Numbered conclusions spread down the page; with a visual, the visual on eight columns and the points in a box beside | chalk, paper, studio |
428
+ | closing-contact-split | A contact line and a table of asks | A field bleeding off the right and bottom edges holding each row's key and the total, starting where the rows' text ends (five to seven of twelve columns, never at the cost of a smaller row size); the asks down the left; the contact in a band that meets the field | atlas, studio |
429
+
430
+ A totals row (`합계`, `Total`) is never read as an action row, and dash-only cells are left out of
431
+ the detail line. Keep thank-you lines to a small line at most; the closing is for the ask.
432
+
433
+ ## Display slides
434
+
435
+ Covers, sections, statements, big numbers and closing steps are drawn with the device the pack
436
+ names under `display:`. This is what makes a Signal cover look nothing like a Paper cover even
437
+ though both are `cover-typographic`.
438
+
439
+ | Pack | cover | statement | number | closing step | index |
440
+ |---|---|---|---|---|---|
441
+ | ledger | figures | (no statement) | tint | box | yes |
442
+ | signal | drench (field over the page) | open | field | band | |
443
+ | atlas | plate (field under the title) | drench (field over the page) | tint | band | |
444
+ | chalk | rail | drench | tint | box | |
445
+ | paper | rules (journal title page) | rules | outline | rules | yes |
446
+ | gazette | band | (no statement) | outline | box | yes |
447
+ | studio | plain | rules (two hairlines on the open page) | tint | band | |
448
+ | night | numeral | open | tint | band | |
449
+
450
+ ## How a deck keeps its variety
451
+
452
+ The gate (OF-111) wants the content slides to differ in layout: the title zone (top, side, band,
453
+ bottom, overlay, none) times the body's column partition (one, two-even, two-asym, three, grid,
454
+ full-bleed). The count of distinct layouts must reach about 60 % of the content slides (capped at
455
+ five), and no layout may cover more than 40 %. Agendas and references count as content slides
456
+ here; covers, sections and closings do not.
457
+
458
+ The partition depends on the family and on the treatment. These are the readings the gate gave on
459
+ the example decks in `examples/`:
460
+
461
+ | Partition | Seen on |
462
+ |---|---|
463
+ | one | agenda, text-column, ledger-table, references-appendix; almost any family under side-rail |
464
+ | two-even | table-insight whose takeaways moved under the table |
465
+ | two-asym | chart-insight and image-split under top or bottom titles, big-number, sidebar-note, asymmetric-feature, figure-academic |
466
+ | grid | kpi-row cards, comparison criteria rows, matrix-2x2 under a top title, timeline, process and step-diagram, summary-box-list, text-two-column, photo-grid, figure-pair under bottom-anchor, method under band, kpi-over-chart |
467
+ | full-bleed | image-full |
468
+
469
+ When OF-111 fails, read which layout repeats, then change one repeated slide's family or put a
470
+ `title:` key on it (`title-treatments.md`). Do not add slides to dilute the count.