@litfamily/litopencode 1.0.15 → 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.
- package/CHANGELOG.md +11 -0
- package/README-Ko-KR.md +11 -11
- package/README.md +11 -11
- package/dist/activation-routing.js +1 -1
- package/dist/auto-handoff.js +34 -1
- package/dist/features.js +2 -2
- package/dist/skills.js +6 -4
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/reference-Ko-KR.md +1 -1
- package/package.json +1 -1
- package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +1 -3
- package/skills/lit-docx/SKILL.md +80 -19
- package/skills/lit-docx/references/components.md +253 -0
- package/skills/lit-docx/references/direction-step.md +234 -0
- package/skills/lit-docx/references/examples/01-report-ko.md +160 -0
- package/skills/lit-docx/references/examples/02-brief-ko.md +58 -0
- package/skills/lit-docx/references/examples/03-manual-ko.md +107 -0
- package/skills/lit-docx/references/examples/04-proposal-ko.md +93 -0
- package/skills/lit-docx/references/examples/05-memo-ko.md +42 -0
- package/skills/lit-docx/references/examples/06-journal-en.md +84 -0
- package/skills/lit-docx/references/examples/07-report-en.md +137 -0
- package/skills/lit-docx/references/examples/08-journal-ko.md +93 -0
- package/skills/lit-docx/references/examples/09-brief-en.md +64 -0
- package/skills/lit-docx/references/page-composition.md +306 -0
- package/skills/lit-docx/references/tonalities/brief.md +104 -0
- package/skills/lit-docx/references/tonalities/journal.md +101 -0
- package/skills/lit-docx/references/tonalities/manual.md +111 -0
- package/skills/lit-docx/references/tonalities/memo.md +105 -0
- package/skills/lit-docx/references/tonalities/proposal.md +101 -0
- package/skills/lit-docx/references/tonalities/report.md +126 -0
- package/skills/lit-docx/run.py +2 -1
- package/skills/lit-docx/scripts/convert_md_to_docx.py +384 -67
- package/skills/lit-docx/scripts/craft_docx.py +204 -1
- package/skills/lit-docx/scripts/docx_design.py +2445 -0
- package/skills/lit-docx/scripts/docx_layout.py +959 -0
- package/skills/lit-docx/scripts/slop_lint.py +23 -6
- package/skills/lit-docx/templates/tonalities/brief.yaml +29 -0
- package/skills/lit-docx/templates/tonalities/journal.yaml +26 -0
- package/skills/lit-docx/templates/tonalities/manual.yaml +27 -0
- package/skills/lit-docx/templates/tonalities/memo.yaml +27 -0
- package/skills/lit-docx/templates/tonalities/proposal.yaml +27 -0
- package/skills/lit-docx/templates/tonalities/report.yaml +27 -0
- package/skills/lit-pptx/NOTICE.md +1 -1
- package/skills/lit-pptx/SKILL.md +108 -19
- package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf +0 -0
- package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf +0 -0
- package/skills/lit-pptx/references/density-and-fill.md +283 -0
- package/skills/lit-pptx/references/direction-step.md +249 -0
- package/skills/lit-pptx/references/examples/01-ops-review-ledger-ko.md +173 -0
- package/skills/lit-pptx/references/examples/02-launch-pitch-signal-en.md +153 -0
- package/skills/lit-pptx/references/examples/03-field-survey-atlas-ko.md +120 -0
- package/skills/lit-pptx/references/examples/04-lecture-chalk-ko.md +132 -0
- package/skills/lit-pptx/references/examples/05-research-talk-paper-en.md +162 -0
- package/skills/lit-pptx/references/examples/06-policy-briefing-gazette-ko.md +176 -0
- package/skills/lit-pptx/references/examples/07-annual-story-studio-en.md +131 -0
- package/skills/lit-pptx/references/examples/08-reliability-keynote-night-en.md +182 -0
- package/skills/lit-pptx/references/examples/09-status-update-ledger-en.md +147 -0
- package/skills/lit-pptx/references/examples/10-investor-pitch-signal-ko.md +136 -0
- package/skills/lit-pptx/references/examples/11-forecast-review-night-ko.md +177 -0
- package/skills/lit-pptx/references/examples/12-exhibition-proposal-studio-ko.md +149 -0
- package/skills/lit-pptx/references/layout-families.md +470 -0
- package/skills/lit-pptx/references/title-treatments.md +271 -0
- package/skills/lit-pptx/references/tonalities/atlas.md +132 -0
- package/skills/lit-pptx/references/tonalities/chalk.md +132 -0
- package/skills/lit-pptx/references/tonalities/gazette.md +137 -0
- package/skills/lit-pptx/references/tonalities/ledger.md +151 -0
- package/skills/lit-pptx/references/tonalities/night.md +148 -0
- package/skills/lit-pptx/references/tonalities/paper.md +136 -0
- package/skills/lit-pptx/references/tonalities/signal.md +148 -0
- package/skills/lit-pptx/references/tonalities/studio.md +149 -0
- package/skills/lit-pptx/scripts/compile-deck.js +68 -21
- package/skills/lit-pptx/scripts/craft-thresholds.json +45 -1
- package/skills/lit-pptx/scripts/craft_extras.py +37 -8
- package/skills/lit-pptx/scripts/deck_output.py +654 -0
- package/skills/lit-pptx/scripts/embed_fonts.py +2 -2
- package/skills/lit-pptx/scripts/layout_inventory.py +35 -2
- package/skills/lit-pptx/scripts/lib/directive-parser.js +2 -2
- package/skills/lit-pptx/scripts/lib/font-map.js +4 -4
- package/skills/lit-pptx/scripts/lib/grid-resolver.js +521 -0
- package/skills/lit-pptx/scripts/lib/layout-resolver.js +403 -21
- package/skills/lit-pptx/scripts/lib/markdown-loader.js +6 -4
- package/skills/lit-pptx/scripts/lib/render-adapter-html.js +3 -9
- package/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +500 -113
- package/skills/lit-pptx/scripts/lib/render-pack.js +3558 -0
- package/skills/lit-pptx/scripts/lib/slide-ast.js +55 -24
- package/skills/lit-pptx/scripts/lib/spec-validator.js +2 -2
- package/skills/lit-pptx/scripts/lib/template-registry.js +335 -11
- package/skills/lit-pptx/scripts/qa_deck.py +48 -13
- package/skills/lit-pptx/scripts/validate_pptx.py +17 -5
- package/skills/lit-pptx/specs/template-enrollment-contract.md +4 -4
- package/skills/lit-pptx/templates/boilerplate_professional.css +13 -13
- package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +1 -1
- package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +5 -2
- package/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +20 -20
- package/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +1 -11
- package/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +10 -7
- package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +17 -17
- package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +8 -8
- package/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +105 -0
- package/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +110 -0
- package/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +106 -0
- package/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +107 -0
- package/skills/lit-pptx/templates/tonalities/night/pack.yaml +106 -0
- package/skills/lit-pptx/templates/tonalities/paper/pack.yaml +111 -0
- package/skills/lit-pptx/templates/tonalities/signal/pack.yaml +107 -0
- package/skills/lit-pptx/templates/tonalities/studio/pack.yaml +105 -0
- package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +1 -1
- package/skills/lit-typographic-motion/engine/stage/capture.mjs +2 -2
- package/skills/lit-typographic-motion/engine/treatment.mjs +1 -1
- package/skills/lit-typographic-motion/fonts/pins.json +2 -2
- package/skills/lit-typographic-motion/gate.mjs +1 -1
- package/skills/lit-typographic-motion/references/stage.md +1 -1
- package/skills/lit-typographic-motion/references/style-bibles.md +2 -2
- package/skills/lit-typographic-motion/references/treatment.md +1 -1
- package/skills/lit-typographic-motion/references/type-craft.md +3 -3
- package/skills/managed-skill-manifest.json +288 -44
- package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf +0 -0
- package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf +0 -0
|
@@ -55,12 +55,18 @@ def _load_terms() -> tuple[list[str], list[str], bool, bool]:
|
|
|
55
55
|
def _build_regex(terms: list[str], case_insensitive: bool, whole_word: bool) -> re.Pattern[str] | None:
|
|
56
56
|
if not terms:
|
|
57
57
|
return None
|
|
58
|
-
|
|
58
|
+
# An acronym (RAM, FTO) is a word in capitals: matched as that word, so "diagram" or "program"
|
|
59
|
+
# does not contain it. Every other term keeps the file's case and word settings.
|
|
60
|
+
acronyms = [term for term in terms if re.fullmatch(r"[A-Z]{2,5}", term)]
|
|
61
|
+
escaped = [re.escape(term) for term in terms if term not in acronyms]
|
|
59
62
|
pattern = "|".join(escaped)
|
|
60
|
-
if whole_word:
|
|
63
|
+
if whole_word and pattern:
|
|
61
64
|
pattern = rf"(?:(?<=\W)|^)(?:{pattern})(?:(?=\W)|$)"
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
if case_insensitive and pattern:
|
|
66
|
+
pattern = f"(?i:{pattern})"
|
|
67
|
+
if acronyms:
|
|
68
|
+
pattern = "|".join(filter(None, [pattern, rf"(?<![A-Za-z])(?:{'|'.join(map(re.escape, acronyms))})(?![A-Za-z])"]))
|
|
69
|
+
return re.compile(pattern)
|
|
64
70
|
|
|
65
71
|
|
|
66
72
|
def _shape_text(shape) -> str:
|
|
@@ -103,6 +109,10 @@ def _slide_has_title(slide, slide_height: int | None) -> bool:
|
|
|
103
109
|
title_shape = getattr(slide.shapes, "title", None)
|
|
104
110
|
if title_shape is not None and _shape_text(title_shape):
|
|
105
111
|
return True
|
|
112
|
+
# A tonality deck names its title frame by treatment (title@side-rail, title@bottom-anchor, ...),
|
|
113
|
+
# wherever the treatment puts it on the slide.
|
|
114
|
+
if any(str(getattr(shape, "name", "")).startswith("title@") and _shape_text(shape) for shape in slide.shapes):
|
|
115
|
+
return True
|
|
106
116
|
for shape in slide.shapes:
|
|
107
117
|
if not getattr(shape, "is_placeholder", False):
|
|
108
118
|
continue
|
|
@@ -166,7 +176,9 @@ def lint(path: str | Path) -> dict[str, Any]:
|
|
|
166
176
|
default_font_hits.append(f"slide {slide_idx}: {font_name}")
|
|
167
177
|
|
|
168
178
|
last_slide_text = "\n".join(_shape_text(shape) for shape in prs.slides[-1].shapes if getattr(shape, "has_text_frame", False)).lower() if prs.slides else ""
|
|
169
|
-
|
|
179
|
+
# A closing references page is the deck's source note in its long form.
|
|
180
|
+
has_source_note = "source:" in last_slide_text or "출처" in last_slide_text or bool(
|
|
181
|
+
re.search(r"^\s*(references|참고\s*문헌)\s*$", last_slide_text, re.MULTILINE))
|
|
170
182
|
|
|
171
183
|
failures = {
|
|
172
184
|
"missing_titles": bool(missing_titles),
|
|
@@ -31,9 +31,9 @@ label: "Azure Professional" # Human-readable label
|
|
|
31
31
|
description: "Azure 16:9 presentation template"
|
|
32
32
|
|
|
33
33
|
fonts:
|
|
34
|
-
title: "
|
|
35
|
-
body: "
|
|
36
|
-
light: "
|
|
34
|
+
title: "Pretendard"
|
|
35
|
+
body: "Pretendard"
|
|
36
|
+
light: "Pretendard"
|
|
37
37
|
|
|
38
38
|
dimensions:
|
|
39
39
|
width: 13.333 # inches
|
|
@@ -221,7 +221,7 @@ Asset files are placed in `templates/enrolled/<TEMPLATE-NAME>/assets/` or a shar
|
|
|
221
221
|
|
|
222
222
|
All fonts declared in `template.yaml` and `capabilities.yaml` must be installed on the rendering machine. The enrollment contract does not bundle fonts — it assumes they are available system-wide.
|
|
223
223
|
|
|
224
|
-
For AZURE-PRO, the required font is `
|
|
224
|
+
For AZURE-PRO, the required font is `Pretendard`, bundled with the skill.
|
|
225
225
|
|
|
226
226
|
### 3.3 Fixture decks
|
|
227
227
|
|
|
@@ -2,34 +2,34 @@
|
|
|
2
2
|
/* Source reference: BOILERPLATE/BOILERPLATE.pptx */
|
|
3
3
|
|
|
4
4
|
@font-face {
|
|
5
|
-
font-family: "
|
|
5
|
+
font-family: "Pretendard";
|
|
6
6
|
font-weight: 300;
|
|
7
|
-
src: url("../pretendard-font/public/static/
|
|
7
|
+
src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
|
|
8
8
|
}
|
|
9
9
|
@font-face {
|
|
10
|
-
font-family: "
|
|
10
|
+
font-family: "Pretendard";
|
|
11
11
|
font-weight: 400;
|
|
12
|
-
src: url("../pretendard-font/public/static/
|
|
12
|
+
src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
|
|
13
13
|
}
|
|
14
14
|
@font-face {
|
|
15
|
-
font-family: "
|
|
15
|
+
font-family: "Pretendard";
|
|
16
16
|
font-weight: 500;
|
|
17
|
-
src: url("../pretendard-font/public/static/
|
|
17
|
+
src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
|
|
18
18
|
}
|
|
19
19
|
@font-face {
|
|
20
|
-
font-family: "
|
|
20
|
+
font-family: "Pretendard";
|
|
21
21
|
font-weight: 600;
|
|
22
|
-
src: url("../pretendard-font/public/static/
|
|
22
|
+
src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
|
|
23
23
|
}
|
|
24
24
|
@font-face {
|
|
25
|
-
font-family: "
|
|
25
|
+
font-family: "Pretendard";
|
|
26
26
|
font-weight: 700;
|
|
27
|
-
src: url("../pretendard-font/public/static/
|
|
27
|
+
src: url("../pretendard-font/public/static/Pretendard-Bold.otf") format("opentype");
|
|
28
28
|
}
|
|
29
29
|
@font-face {
|
|
30
|
-
font-family: "
|
|
30
|
+
font-family: "Pretendard";
|
|
31
31
|
font-weight: 800;
|
|
32
|
-
src: url("../pretendard-font/public/static/
|
|
32
|
+
src: url("../pretendard-font/public/static/Pretendard-Bold.otf") format("opentype");
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
:root {
|
|
@@ -57,7 +57,7 @@ body {
|
|
|
57
57
|
height: 720px;
|
|
58
58
|
background: var(--bg-color);
|
|
59
59
|
color: var(--ink);
|
|
60
|
-
font-family: "
|
|
60
|
+
font-family: "Pretendard", Arial, sans-serif;
|
|
61
61
|
/* PowerPoint target: Character Spacing > Narrow, 0.5pt */
|
|
62
62
|
letter-spacing: -0.5pt;
|
|
63
63
|
box-sizing: border-box;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Layout Mapping — AZURE-PRO (16:9, 13.333 x 7.5 in). Positions in inches.
|
|
2
|
-
#
|
|
2
|
+
# rich-blocks capability (template.yaml pack:) → body→cards, kpi-table→KPI cards, cover title **emphasis**.
|
|
3
3
|
|
|
4
4
|
layouts:
|
|
5
5
|
cover:
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
name: AZURE-A2Z
|
|
2
2
|
version: "1.0.0"
|
|
3
3
|
label: "Azure Professional (에이투지체 / A2Z)"
|
|
4
|
-
|
|
5
|
-
description: "Flagship SOTA blue-and-white deck — 16:9 widescreen, LitOpenCode Sans, geometric gradient accents, rounded tint cards, numbered chips, KPI cards. Pro-designer aesthetic."
|
|
4
|
+
description: "Flagship SOTA blue-and-white deck — 16:9 widescreen, Pretendard, geometric gradient accents, rounded tint cards, numbered chips, KPI cards. Pro-designer aesthetic."
|
|
6
5
|
|
|
7
6
|
fonts:
|
|
8
7
|
title: "에이투지체 7 Bold"
|
|
@@ -35,3 +34,7 @@ global_typography:
|
|
|
35
34
|
bullet_char: "•"
|
|
36
35
|
bullet_color: "1D4ED8"
|
|
37
36
|
section_accent: "1D4ED8"
|
|
37
|
+
|
|
38
|
+
# Read as a legacy pack: what this template can draw beyond plain text regions.
|
|
39
|
+
pack:
|
|
40
|
+
capabilities: [rich-blocks, recolor, font-swap, mesh-background]
|
|
@@ -8,8 +8,8 @@ supported_layouts:
|
|
|
8
8
|
|
|
9
9
|
supported_blocks:
|
|
10
10
|
cover: [title]
|
|
11
|
-
content: [title, key-message, body,
|
|
12
|
-
main: [title, key-message, body,
|
|
11
|
+
content: [title, key-message, body, image, notes, kpi-table, figure-caption, table-caption]
|
|
12
|
+
main: [title, key-message, body, main-box, kpi-table, image, figure-caption, table-caption]
|
|
13
13
|
summary: [title, key-message, summary-group, image, kpi-table, figure-caption, table-caption]
|
|
14
14
|
closing: [title]
|
|
15
15
|
section: [title, notes]
|
|
@@ -21,7 +21,7 @@ supported_body_items:
|
|
|
21
21
|
|
|
22
22
|
font_roles:
|
|
23
23
|
cover_title:
|
|
24
|
-
font: "
|
|
24
|
+
font: "Pretendard"
|
|
25
25
|
size: 50
|
|
26
26
|
char_spacing: -2.0
|
|
27
27
|
line_spacing: 1.06
|
|
@@ -29,7 +29,7 @@ font_roles:
|
|
|
29
29
|
bold: true
|
|
30
30
|
color: "#0E1B2C"
|
|
31
31
|
key_message:
|
|
32
|
-
font: "
|
|
32
|
+
font: "Pretendard"
|
|
33
33
|
size: 15
|
|
34
34
|
char_spacing: -0.2
|
|
35
35
|
line_spacing: 1.3
|
|
@@ -37,14 +37,14 @@ font_roles:
|
|
|
37
37
|
bold: true
|
|
38
38
|
color: "#1D4ED8"
|
|
39
39
|
eyebrow:
|
|
40
|
-
font: "
|
|
40
|
+
font: "Pretendard"
|
|
41
41
|
size: 11
|
|
42
42
|
char_spacing: 1.5
|
|
43
43
|
align: left
|
|
44
44
|
bold: true
|
|
45
45
|
color: "#1D4ED8"
|
|
46
46
|
subtitle:
|
|
47
|
-
font: "
|
|
47
|
+
font: "Pretendard"
|
|
48
48
|
size: 16
|
|
49
49
|
char_spacing: -0.3
|
|
50
50
|
line_spacing: 1.35
|
|
@@ -52,21 +52,21 @@ font_roles:
|
|
|
52
52
|
bold: false
|
|
53
53
|
color: "#51607A"
|
|
54
54
|
cover_date:
|
|
55
|
-
font: "
|
|
55
|
+
font: "Pretendard"
|
|
56
56
|
size: 12
|
|
57
57
|
char_spacing: 0.2
|
|
58
58
|
align: center
|
|
59
59
|
bold: true
|
|
60
60
|
color: "#FFFFFF"
|
|
61
61
|
section_title:
|
|
62
|
-
font: "
|
|
62
|
+
font: "Pretendard"
|
|
63
63
|
size: 27
|
|
64
64
|
char_spacing: -1.0
|
|
65
65
|
align: left
|
|
66
66
|
bold: true
|
|
67
67
|
color: "#0E1B2C"
|
|
68
68
|
divider_title:
|
|
69
|
-
font: "
|
|
69
|
+
font: "Pretendard"
|
|
70
70
|
size: 42
|
|
71
71
|
char_spacing: -1.5
|
|
72
72
|
line_spacing: 1.05
|
|
@@ -74,14 +74,14 @@ font_roles:
|
|
|
74
74
|
bold: true
|
|
75
75
|
color: "#FFFFFF"
|
|
76
76
|
closing_title:
|
|
77
|
-
font: "
|
|
77
|
+
font: "Pretendard"
|
|
78
78
|
size: 44
|
|
79
79
|
char_spacing: -1.5
|
|
80
80
|
align: center
|
|
81
81
|
bold: true
|
|
82
82
|
color: "#0E1B2C"
|
|
83
83
|
body_text:
|
|
84
|
-
font: "
|
|
84
|
+
font: "Pretendard"
|
|
85
85
|
size: 13
|
|
86
86
|
char_spacing: -0.3
|
|
87
87
|
line_spacing: 1.4
|
|
@@ -89,60 +89,60 @@ font_roles:
|
|
|
89
89
|
bold: false
|
|
90
90
|
color: "#0E1B2C"
|
|
91
91
|
section_header:
|
|
92
|
-
font: "
|
|
92
|
+
font: "Pretendard"
|
|
93
93
|
size: 15
|
|
94
94
|
char_spacing: -0.3
|
|
95
95
|
align: left
|
|
96
96
|
bold: true
|
|
97
97
|
color: "#0E1B2C"
|
|
98
98
|
numbered_item:
|
|
99
|
-
font: "
|
|
99
|
+
font: "Pretendard"
|
|
100
100
|
size: 13
|
|
101
101
|
char_spacing: -0.3
|
|
102
102
|
align: left
|
|
103
103
|
bold: false
|
|
104
104
|
color: "#0E1B2C"
|
|
105
105
|
table_header:
|
|
106
|
-
font: "
|
|
106
|
+
font: "Pretendard"
|
|
107
107
|
size: 12
|
|
108
108
|
align: left
|
|
109
109
|
bold: true
|
|
110
110
|
color: "#0E1B2C"
|
|
111
111
|
fill: "#EEF4FF"
|
|
112
112
|
table_data:
|
|
113
|
-
font: "
|
|
113
|
+
font: "Pretendard"
|
|
114
114
|
size: 12
|
|
115
115
|
align: left
|
|
116
116
|
bold: false
|
|
117
117
|
color: "#0E1B2C"
|
|
118
118
|
kpi_value:
|
|
119
|
-
font: "
|
|
119
|
+
font: "Pretendard"
|
|
120
120
|
size: 34
|
|
121
121
|
char_spacing: -1.0
|
|
122
122
|
align: left
|
|
123
123
|
bold: true
|
|
124
124
|
color: "#1D4ED8"
|
|
125
125
|
kpi_label:
|
|
126
|
-
font: "
|
|
126
|
+
font: "Pretendard"
|
|
127
127
|
size: 9.5
|
|
128
128
|
char_spacing: 0.4
|
|
129
129
|
align: left
|
|
130
130
|
bold: false
|
|
131
131
|
color: "#51607A"
|
|
132
132
|
figure_caption:
|
|
133
|
-
font: "
|
|
133
|
+
font: "Pretendard"
|
|
134
134
|
size: 9
|
|
135
135
|
align: center
|
|
136
136
|
bold: false
|
|
137
137
|
color: "#51607A"
|
|
138
138
|
table_caption:
|
|
139
|
-
font: "
|
|
139
|
+
font: "Pretendard"
|
|
140
140
|
size: 9
|
|
141
141
|
align: center
|
|
142
142
|
bold: false
|
|
143
143
|
color: "#51607A"
|
|
144
144
|
disclaimer:
|
|
145
|
-
font: "
|
|
145
|
+
font: "Pretendard"
|
|
146
146
|
size: 8
|
|
147
147
|
align: left
|
|
148
148
|
bold: false
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Layout Mapping — AZURE-PRO (16:9, 13.333 x 7.5 in). Positions in inches.
|
|
2
|
-
#
|
|
2
|
+
# rich-blocks capability (template.yaml pack:) → body→cards, kpi-table→KPI cards, cover title **emphasis**.
|
|
3
3
|
|
|
4
4
|
layouts:
|
|
5
5
|
cover:
|
|
@@ -115,11 +115,6 @@ layouts:
|
|
|
115
115
|
w: 11.65
|
|
116
116
|
h: 3.7
|
|
117
117
|
font_role: body_text
|
|
118
|
-
chart:
|
|
119
|
-
x: 0.84
|
|
120
|
-
y: 2.05
|
|
121
|
-
w: 11.65
|
|
122
|
-
h: 4.45
|
|
123
118
|
table:
|
|
124
119
|
x: 0.84
|
|
125
120
|
y: 2.05
|
|
@@ -171,11 +166,6 @@ layouts:
|
|
|
171
166
|
w: 11.65
|
|
172
167
|
h: 3.4
|
|
173
168
|
font_role: body_text
|
|
174
|
-
chart:
|
|
175
|
-
x: 0.84
|
|
176
|
-
y: 2.05
|
|
177
|
-
w: 11.65
|
|
178
|
-
h: 3.65
|
|
179
169
|
main_box:
|
|
180
170
|
x: 0.84
|
|
181
171
|
y: 5.85
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
name: AZURE-PRO
|
|
2
2
|
version: "1.0.0"
|
|
3
3
|
label: "Azure Professional"
|
|
4
|
-
|
|
5
|
-
description: "Flagship SOTA blue-and-white deck — 16:9 widescreen, LitOpenCode Sans, geometric gradient accents, rounded tint cards, numbered chips, KPI cards. Pro-designer aesthetic."
|
|
4
|
+
description: "Flagship SOTA blue-and-white deck — 16:9 widescreen, Pretendard, geometric gradient accents, rounded tint cards, numbered chips, KPI cards. Pro-designer aesthetic."
|
|
6
5
|
|
|
7
6
|
fonts:
|
|
8
|
-
title: "
|
|
9
|
-
body: "
|
|
10
|
-
light: "
|
|
7
|
+
title: "Pretendard"
|
|
8
|
+
body: "Pretendard"
|
|
9
|
+
light: "Pretendard"
|
|
11
10
|
|
|
12
11
|
dimensions:
|
|
13
12
|
width: 13.333
|
|
@@ -30,8 +29,12 @@ palette:
|
|
|
30
29
|
|
|
31
30
|
global_typography:
|
|
32
31
|
char_spacing: -0.3
|
|
33
|
-
bold_rule: "
|
|
34
|
-
bullet_font: "
|
|
32
|
+
bold_rule: "Pretendard is a weighted family — bold:true allowed."
|
|
33
|
+
bullet_font: "Pretendard"
|
|
35
34
|
bullet_char: "•"
|
|
36
35
|
bullet_color: "1D4ED8"
|
|
37
36
|
section_accent: "1D4ED8"
|
|
37
|
+
|
|
38
|
+
# Read as a legacy pack: what this template can draw beyond plain text regions.
|
|
39
|
+
pack:
|
|
40
|
+
capabilities: [rich-blocks, recolor, font-swap, mesh-background]
|
|
@@ -22,7 +22,7 @@ supported_body_items:
|
|
|
22
22
|
# roles take POSITIVE tracking, overriding the global -0.5 narrow default.
|
|
23
23
|
font_roles:
|
|
24
24
|
cover_title:
|
|
25
|
-
font: "
|
|
25
|
+
font: "Pretendard"
|
|
26
26
|
size: 36
|
|
27
27
|
char_spacing: -1.0
|
|
28
28
|
line_spacing: 1.16
|
|
@@ -31,7 +31,7 @@ font_roles:
|
|
|
31
31
|
color: "#3C3836"
|
|
32
32
|
|
|
33
33
|
cover_metadata:
|
|
34
|
-
font: "
|
|
34
|
+
font: "Pretendard"
|
|
35
35
|
size: 13
|
|
36
36
|
char_spacing: -0.5
|
|
37
37
|
line_spacing: 1.3
|
|
@@ -40,7 +40,7 @@ font_roles:
|
|
|
40
40
|
color: "#6E6256"
|
|
41
41
|
|
|
42
42
|
cover_date:
|
|
43
|
-
font: "
|
|
43
|
+
font: "Pretendard"
|
|
44
44
|
size: 10
|
|
45
45
|
char_spacing: -0.5
|
|
46
46
|
line_spacing: 1.1
|
|
@@ -49,7 +49,7 @@ font_roles:
|
|
|
49
49
|
color: "#6E6256"
|
|
50
50
|
|
|
51
51
|
section_title:
|
|
52
|
-
font: "
|
|
52
|
+
font: "Pretendard"
|
|
53
53
|
size: 24
|
|
54
54
|
char_spacing: -0.5
|
|
55
55
|
line_spacing: 1.12
|
|
@@ -58,7 +58,7 @@ font_roles:
|
|
|
58
58
|
color: "#3C3836"
|
|
59
59
|
|
|
60
60
|
section_header:
|
|
61
|
-
font: "
|
|
61
|
+
font: "Pretendard"
|
|
62
62
|
size: 15
|
|
63
63
|
char_spacing: -0.5
|
|
64
64
|
line_spacing: 1.3
|
|
@@ -68,12 +68,12 @@ font_roles:
|
|
|
68
68
|
space_after: 6
|
|
69
69
|
bullet_type: bullet
|
|
70
70
|
bullet_char: "•"
|
|
71
|
-
bullet_font: "
|
|
71
|
+
bullet_font: "Pretendard"
|
|
72
72
|
marL: 0.25
|
|
73
73
|
indent: -0.25
|
|
74
74
|
|
|
75
75
|
body_text:
|
|
76
|
-
font: "
|
|
76
|
+
font: "Pretendard"
|
|
77
77
|
size: 12
|
|
78
78
|
char_spacing: -0.5
|
|
79
79
|
line_spacing: 1.3
|
|
@@ -82,7 +82,7 @@ font_roles:
|
|
|
82
82
|
color: "#3C3836"
|
|
83
83
|
|
|
84
84
|
body_text_toc:
|
|
85
|
-
font: "
|
|
85
|
+
font: "Pretendard"
|
|
86
86
|
size: 20
|
|
87
87
|
char_spacing: -0.5
|
|
88
88
|
line_spacing: 1.3
|
|
@@ -92,7 +92,7 @@ font_roles:
|
|
|
92
92
|
space_after: 8
|
|
93
93
|
|
|
94
94
|
numbered_item:
|
|
95
|
-
font: "
|
|
95
|
+
font: "Pretendard"
|
|
96
96
|
size: 12
|
|
97
97
|
char_spacing: -0.5
|
|
98
98
|
line_spacing: 1.3
|
|
@@ -106,7 +106,7 @@ font_roles:
|
|
|
106
106
|
indent: -0.3125
|
|
107
107
|
|
|
108
108
|
table_header:
|
|
109
|
-
font: "
|
|
109
|
+
font: "Pretendard"
|
|
110
110
|
size: 11
|
|
111
111
|
char_spacing: -0.5
|
|
112
112
|
align: left
|
|
@@ -115,7 +115,7 @@ font_roles:
|
|
|
115
115
|
fill: "#FBFAF7"
|
|
116
116
|
|
|
117
117
|
table_data:
|
|
118
|
-
font: "
|
|
118
|
+
font: "Pretendard"
|
|
119
119
|
size: 11
|
|
120
120
|
char_spacing: -0.5
|
|
121
121
|
align: left
|
|
@@ -123,7 +123,7 @@ font_roles:
|
|
|
123
123
|
color: "#3C3836"
|
|
124
124
|
|
|
125
125
|
closing_title:
|
|
126
|
-
font: "
|
|
126
|
+
font: "Pretendard"
|
|
127
127
|
size: 36
|
|
128
128
|
char_spacing: -1.0
|
|
129
129
|
line_spacing: 1.0
|
|
@@ -132,7 +132,7 @@ font_roles:
|
|
|
132
132
|
color: "#3C3836"
|
|
133
133
|
|
|
134
134
|
disclaimer:
|
|
135
|
-
font: "
|
|
135
|
+
font: "Pretendard"
|
|
136
136
|
size: 8
|
|
137
137
|
char_spacing: -0.5
|
|
138
138
|
line_spacing: 1.3
|
|
@@ -141,7 +141,7 @@ font_roles:
|
|
|
141
141
|
color: "#6E6256"
|
|
142
142
|
|
|
143
143
|
kpi_value:
|
|
144
|
-
font: "
|
|
144
|
+
font: "Pretendard"
|
|
145
145
|
size: 28
|
|
146
146
|
char_spacing: -0.7
|
|
147
147
|
align: left
|
|
@@ -149,7 +149,7 @@ font_roles:
|
|
|
149
149
|
color: "#3C3836"
|
|
150
150
|
|
|
151
151
|
kpi_label:
|
|
152
|
-
font: "
|
|
152
|
+
font: "Pretendard"
|
|
153
153
|
size: 9
|
|
154
154
|
char_spacing: 0.4
|
|
155
155
|
align: left
|
|
@@ -157,7 +157,7 @@ font_roles:
|
|
|
157
157
|
color: "#6E6256"
|
|
158
158
|
|
|
159
159
|
figure_caption:
|
|
160
|
-
font: "
|
|
160
|
+
font: "Pretendard"
|
|
161
161
|
size: 9
|
|
162
162
|
char_spacing: -0.5
|
|
163
163
|
line_spacing: 1.3
|
|
@@ -166,7 +166,7 @@ font_roles:
|
|
|
166
166
|
color: "#3F6F5B"
|
|
167
167
|
|
|
168
168
|
table_caption:
|
|
169
|
-
font: "
|
|
169
|
+
font: "Pretendard"
|
|
170
170
|
size: 9
|
|
171
171
|
char_spacing: -0.5
|
|
172
172
|
line_spacing: 1.3
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
name: BOILERPLATE-PRETENDARD
|
|
2
2
|
version: "1.0.0"
|
|
3
|
-
label: "Boilerplate Professional (
|
|
4
|
-
description: "Generic professional/technical deck — 4:3 canvas,
|
|
3
|
+
label: "Boilerplate Professional (Pretendard)"
|
|
4
|
+
description: "Generic professional/technical deck — 4:3 canvas, Pretendard typography, white ground, dark charcoal structure, restrained Gruvbox-style accents. Brand-agnostic."
|
|
5
5
|
|
|
6
|
-
# Default body font.
|
|
6
|
+
# Default body font. Pretendard is a single family with real weights, so unlike
|
|
7
7
|
# 에이투지체 (per-weight families) bold:true IS valid here.
|
|
8
8
|
fonts:
|
|
9
|
-
title: "
|
|
10
|
-
body: "
|
|
11
|
-
light: "
|
|
9
|
+
title: "Pretendard"
|
|
10
|
+
body: "Pretendard"
|
|
11
|
+
light: "Pretendard"
|
|
12
12
|
|
|
13
13
|
dimensions:
|
|
14
14
|
width: 10
|
|
@@ -37,8 +37,8 @@ decoration_assets: {}
|
|
|
37
37
|
|
|
38
38
|
global_typography:
|
|
39
39
|
char_spacing: -0.5 # PowerPoint "Narrow 0.5pt" (boilerplate default)
|
|
40
|
-
bold_rule: "
|
|
41
|
-
bullet_font: "
|
|
40
|
+
bold_rule: "Pretendard is a weighted family — bold:true is allowed (use sparingly for hierarchy)."
|
|
41
|
+
bullet_font: "Pretendard"
|
|
42
42
|
bullet_char: "•"
|
|
43
43
|
bullet_color: "3C3836" # ink bullets (boilerplate uses ink, not a green accent)
|
|
44
44
|
section_accent: "3C3836" # section-card / accent treatment uses ink hairlines
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Atlas: a picture book with captions. Images bleed, titles sit on dark panels over photographs
|
|
2
|
+
# or under large images, text stays short and calm, and the photographs bring the colour. Wrong
|
|
3
|
+
# when there are few real images: a look built around pictures turns into empty boxes without them.
|
|
4
|
+
id: atlas
|
|
5
|
+
name: Atlas
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
intent: "Image-led decks: products, portfolios, places, field work."
|
|
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 Regular
|
|
13
|
+
title: Pretendard Bold
|
|
14
|
+
body: Pretendard Regular
|
|
15
|
+
label: Pretendard Regular
|
|
16
|
+
numeral: Pretendard Regular
|
|
17
|
+
faces-pretendard-only:
|
|
18
|
+
display: Pretendard Regular
|
|
19
|
+
title: Pretendard Bold
|
|
20
|
+
body: Pretendard Regular
|
|
21
|
+
label: Pretendard Regular
|
|
22
|
+
numeral: Pretendard Regular
|
|
23
|
+
faces-a2z:
|
|
24
|
+
display: A2Z Light
|
|
25
|
+
title: Pretendard Bold
|
|
26
|
+
body: Pretendard Regular
|
|
27
|
+
label: Pretendard Regular
|
|
28
|
+
numeral: A2Z Light
|
|
29
|
+
|
|
30
|
+
palette:
|
|
31
|
+
ground: "#FFFFFF"
|
|
32
|
+
surface: "#F3F4F5"
|
|
33
|
+
ink: "#1A1D21"
|
|
34
|
+
ink-muted: "#555B63"
|
|
35
|
+
line: "#D6D9DD"
|
|
36
|
+
accent: "#2B4C7E"
|
|
37
|
+
accent-deep: "#1B2F4E"
|
|
38
|
+
accent-tint: "#E6ECF4"
|
|
39
|
+
field: "#1A1D21"
|
|
40
|
+
on-field: "#FFFFFF"
|
|
41
|
+
positive: "#1E7A3F"
|
|
42
|
+
negative: "#B3261E"
|
|
43
|
+
series: ["#2B4C7E", "#555B63", "#8A6A2E", "#3E7A5A"]
|
|
44
|
+
|
|
45
|
+
ramp: reading
|
|
46
|
+
hero: false
|
|
47
|
+
type-voice:
|
|
48
|
+
title-tracking: 0
|
|
49
|
+
display-tracking: -1
|
|
50
|
+
latin-case: sentence
|
|
51
|
+
figures: proportional
|
|
52
|
+
|
|
53
|
+
density: 10
|
|
54
|
+
variance: 7
|
|
55
|
+
radius: 0
|
|
56
|
+
edge: fill
|
|
57
|
+
|
|
58
|
+
treatments: [overlay, bottom-anchor, side-rail, top-plain-large, statement]
|
|
59
|
+
role-defaults:
|
|
60
|
+
content: side-rail
|
|
61
|
+
data: top-plain-large
|
|
62
|
+
data-takeaway: bottom-anchor
|
|
63
|
+
sequence: top-plain-large
|
|
64
|
+
image: overlay
|
|
65
|
+
statement: statement
|
|
66
|
+
reference: side-rail
|
|
67
|
+
definition: side-rail
|
|
68
|
+
|
|
69
|
+
decoration: [caption-band, hairline-rule, colour-field]
|
|
70
|
+
layout-families: [image-full, image-split, photo-grid, figure-pair, asymmetric-feature, kpi-row, comparison, timeline, text-column, 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
|
+
cover: plate
|
|
75
|
+
statement: drench
|
|
76
|
+
number: tint
|
|
77
|
+
closing: band
|
|
78
|
+
covers: [cover-full-image, cover-split-image, cover-typographic]
|
|
79
|
+
sections: [section-image, section-field]
|
|
80
|
+
closings: [closing-contact-split, closing-ask]
|
|
81
|
+
|
|
82
|
+
table:
|
|
83
|
+
style: light-grid
|
|
84
|
+
header: none
|
|
85
|
+
header-ink: ink
|
|
86
|
+
rules: rows
|
|
87
|
+
banding: none
|
|
88
|
+
numbers: right-tabular
|
|
89
|
+
totals: bold
|
|
90
|
+
chart:
|
|
91
|
+
gridlines: hairline
|
|
92
|
+
labels: direct
|
|
93
|
+
highlight: accent-on-muted
|
|
94
|
+
annotation: off
|
|
95
|
+
image:
|
|
96
|
+
bleed: allowed
|
|
97
|
+
crop: allowed
|
|
98
|
+
frame: none
|
|
99
|
+
|
|
100
|
+
fill-order: [anchor-visual, change-family, distribute, step-up]
|
|
101
|
+
avoid:
|
|
102
|
+
- text placed straight on photographs
|
|
103
|
+
- images in card frames
|
|
104
|
+
- more than three images in one row
|
|
105
|
+
- grey placeholder boxes in a delivered deck
|