@mlola-ui/tokens 1.0.2 → 1.0.4

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.
@@ -0,0 +1,9 @@
1
+ /* Accessibility layer: last in the cascade, so these guarantees hold over any recipe. */
2
+ /* On a touch screen, a text field smaller than 16px makes iOS zoom the page
3
+ when it takes focus, and the page stays zoomed after. Every field that
4
+ takes typing is at least 16px there; everything else keeps its size. */
5
+ @media (pointer: coarse) {
6
+ :is(input:not([type="checkbox"], [type="radio"], [type="range"], [type="color"], [type="file"], [type="submit"], [type="button"], [type="reset"], [type="image"], [type="hidden"]), textarea, select, [contenteditable]:not([contenteditable="false"])) {
7
+ font-size: max(1rem, 1em);
8
+ }
9
+ }
@@ -113,10 +113,27 @@ h3 {
113
113
  opacity: .5;
114
114
  }
115
115
 
116
+ /* Room for a fingertip on text fields, which grow with their content.
117
+ Buttons keep the shape their recipe draws: stretching a round or square
118
+ control only distorts it. Small ones widen their target invisibly instead
119
+ (see [data-hit] below), and every other button already clears the 24px
120
+ minimum of WCAG 2.5.8. */
116
121
  @media (pointer:coarse) {
117
- :where(button,[role="button"],input:not([type="hidden"]),select,textarea) {
122
+ :where(input:not([type="hidden"],[type="checkbox"],[type="radio"],[type="range"],[type="color"],[type="file"],[type="submit"],[type="button"],[type="reset"],[type="image"]),select,textarea):where(:not([data-shape="inline"])) {
118
123
  min-height: var(--ml-target-min);
119
124
  }
125
+
126
+ /* A control drawn smaller than a fingertip keeps its look and gains an
127
+ invisible target around it. */
128
+ :where([data-hit="expand"]) {
129
+ position: relative;
130
+ }
131
+
132
+ :where([data-hit="expand"])::after {
133
+ position: absolute;
134
+ inset: min(-0.375rem, calc((var(--ml-target-min) - 100%) / -2));
135
+ content: "";
136
+ }
120
137
  }
121
138
 
122
139
  @media (prefers-reduced-transparency:reduce) {
@@ -139,7 +156,7 @@ h3 {
139
156
  forced-color-adjust: auto;
140
157
  }
141
158
 
142
- /* Box-shadow rings vanish in forced colours; the system highlight stands in. */
159
+ /* Box-shadow rings vanish in forced colors; the system highlight stands in. */
143
160
  :focus-visible {
144
161
  outline: 2px solid Highlight!important;
145
162
  outline-offset: 2px!important;
@@ -8,3 +8,4 @@
8
8
  @import "./materials.css" layer(mlola.materials);
9
9
  @import "./recipes.css" layer(mlola.recipes);
10
10
  @import "./motion.css" layer(mlola.motion);
11
+ @import "./accessibility.css" layer(mlola.accessibility);
@@ -559,7 +559,7 @@
559
559
  border-radius: var(--ml-radius-xs);
560
560
  background: transparent;
561
561
  color: var(--ml-text);
562
- text-align: left;
562
+ text-align: start;
563
563
  font-size: var(--ml-type-base);
564
564
  font-weight: 500;
565
565
  cursor: pointer;
@@ -822,7 +822,7 @@
822
822
  transition: opacity var(--ml-duration-fast) var(--ml-ease-standard), transform var(--ml-duration-normal) var(--ml-ease-standard);
823
823
  }
824
824
 
825
- /* A solid mark in the tone, centred on the first line of text. */
825
+ /* A solid mark in the tone, centered on the first line of text. */
826
826
  .ml-alert-icon {
827
827
  position: relative;
828
828
  display: inline-grid;
@@ -1302,7 +1302,7 @@
1302
1302
  font-size: var(--ml-type-sm);
1303
1303
  }
1304
1304
 
1305
- /* Tone picks the colour role; variant decides how it is worn. */
1305
+ /* Tone picks the color role; variant decides how it is worn. */
1306
1306
  .ml-badge[data-tone="primary"] {
1307
1307
  --ml-badge-tone: var(--ml-primary);
1308
1308
  --ml-badge-text: var(--ml-primary-text);
@@ -1492,7 +1492,7 @@
1492
1492
  }
1493
1493
 
1494
1494
  /* A toggle button that is on reads as filled ink, so its state is visible
1495
- without relying on colour alone. */
1495
+ without relying on color alone. */
1496
1496
  .ml-button[data-variant="secondary"][aria-pressed="true"],
1497
1497
  .ml-button[data-variant="subtle"][aria-pressed="true"],
1498
1498
  .ml-button[data-variant="outline"][aria-pressed="true"] {
@@ -1579,7 +1579,7 @@
1579
1579
  width: .875rem;
1580
1580
  height: .875rem;
1581
1581
  border: 1.5px solid currentColor;
1582
- border-right-color: transparent;
1582
+ border-inline-end-color: transparent;
1583
1583
  border-radius: 50%;
1584
1584
  animation: ml-spin .7s linear infinite;
1585
1585
  }
@@ -1596,7 +1596,7 @@
1596
1596
  }
1597
1597
 
1598
1598
  /* A shortcut inside a filled button takes the button's own ink: an outline
1599
- of the text colour, no fill of its own, so it reads on any variant. */
1599
+ of the text color, no fill of its own, so it reads on any variant. */
1600
1600
  .ml-button .ml-kbd {
1601
1601
  border-color: color-mix(in oklab, currentColor 40%, transparent);
1602
1602
  background: transparent;
@@ -1608,6 +1608,9 @@
1608
1608
  .ml-calendar {
1609
1609
  --ml-calendar-day: 2.25rem;
1610
1610
  display: inline-grid;
1611
+ /* One column no wider than the calendar, so two months wrap into a stack
1612
+ when the space is narrower than both side by side. */
1613
+ grid-template-columns: minmax(0, 1fr);
1611
1614
  width: max-content;
1612
1615
  max-width: 100%;
1613
1616
  color: var(--ml-text);
@@ -1835,7 +1838,7 @@
1835
1838
  position: absolute;
1836
1839
  inset: 0;
1837
1840
  pointer-events: none;
1838
- background: linear-gradient(135deg,oklch(1 0 0/.18),transparent 46%,oklch(0 0 0/.05));
1841
+ background: var(--ml-sheen);
1839
1842
  }
1840
1843
 
1841
1844
  .ml-card-header {
@@ -2188,6 +2191,7 @@
2188
2191
  position: relative;
2189
2192
  height: 9.5rem;
2190
2193
  border-radius: var(--ml-radius-md);
2194
+ /* audit-allow: color.literal — this is the color model itself: value falls to black, saturation to white. */
2191
2195
  background: linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, transparent), var(--ml-color-hue);
2192
2196
  cursor: crosshair;
2193
2197
  outline: none;
@@ -2235,16 +2239,16 @@
2235
2239
  position: absolute;
2236
2240
  width: 1rem;
2237
2241
  height: 1rem;
2238
- border: 2.5px solid #fff;
2242
+ border: 2.5px solid var(--ml-knob);
2239
2243
  border-radius: 50%;
2240
- box-shadow: 0 0 0 1px rgb(0 0 0 / 0.25), 0 1px 4px rgb(0 0 0 / 0.3);
2244
+ box-shadow: var(--ml-knob-shadow);
2241
2245
  pointer-events: none;
2242
2246
  translate: -50% -50%;
2243
2247
  }
2244
2248
 
2245
2249
  .ml-color-picker-area:focus-visible > .ml-color-picker-thumb,
2246
2250
  .ml-color-picker-track:focus-visible > .ml-color-picker-thumb {
2247
- box-shadow: 0 0 0 2px var(--ml-focus), 0 1px 4px rgb(0 0 0 / 0.3);
2251
+ box-shadow: 0 0 0 2px var(--ml-focus), 0 1px 4px var(--ml-shadow-tint);
2248
2252
  }
2249
2253
 
2250
2254
  .ml-color-picker-row {
@@ -2455,7 +2459,8 @@
2455
2459
  .ml-combobox-list {
2456
2460
  display: grid;
2457
2461
  gap: var(--ml-space-0-5);
2458
- max-height: 16rem;
2462
+ /* Never taller than the visible room beside the field (set when it opens). */
2463
+ max-height: min(16rem, var(--ml-combobox-room, 16rem));
2459
2464
  margin: 0;
2460
2465
  padding: 0;
2461
2466
  overflow-y: auto;
@@ -2569,6 +2574,7 @@
2569
2574
  flex: 1;
2570
2575
  min-width: 0;
2571
2576
  border: 0;
2577
+ /* audit-allow: focus.removed — the search field is the open dialog's only field; its caret shows focus. */
2572
2578
  outline: none;
2573
2579
  background: transparent;
2574
2580
  color: var(--ml-text);
@@ -2688,6 +2694,7 @@
2688
2694
  border-radius: var(--ml-radius-lg);
2689
2695
  box-shadow: var(--ml-surface-highlight), var(--ml-shadow-lg);
2690
2696
  color: var(--ml-text);
2697
+ /* audit-allow: focus.removed — a menu container, focused only by script (tabindex -1); its items carry the focus style. */
2691
2698
  outline: none;
2692
2699
  background-color: color-mix(in oklab, var(--ml-surface-elevated) var(--ml-surface-alpha), transparent);
2693
2700
  background-image: var(--ml-surface-grain);
@@ -2981,7 +2988,7 @@
2981
2988
  color: var(--ml-text);
2982
2989
  font-size: var(--ml-type-sm);
2983
2990
  font-weight: 400;
2984
- text-align: left;
2991
+ text-align: start;
2985
2992
  text-decoration: none;
2986
2993
  cursor: pointer;
2987
2994
  }
@@ -3271,6 +3278,7 @@
3271
3278
  /* components/input */
3272
3279
  .ml-input-field {
3273
3280
  display: grid;
3281
+ grid-template-columns: minmax(0, 1fr);
3274
3282
  gap: var(--ml-space-1-5);
3275
3283
  width: 100%;
3276
3284
  }
@@ -3646,12 +3654,16 @@
3646
3654
  /* components/otp-input */
3647
3655
  .ml-otp {
3648
3656
  display: flex;
3657
+ max-width: 100%;
3649
3658
  align-items: center;
3650
3659
  gap: var(--ml-space-2);
3651
3660
  }
3652
3661
 
3662
+ /* Boxes give a little way on the narrowest phones instead of running past the edge. */
3653
3663
  .ml-otp-box {
3664
+ flex: 0 1 var(--ml-control-lg);
3654
3665
  width: var(--ml-control-lg);
3666
+ min-width: 2rem;
3655
3667
  height: calc(var(--ml-control-lg) * 1.15);
3656
3668
  padding: 0;
3657
3669
  border: var(--ml-border-width) solid var(--ml-border);
@@ -3682,6 +3694,7 @@
3682
3694
  }
3683
3695
 
3684
3696
  .ml-otp-separator {
3697
+ flex: none;
3685
3698
  width: var(--ml-space-2);
3686
3699
  height: 2px;
3687
3700
  border-radius: var(--ml-radius-pill);
@@ -3816,7 +3829,7 @@
3816
3829
  }
3817
3830
 
3818
3831
  .ml-priority-icon[data-priority="urgent"] {
3819
- color: var(--ml-danger);
3832
+ color: var(--ml-danger-text);
3820
3833
  }
3821
3834
 
3822
3835
  .ml-priority-icon[data-priority="high"] {
@@ -4404,7 +4417,7 @@
4404
4417
  border-radius: var(--ml-radius-md);
4405
4418
  box-shadow: var(--ml-shadow-xs);
4406
4419
  cursor: pointer;
4407
- text-align: left;
4420
+ text-align: start;
4408
4421
  transition: border-color var(--ml-duration-fast),box-shadow var(--ml-duration-fast);
4409
4422
  }
4410
4423
 
@@ -4439,7 +4452,7 @@
4439
4452
  overflow: hidden;
4440
4453
  text-overflow: ellipsis;
4441
4454
  white-space: nowrap;
4442
- text-align: left;
4455
+ text-align: start;
4443
4456
  }
4444
4457
 
4445
4458
  .ml-select-chips {
@@ -4528,6 +4541,7 @@
4528
4541
  border-radius: var(--ml-radius-sm);
4529
4542
  background: transparent;
4530
4543
  font-size: var(--ml-type-sm);
4544
+ /* audit-allow: focus.removed — the search field inside an open listbox; its caret shows focus. */
4531
4545
  outline: none;
4532
4546
  }
4533
4547
 
@@ -4567,7 +4581,7 @@
4567
4581
  background: transparent;
4568
4582
  color: var(--ml-text);
4569
4583
  font-size: var(--ml-type-sm);
4570
- text-align: left;
4584
+ text-align: start;
4571
4585
  cursor: pointer;
4572
4586
  }
