@aziontech/theme 4.3.1 → 5.0.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.
@@ -704,8 +704,9 @@
704
704
  --layout-measure-focused: var(--container-4xl);
705
705
  --layout-measure-form: var(--container-4xl);
706
706
  --layout-measure-form-create: var(--container-5xl);
707
- --layout-measure-docs: var(--container-4xl);
708
- --container-site: var(--container-5xl);
707
+ --layout-measure-content: var(--container-3xl);
708
+ --layout-measure-site: var(--container-6xl);
709
+ --layout-measure-site-header: var(--container-7xl);
709
710
  --layout-measure-control: var(--container-3xs);
710
711
  --text-big-number-md-font-size: 1.25rem;
711
712
  --text-big-number-md-line-height: 1.25;
@@ -719,6 +720,20 @@
719
720
  --text-big-number-lg-line-height: 1.25;
720
721
  --text-big-number-lg-font-weight: 400;
721
722
  --text-big-number-lg-font-family: Proto Mono;
723
+ --text-amount-lg-text-wrap-style: balance;
724
+ --text-amount-lg-font-size: 1.875rem;
725
+ --text-amount-lg-line-height: 1.25;
726
+ --text-amount-lg-font-weight: 400;
727
+ --text-amount-lg-letter-spacing: -0.08em;
728
+ --text-amount-md-text-wrap-style: balance;
729
+ --text-amount-md-font-size: 1rem;
730
+ --text-amount-md-line-height: 1.25;
731
+ --text-amount-md-font-weight: 400;
732
+ --text-amount-md-letter-spacing: -0.08em;
733
+ --text-amount-sm-font-size: 1rem;
734
+ --text-amount-sm-line-height: 1.5;
735
+ --text-amount-sm-font-weight: 400;
736
+ --text-amount-sm-letter-spacing: -0.08em;
722
737
  --text-heading-2xl-font-size: 1.875rem;
723
738
  --text-heading-2xl-line-height: 1.25;
724
739
  --text-heading-2xl-font-weight: 400;
@@ -835,6 +850,8 @@
835
850
  --text-big-number-md-font-size: 1.5rem;
836
851
  --text-big-number-sm-font-size: 1.25rem;
837
852
  --text-big-number-lg-font-size: 2.25rem;
853
+ --text-amount-lg-font-size: 3rem;
854
+ --text-amount-md-font-size: 1.25rem;
838
855
  --text-heading-2xl-font-size: 3rem;
839
856
  --text-heading-xl-font-size: 1.875rem;
840
857
  --text-heading-md-font-size: 1.25rem;
@@ -845,6 +862,8 @@
845
862
  @media (min-width: 768px) {
846
863
  --text-big-number-md-font-size: 2.25rem;
847
864
  --text-big-number-lg-font-size: 3.5rem;
865
+ --text-amount-lg-font-size: 3.5rem;
866
+ --text-amount-md-font-size: 1.5rem;
848
867
  --text-heading-2xl-font-size: 3.5rem;
849
868
  --text-heading-xl-font-size: 2.25rem;
850
869
  --text-heading-lg-font-size: 1.875rem;
@@ -1148,6 +1167,29 @@
1148
1167
  font-family: var(--text-big-number-lg-font-family);
1149
1168
  }
1150
1169
 
1170
+ @utility text-amount-lg {
1171
+ text-wrap-style: var(--text-amount-lg-text-wrap-style);
1172
+ font-size: var(--text-amount-lg-font-size);
1173
+ line-height: var(--text-amount-lg-line-height);
1174
+ font-weight: var(--text-amount-lg-font-weight);
1175
+ letter-spacing: var(--text-amount-lg-letter-spacing);
1176
+ }
1177
+
1178
+ @utility text-amount-md {
1179
+ text-wrap-style: var(--text-amount-md-text-wrap-style);
1180
+ font-size: var(--text-amount-md-font-size);
1181
+ line-height: var(--text-amount-md-line-height);
1182
+ font-weight: var(--text-amount-md-font-weight);
1183
+ letter-spacing: var(--text-amount-md-letter-spacing);
1184
+ }
1185
+
1186
+ @utility text-amount-sm {
1187
+ font-size: var(--text-amount-sm-font-size);
1188
+ line-height: var(--text-amount-sm-line-height);
1189
+ font-weight: var(--text-amount-sm-font-weight);
1190
+ letter-spacing: var(--text-amount-sm-letter-spacing);
1191
+ }
1192
+
1151
1193
  @utility text-heading-2xl {
1152
1194
  font-size: var(--text-heading-2xl-font-size);
1153
1195
  line-height: var(--text-heading-2xl-line-height);
@@ -1396,14 +1438,20 @@
1396
1438
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1397
1439
  }
