brand-intent 0.12.0 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brand-intent",
3
- "version": "0.12.0",
3
+ "version": "0.12.1",
4
4
  "description": "An open file format specification for making brand intent machine-readable.",
5
5
  "author": "Christophe Stoll <christophe@stoll.studio>",
6
6
  "license": "MIT",
@@ -21,6 +21,7 @@
21
21
  "types": "./parser/index.ts",
22
22
  "default": "./parser/index.ts"
23
23
  },
24
+ "./syntaxes/*": "./vscode-extension/syntaxes/*",
24
25
  "./package.json": "./package.json"
25
26
  },
26
27
  "types": "./parser/index.ts",
@@ -43,6 +44,7 @@
43
44
  "cli/",
44
45
  "parser/",
45
46
  "skills/",
46
- "examples/"
47
+ "examples/",
48
+ "vscode-extension/syntaxes/"
47
49
  ]
48
50
  }
@@ -0,0 +1,418 @@
1
+ {
2
+ "scopeName": "source.brand-intent-brand",
3
+ "name": "Brand Intent Brand",
4
+ "patterns": [
5
+ { "include": "#family-pair" },
6
+ { "include": "#comment" },
7
+ { "include": "#id-field" },
8
+ { "include": "#name-field" },
9
+ { "include": "#tokens-enum" },
10
+ { "include": "#brand-colors-header" },
11
+ { "include": "#state-colors-header" },
12
+ { "include": "#color-bounds-header" },
13
+ { "include": "#color-rules-header" },
14
+ { "include": "#color-families-header" },
15
+ { "include": "#color-rules-entry" },
16
+ { "include": "#color-families-property" },
17
+ { "include": "#family-header" },
18
+ { "include": "#family-role" },
19
+ { "include": "#family-pairs-keyword" },
20
+ { "include": "#color-mode-enum" },
21
+ { "include": "#color-strategy-enum" },
22
+ { "include": "#color-adherence-enum" },
23
+ { "include": "#state-colors-entry" },
24
+ { "include": "#color-bounds-entry" },
25
+ { "include": "#color-adherence-override" },
26
+ { "include": "#color-group-header" },
27
+ { "include": "#color-group-property" },
28
+ { "include": "#color-group-entry" },
29
+ { "include": "#color-group-reference" },
30
+ { "include": "#color-group-entry-property" },
31
+ { "include": "#theme-header" },
32
+ { "include": "#brand-color-entry" },
33
+ { "include": "#brand-color-print-sub" },
34
+ { "include": "#token-slot-ref" },
35
+ { "include": "#token-slot-with-comment" },
36
+ { "include": "#token-slot" },
37
+ { "include": "#spacing-value" },
38
+ { "include": "#divider-header" },
39
+ { "include": "#divider-value" },
40
+ { "include": "#font-header" },
41
+ { "include": "#font-value" },
42
+ { "include": "#typography-header" },
43
+ { "include": "#typography-value" },
44
+ { "include": "#asset-header" },
45
+ { "include": "#asset-value" },
46
+ { "include": "#badge-header" },
47
+ { "include": "#badge-value" },
48
+ { "include": "#string-field" },
49
+ { "include": "#keyword-partial" }
50
+ ],
51
+ "repository": {
52
+ "comment": {
53
+ "match": "^\\s*#.*$",
54
+ "name": "comment.line.number-sign.brand-intent-brand"
55
+ },
56
+ "id-field": {
57
+ "match": "^(id:)\\s+(.*)",
58
+ "captures": {
59
+ "1": { "name": "keyword.control.brand-intent-brand" },
60
+ "2": { "name": "entity.name.type.brand-intent-brand" }
61
+ }
62
+ },
63
+ "name-field": {
64
+ "match": "^(name:)\\s+(.*)",
65
+ "captures": {
66
+ "1": { "name": "keyword.control.brand-intent-brand" },
67
+ "2": { "name": "string.unquoted.brand-intent-brand" }
68
+ }
69
+ },
70
+ "tokens-enum": {
71
+ "match": "^(tokens:)\\s+(figma|inline)",
72
+ "captures": {
73
+ "1": { "name": "keyword.control.brand-intent-brand" },
74
+ "2": { "name": "entity.name.tag.brand-intent-brand" }
75
+ }
76
+ },
77
+ "brand-colors-header": {
78
+ "match": "^(brand-colors)\\s*$",
79
+ "captures": {
80
+ "1": { "name": "keyword.control.brand-intent-brand" }
81
+ }
82
+ },
83
+ "state-colors-header": {
84
+ "match": "^(state-colors)\\s*$",
85
+ "captures": {
86
+ "1": { "name": "keyword.control.brand-intent-brand" }
87
+ }
88
+ },
89
+ "color-bounds-header": {
90
+ "match": "^(color-bounds)\\s*$",
91
+ "captures": {
92
+ "1": { "name": "keyword.control.brand-intent-brand" }
93
+ }
94
+ },
95
+ "color-rules-header": {
96
+ "match": "^(color-rules)\\s*$",
97
+ "captures": {
98
+ "1": { "name": "keyword.control.brand-intent-brand" }
99
+ }
100
+ },
101
+ "color-families-header": {
102
+ "match": "^(color-families)\\s*$",
103
+ "captures": {
104
+ "1": { "name": "keyword.control.brand-intent-brand" }
105
+ }
106
+ },
107
+ "color-rules-entry": {
108
+ "comment": "Entries under color-rules: text/figure (contrast), avoid (tone combos), tones (thresholds)",
109
+ "match": "^(\\s{2,})(text|figure|avoid|tones)(:\\s*)(.+)$",
110
+ "captures": {
111
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
112
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
113
+ "4": { "name": "constant.numeric.brand-intent-brand" }
114
+ }
115
+ },
116
+ "color-families-property": {
117
+ "comment": "Block keys under color-families: order/borrow/distance/shared",
118
+ "match": "^( {2})(order|borrow|distance|shared)(:\\s*)(.+)$",
119
+ "captures": {
120
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
121
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
122
+ "4": { "name": "entity.name.tag.brand-intent-brand" }
123
+ }
124
+ },
125
+ "family-header": {
126
+ "match": "^( {2})(family)\\s+(\\S+)\\s*$",
127
+ "captures": {
128
+ "2": { "name": "keyword.control.brand-intent-brand" },
129
+ "3": { "name": "entity.name.type.brand-intent-brand" }
130
+ }
131
+ },
132
+ "family-role": {
133
+ "comment": "Family color: core/accent/contrast → #HEX [Name]",
134
+ "match": "^(\\s{4,})(core|accent|contrast)(:\\s*)(#[0-9A-Fa-f]{3,6})(?:\\s+(.+))?$",
135
+ "captures": {
136
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
137
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
138
+ "4": { "name": "constant.other.color.rgb-value.brand-intent-brand" },
139
+ "5": { "name": "string.unquoted.brand-intent-brand" }
140
+ }
141
+ },
142
+ "family-pairs-keyword": {
143
+ "match": "^(\\s{4,})(pairs)\\s*$",
144
+ "captures": {
145
+ "2": { "name": "keyword.control.brand-intent-brand" }
146
+ }
147
+ },
148
+ "family-pair": {
149
+ "comment": "Pair line: ground / figure (hex or $ref). Listed before #comment so indented hex is not read as a comment.",
150
+ "match": "^(\\s{4,})(#[0-9A-Fa-f]{3,6}|\\$[\\w-]+)(\\s*/\\s*)(#[0-9A-Fa-f]{3,6}|\\$[\\w-]+)\\s*$",
151
+ "captures": {
152
+ "2": { "name": "constant.other.color.rgb-value.brand-intent-brand" },
153
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
154
+ "4": { "name": "constant.other.color.rgb-value.brand-intent-brand" }
155
+ }
156
+ },
157
+ "color-mode-enum": {
158
+ "match": "^(color-mode:)\\s+(static|dynamic|guided|brand)",
159
+ "captures": {
160
+ "1": { "name": "keyword.control.brand-intent-brand" },
161
+ "2": { "name": "entity.name.tag.brand-intent-brand" }
162
+ }
163
+ },
164
+ "color-strategy-enum": {
165
+ "match": "^(color-strategy:)\\s+(monochrome|duotone|tricolor|spectrum)",
166
+ "captures": {
167
+ "1": { "name": "keyword.control.brand-intent-brand" },
168
+ "2": { "name": "entity.name.tag.brand-intent-brand" }
169
+ }
170
+ },
171
+ "color-adherence-enum": {
172
+ "match": "^(color-adherence:)\\s+(strict|on-brand|flexible)",
173
+ "captures": {
174
+ "1": { "name": "keyword.control.brand-intent-brand" },
175
+ "2": { "name": "entity.name.tag.brand-intent-brand" }
176
+ }
177
+ },
178
+ "state-colors-entry": {
179
+ "comment": "Indented entries under state-colors: problem/warning/success/info/inactive → hex",
180
+ "match": "^(\\s{2,})(problem|warning|success|info|inactive)(:\\s*)(#[0-9A-Fa-f]{3,8})\\s*$",
181
+ "captures": {
182
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
183
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
184
+ "4": { "name": "constant.other.color.rgb-value.brand-intent-brand" }
185
+ }
186
+ },
187
+ "color-bounds-entry": {
188
+ "comment": "Indented entries under color-bounds: light/dark (0–1) + saturation-floor (0–100)",
189
+ "match": "^(\\s{2,})(light|dark|saturation-floor)(:\\s*)(\\S+)",
190
+ "captures": {
191
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
192
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
193
+ "4": { "name": "constant.numeric.brand-intent-brand" }
194
+ }
195
+ },
196
+ "color-adherence-override": {
197
+ "comment": "Optional tolerance overrides under color-adherence: hue-tolerance / sat-tolerance",
198
+ "match": "^(\\s{2,})(hue-tolerance|sat-tolerance)(:\\s*)(\\S+)",
199
+ "captures": {
200
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
201
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
202
+ "4": { "name": "constant.numeric.brand-intent-brand" }
203
+ }
204
+ },
205
+ "color-group-header": {
206
+ "comment": "Grouped brand-colors: 2-space indent, bare group keyword",
207
+ "match": "^( {2})(primary|secondary|accent|neutral)\\s*$",
208
+ "captures": {
209
+ "2": { "name": "keyword.control.brand-intent-brand" }
210
+ }
211
+ },
212
+ "color-group-property": {
213
+ "comment": "Group-level property (4-space indent): meaning / distribution. distribution's value is numeric (0–100).",
214
+ "match": "^( {4})(distribution)(:\\s*)(\\d+(?:\\.\\d+)?%?)\\s*$|^( {4})(meaning)(:\\s*)(.*)$",
215
+ "captures": {
216
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
217
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
218
+ "4": { "name": "constant.numeric.brand-intent-brand" },
219
+ "6": { "name": "support.type.property-name.brand-intent-brand" },
220
+ "7": { "name": "punctuation.separator.key-value.brand-intent-brand" },
221
+ "8": { "name": "string.unquoted.brand-intent-brand" }
222
+ }
223
+ },
224
+ "color-group-entry": {
225
+ "comment": "Color entry header inside a group: 4-space indent, #HEX Name",
226
+ "match": "^( {4})(#[0-9A-Fa-f]{3,8})\\s+(.+?)\\s*$",
227
+ "captures": {
228
+ "2": { "name": "constant.other.color.rgb-value.brand-intent-brand" },
229
+ "3": { "name": "entity.name.type.brand-intent-brand" }
230
+ }
231
+ },
232
+ "color-group-reference": {
233
+ "comment": "Layer 2 cross-group reference: $group.role",
234
+ "match": "^( {4})(\\$[a-z]+\\.[a-z-]+)\\s*$",
235
+ "captures": {
236
+ "2": { "name": "entity.name.tag.brand-intent-brand" }
237
+ }
238
+ },
239
+ "color-group-entry-property": {
240
+ "comment": "Per-entry sub-property: 6-space indent, role / meaning / pantone / hks / cmyk",
241
+ "match": "^( {6})(role|meaning|pantone|hks|cmyk)(:\\s*)(.*)$",
242
+ "captures": {
243
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
244
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
245
+ "4": { "name": "string.unquoted.brand-intent-brand" }
246
+ }
247
+ },
248
+ "theme-header": {
249
+ "match": "^(theme)\\s+(\\S+)",
250
+ "captures": {
251
+ "1": { "name": "keyword.control.brand-intent-brand" },
252
+ "2": { "name": "entity.name.type.brand-intent-brand" }
253
+ }
254
+ },
255
+ "brand-color-entry": {
256
+ "comment": "Top-level brand color: exactly 2-space indent, name: #HEX",
257
+ "match": "^( {2})([-\\w]+)(:\\s*)(#[0-9A-Fa-f]{3,8})\\s*$",
258
+ "captures": {
259
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
260
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
261
+ "4": { "name": "constant.other.color.rgb-value.brand-intent-brand" }
262
+ }
263
+ },
264
+ "brand-color-print-sub": {
265
+ "comment": "Print sub-keys under a brand color: 4-space indent, pantone/hks/cmyk",
266
+ "match": "^( {4})(pantone|hks|cmyk)(:\\s*)(\\S.*)",
267
+ "captures": {
268
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
269
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
270
+ "4": { "name": "constant.numeric.brand-intent-brand" }
271
+ }
272
+ },
273
+ "token-slot-ref": {
274
+ "comment": "Indented token slot with $ref value, optional alpha suffix",
275
+ "match": "^(\\s{2,})([-\\w]+)(:\\s*)(\\$[\\w-]+)(?:\\s+([0-9]+(?:\\.[0-9]+)?%))?",
276
+ "captures": {
277
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
278
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
279
+ "4": { "name": "entity.name.tag.brand-intent-brand" },
280
+ "5": { "name": "constant.numeric.brand-intent-brand" }
281
+ }
282
+ },
283
+ "token-slot-with-comment": {
284
+ "comment": "Indented token slot: background: #HEX (optional NN%) (optional # annotation)",
285
+ "match": "^(\\s{2,})([-\\w]+)(:\\s*)(#[0-9A-Fa-f]{3,8})(?:\\s+([0-9]+(?:\\.[0-9]+)?%))?(\\s+#.*)?$",
286
+ "captures": {
287
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
288
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
289
+ "4": { "name": "constant.other.color.rgb-value.brand-intent-brand" },
290
+ "5": { "name": "constant.numeric.brand-intent-brand" },
291
+ "6": { "name": "comment.line.number-sign.brand-intent-brand" }
292
+ }
293
+ },
294
+ "token-slot": {
295
+ "comment": "Indented token slot without comment, optional alpha suffix",
296
+ "match": "^(\\s{2,})([-\\w]+)(:\\s*)(#[0-9A-Fa-f]{3,8})(?:\\s+([0-9]+(?:\\.[0-9]+)?%))?\\s*$",
297
+ "captures": {
298
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
299
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
300
+ "4": { "name": "constant.other.color.rgb-value.brand-intent-brand" },
301
+ "5": { "name": "constant.numeric.brand-intent-brand" }
302
+ }
303
+ },
304
+ "spacing-value": {
305
+ "comment": "Indented spacing key-value pairs",
306
+ "match": "^(\\s{2,})(unit|xs|s|m|l|xl)(:\\s*)(\\S+)",
307
+ "captures": {
308
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
309
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
310
+ "4": { "name": "constant.numeric.brand-intent-brand" }
311
+ }
312
+ },
313
+ "divider-header": {
314
+ "match": "^(divider)\\s+(\\S+)",
315
+ "captures": {
316
+ "1": { "name": "keyword.control.brand-intent-brand" },
317
+ "2": { "name": "entity.name.type.brand-intent-brand" }
318
+ }
319
+ },
320
+ "divider-value": {
321
+ "comment": "Indented divider property key-value pairs (color removed in 0.6.0 — sourced from theme)",
322
+ "match": "^(\\s{2,})(thickness|width|spacing|align)(:\\s*)(\\S+)",
323
+ "captures": {
324
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
325
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
326
+ "4": { "name": "constant.numeric.brand-intent-brand" }
327
+ }
328
+ },
329
+ "font-header": {
330
+ "match": "^(font)\\s+(\\S+)",
331
+ "captures": {
332
+ "1": { "name": "keyword.control.brand-intent-brand" },
333
+ "2": { "name": "entity.name.type.brand-intent-brand" }
334
+ }
335
+ },
336
+ "font-value": {
337
+ "comment": "Indented font block properties",
338
+ "match": "^(\\s{2,})(name|fallback|source|variable|variable-italic|static-\\d{3}i?)(:\\s*)(\\S+)",
339
+ "captures": {
340
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
341
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
342
+ "4": { "name": "string.unquoted.brand-intent-brand" }
343
+ }
344
+ },
345
+ "typography-header": {
346
+ "match": "^(typography)\\s+(\\S+)",
347
+ "captures": {
348
+ "1": { "name": "keyword.control.brand-intent-brand" },
349
+ "2": { "name": "entity.name.type.brand-intent-brand" }
350
+ }
351
+ },
352
+ "typography-value": {
353
+ "comment": "Indented typography block properties; font ref colored teal as a cross-reference",
354
+ "match": "^(\\s{2,})(font)(:\\s*)(\\$[\\w]+)|^(\\s{2,})(weight|strong|size|opsz|lineHeight|letterSpacing|autofit-min|autofit-max)(:\\s*)(\\S+)|^(\\s{2,})(italic|uppercase)\\s*$",
355
+ "captures": {
356
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
357
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
358
+ "4": { "name": "entity.name.tag.brand-intent-brand" },
359
+ "6": { "name": "support.type.property-name.brand-intent-brand" },
360
+ "7": { "name": "punctuation.separator.key-value.brand-intent-brand" },
361
+ "8": { "name": "constant.numeric.brand-intent-brand" },
362
+ "10": { "name": "support.type.property-name.brand-intent-brand" }
363
+ }
364
+ },
365
+ "asset-header": {
366
+ "match": "^(logo|photo|video|illustration)\\s+(\\S+)",
367
+ "captures": {
368
+ "1": { "name": "keyword.control.brand-intent-brand" },
369
+ "2": { "name": "entity.name.type.brand-intent-brand" }
370
+ }
371
+ },
372
+ "asset-value": {
373
+ "match": "^(\\s{2,})(label|src|lottie|gltf|generator|group)(:\\s*)(.*)|^(\\s{2,})(aspect|scale)(:\\s*)(\\S+)|^(\\s{2,})(animated|generator-params|align-left|align-center|align-right)\\s*$|^(\\s{2,})(loop)(?:(:\\s*)(true|false))?\\s*$",
374
+ "captures": {
375
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
376
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
377
+ "4": { "name": "string.unquoted.brand-intent-brand" },
378
+ "6": { "name": "support.type.property-name.brand-intent-brand" },
379
+ "7": { "name": "punctuation.separator.key-value.brand-intent-brand" },
380
+ "8": { "name": "constant.numeric.brand-intent-brand" },
381
+ "10": { "name": "support.type.property-name.brand-intent-brand" },
382
+ "12": { "name": "support.type.property-name.brand-intent-brand" },
383
+ "13": { "name": "punctuation.separator.key-value.brand-intent-brand" },
384
+ "14": { "name": "constant.language.boolean.brand-intent-brand" }
385
+ }
386
+ },
387
+ "badge-header": {
388
+ "comment": "Bare `label:` or `cta:` line that introduces a badge style block.",
389
+ "match": "^(label|cta):\\s*$",
390
+ "captures": {
391
+ "1": { "name": "keyword.control.brand-intent-brand" }
392
+ }
393
+ },
394
+ "badge-value": {
395
+ "comment": "Indented badge style properties: padding (CSS shorthand) + radius",
396
+ "match": "^(\\s{2,})(padding|radius)(:\\s*)(.+)$",
397
+ "captures": {
398
+ "2": { "name": "support.type.property-name.brand-intent-brand" },
399
+ "3": { "name": "punctuation.separator.key-value.brand-intent-brand" },
400
+ "4": { "name": "constant.numeric.brand-intent-brand" }
401
+ }
402
+ },
403
+ "string-field": {
404
+ "match": "^(language|locale|domain|app-icon|favicon|og-image|figma-file-key|figma-collection|tokens-file|spacing):?\\s*(.+)?",
405
+ "captures": {
406
+ "1": { "name": "support.type.property-name.brand-intent-brand" },
407
+ "2": { "name": "string.unquoted.brand-intent-brand" }
408
+ }
409
+ },
410
+ "keyword-partial": {
411
+ "comment": "Fallback: color the keyword token on incomplete lines (while typing)",
412
+ "match": "^(id:|name:|language:|locale:|domain:|app-icon:|favicon:|og-image:|tokens:|figma-file-key:|figma-collection:|tokens-file:|spacing:|label:|cta:|color-mode:|color-strategy:|color-adherence:|brand-colors|state-colors|color-bounds|color-rules|color-families|theme|divider|font|typography|logo|photo|video|illustration)(?=\\s|$)",
413
+ "captures": {
414
+ "1": { "name": "keyword.control.brand-intent-brand" }
415
+ }
416
+ }
417
+ }
418
+ }
@@ -0,0 +1,242 @@
1
+ {
2
+ "scopeName": "source.brand-intent-composition",
3
+ "name": "Brand Intent Composition",
4
+ "patterns": [
5
+ { "include": "#comment" },
6
+ { "include": "#id-field" },
7
+ { "include": "#name-field" },
8
+ { "include": "#image" },
9
+ { "include": "#grid" },
10
+ { "include": "#logo-none" },
11
+ { "include": "#logo-keyword" },
12
+ { "include": "#logo-row" },
13
+ { "include": "#icon-keyword" },
14
+ { "include": "#icon-row" },
15
+ { "include": "#illustration" },
16
+ { "include": "#mode" },
17
+ { "include": "#flow" },
18
+ { "include": "#flow-panel" },
19
+ { "include": "#flow-split" },
20
+ { "include": "#sticky" },
21
+ { "include": "#flow-property" },
22
+ { "include": "#spacer" },
23
+ { "include": "#divider" },
24
+ { "include": "#flow-icon" },
25
+ { "include": "#sticky-logo" },
26
+ { "include": "#grouped-slot" },
27
+ { "include": "#slot-row" },
28
+ { "include": "#keyword-partial" }
29
+ ],
30
+ "repository": {
31
+ "comment": {
32
+ "match": "^\\s*#.*$",
33
+ "name": "comment.line.number-sign.brand-intent-composition"
34
+ },
35
+ "id-field": {
36
+ "match": "^(id:)\\s+(.*)",
37
+ "captures": {
38
+ "1": { "name": "keyword.control.brand-intent-composition" },
39
+ "2": { "name": "entity.name.type.brand-intent-composition" }
40
+ }
41
+ },
42
+ "name-field": {
43
+ "match": "^(name:)\\s+(.*)",
44
+ "captures": {
45
+ "1": { "name": "keyword.control.brand-intent-composition" },
46
+ "2": { "name": "string.unquoted.brand-intent-composition" }
47
+ }
48
+ },
49
+ "image": {
50
+ "match": "^(image:)\\s+(full|none|\\w+--\\w+(?:\\s+cols\\s+\\S+)?)",
51
+ "captures": {
52
+ "1": { "name": "keyword.control.brand-intent-composition" },
53
+ "2": { "name": "string.unquoted.brand-intent-composition" }
54
+ }
55
+ },
56
+ "grid": {
57
+ "match": "^(grid:)\\s+(\\d+)\\s+(\\d+)",
58
+ "captures": {
59
+ "1": { "name": "keyword.control.brand-intent-composition" },
60
+ "2": { "name": "constant.numeric.brand-intent-composition" },
61
+ "3": { "name": "constant.numeric.brand-intent-composition" }
62
+ }
63
+ },
64
+ "logo-none": {
65
+ "match": "^(logo:)\\s+(none)",
66
+ "captures": {
67
+ "1": { "name": "keyword.control.brand-intent-composition" },
68
+ "2": { "name": "string.unquoted.brand-intent-composition" }
69
+ }
70
+ },
71
+ "logo-keyword": {
72
+ "match": "^(logo:)\\s+(top|center|bottom)\\s+(?:col\\s+)?(left|center|right)(?:\\s+(s|m|l))?",
73
+ "captures": {
74
+ "1": { "name": "keyword.control.brand-intent-composition" },
75
+ "2": { "name": "constant.numeric.row.brand-intent-composition" },
76
+ "3": { "name": "variable.parameter.brand-intent-composition" },
77
+ "4": { "name": "constant.numeric.brand-intent-composition" }
78
+ }
79
+ },
80
+ "logo-row": {
81
+ "match": "^(logo:)\\s+(row)\\s+(\\d+)\\s+(?:col\\s+)?(left|center|right)(?:\\s+(s|m|l))?",
82
+ "captures": {
83
+ "1": { "name": "keyword.control.brand-intent-composition" },
84
+ "2": { "name": "keyword.other.brand-intent-composition" },
85
+ "3": { "name": "constant.numeric.row.brand-intent-composition" },
86
+ "4": { "name": "variable.parameter.brand-intent-composition" },
87
+ "5": { "name": "constant.numeric.brand-intent-composition" }
88
+ }
89
+ },
90
+ "icon-keyword": {
91
+ "match": "^(icon:)\\s+(top|center|bottom)\\s+(?:col\\s+)?(left|center|right)(?:\\s+(s|m|l))?",
92
+ "captures": {
93
+ "1": { "name": "keyword.control.brand-intent-composition" },
94
+ "2": { "name": "constant.numeric.row.brand-intent-composition" },
95
+ "3": { "name": "variable.parameter.brand-intent-composition" },
96
+ "4": { "name": "constant.numeric.brand-intent-composition" }
97
+ }
98
+ },
99
+ "icon-row": {
100
+ "match": "^(icon:)\\s+(row)\\s+(\\d+)\\s+(?:col\\s+)?(left|center|right)(?:\\s+(s|m|l))?",
101
+ "captures": {
102
+ "1": { "name": "keyword.control.brand-intent-composition" },
103
+ "2": { "name": "keyword.other.brand-intent-composition" },
104
+ "3": { "name": "constant.numeric.row.brand-intent-composition" },
105
+ "4": { "name": "variable.parameter.brand-intent-composition" },
106
+ "5": { "name": "constant.numeric.brand-intent-composition" }
107
+ }
108
+ },
109
+ "illustration": {
110
+ "match": "^(illustration:)\\s+(top-left|top-center|top-right|center-left|center|center-right|bottom-left|bottom-center|bottom-right)\\s+(fit-width|fit-height)\\s+(\\d+(?:\\.\\d+)?)(%)(?:\\s+(offset)\\s+(-?\\d+(?:\\.\\d+)?)(?:\\s+(-?\\d+(?:\\.\\d+)?))?)?",
111
+ "captures": {
112
+ "1": { "name": "keyword.control.brand-intent-composition" },
113
+ "2": { "name": "variable.parameter.brand-intent-composition" },
114
+ "3": { "name": "variable.parameter.brand-intent-composition" },
115
+ "4": { "name": "constant.numeric.brand-intent-composition" },
116
+ "5": { "name": "keyword.operator.brand-intent-composition" },
117
+ "6": { "name": "keyword.control.brand-intent-composition" },
118
+ "7": { "name": "constant.numeric.brand-intent-composition" },
119
+ "8": { "name": "constant.numeric.brand-intent-composition" }
120
+ }
121
+ },
122
+ "mode": {
123
+ "match": "^(mode:)\\s+(grid|flow)",
124
+ "captures": {
125
+ "1": { "name": "keyword.control.brand-intent-composition" },
126
+ "2": { "name": "constant.language.brand-intent-composition" }
127
+ }
128
+ },
129
+ "flow": {
130
+ "match": "^(flow:)\\s*$",
131
+ "captures": {
132
+ "1": { "name": "keyword.control.brand-intent-composition" }
133
+ }
134
+ },
135
+ "flow-panel": {
136
+ "match": "^(flow:)\\s+(panel)\\s+(\\S+)(?:\\s+(\\d+/\\d+))?(?:\\s+(\\d+/\\d+))?",
137
+ "captures": {
138
+ "1": { "name": "keyword.control.brand-intent-composition" },
139
+ "2": { "name": "entity.name.tag.brand-intent-composition" },
140
+ "3": { "name": "variable.parameter.brand-intent-composition" },
141
+ "4": { "name": "constant.numeric.brand-intent-composition" },
142
+ "5": { "name": "constant.numeric.brand-intent-composition" }
143
+ }
144
+ },
145
+ "flow-split": {
146
+ "match": "^(flow:)\\s+(split)\\s+(top|bottom|left|right)(?:\\s+(\\d+/\\d+))?",
147
+ "captures": {
148
+ "1": { "name": "keyword.control.brand-intent-composition" },
149
+ "2": { "name": "entity.name.tag.brand-intent-composition" },
150
+ "3": { "name": "variable.parameter.brand-intent-composition" },
151
+ "4": { "name": "constant.numeric.brand-intent-composition" }
152
+ }
153
+ },
154
+ "sticky": {
155
+ "match": "^(sticky:)\\s+(top|bottom|left|right)(?:\\s+(s|m|l))?",
156
+ "captures": {
157
+ "1": { "name": "keyword.control.brand-intent-composition" },
158
+ "2": { "name": "variable.parameter.brand-intent-composition" },
159
+ "3": { "name": "constant.numeric.brand-intent-composition" }
160
+ }
161
+ },
162
+ "flow-property": {
163
+ "match": "^\\s+(direction|columns|column-gap)(:)\\s+(.*)",
164
+ "captures": {
165
+ "1": { "name": "support.type.property-name.brand-intent-composition" },
166
+ "2": { "name": "punctuation.separator.brand-intent-composition" },
167
+ "3": { "name": "constant.numeric.brand-intent-composition" }
168
+ }
169
+ },
170
+ "spacer": {
171
+ "match": "^\\s+\\|\\s+(spacer-)(\\w+)",
172
+ "captures": {
173
+ "1": { "name": "support.type.brand-intent-composition" },
174
+ "2": { "name": "constant.numeric.brand-intent-composition" }
175
+ }
176
+ },
177
+ "divider": {
178
+ "match": "^\\s+\\|\\s+(divider-)(ruler|hairline)",
179
+ "captures": {
180
+ "1": { "name": "support.type.brand-intent-composition" },
181
+ "2": { "name": "entity.name.tag.brand-intent-composition" }
182
+ }
183
+ },
184
+ "flow-icon": {
185
+ "match": "^\\s+\\|\\s+(icon)\\s+(left|center|right)(?:\\s+(s|m|l))?",
186
+ "captures": {
187
+ "1": { "name": "keyword.other.brand-intent-composition" },
188
+ "2": { "name": "variable.parameter.brand-intent-composition" },
189
+ "3": { "name": "constant.numeric.brand-intent-composition" }
190
+ }
191
+ },
192
+ "sticky-logo": {
193
+ "match": "^\\s+\\|\\s+(logo)\\s+(left|center|right)(?:\\s+(s|m|l))?",
194
+ "captures": {
195
+ "1": { "name": "keyword.other.brand-intent-composition" },
196
+ "2": { "name": "variable.parameter.brand-intent-composition" },
197
+ "3": { "name": "constant.numeric.brand-intent-composition" }
198
+ }
199
+ },
200
+ "grouped-slot": {
201
+ "match": "^\\s+\\|\\s+(primary|secondary|detail|meta|cta|label)(?:\\s+(cols)\\s+(\\S+))?\\s+(left|center|right)(?:\\s+(top|center|bottom))?(?:\\s+(columns:\\d+))?(?:\\s+(gap:\\w+))?",
202
+ "captures": {
203
+ "1": { "name": "entity.name.tag.brand-intent-composition" },
204
+ "2": { "name": "keyword.other.brand-intent-composition" },
205
+ "3": { "name": "constant.numeric.brand-intent-composition" },
206
+ "4": { "name": "support.constant.brand-intent-composition" },
207
+ "5": { "name": "support.constant.brand-intent-composition" },
208
+ "6": { "name": "variable.parameter.brand-intent-composition" },
209
+ "7": { "name": "variable.parameter.brand-intent-composition" }
210
+ }
211
+ },
212
+ "slot-row": {
213
+ "match": "^(primary|secondary|detail|meta|cta|label)\\s+(?:(row)\\s+)?(\\d+|top|center|bottom)\\s+(cols)\\s+(\\S+)\\s+(left|center|right)(?:\\s+(top|center|bottom))?",
214
+ "captures": {
215
+ "1": { "name": "entity.name.tag.brand-intent-composition" },
216
+ "2": { "name": "keyword.other.brand-intent-composition" },
217
+ "3": { "name": "constant.numeric.row.brand-intent-composition" },
218
+ "4": { "name": "keyword.other.brand-intent-composition" },
219
+ "5": { "name": "constant.numeric.brand-intent-composition" },
220
+ "6": { "name": "support.constant.brand-intent-composition" },
221
+ "7": { "name": "support.constant.brand-intent-composition" }
222
+ }
223
+ },
224
+ "keyword-partial": {
225
+ "comment": "Fallback: color the keyword token on incomplete lines (while typing)",
226
+ "patterns": [
227
+ {
228
+ "match": "^(id:|name:|image:|grid:|logo:|icon:|illustration:|mode:|flow:|sticky:|primary|secondary|detail|meta|cta|label)(?=\\s|$)",
229
+ "captures": {
230
+ "1": { "name": "keyword.control.brand-intent-composition" }
231
+ }
232
+ },
233
+ {
234
+ "match": "^\\s+\\|\\s+(spacer-|divider-|primary|secondary|detail|meta|cta|label)(?=\\s|$)",
235
+ "captures": {
236
+ "1": { "name": "support.type.brand-intent-composition" }
237
+ }
238
+ }
239
+ ]
240
+ }
241
+ }
242
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "scopeName": "source.brand-intent-format",
3
+ "name": "Brand Intent Format",
4
+ "patterns": [
5
+ { "include": "#comment" },
6
+ { "include": "#id-field" },
7
+ { "include": "#name-field" },
8
+ { "include": "#category" },
9
+ { "include": "#no" },
10
+ { "include": "#purposes" },
11
+ { "include": "#size" },
12
+ { "include": "#grid" },
13
+ { "include": "#numeric-field" },
14
+ { "include": "#insets" },
15
+ { "include": "#string-field" },
16
+ { "include": "#keyword-partial" }
17
+ ],
18
+ "repository": {
19
+ "comment": {
20
+ "match": "^\\s*#.*$",
21
+ "name": "comment.line.number-sign.brand-intent-format"
22
+ },
23
+ "id-field": {
24
+ "match": "^(id:)\\s+(.*)",
25
+ "captures": {
26
+ "1": { "name": "keyword.control.brand-intent-format" },
27
+ "2": { "name": "entity.name.type.brand-intent-format" }
28
+ }
29
+ },
30
+ "name-field": {
31
+ "match": "^(name:)\\s+(.*)",
32
+ "captures": {
33
+ "1": { "name": "keyword.control.brand-intent-format" },
34
+ "2": { "name": "string.unquoted.brand-intent-format" }
35
+ }
36
+ },
37
+ "category": {
38
+ "match": "^(category:)\\s+(instagram|linkedin|print|signage)",
39
+ "captures": {
40
+ "1": { "name": "keyword.control.brand-intent-format" },
41
+ "2": { "name": "entity.name.tag.brand-intent-format" }
42
+ }
43
+ },
44
+ "no": {
45
+ "match": "^(no:)\\s+(.*)",
46
+ "captures": {
47
+ "1": { "name": "keyword.control.brand-intent-format" },
48
+ "2": { "name": "string.unquoted.brand-intent-format" }
49
+ }
50
+ },
51
+ "purposes": {
52
+ "match": "^(purposes:)\\s+(.*)",
53
+ "captures": {
54
+ "1": { "name": "keyword.control.brand-intent-format" },
55
+ "2": { "name": "string.unquoted.brand-intent-format" }
56
+ }
57
+ },
58
+ "size": {
59
+ "match": "^(size:)\\s+(\\S+)\\s+(\\S+)",
60
+ "captures": {
61
+ "1": { "name": "keyword.control.brand-intent-format" },
62
+ "2": { "name": "constant.numeric.brand-intent-format" },
63
+ "3": { "name": "constant.numeric.brand-intent-format" }
64
+ }
65
+ },
66
+ "grid": {
67
+ "match": "^(grid:)\\s+(\\d+)\\s+(\\d+)",
68
+ "captures": {
69
+ "1": { "name": "keyword.control.brand-intent-format" },
70
+ "2": { "name": "constant.numeric.brand-intent-format" },
71
+ "3": { "name": "constant.numeric.brand-intent-format" }
72
+ }
73
+ },
74
+ "numeric-field": {
75
+ "match": "^(dpi|bleed|comfort):\\s*(.+)",
76
+ "captures": {
77
+ "1": { "name": "keyword.control.brand-intent-format" },
78
+ "2": { "name": "constant.numeric.brand-intent-format" }
79
+ }
80
+ },
81
+ "insets": {
82
+ "match": "^(danger:|crop:)\\s+(.*)",
83
+ "captures": {
84
+ "1": { "name": "keyword.control.brand-intent-format" },
85
+ "2": { "name": "constant.numeric.brand-intent-format" }
86
+ }
87
+ },
88
+ "string-field": {
89
+ "match": "^(label|sublabel):\\s*(.+)",
90
+ "captures": {
91
+ "1": { "name": "support.type.property-name.brand-intent-format" },
92
+ "2": { "name": "string.unquoted.brand-intent-format" }
93
+ }
94
+ },
95
+ "keyword-partial": {
96
+ "comment": "Fallback: color the keyword token on incomplete lines (while typing)",
97
+ "match": "^(id:|name:|category:|no:|purposes:|size:|grid:|dpi:|bleed:|comfort:|danger:|crop:|label:|sublabel:)(?=\\s|$)",
98
+ "captures": {
99
+ "1": { "name": "keyword.control.brand-intent-format" }
100
+ }
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "scopeName": "source.brand-intent-identity",
3
+ "name": "Brand Intent Identity",
4
+ "patterns": [
5
+ { "include": "#comment" },
6
+ { "include": "#top-level-keyword" },
7
+ { "include": "#named-block" },
8
+ { "include": "#indented-property" },
9
+ { "include": "#flag" },
10
+ { "include": "#value-name" },
11
+ { "include": "#list-item" },
12
+ { "include": "#continuation-line" }
13
+ ],
14
+ "repository": {
15
+ "comment": {
16
+ "match": "^\\s*#.*$",
17
+ "name": "comment.line.number-sign.brand-intent-identity"
18
+ },
19
+ "top-level-keyword": {
20
+ "match": "^(essence|promise|tagline|positioning|purpose|mission|vision|archetype)(:)\\s+(.*)",
21
+ "captures": {
22
+ "1": { "name": "keyword.control.brand-intent-identity" },
23
+ "2": { "name": "punctuation.separator.key-value.brand-intent-identity" },
24
+ "3": { "name": "string.unquoted.brand-intent-identity" }
25
+ }
26
+ },
27
+ "named-block": {
28
+ "comment": "Block headers: voice, pillars, values, narrative NAME, audience NAME, anti-audience NAME",
29
+ "patterns": [
30
+ {
31
+ "match": "^(voice|pillars|values)\\s*$",
32
+ "captures": {
33
+ "1": { "name": "keyword.control.brand-intent-identity" }
34
+ }
35
+ },
36
+ {
37
+ "match": "^(narrative|audience|anti-audience)\\s+(\\S.*)",
38
+ "captures": {
39
+ "1": { "name": "keyword.control.brand-intent-identity" },
40
+ "2": { "name": "entity.name.type.brand-intent-identity" }
41
+ }
42
+ }
43
+ ]
44
+ },
45
+ "indented-property": {
46
+ "match": "^(\\s{2,})(register|persona|rhythm|always|never|primary|secondary|avoid|label|profile|motivation|language|description)(:)\\s+(.*)",
47
+ "captures": {
48
+ "2": { "name": "support.type.property-name.brand-intent-identity" },
49
+ "3": { "name": "punctuation.separator.key-value.brand-intent-identity" },
50
+ "4": { "name": "string.unquoted.brand-intent-identity" }
51
+ }
52
+ },
53
+ "flag": {
54
+ "comment": "Bare flags: primary (presence = true)",
55
+ "match": "^(\\s{2,})(primary)\\s*$",
56
+ "captures": {
57
+ "2": { "name": "constant.language.brand-intent-identity" }
58
+ }
59
+ },
60
+ "value-name": {
61
+ "comment": "Value names inside the values block (2-space indent, no colon)",
62
+ "match": "^(\\s{2})(\\S.*)$",
63
+ "captures": {
64
+ "2": { "name": "entity.name.tag.brand-intent-identity" }
65
+ }
66
+ },
67
+ "list-item": {
68
+ "comment": "List items: - value",
69
+ "match": "^(\\s{2,})(-)\\s+(.*)",
70
+ "captures": {
71
+ "2": { "name": "punctuation.definition.list.brand-intent-identity" },
72
+ "3": { "name": "string.unquoted.brand-intent-identity" }
73
+ }
74
+ },
75
+ "continuation-line": {
76
+ "comment": "Indented continuation lines for multi-line values",
77
+ "match": "^(\\s{4,})(\\S.*)",
78
+ "captures": {
79
+ "2": { "name": "string.unquoted.brand-intent-identity" }
80
+ }
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,242 @@
1
+ {
2
+ "scopeName": "source.brand-intent-purpose",
3
+ "name": "Brand Intent Purpose",
4
+ "patterns": [
5
+ { "include": "#comment" },
6
+ { "include": "#id-field" },
7
+ { "include": "#name-field" },
8
+ { "include": "#compositions" },
9
+ { "include": "#density" },
10
+ { "include": "#default-icon" },
11
+ { "include": "#scope-header" },
12
+ { "include": "#voice-header" },
13
+ { "include": "#voice-property" },
14
+ { "include": "#palette-header" },
15
+ { "include": "#asset-field" },
16
+ { "include": "#camera-field" },
17
+ { "include": "#analyze-field" },
18
+ { "include": "#bg-prompt-field" },
19
+ { "include": "#context-header" },
20
+ { "include": "#slot-header" },
21
+ { "include": "#override-header" },
22
+ { "include": "#override-value" },
23
+ { "include": "#list-property" },
24
+ { "include": "#sample-item" },
25
+ { "include": "#property" },
26
+ { "include": "#keyword-partial" }
27
+ ],
28
+ "repository": {
29
+ "comment": {
30
+ "match": "^\\s*#.*$",
31
+ "name": "comment.line.number-sign.brand-intent-purpose"
32
+ },
33
+ "id-field": {
34
+ "match": "^(id:)\\s+(.*)",
35
+ "captures": {
36
+ "1": { "name": "keyword.control.brand-intent-purpose" },
37
+ "2": { "name": "entity.name.type.brand-intent-purpose" }
38
+ }
39
+ },
40
+ "name-field": {
41
+ "match": "^(name:)\\s+(.*)",
42
+ "captures": {
43
+ "1": { "name": "keyword.control.brand-intent-purpose" },
44
+ "2": { "name": "string.unquoted.brand-intent-purpose" }
45
+ }
46
+ },
47
+ "compositions": {
48
+ "match": "^(compositions:)\\s+(.*)",
49
+ "captures": {
50
+ "1": { "name": "keyword.control.brand-intent-purpose" },
51
+ "2": { "name": "string.unquoted.brand-intent-purpose" }
52
+ }
53
+ },
54
+ "density": {
55
+ "match": "^(density:)\\s+(light|medium|full)",
56
+ "captures": {
57
+ "1": { "name": "keyword.control.brand-intent-purpose" },
58
+ "2": { "name": "support.constant.brand-intent-purpose" }
59
+ }
60
+ },
61
+ "default-icon": {
62
+ "match": "^(defaultIcon:)\\s+([\\w-]+)(?:\\s+(thin|light|regular|bold|fill|duotone))?",
63
+ "captures": {
64
+ "1": { "name": "keyword.control.brand-intent-purpose" },
65
+ "2": { "name": "entity.name.function.brand-intent-purpose" },
66
+ "3": { "name": "variable.parameter.brand-intent-purpose" }
67
+ }
68
+ },
69
+ "scope-header": {
70
+ "match": "^(scope)\\s*$",
71
+ "captures": {
72
+ "1": { "name": "keyword.control.brand-intent-purpose" }
73
+ }
74
+ },
75
+ "voice-header": {
76
+ "match": "^(voice)\\s*$",
77
+ "captures": {
78
+ "1": { "name": "keyword.control.brand-intent-purpose" }
79
+ }
80
+ },
81
+ "voice-property": {
82
+ "match": "^\\s{2}(sentence-max|headline-pattern|number-format|[\\w-]+)(:)\\s+(.*)",
83
+ "comment": "Indented key: value pairs inside a voice block",
84
+ "captures": {
85
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
86
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
87
+ "3": { "name": "string.unquoted.brand-intent-purpose" }
88
+ }
89
+ },
90
+ "palette-header": {
91
+ "patterns": [
92
+ {
93
+ "match": "^(palette:)\\s+(dynamic)",
94
+ "captures": {
95
+ "1": { "name": "keyword.control.brand-intent-purpose" },
96
+ "2": { "name": "support.constant.brand-intent-purpose" }
97
+ }
98
+ },
99
+ {
100
+ "match": "^(palette:)\\s+([\\w-]+)",
101
+ "captures": {
102
+ "1": { "name": "keyword.control.brand-intent-purpose" },
103
+ "2": { "name": "entity.name.type.brand-intent-purpose" }
104
+ }
105
+ }
106
+ ]
107
+ },
108
+ "asset-field": {
109
+ "match": "^(logo:|photo:|video:)\\s+([\\w-]+)",
110
+ "captures": {
111
+ "1": { "name": "keyword.control.brand-intent-purpose" },
112
+ "2": { "name": "entity.name.type.brand-intent-purpose" }
113
+ }
114
+ },
115
+ "camera-field": {
116
+ "match": "^(camera:)\\s+(true|false)",
117
+ "captures": {
118
+ "1": { "name": "keyword.control.brand-intent-purpose" },
119
+ "2": { "name": "constant.language.brand-intent-purpose" }
120
+ }
121
+ },
122
+ "analyze-field": {
123
+ "match": "^(analyze:)\\s+(true|false)",
124
+ "captures": {
125
+ "1": { "name": "keyword.control.brand-intent-purpose" },
126
+ "2": { "name": "constant.language.brand-intent-purpose" }
127
+ }
128
+ },
129
+ "bg-prompt-field": {
130
+ "match": "^(bg-prompt:)\\s+(.*)",
131
+ "captures": {
132
+ "1": { "name": "keyword.control.brand-intent-purpose" },
133
+ "2": { "name": "string.unquoted.brand-intent-purpose" }
134
+ }
135
+ },
136
+ "context-header": {
137
+ "match": "^(context)\\s*$",
138
+ "captures": {
139
+ "1": { "name": "keyword.control.brand-intent-purpose" }
140
+ }
141
+ },
142
+ "slot-header": {
143
+ "match": "^(slot)\\s+(primary|secondary|detail|meta|cta|label)",
144
+ "captures": {
145
+ "1": { "name": "keyword.control.brand-intent-purpose" },
146
+ "2": { "name": "entity.name.tag.brand-intent-purpose" }
147
+ }
148
+ },
149
+ "override-header": {
150
+ "match": "^\\s+(override:)\\s*$",
151
+ "captures": {
152
+ "1": { "name": "keyword.control.brand-intent-purpose" }
153
+ }
154
+ },
155
+ "override-value": {
156
+ "comment": "Indented override sub-properties (double-indent under override:); italic/uppercase can be bare flags",
157
+ "patterns": [
158
+ {
159
+ "match": "^\\s{4,}(size|opsz|lineHeight|letterSpacing|weight)(:)\\s+(.*)",
160
+ "captures": {
161
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
162
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
163
+ "3": { "name": "constant.numeric.brand-intent-purpose" }
164
+ }
165
+ },
166
+ {
167
+ "match": "^\\s{4,}(italic|uppercase|hyphenate)(?:(:)\\s+(true|false))?\\s*$",
168
+ "captures": {
169
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
170
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
171
+ "3": { "name": "constant.language.brand-intent-purpose" }
172
+ }
173
+ },
174
+ {
175
+ "match": "^\\s{4,}(textAlign)(:)\\s+(left|center|right|justify)",
176
+ "captures": {
177
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
178
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
179
+ "3": { "name": "support.constant.brand-intent-purpose" }
180
+ }
181
+ },
182
+ {
183
+ "match": "^\\s{4,}(autofit-min|autofit-max)(:)\\s+(.*)",
184
+ "captures": {
185
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
186
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
187
+ "3": { "name": "constant.numeric.brand-intent-purpose" }
188
+ }
189
+ },
190
+ {
191
+ "match": "^\\s{4,}(autofit)(:)\\s+(none)",
192
+ "captures": {
193
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
194
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
195
+ "3": { "name": "string.unquoted.brand-intent-purpose" }
196
+ }
197
+ }
198
+ ]
199
+ },
200
+ "property": {
201
+ "match": "^\\s+(label|samples|value|maxLength|font|size|opsz|lineHeight|letterSpacing|align|typography|color|type|editable)(:)\\s+(.*)",
202
+ "captures": {
203
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
204
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
205
+ "3": { "name": "string.unquoted.brand-intent-purpose" }
206
+ }
207
+ },
208
+ "list-property": {
209
+ "comment": "4-space indented properties under type: list blocks",
210
+ "match": "^\\s{4,}(icons|iconOnly|iconGap|itemGap|maxItems|direction)(:)\\s+(.*)",
211
+ "captures": {
212
+ "1": { "name": "support.type.property-name.brand-intent-purpose" },
213
+ "2": { "name": "punctuation.separator.brand-intent-purpose" },
214
+ "3": { "name": "constant.numeric.brand-intent-purpose" }
215
+ }
216
+ },
217
+ "sample-item": {
218
+ "comment": "Multi-line sample entries -- dim only the dash, leave text unstyled",
219
+ "match": "^(\\s{4,})(-)(?=\\s)",
220
+ "captures": {
221
+ "2": { "name": "comment.line.dash.brand-intent-purpose" }
222
+ }
223
+ },
224
+ "keyword-partial": {
225
+ "comment": "Fallback: color the keyword token on incomplete lines (while typing)",
226
+ "patterns": [
227
+ {
228
+ "match": "^(id:|name:|compositions:|density:|defaultIcon:|scope|voice|palette:|logo:|photo:|video:|camera:|analyze:|bg-prompt:|context|slot)(?=\\s|$)",
229
+ "captures": {
230
+ "1": { "name": "keyword.control.brand-intent-purpose" }
231
+ }
232
+ },
233
+ {
234
+ "match": "^\\s+(label|samples|value|maxLength|font|size|opsz|lineHeight|letterSpacing|align|typography|color|type|override|audience|pillars|editable)(?=:|\\s|$)",
235
+ "captures": {
236
+ "1": { "name": "support.type.property-name.brand-intent-purpose" }
237
+ }
238
+ }
239
+ ]
240
+ }
241
+ }
242
+ }