4573
4587
 
@@ -4822,7 +4836,7 @@
4822
4836
  }
4823
4837
 
4824
4838
  /* Each line is one line box of the surrounding text: a bar about the height
4825
- of lowercase letters, centred in 1lh. */
4839
+ of lowercase letters, centered in 1lh. */
4826
4840
  .ml-skeleton-line {
4827
4841
  height: 0.62em;
4828
4842
  margin-block: calc((1lh - 0.62em) / 2);
@@ -4948,7 +4962,7 @@
4948
4962
  height: var(--ml-space-4);
4949
4963
  border: var(--ml-border-width) solid color-mix(in oklab,var(--ml-primary) 45%,var(--ml-border));
4950
4964
  border-radius: 50%;
4951
- background: oklch(1 0 0);
4965
+ background: var(--ml-knob);
4952
4966
  box-shadow: var(--ml-shadow-sm);
4953
4967
  transform: translate(-50%,-50%);
4954
4968
  cursor: grab;
@@ -4968,7 +4982,7 @@
4968
4982
  }
4969
4983
 
4970
4984
  /* components/status-icon */
4971
- /* Colour carries the stage; the glyph carries it without colour too. */
4985
+ /* Color carries the stage; the glyph carries it without color too. */
4972
4986
  .ml-status-icon {
4973
4987
  --ml-status-mark: var(--ml-surface);
4974
4988
  flex: none;
@@ -4981,14 +4995,16 @@
4981
4995
  }
