@aziontech/theme 4.3.1 → 5.1.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,72 +720,108 @@
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;
737
+ --text-heading-2xl-text-wrap-style: balance;
722
738
  --text-heading-2xl-font-size: 1.875rem;
723
739
  --text-heading-2xl-line-height: 1.25;
724
740
  --text-heading-2xl-font-weight: 400;
741
+ --text-heading-2xl-letter-spacing: -0.05rem;
742
+ --text-heading-xl-text-wrap-style: balance;
725
743
  --text-heading-xl-font-size: 1.25rem;
726
744
  --text-heading-xl-line-height: 1.25;
727
745
  --text-heading-xl-font-weight: 400;
746
+ --text-heading-xl-letter-spacing: -0.05rem;
747
+ --text-heading-lg-text-wrap-style: balance;
728
748
  --text-heading-lg-font-size: 1.125rem;
729
749
  --text-heading-lg-line-height: 1.25;
730
750
  --text-heading-lg-font-weight: 400;
751
+ --text-heading-lg-letter-spacing: -0.05rem;
752
+ --text-heading-md-text-wrap-style: balance;
731
753
  --text-heading-md-font-size: 1rem;
732
754
  --text-heading-md-line-height: 1.25;
733
755
  --text-heading-md-font-weight: 400;
756
+ --text-heading-md-letter-spacing: -0.05rem;
757
+ --text-heading-sm-text-wrap-style: balance;
734
758
  --text-heading-sm-font-size: 0.875rem;
735
759
  --text-heading-sm-line-height: 1.375;
736
760
  --text-heading-sm-font-weight: 400;
761
+ --text-heading-sm-letter-spacing: -0.05rem;
762
+ --text-heading-xs-text-wrap-style: balance;
737
763
  --text-heading-xs-font-size: 1rem;
738
764
  --text-heading-xs-line-height: 1.375;
739
765
  --text-heading-xs-font-weight: 400;
766
+ --text-heading-xs-letter-spacing: -0.05rem;
767
+ --text-heading-xxs-text-wrap-style: balance;
740
768
  --text-heading-xxs-font-size: 0.875rem;
741
769
  --text-heading-xxs-line-height: 1.375;
742
770
  --text-heading-xxs-font-weight: 400;
771
+ --text-heading-xxs-letter-spacing: -0.05rem;
743
772
  --text-label-lg-font-size: 1rem;
744
773
  --text-label-lg-line-height: 1.5;
745
774
  --text-label-lg-font-weight: 400;
775
+ --text-label-lg-letter-spacing: -0.025rem;
746
776
  --text-label-md-font-size: 0.875rem;
747
777
  --text-label-md-line-height: 1.5;
748
778
  --text-label-md-font-weight: 400;
779
+ --text-label-md-letter-spacing: -0.025rem;
749
780
  --text-label-sm-font-size: 0.75rem;
750
781
  --text-label-sm-line-height: 1.5;
751
782
  --text-label-sm-font-weight: 400;
783
+ --text-label-sm-letter-spacing: -0.025rem;
752
784
  --text-label-code-sm-font-family: Roboto Mono;
753
785
  --text-label-code-sm-font-size: 0.75rem;
754
786
  --text-label-code-sm-line-height: 1;
755
787
  --text-label-code-sm-font-weight: 400;
756
- --text-label-code-sm-letter-spacing: 0;
788
+ --text-label-code-sm-letter-spacing: 0.025rem;
757
789
  --text-body-code-sm-text-wrap-style: pretty;
758
790
  --text-body-code-sm-font-family: Roboto Mono;
759
791
  --text-body-code-sm-font-size: 0.75rem;
760
792
  --text-body-code-sm-line-height: 1.625;
761
793
  --text-body-code-sm-font-weight: 400;
762
- --text-body-code-sm-letter-spacing: 0;
794
+ --text-body-code-sm-letter-spacing: 0.025rem;
763
795
  --text-label-code-md-font-family: Roboto Mono;
764
796
  --text-label-code-md-font-size: 0.875rem;
765
797
  --text-label-code-md-line-height: 1;
766
798
  --text-label-code-md-font-weight: 400;
767
- --text-label-code-md-letter-spacing: 0;
799
+ --text-label-code-md-letter-spacing: 0.025rem;
768
800
  --text-label-code-lg-font-family: Roboto Mono;
769
801
  --text-label-code-lg-font-size: 1rem;
770
802
  --text-label-code-lg-line-height: 1;
771
803
  --text-label-code-lg-font-weight: 400;
772
- --text-label-code-lg-letter-spacing: 0;
804
+ --text-label-code-lg-letter-spacing: 0.025rem;
805
+ --text-body-lg-text-wrap-style: pretty;
773
806
  --text-body-lg-font-size: 1rem;
774
807
  --text-body-lg-font-weight: 400;
775
808
  --text-body-lg-line-height: 1.375;
809
+ --text-body-md-text-wrap-style: pretty;
776
810
  --text-body-md-font-size: 1rem;
777
811
  --text-body-md-font-weight: 400;
778
812
  --text-body-md-line-height: 1.375;
779
813
  --text-body-prose-md-font-size: 1rem;
780
814
  --text-body-prose-md-font-weight: 400;
781
815
  --text-body-prose-md-line-height: 1.625;
816
+ --text-body-sm-text-wrap-style: pretty;
782
817
  --text-body-sm-font-size: 0.875rem;
783
818
  --text-body-sm-font-weight: 400;
784
819
  --text-body-sm-line-height: 1.375;
820
+ --text-body-xs-text-wrap-style: pretty;
785
821
  --text-body-xs-font-size: 0.75rem;
786
822
  --text-body-xs-font-weight: 400;
787
823
  --text-body-xs-line-height: 1.375;
824
+ --text-body-xxs-text-wrap-style: pretty;
788
825
  --text-body-xxs-font-size: 0.75rem;
789
826
  --text-body-xxs-font-weight: 400;
790
827
  --text-body-xxs-line-height: 1.5;
@@ -835,6 +872,8 @@
835
872
  --text-big-number-md-font-size: 1.5rem;
836
873
  --text-big-number-sm-font-size: 1.25rem;
837
874
  --text-big-number-lg-font-size: 2.25rem;
875
+ --text-amount-lg-font-size: 3rem;
876
+ --text-amount-md-font-size: 1.25rem;
838
877
  --text-heading-2xl-font-size: 3rem;
839
878
  --text-heading-xl-font-size: 1.875rem;
840
879
  --text-heading-md-font-size: 1.25rem;
@@ -845,6 +884,8 @@
845
884
  @media (min-width: 768px) {
846
885
  --text-big-number-md-font-size: 2.25rem;
847
886
  --text-big-number-lg-font-size: 3.5rem;
887
+ --text-amount-lg-font-size: 3.5rem;
888
+ --text-amount-md-font-size: 1.5rem;
848
889
  --text-heading-2xl-font-size: 3.5rem;
849
890
  --text-heading-xl-font-size: 2.25rem;
850
891
  --text-heading-lg-font-size: 1.875rem;
@@ -1148,64 +1189,104 @@
1148
1189
  font-family: var(--text-big-number-lg-font-family);
1149
1190
  }
