rei-kit 2.23.0 → 2.25.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.
package/dist/styles.css CHANGED
@@ -246,85 +246,112 @@
246
246
  }
247
247
  }
248
248
 
249
- .rk-scroll[data-v-4c21cdc9] {
249
+ /*
250
+ * A flex column, so a height written on this box reaches the box that
251
+ * scrolls.
252
+ *
253
+ * The caller's class lands here, on the wrapper, because that is the
254
+ * element the component renders outermost — so `class="max-h-56"` is the
255
+ * obvious and only thing to write. It used to do nothing. The viewport
256
+ * carried `max-height: 100%`, and a percentage height resolves against the
257
+ * parent's *height*, which is `auto` here; a parent with only a
258
+ * `max-height` gives it nothing to resolve against, so the rule was inert
259
+ * and the viewport grew to the full height of its contents.
260
+ *
261
+ * Visually that spills. For `VirtualList` it is worse than spilling: the
262
+ * window is sized from `clientHeight`, so an unconstrained viewport reports
263
+ * the height of the whole list, every row is "near the viewport", and five
264
+ * thousand of them render at once. That is the component's whole purpose,
265
+ * inverted, by the one line every caller writes.
266
+ *
267
+ * `flex: 1 1 auto` with `min-height: 0` is what lets the item shrink below
268
+ * its content, which is the part that is easy to leave out: a flex item's
269
+ * default `min-height: auto` refuses to go below its content and the box
270
+ * spills exactly as before.
271
+ */
272
+ .rk-scroll[data-v-383954d8] {
250
273
  position: relative;
274
+ display: flex;
275
+ flex-direction: column;
251
276
  min-width: 0;
252
277
  min-height: 0;
253
278
  }
254
- .rk-scroll-viewport[data-v-4c21cdc9] {
279
+ .rk-scroll-viewport[data-v-383954d8] {
280
+ flex: 1 1 auto;
281
+ min-width: 0;
282
+ min-height: 0;
255
283
  max-width: 100%;
256
- max-height: 100%;
257
284
  }
258
- .rk-scroll-viewport.is-x[data-v-4c21cdc9] {
285
+ .rk-scroll-viewport.is-x[data-v-383954d8] {
259
286
  overflow-x: auto;
260
287
  overflow-y: hidden;
261
288
  }
262
- .rk-scroll-viewport.is-y[data-v-4c21cdc9] {
289
+ .rk-scroll-viewport.is-y[data-v-383954d8] {
263
290
  overflow-x: hidden;
264
291
  overflow-y: auto;
265
292
  }
266
- .rk-scroll-viewport.is-both[data-v-4c21cdc9] {
293
+ .rk-scroll-viewport.is-both[data-v-383954d8] {
267
294
  overflow: auto;
268
295
  }
269
- .rk-scroll-viewport[data-v-4c21cdc9]:focus-visible {
296
+ .rk-scroll-viewport[data-v-383954d8]:focus-visible {
270
297
  outline: 2px solid var(--color-primary);
271
298
  outline-offset: 2px;
272
299
  }
273
300
 
274
301
  /* The fade paints over whatever the box sits on, so the colour is a hook:
275
302
  a scroll area on a card sets it to the card's ground. */
276
- .rk-scroll-fade[data-v-4c21cdc9] {
303
+ .rk-scroll-fade[data-v-383954d8] {
277
304
  position: absolute;
278
305
  z-index: 1;
279
306
  pointer-events: none;
280
307
  --rk-scroll-fade: var(--scroll-fade-color, var(--color-canvas));
281
308
  }
282
- .rk-scroll-fade.is-start-x[data-v-4c21cdc9],
283
- .rk-scroll-fade.is-end-x[data-v-4c21cdc9] {
309
+ .rk-scroll-fade.is-start-x[data-v-383954d8],
310
+ .rk-scroll-fade.is-end-x[data-v-383954d8] {
284
311
  inset-block: 0;
285
312
  width: 1.5rem;
286
313
  }
287
- .rk-scroll-fade.is-start-y[data-v-4c21cdc9],
288
- .rk-scroll-fade.is-end-y[data-v-4c21cdc9] {
314
+ .rk-scroll-fade.is-start-y[data-v-383954d8],
315
+ .rk-scroll-fade.is-end-y[data-v-383954d8] {
289
316
  inset-inline: 0;
290
317
  height: 1.5rem;
291
318
  }
292
- .rk-scroll-fade.is-start-x[data-v-4c21cdc9] {
319
+ .rk-scroll-fade.is-start-x[data-v-383954d8] {
293
320
  inset-inline-start: 0;
294
321
  background: linear-gradient(to right, var(--rk-scroll-fade), transparent);
295
322
  }
296
- .rk-scroll-fade.is-end-x[data-v-4c21cdc9] {
323
+ .rk-scroll-fade.is-end-x[data-v-383954d8] {
297
324
  inset-inline-end: 0;
298
325
  background: linear-gradient(to left, var(--rk-scroll-fade), transparent);
299
326
  }
300
- .rk-scroll-fade.is-start-y[data-v-4c21cdc9] {
327
+ .rk-scroll-fade.is-start-y[data-v-383954d8] {
301
328
  inset-block-start: 0;
302
329
  background: linear-gradient(to bottom, var(--rk-scroll-fade), transparent);
303
330
  }
304
- .rk-scroll-fade.is-end-y[data-v-4c21cdc9] {
331
+ .rk-scroll-fade.is-end-y[data-v-383954d8] {
305
332
  inset-block-end: 0;
306
333
  background: linear-gradient(to top, var(--rk-scroll-fade), transparent);
307
334
  }
308
335
 
309
336
  /* The insets are logical, so they land on the correct side on their own.
310
337
  A gradient has no logical direction, so these two flip by hand. */
311
- [dir='rtl'] .rk-scroll-fade.is-start-x[data-v-4c21cdc9] {
338
+ [dir='rtl'] .rk-scroll-fade.is-start-x[data-v-383954d8] {
312
339
  background: linear-gradient(to left, var(--rk-scroll-fade), transparent);
313
340
  }
314
- [dir='rtl'] .rk-scroll-fade.is-end-x[data-v-4c21cdc9] {
341
+ [dir='rtl'] .rk-scroll-fade.is-end-x[data-v-383954d8] {
315
342
  background: linear-gradient(to right, var(--rk-scroll-fade), transparent);
316
343
  }
317
344
 
318
- .rk-listbox[data-v-7f8cd788] {
345
+ .rk-listbox[data-v-3cd5a3c6] {
319
346
  overflow-y: auto;
320
347
  border-radius: var(--radius-card);
321
348
  padding: 0.25rem;
322
349
  }
323
- .rk-listbox[data-v-7f8cd788]:focus-visible {
350
+ .rk-listbox[data-v-3cd5a3c6]:focus-visible {
324
351
  outline: 2px solid var(--color-primary);
325
352
  outline-offset: 1px;
326
353
  }
327
- .rk-listbox-option[data-v-7f8cd788] {
354
+ .rk-listbox-option[data-v-3cd5a3c6] {
328
355
  display: flex;
329
356
  cursor: pointer;
330
357
  align-items: center;
@@ -338,38 +365,43 @@
338
365
  /* The current row shows only while the list has focus. A list that is not
339
366
  being used has no "current" row, and a highlight left behind on one reads
340
367
  as a selection — which is exactly what it is not. */
341
- .rk-listbox:focus-within .rk-listbox-option.is-active[data-v-7f8cd788] {
368
+ .rk-listbox:focus-within .rk-listbox-option.is-active[data-v-3cd5a3c6] {
342
369
  background: var(--color-muted);
343
370
  }
344
- .rk-listbox-option.is-chosen[data-v-7f8cd788] {
345
- color: var(--color-primary);
371
+
372
+ /* The chosen row is its tinted ground, its weight and its tick — not a
373
+ primary-coloured label on a ten per cent tint of primary, which is the
374
+ same fault `BaseBadge` had: a faint wash of a colour is still nearly that
375
+ colour, and the pair measured 4.16:1. */
376
+ .rk-listbox-option.is-chosen[data-v-3cd5a3c6] {
377
+ color: var(--color-ink);
346
378
  font-weight: 500;
347
379
  }
348
380
 
349
381
  /* Chosen is the tick and the tint, and it holds whether the list is in use
350
382
  or not: the current option and the chosen one are different things. */
351
- .rk-listbox-option.is-chosen[data-v-7f8cd788] {
383
+ .rk-listbox-option.is-chosen[data-v-3cd5a3c6] {
352
384
  background: color-mix(in oklab, var(--color-primary) 10%, transparent);
353
385
  }
354
- .rk-listbox:focus-within .rk-listbox-option.is-chosen.is-active[data-v-7f8cd788] {
386
+ .rk-listbox:focus-within .rk-listbox-option.is-chosen.is-active[data-v-3cd5a3c6] {
355
387
  background: color-mix(in oklab, var(--color-primary) 20%, transparent);
356
388
  }
357
- .rk-listbox-option.is-disabled[data-v-7f8cd788] {
389
+ .rk-listbox-option.is-disabled[data-v-3cd5a3c6] {
358
390
  cursor: not-allowed;
359
391
  opacity: 0.45;
360
392
  }
361
- .rk-listbox-label[data-v-7f8cd788] {
393
+ .rk-listbox-label[data-v-3cd5a3c6] {
362
394
  display: block;
363
395
  overflow: hidden;
364
396
  text-overflow: ellipsis;
365
397
  white-space: nowrap;
366
398
  }
367
- .rk-listbox-description[data-v-7f8cd788] {
399
+ .rk-listbox-description[data-v-3cd5a3c6] {
368
400
  display: block;
369
401
  font-size: 0.75rem;
370
402
  color: var(--color-ink-soft);
371
403
  }
372
- .rk-listbox-empty[data-v-7f8cd788] {
404
+ .rk-listbox-empty[data-v-3cd5a3c6] {
373
405
  padding: 1rem;
374
406
  }
375
407
 
@@ -414,37 +446,45 @@
414
446
  height: 65%;
415
447
  }
416
448
 
417
- .rk-menu[data-v-eaeecb75] {
449
+ .rk-menu[data-v-657b2528] {
418
450
  position: relative;
419
451
  display: inline-flex;
420
452
  }
421
- .rk-menu-trigger[data-v-eaeecb75] {
453
+ .rk-menu-trigger[data-v-657b2528] {
422
454
  display: inline-flex;
423
455
  border-radius: var(--radius-cell);
424
456
  }
425
- .rk-menu-trigger[data-v-eaeecb75]:focus-visible {
457
+ .rk-menu-trigger[data-v-657b2528]:focus-visible {
426
458
  outline: 2px solid var(--color-primary);
427
459
  outline-offset: 2px;
428
460
  }
429
- .rk-menu-panel[data-v-eaeecb75] {
461
+ .rk-menu-panel[data-v-657b2528] {
430
462
  position: absolute;
431
- top: calc(100% + 0.5rem);
432
463
  z-index: 50;
464
+ /* The slide is a translate rather than an inset, so it composes with the
465
+ `is-start`/`is-end` edge the caller asked for instead of replacing it. */
466
+ transform: translateX(var(--rk-menu-shift, 0px));
433
467
  min-width: 12rem;
434
468
  overflow: hidden;
435
469
  border-radius: var(--radius-card);
436
470
  padding: 0.375rem;
437
471
  }
438
- .rk-menu-panel.is-end[data-v-eaeecb75] {
472
+ .rk-menu-panel.is-bottom[data-v-657b2528] {
473
+ top: calc(100% + 0.5rem);
474
+ }
475
+ .rk-menu-panel.is-top[data-v-657b2528] {
476
+ bottom: calc(100% + 0.5rem);
477
+ }
478
+ .rk-menu-panel.is-end[data-v-657b2528] {
439
479
  inset-inline-end: 0;
440
480
  }
441
- .rk-menu-panel.is-start[data-v-eaeecb75] {
481
+ .rk-menu-panel.is-start[data-v-657b2528] {
442
482
  inset-inline-start: 0;
443
483
  }
444
484
 
445
485
  /* The items belong to the caller, so this styles them by role rather than by
446
486
  class: whatever they render, it lines up. */
447
- .rk-menu-panel[data-v-eaeecb75] [role='menuitem'] {
487
+ .rk-menu-panel[data-v-657b2528] [role='menuitem'] {
448
488
  display: block;
449
489
  width: 100%;
450
490
  border-radius: var(--radius-cell);
@@ -454,32 +494,32 @@
454
494
  color: var(--color-ink);
455
495
  transition: background-color var(--duration-fast);
456
496
  }
457
- .rk-menu-panel[data-v-eaeecb75] [role='menuitem']:hover {
497
+ .rk-menu-panel[data-v-657b2528] [role='menuitem']:hover {
458
498
  background: var(--color-muted);
459
499
  }
460
- .rk-menu-panel[data-v-eaeecb75] [role='menuitem']:focus-visible {
500
+ .rk-menu-panel[data-v-657b2528] [role='menuitem']:focus-visible {
461
501
  outline: 2px solid var(--color-primary);
462
502
  outline-offset: -2px;
463
503
  }
464
- .rk-menu-panel[data-v-eaeecb75] hr {
504
+ .rk-menu-panel[data-v-657b2528] hr {
465
505
  margin: 0.375rem 0;
466
506
  height: 1px;
467
507
  border: 0;
468
508
  background: color-mix(in srgb, var(--color-hair) 70%, transparent);
469
509
  }
470
510
 
471
- .rk-combo[data-v-0ae3b425] {
511
+ .rk-combo[data-v-f02a0924] {
472
512
  position: relative;
473
513
  display: flex;
474
514
  flex-direction: column;
475
515
  gap: 0.375rem;
476
516
  }
477
- .rk-combo-label[data-v-0ae3b425] {
517
+ .rk-combo-label[data-v-f02a0924] {
478
518
  font-size: 0.875rem;
479
519
  font-weight: 500;
480
520
  color: var(--color-ink);
481
521
  }
482
- .rk-combo-field[data-v-0ae3b425] {
522
+ .rk-combo-field[data-v-f02a0924] {
483
523
  position: relative;
484
524
  display: flex;
485
525
  align-items: center;
@@ -487,14 +527,14 @@
487
527
 
488
528
  /* With chips the field is a box that wraps, and the input is one item in it
489
529
  that grows into whatever is left. */
490
- .rk-combo-field.is-multiple[data-v-0ae3b425] {
530
+ .rk-combo-field.is-multiple[data-v-f02a0924] {
491
531
  flex-wrap: wrap;
492
532
  gap: 0.25rem;
493
533
  min-height: 2.75rem;
494
534
  border-radius: var(--radius-card);
495
535
  padding: 0.3125rem 2rem 0.3125rem 0.375rem;
496
536
  }
497
- .rk-combo-chip[data-v-0ae3b425] {
537
+ .rk-combo-chip[data-v-f02a0924] {
498
538
  display: inline-flex;
499
539
  align-items: center;
500
540
  gap: 0.25rem;
@@ -504,7 +544,7 @@
504
544
  font-size: 0.8125rem;
505
545
  color: var(--color-ink);
506
546
  }
507
- .rk-combo-chip-x[data-v-0ae3b425] {
547
+ .rk-combo-chip-x[data-v-f02a0924] {
508
548
  display: grid;
509
549
  width: 1.125rem;
510
550
  height: 1.125rem;
@@ -513,13 +553,13 @@
513
553
  color: var(--color-ink-soft);
514
554
  line-height: 1;
515
555
  }
516
- .rk-combo-chip-x[data-v-0ae3b425]:hover {
556
+ .rk-combo-chip-x[data-v-f02a0924]:hover {
517
557
  color: var(--color-ink);
518
558
  }
519
559
 
520
560
  /* 16px, like every other text control here: iOS zooms the viewport when it
521
561
  focuses a field under 16px and never zooms back. */
522
- .rk-combo-input[data-v-0ae3b425] {
562
+ .rk-combo-input[data-v-f02a0924] {
523
563
  width: 100%;
524
564
  height: 2.75rem;
525
565
  border-radius: var(--radius-card);
@@ -527,7 +567,7 @@
527
567
  font-size: 1rem;
528
568
  color: var(--color-ink);
529
569
  }
530
- .is-multiple .rk-combo-input[data-v-0ae3b425] {
570
+ .is-multiple .rk-combo-input[data-v-f02a0924] {
531
571
  width: auto;
532
572
  height: 1.75rem;
533
573
  min-width: 6rem;
@@ -538,39 +578,45 @@
538
578
  background: transparent;
539
579
  box-shadow: none;
540
580
  }
541
- .rk-combo-input[data-v-0ae3b425]:focus-visible {
581
+ .rk-combo-input[data-v-f02a0924]:focus-visible {
542
582
  outline: 2px solid var(--color-primary);
543
583
  outline-offset: -1px;
544
584
  }
545
- .is-multiple .rk-combo-input[data-v-0ae3b425]:focus-visible {
585
+ .is-multiple .rk-combo-input[data-v-f02a0924]:focus-visible {
546
586
  outline: none;
547
587
  }
548
588
 
549
589
  /* The ring belongs to the whole box once the box is the control. */
550
- .rk-combo-field.is-multiple[data-v-0ae3b425]:focus-within {
590
+ .rk-combo-field.is-multiple[data-v-f02a0924]:focus-within {
551
591
  outline: 2px solid var(--color-primary);
552
592
  outline-offset: -1px;
553
593
  }
554
- .rk-combo-input[data-v-0ae3b425]:disabled {
594
+ .rk-combo-input[data-v-f02a0924]:disabled {
555
595
  opacity: 0.5;
556
596
  }
557
- .rk-combo-toggle[data-v-0ae3b425] {
597
+ .rk-combo-toggle[data-v-f02a0924] {
558
598
  position: absolute;
559
599
  inset-inline-end: 0.5rem;
560
600
  color: var(--color-ink-soft);
561
601
  font-size: 0.75rem;
562
602
  }
563
- .rk-combo-list[data-v-0ae3b425] {
603
+ .rk-combo-list[data-v-f02a0924] {
564
604
  position: absolute;
565
- top: calc(100% - 1.25rem);
566
605
  z-index: 50;
606
+ transform: translateX(var(--rk-combo-shift, 0px));
567
607
  max-height: 14rem;
568
608
  width: 100%;
569
609
  overflow-y: auto;
570
610
  border-radius: var(--radius-card);
571
611
  padding: 0.25rem;
572
612
  }
573
- .rk-combo-option[data-v-0ae3b425] {
613
+ .rk-combo-list.is-bottom[data-v-f02a0924] {
614
+ top: calc(100% - 1.25rem);
615
+ }
616
+ .rk-combo-list.is-top[data-v-f02a0924] {
617
+ bottom: calc(100% - 1.25rem);
618
+ }
619
+ .rk-combo-option[data-v-f02a0924] {
574
620
  cursor: pointer;
575
621
  border-radius: var(--radius-cell);
576
622
  padding: 0.5rem 0.625rem;
@@ -580,38 +626,38 @@
580
626
 
581
627
  /* A virtual row's height is the arithmetic the spacers are built on, so it
582
628
  cannot be left to the text inside it. */
583
- .rk-combo-option[style][data-v-0ae3b425] {
629
+ .rk-combo-option[style][data-v-f02a0924] {
584
630
  display: flex;
585
631
  align-items: center;
586
632
  padding-block: 0;
587
633
  }
588
- .rk-combo-option.is-highlighted[data-v-0ae3b425] {
634
+ .rk-combo-option.is-highlighted[data-v-f02a0924] {
589
635
  background: var(--color-muted);
590
636
  }
591
- .rk-combo-option.is-selected[data-v-0ae3b425] {
637
+ .rk-combo-option.is-selected[data-v-f02a0924] {
592
638
  font-weight: 600;
593
639
  }
594
- .rk-combo-empty[data-v-0ae3b425],
595
- .rk-combo-status[data-v-0ae3b425] {
640
+ .rk-combo-empty[data-v-f02a0924],
641
+ .rk-combo-status[data-v-f02a0924] {
596
642
  padding: 0.75rem 0.625rem;
597
643
  font-size: 0.875rem;
598
644
  color: var(--color-ink-soft);
599
645
  }
600
- .rk-combo-status[data-v-0ae3b425] {
646
+ .rk-combo-status[data-v-f02a0924] {
601
647
  display: flex;
602
648
  flex-direction: column;
603
649
  gap: 0.5rem;
604
650
  }
605
- .rk-combo-status-rows[data-v-0ae3b425] {
651
+ .rk-combo-status-rows[data-v-f02a0924] {
606
652
  display: flex;
607
653
  flex-direction: column;
608
654
  gap: 0.5rem;
609
655
  }
610
- .rk-combo-error[data-v-0ae3b425] {
656
+ .rk-combo-error[data-v-f02a0924] {
611
657
  font-size: 0.75rem;
612
658
  color: var(--color-negative);
613
659
  }
614
- .rk-combo-hint[data-v-0ae3b425] {
660
+ .rk-combo-hint[data-v-f02a0924] {
615
661
  font-size: 0.75rem;
616
662
  color: var(--color-ink-soft);
617
663
  }
@@ -1032,7 +1078,7 @@ to {
1032
1078
  gap: var(--spacing, .25rem);
1033
1079
  min-height: 52px;
1034
1080
  padding-block: calc(var(--spacing, .25rem) * 1.5);
1035
- color: var(--color-ink-soft, #5c7480);
1081
+ color: var(--color-ink-soft, #586f7b);
1036
1082
  flex-direction: column;
1037
1083
  flex: 1;
1038
1084
  display: flex;
@@ -1189,12 +1235,88 @@ to {
1189
1235
  outline-offset: 1px;
1190
1236
  }
1191
1237
 
1192
- .rk-vlist-rows[data-v-936ed40c] {
1238
+ .rk-bars[data-v-12682ed6] {
1239
+ width: 100%;
1240
+ border-collapse: collapse;
1241
+ }
1242
+ .rk-bars-label[data-v-12682ed6] {
1243
+ padding-block: 0.3125rem;
1244
+ padding-inline-end: 0.75rem;
1245
+ color: var(--color-ink);
1246
+ font-size: 0.8125rem;
1247
+ font-weight: 500;
1248
+ text-align: start;
1249
+ white-space: nowrap;
1250
+ }
1251
+ .rk-bars-track[data-v-12682ed6] {
1252
+ width: 100%;
1253
+ padding-block: 0.3125rem;
1254
+ }
1255
+ .rk-bars-fill[data-v-12682ed6] {
1256
+ display: block;
1257
+ height: 0.625rem;
1258
+ border-radius: 9999px;
1259
+ transition: width var(--duration-slower) var(--ease-standard);
1260
+ }
1261
+ .rk-bars-value[data-v-12682ed6] {
1262
+ padding-block: 0.3125rem;
1263
+ padding-inline-start: 0.75rem;
1264
+ color: var(--color-ink-soft);
1265
+ font-size: 0.8125rem;
1266
+ font-variant-numeric: tabular-nums;
1267
+ text-align: end;
1268
+ white-space: nowrap;
1269
+ }
1270
+
1271
+ .rk-donut[data-v-4ee6aaa6] {
1272
+ display: flex;
1273
+ flex-wrap: wrap;
1274
+ align-items: center;
1275
+ gap: 1.25rem;
1276
+ }
1277
+ .rk-donut-ring[data-v-4ee6aaa6] {
1278
+ width: 8.5rem;
1279
+ height: 8.5rem;
1280
+ flex: none;
1281
+ }
1282
+ .rk-donut-legend[data-v-4ee6aaa6] {
1283
+ margin: 0;
1284
+ padding: 0;
1285
+ min-width: 0;
1286
+ flex: 1 1 12rem;
1287
+ list-style: none;
1288
+ }
1289
+ .rk-donut-item[data-v-4ee6aaa6] {
1290
+ display: flex;
1291
+ align-items: center;
1292
+ gap: 0.5rem;
1293
+ padding-block: 0.1875rem;
1294
+ font-size: 0.8125rem;
1295
+ }
1296
+ .rk-donut-swatch[data-v-4ee6aaa6] {
1297
+ width: 0.625rem;
1298
+ height: 0.625rem;
1299
+ flex: none;
1300
+ border-radius: 9999px;
1301
+ background: currentColor;
1302
+ }
1303
+ .rk-donut-name[data-v-4ee6aaa6] {
1304
+ min-width: 0;
1305
+ flex: 1 1 auto;
1306
+ color: var(--color-ink);
1307
+ }
1308
+ .rk-donut-value[data-v-4ee6aaa6] {
1309
+ color: var(--color-ink-soft);
1310
+ font-variant-numeric: tabular-nums;
1311
+ white-space: nowrap;
1312
+ }
1313
+
1314
+ .rk-vlist-rows[data-v-5fea77fd] {
1193
1315
  margin: 0;
1194
1316
  padding: 0;
1195
1317
  list-style: none;
1196
1318
  }
1197
- .rk-vlist-row[data-v-936ed40c] {
1319
+ .rk-vlist-row[data-v-5fea77fd] {
1198
1320
  box-sizing: border-box;
1199
1321
  overflow: hidden;
1200
1322
  }
@@ -1289,20 +1411,20 @@ to {
1289
1411
  font-size: 0.8125rem;
1290
1412
  }
1291
1413
 
1292
- .rk-cal[data-v-d682f18a] {
1414
+ .rk-cal[data-v-36cbc7fd] {
1293
1415
  display: flex;
1294
1416
  width: 100%;
1295
1417
  max-width: 19rem;
1296
1418
  flex-direction: column;
1297
1419
  gap: 0.5rem;
1298
1420
  }
1299
- .rk-cal-head[data-v-d682f18a] {
1421
+ .rk-cal-head[data-v-36cbc7fd] {
1300
1422
  display: flex;
1301
1423
  align-items: center;
1302
1424
  justify-content: space-between;
1303
1425
  gap: 0.25rem;
1304
1426
  }
1305
- .rk-cal-arrow[data-v-d682f18a] {
1427
+ .rk-cal-arrow[data-v-36cbc7fd] {
1306
1428
  display: grid;
1307
1429
  width: 2rem;
1308
1430
  height: 2rem;
@@ -1311,40 +1433,40 @@ to {
1311
1433
  color: var(--color-ink);
1312
1434
  transition: background-color var(--duration-fast) var(--ease-standard);
1313
1435
  }
1314
- .rk-cal-arrow[data-v-d682f18a]:hover {
1436
+ .rk-cal-arrow[data-v-36cbc7fd]:hover {
1315
1437
  background: var(--color-muted);
1316
1438
  }
1317
- .rk-cal-title[data-v-d682f18a] {
1439
+ .rk-cal-title[data-v-36cbc7fd] {
1318
1440
  border-radius: var(--radius-cell);
1319
1441
  padding: 0.25rem 0.625rem;
1320
1442
  font-size: 0.875rem;
1321
1443
  font-weight: 600;
1322
1444
  color: var(--color-ink);
1323
1445
  }
1324
- .rk-cal-title[data-v-d682f18a]:hover {
1446
+ .rk-cal-title[data-v-36cbc7fd]:hover {
1325
1447
  background: var(--color-muted);
1326
1448
  }
1327
- .rk-cal-weekdays[data-v-d682f18a],
1328
- .rk-cal-week[data-v-d682f18a] {
1449
+ .rk-cal-weekdays[data-v-36cbc7fd],
1450
+ .rk-cal-week[data-v-36cbc7fd] {
1329
1451
  display: grid;
1330
1452
  grid-template-columns: repeat(7, minmax(0, 1fr));
1331
1453
  }
1332
- .rk-cal-weekdays[data-v-d682f18a] {
1454
+ .rk-cal-weekdays[data-v-36cbc7fd] {
1333
1455
  gap: 2px;
1334
1456
  font-size: 0.6875rem;
1335
1457
  font-weight: 600;
1336
1458
  text-align: center;
1337
1459
  color: var(--color-ink-soft);
1338
1460
  }
1339
- .rk-cal-grid[data-v-d682f18a] {
1461
+ .rk-cal-grid[data-v-36cbc7fd] {
1340
1462
  display: grid;
1341
1463
  gap: 2px;
1342
1464
  }
1343
- .rk-cal-cell[data-v-d682f18a] {
1465
+ .rk-cal-cell[data-v-36cbc7fd] {
1344
1466
  display: grid;
1345
1467
  place-items: center;
1346
1468
  }
1347
- .rk-cal-day[data-v-d682f18a] {
1469
+ .rk-cal-day[data-v-36cbc7fd] {
1348
1470
  display: grid;
1349
1471
  width: 100%;
1350
1472
  height: 2.25rem;
@@ -1357,53 +1479,57 @@ to {
1357
1479
  background-color var(--duration-fast) var(--ease-standard),
1358
1480
  color var(--duration-fast) var(--ease-standard);
1359
1481
  }
1360
- .rk-cal-day[data-v-d682f18a]:hover:not(:disabled) {
1482
+ .rk-cal-day[data-v-36cbc7fd]:hover:not(:disabled) {
1361
1483
  background: var(--color-muted);
1362
1484
  }
1363
- .rk-cal-day[data-v-d682f18a]:focus-visible {
1485
+ .rk-cal-day[data-v-36cbc7fd]:focus-visible {
1364
1486
  outline: 2px solid var(--color-primary);
1365
1487
  outline-offset: -2px;
1366
1488
  }
1367
1489
 
1368
1490
  /* A day from the month either side: still reachable, visibly not this month. */
1369
- .rk-cal-day.is-outside[data-v-d682f18a] {
1491
+ /* `ink-soft` and nothing else. It used to carry `opacity: 0.55` on top,
1492
+ which took a colour that clears AA down to 2.2:1 — and these are real
1493
+ buttons with real labels, reachable by script and read out by name, not
1494
+ decoration. The softer ink is already the difference between this month
1495
+ and the next. */
1496
+ .rk-cal-day.is-outside[data-v-36cbc7fd] {
1370
1497
  color: var(--color-ink-soft);
1371
- opacity: 0.55;
1372
1498
  }
1373
- .rk-cal-day.is-inside[data-v-d682f18a] {
1499
+ .rk-cal-day.is-inside[data-v-36cbc7fd] {
1374
1500
  background: color-mix(in oklab, var(--color-primary) 14%, transparent);
1375
1501
  border-radius: 0;
1376
1502
  }
1377
- .rk-cal-day.is-selected[data-v-d682f18a] {
1503
+ .rk-cal-day.is-selected[data-v-36cbc7fd] {
1378
1504
  background: var(--color-primary);
1379
1505
  color: var(--color-on-primary);
1380
1506
  font-weight: 600;
1381
1507
  opacity: 1;
1382
1508
  }
1383
- .rk-cal-day[aria-current='date'][data-v-d682f18a]:not(.is-selected) {
1509
+ .rk-cal-day[aria-current='date'][data-v-36cbc7fd]:not(.is-selected) {
1384
1510
  box-shadow: inset 0 0 0 1px var(--color-primary);
1385
1511
  }
1386
- .rk-cal-day[data-v-d682f18a]:disabled {
1512
+ .rk-cal-day[data-v-36cbc7fd]:disabled {
1387
1513
  cursor: not-allowed;
1388
1514
  opacity: 0.3;
1389
1515
  }
1390
- .rk-cal-blocks[data-v-d682f18a] {
1516
+ .rk-cal-blocks[data-v-36cbc7fd] {
1391
1517
  display: grid;
1392
1518
  grid-template-columns: repeat(3, minmax(0, 1fr));
1393
1519
  gap: 0.375rem;
1394
1520
  }
1395
- .rk-cal-block[data-v-d682f18a] {
1521
+ .rk-cal-block[data-v-36cbc7fd] {
1396
1522
  height: 2.5rem;
1397
1523
  border-radius: var(--radius-cell);
1398
1524
  font-size: 0.8125rem;
1399
1525
  color: var(--color-ink);
1400
1526
  transition: background-color var(--duration-fast) var(--ease-standard);
1401
1527
  }
1402
- .rk-cal-block[data-v-d682f18a]:hover {
1528
+ .rk-cal-block[data-v-36cbc7fd]:hover {
1403
1529
  background: var(--color-muted);
1404
1530
  }
1405
1531
 
1406
- .rk-chip[data-v-c94a820d] {
1532
+ .rk-chip[data-v-7939c4e0] {
1407
1533
  display: inline-flex;
1408
1534
  max-width: 100%;
1409
1535
  align-items: center;
@@ -1416,7 +1542,7 @@ to {
1416
1542
  background: var(--color-muted);
1417
1543
  color: var(--color-ink);
1418
1544
  }
1419
- .rk-chip-body[data-v-c94a820d] {
1545
+ .rk-chip-body[data-v-7939c4e0] {
1420
1546
  display: inline-flex;
1421
1547
  min-width: 0;
1422
1548
  align-items: center;
@@ -1424,42 +1550,49 @@ to {
1424
1550
  border-radius: 9999px;
1425
1551
  color: inherit;
1426
1552
  }
1427
- .rk-chip-body.is-button[data-v-c94a820d] {
1553
+ .rk-chip-body.is-button[data-v-7939c4e0] {
1428
1554
  cursor: pointer;
1429
1555
  }
1430
- .rk-chip.is-selected[data-v-c94a820d] {
1556
+ .rk-chip.is-selected[data-v-7939c4e0] {
1431
1557
  background: var(--color-primary);
1432
1558
  color: var(--color-on-primary);
1433
1559
  }
1434
- .rk-chip.is-disabled[data-v-c94a820d] {
1560
+ .rk-chip.is-disabled[data-v-7939c4e0] {
1435
1561
  cursor: not-allowed;
1436
1562
  opacity: 0.5;
1437
1563
  }
1438
1564
 
1439
1565
  /* The tones tint rather than fill: a row of chips in five solid colours is a
1440
1566
  row where nothing stands out. The selected one fills, and that is the point
1441
- of it. */
1442
- .rk-chip.tone-primary[data-v-c94a820d] {
1567
+ of it.
1568
+
1569
+ The ground and the edge carry the role; `ink` carries the words. Two of
1570
+ these used to write the role straight onto a tint of itself and the other
1571
+ two mixed it most of the way there, which is the same fault by degrees —
1572
+ a browser measured the warning chip at 4.13:1. There is one answer to
1573
+ this in the kit now, and `BaseBadge`, `BaseAlert` and `BaseListbox` give
1574
+ the same one. */
1575
+ .rk-chip.tone-primary[data-v-7939c4e0] {
1443
1576
  background: color-mix(in oklab, var(--color-primary) 12%, transparent);
1444
1577
  border-color: color-mix(in oklab, var(--color-primary) 25%, transparent);
1445
- color: var(--color-primary);
1578
+ color: var(--color-ink);
1446
1579
  }
1447
- .rk-chip.tone-success[data-v-c94a820d] {
1580
+ .rk-chip.tone-success[data-v-7939c4e0] {
1448
1581
  background: color-mix(in oklab, var(--color-positive) 14%, transparent);
1449
1582
  border-color: color-mix(in oklab, var(--color-positive) 28%, transparent);
1450
- color: color-mix(in oklab, var(--color-positive) 80%, var(--color-ink));
1583
+ color: var(--color-ink);
1451
1584
  }
1452
- .rk-chip.tone-warning[data-v-c94a820d] {
1585
+ .rk-chip.tone-warning[data-v-7939c4e0] {
1453
1586
  background: color-mix(in oklab, var(--color-warning) 16%, transparent);
1454
1587
  border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
1455
- color: color-mix(in oklab, var(--color-warning) 75%, var(--color-ink));
1588
+ color: var(--color-ink);
1456
1589
  }
1457
- .rk-chip.tone-danger[data-v-c94a820d] {
1590
+ .rk-chip.tone-danger[data-v-7939c4e0] {
1458
1591
  background: color-mix(in oklab, var(--color-negative) 12%, transparent);
1459
1592
  border-color: color-mix(in oklab, var(--color-negative) 26%, transparent);
1460
- color: var(--color-negative);
1593
+ color: var(--color-ink);
1461
1594
  }
1462
- .rk-chip-remove[data-v-c94a820d] {
1595
+ .rk-chip-remove[data-v-7939c4e0] {
1463
1596
  display: grid;
1464
1597
  width: 1.125rem;
1465
1598
  height: 1.125rem;
@@ -1470,7 +1603,7 @@ to {
1470
1603
  opacity: 0.7;
1471
1604
  transition: opacity var(--duration-fast) var(--ease-standard);
1472
1605
  }
1473
- .rk-chip-remove[data-v-c94a820d]:hover {
1606
+ .rk-chip-remove[data-v-7939c4e0]:hover {
1474
1607
  opacity: 1;
1475
1608
  background: color-mix(in oklab, currentColor 15%, transparent);
1476
1609
  }
@@ -1956,11 +2089,11 @@ to {
1956
2089
  outline: none;
1957
2090
  }
1958
2091
 
1959
- .rk-popover[data-v-22d8f397] {
2092
+ .rk-popover[data-v-86915db6] {
1960
2093
  position: relative;
1961
2094
  display: inline-flex;
1962
2095
  }
1963
- .rk-popover-panel[data-v-22d8f397] {
2096
+ .rk-popover-panel[data-v-86915db6] {
1964
2097
  position: absolute;
1965
2098
  z-index: 50;
1966
2099
  min-width: 14rem;
@@ -1969,39 +2102,39 @@ to {
1969
2102
  padding: 0.75rem;
1970
2103
  translate: var(--rk-popover-shift, 0) 0;
1971
2104
  }
1972
- .rk-popover-panel[data-v-22d8f397]:focus-visible {
2105
+ .rk-popover-panel[data-v-86915db6]:focus-visible {
1973
2106
  outline: 2px solid var(--color-primary);
1974
2107
  outline-offset: 2px;
1975
2108
  }
1976
- .rk-popover-panel.is-bottom[data-v-22d8f397] {
2109
+ .rk-popover-panel.is-bottom[data-v-86915db6] {
1977
2110
  top: calc(100% + 0.5rem);
1978
2111
  }
1979
- .rk-popover-panel.is-top[data-v-22d8f397] {
2112
+ .rk-popover-panel.is-top[data-v-86915db6] {
1980
2113
  bottom: calc(100% + 0.5rem);
1981
2114
  }
1982
- .rk-popover-panel.is-start[data-v-22d8f397] {
2115
+ .rk-popover-panel.is-start[data-v-86915db6] {
1983
2116
  inset-inline-start: 0;
1984
2117
  }
1985
- .rk-popover-panel.is-end[data-v-22d8f397] {
2118
+ .rk-popover-panel.is-end[data-v-86915db6] {
1986
2119
  inset-inline-end: 0;
1987
2120
  }
1988
- .rk-popover-panel.is-center[data-v-22d8f397] {
2121
+ .rk-popover-panel.is-center[data-v-86915db6] {
1989
2122
  left: 50%;
1990
2123
  translate: calc(-50% + var(--rk-popover-shift, 0px)) 0;
1991
2124
  }
1992
- .rk-popover-enter-active[data-v-22d8f397],
1993
- .rk-popover-leave-active[data-v-22d8f397] {
2125
+ .rk-popover-enter-active[data-v-86915db6],
2126
+ .rk-popover-leave-active[data-v-86915db6] {
1994
2127
  transition:
1995
2128
  opacity var(--duration-fast) var(--ease-standard),
1996
2129
  transform var(--duration-fast) var(--ease-standard);
1997
2130
  }
1998
- .rk-popover-enter-from[data-v-22d8f397],
1999
- .rk-popover-leave-to[data-v-22d8f397] {
2131
+ .rk-popover-enter-from[data-v-86915db6],
2132
+ .rk-popover-leave-to[data-v-86915db6] {
2000
2133
  opacity: 0;
2001
2134
  transform: translateY(-4px) scale(0.98);
2002
2135
  }
2003
- .rk-popover-panel.is-top.rk-popover-enter-from[data-v-22d8f397],
2004
- .rk-popover-panel.is-top.rk-popover-leave-to[data-v-22d8f397] {
2136
+ .rk-popover-panel.is-top.rk-popover-enter-from[data-v-86915db6],
2137
+ .rk-popover-panel.is-top.rk-popover-leave-to[data-v-86915db6] {
2005
2138
  transform: translateY(4px) scale(0.98);
2006
2139
  }
2007
2140
 
@@ -2960,12 +3093,13 @@ to {
2960
3093
  }
2961
3094
  }
2962
3095
 
2963
- .rk-hovercard[data-v-70c09916] {
3096
+ .rk-hovercard[data-v-d3c3b40f] {
2964
3097
  position: relative;
2965
3098
  display: inline-flex;
2966
3099
  }
2967
- .rk-hovercard-panel[data-v-70c09916] {
3100
+ .rk-hovercard-panel[data-v-d3c3b40f] {
2968
3101
  position: absolute;
3102
+ transform: translateX(var(--rk-hovercard-shift, 0px));
2969
3103
  z-index: 40;
2970
3104
  inset-inline-start: 0;
2971
3105
  width: max-content;
@@ -2985,23 +3119,23 @@ to {
2985
3119
  * because the failure it prevents -- a card whose contents cannot be
2986
3120
  * reached -- is total rather than cosmetic.
2987
3121
  */
2988
- .rk-hovercard-panel[data-v-70c09916]::before {
3122
+ .rk-hovercard-panel[data-v-d3c3b40f]::before {
2989
3123
  content: '';
2990
3124
  position: absolute;
2991
3125
  inset-inline: 0;
2992
3126
  height: 0.5rem;
2993
3127
  }
2994
- .rk-hovercard-panel.is-bottom[data-v-70c09916]::before {
3128
+ .rk-hovercard-panel.is-bottom[data-v-d3c3b40f]::before {
2995
3129
  top: -0.5rem;
2996
3130
  }
2997
- .rk-hovercard-panel.is-top[data-v-70c09916]::before {
3131
+ .rk-hovercard-panel.is-top[data-v-d3c3b40f]::before {
2998
3132
  bottom: -0.5rem;
2999
3133
  }
3000
- .rk-hovercard-panel.is-bottom[data-v-70c09916] {
3134
+ .rk-hovercard-panel.is-bottom[data-v-d3c3b40f] {
3001
3135
  top: 100%;
3002
3136
  margin-block-start: 0.5rem;
3003
3137
  }
3004
- .rk-hovercard-panel.is-top[data-v-70c09916] {
3138
+ .rk-hovercard-panel.is-top[data-v-d3c3b40f] {
3005
3139
  bottom: 100%;
3006
3140
  margin-block-end: 0.5rem;
3007
3141
  }
@@ -3547,12 +3681,12 @@ to {
3547
3681
  background: var(--color-primary);
3548
3682
  }
3549
3683
 
3550
- .rk-toolbar[data-v-d49198bf] {
3684
+ .rk-toolbar[data-v-ad876ad1] {
3551
3685
  display: flex;
3552
3686
  align-items: center;
3553
3687
  gap: 0.375rem;
3554
3688
  }
3555
- .rk-toolbar.is-vertical[data-v-d49198bf] {
3689
+ .rk-toolbar.is-vertical[data-v-ad876ad1] {
3556
3690
  flex-direction: column;
3557
3691
  align-items: stretch;
3558
3692
  }