@orange-halo/tokens 2.1.0 → 2.2.0

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.
@@ -1,5 +1,13 @@
1
1
  {
2
2
  "$description": "Orange Halo palette (tier 1): colours, fonts, radii, shadows, gradients, motion and borders. Warm, playful, personal. Other brands provide their own palette with the same groups.",
3
+ "grid": {
4
+ "$description": "The brand's layout grid. Spacing is multiples of half a unit; type sizes and line heights sit on it (see style-dictionary.config.js)",
5
+ "unit": {
6
+ "$type": "dimension",
7
+ "$value": "8px",
8
+ "$description": "8px grid with 4px half-steps"
9
+ }
10
+ },
3
11
  "color": {
4
12
  "$description": "Warm palette with nostalgic character. Neutrals are always warm; blue is the deliberate accent.",
5
13
  "orange": {
@@ -414,7 +422,7 @@
414
422
  }
415
423
  },
416
424
  "size": {
417
- "$description": "Slightly expressive type scale",
425
+ "$description": "Type scale on the brand's grid (grid.unit): every size is a multiple of half a unit. Strict: no size between xs and base",
418
426
  "xs": {
419
427
  "$type": "dimension",
420
428
  "$value": "0.75rem",
@@ -422,8 +430,8 @@
422
430
  },
423
431
  "sm": {
424
432
  "$type": "dimension",
425
- "$value": "0.875rem",
426
- "$description": "14px"
433
+ "$value": "{font.size.xs}",
434
+ "$description": "Kept so existing references don't break. On the grid, small text is xs; use xs or a tier 2 role"
427
435
  },
428
436
  "base": {
429
437
  "$type": "dimension",
@@ -432,18 +440,18 @@
432
440
  },
433
441
  "lg": {
434
442
  "$type": "dimension",
435
- "$value": "1.125rem",
436
- "$description": "18px"
443
+ "$value": "1.25rem",
444
+ "$description": "20px"
437
445
  },
438
446
  "xl": {
439
447
  "$type": "dimension",
440
- "$value": "1.25rem",
441
- "$description": "20px"
448
+ "$value": "1.5rem",
449
+ "$description": "24px"
442
450
  },
443
451
  "2xl": {
444
452
  "$type": "dimension",
445
- "$value": "1.625rem",
446
- "$description": "26px"
453
+ "$value": "1.75rem",
454
+ "$description": "28px"
447
455
  },
448
456
  "3xl": {
449
457
  "$type": "dimension",
@@ -452,13 +460,13 @@
452
460
  },
453
461
  "4xl": {
454
462
  "$type": "dimension",
455
- "$value": "2.625rem",
456
- "$description": "42px"
463
+ "$value": "2.5rem",
464
+ "$description": "40px"
457
465
  },
458
466
  "5xl": {
459
467
  "$type": "dimension",
460
- "$value": "3.25rem",
461
- "$description": "52px"
468
+ "$value": "3rem",
469
+ "$description": "48px"
462
470
  }
463
471
  },
464
472
  "weight": {
@@ -735,42 +743,22 @@
735
743
  "easing": {
736
744
  "gentle": {
737
745
  "$type": "cubicBezier",
738
- "$value": [
739
- 0.4,
740
- 0,
741
- 0.2,
742
- 1
743
- ],
746
+ "$value": [0.4, 0, 0.2, 1],
744
747
  "$description": "Default — smooth and natural"
745
748
  },
746
749
  "out": {
747
750
  "$type": "cubicBezier",
748
- "$value": [
749
- 0,
750
- 0,
751
- 0.2,
752
- 1
753
- ],
751
+ "$value": [0, 0, 0.2, 1],
754
752
  "$description": "Enters and reveals"
755
753
  },
756
754
  "in": {
757
755
  "$type": "cubicBezier",
758
- "$value": [
759
- 0.4,
760
- 0,
761
- 1,
762
- 1
763
- ],
756
+ "$value": [0.4, 0, 1, 1],
764
757
  "$description": "Exits"
765
758
  },
766
759
  "playful": {
767
760
  "$type": "cubicBezier",
768
- "$value": [
769
- 0.34,
770
- 1.3,
771
- 0.64,
772
- 1
773
- ],
761
+ "$value": [0.34, 1.3, 0.64, 1],
774
762
  "$description": "Celebrations — slight overshoot"
775
763
  }
776
764
  }
@@ -3,32 +3,56 @@
3
3
  "button": {
4
4
  "$description": "Button — chunky, tactile, playful with offset shadows",
5
5
  "base": {
6
- "fontFamily": { "$type": "fontFamily", "$value": "{typography.control.fontFamily}" },
7
- "fontWeight": { "$type": "fontWeight", "$value": "{typography.control.fontWeight}" },
8
- "letterSpacing": { "$type": "dimension", "$value": "{typography.control.letterSpacing}" },
6
+ "fontFamily": {
7
+ "$type": "fontFamily",
8
+ "$value": "{typography.control.fontFamily}"
9
+ },
10
+ "fontWeight": {
11
+ "$type": "fontWeight",
12
+ "$value": "{typography.control.fontWeight}"
13
+ },
14
+ "letterSpacing": {
15
+ "$type": "dimension",
16
+ "$value": "{typography.control.letterSpacing}"
17
+ },
9
18
  "borderRadius": { "$type": "dimension", "$value": "{shape.control}" },
10
19
  "borderWidth": { "$type": "dimension", "$value": "{stroke.control}" },
11
- "transitionDuration": { "$type": "duration", "$value": "{motion.snappy}" },
12
- "transitionEasing": { "$type": "cubicBezier", "$value": "{motion.easePlayful}" }
20
+ "transitionDuration": {
21
+ "$type": "duration",
22
+ "$value": "{motion.snappy}"
23
+ },
24
+ "transitionEasing": {
25
+ "$type": "cubicBezier",
26
+ "$value": "{motion.easePlayful}"
27
+ }
13
28
  },
14
29
  "size": {
15
30
  "$description": "Matches oh-button.ts, which reads these. Minimum 16px text",
16
31
  "sm": {
17
- "fontSize": { "$type": "dimension", "$value": "{typography.control.fontSize.sm}" },
32
+ "fontSize": {
33
+ "$type": "dimension",
34
+ "$value": "{typography.control.fontSize.sm}"
35
+ },
18
36
  "paddingX": { "$type": "dimension", "$value": "{spacing.4}" },
19
37
  "paddingY": { "$type": "dimension", "$value": "{spacing.2}" },
20
38
  "minHeight": { "$type": "dimension", "$value": "40px" },
21
39
  "gap": { "$type": "dimension", "$value": "{spacing.2}" }
22
40
  },
23
41
  "md": {
24
- "fontSize": { "$type": "dimension", "$value": "{typography.control.fontSize.md}" },
42
+ "fontSize": {
43
+ "$type": "dimension",
44
+ "$value": "{typography.control.fontSize.md}"
45
+ },
25
46
  "paddingX": { "$type": "dimension", "$value": "{spacing.6}" },
26
47
  "paddingY": { "$type": "dimension", "$value": "{spacing.3}" },
27
48
  "minHeight": { "$type": "dimension", "$value": "48px" },
28
49
  "gap": { "$type": "dimension", "$value": "{spacing.2}" }
29
50
  },
30
51
  "lg": {
31
- "fontSize": { "$type": "dimension", "$value": "{typography.control.fontSize.lg}" },
52
+ "fontSize": {
53
+ "$type": "dimension",
54
+ "$value": "{typography.control.fontSize.lg}"
55
+ },
32
56
  "paddingX": { "$type": "dimension", "$value": "{spacing.8}" },
33
57
  "paddingY": { "$type": "dimension", "$value": "{spacing.4}" },
34
58
  "minHeight": { "$type": "dimension", "$value": "56px" },
@@ -39,8 +63,14 @@
39
63
  "primary": {
40
64
  "$description": "Primary — warm orange, chunky tactile shadow",
41
65
  "background": { "$type": "color", "$value": "{color.brand.primary}" },
42
- "backgroundHover": { "$type": "color", "$value": "{color.brand.primaryHover}" },
43
- "backgroundActive": { "$type": "color", "$value": "{color.brand.primaryActive}" },
66
+ "backgroundHover": {
67
+ "$type": "color",
68
+ "$value": "{color.brand.primaryHover}"
69
+ },
70
+ "backgroundActive": {
71
+ "$type": "color",
72
+ "$value": "{color.brand.primaryActive}"
73
+ },
44
74
  "color": { "$type": "color", "$value": "{color.text.onBrand}" },
45
75
  "borderColor": { "$type": "color", "$value": "{color.brand.primary}" },
46
76
  "shadowColor": { "$type": "color", "$value": "{shadow.primary}" }
@@ -48,17 +78,32 @@
48
78
  "secondary": {
49
79
  "$description": "Secondary — cream surface with emphasis border",
50
80
  "background": { "$type": "color", "$value": "{color.surface.base}" },
51
- "backgroundHover": { "$type": "color", "$value": "{color.surface.hover}" },
52
- "backgroundActive": { "$type": "color", "$value": "{color.surface.activePressed}" },
81
+ "backgroundHover": {
82
+ "$type": "color",
83
+ "$value": "{color.surface.hover}"
84
+ },
85
+ "backgroundActive": {
86
+ "$type": "color",
87
+ "$value": "{color.surface.activePressed}"
88
+ },
53
89
  "color": { "$type": "color", "$value": "{color.text.primary}" },
54
- "borderColor": { "$type": "color", "$value": "{color.border.emphasis}" },
90
+ "borderColor": {
91
+ "$type": "color",
92
+ "$value": "{color.border.emphasis}"
93
+ },
55
94
  "shadowColor": { "$type": "color", "$value": "{shadow.secondary}" }
56
95
  },
57
96
  "accent": {
58
97
  "$description": "Accent — blue, modern counterbalance",
59
98
  "background": { "$type": "color", "$value": "{color.accent.default}" },
60
- "backgroundHover": { "$type": "color", "$value": "{color.accent.hover}" },
61
- "backgroundActive": { "$type": "color", "$value": "{color.accent.active}" },
99
+ "backgroundHover": {
100
+ "$type": "color",
101
+ "$value": "{color.accent.hover}"
102
+ },
103
+ "backgroundActive": {
104
+ "$type": "color",
105
+ "$value": "{color.accent.active}"
106
+ },
62
107
  "color": { "$type": "color", "$value": "{color.text.onAccent}" },
63
108
  "borderColor": { "$type": "color", "$value": "{color.accent.default}" },
64
109
  "shadowColor": { "$type": "color", "$value": "{color.accent.shadow}" }
@@ -73,13 +118,28 @@
73
118
  "input": {
74
119
  "$description": "Input — chunky border, inset shadow, tactile feel",
75
120
  "base": {
76
- "fontFamily": { "$type": "fontFamily", "$value": "{typography.control.fontFamily}" },
77
- "fontSize": { "$type": "dimension", "$value": "{typography.control.fontSize.md}" },
78
- "lineHeight": { "$type": "number", "$value": "{typography.body.base.lineHeight}" },
121
+ "fontFamily": {
122
+ "$type": "fontFamily",
123
+ "$value": "{typography.control.fontFamily}"
124
+ },
125
+ "fontSize": {
126
+ "$type": "dimension",
127
+ "$value": "{typography.control.fontSize.md}"
128
+ },
129
+ "lineHeight": {
130
+ "$type": "number",
131
+ "$value": "{typography.body.base.lineHeight}"
132
+ },
79
133
  "borderRadius": { "$type": "dimension", "$value": "{shape.control}" },
80
134
  "borderWidth": { "$type": "dimension", "$value": "{stroke.control}" },
81
- "transitionDuration": { "$type": "duration", "$value": "{motion.snappy}" },
82
- "transitionEasing": { "$type": "cubicBezier", "$value": "{motion.easeGentle}" }
135
+ "transitionDuration": {
136
+ "$type": "duration",
137
+ "$value": "{motion.snappy}"
138
+ },
139
+ "transitionEasing": {
140
+ "$type": "cubicBezier",
141
+ "$value": "{motion.easeGentle}"
142
+ }
83
143
  },
84
144
  "size": {
85
145
  "md": {
@@ -91,22 +151,36 @@
91
151
  "state": {
92
152
  "default": {
93
153
  "background": { "$type": "color", "$value": "{color.surface.base}" },
94
- "borderColor": { "$type": "color", "$value": "{color.border.emphasis}", "$description": "WCAG 3:1 contrast for UI elements" },
154
+ "borderColor": {
155
+ "$type": "color",
156
+ "$value": "{color.border.emphasis}",
157
+ "$description": "WCAG 3:1 contrast for UI elements"
158
+ },
95
159
  "color": { "$type": "color", "$value": "{color.text.primary}" },
96
- "placeholderColor": { "$type": "color", "$value": "{color.text.secondary}", "$description": "WCAG readable placeholder" },
160
+ "placeholderColor": {
161
+ "$type": "color",
162
+ "$value": "{color.text.secondary}",
163
+ "$description": "WCAG readable placeholder"
164
+ },
97
165
  "shadowColor": { "$type": "color", "$value": "{shadow.secondary}" }
98
166
  },
99
167
  "hover": {
100
168
  "borderColor": { "$type": "color", "$value": "{color.border.hover}" }
101
169
  },
102
170
  "focus": {
103
- "background": { "$type": "color", "$value": "{color.surface.highlight}" },
171
+ "background": {
172
+ "$type": "color",
173
+ "$value": "{color.surface.highlight}"
174
+ },
104
175
  "borderColor": { "$type": "color", "$value": "{focus.ringColor}" },
105
176
  "focusRingColor": { "$type": "color", "$value": "{focus.ringColor}" }
106
177
  },
107
178
  "error": {
108
179
  "borderColor": { "$type": "color", "$value": "{color.feedback.error}" },
109
- "background": { "$type": "color", "$value": "{color.feedback.errorSubtle}" },
180
+ "background": {
181
+ "$type": "color",
182
+ "$value": "{color.feedback.errorSubtle}"
183
+ },
110
184
  "shadowColor": { "$type": "color", "$value": "{shadow.error}" }
111
185
  }
112
186
  }
@@ -123,15 +197,27 @@
123
197
  },
124
198
  "interactive": {
125
199
  "$description": "Interactive card — gentle warmth on hover",
126
- "transitionDuration": { "$type": "duration", "$value": "{motion.gentle}" },
127
- "transitionEasing": { "$type": "cubicBezier", "$value": "{motion.easeGentle}" },
200
+ "transitionDuration": {
201
+ "$type": "duration",
202
+ "$value": "{motion.gentle}"
203
+ },
204
+ "transitionEasing": {
205
+ "$type": "cubicBezier",
206
+ "$value": "{motion.easeGentle}"
207
+ },
128
208
  "backgroundHover": { "$type": "color", "$value": "{color.surface.base}" },
129
- "borderColorHover": { "$type": "color", "$value": "{color.border.brand}" },
209
+ "borderColorHover": {
210
+ "$type": "color",
211
+ "$value": "{color.border.brand}"
212
+ },
130
213
  "shadowHover": { "$type": "shadow", "$value": "{elevation.medium}" }
131
214
  },
132
215
  "raised": {
133
216
  "$description": "Raised card (default) — subtle top-lit gradient",
134
- "gradientStart": { "$type": "color", "$value": "{color.surface.highlight}" },
217
+ "gradientStart": {
218
+ "$type": "color",
219
+ "$value": "{color.surface.highlight}"
220
+ },
135
221
  "gradientMid": { "$type": "color", "$value": "{color.surface.base}" },
136
222
  "gradientEnd": { "$type": "color", "$value": "{color.surface.raised}" },
137
223
  "borderColor": { "$type": "color", "$value": "{color.border.default}" }
@@ -144,29 +230,57 @@
144
230
  },
145
231
  "sunlit": {
146
232
  "$description": "Sunlit card — featured with gradient",
147
- "background": { "$type": "string", "$value": "linear-gradient(180deg, {color.surface.featuredStart} 0%, {color.surface.featuredMid} 30%, {color.surface.featuredEnd} 100%)" },
148
- "gradientStart": { "$type": "color", "$value": "{color.surface.featuredStart}" },
149
- "gradientMid": { "$type": "color", "$value": "{color.surface.featuredMid}" },
150
- "gradientEnd": { "$type": "color", "$value": "{color.surface.featuredEnd}" },
233
+ "background": {
234
+ "$type": "string",
235
+ "$value": "linear-gradient(180deg, {color.surface.featuredStart} 0%, {color.surface.featuredMid} 30%, {color.surface.featuredEnd} 100%)"
236
+ },
237
+ "gradientStart": {
238
+ "$type": "color",
239
+ "$value": "{color.surface.featuredStart}"
240
+ },
241
+ "gradientMid": {
242
+ "$type": "color",
243
+ "$value": "{color.surface.featuredMid}"
244
+ },
245
+ "gradientEnd": {
246
+ "$type": "color",
247
+ "$value": "{color.surface.featuredEnd}"
248
+ },
151
249
  "borderColor": { "$type": "color", "$value": "{color.border.brand}" },
152
- "borderColorHover": { "$type": "color", "$value": "{color.border.brandHover}" },
250
+ "borderColorHover": {
251
+ "$type": "color",
252
+ "$value": "{color.border.brandHover}"
253
+ },
153
254
  "shadow": { "$type": "shadow", "$value": "{elevation.medium}" }
154
255
  },
155
256
  "section": {
156
257
  "$description": "Card header and footer",
157
258
  "dividerColor": { "$type": "color", "$value": "{color.border.divider}" },
158
- "headerGradientStart": { "$type": "color", "$value": "{color.surface.sheen}" },
159
- "headerGradientEnd": { "$type": "color", "$value": "rgba(255, 255, 255, 0)" }
259
+ "headerGradientStart": {
260
+ "$type": "color",
261
+ "$value": "{color.surface.sheen}"
262
+ },
263
+ "headerGradientEnd": {
264
+ "$type": "color",
265
+ "$value": "rgba(255, 255, 255, 0)"
266
+ }
160
267
  }
161
268
  },
162
269
  "progress": {
163
270
  "$description": "Progress — chunky pill track",
164
271
  "track": {
165
- "insetShadow": { "$type": "color", "$value": "rgba(0, 0, 0, 0.06)", "$description": "Neutral, so it works on every track colour" }
272
+ "insetShadow": {
273
+ "$type": "color",
274
+ "$value": "rgba(0, 0, 0, 0.06)",
275
+ "$description": "Neutral, so it works on every track colour"
276
+ }
166
277
  },
167
278
  "inverse": {
168
279
  "$description": "On brand/accent backgrounds (e.g. journey hero). Fill is cream so it reads at 3.7:1 against the track.",
169
- "trackBackground": { "$type": "color", "$value": "rgba(255, 255, 255, 0.15)" },
280
+ "trackBackground": {
281
+ "$type": "color",
282
+ "$value": "rgba(255, 255, 255, 0.15)"
283
+ },
170
284
  "trackBorder": { "$type": "color", "$value": "rgba(255, 255, 255, 0.3)" },
171
285
  "fill": { "$type": "color", "$value": "{color.text.inverse}" }
172
286
  }
@@ -174,17 +288,32 @@
174
288
  "badge": {
175
289
  "$description": "Badge — small status indicators",
176
290
  "base": {
177
- "fontFamily": { "$type": "fontFamily", "$value": "{typography.label.fontFamily}" },
178
- "fontSize": { "$type": "dimension", "$value": "{typography.body.base.fontSize}" },
179
- "fontWeight": { "$type": "fontWeight", "$value": "{typography.label.base.fontWeight}" },
180
- "letterSpacing": { "$type": "dimension", "$value": "{typography.label.base.letterSpacing}" },
291
+ "fontFamily": {
292
+ "$type": "fontFamily",
293
+ "$value": "{typography.label.fontFamily}"
294
+ },
295
+ "fontSize": {
296
+ "$type": "dimension",
297
+ "$value": "{typography.body.base.fontSize}"
298
+ },
299
+ "fontWeight": {
300
+ "$type": "fontWeight",
301
+ "$value": "{typography.label.base.fontWeight}"
302
+ },
303
+ "letterSpacing": {
304
+ "$type": "dimension",
305
+ "$value": "{typography.label.base.letterSpacing}"
306
+ },
181
307
  "borderRadius": { "$type": "dimension", "$value": "{shape.compact}" },
182
308
  "paddingX": { "$type": "dimension", "$value": "{spacing.2-5}" },
183
309
  "paddingY": { "$type": "dimension", "$value": "{spacing.1}" }
184
310
  },
185
311
  "variant": {
186
312
  "brand": {
187
- "background": { "$type": "color", "$value": "{color.brand.primarySubtle}" },
313
+ "background": {
314
+ "$type": "color",
315
+ "$value": "{color.brand.primarySubtle}"
316
+ },
188
317
  "color": { "$type": "color", "$value": "{color.brand.primary}" }
189
318
  },
190
319
  "accent": {
@@ -192,15 +321,24 @@
192
321
  "color": { "$type": "color", "$value": "{color.accent.default}" }
193
322
  },
194
323
  "success": {
195
- "background": { "$type": "color", "$value": "{color.feedback.successSubtle}" },
324
+ "background": {
325
+ "$type": "color",
326
+ "$value": "{color.feedback.successSubtle}"
327
+ },
196
328
  "color": { "$type": "color", "$value": "{color.feedback.success}" }
197
329
  },
198
330
  "error": {
199
- "background": { "$type": "color", "$value": "{color.feedback.errorSubtle}" },
331
+ "background": {
332
+ "$type": "color",
333
+ "$value": "{color.feedback.errorSubtle}"
334
+ },
200
335
  "color": { "$type": "color", "$value": "{color.feedback.error}" }
201
336
  },
202
337
  "warning": {
203
- "background": { "$type": "color", "$value": "{color.feedback.warningSubtle}" },
338
+ "background": {
339
+ "$type": "color",
340
+ "$value": "{color.feedback.warningSubtle}"
341
+ },
204
342
  "color": { "$type": "color", "$value": "{color.feedback.warning}" }
205
343
  },
206
344
  "neutral": {
@@ -217,7 +355,11 @@
217
355
  "textDecorationHover": { "$type": "string", "$value": "none" },
218
356
  "inverse": {
219
357
  "$description": "On brand/accent backgrounds",
220
- "focusBackground": { "$type": "color", "$value": "rgba(0, 0, 0, 0.1)", "$description": "Focus tint — paired with the underline, which is the indicator" }
358
+ "focusBackground": {
359
+ "$type": "color",
360
+ "$value": "rgba(0, 0, 0, 0.1)",
361
+ "$description": "Focus tint — paired with the underline, which is the indicator"
362
+ }
221
363
  }
222
364
  },
223
365
  "modal": {
@@ -226,7 +368,15 @@
226
368
  },
227
369
  "closeButton": {
228
370
  "$description": "Icon-only close buttons in alerts and modals",
229
- "backgroundHover": { "$type": "color", "$value": "rgba(0, 0, 0, 0.08)", "$description": "Neutral tint that works on every alert variant" },
230
- "shadowHover": { "$type": "color", "$value": "rgba(0, 0, 0, 0.15)", "$description": "Offset shadow colour on hover and press. Neutral, like the background, so it works on every alert variant" }
371
+ "backgroundHover": {
372
+ "$type": "color",
373
+ "$value": "rgba(0, 0, 0, 0.08)",
374
+ "$description": "Neutral tint that works on every alert variant"
375
+ },
376
+ "shadowHover": {
377
+ "$type": "color",
378
+ "$value": "rgba(0, 0, 0, 0.15)",
379
+ "$description": "Offset shadow colour on hover and press. Neutral, like the background, so it works on every alert variant"
380
+ }
231
381
  }
232
382
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$description": "Core scales shared by every brand: spacing, fixed sizes (content widths and breakpoints) and stacking order. Structural, so layouts behave the same in every brand.",
3
3
  "spacing": {
4
- "$description": "Generous spacing — breathing room, not dense",
4
+ "$description": "Generous spacing — breathing room, not dense. Multiples of half the brand's grid.unit (spacing.1 = half a unit, spacing.2 = one unit), computed per brand at build time by style-dictionary.config.js; the values written here are what an 8px grid gives. The x-5 steps fall between half-units: avoid them in new work",
5
5
  "0": {
6
6
  "$type": "dimension",
7
7
  "$value": "0"