1150
1191
 
1192
+ @utility text-amount-lg {
1193
+ text-wrap-style: var(--text-amount-lg-text-wrap-style);
1194
+ font-size: var(--text-amount-lg-font-size);
1195
+ line-height: var(--text-amount-lg-line-height);
1196
+ font-weight: var(--text-amount-lg-font-weight);
1197
+ letter-spacing: var(--text-amount-lg-letter-spacing);
1198
+ }
1199
+
1200
+ @utility text-amount-md {
1201
+ text-wrap-style: var(--text-amount-md-text-wrap-style);
1202
+ font-size: var(--text-amount-md-font-size);
1203
+ line-height: var(--text-amount-md-line-height);
1204
+ font-weight: var(--text-amount-md-font-weight);
1205
+ letter-spacing: var(--text-amount-md-letter-spacing);
1206
+ }
1207
+
1208
+ @utility text-amount-sm {
1209
+ font-size: var(--text-amount-sm-font-size);
1210
+ line-height: var(--text-amount-sm-line-height);
1211
+ font-weight: var(--text-amount-sm-font-weight);
1212
+ letter-spacing: var(--text-amount-sm-letter-spacing);
1213
+ }
1214
+
1151
1215
  @utility text-heading-2xl {
1216
+ text-wrap-style: var(--text-heading-2xl-text-wrap-style);
1152
1217
  font-size: var(--text-heading-2xl-font-size);
1153
1218
  line-height: var(--text-heading-2xl-line-height);
1154
1219
  font-weight: var(--text-heading-2xl-font-weight);
1220
+ letter-spacing: var(--text-heading-2xl-letter-spacing);
1155
1221
  }
1156
1222
 
1157
1223
  @utility text-heading-xl {
1224
+ text-wrap-style: var(--text-heading-xl-text-wrap-style);
1158
1225
  font-size: var(--text-heading-xl-font-size);
1159
1226
  line-height: var(--text-heading-xl-line-height);
1160
1227
  font-weight: var(--text-heading-xl-font-weight);
1228
+ letter-spacing: var(--text-heading-xl-letter-spacing);
1161
1229
  }
1162
1230
 
1163
1231
  @utility text-heading-lg {
1232
+ text-wrap-style: var(--text-heading-lg-text-wrap-style);
1164
1233
  font-size: var(--text-heading-lg-font-size);
1165
1234
  line-height: var(--text-heading-lg-line-height);
1166
1235
  font-weight: var(--text-heading-lg-font-weight);
1236
+ letter-spacing: var(--text-heading-lg-letter-spacing);
1167
1237
  }
1168
1238
 
1169
1239
  @utility text-heading-md {
1240
+ text-wrap-style: var(--text-heading-md-text-wrap-style);
1170
1241
  font-size: var(--text-heading-md-font-size);
1171
1242
  line-height: var(--text-heading-md-line-height);
1172
1243
  font-weight: var(--text-heading-md-font-weight);
1244
+ letter-spacing: var(--text-heading-md-letter-spacing);
1173
1245
  }
1174
1246
 
1175
1247
  @utility text-heading-sm {
1248
+ text-wrap-style: var(--text-heading-sm-text-wrap-style);
1176
1249
  font-size: var(--text-heading-sm-font-size);
1177
1250
  line-height: var(--text-heading-sm-line-height);
1178
1251
  font-weight: var(--text-heading-sm-font-weight);
1252
+ letter-spacing: var(--text-heading-sm-letter-spacing);
1179
1253
  }
1180
1254
 
1181
1255
  @utility text-heading-xs {
1256
+ text-wrap-style: var(--text-heading-xs-text-wrap-style);
1182
1257
  font-size: var(--text-heading-xs-font-size);
1183
1258
  line-height: var(--text-heading-xs-line-height);
1184
1259
  font-weight: var(--text-heading-xs-font-weight);
1260
+ letter-spacing: var(--text-heading-xs-letter-spacing);
1185
1261
  }
1186
1262
 
1187
1263
  @utility text-heading-xxs {
1264
+ text-wrap-style: var(--text-heading-xxs-text-wrap-style);
1188
1265
  font-size: var(--text-heading-xxs-font-size);
1189
1266
  line-height: var(--text-heading-xxs-line-height);
1190
1267
  font-weight: var(--text-heading-xxs-font-weight);
1268
+ letter-spacing: var(--text-heading-xxs-letter-spacing);
1191
1269
  }
1192
1270
 
1193
1271
  @utility text-label-lg {
1194
1272
  font-size: var(--text-label-lg-font-size);
1195
1273
  line-height: var(--text-label-lg-line-height);
1196
1274
  font-weight: var(--text-label-lg-font-weight);
1275
+ letter-spacing: var(--text-label-lg-letter-spacing);
1197
1276
  }
1198
1277
 
1199
1278
  @utility text-label-md {
1200
1279
  font-size: var(--text-label-md-font-size);
1201
1280
  line-height: var(--text-label-md-line-height);
1202
1281
  font-weight: var(--text-label-md-font-weight);
1282
+ letter-spacing: var(--text-label-md-letter-spacing);
1203
1283
  }
1204
1284
 
1205
1285
  @utility text-label-sm {
1206
1286
  font-size: var(--text-label-sm-font-size);
1207
1287
  line-height: var(--text-label-sm-line-height);
1208
1288
  font-weight: var(--text-label-sm-font-weight);
1289
+ letter-spacing: var(--text-label-sm-letter-spacing);
1209
1290
  }
1210
1291
 
1211
1292
  @utility text-label-code-sm {
@@ -1242,12 +1323,14 @@
1242
1323
  }
1243
1324
 
1244
1325
  @utility text-body-lg {
1326
+ text-wrap-style: var(--text-body-lg-text-wrap-style);
1245
1327
  font-size: var(--text-body-lg-font-size);
1246
1328
  font-weight: var(--text-body-lg-font-weight);
1247
1329
  line-height: var(--text-body-lg-line-height);
1248
1330
  }
1249
1331
 
1250
1332
  @utility text-body-md {
1333
+ text-wrap-style: var(--text-body-md-text-wrap-style);
1251
1334
  font-size: var(--text-body-md-font-size);
1252
1335
  font-weight: var(--text-body-md-font-weight);
1253
1336
  line-height: var(--text-body-md-line-height);
@@ -1260,18 +1343,21 @@
1260
1343
  }
1261
1344
 
1262
1345
  @utility text-body-sm {
1346
+ text-wrap-style: var(--text-body-sm-text-wrap-style);
1263
1347
  font-size: var(--text-body-sm-font-size);
1264
1348
  font-weight: var(--text-body-sm-font-weight);
1265
1349
  line-height: var(--text-body-sm-line-height);
1266
1350
  }