4982
4996
 
4983
4997
  .ml-status-icon[data-status="in-progress"] {
4984
- color: var(--ml-warning);
4998
+ color: var(--ml-warning-text);
4985
4999
  }
4986
5000
 
4987
5001
  .ml-status-icon[data-status="in-review"] {
4988
- color: var(--ml-success);
5002
+ color: var(--ml-success-text);
4989
5003
  }
4990
5004
 
5005
+ /* Done is a filled disc carrying its check in the foreground: a fill and its pair. */
4991
5006
  .ml-status-icon[data-status="done"] {
5007
+ /* audit-allow: color.role — the disc is a fill; its mark takes --ml-primary-foreground. */
4992
5008
  color: var(--ml-primary);
4993
5009
  --ml-status-mark: var(--ml-primary-foreground);
4994
5010
  }
@@ -5029,7 +5045,7 @@
5029
5045
  }
5030
5046
 
5031
5047
  /* Horizontal: the connector is a flex item after the step, level with the
5032
- marker's centre, and fills once the step is done. */
5048
+ marker's center, and fills once the step is done. */
5033
5049
  .ml-stepper[data-orientation="horizontal"] .ml-stepper-step:not(:last-child)::after {
5034
5050
  min-width: var(--ml-space-4);
5035
5051
  height: 2px;
@@ -5216,7 +5232,7 @@ button.ml-stepper-target:focus-visible {
5216
5232
  .ml-table {
5217
5233
  width: 100%;
5218
5234
  border-collapse: collapse;
5219
- text-align: left;
5235
+ text-align: start;
5220
5236
  font-size: var(--ml-type-sm);
5221
5237
  }
5222
5238
 
@@ -5256,7 +5272,7 @@ button.ml-stepper-target:focus-visible {
5256
5272
  .ml-table [data-align="right"],
5257
5273
  .ml-table [data-align="end"],
5258
5274
  .ml-table [data-numeric] {
5259
- text-align: right;
5275
+ text-align: end;
5260
5276
  font-variant-numeric: tabular-nums;
5261
5277
  }
5262
5278
 
@@ -5315,7 +5331,7 @@ button.ml-stepper-target:focus-visible {
5315
5331
  padding: var(--ml-space-3) var(--ml-space-4);
5316
5332
  color: var(--ml-text-muted);
5317
5333
  font-size: var(--ml-type-xs);
5318
- text-align: left;
5334
+ text-align: start;
5319
5335
  }
5320
5336
 
5321
5337
  .ml-table-footer {
@@ -5351,6 +5367,7 @@ button.ml-stepper-target:focus-visible {
5351
5367
  /* components/tabs */
5352
5368
  .ml-tabs {
5353
5369
  display: grid;
5370
+ grid-template-columns: minmax(0, 1fr);
5354
5371
  gap: var(--ml-space-4);
5355
5372
  width: 100%;
5356
5373
  }
@@ -5745,7 +5762,7 @@ button.ml-stepper-target:focus-visible {
5745
5762
 
5746
5763
  /* components/timeline */
5747
5764
  /* A rail of markers and a column of text. Each item draws the segment of
5748
- rail below its own marker, so the line always runs through the centres,
5765
+ rail below its own marker, so the line always runs through the centers,
5749
5766
  whatever each item holds, and fills in as the sequence progresses. */
5750
5767
  .ml-timeline {
5751
5768
  --ml-timeline-marker: 1.5rem;
@@ -5874,7 +5891,7 @@ button.ml-stepper-target:focus-visible {
5874
5891
  min-width: 0;
5875
5892
  }
5876
5893
 
5877
- /* The heading row is as tall as the marker, so a one-line title sits on its centre. */
5894
+ /* The heading row is as tall as the marker, so a one-line title sits on its center. */
5878
5895
  .ml-timeline-heading {
5879
5896
  display: flex;
5880
5897
  flex-wrap: wrap;
@@ -6208,7 +6225,7 @@ button.ml-stepper-target:focus-visible {
6208
6225
  width: 1rem;
6209
6226
  height: 1rem;
6210
6227
  border-radius: 50%;
6211
- background: oklch(1 0 0);
6228
+ background: var(--ml-knob);
6212
6229
  box-shadow: var(--ml-shadow-sm);
6213
6230
  pointer-events: none;
6214
6231
  transition: transform var(--ml-duration-normal) var(--ml-ease-spring);
@@ -6373,11 +6390,12 @@ button.ml-stepper-target:focus-visible {
6373
6390
  background: var(--ml-surface-elevated);
6374
6391
  box-shadow: var(--ml-shadow-xl);
6375
6392
  color: var(--ml-text);
6393
+ /* audit-allow: focus.removed — the tour card is focused by script (tabindex -1); its buttons carry the focus style. */
6376
6394
  outline: none;
6377
6395
  animation: ml-pop-in var(--ml-duration-fast) var(--ml-ease-spring);
6378
6396
  }
6379
6397
 
6380
- .ml-tour-card[data-centred] {
6398
+ .ml-tour-card[data-centered] {
6381
6399
  top: 50%;
6382
6400
  left: 50%;
6383
6401
  translate: -50% -50%;
@@ -91,6 +91,7 @@
91
91
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.0304), 0 4.103px 13.32px -2px oklch(0 0 0 / 0.0608);
92
92
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0266), 0 8.206px 23.68px -4px oklch(0 0 0 / 0.076);
93
93
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0228), 0 15.044px 41.44px -8px oklch(0 0 0 / 0.095);
94
+ --ml-shadow-tint: oklch(0 0 0 / 0.0608);
94
95
  --ml-background: oklch(1 0 0);
95
96
  --ml-background-subtle: oklch(0.968 0.006 286);
96
97
  --ml-surface: oklch(1 0 0);
@@ -130,6 +131,10 @@
130
131
  --ml-control-border: var(--ml-text-faint);
131
132
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
132
133
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
134
+ --ml-highlight: oklch(1 0 0);
135
+ --ml-knob: var(--ml-highlight);
136
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
137
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
133
138
  }
134
139
 
135
140
  :root[data-mode="dark"],
@@ -172,6 +177,7 @@
172
177
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.079), 0 4.103px 13.32px -2px oklch(0 0 0 / 0.1581);
173
178
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0692), 0 8.206px 23.68px -4px oklch(0 0 0 / 0.1976);
174
179
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0593), 0 15.044px 41.44px -8px oklch(0 0 0 / 0.247);
180
+ --ml-shadow-tint: oklch(0 0 0 / 0.1581);
175
181
  --ml-focus: var(--ml-primary-text);
176
182
  --ml-primary-hover: color-mix(in oklab, var(--ml-primary) 88%, var(--ml-background));
177
183
  --ml-fill-hover: color-mix(in oklab, var(--ml-text) 5%, transparent);
@@ -180,6 +186,10 @@
180
186
  --ml-control-border: var(--ml-text-faint);
181
187
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
182
188
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
189
+ --ml-highlight: oklch(1 0 0);
190
+ --ml-knob: var(--ml-highlight);
191
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
192
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
183
193
  }
184
194
 
185
195
  @supports (transition-timing-function: linear(0, 1)) {
@@ -239,6 +249,7 @@
239
249
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.0485), 0 6.378px 24.692px -2px oklch(0 0 0 / 0.0971);
240
250
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0425), 0 12.756px 43.898px -4px oklch(0 0 0 / 0.1213);
241
251
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0364), 0 23.387px 76.821px -8px oklch(0 0 0 / 0.1517);
252
+ --ml-shadow-tint: oklch(0 0 0 / 0.0971);
242
253
  --ml-background: oklch(0.972 0.016 80);
243
254
  --ml-background-subtle: oklch(0.94 0.02 80);
244
255
  --ml-surface: oklch(0.989 0.01 80);
@@ -278,6 +289,10 @@
278
289
  --ml-control-border: var(--ml-text-faint);
279
290
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
280
291
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
292
+ --ml-highlight: oklch(1 0 0);
293
+ --ml-knob: var(--ml-highlight);
294
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
295
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
281
296
  }
