@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
@@ -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
- escaped = [re.escape(term) for term in terms]
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
- flags = re.IGNORECASE if case_insensitive else 0
63
- return re.compile(pattern, flags)
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
- has_source_note = "source:" in last_slide_text or "출처" in last_slide_text
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: "LitOpenCode Sans"
35
- body: "LitOpenCode Sans"
36
- light: "LitOpenCode Sans"
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 `LitOpenCode Sans`, bundled with the skill.
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: "LitOpenCode Sans";
5
+ font-family: "Pretendard";
6
6
  font-weight: 300;
7
- src: url("../pretendard-font/public/static/LitOpenCodeSans-Regular.otf") format("opentype");
7
+ src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
8
8
  }
9
9
  @font-face {
10
- font-family: "LitOpenCode Sans";
10
+ font-family: "Pretendard";
11
11
  font-weight: 400;
12
- src: url("../pretendard-font/public/static/LitOpenCodeSans-Regular.otf") format("opentype");
12
+ src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
13
13
  }
14
14
  @font-face {
15
- font-family: "LitOpenCode Sans";
15
+ font-family: "Pretendard";
16
16
  font-weight: 500;
17
- src: url("../pretendard-font/public/static/LitOpenCodeSans-Regular.otf") format("opentype");
17
+ src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
18
18
  }
19
19
  @font-face {
20
- font-family: "LitOpenCode Sans";
20
+ font-family: "Pretendard";
21
21
  font-weight: 600;
22
- src: url("../pretendard-font/public/static/LitOpenCodeSans-Regular.otf") format("opentype");
22
+ src: url("../pretendard-font/public/static/Pretendard-Regular.otf") format("opentype");
23
23
  }
24
24
  @font-face {
25
- font-family: "LitOpenCode Sans";
25
+ font-family: "Pretendard";
26
26
  font-weight: 700;
27
- src: url("../pretendard-font/public/static/LitOpenCodeSans-Bold.otf") format("opentype");
27
+ src: url("../pretendard-font/public/static/Pretendard-Bold.otf") format("opentype");
28
28
  }
29
29
  @font-face {
30
- font-family: "LitOpenCode Sans";
30
+ font-family: "Pretendard";
31
31
  font-weight: 800;
32
- src: url("../pretendard-font/public/static/LitOpenCodeSans-Bold.otf") format("opentype");
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: "LitOpenCode Sans", Arial, sans-serif;
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
- # render_style: azure → body→cards, kpi-table→KPI cards, cover title **emphasis**.
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
- render_style: azure
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, chart, image, notes, kpi-table, figure-caption, table-caption]
12
- main: [title, key-message, body, chart, main-box, kpi-table, image, figure-caption, table-caption]
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
139
+ font: "Pretendard"
140
140
  size: 9
141
141
  align: center
142
142
  bold: false
143
143
  color: "#51607A"
144
144
  disclaimer:
145
- font: "LitOpenCode Sans"
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
- # render_style: azure → body→cards, kpi-table→KPI cards, cover title **emphasis**.
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
- render_style: azure
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: "LitOpenCode Sans"
9
- body: "LitOpenCode Sans"
10
- light: "LitOpenCode Sans"
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: "LitOpenCode Sans is a weighted family — bold:true allowed."
34
- bullet_font: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
71
+ bullet_font: "Pretendard"
72
72
  marL: 0.25
73
73
  indent: -0.25
74
74
 
75
75
  body_text:
76
- font: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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: "LitOpenCode Sans"
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 (LitOpenCode Sans)"
4
- description: "Generic professional/technical deck — 4:3 canvas, LitOpenCode Sans typography, white ground, dark charcoal structure, restrained Gruvbox-style accents. Brand-agnostic."
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. LitOpenCode Sans is a single family with real weights, so unlike
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: "LitOpenCode Sans"
10
- body: "LitOpenCode Sans"
11
- light: "LitOpenCode Sans"
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: "LitOpenCode Sans is a weighted family — bold:true is allowed (use sparingly for hierarchy)."
41
- bullet_font: "LitOpenCode Sans"
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