1398
1440
 
1399
- @utility layout-column-docs {
1400
- --layout-column-measure: var(--layout-measure-docs);
1441
+ @utility layout-column-content {
1442
+ --layout-column-measure: var(--layout-measure-content);
1401
1443
  margin-inline: auto;
1402
1444
  width: 100%;
1403
1445
  max-width: var(--layout-column-measure);
1404
1446
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1405
1447
  }
1406
1448
 
1449
+ @utility layout-column-site {
1450
+ margin-inline: auto;
1451
+ width: 100%;
1452
+ max-width: min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline));
1453
+ }
1454
+
1407
1455
  @utility layout-field-control {
1408
1456
  &:not(#\#) { display: flex; flex: 1 1 0%; justify-content: flex-end; max-width: var(--layout-measure-control); }
1409
1457
  }
@@ -704,8 +704,9 @@
704
704
  --layout-measure-focused: var(--container-4xl);
705
705
  --layout-measure-form: var(--container-4xl);
706
706
  --layout-measure-form-create: var(--container-5xl);
707
- --layout-measure-docs: var(--container-4xl);
708
- --container-site: var(--container-5xl);
707
+ --layout-measure-content: var(--container-3xl);
708
+ --layout-measure-site: var(--container-6xl);
709
+ --layout-measure-site-header: var(--container-7xl);
709
710
  --layout-measure-control: var(--container-3xs);
710
711
  --text-big-number-md-font-size: 1.25rem;
711
712
  --text-big-number-md-line-height: 1.25;
@@ -719,6 +720,20 @@
719
720
  --text-big-number-lg-line-height: 1.25;
720
721
  --text-big-number-lg-font-weight: 400;
721
722
  --text-big-number-lg-font-family: Proto Mono;
723
+ --text-amount-lg-text-wrap-style: balance;
724
+ --text-amount-lg-font-size: 1.875rem;
725
+ --text-amount-lg-line-height: 1.25;
726
+ --text-amount-lg-font-weight: 400;
727
+ --text-amount-lg-letter-spacing: -0.08em;
728
+ --text-amount-md-text-wrap-style: balance;
729
+ --text-amount-md-font-size: 1rem;
730
+ --text-amount-md-line-height: 1.25;
731
+ --text-amount-md-font-weight: 400;
732
+ --text-amount-md-letter-spacing: -0.08em;
733
+ --text-amount-sm-font-size: 1rem;
734
+ --text-amount-sm-line-height: 1.5;
735
+ --text-amount-sm-font-weight: 400;
736
+ --text-amount-sm-letter-spacing: -0.08em;
722
737
  --text-heading-2xl-font-size: 1.875rem;
723
738
  --text-heading-2xl-line-height: 1.25;
724
739
  --text-heading-2xl-font-weight: 400;
@@ -835,6 +850,8 @@
835
850
  --text-big-number-md-font-size: 1.5rem;
836
851
  --text-big-number-sm-font-size: 1.25rem;
837
852
  --text-big-number-lg-font-size: 2.25rem;
853
+ --text-amount-lg-font-size: 3rem;
854
+ --text-amount-md-font-size: 1.25rem;
838
855
  --text-heading-2xl-font-size: 3rem;
839
856
  --text-heading-xl-font-size: 1.875rem;
840
857
  --text-heading-md-font-size: 1.25rem;
@@ -845,6 +862,8 @@
845
862
  @media (min-width: 768px) {
846
863
  --text-big-number-md-font-size: 2.25rem;
847
864
  --text-big-number-lg-font-size: 3.5rem;
865
+ --text-amount-lg-font-size: 3.5rem;
866
+ --text-amount-md-font-size: 1.5rem;
848
867
  --text-heading-2xl-font-size: 3.5rem;
849
868
  --text-heading-xl-font-size: 2.25rem;
850
869
  --text-heading-lg-font-size: 1.875rem;
@@ -1148,6 +1167,29 @@
1148
1167
  font-family: var(--text-big-number-lg-font-family);
1149
1168
  }
1150
1169
 
1170
+ @utility text-amount-lg {
1171
+ text-wrap-style: var(--text-amount-lg-text-wrap-style);
1172
+ font-size: var(--text-amount-lg-font-size);
1173
+ line-height: var(--text-amount-lg-line-height);
1174
+ font-weight: var(--text-amount-lg-font-weight);
1175
+ letter-spacing: var(--text-amount-lg-letter-spacing);
1176
+ }
1177
+
1178
+ @utility text-amount-md {
1179
+ text-wrap-style: var(--text-amount-md-text-wrap-style);
1180
+ font-size: var(--text-amount-md-font-size);
1181
+ line-height: var(--text-amount-md-line-height);
1182
+ font-weight: var(--text-amount-md-font-weight);
1183
+ letter-spacing: var(--text-amount-md-letter-spacing);
1184
+ }
1185
+
1186
+ @utility text-amount-sm {
1187
+ font-size: var(--text-amount-sm-font-size);
1188
+ line-height: var(--text-amount-sm-line-height);
1189
+ font-weight: var(--text-amount-sm-font-weight);
1190
+ letter-spacing: var(--text-amount-sm-letter-spacing);
1191
+ }
1192
+
1151
1193
  @utility text-heading-2xl {
1152
1194
  font-size: var(--text-heading-2xl-font-size);
1153
1195
  line-height: var(--text-heading-2xl-line-height);
@@ -1396,14 +1438,20 @@
1396
1438
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1397
1439
  }
1398
1440
 
1399
- @utility layout-column-docs {
1400
- --layout-column-measure: var(--layout-measure-docs);
1441
+ @utility layout-column-content {
1442
+ --layout-column-measure: var(--layout-measure-content);
1401
1443
  margin-inline: auto;
1402
1444
  width: 100%;
1403
1445
  max-width: var(--layout-column-measure);
1404
1446
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1405
1447
  }
1406
1448
 
1449
+ @utility layout-column-site {
1450
+ margin-inline: auto;
1451
+ width: 100%;
1452
+ max-width: min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline));
1453
+ }
1454
+
1407
1455
  @utility layout-field-control {
1408
1456
  &:not(#\#) { display: flex; flex: 1 1 0%; justify-content: flex-end; max-width: var(--layout-measure-control); }
1409
1457
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aziontech/theme",
3
3
  "type": "module",
4
- "version": "4.3.1",
4
+ "version": "5.0.0",
5
5
  "author": "aziontech",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -23,11 +23,17 @@ export const layoutsData: {
23
23
  'layout-measure-focused': string;
24
24
  'layout-measure-form': string;
25
25
  'layout-measure-form-create': string;
26
- 'layout-measure-docs': string;
27
- 'container-site': string;
26
+ 'layout-measure-content': string;
27
+ 'layout-measure-site': string;
28
+ 'layout-measure-site-header': string;
28
29
  'layout-measure-control': string;
29
30
  };
30
31
  export const layoutsUtilities: {
32
+ 'layout-column-site': {
33
+ 'margin-inline': string;
34
+ width: string;
35
+ 'max-width': string;
36
+ };
31
37
  'layout-field-control': {
32
38
  '&:not(#\\#)': {
33
39
  display: string;
@@ -1 +1 @@
1
- {"version":3,"file":"layouts.data.d.ts","sourceRoot":"","sources":["layouts.data.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;EAgHC;AAmDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqGC"}
1
+ {"version":3,"file":"layouts.data.d.ts","sourceRoot":"","sources":["layouts.data.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;;EAuIC;AAmDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2IC"}
@@ -75,38 +75,61 @@ export const layoutsData = {
75
75
  * the far left of a 1600px row from the input it names, and the eye has to travel
76
76
  * the whole measure to pair them.
77
77
  *
78
- * DOCS pages are the one column capped by TYPOGRAPHY rather than by layout. Prose is
79
- * read line by line, and past ~90 characters the eye loses the start of the next line
80
- * on the return sweep — a limit that has nothing to do with how wide the payload is,
81
- * which is why it is far tighter than every other measure here and why it does not
82
- * move when a rail collapses and frees up room. A docs page is already flanked by two
83
- * rails; this caps what is between them.
78
+ * CONTENT pages are the one column capped by TYPOGRAPHY rather than by layout. Prose
79
+ * is read line by line, and past ~90 characters the eye loses the start of the next
80
+ * line on the return sweep — a limit that has nothing to do with how wide the payload
81
+ * is, which is why it is far tighter than every other measure here and why it does not
82
+ * move when a rail collapses and frees up room. A documentation page is already
83
+ * flanked by two rails; this caps what is between them.
84
+ *
85
+ * IT IS NAMED FOR THE PAYLOAD, NOT FOR THE SECTION. The cap is a line length, so every
86
+ * page whose payload is flowing copy takes it — documentation today, the blog and any
87
+ * other article page next — and none of them has to re-derive the same limit under a
88
+ * name that says "docs". By the same rule, a page inside the documentation that is NOT
89
+ * read line by line (its home, a directory of cards) takes a wider measure: what picks
90
+ * the column is the payload, never the URL.
84
91
  */
85
92
  'layout-measure': 'var(--container-7xl)', // 1620px — data pages
86
93
  'layout-measure-focused': 'var(--container-4xl)', // 1024px — home
87
94
  'layout-measure-form': 'var(--container-4xl)', // 1024px — settings, forms
88
95
  'layout-measure-form-create': 'var(--container-5xl)', // 1192px — create flows
89
- 'layout-measure-docs': 'var(--container-4xl)', // 1192px — documentation prose
96
+ 'layout-measure-content': 'var(--container-3xl)', // 876px — prose columns (docs, blog)
90
97
 
91
98
  /*
92
- * MEASURE (site) — the marketing site's content column, and the one measure in this
93
- * file that is not a console page's.
99
+ * MEASURE (site) — the marketing site's columns, and the only measures in this file
100
+ * that are not a console page's. There are TWO, because the page and the bar above it
101
+ * do not answer the same question.
102
+ *
103
+ * --layout-measure-site IS THE PAGE'S FRAME. The azion.com pages are a single
104
+ * vertical frame: the hero's inner column, every section below it, the docs home and
105
+ * the footer all sit on the SAME centred column, and the border-x that runs down the
106
+ * page is only continuous because they agree to the pixel. That is why this is a token
107
+ * rather than a width re-typed per band — the frame is one decision, and one place is
108
+ * where it has to live.
109
+ *
110
+ * --layout-measure-site-header IS THE BAR'S, AND IT IS DELIBERATELY ONE RUNG WIDER.
111
+ * A bar is chrome, not content: it carries the brand at one end of the window and the
112
+ * account actions at the other, held apart by a navigation region in the middle, so it
113
+ * wants the room a reading frame deliberately refuses. Held to the page's measure that
114
+ * middle region ran out of room on a laptop long before the page did. The bar is the
115
+ * ONE band allowed outside the frame, and it says so in a token of its own — which is
116
+ * also what keeps the exception reviewable in both directions: nobody widens the bar by
117
+ * retuning the page, and nobody widens the page by retuning the bar.
94
118
  *
95
- * The azion.com pages are a single vertical frame: the nav bar, the hero's inner
96
- * column, every section below it and the footer all sit on the SAME centred column,
97
- * and the border-x that runs down the page is only continuous because those four
98
- * agree to the pixel. That is why this is a token rather than a width re-typed per
99
- * band — the frame is one decision, and one place is where it has to live.
119
+ * The two part company only above the caps, and by a fixed step. Measured against the
120
+ * page frame: one shared inset up to 1280, 2px apart at 1440 (the frame has just
121
+ * capped), 82 at 1600, and a flat 92 from 1668 up, where the bar caps too — half the
122
+ * 232px between the two measures, less the boundary the bar keeps.
100
123
  *
101
- * It is `5xl` (1192px) — a rung of the shared container ladder
102
- * (primitives/shape/container.js), not a number chosen for this page. The page snaps
103
- * to the scale, the scale does not bend to the page, which is the same rule
104
- * --layout-measure follows. It is its own token rather than a reference to one of the
105
- * console measures because the two answer different questions: a console measure caps
106
- * a payload (a table, a form), while this one is the width of a FRAME whose four bands
107
- * have to line up. Retuning either must not move the other.
124
+ * Both are rungs of the shared container ladder (primitives/shape/container.js), not
125
+ * numbers chosen for a page. The page snaps to the scale, the scale does not bend to
126
+ * the page, which is the same rule --layout-measure follows. They are their own tokens
127
+ * rather than references to a console measure because the questions differ: a console
128
+ * measure caps a PAYLOAD (a table, a form), while these are the widths of a FRAME and
129
+ * of the chrome above it. Retuning any of the three must not move the others.
108
130
  */
109
- 'container-site': 'var(--container-5xl)', // 1192px — the marketing site column
131
+ 'layout-measure-site': 'var(--container-6xl)', // 1388px — the marketing site column
132
+ 'layout-measure-site-header': 'var(--container-7xl)', // 1620px — the site bar, one rung wider
110
133
  /*
111
134
  * MEASURE (control) — the widest the *right side* of an item-group field row may
112
135
  * get. An ItemGroup row is two columns: the content names the field (title +
@@ -137,7 +160,7 @@ const COLUMN_MEASURE = {
137
160
  'layout-column-focused': 'var(--layout-measure-focused)',
138
161
  'layout-column-form': 'var(--layout-measure-form)',
139
162
  'layout-form-create': 'var(--layout-measure-form-create)',
140
- 'layout-column-docs': 'var(--layout-measure-docs)'
163
+ 'layout-column-content': 'var(--layout-measure-content)'
141
164
  }
142
165
 
143
166
  /**
@@ -244,11 +267,49 @@ export const layoutsUtilities = {
244
267
  // 1192px column a 256px control side left every input pinned to the far right,
245
268
  // a head-turn away from the label naming it; 472px pulls the control back
246
269
  // toward its label and gives the radio blocks room to read.
247
- name === 'layout-form-create' ? { '--layout-measure-control': 'var(--container-md)' } : undefined
270
+ name === 'layout-form-create'
271
+ ? { '--layout-measure-control': 'var(--container-md)' }
272
+ : undefined
248
273
  )
249
274
  ])
250
275
  ),
251
276
 
277
+ /*
278
+ * THE SITE FRAME — the marketing page's column, and the one column in this file whose
279
+ * cap is a FRAME width rather than a content width.
280
+ *
281
+ * IT IS INSET FROM THE WINDOW AT EVERY WIDTH, and that is the whole reason it exists as
282
+ * a utility. On a wide screen the inset is free: --layout-measure-site is narrower than
283
+ * the window, `margin-inline: auto` centres the column, and its rules read as the page's
284
+ * vertical frame with canvas either side. Below the cap that stops doing anything — the
285
+ * column becomes the window — and the two rules land ON the window edges, where a
286
+ * hairline is not a frame, it is a seam against the bezel. So the frame that organises
287
+ * the whole desktop layout simply ceased to exist on a phone, and the headline above it
288
+ * (which pads by the boundary) opened a boundary inside a rule drawn at x=0.
289
+ *
290
+ * ONE `min()` COVERS THE WHOLE RANGE, WITH NO BREAKPOINT. The cap is whichever binds
291
+ * first: the measure, or the window less a boundary a side. While the measure is the
292
+ * smaller the column is capped and centred and the boundary term is inert; once the
293
+ * window is narrower than the measure — precisely where the cap has stopped working —
294
+ * the boundary term takes over and IS the inset. The two mechanisms hand off to each
295
+ * other, so a phone gets the same framed column a desktop gets, one boundary in from
296
+ * each edge.
297
+ *
298
+ * NO PADDING, DELIBERATELY. The inset belongs to the frame, not to the copy: the bands
299
+ * inside are grids whose `gap-px` rules have to reach the frame's own verticals, and a
300
+ * padding here would pull them off it. A band that wants its content inset too adds
301
+ * `layout-boundary-inline` on top (that is what SectionContainer's `padded` does).
302
+ *
303
+ * This is the shape /site/pricing worked out band by band and carried in a wrapper div;
304
+ * as a utility it is one element, pixel-identical at every width, and every other page
305
+ * and the footer get it by naming the column instead of re-deriving it.
306
+ */
307
+ 'layout-column-site': {
308
+ 'margin-inline': 'auto',
309
+ width: '100%',
310
+ 'max-width': 'min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline))'
311
+ },
312
+
252
313
  /*
253
314
  * The control side of an item-group field row: the same geometry every settings row
254
315
  * hand-repeated, with the cap coming from --layout-measure-control so a band retunes
@@ -28,6 +28,34 @@ export const textsData: {
28
28
  fontWeight: number;
29
29
  fontFamily: string;
30
30
  };
31
+ 'text-amount-lg': {
32
+ textWrapStyle: string;
33
+ fontSize: {
34
+ _: string;
35
+ sm: string;
36
+ md: string;
37
+ };
38
+ lineHeight: number;
39
+ fontWeight: number;
40
+ letterSpacing: string;
41
+ };
42
+ 'text-amount-md': {
43
+ textWrapStyle: string;
44
+ fontSize: {
45
+ _: string;
46
+ sm: string;
47
+ md: string;
48
+ };
49
+ lineHeight: number;
50
+ fontWeight: number;
51
+ letterSpacing: string;
52
+ };
53
+ 'text-amount-sm': {
54
+ fontSize: string;
55
+ lineHeight: number;
56
+ fontWeight: number;
57
+ letterSpacing: string;
58
+ };
31
59
  'text-heading-2xl': {
32
60
  fontSize: {
33
61
  _: string;
@@ -1 +1 @@
1
- {"version":3,"file":"texts.data.d.ts","sourceRoot":"","sources":["texts.data.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6KE,8FAA8F;;;;;;;;;;;;;;;;;;EAkB/F"}
1
+ {"version":3,"file":"texts.data.d.ts","sourceRoot":"","sources":["texts.data.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqNE,8FAA8F;;;;;;;;;;;;;;;;;;EAkB/F"}
@@ -41,6 +41,46 @@ export const textsData = {
41
41
  fontWeight: fontWeight.normal,
42
42
  fontFamily: fontFamily.display
43
43
  },
44
+ // ── The amount ladder (Currency) ─────────────────────────────────────────
45
+ //
46
+ // The three sizes `Currency` typesets a monetary amount at, one per reading
47
+ // distance: `sm` inside a table row or list cell, `md` an amount stated as a fact on
48
+ // a card, `lg` the headline figure of a pricing card. Each MIRRORS the heading/label
49
+ // token it used to borrow (`text-label-lg`, `text-heading-md`, `text-heading-2xl`) —
50
+ // same size ramp, same leading, same weight — and adds the one thing that made
51
+ // borrowing wrong: the amount's negative tracking.
52
+ //
53
+ // `-0.08em` is PROPORTIONAL, and deliberately so, which is why it lives here and not
54
+ // in `tracking.js`. That scale is absolute (`rem`) on purpose so a step resolves to a
55
+ // fixed measure at any font size (see its docstring), and it therefore holds no
56
+ // `-0.08em`-equivalent step. A figure is the one place where the tracking has to
57
+ // scale WITH the glyphs: the Figma amount specifies −1.28px @16px, −1.92px @24px and
58
+ // −4.48px @56px, which is one ratio, not three steps. Expressing it as `em` is what
59
+ // makes a single declaration correct at all three sizes and at every breakpoint of
60
+ // `lg`'s responsive ramp.
61
+ //
62
+ // Dedicated tokens rather than tracking added to the borrowed ones: `text-heading-2xl`
63
+ // sets every hero headline in the system, and a hero is prose, not a numeral.
64
+ 'text-amount-lg': {
65
+ textWrapStyle: 'balance',
66
+ fontSize: { _: fontSize['3xl'], sm: fontSize['5xl'], md: fontSize['6xl'] },
67
+ lineHeight: leading.tight,
68
+ fontWeight: fontWeight.normal,
69
+ letterSpacing: '-0.08em'
70
+ },
71
+ 'text-amount-md': {
72
+ textWrapStyle: 'balance',
73
+ fontSize: { _: fontSize.base, sm: fontSize.xl, md: fontSize['2xl'] },
74
+ lineHeight: leading.tight,
75
+ fontWeight: fontWeight.normal,
76
+ letterSpacing: '-0.08em'
77
+ },
78
+ 'text-amount-sm': {
79
+ fontSize: fontSize.base,
80
+ lineHeight: leading.normal,
81
+ fontWeight: fontWeight.normal,
82
+ letterSpacing: '-0.08em'
83
+ },
44
84
  'text-heading-2xl': {
45
85
  fontSize: { _: fontSize['3xl'], sm: fontSize['5xl'], md: fontSize['6xl'] },
46
86
  lineHeight: leading.tight,