282
297
 
283
298
  :root[data-theme="atelier"][data-mode="dark"],
@@ -319,6 +334,7 @@
319
334
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.1262), 0 6.378px 24.692px -2px oklch(0 0 0 / 0.2524);
320
335
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.1104), 0 12.756px 43.898px -4px oklch(0 0 0 / 0.3155);
321
336
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0946), 0 23.387px 76.821px -8px oklch(0 0 0 / 0.3944);
337
+ --ml-shadow-tint: oklch(0 0 0 / 0.2524);
322
338
  --ml-focus: var(--ml-primary-text);
323
339
  --ml-primary-hover: color-mix(in oklab, var(--ml-primary) 88%, var(--ml-background));
324
340
  --ml-fill-hover: color-mix(in oklab, var(--ml-text) 5%, transparent);
@@ -327,6 +343,10 @@
327
343
  --ml-control-border: var(--ml-text-faint);
328
344
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
329
345
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
346
+ --ml-highlight: oklch(1 0 0);
347
+ --ml-knob: var(--ml-highlight);
348
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
349
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
330
350
  }
331
351
 
332
352
  @supports (transition-timing-function: linear(0, 1)) {
@@ -385,6 +405,7 @@
385
405
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.0306), 0 3.828px 13.331px -2px oklch(0 0 0 / 0.0612);
386
406
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0268), 0 7.655px 23.699px -4px oklch(0 0 0 / 0.0764);
387
407
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0229), 0 14.034px 41.474px -8px oklch(0 0 0 / 0.0956);
408
+ --ml-shadow-tint: oklch(0 0 0 / 0.0612);
388
409
  --ml-background: oklch(0.994 0.003 240);