1267
1351
 
1268
1352
  @utility text-body-xs {
1353
+ text-wrap-style: var(--text-body-xs-text-wrap-style);
1269
1354
  font-size: var(--text-body-xs-font-size);
1270
1355
  font-weight: var(--text-body-xs-font-weight);
1271
1356
  line-height: var(--text-body-xs-line-height);
1272
1357
  }
1273
1358
 
1274
1359
  @utility text-body-xxs {
1360
+ text-wrap-style: var(--text-body-xxs-text-wrap-style);
1275
1361
  font-size: var(--text-body-xxs-font-size);
1276
1362
  font-weight: var(--text-body-xxs-font-weight);
1277
1363
  line-height: var(--text-body-xxs-line-height);
@@ -1396,14 +1482,20 @@
1396
1482
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1397
1483
  }
1398
1484
 
1399
- @utility layout-column-docs {
1400
- --layout-column-measure: var(--layout-measure-docs);
1485
+ @utility layout-column-content {
1486
+ --layout-column-measure: var(--layout-measure-content);
1401
1487
  margin-inline: auto;
1402
1488
  width: 100%;
1403
1489
  max-width: var(--layout-column-measure);
1404
1490
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1405
1491
  }
1406
1492
 
1493
+ @utility layout-column-site {
1494
+ margin-inline: auto;
1495
+ width: 100%;
1496
+ max-width: min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline));
1497
+ }
1498
+
1407
1499
  @utility layout-field-control {
1408
1500
  &:not(#\#) { display: flex; flex: 1 1 0%; justify-content: flex-end; max-width: var(--layout-measure-control); }
1409
1501
  }
@@ -1553,6 +1645,11 @@
1553
1645
  @utility border-info-contrast { border-color: var(--info-contrast); }
1554
1646
 
1555
1647
  @layer base {
1648
+ html {
1649
+ -webkit-font-smoothing: antialiased;
1650
+ -moz-osx-font-smoothing: grayscale;
1651
+ }
1652
+
1556
1653
  button:not(:disabled),
1557
1654
  [role="button"]:not([aria-disabled="true"]),
1558
1655
  summary {
@@ -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,72 +720,108 @@
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;
737
+ --text-heading-2xl-text-wrap-style: balance;
722
738
  --text-heading-2xl-font-size: 1.875rem;
723
739
  --text-heading-2xl-line-height: 1.25;
724
740
  --text-heading-2xl-font-weight: 400;
741
+ --text-heading-2xl-letter-spacing: -0.05rem;
742
+ --text-heading-xl-text-wrap-style: balance;
725
743
  --text-heading-xl-font-size: 1.25rem;
726
744
  --text-heading-xl-line-height: 1.25;
727
745
  --text-heading-xl-font-weight: 400;
746
+ --text-heading-xl-letter-spacing: -0.05rem;
747
+ --text-heading-lg-text-wrap-style: balance;
728
748
  --text-heading-lg-font-size: 1.125rem;
729
749
  --text-heading-lg-line-height: 1.25;
730
750
  --text-heading-lg-font-weight: 400;
751
+ --text-heading-lg-letter-spacing: -0.05rem;
752
+ --text-heading-md-text-wrap-style: balance;
731
753
  --text-heading-md-font-size: 1rem;
732
754
  --text-heading-md-line-height: 1.25;
733
755
  --text-heading-md-font-weight: 400;
756
+ --text-heading-md-letter-spacing: -0.05rem;
757
+ --text-heading-sm-text-wrap-style: balance;
734
758
  --text-heading-sm-font-size: 0.875rem;
735
759
  --text-heading-sm-line-height: 1.375;
736
760
  --text-heading-sm-font-weight: 400;
761
+ --text-heading-sm-letter-spacing: -0.05rem;
762
+ --text-heading-xs-text-wrap-style: balance;
737
763
  --text-heading-xs-font-size: 1rem;
738
764
  --text-heading-xs-line-height: 1.375;
739
765
  --text-heading-xs-font-weight: 400;
766
+ --text-heading-xs-letter-spacing: -0.05rem;
767
+ --text-heading-xxs-text-wrap-style: balance;
740
768
  --text-heading-xxs-font-size: 0.875rem;
741
769
  --text-heading-xxs-line-height: 1.375;
742
770
  --text-heading-xxs-font-weight: 400;
771
+ --text-heading-xxs-letter-spacing: -0.05rem;
743
772
  --text-label-lg-font-size: 1rem;
744
773
  --text-label-lg-line-height: 1.5;
745
774
  --text-label-lg-font-weight: 400;
775
+ --text-label-lg-letter-spacing: -0.025rem;
746
776
  --text-label-md-font-size: 0.875rem;
747
777
  --text-label-md-line-height: 1.5;
748
778
  --text-label-md-font-weight: 400;
779
+ --text-label-md-letter-spacing: -0.025rem;
749
780
  --text-label-sm-font-size: 0.75rem;
750
781
  --text-label-sm-line-height: 1.5;
751
782
  --text-label-sm-font-weight: 400;
783
+ --text-label-sm-letter-spacing: -0.025rem;
752
784
  --text-label-code-sm-font-family: Roboto Mono;
753
785
  --text-label-code-sm-font-size: 0.75rem;
754
786
  --text-label-code-sm-line-height: 1;
755
787
  --text-label-code-sm-font-weight: 400;
756
- --text-label-code-sm-letter-spacing: 0;
788
+ --text-label-code-sm-letter-spacing: 0.025rem;
757
789
  --text-body-code-sm-text-wrap-style: pretty;
758
790
  --text-body-code-sm-font-family: Roboto Mono;
759
791
  --text-body-code-sm-font-size: 0.75rem;
760
792
  --text-body-code-sm-line-height: 1.625;
761
793
  --text-body-code-sm-font-weight: 400;
762
- --text-body-code-sm-letter-spacing: 0;
794
+ --text-body-code-sm-letter-spacing: 0.025rem;
763
795
  --text-label-code-md-font-family: Roboto Mono;
764
796
  --text-label-code-md-font-size: 0.875rem;
765
797
  --text-label-code-md-line-height: 1;
766
798
  --text-label-code-md-font-weight: 400;
767
- --text-label-code-md-letter-spacing: 0;
799
+ --text-label-code-md-letter-spacing: 0.025rem;
768
800
  --text-label-code-lg-font-family: Roboto Mono;
769
801
  --text-label-code-lg-font-size: 1rem;
770
802
  --text-label-code-lg-line-height: 1;
771
803
  --text-label-code-lg-font-weight: 400;
772
- --text-label-code-lg-letter-spacing: 0;
804
+ --text-label-code-lg-letter-spacing: 0.025rem;
805
+ --text-body-lg-text-wrap-style: pretty;
773
806
  --text-body-lg-font-size: 1rem;
774
807
  --text-body-lg-font-weight: 400;
775
808
  --text-body-lg-line-height: 1.375;
809
+ --text-body-md-text-wrap-style: pretty;
776
810
  --text-body-md-font-size: 1rem;
777
811
  --text-body-md-font-weight: 400;
778
812
  --text-body-md-line-height: 1.375;
779
813
  --text-body-prose-md-font-size: 1rem;
780
814
  --text-body-prose-md-font-weight: 400;
781
815
  --text-body-prose-md-line-height: 1.625;
816
+ --text-body-sm-text-wrap-style: pretty;
782
817
  --text-body-sm-font-size: 0.875rem;
783
818
  --text-body-sm-font-weight: 400;
784
819
  --text-body-sm-line-height: 1.375;
820
+ --text-body-xs-text-wrap-style: pretty;
785
821
  --text-body-xs-font-size: 0.75rem;
786
822
  --text-body-xs-font-weight: 400;
787
823
  --text-body-xs-line-height: 1.375;
824
+ --text-body-xxs-text-wrap-style: pretty;
788
825
  --text-body-xxs-font-size: 0.75rem;
789
826
  --text-body-xxs-font-weight: 400;
790
827
  --text-body-xxs-line-height: 1.5;
@@ -835,6 +872,8 @@
835
872
  --text-big-number-md-font-size: 1.5rem;
836
873
  --text-big-number-sm-font-size: 1.25rem;
837
874
  --text-big-number-lg-font-size: 2.25rem;
875
+ --text-amount-lg-font-size: 3rem;
876
+ --text-amount-md-font-size: 1.25rem;
838
877
  --text-heading-2xl-font-size: 3rem;
839
878
  --text-heading-xl-font-size: 1.875rem;
840
879
  --text-heading-md-font-size: 1.25rem;
@@ -845,6 +884,8 @@
845
884
  @media (min-width: 768px) {
846
885
  --text-big-number-md-font-size: 2.25rem;
847
886
  --text-big-number-lg-font-size: 3.5rem;
887
+ --text-amount-lg-font-size: 3.5rem;
888
+ --text-amount-md-font-size: 1.5rem;
848
889
  --text-heading-2xl-font-size: 3.5rem;
849
890
  --text-heading-xl-font-size: 2.25rem;
850
891
  --text-heading-lg-font-size: 1.875rem;
@@ -1148,64 +1189,104 @@
1148
1189
  font-family: var(--text-big-number-lg-font-family);
1149
1190
  }
1150
1191
 
1192
+ @utility text-amount-lg {
1193
+ text-wrap-style: var(--text-amount-lg-text-wrap-style);
1194
+ font-size: var(--text-amount-lg-font-size);
1195
+ line-height: var(--text-amount-lg-line-height);
1196
+ font-weight: var(--text-amount-lg-font-weight);
1197
+ letter-spacing: var(--text-amount-lg-letter-spacing);
1198
+ }
1199
+
1200
+ @utility text-amount-md {
1201
+ text-wrap-style: var(--text-amount-md-text-wrap-style);
1202
+ font-size: var(--text-amount-md-font-size);
1203
+ line-height: var(--text-amount-md-line-height);
1204
+ font-weight: var(--text-amount-md-font-weight);
1205
+ letter-spacing: var(--text-amount-md-letter-spacing);
1206
+ }
1207
+
1208
+ @utility text-amount-sm {
1209
+ font-size: var(--text-amount-sm-font-size);
1210
+ line-height: var(--text-amount-sm-line-height);
1211
+ font-weight: var(--text-amount-sm-font-weight);
1212
+ letter-spacing: var(--text-amount-sm-letter-spacing);
1213
+ }
1214
+
1151
1215
  @utility text-heading-2xl {
1216
+ text-wrap-style: var(--text-heading-2xl-text-wrap-style);
1152
1217
  font-size: var(--text-heading-2xl-font-size);
1153
1218
  line-height: var(--text-heading-2xl-line-height);
1154
1219
  font-weight: var(--text-heading-2xl-font-weight);
1220
+ letter-spacing: var(--text-heading-2xl-letter-spacing);
1155
1221
  }
1156
1222
 
1157
1223
  @utility text-heading-xl {
1224
+ text-wrap-style: var(--text-heading-xl-text-wrap-style);
1158
1225
  font-size: var(--text-heading-xl-font-size);
1159
1226
  line-height: var(--text-heading-xl-line-height);
1160
1227
  font-weight: var(--text-heading-xl-font-weight);
1228
+ letter-spacing: var(--text-heading-xl-letter-spacing);
1161
1229
  }
1162
1230
 
1163
1231
  @utility text-heading-lg {
1232
+ text-wrap-style: var(--text-heading-lg-text-wrap-style);
1164
1233
  font-size: var(--text-heading-lg-font-size);
1165
1234
  line-height: var(--text-heading-lg-line-height);
1166
1235
  font-weight: var(--text-heading-lg-font-weight);
1236
+ letter-spacing: var(--text-heading-lg-letter-spacing);
1167
1237
  }
1168
1238
 
1169
1239
  @utility text-heading-md {
1240
+ text-wrap-style: var(--text-heading-md-text-wrap-style);
1170
1241
  font-size: var(--text-heading-md-font-size);
1171
1242
  line-height: var(--text-heading-md-line-height);
1172
1243
  font-weight: var(--text-heading-md-font-weight);
1244
+ letter-spacing: var(--text-heading-md-letter-spacing);
1173
1245
  }
1174
1246
 
1175
1247
  @utility text-heading-sm {
1248
+ text-wrap-style: var(--text-heading-sm-text-wrap-style);
1176
1249
  font-size: var(--text-heading-sm-font-size);
1177
1250
  line-height: var(--text-heading-sm-line-height);
1178
1251
  font-weight: var(--text-heading-sm-font-weight);
1252
+ letter-spacing: var(--text-heading-sm-letter-spacing);
1179
1253
  }
1180
1254
 
1181
1255
  @utility text-heading-xs {
1256
+ text-wrap-style: var(--text-heading-xs-text-wrap-style);
1182
1257
  font-size: var(--text-heading-xs-font-size);
1183
1258
  line-height: var(--text-heading-xs-line-height);
1184
1259
  font-weight: var(--text-heading-xs-font-weight);
1260
+ letter-spacing: var(--text-heading-xs-letter-spacing);
1185
1261
  }
1186
1262
 
1187
1263
  @utility text-heading-xxs {
1264
+ text-wrap-style: var(--text-heading-xxs-text-wrap-style);
1188
1265
  font-size: var(--text-heading-xxs-font-size);
1189
1266
  line-height: var(--text-heading-xxs-line-height);
1190
1267
  font-weight: var(--text-heading-xxs-font-weight);
1268
+ letter-spacing: var(--text-heading-xxs-letter-spacing);
1191
1269
  }
1192
1270
 
1193
1271
  @utility text-label-lg {
1194
1272
  font-size: var(--text-label-lg-font-size);
1195
1273
  line-height: var(--text-label-lg-line-height);
1196
1274
  font-weight: var(--text-label-lg-font-weight);
1275
+ letter-spacing: var(--text-label-lg-letter-spacing);
1197
1276
  }
1198
1277
 
1199
1278
  @utility text-label-md {
1200
1279
  font-size: var(--text-label-md-font-size);
1201
1280
  line-height: var(--text-label-md-line-height);
1202
1281
  font-weight: var(--text-label-md-font-weight);
1282
+ letter-spacing: var(--text-label-md-letter-spacing);
1203
1283
  }
1204
1284
 
1205
1285
  @utility text-label-sm {
1206
1286
  font-size: var(--text-label-sm-font-size);
1207
1287
  line-height: var(--text-label-sm-line-height);
1208
1288
  font-weight: var(--text-label-sm-font-weight);
1289
+ letter-spacing: var(--text-label-sm-letter-spacing);
1209
1290
  }
1210
1291
 
1211
1292
  @utility text-label-code-sm {
@@ -1242,12 +1323,14 @@
1242
1323
  }
1243
1324
 
1244
1325
  @utility text-body-lg {
1326
+ text-wrap-style: var(--text-body-lg-text-wrap-style);
1245
1327
  font-size: var(--text-body-lg-font-size);
1246
1328
  font-weight: var(--text-body-lg-font-weight);
1247
1329
  line-height: var(--text-body-lg-line-height);
1248
1330
  }
1249
1331
 
1250
1332
  @utility text-body-md {
1333
+ text-wrap-style: var(--text-body-md-text-wrap-style);
1251
1334
  font-size: var(--text-body-md-font-size);
1252
1335
  font-weight: var(--text-body-md-font-weight);
1253
1336
  line-height: var(--text-body-md-line-height);
@@ -1260,18 +1343,21 @@
1260
1343
  }
1261
1344
 
1262
1345
  @utility text-body-sm {
1346
+ text-wrap-style: var(--text-body-sm-text-wrap-style);
1263
1347
  font-size: var(--text-body-sm-font-size);
1264
1348
  font-weight: var(--text-body-sm-font-weight);
1265
1349
  line-height: var(--text-body-sm-line-height);
1266
1350
  }
1267
1351
 
1268
1352
  @utility text-body-xs {
1353
+ text-wrap-style: var(--text-body-xs-text-wrap-style);
1269
1354
  font-size: var(--text-body-xs-font-size);
1270
1355
  font-weight: var(--text-body-xs-font-weight);
1271
1356
  line-height: var(--text-body-xs-line-height);
1272
1357
  }
1273
1358
 
1274
1359
  @utility text-body-xxs {
1360
+ text-wrap-style: var(--text-body-xxs-text-wrap-style);
1275
1361
  font-size: var(--text-body-xxs-font-size);
1276
1362
  font-weight: var(--text-body-xxs-font-weight);
1277
1363
  line-height: var(--text-body-xxs-line-height);
@@ -1396,14 +1482,20 @@
1396
1482
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1397
1483
  }
1398
1484
 
1399
- @utility layout-column-docs {
1400
- --layout-column-measure: var(--layout-measure-docs);
1485
+ @utility layout-column-content {
1486
+ --layout-column-measure: var(--layout-measure-content);
1401
1487
  margin-inline: auto;
1402
1488
  width: 100%;
1403
1489
  max-width: var(--layout-column-measure);
1404
1490
  &:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
1405
1491
  }
1406
1492
 
1493
+ @utility layout-column-site {
1494
+ margin-inline: auto;
1495
+ width: 100%;
1496
+ max-width: min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline));
1497
+ }
1498
+
1407
1499
  @utility layout-field-control {
1408
1500
  &:not(#\#) { display: flex; flex: 1 1 0%; justify-content: flex-end; max-width: var(--layout-measure-control); }
1409
1501
  }
@@ -1553,6 +1645,11 @@
1553
1645
  @utility border-info-contrast { border-color: var(--info-contrast); }
1554
1646
 
1555
1647
  @layer base {
1648
+ html {
1649
+ -webkit-font-smoothing: antialiased;
1650
+ -moz-osx-font-smoothing: grayscale;
1651
+ }
1652
+
1556
1653
  button:not(:disabled),
1557
1654
  [role="button"]:not([aria-disabled="true"]),
1558
1655
  summary {
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.1.0",
5
5
  "author": "aziontech",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -35,11 +35,13 @@ import { animateExtras, keyframes } from '../tokens/primitives/animations/keyfra
35
35
  import { breakpoints } from '../tokens/primitives/breakpoints.js';
36
36
  import { compilePrimitivesVars } from './compile-primitives.js';
37
37
  import { compileThemeCss, compileThemeVars } from './compile-theme.js';
38
+ import { container } from '../tokens/primitives/shape/container.js';
38
39
  import { containersData } from '../tokens/semantic/containers.data.js';
39
40
  import { layoutsData, layoutsUtilities } from '../tokens/semantic/layouts.data.js';
40
41
  import { spacingsData } from '../tokens/semantic/spacings.data.js';
41
42
  import { textsData } from '../tokens/semantic/texts.data.js';
42
43
  import { zIndicesData } from '../tokens/semantic/z-indices.data.js';
44
+ import { assertMeasureCommentsMatch } from './measure-comment.mjs';
43
45
  import { assertNoZeroWithUnit } from './zero-unit.mjs';
44
46
 
45
47
  const BREAKPOINT_ORDER = ['sm', 'md', 'lg', 'xl', '2xl'];
@@ -270,6 +272,11 @@ const emitLayoutUtilities = () => emitUtilities(layoutsUtilities);
270
272
  const emitBaseLayer = () =>
271
273
  [
272
274
  '@layer base {',
275
+ ' html {',
276
+ ' -webkit-font-smoothing: antialiased;',
277
+ ' -moz-osx-font-smoothing: grayscale;',
278
+ ' }',
279
+ '',
273
280
  ' button:not(:disabled),',
274
281
  ' [role="button"]:not([aria-disabled="true"]),',
275
282
  ' summary {',
@@ -431,6 +438,11 @@ const importIdx = rawCss.indexOf(IMPORT_LINE);
431
438
  if (importIdx === -1) throw new Error('emitCssV4 output is missing the tailwind import line');
432
439
  const afterImport = importIdx + IMPORT_LINE.length;
433
440
  const css = `${rawCss.slice(0, afterImport)}\n\n${fontsCss}${rawCss.slice(afterImport)}`;
441
+ assertMeasureCommentsMatch(
442
+ await readFile(resolve(__dirname, '../tokens/semantic/layouts.data.js'), 'utf8'),
443
+ container,
444
+ 'tokens/semantic/layouts.data.js',
445
+ );
434
446
  assertNoZeroWithUnit(css, 'globals.css');
435
447
  await writeFile(resolve(dir, 'globals.css'), css, 'utf8');
436
448
  await writeFile(resolve(dir, 'globals.scss'), css, 'utf8');
@@ -7,11 +7,11 @@
7
7
  * but for primitives only — no semantic light/dark split.
8
8
  */
9
9
 
10
- import { primitives as colorPrimitives } from '../tokens/primitives/colors/colors.js'
11
10
  import { animate } from '../tokens/primitives/animations/animate.js'
12
11
  import { ease } from '../tokens/primitives/animations/ease.js'
13
12
  import { borderWidths } from '../tokens/primitives/border-widths.js'
14
13
  import { breakpoints } from '../tokens/primitives/breakpoints.js'
14
+ import { primitives as colorPrimitives } from '../tokens/primitives/colors/colors.js'
15
15
  import { blur } from '../tokens/primitives/effects/blur.js'
16
16
  import { dropShadow } from '../tokens/primitives/effects/drop-shadow.js'
17
17
  import { insetShadow } from '../tokens/primitives/effects/inset-shadow.js'
@@ -13,8 +13,8 @@ import {
13
13
  } from '../tokens/primitives/colors/colors.js'
14
14
  import { accent } from '../tokens/theme/accent.js'
15
15
  import { background } from '../tokens/theme/background.js'
16
- import { codeSintax } from '../tokens/theme/code-sintax.js'
17
16
  import { border } from '../tokens/theme/border.js'
17
+ import { codeSintax } from '../tokens/theme/code-sintax.js'
18
18
  import { danger } from '../tokens/theme/feedback/danger.js'
19
19
  import { info } from '../tokens/theme/feedback/info.js'
20
20
  import { success } from '../tokens/theme/feedback/success.js'
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Measure-comment gate for the layout tokens — the check that keeps a `// 1620px`
3
+ * annotation honest against the `var(--container-*)` it annotates. The VALUE is the
4
+ * source of truth; the comment is a reader's convenience, and a comment that disagrees
5
+ * with it is worse than no comment at all.
6
+ *
7
+ * Nothing else sees this: the annotation is a JS comment, so it never reaches the
8
+ * compiled CSS the zero-unit gate reads, and no linter resolves a `var()` back to the
9
+ * rung it names. A value can therefore be changed — or reverted — under a comment that
10
+ * still describes the old one, with every gate green. Pure: node built-ins only.
11
+ */
12
+
13
+ const MEASURE_LINE = /'([\w-]+)':\s*'var\(--container-([\w]+)\)',?\s*\/\/\s*(\d+)px/
14
+
15
+ /** Every `'token': 'var(--container-X)', // Npx` line, as `{ token, rung, claimed, n }`. */
16
+ export const findMeasureComments = (sourceText) =>
17
+ sourceText.split('\n').flatMap((line, i) => {
18
+ const m = line.match(MEASURE_LINE)
19
+ return m ? [{ token: m[1], rung: m[2], claimed: Number(m[3]), n: i + 1 }] : []
20
+ })
21
+
22
+ /**
23
+ * Throw when a measure comment disagrees with the container rung it annotates, or names
24
+ * a rung that does not exist. `container` is the rung table; `source` names the artifact.
25
+ */
26
+ export const assertMeasureCommentsMatch = (sourceText, container, source = 'layouts.data.js') => {
27
+ const rows = findMeasureComments(sourceText)
28
+ const wrong = rows.flatMap(({ token, rung, claimed, n }) => {
29
+ const real = container[rung]
30
+ if (real === undefined) return [{ token, rung, claimed, n, real: null }]
31
+ return parseInt(real, 10) === claimed ? [] : [{ token, rung, claimed, n, real }]
32
+ })
33
+ if (wrong.length === 0) return
34
+
35
+ const detail = wrong
36
+ .map(({ token, rung, claimed, n, real }) =>
37
+ real === null
38
+ ? ` ${source}:${n} ${token} → --container-${rung} is not a rung of the ladder`
39
+ : ` ${source}:${n} ${token} → --container-${rung} is ${real}, comment says ${claimed}px`
40
+ )
41
+ .join('\n')
42
+ throw new Error(
43
+ `build:tokens — ${wrong.length} measure comment(s) disagree with the token value.\n${detail}\n` +
44
+ 'The value is the source of truth: fix the comment to match it, or change the rung if the ' +
45
+ 'value is what is wrong. Rungs live in src/tokens/primitives/shape/container.js.'
46
+ )
47
+ }
@@ -117,6 +117,8 @@ src/
117
117
  ├── refs.js # tokenRef helper + isTokenRef guard + assertResolvedRefs
118
118
  ├── compile-primitives.js # flattens primitive trees into CSS vars
119
119
  ├── compile-theme.js # semantic light/dark compiler (exported as ./theme-colors)
120
+ ├── zero-unit.mjs # build gate: a zero length carries no unit
121
+ ├── measure-comment.mjs # build gate: a `// Npx` comment matches its rung
120
122
  └── build-tokens.mjs # main entrypoint: emits the dist/v4 bundle
121
123
  ```
122
124
 
@@ -202,8 +204,14 @@ free. Giving it its own map would duplicate the spacing scale into layout and le
202
204
 
203
205
  The group also ships `layoutsUtilities`, the container-system classes (`.layout-column`,
204
206
  `.layout-boundary`, …) emitted as Tailwind v4 `@utility` blocks so they support variants
205
- (`md:layout-column`). Utilities are shaped exactly like `illustrationsUtilities`: a string value is a
206
- declaration, an object value is a nested rule keyed by a literal selector (`'&:first-child'`).
207
+ (`md:layout-column`). Each entry is a rule body: a string value is a declaration, an object value is
208
+ a nested rule keyed by a literal selector (`'&:first-child'`).
209
+
210
+ A measure carries a `// 1620px` annotation for the reader, and **the token value is the source of
211
+ truth for it** — the comment is a convenience, never the decision. `measure-comment.mjs` resolves
212
+ every annotated `var(--container-*)` back to its rung and **fails the build** when the two disagree,
213
+ because nothing else can see this: the annotation is a JS comment, so it never reaches the compiled
214
+ CSS, and no linter resolves a `var()` to the value it names.
207
215
 
208
216
  ---
209
217
 
@@ -1,5 +1,5 @@
1
- import { radius } from './radius.js'
2
1
  import { borderWidths } from '../border-widths.js'
2
+ import { radius } from './radius.js'
3
3
 
4
4
  export const shape = {
5
5
  'shape-flat': radius.none,
@@ -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,7 +28,36 @@ 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': {
60
+ textWrapStyle: string;
32
61
  fontSize: {
33
62
  _: string;
34
63
  sm: string;
@@ -36,8 +65,10 @@ export const textsData: {
36
65
  };
37
66
  lineHeight: number;
38
67
  fontWeight: number;
68
+ letterSpacing: string;
39
69
  };
40
70
  'text-heading-xl': {
71
+ textWrapStyle: string;
41
72
  fontSize: {
42
73
  _: string;
43
74
  sm: string;
@@ -45,16 +76,20 @@ export const textsData: {
45
76
  };
46
77
  lineHeight: number;
47
78
  fontWeight: number;
79
+ letterSpacing: string;
48
80
  };
49
81
  'text-heading-lg': {
82
+ textWrapStyle: string;
50
83
  fontSize: {
51
84
  _: string;
52
85
  md: string;
53
86
  };
54
87
  lineHeight: number;
55
88
  fontWeight: number;
89
+ letterSpacing: string;
56
90
  };
57
91
  'text-heading-md': {
92
+ textWrapStyle: string;
58
93
  fontSize: {
59
94
  _: string;
60
95
  sm: string;
@@ -62,8 +97,10 @@ export const textsData: {
62
97
  };
63
98
  lineHeight: number;
64
99
  fontWeight: number;
100
+ letterSpacing: string;
65
101
  };
66
102
  'text-heading-sm': {
103
+ textWrapStyle: string;
67
104
  fontSize: {
68
105
  _: string;
69
106
  sm: string;
@@ -71,31 +108,39 @@ export const textsData: {
71
108
  };
72
109
  lineHeight: number;
73
110
  fontWeight: number;
111
+ letterSpacing: string;
74
112
  };
75
113
  'text-heading-xs': {
114
+ textWrapStyle: string;
76
115
  fontSize: string;
77
116
  lineHeight: number;
78
117
  fontWeight: number;
118
+ letterSpacing: string;
79
119
  };
80
120
  'text-heading-xxs': {
121
+ textWrapStyle: string;
81
122
  fontSize: string;
82
123
  lineHeight: number;
83
124
  fontWeight: number;
125
+ letterSpacing: string;
84
126
  };
85
127
  'text-label-lg': {
86
128
  fontSize: string;
87
129
  lineHeight: number;
88
130
  fontWeight: number;
131
+ letterSpacing: string;
89
132
  };
90
133
  'text-label-md': {
91
134
  fontSize: string;
92
135
  lineHeight: number;
93
136
  fontWeight: number;
137
+ letterSpacing: string;
94
138
  };
95
139
  'text-label-sm': {
96
140
  fontSize: string;
97
141
  lineHeight: number;
98
142
  fontWeight: number;
143
+ letterSpacing: string;
99
144
  };
100
145
  'text-label-code-sm': {
101
146
  fontFamily: string;
@@ -127,6 +172,7 @@ export const textsData: {
127
172
  letterSpacing: string;
128
173
  };
129
174
  'text-body-lg': {
175
+ textWrapStyle: string;
130
176
  fontSize: {
131
177
  _: string;
132
178
  md: string;
@@ -135,6 +181,7 @@ export const textsData: {
135
181
  lineHeight: number;
136
182
  };
137
183
  'text-body-md': {
184
+ textWrapStyle: string;
138
185
  fontSize: string;
139
186
  fontWeight: number;
140
187
  lineHeight: number;
@@ -145,16 +192,19 @@ export const textsData: {
145
192
  lineHeight: number;
146
193
  };
147
194
  'text-body-sm': {
195
+ textWrapStyle: string;
148
196
  fontSize: string;
149
197
  fontWeight: number;
150
198
  lineHeight: number;
151
199
  };
152
200
  'text-body-xs': {
201
+ textWrapStyle: string;
153
202
  fontSize: string;
154
203
  fontWeight: number;
155
204
  lineHeight: number;
156
205
  };
157
206
  'text-body-xxs': {
207
+ textWrapStyle: string;
158
208
  fontSize: string;
159
209
  fontWeight: number;
160
210
  lineHeight: number;
@@ -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":"AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2OE,8FAA8F;;;;;;;;;;;;;;;;;;EAkB/F"}
@@ -9,6 +9,16 @@
9
9
  * Optional `states` emits pseudo-class rules (e.g. `.text-link:hover`). Bundles
10
10
  * with `fontSize: 'inherit'` are omitted from the Tailwind `fontSize` preset.
11
11
  *
12
+ * `textWrapStyle` — the LONGHAND, never the `textWrap` shorthand. `text-wrap: pretty`
13
+ * is `text-wrap-mode: wrap` + `text-wrap-style: pretty`, so a typography utility
14
+ * written that way does not just choose how lines break: it decides THAT the text
15
+ * wraps, and it beats `truncate` / `whitespace-nowrap` on the same element (equal
16
+ * specificity, and this utility sorts later). Every `truncate text-body-sm` in the
17
+ * codebase therefore wrapped to two lines with an ellipsis that never appeared —
18
+ * measurably, table rows grew from 48px to 56px wherever a cell's text was longer
19
+ * than its column. The longhand keeps the balance/pretty intent and leaves wrapping
20
+ * to whoever owns the element.
21
+ *
12
22
  * Mapping used during the port:
13
23
  * old `large` (≤640) → `_`
14
24
  * old `medium` (≤768) → `sm` (≥640)
@@ -41,62 +51,119 @@ export const textsData = {
41
51
  fontWeight: fontWeight.normal,
42
52
  fontFamily: fontFamily.display
43
53
  },
54
+ // ── The amount ladder (Currency) ─────────────────────────────────────────
55
+ //
56
+ // The three sizes `Currency` typesets a monetary amount at, one per reading
57
+ // distance: `sm` inside a table row or list cell, `md` an amount stated as a fact on
58
+ // a card, `lg` the headline figure of a pricing card. Each MIRRORS the heading/label
59
+ // token it used to borrow (`text-label-lg`, `text-heading-md`, `text-heading-2xl`) —
60
+ // same size ramp, same leading, same weight — and adds the one thing that made
61
+ // borrowing wrong: the amount's negative tracking.
62
+ //
63
+ // `-0.08em` is PROPORTIONAL, and deliberately so, which is why it lives here and not
64
+ // in `tracking.js`. That scale is absolute (`rem`) on purpose so a step resolves to a
65
+ // fixed measure at any font size (see its docstring), and it therefore holds no
66
+ // `-0.08em`-equivalent step. A figure is the one place where the tracking has to
67
+ // scale WITH the glyphs: the Figma amount specifies −1.28px @16px, −1.92px @24px and
68
+ // −4.48px @56px, which is one ratio, not three steps. Expressing it as `em` is what
69
+ // makes a single declaration correct at all three sizes and at every breakpoint of
70
+ // `lg`'s responsive ramp.
71
+ //
72
+ // Dedicated tokens rather than tracking added to the borrowed ones: `text-heading-2xl`
73
+ // sets every hero headline in the system, and a hero is prose, not a numeral.
74
+ 'text-amount-lg': {
75
+ textWrapStyle: 'balance',
76
+ fontSize: { _: fontSize['3xl'], sm: fontSize['5xl'], md: fontSize['6xl'] },
77
+ lineHeight: leading.tight,
78
+ fontWeight: fontWeight.normal,
79
+ letterSpacing: '-0.08em'
80
+ },
81
+ 'text-amount-md': {
82
+ textWrapStyle: 'balance',
83
+ fontSize: { _: fontSize.base, sm: fontSize.xl, md: fontSize['2xl'] },
84
+ lineHeight: leading.tight,
85
+ fontWeight: fontWeight.normal,
86
+ letterSpacing: '-0.08em'
87
+ },
88
+ 'text-amount-sm': {
89
+ fontSize: fontSize.base,
90
+ lineHeight: leading.normal,
91
+ fontWeight: fontWeight.normal,
92
+ letterSpacing: '-0.08em'
93
+ },
44
94
  'text-heading-2xl': {
95
+ textWrapStyle: 'balance',
45
96
  fontSize: { _: fontSize['3xl'], sm: fontSize['5xl'], md: fontSize['6xl'] },
46
97
  lineHeight: leading.tight,
47
- fontWeight: fontWeight.normal
98
+ fontWeight: fontWeight.normal,
99
+ letterSpacing: tracking.tighter
48
100
  },
49
101
  'text-heading-xl': {
102
+ textWrapStyle: 'balance',
50
103
  fontSize: { _: fontSize.xl, sm: fontSize['3xl'], md: fontSize['4xl'] },
51
104
  lineHeight: leading.tight,
52
- fontWeight: fontWeight.normal
105
+ fontWeight: fontWeight.normal,
106
+ letterSpacing: tracking.tighter
53
107
  },
54
108
  'text-heading-lg': {
109
+ textWrapStyle: 'balance',
55
110
  fontSize: { _: fontSize.lg, md: fontSize['3xl'] },
56
111
  lineHeight: leading.tight,
57
- fontWeight: fontWeight.normal
112
+ fontWeight: fontWeight.normal,
113
+ letterSpacing: tracking.tighter
58
114
  },
59
115
  'text-heading-md': {
116
+ textWrapStyle: 'balance',
60
117
  fontSize: { _: fontSize.base, sm: fontSize.xl, md: fontSize['2xl'] },
61
118
  lineHeight: leading.tight,
62
- fontWeight: fontWeight.normal
119
+ fontWeight: fontWeight.normal,
120
+ letterSpacing: tracking.tighter
63
121
  },
64
122
  'text-heading-sm': {
123
+ textWrapStyle: 'balance',
65
124
  fontSize: { _: fontSize.sm, sm: fontSize.base, md: fontSize.lg },
66
125
  lineHeight: leading.snug,
67
- fontWeight: fontWeight.normal
126
+ fontWeight: fontWeight.normal,
127
+ letterSpacing: tracking.tighter
68
128
  },
69
129
  'text-heading-xs': {
130
+ textWrapStyle: 'balance',
70
131
  fontSize: fontSize.base,
71
132
  lineHeight: leading.snug,
72
- fontWeight: fontWeight.normal
133
+ fontWeight: fontWeight.normal,
134
+ letterSpacing: tracking.tighter
73
135
  },
74
136
  'text-heading-xxs': {
137
+ textWrapStyle: 'balance',
75
138
  fontSize: fontSize.sm,
76
139
  lineHeight: leading.snug,
77
- fontWeight: fontWeight.normal
140
+ fontWeight: fontWeight.normal,
141
+ letterSpacing: tracking.tighter
78
142
  },
79
143
  'text-label-lg': {
80
144
  fontSize: fontSize.base,
81
145
  lineHeight: leading.normal,
82
- fontWeight: fontWeight.normal
146
+ fontWeight: fontWeight.normal,
147
+ letterSpacing: tracking.tight
83
148
  },
84
149
  'text-label-md': {
85
150
  fontSize: fontSize.sm,
86
151
  lineHeight: leading.normal,
87
- fontWeight: fontWeight.normal
152
+ fontWeight: fontWeight.normal,
153
+ letterSpacing: tracking.tight
88
154
  },
89
155
  'text-label-sm': {
90
156
  fontSize: fontSize.xs,
91
157
  lineHeight: leading.normal,
92
- fontWeight: fontWeight.normal
158
+ fontWeight: fontWeight.normal,
159
+ letterSpacing: tracking.tight
93
160
  },
94
161
  'text-label-code-sm': {
95
162
  fontFamily: fontFamily.code,
96
163
  fontSize: fontSize.xs,
97
164
  lineHeight: leading.none,
98
165
  fontWeight: fontWeight.normal,
99
- letterSpacing: tracking.normal
166
+ letterSpacing: tracking.wide
100
167
  },
101
168
  'text-body-code-sm': {
102
169
  textWrapStyle: 'pretty',
@@ -104,28 +171,30 @@ export const textsData = {
104
171
  fontSize: fontSize.xs,
105
172
  lineHeight: leading.relaxed,
106
173
  fontWeight: fontWeight.normal,
107
- letterSpacing: tracking.normal
174
+ letterSpacing: tracking.wide
108
175
  },
109
176
  'text-label-code-md': {
110
177
  fontFamily: fontFamily.code,
111
178
  fontSize: fontSize.sm,
112
179
  lineHeight: leading.none,
113
180
  fontWeight: fontWeight.normal,
114
- letterSpacing: tracking.normal
181
+ letterSpacing: tracking.wide
115
182
  },
116
183
  'text-label-code-lg': {
117
184
  fontFamily: fontFamily.code,
118
185
  fontSize: fontSize.base,
119
186
  lineHeight: leading.none,
120
187
  fontWeight: fontWeight.normal,
121
- letterSpacing: tracking.normal
188
+ letterSpacing: tracking.wide
122
189
  },
123
190
  'text-body-lg': {
191
+ textWrapStyle: 'pretty',
124
192
  fontSize: { _: fontSize.base, md: fontSize.lg },
125
193
  fontWeight: fontWeight.normal,
126
194
  lineHeight: leading.snug
127
195
  },
128
196
  'text-body-md': {
197
+ textWrapStyle: 'pretty',
129
198
  fontSize: fontSize.base,
130
199
  fontWeight: fontWeight.normal,
131
200
  lineHeight: leading.snug
@@ -136,16 +205,19 @@ export const textsData = {
136
205
  lineHeight: leading.relaxed
137
206
  },
138
207
  'text-body-sm': {
208
+ textWrapStyle: 'pretty',
139
209
  fontSize: fontSize.sm,
140
210
  fontWeight: fontWeight.normal,
141
211
  lineHeight: leading.snug
142
212
  },
143
213
  'text-body-xs': {
214
+ textWrapStyle: 'pretty',
144
215
  fontSize: fontSize.xs,
145
216
  fontWeight: fontWeight.normal,
146
217
  lineHeight: leading.snug
147
218
  },
148
219
  'text-body-xxs': {
220
+ textWrapStyle: 'pretty',
149
221
  fontSize: fontSize.xs,
150
222
  fontWeight: fontWeight.normal,
151
223
  lineHeight: leading.normal