389
410
  --ml-background-subtle: oklch(0.962 0.006 240);
390
411
  --ml-surface: oklch(0.997 0.001 240);
@@ -424,6 +445,10 @@
424
445
  --ml-control-border: var(--ml-text-faint);
425
446
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
426
447
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
448
+ --ml-highlight: oklch(1 0 0);
449
+ --ml-knob: var(--ml-highlight);
450
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
451
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
427
452
  }
428
453
 
429
454
  :root[data-theme="machined"][data-mode="dark"],
@@ -465,6 +490,7 @@
465
490
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.0795), 0 3.828px 13.331px -2px oklch(0 0 0 / 0.159);
466
491
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0696), 0 7.655px 23.699px -4px oklch(0 0 0 / 0.1988);
467
492
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0596), 0 14.034px 41.474px -8px oklch(0 0 0 / 0.2485);
493
+ --ml-shadow-tint: oklch(0 0 0 / 0.159);
468
494
  --ml-focus: var(--ml-primary-text);
469
495
  --ml-primary-hover: color-mix(in oklab, var(--ml-primary) 88%, var(--ml-background));
470
496
  --ml-fill-hover: color-mix(in oklab, var(--ml-text) 5%, transparent);
@@ -473,6 +499,10 @@
473
499
  --ml-control-border: var(--ml-text-faint);
474
500
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
475
501
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
502
+ --ml-highlight: oklch(1 0 0);
503
+ --ml-knob: var(--ml-highlight);
504
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
505
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
476
506
  }
477
507
 
478
508
  @supports (transition-timing-function: linear(0, 1)) {
@@ -531,6 +561,7 @@
531
561
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.0593), 0 9.818px 32.195px -2px oklch(0 0 0 / 0.1186);
532
562
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0519), 0 19.636px 57.235px -4px oklch(0 0 0 / 0.1483);
533
563
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0445), 0 35.999px 100.162px -8px oklch(0 0 0 / 0.1854);
564
+ --ml-shadow-tint: oklch(0 0 0 / 0.1186);
534
565
  --ml-background: oklch(0.986 0.007 260);
535
566
  --ml-background-subtle: oklch(0.954 0.022 260);
536
567
  --ml-surface: oklch(0.995 0.002 260);
@@ -570,6 +601,10 @@
570
601
  --ml-control-border: var(--ml-text-faint);
571
602
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
572
603
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
604
+ --ml-highlight: oklch(1 0 0);
605
+ --ml-knob: var(--ml-highlight);
606
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
607
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
573
608
  }
574
609
 
575
610
  :root[data-theme="aerogel"][data-mode="dark"],
@@ -611,6 +646,7 @@
611
646
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.1542), 0 9.818px 32.195px -2px oklch(0 0 0 / 0.3084);
612
647
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.1349), 0 19.636px 57.235px -4px oklch(0 0 0 / 0.3855);
613
648
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.1157), 0 35.999px 100.162px -8px oklch(0 0 0 / 0.4819);
649
+ --ml-shadow-tint: oklch(0 0 0 / 0.3084);
614
650
  --ml-focus: var(--ml-primary-text);
615
651
  --ml-primary-hover: color-mix(in oklab, var(--ml-primary) 88%, var(--ml-background));
616
652
  --ml-fill-hover: color-mix(in oklab, var(--ml-text) 5%, transparent);
@@ -619,6 +655,10 @@
619
655
  --ml-control-border: var(--ml-text-faint);
620
656
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
621
657
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
658
+ --ml-highlight: oklch(1 0 0);
659
+ --ml-knob: var(--ml-highlight);
660
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
661
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
622
662
  }
623
663
 
624
664
  @supports (transition-timing-function: linear(0, 1)) {
@@ -677,6 +717,7 @@
677
717
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.0407), 0 4.887px 19.58px -2px oklch(0 0 0 / 0.0815);
678
718
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0356), 0 9.775px 34.81px -4px oklch(0 0 0 / 0.1018);
679
719
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0305), 0 17.92px 60.917px -8px oklch(0 0 0 / 0.1273);
720
+ --ml-shadow-tint: oklch(0 0 0 / 0.0815);
680
721
  --ml-background: oklch(0.969 0.018 135);
681
722
  --ml-background-subtle: oklch(0.937 0.023 135);
682
723
  --ml-surface: oklch(0.988 0.011 135);
@@ -716,6 +757,10 @@
716
757
  --ml-control-border: var(--ml-text-faint);
717
758
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
718
759
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
760
+ --ml-highlight: oklch(1 0 0);
761
+ --ml-knob: var(--ml-highlight);
762
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
763
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
719
764
  }
720
765
 
721
766
  :root[data-theme="nordic"][data-mode="dark"],
@@ -757,6 +802,7 @@
757
802
  --ml-shadow-md: 0 1px 2px oklch(0 0 0 / 0.1059), 0 4.887px 19.58px -2px oklch(0 0 0 / 0.2118);
758
803
  --ml-shadow-lg: 0 2px 4px oklch(0 0 0 / 0.0927), 0 9.775px 34.81px -4px oklch(0 0 0 / 0.2647);
759
804
  --ml-shadow-xl: 0 4px 8px oklch(0 0 0 / 0.0794), 0 17.92px 60.917px -8px oklch(0 0 0 / 0.3309);
805
+ --ml-shadow-tint: oklch(0 0 0 / 0.2118);
760
806
  --ml-focus: var(--ml-primary-text);
761
807
  --ml-primary-hover: color-mix(in oklab, var(--ml-primary) 88%, var(--ml-background));
762
808
  --ml-fill-hover: color-mix(in oklab, var(--ml-text) 5%, transparent);
@@ -765,6 +811,10 @@
765
811
  --ml-control-border: var(--ml-text-faint);
766
812
  --ml-ring: 0 0 0 3px color-mix(in oklab, var(--ml-focus) 24%, transparent);
767
813
  --ml-scrim: oklch(from var(--ml-background) calc(l * 0.22) c h / calc(0.54 - l * 0.28));
814
+ --ml-highlight: oklch(1 0 0);
815
+ --ml-knob: var(--ml-highlight);
816
+ --ml-knob-shadow: 0 0 0 1px oklch(0 0 0 / 0.25), 0 1px 4px oklch(0 0 0 / 0.3);
817
+ --ml-sheen: linear-gradient(135deg, color-mix(in oklab, var(--ml-highlight) 18%, transparent), transparent 46%, oklch(0 0 0 / 0.05));
768
818
  }
769
819
 
770
820
  @supports (transition-timing-function: linear(0, 1)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mlola-ui/tokens",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Stable CSS entry for the framework-free Mlola UI design system",
5
5
  "main": "tokens.css",
6
6
  "sideEffects": [
@@ -19,7 +19,8 @@
19
19
  "./foundations.css": "./generated/foundations.css",
20
20
  "./materials.css": "./generated/materials.css",
21
21
  "./recipes.css": "./generated/recipes.css",
22
- "./motion.css": "./generated/motion.css"
22
+ "./motion.css": "./generated/motion.css",
23
+ "./accessibility.css": "./generated/accessibility.css"
23
24
  },
24
25
  "license": "MIT",
25
26
  "author": "Mlola",