@ceebee/ui 0.5.2 → 0.6.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
@@ -11,6 +11,7 @@
11
11
  --cb-space-7: 3rem;
12
12
  --cb-space-8: 4rem;
13
13
 
14
+ --cb-radius-none: 0;
14
15
  --cb-radius-sm: 0.5rem;
15
16
  --cb-radius-md: 0.875rem;
16
17
  --cb-radius-lg: 1.25rem;
@@ -271,6 +272,20 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
271
272
  :root { --cb-motion-scale: 0; }
272
273
  }
273
274
 
275
+ /* foundation/affix/affix.css */
276
+ .cb-affix {
277
+ position: sticky;
278
+ z-index: var(--cb-z-sticky);
279
+ }
280
+
281
+ .cb-affix--top {
282
+ inset-block-start: var(--cb-affix-offset);
283
+ }
284
+
285
+ .cb-affix--bottom {
286
+ inset-block-end: var(--cb-affix-offset);
287
+ }
288
+
274
289
  /* foundation/divider.css */
275
290
  .cb-divider {
276
291
  border: 0;
@@ -344,6 +359,155 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
344
359
  .cb-container--lg { max-width: 76rem; }
345
360
  .cb-container--full { max-width: none; }
346
361
 
362
+ /* foundation/masonry/masonry.css */
363
+ .cb-masonry {
364
+ column-count: var(--cb-masonry-columns);
365
+ column-gap: var(--cb-masonry-gap);
366
+ }
367
+
368
+ .cb-masonry__item {
369
+ break-inside: avoid;
370
+ margin-block-end: var(--cb-masonry-gap);
371
+ }
372
+
373
+ .cb-masonry__skeleton-item {
374
+ display: block;
375
+ width: 100%;
376
+ height: var(--cb-control-height-lg);
377
+ }
378
+
379
+ .cb-masonry__skeleton-item--0 { height: var(--cb-control-height-md); }
380
+ .cb-masonry__skeleton-item--1 { height: var(--cb-control-height-lg); }
381
+ .cb-masonry__skeleton-item--2 { height: var(--cb-control-height-sm); }
382
+
383
+ @media (max-width: 900px) {
384
+ .cb-masonry { column-count: min(var(--cb-masonry-columns), 2); }
385
+ }
386
+
387
+ @media (max-width: 560px) {
388
+ .cb-masonry { column-count: 1; }
389
+ }
390
+
391
+ /* foundation/page-container/page-container.css */
392
+ .cb-page-container { display: flex; flex-direction: column; gap: var(--cb-space-4); padding-block: var(--cb-space-5); color: var(--cb-fg); font-family: var(--cb-font-sans); }
393
+ .cb-page-container__breadcrumb { color: var(--cb-fg-muted); font-size: var(--cb-text-sm); }
394
+ .cb-page-container__header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--cb-space-4); }
395
+ .cb-page-container__heading { display: flex; flex-direction: column; gap: var(--cb-space-1); min-width: 0; }
396
+ .cb-page-container__title { color: var(--cb-fg); font-size: var(--cb-text-xl); font-weight: var(--cb-weight-semibold); }
397
+ .cb-page-container__subtitle { color: var(--cb-fg-muted); font-size: var(--cb-text-sm); line-height: var(--cb-leading-normal); }
398
+ .cb-page-container__extra { flex: none; }
399
+ .cb-page-container__tabs { border-block-end: var(--cb-border-width) solid var(--cb-border); }
400
+ .cb-page-container__body { min-width: 0; }
401
+ .cb-page-container__skeleton-breadcrumb { inline-size: calc(var(--cb-space-8) * 3); block-size: var(--cb-text-sm); }
402
+ .cb-page-container__skeleton-title { inline-size: calc(var(--cb-space-8) * 5); block-size: var(--cb-text-xl); }
403
+ .cb-page-container__skeleton-subtitle { inline-size: calc(var(--cb-space-8) * 7); block-size: var(--cb-text-sm); }
404
+ .cb-page-container__skeleton-extra { inline-size: calc(var(--cb-space-8) * 2); block-size: var(--cb-control-height-sm); }
405
+ .cb-page-container__skeleton-tabs { inline-size: 100%; block-size: var(--cb-control-height-md); }
406
+ @media (max-width: 40rem) { .cb-page-container__header { flex-direction: column; } }
407
+
408
+ /* foundation/space/space.css */
409
+ .cb-space {
410
+ display: flex;
411
+ gap: var(--cb-space-gap);
412
+ }
413
+
414
+ .cb-space--horizontal { flex-direction: row; }
415
+ .cb-space--vertical { flex-direction: column; }
416
+ .cb-space--wrap { flex-wrap: wrap; }
417
+ .cb-space--align-start { align-items: flex-start; }
418
+ .cb-space--align-center { align-items: center; }
419
+ .cb-space--align-end { align-items: flex-end; }
420
+ .cb-space--align-baseline { align-items: baseline; }
421
+ .cb-space--align-stretch { align-items: stretch; }
422
+
423
+ .cb-space__item {
424
+ display: inline-flex;
425
+ align-items: inherit;
426
+ min-width: 0;
427
+ }
428
+
429
+ .cb-space__split {
430
+ display: inline-flex;
431
+ align-items: center;
432
+ }
433
+
434
+ .cb-space-compact {
435
+ display: inline-flex;
436
+ }
437
+
438
+ .cb-space-compact--horizontal { flex-direction: row; }
439
+ .cb-space-compact--vertical { flex-direction: column; }
440
+ .cb-space-compact > * + * { margin-inline-start: calc(-1 * var(--cb-border-width)); }
441
+ .cb-space-compact--vertical > * + * {
442
+ margin-inline-start: 0;
443
+ margin-block-start: calc(-1 * var(--cb-border-width));
444
+ }
445
+ .cb-space-compact > *:focus-visible {
446
+ position: relative;
447
+ z-index: 1;
448
+ }
449
+
450
+ .cb-space--skeleton .cb-space__skeleton-item {
451
+ width: var(--cb-space-8);
452
+ height: var(--cb-control-height-md);
453
+ }
454
+
455
+ .cb-space--skeleton.cb-space--vertical .cb-space__skeleton-item { width: 100%; }
456
+
457
+ /* foundation/splitter/splitter.css */
458
+ .cb-splitter {
459
+ display: flex;
460
+ min-width: 0;
461
+ min-height: 0;
462
+ }
463
+
464
+ .cb-splitter--horizontal {
465
+ flex-direction: row;
466
+ }
467
+
468
+ .cb-splitter--vertical {
469
+ flex-direction: column;
470
+ }
471
+
472
+ .cb-splitter--handle-sm { --cb-splitter-handle-size: var(--cb-space-1); }
473
+ .cb-splitter--handle-md { --cb-splitter-handle-size: var(--cb-space-2); }
474
+ .cb-splitter--handle-lg { --cb-splitter-handle-size: var(--cb-space-3); }
475
+
476
+ .cb-splitter__pane { min-width: 0; min-height: 0; flex-basis: 0; }
477
+ .cb-splitter__pane--first { flex-grow: var(--cb-splitter-first-grow); }
478
+ .cb-splitter__pane--second { flex-grow: var(--cb-splitter-second-grow); }
479
+
480
+ .cb-splitter__handle {
481
+ position: relative;
482
+ flex: 0 0 var(--cb-splitter-handle-size);
483
+ background: var(--cb-border);
484
+ outline: none;
485
+ touch-action: none;
486
+ }
487
+
488
+ .cb-splitter--horizontal .cb-splitter__handle { cursor: col-resize; }
489
+ .cb-splitter--vertical .cb-splitter__handle { cursor: row-resize; }
490
+ .cb-splitter--horizontal .cb-splitter__handle::before {
491
+ position: absolute;
492
+ inset-block: 0;
493
+ inset-inline: calc(-1 * var(--cb-space-3));
494
+ content: '';
495
+ }
496
+ .cb-splitter--vertical .cb-splitter__handle::before {
497
+ position: absolute;
498
+ inset-inline: 0;
499
+ inset-block: calc(-1 * var(--cb-space-3));
500
+ content: '';
501
+ }
502
+ .cb-splitter__handle:focus-visible {
503
+ background: var(--cb-tone-brand);
504
+ outline: var(--cb-focus-width) solid var(--cb-tone-brand);
505
+ outline-offset: var(--cb-focus-offset);
506
+ }
507
+ .cb-splitter--disabled .cb-splitter__handle { cursor: default; }
508
+ .cb-splitter--skeleton .cb-splitter__handle { background: var(--cb-border); }
509
+ .cb-splitter__skeleton-pane { display: block; width: 100%; height: 100%; }
510
+
347
511
  /* foundation/surface.css */
348
512
  .cb-surface {
349
513
  --cb-surface-accent: var(--cb-tone-neutral);
@@ -443,6 +607,7 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
443
607
  }
444
608
  }
445
609
 
610
+ .cb-radius--none { border-radius: var(--cb-radius-none); }
446
611
  .cb-radius--sm { border-radius: var(--cb-radius-sm); }
447
612
  .cb-radius--md { border-radius: var(--cb-radius-md); }
448
613
  .cb-radius--lg { border-radius: var(--cb-radius-lg); }
@@ -532,8 +697,10 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
532
697
  color: var(--cb-fg-subtle);
533
698
  cursor: pointer;
534
699
  }
535
- .cb-autocomplete__clear:hover,
536
- .cb-autocomplete__trigger:hover { color: var(--cb-fg); background: var(--cb-bg-subtle); }
700
+ @media (hover: hover) {
701
+ .cb-autocomplete__clear:hover,
702
+ .cb-autocomplete__trigger:hover { color: var(--cb-fg); background: var(--cb-bg-subtle); }
703
+ }
537
704
  .cb-autocomplete__clear:focus-visible,
538
705
  .cb-autocomplete__trigger:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
539
706
 
@@ -626,19 +793,27 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
626
793
  .cb-button--lg { height: var(--cb-control-height-lg); padding-inline: var(--cb-space-5); font-size: var(--cb-text-md); }
627
794
 
628
795
  .cb-button--solid { background: var(--cb-button-accent); color: var(--cb-button-fg); }
629
- .cb-button--solid:hover:not(:disabled) { background: color-mix(in oklch, var(--cb-button-accent) 88%, black); }
796
+ @media (hover: hover) {
797
+ .cb-button--solid:hover:not(:disabled) { background: color-mix(in oklch, var(--cb-button-accent) 88%, black); }
798
+ }
630
799
 
631
800
  .cb-button--soft {
632
801
  background: color-mix(in oklch, var(--cb-button-accent) 14%, transparent);
633
802
  color: var(--cb-button-accent);
634
803
  }
635
- .cb-button--soft:hover:not(:disabled) { background: color-mix(in oklch, var(--cb-button-accent) 22%, transparent); }
804
+ @media (hover: hover) {
805
+ .cb-button--soft:hover:not(:disabled) { background: color-mix(in oklch, var(--cb-button-accent) 22%, transparent); }
806
+ }
636
807
 
637
808
  .cb-button--outline { border-color: var(--cb-border-strong); color: var(--cb-fg); background: transparent; }
638
- .cb-button--outline:hover:not(:disabled) { border-color: var(--cb-button-accent); color: var(--cb-button-accent); }
809
+ @media (hover: hover) {
810
+ .cb-button--outline:hover:not(:disabled) { border-color: var(--cb-button-accent); color: var(--cb-button-accent); }
811
+ }
639
812
 
640
813
  .cb-button--ghost { background: transparent; color: var(--cb-fg-muted); }
641
- .cb-button--ghost:hover:not(:disabled) { background: var(--cb-bg-subtle); color: var(--cb-fg); }
814
+ @media (hover: hover) {
815
+ .cb-button--ghost:hover:not(:disabled) { background: var(--cb-bg-subtle); color: var(--cb-fg); }
816
+ }
642
817
 
643
818
  /* Square, no text padding, no gap: the glyph sits on the centre of the control. */
644
819
  .cb-button--icon { padding-inline: 0; gap: 0; }
@@ -670,6 +845,69 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
670
845
  browser's own link styling is taken back off. */
671
846
  .cb-link-button { text-decoration: none; }
672
847
 
848
+ /* form/cascader/cascader.css */
849
+ .cb-cascader {
850
+ display: inline-flex;
851
+ width: 100%;
852
+ min-height: var(--cb-control-height-md);
853
+ align-items: center;
854
+ justify-content: space-between;
855
+ gap: var(--cb-space-2);
856
+ box-sizing: border-box;
857
+ padding-inline: var(--cb-space-3);
858
+ background: var(--cb-surface);
859
+ border: var(--cb-border-width) solid var(--cb-border-strong);
860
+ border-radius: var(--cb-radius-md);
861
+ color: var(--cb-fg);
862
+ font-family: var(--cb-font-sans);
863
+ font-size: var(--cb-text-sm);
864
+ text-align: start;
865
+ cursor: pointer;
866
+ transition: border-color var(--cb-duration-fast) var(--cb-ease-standard), box-shadow var(--cb-duration-fast) var(--cb-ease-standard);
867
+ }
868
+
869
+ @media (hover: hover) {
870
+ .cb-cascader:hover:not(:disabled) { border-color: var(--cb-fg-subtle); }
871
+ }
872
+ .cb-cascader:focus-visible { outline: none; border-color: var(--cb-tone-brand); box-shadow: 0 0 0 var(--cb-focus-width) color-mix(in oklch, var(--cb-tone-brand) 30%, transparent); }
873
+ .cb-cascader[aria-invalid="true"] { border-color: var(--cb-tone-danger); }
874
+ .cb-cascader:disabled { color: var(--cb-fg-subtle); cursor: not-allowed; }
875
+ .cb-cascader__value { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
876
+ .cb-cascader__icon { flex: none; width: var(--cb-space-4); height: var(--cb-space-4); color: var(--cb-fg-subtle); transition: rotate var(--cb-duration-fast) var(--cb-ease-standard); }
877
+ .cb-cascader[aria-expanded="true"] .cb-cascader__icon { rotate: 180deg; }
878
+ .cb-cascader__positioner { z-index: var(--cb-z-dropdown); }
879
+ .cb-cascader__popup {
880
+ max-width: var(--available-width, 100vw);
881
+ overflow-x: auto;
882
+ background: var(--cb-surface-raised);
883
+ border: var(--cb-border-width) solid var(--cb-border);
884
+ border-radius: var(--cb-radius-md);
885
+ box-shadow: var(--cb-shadow-md);
886
+ font-family: var(--cb-font-sans);
887
+ transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance), transform var(--cb-duration-fast) var(--cb-ease-entrance);
888
+ }
889
+ .cb-cascader__popup[data-starting-style], .cb-cascader__popup[data-ending-style] { opacity: 0; transform: translateY(var(--cb-space-1)); }
890
+ .cb-cascader__columns { display: flex; }
891
+ .cb-cascader__column { display: grid; min-width: calc(var(--cb-control-height-lg) * 4); max-height: calc(var(--cb-control-height-lg) * 6); overflow-y: auto; padding: var(--cb-space-1); border-inline-start: var(--cb-border-width) solid var(--cb-border); }
892
+ .cb-cascader__column:first-child { border-inline-start: none; }
893
+ .cb-cascader__option { display: flex; min-height: var(--cb-control-height-sm); align-items: center; justify-content: space-between; gap: var(--cb-space-3); padding: var(--cb-space-2) var(--cb-space-3); border: 0; border-radius: var(--cb-radius-sm); background: transparent; color: var(--cb-fg); font: inherit; font-size: var(--cb-text-sm); text-align: start; cursor: pointer; }
894
+ .cb-cascader__option[data-active] { background: var(--cb-bg-subtle); }
895
+ @media (hover: hover) {
896
+ .cb-cascader__option:hover:not(:disabled) { background: var(--cb-bg-subtle); }
897
+ }
898
+ .cb-cascader__option:disabled { color: var(--cb-fg-subtle); cursor: not-allowed; }
899
+ .cb-cascader__option:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
900
+ .cb-cascader__option-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
901
+ .cb-cascader__option-icon { flex: none; width: var(--cb-space-4); height: var(--cb-space-4); }
902
+ .cb-cascader--motionless, .cb-cascader--motionless .cb-cascader__icon, .cb-cascader__popup--motionless { transition: none; }
903
+ .cb-cascader--skeleton { pointer-events: none; cursor: default; }
904
+ .cb-cascader__skeleton-menu { display: grid; width: 100%; gap: var(--cb-space-1); }
905
+ .cb-cascader__skeleton-label { inline-size: calc(var(--cb-space-8) * 2); block-size: var(--cb-text-sm); }
906
+ @media (prefers-reduced-motion: reduce) {
907
+ .cb-cascader, .cb-cascader__icon, .cb-cascader__popup { transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance); }
908
+ .cb-cascader__popup[data-starting-style], .cb-cascader__popup[data-ending-style] { transform: none; }
909
+ }
910
+
673
911
  /* form/choice.css */
674
912
  .cb-choice { display: flex; align-items: flex-start; gap: var(--cb-space-3); }
675
913
  /* A row whose text is a single line centres on the control instead of hanging from its top. */
@@ -871,6 +1109,23 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
871
1109
  .cb-radio-group--segmented .cb-choice__label { transition: none; }
872
1110
  }
873
1111
 
1112
+ /* form/color-picker/color-picker.css */
1113
+ .cb-color-picker { display: inline-flex; font-family: var(--cb-font-sans); }
1114
+ .cb-color-picker__trigger { display: inline-flex; min-block-size: var(--cb-control-height-md); align-items: center; gap: var(--cb-space-2); padding: var(--cb-space-2) var(--cb-space-3); border: var(--cb-border-width) solid var(--cb-border-strong); border-radius: var(--cb-radius-md); background: var(--cb-surface); color: var(--cb-fg); font: inherit; cursor: pointer; }
1115
+ .cb-color-picker__trigger:focus-visible, .cb-color-picker__option:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
1116
+ .cb-color-picker__trigger:disabled { color: var(--cb-fg-subtle); cursor: not-allowed; }
1117
+ .cb-color-picker__swatch { display: block; inline-size: var(--cb-space-4); block-size: var(--cb-space-4); border: var(--cb-border-width) solid var(--cb-border); border-radius: var(--cb-radius-sm); background: var(--cb-tone-brand); }
1118
+ .cb-color-picker__swatch[data-tone='neutral'] { background: var(--cb-tone-neutral); }.cb-color-picker__swatch[data-tone='success'] { background: var(--cb-tone-success); }.cb-color-picker__swatch[data-tone='warning'] { background: var(--cb-tone-warning); }.cb-color-picker__swatch[data-tone='danger'] { background: var(--cb-tone-danger); }.cb-color-picker__swatch[data-tone='info'] { background: var(--cb-tone-info); }
1119
+ .cb-color-picker__positioner { z-index: var(--cb-z-dropdown); }
1120
+ .cb-color-picker__popup { padding: var(--cb-space-2); background: var(--cb-surface-raised); border: var(--cb-border-width) solid var(--cb-border); border-radius: var(--cb-radius-md); box-shadow: var(--cb-shadow-md); transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance), transform var(--cb-duration-fast) var(--cb-ease-entrance); }
1121
+ .cb-color-picker__popup[data-starting-style], .cb-color-picker__popup[data-ending-style] { opacity: 0; transform: translateY(var(--cb-space-1)); }
1122
+ .cb-color-picker__grid { display: grid; gap: var(--cb-space-2); }.cb-color-picker__row { display: grid; grid-template-columns: repeat(3, var(--cb-control-height-md)); gap: var(--cb-space-2); }
1123
+ .cb-color-picker__option { display: grid; inline-size: var(--cb-control-height-md); block-size: var(--cb-control-height-md); place-items: center; padding: 0; border: var(--cb-border-width) solid transparent; border-radius: var(--cb-radius-sm); background: transparent; cursor: pointer; }
1124
+ .cb-color-picker__option[data-selected] { border-color: var(--cb-fg); }.cb-color-picker__option:disabled { color: var(--cb-fg-subtle); cursor: not-allowed; }
1125
+ .cb-color-picker--skeleton { min-block-size: var(--cb-control-height-md); min-inline-size: calc(var(--cb-space-8) * 4); padding: var(--cb-space-2); border: var(--cb-border-width) solid var(--cb-border); border-radius: var(--cb-radius-md); }.cb-color-picker__skeleton { display: block; inline-size: 100%; block-size: var(--cb-space-4); }
1126
+ .cb-color-picker__popup[data-motion='off'] { transition: none; }.cb-color-picker__popup[data-motion='off'][data-starting-style], .cb-color-picker__popup[data-motion='off'][data-ending-style] { transform: none; }
1127
+ @media (prefers-reduced-motion: reduce) { .cb-color-picker__popup { transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance); }.cb-color-picker__popup[data-starting-style], .cb-color-picker__popup[data-ending-style] { transform: none; } }
1128
+
874
1129
  /* form/date-picker.css */
875
1130
  .cb-date {
876
1131
  display: flex;
@@ -919,10 +1174,12 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
919
1174
  color: var(--cb-fg-subtle);
920
1175
  cursor: pointer;
921
1176
  }
922
- .cb-date__trigger:hover { color: var(--cb-fg); background: var(--cb-bg-subtle); }
1177
+ @media (hover: hover) {
1178
+ .cb-date__trigger:hover { color: var(--cb-fg); background: var(--cb-bg-subtle); }
1179
+ }
923
1180
  .cb-date__trigger:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
924
1181
 
925
- .cb-calendar {
1182
+ .cb-date-picker-calendar {
926
1183
  padding: var(--cb-space-3);
927
1184
  background: var(--cb-surface-raised);
928
1185
  border: var(--cb-border-width) solid var(--cb-border);
@@ -931,12 +1188,12 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
931
1188
  font-family: var(--cb-font-sans);
932
1189
  transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance);
933
1190
  }
934
- .cb-calendar[data-starting-style],
935
- .cb-calendar[data-ending-style] { opacity: 0; }
1191
+ .cb-date-picker-calendar[data-starting-style],
1192
+ .cb-date-picker-calendar[data-ending-style] { opacity: 0; }
936
1193
 
937
- .cb-calendar__head { display: flex; align-items: center; justify-content: space-between; gap: var(--cb-space-2); margin-bottom: var(--cb-space-2); }
938
- .cb-calendar__month { margin: 0; font-size: var(--cb-text-sm); font-weight: var(--cb-weight-medium); color: var(--cb-fg); }
939
- .cb-calendar__nav {
1194
+ .cb-date-picker-calendar__head { display: flex; align-items: center; justify-content: space-between; gap: var(--cb-space-2); margin-bottom: var(--cb-space-2); }
1195
+ .cb-date-picker-calendar__month { margin: 0; font-size: var(--cb-text-sm); font-weight: var(--cb-weight-medium); color: var(--cb-fg); }
1196
+ .cb-date-picker-calendar__nav {
940
1197
  display: inline-flex;
941
1198
  align-items: center;
942
1199
  justify-content: center;
@@ -948,17 +1205,19 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
948
1205
  color: var(--cb-fg-muted);
949
1206
  cursor: pointer;
950
1207
  }
951
- .cb-calendar__nav:hover { background: var(--cb-bg-subtle); color: var(--cb-fg); }
952
- .cb-calendar__nav:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
1208
+ @media (hover: hover) {
1209
+ .cb-date-picker-calendar__nav:hover { background: var(--cb-bg-subtle); color: var(--cb-fg); }
1210
+ }
1211
+ .cb-date-picker-calendar__nav:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
953
1212
 
954
- .cb-calendar__grid { border-collapse: collapse; }
955
- .cb-calendar__grid th {
1213
+ .cb-date-picker-calendar__grid { border-collapse: collapse; }
1214
+ .cb-date-picker-calendar__grid th {
956
1215
  font-size: 0.6875rem;
957
1216
  font-weight: var(--cb-weight-medium);
958
1217
  color: var(--cb-fg-subtle);
959
1218
  padding-bottom: var(--cb-space-1);
960
1219
  }
961
- .cb-calendar__day {
1220
+ .cb-date-picker-calendar__day {
962
1221
  width: 2rem;
963
1222
  height: 2rem;
964
1223
  border: none;
@@ -970,12 +1229,14 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
970
1229
  font-variant-numeric: tabular-nums;
971
1230
  cursor: pointer;
972
1231
  }
973
- .cb-calendar__day:hover:not(:disabled) { background: var(--cb-bg-subtle); }
974
- .cb-calendar__day[data-outside] { color: var(--cb-fg-subtle); }
975
- .cb-calendar__day[data-today] { box-shadow: inset 0 0 0 1px var(--cb-border-strong); }
976
- .cb-calendar__day[data-selected] { background: var(--cb-tone-brand); color: var(--cb-fg-on-brand); font-weight: var(--cb-weight-medium); }
977
- .cb-calendar__day:disabled { opacity: 0.3; cursor: not-allowed; }
978
- .cb-calendar__day:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
1232
+ @media (hover: hover) {
1233
+ .cb-date-picker-calendar__day:hover:not(:disabled) { background: var(--cb-bg-subtle); }
1234
+ }
1235
+ .cb-date-picker-calendar__day[data-outside] { color: var(--cb-fg-subtle); }
1236
+ .cb-date-picker-calendar__day[data-today] { box-shadow: inset 0 0 0 var(--cb-border-width) var(--cb-border-strong); }
1237
+ .cb-date-picker-calendar__day[data-selected] { background: var(--cb-tone-brand); color: var(--cb-fg-on-brand); font-weight: var(--cb-weight-medium); }
1238
+ .cb-date-picker-calendar__day:disabled { opacity: 0.3; cursor: not-allowed; }
1239
+ .cb-date-picker-calendar__day:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
979
1240
 
980
1241
  .cb-times {
981
1242
  max-height: 15rem;
@@ -1001,10 +1262,12 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1001
1262
  text-align: start;
1002
1263
  cursor: pointer;
1003
1264
  }
1004
- .cb-times__option:hover { background: var(--cb-bg-subtle); }
1265
+ @media (hover: hover) {
1266
+ .cb-times__option:hover { background: var(--cb-bg-subtle); }
1267
+ }
1005
1268
  .cb-times__option[data-selected] { background: color-mix(in oklch, var(--cb-tone-brand) 16%, transparent); color: var(--cb-tone-brand); font-weight: var(--cb-weight-medium); }
1006
1269
  .cb-times__option:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
1007
- .cb-calendar__positioner,
1270
+ .cb-date-picker-calendar__positioner,
1008
1271
  .cb-times__positioner { z-index: var(--cb-z-dropdown); }
1009
1272
 
1010
1273
  /* form/field.css */
@@ -1058,6 +1321,48 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1058
1321
  box-shadow: 0 0 0 var(--cb-focus-width) color-mix(in oklch, var(--cb-tone-danger) 30%, transparent);
1059
1322
  }
1060
1323
 
1324
+ /* form/float-button/float-button.css */
1325
+ .cb-float-button {
1326
+ --cb-float-button-accent: var(--cb-tone-brand);
1327
+ --cb-float-button-fg: var(--cb-fg-on-brand);
1328
+ position: fixed;
1329
+ z-index: var(--cb-z-sticky);
1330
+ display: inline-flex;
1331
+ align-items: center;
1332
+ justify-content: center;
1333
+ gap: var(--cb-space-2);
1334
+ border: var(--cb-border-width) solid transparent;
1335
+ border-radius: var(--cb-radius-full);
1336
+ background: var(--cb-float-button-accent);
1337
+ color: var(--cb-float-button-fg);
1338
+ font-family: var(--cb-font-sans);
1339
+ font-weight: var(--cb-weight-medium);
1340
+ cursor: pointer;
1341
+ box-shadow: var(--cb-shadow-md);
1342
+ }
1343
+
1344
+ .cb-float-button:disabled { opacity: 0.55; cursor: not-allowed; }
1345
+ .cb-float-button:focus-visible {
1346
+ outline: var(--cb-focus-width) solid var(--cb-float-button-accent);
1347
+ outline-offset: var(--cb-focus-offset);
1348
+ }
1349
+
1350
+ .cb-float-button[data-tone="neutral"] { --cb-float-button-accent: var(--cb-fg); --cb-float-button-fg: var(--cb-bg); }
1351
+ .cb-float-button[data-tone="info"] { --cb-float-button-accent: var(--cb-tone-info); }
1352
+ .cb-float-button[data-tone="success"] { --cb-float-button-accent: var(--cb-tone-success); }
1353
+ .cb-float-button[data-tone="warning"] { --cb-float-button-accent: var(--cb-tone-warning); --cb-float-button-fg: var(--cb-on-warning); }
1354
+ .cb-float-button[data-tone="danger"] { --cb-float-button-accent: var(--cb-tone-danger); }
1355
+
1356
+ .cb-float-button--bottom-start { inset-block-end: var(--cb-space-5); inset-inline-start: var(--cb-space-5); }
1357
+ .cb-float-button--bottom-end { inset-block-end: var(--cb-space-5); inset-inline-end: var(--cb-space-5); }
1358
+
1359
+ .cb-float-button--sm { width: var(--cb-control-height-sm); height: var(--cb-control-height-sm); font-size: var(--cb-text-sm); }
1360
+ .cb-float-button--md { width: var(--cb-control-height-md); height: var(--cb-control-height-md); font-size: var(--cb-text-sm); }
1361
+ .cb-float-button--lg { width: var(--cb-control-height-lg); height: var(--cb-control-height-lg); font-size: var(--cb-text-md); }
1362
+
1363
+ .cb-float-button--label-visible { width: auto; padding-inline: var(--cb-space-4); }
1364
+ .cb-float-button__icon { display: inline-flex; }
1365
+
1061
1366
  /* form/input-number.css */
1062
1367
  .cb-number {
1063
1368
  display: inline-flex;
@@ -1111,10 +1416,94 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1111
1416
  cursor: pointer;
1112
1417
  transition: background-color var(--cb-duration-fast) var(--cb-ease-standard);
1113
1418
  }
1114
- .cb-number__step:hover:not(:disabled) { background: var(--cb-bg-subtle); color: var(--cb-fg); }
1419
+ @media (hover: hover) {
1420
+ .cb-number__step:hover:not(:disabled) { background: var(--cb-bg-subtle); color: var(--cb-fg); }
1421
+ }
1115
1422
  .cb-number__step:disabled { opacity: 0.35; cursor: not-allowed; }
1116
1423
  .cb-number__step:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
1117
1424
 
1425
+ /* form/mentions/mentions.css */
1426
+ .cb-mentions {
1427
+ box-sizing: border-box;
1428
+ width: 100%;
1429
+ padding: var(--cb-space-3);
1430
+ background: var(--cb-surface);
1431
+ border: var(--cb-border-width) solid var(--cb-border-strong);
1432
+ border-radius: var(--cb-radius-md);
1433
+ transition: border-color var(--cb-duration-fast) var(--cb-ease-standard), box-shadow var(--cb-duration-fast) var(--cb-ease-standard);
1434
+ }
1435
+
1436
+ .cb-mentions:focus-within { border-color: var(--cb-tone-brand); box-shadow: 0 0 0 var(--cb-focus-width) color-mix(in oklch, var(--cb-tone-brand) 30%, transparent); }
1437
+ .cb-mentions[data-disabled] { color: var(--cb-fg-subtle); }
1438
+ .cb-mentions:has(.cb-mentions__textarea[aria-invalid="true"]) { border-color: var(--cb-tone-danger); }
1439
+ .cb-mentions__textarea {
1440
+ display: block;
1441
+ box-sizing: border-box;
1442
+ width: 100%;
1443
+ min-height: var(--cb-control-height-lg);
1444
+ resize: vertical;
1445
+ padding: 0;
1446
+ border: 0;
1447
+ background: transparent;
1448
+ color: var(--cb-fg);
1449
+ font-family: var(--cb-font-sans);
1450
+ font-size: var(--cb-text-sm);
1451
+ line-height: var(--cb-leading-normal);
1452
+ outline: none;
1453
+ }
1454
+
1455
+ .cb-mentions__textarea::placeholder { color: var(--cb-fg-subtle); }
1456
+ .cb-mentions__positioner { z-index: var(--cb-z-dropdown); }
1457
+ .cb-mentions__popup {
1458
+ box-sizing: border-box;
1459
+ min-width: var(--anchor-width, var(--cb-control-height-lg));
1460
+ max-width: var(--available-width, 100vw);
1461
+ max-height: min(calc(var(--cb-control-height-lg) * 6), var(--available-height, calc(var(--cb-control-height-lg) * 6)));
1462
+ overflow-y: auto;
1463
+ padding: var(--cb-space-1);
1464
+ background: var(--cb-surface-raised);
1465
+ border: var(--cb-border-width) solid var(--cb-border);
1466
+ border-radius: var(--cb-radius-md);
1467
+ box-shadow: var(--cb-shadow-md);
1468
+ font-family: var(--cb-font-sans);
1469
+ transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance), transform var(--cb-duration-fast) var(--cb-ease-entrance);
1470
+ }
1471
+
1472
+ .cb-mentions__popup[data-starting-style],
1473
+ .cb-mentions__popup[data-ending-style] { opacity: 0; transform: translateY(var(--cb-space-1)); }
1474
+ .cb-mentions__list { display: grid; }
1475
+ .cb-mentions__option {
1476
+ min-height: var(--cb-control-height-sm);
1477
+ padding: var(--cb-space-2) var(--cb-space-3);
1478
+ border: 0;
1479
+ border-radius: var(--cb-radius-sm);
1480
+ background: transparent;
1481
+ color: var(--cb-fg);
1482
+ font: inherit;
1483
+ font-size: var(--cb-text-sm);
1484
+ line-height: var(--cb-leading-tight);
1485
+ text-align: start;
1486
+ cursor: pointer;
1487
+ }
1488
+
1489
+ /* Keyboard selection is not hover and must stay outside the query: it is how
1490
+ somebody arrowing through the list sees where they are. */
1491
+ .cb-mentions__option[data-active] { background: var(--cb-bg-subtle); }
1492
+ @media (hover: hover) {
1493
+ .cb-mentions__option:hover:not(:disabled) { background: var(--cb-bg-subtle); }
1494
+ }
1495
+ .cb-mentions__option:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
1496
+ .cb-mentions__option:disabled { color: var(--cb-fg-subtle); cursor: not-allowed; }
1497
+ .cb-mentions--motionless,
1498
+ .cb-mentions__popup--motionless { transition: none; }
1499
+
1500
+ @media (prefers-reduced-motion: reduce) {
1501
+ .cb-mentions,
1502
+ .cb-mentions__popup { transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance); }
1503
+ .cb-mentions__popup[data-starting-style],
1504
+ .cb-mentions__popup[data-ending-style] { transform: none; }
1505
+ }
1506
+
1118
1507
  /* form/rate.css */
1119
1508
  .cb-rate {
1120
1509
  display: inline-flex;
@@ -1134,7 +1523,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1134
1523
  border-radius: var(--cb-radius-sm);
1135
1524
  transition: transform var(--cb-duration-fast) var(--cb-ease-standard);
1136
1525
  }
1137
- .cb-rate__star:hover { transform: scale(1.12); }
1526
+ @media (hover: hover) {
1527
+ .cb-rate__star:hover { transform: scale(1.12); }
1528
+ }
1138
1529
  .cb-rate__star:focus-visible {
1139
1530
  outline: var(--cb-focus-width) solid var(--cb-tone-brand);
1140
1531
  outline-offset: var(--cb-focus-offset);
@@ -1144,7 +1535,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1144
1535
  already filled or not, which is the whole feedback. */
1145
1536
  @media (prefers-reduced-motion: reduce) {
1146
1537
  .cb-rate__star { transition: none; }
1147
- .cb-rate__star:hover { transform: none; }
1538
+ @media (hover: hover) {
1539
+ .cb-rate__star:hover { transform: none; }
1540
+ }
1148
1541
  }
1149
1542
 
1150
1543
  /* form/select.css */
@@ -1172,7 +1565,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1172
1565
  .cb-select--sm { height: var(--cb-control-height-sm); }
1173
1566
  .cb-select--md { height: var(--cb-control-height-md); }
1174
1567
  .cb-select--lg { height: var(--cb-control-height-lg); }
1175
- .cb-select:hover:not(:disabled) { border-color: var(--cb-fg-subtle); }
1568
+ @media (hover: hover) {
1569
+ .cb-select:hover:not(:disabled) { border-color: var(--cb-fg-subtle); }
1570
+ }
1176
1571
  .cb-select:focus-visible {
1177
1572
  outline: none;
1178
1573
  border-color: var(--cb-tone-brand);
@@ -1237,54 +1632,275 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1237
1632
  .cb-select__item[data-disabled] { color: var(--cb-fg-subtle); text-decoration: line-through; cursor: not-allowed; }
1238
1633
  .cb-select__check { order: 2; display: inline-flex; justify-content: center; color: var(--cb-tone-brand); }
1239
1634
 
1240
- /* form/upload.css */
1241
- .cb-filedrop { display: flex; flex-direction: column; gap: var(--cb-space-3); font-family: var(--cb-font-sans); }
1242
- .cb-filedrop__zone {
1243
- cursor: pointer;
1635
+ /* form/slider/slider.css */
1636
+ .cb-slider {
1637
+ --cb-slider-accent: var(--cb-tone-brand);
1638
+ --cb-slider-thumb-size: var(--cb-control-height-sm);
1639
+ display: block;
1640
+ color: var(--cb-fg);
1641
+ font-family: var(--cb-font-sans);
1642
+ }
1643
+
1644
+ .cb-slider[data-tone="neutral"] { --cb-slider-accent: var(--cb-tone-neutral); }
1645
+ .cb-slider[data-tone="info"] { --cb-slider-accent: var(--cb-tone-info); }
1646
+ .cb-slider[data-tone="success"] { --cb-slider-accent: var(--cb-tone-success); }
1647
+ .cb-slider[data-tone="warning"] { --cb-slider-accent: var(--cb-tone-warning); }
1648
+ .cb-slider[data-tone="danger"] { --cb-slider-accent: var(--cb-tone-danger); }
1649
+
1650
+ .cb-slider--sm { --cb-slider-thumb-size: var(--cb-control-height-sm); }
1651
+ .cb-slider--md { --cb-slider-thumb-size: var(--cb-control-height-md); }
1652
+ .cb-slider--lg { --cb-slider-thumb-size: var(--cb-control-height-lg); }
1653
+
1654
+ .cb-slider__control {
1655
+ position: relative;
1244
1656
  display: flex;
1245
- flex-direction: column;
1246
1657
  align-items: center;
1247
- gap: var(--cb-space-2);
1248
- padding: var(--cb-space-6) var(--cb-space-4);
1249
- border: 1px dashed var(--cb-border-strong);
1250
- border-radius: var(--cb-radius-lg);
1251
- background: var(--cb-surface);
1252
- text-align: center;
1253
- transition: border-color var(--cb-duration-fast) var(--cb-ease-standard),
1254
- background-color var(--cb-duration-fast) var(--cb-ease-standard);
1658
+ min-inline-size: 100%;
1659
+ block-size: var(--cb-slider-thumb-size);
1660
+ touch-action: none;
1255
1661
  }
1256
- .cb-filedrop__zone[data-over] {
1257
- border-color: var(--cb-tone-brand);
1258
- background: color-mix(in oklch, var(--cb-tone-brand) 8%, var(--cb-surface));
1662
+
1663
+ .cb-slider__track {
1664
+ inline-size: 100%;
1665
+ block-size: var(--cb-space-2);
1666
+ overflow: hidden;
1667
+ border-radius: var(--cb-radius-full);
1668
+ background: var(--cb-bg-subtle);
1259
1669
  }
1260
- .cb-filedrop__zone[data-disabled] { opacity: 0.55; }
1261
- .cb-filedrop__icon { color: var(--cb-fg-subtle); }
1262
- .cb-filedrop__button {
1263
- color: var(--cb-tone-brand);
1264
- font-size: var(--cb-text-sm);
1265
- font-weight: var(--cb-weight-medium);
1266
- border-radius: var(--cb-radius-sm);
1267
- padding: var(--cb-space-1) var(--cb-space-2);
1670
+
1671
+ .cb-slider__indicator { background: var(--cb-slider-accent); }
1672
+
1673
+ .cb-slider__thumb {
1674
+ box-sizing: border-box;
1675
+ inline-size: var(--cb-slider-thumb-size);
1676
+ block-size: var(--cb-slider-thumb-size);
1677
+ border: var(--cb-border-width) solid var(--cb-slider-accent);
1678
+ border-radius: var(--cb-radius-full);
1679
+ background: var(--cb-surface-raised);
1680
+ box-shadow: var(--cb-shadow-sm);
1681
+ cursor: grab;
1682
+ transition: box-shadow var(--cb-duration-fast) var(--cb-ease-standard);
1268
1683
  }
1269
- .cb-filedrop__zone:hover .cb-filedrop__button { background: color-mix(in oklch, var(--cb-tone-brand) 12%, transparent); }
1270
- /* The input is what receives focus, so the ring is drawn on the zone around it. */
1271
- .cb-filedrop__zone:has(input:focus-visible) {
1272
- outline: var(--cb-focus-width) solid var(--cb-tone-brand);
1684
+
1685
+ .cb-slider__thumb:focus-visible {
1686
+ outline: var(--cb-focus-width) solid var(--cb-slider-accent);
1273
1687
  outline-offset: var(--cb-focus-offset);
1274
1688
  }
1275
- .cb-filedrop__zone[data-disabled] { cursor: not-allowed; }
1276
- .cb-filedrop__hint { margin: 0; font-size: var(--cb-text-xs); color: var(--cb-fg-subtle); }
1277
1689
 
1278
- .cb-filedrop__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--cb-space-2); }
1279
- .cb-filedrop__file {
1280
- margin: 0;
1281
- display: flex;
1690
+ .cb-slider__thumb[data-dragging] { cursor: grabbing; box-shadow: var(--cb-shadow-md); }
1691
+ .cb-slider__thumb[data-disabled] { cursor: not-allowed; border-color: var(--cb-fg-subtle); }
1692
+ .cb-slider[data-disabled] { color: var(--cb-fg-subtle); }
1693
+ .cb-slider[data-invalid] .cb-slider__track { outline: var(--cb-focus-width) solid var(--cb-tone-danger); outline-offset: var(--cb-focus-offset-inset); }
1694
+ .cb-slider--motionless .cb-slider__thumb { transition: none; }
1695
+
1696
+ .cb-slider--vertical { inline-size: var(--cb-slider-thumb-size); }
1697
+ .cb-slider--vertical .cb-slider__control {
1698
+ min-inline-size: auto;
1699
+ min-block-size: calc(var(--cb-control-height-lg) * 4);
1700
+ block-size: auto;
1701
+ justify-content: center;
1702
+ }
1703
+ .cb-slider--vertical .cb-slider__track { inline-size: var(--cb-space-2); block-size: 100%; }
1704
+
1705
+ .cb-slider--skeleton .cb-slider__control { pointer-events: none; }
1706
+ .cb-slider--skeleton .cb-slider__track { position: absolute; }
1707
+ .cb-slider--skeleton .cb-slider__thumb {
1708
+ position: absolute;
1709
+ inset-inline-start: var(--cb-space-0);
1710
+ box-shadow: none;
1711
+ }
1712
+ .cb-slider--skeleton.cb-slider--range .cb-slider__thumb:last-child { inset-inline-start: auto; inset-inline-end: var(--cb-space-0); }
1713
+ .cb-slider--skeleton.cb-slider--vertical .cb-slider__track { inset-inline-start: 50%; transform: translateX(-50%); }
1714
+ .cb-slider--skeleton.cb-slider--vertical .cb-slider__thumb { inset-block-end: var(--cb-space-0); }
1715
+ .cb-slider--skeleton.cb-slider--vertical.cb-slider--range .cb-slider__thumb:last-child { inset-block-end: auto; inset-block-start: var(--cb-space-0); }
1716
+
1717
+ @media (prefers-reduced-motion: reduce) {
1718
+ .cb-slider__thumb { transition: none; }
1719
+ }
1720
+
1721
+ /* form/transfer/transfer.css */
1722
+ .cb-transfer {
1723
+ display: grid;
1724
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
1282
1725
  align-items: center;
1283
1726
  gap: var(--cb-space-3);
1284
- padding: var(--cb-space-2) var(--cb-space-3);
1285
- border: var(--cb-border-width) solid var(--cb-border);
1286
- border-radius: var(--cb-radius-md);
1287
- background: var(--cb-surface);
1727
+ color: var(--cb-fg);
1728
+ font-family: var(--cb-font-sans);
1729
+ font-size: var(--cb-text-sm);
1730
+ }
1731
+
1732
+ .cb-transfer__list {
1733
+ display: grid;
1734
+ min-width: 0;
1735
+ min-block-size: calc(var(--cb-control-height-md) * 6);
1736
+ margin: 0;
1737
+ padding: var(--cb-space-3);
1738
+ border: var(--cb-border-width) solid var(--cb-border);
1739
+ border-radius: var(--cb-radius-md);
1740
+ background: var(--cb-surface-raised);
1741
+ }
1742
+
1743
+ .cb-transfer__title {
1744
+ grid-column: 1;
1745
+ padding: 0;
1746
+ font-weight: var(--cb-weight-semibold);
1747
+ }
1748
+
1749
+ .cb-transfer__count {
1750
+ grid-column: 2;
1751
+ grid-row: 1;
1752
+ justify-self: end;
1753
+ color: var(--cb-fg-subtle);
1754
+ font-variant-numeric: tabular-nums;
1755
+ }
1756
+
1757
+ .cb-transfer__items {
1758
+ grid-column: 1 / -1;
1759
+ display: grid;
1760
+ align-content: start;
1761
+ gap: var(--cb-space-1);
1762
+ margin: var(--cb-space-3) 0 0;
1763
+ padding: 0;
1764
+ list-style: none;
1765
+ }
1766
+
1767
+ .cb-transfer__item {
1768
+ display: flex;
1769
+ align-items: flex-start;
1770
+ gap: var(--cb-space-2);
1771
+ min-width: 0;
1772
+ padding: var(--cb-space-2);
1773
+ border-radius: var(--cb-radius-sm);
1774
+ }
1775
+
1776
+ .cb-transfer__item:has(.cb-transfer__checkbox:focus-visible) {
1777
+ outline: var(--cb-focus-width) solid var(--cb-tone-brand);
1778
+ outline-offset: var(--cb-focus-offset-inset);
1779
+ }
1780
+
1781
+ .cb-transfer__item[data-disabled] { color: var(--cb-fg-subtle); }
1782
+
1783
+ .cb-transfer__checkbox {
1784
+ flex: none;
1785
+ inline-size: var(--cb-space-4);
1786
+ block-size: var(--cb-space-4);
1787
+ margin: 0;
1788
+ accent-color: var(--cb-tone-brand);
1789
+ }
1790
+
1791
+ .cb-transfer__content {
1792
+ display: grid;
1793
+ gap: var(--cb-space-1);
1794
+ min-width: 0;
1795
+ }
1796
+
1797
+ .cb-transfer__label {
1798
+ color: inherit;
1799
+ cursor: pointer;
1800
+ }
1801
+
1802
+ .cb-transfer__checkbox:disabled + .cb-transfer__content .cb-transfer__label { cursor: not-allowed; }
1803
+ .cb-transfer__description { color: var(--cb-fg-muted); font-size: var(--cb-text-xs); }
1804
+
1805
+ .cb-transfer__actions {
1806
+ display: grid;
1807
+ gap: var(--cb-space-2);
1808
+ }
1809
+
1810
+ .cb-transfer__action {
1811
+ display: inline-flex;
1812
+ inline-size: var(--cb-control-height-sm);
1813
+ block-size: var(--cb-control-height-sm);
1814
+ align-items: center;
1815
+ justify-content: center;
1816
+ padding: 0;
1817
+ border: var(--cb-border-width) solid var(--cb-border);
1818
+ border-radius: var(--cb-radius-sm);
1819
+ background: var(--cb-surface-raised);
1820
+ color: var(--cb-fg);
1821
+ font: inherit;
1822
+ cursor: pointer;
1823
+ }
1824
+
1825
+ @media (hover: hover) {
1826
+ .cb-transfer__action:hover:not(:disabled) { background: var(--cb-bg-subtle); }
1827
+ }
1828
+ .cb-transfer__action:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
1829
+ .cb-transfer__action:disabled { color: var(--cb-fg-subtle); cursor: not-allowed; }
1830
+
1831
+ .cb-transfer--skeleton { pointer-events: none; }
1832
+ .cb-transfer__skeleton-title { inline-size: calc(var(--cb-space-8) * 3); block-size: var(--cb-text-sm); }
1833
+ .cb-transfer__skeleton-checkbox { inline-size: var(--cb-space-4); block-size: var(--cb-space-4); border-radius: var(--cb-radius-sm); }
1834
+ .cb-transfer__skeleton-label { flex: 1; block-size: var(--cb-text-sm); }
1835
+ .cb-transfer__skeleton-action { inline-size: var(--cb-control-height-sm); block-size: var(--cb-control-height-sm); border-radius: var(--cb-radius-sm); }
1836
+
1837
+ /* form/tree-select/tree-select.css */
1838
+ .cb-tree-select__positioner { z-index: var(--cb-z-dropdown); }
1839
+ .cb-tree-select { display: inline-flex; align-items: center; justify-content: space-between; gap: var(--cb-space-2); width: 100%; min-height: var(--cb-control-height-md); padding: var(--cb-space-2) var(--cb-space-3); border: var(--cb-border-width) solid var(--cb-border-strong); border-radius: var(--cb-radius-md); background: var(--cb-surface); color: var(--cb-fg); font-family: var(--cb-font-sans); font-size: var(--cb-text-sm); text-align: start; transition: border-color var(--cb-duration-fast) var(--cb-ease-standard), box-shadow var(--cb-duration-fast) var(--cb-ease-standard); }
1840
+ @media (hover: hover) {
1841
+ .cb-tree-select:hover:not(:disabled) { border-color: var(--cb-fg-subtle); }
1842
+ }
1843
+ .cb-tree-select:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
1844
+ .cb-tree-select[aria-invalid="true"] { border-color: var(--cb-tone-danger); }
1845
+ .cb-tree-select:disabled { color: var(--cb-fg-subtle); cursor: not-allowed; }
1846
+ .cb-tree-select__value { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1847
+ .cb-tree-select__placeholder, .cb-tree-select__icon { color: var(--cb-fg-subtle); }
1848
+ .cb-tree-select__icon { flex: none; }
1849
+ .cb-tree-select__popup { min-width: var(--anchor-width, var(--cb-control-height-lg)); max-width: var(--available-width, 100vw); max-height: min(calc(var(--cb-control-height-lg) * 7), var(--available-height)); overflow: auto; padding: var(--cb-space-2); border: var(--cb-border-width) solid var(--cb-border); border-radius: var(--cb-radius-md); background: var(--cb-surface-raised); box-shadow: var(--cb-shadow-md); transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance), transform var(--cb-duration-fast) var(--cb-ease-entrance); }
1850
+ .cb-tree-select__popup[data-starting-style], .cb-tree-select__popup[data-ending-style] { opacity: 0; transform: translateY(var(--cb-space-1)); }
1851
+ .cb-tree-select--motionless, .cb-tree-select__popup--motionless { transition: none; }
1852
+ @media (prefers-reduced-motion: reduce) { .cb-tree-select, .cb-tree-select__popup { transition: none; } .cb-tree-select__popup[data-starting-style], .cb-tree-select__popup[data-ending-style] { transform: none; } }
1853
+
1854
+ /* form/upload.css */
1855
+ .cb-filedrop { display: flex; flex-direction: column; gap: var(--cb-space-3); font-family: var(--cb-font-sans); }
1856
+ .cb-filedrop__zone {
1857
+ cursor: pointer;
1858
+ display: flex;
1859
+ flex-direction: column;
1860
+ align-items: center;
1861
+ gap: var(--cb-space-2);
1862
+ padding: var(--cb-space-6) var(--cb-space-4);
1863
+ border: 1px dashed var(--cb-border-strong);
1864
+ border-radius: var(--cb-radius-lg);
1865
+ background: var(--cb-surface);
1866
+ text-align: center;
1867
+ transition: border-color var(--cb-duration-fast) var(--cb-ease-standard),
1868
+ background-color var(--cb-duration-fast) var(--cb-ease-standard);
1869
+ }
1870
+ .cb-filedrop__zone[data-over] {
1871
+ border-color: var(--cb-tone-brand);
1872
+ background: color-mix(in oklch, var(--cb-tone-brand) 8%, var(--cb-surface));
1873
+ }
1874
+ .cb-filedrop__zone[data-disabled] { opacity: 0.55; }
1875
+ .cb-filedrop__icon { color: var(--cb-fg-subtle); }
1876
+ .cb-filedrop__button {
1877
+ color: var(--cb-tone-brand);
1878
+ font-size: var(--cb-text-sm);
1879
+ font-weight: var(--cb-weight-medium);
1880
+ border-radius: var(--cb-radius-sm);
1881
+ padding: var(--cb-space-1) var(--cb-space-2);
1882
+ }
1883
+ @media (hover: hover) {
1884
+ .cb-filedrop__zone:hover .cb-filedrop__button { background: color-mix(in oklch, var(--cb-tone-brand) 12%, transparent); }
1885
+ }
1886
+ /* The input is what receives focus, so the ring is drawn on the zone around it. */
1887
+ .cb-filedrop__zone:has(input:focus-visible) {
1888
+ outline: var(--cb-focus-width) solid var(--cb-tone-brand);
1889
+ outline-offset: var(--cb-focus-offset);
1890
+ }
1891
+ .cb-filedrop__zone[data-disabled] { cursor: not-allowed; }
1892
+ .cb-filedrop__hint { margin: 0; font-size: var(--cb-text-xs); color: var(--cb-fg-subtle); }
1893
+
1894
+ .cb-filedrop__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--cb-space-2); }
1895
+ .cb-filedrop__file {
1896
+ margin: 0;
1897
+ display: flex;
1898
+ align-items: center;
1899
+ gap: var(--cb-space-3);
1900
+ padding: var(--cb-space-2) var(--cb-space-3);
1901
+ border: var(--cb-border-width) solid var(--cb-border);
1902
+ border-radius: var(--cb-radius-md);
1903
+ background: var(--cb-surface);
1288
1904
  font-size: var(--cb-text-sm);
1289
1905
  }
1290
1906
  .cb-filedrop__name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--cb-fg); }
@@ -1298,7 +1914,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1298
1914
  padding: var(--cb-space-1);
1299
1915
  border-radius: var(--cb-radius-sm);
1300
1916
  }
1301
- .cb-filedrop__remove:hover { color: var(--cb-tone-danger); background: color-mix(in oklch, var(--cb-tone-danger) 10%, transparent); }
1917
+ @media (hover: hover) {
1918
+ .cb-filedrop__remove:hover { color: var(--cb-tone-danger); background: color-mix(in oklch, var(--cb-tone-danger) 10%, transparent); }
1919
+ }
1302
1920
  .cb-filedrop__remove:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-danger); outline-offset: var(--cb-focus-offset); }
1303
1921
 
1304
1922
  /* feedback/badge.css */
@@ -1368,7 +1986,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1368
1986
  flex: none; border: none; background: transparent; color: var(--cb-fg-subtle);
1369
1987
  cursor: pointer; border-radius: var(--cb-radius-sm); padding: var(--cb-space-1); height: fit-content;
1370
1988
  }
1371
- .cb-alert__close:hover { color: var(--cb-fg); background: color-mix(in oklch, var(--cb-fg) 8%, transparent); }
1989
+ @media (hover: hover) {
1990
+ .cb-alert__close:hover { color: var(--cb-fg); background: color-mix(in oklch, var(--cb-fg) 8%, transparent); }
1991
+ }
1372
1992
  .cb-alert__close:focus-visible { outline: var(--cb-focus-width) solid var(--cb-alert-accent); outline-offset: var(--cb-focus-offset); }
1373
1993
 
1374
1994
  .cb-empty {
@@ -1399,6 +2019,92 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1399
2019
  .cb-empty__description { margin: 0; font-size: var(--cb-text-sm); color: var(--cb-fg-muted); max-width: 32rem; }
1400
2020
  .cb-empty__actions { display: flex; gap: var(--cb-space-2); margin-top: var(--cb-space-3); }
1401
2021
 
2022
+ /* feedback/notification/notification.css */
2023
+ .cb-notification {
2024
+ --cb-notification-accent: var(--cb-tone-info);
2025
+ box-sizing: border-box;
2026
+ display: grid;
2027
+ grid-template-columns: auto minmax(0, 1fr);
2028
+ gap: var(--cb-space-3);
2029
+ width: 100%;
2030
+ padding: var(--cb-space-4);
2031
+ color: var(--cb-fg);
2032
+ background: var(--cb-surface-raised);
2033
+ border: var(--cb-border-width) solid var(--cb-border);
2034
+ border-inline-start-color: var(--cb-notification-accent);
2035
+ border-radius: var(--cb-radius-md);
2036
+ box-shadow: var(--cb-shadow-sm);
2037
+ font-family: var(--cb-font-sans);
2038
+ }
2039
+
2040
+ .cb-notification[data-tone='neutral'] { --cb-notification-accent: var(--cb-tone-neutral); }
2041
+ .cb-notification[data-tone='success'] { --cb-notification-accent: var(--cb-tone-success); }
2042
+ .cb-notification[data-tone='warning'] { --cb-notification-accent: var(--cb-tone-warning); }
2043
+ .cb-notification[data-tone='danger'] { --cb-notification-accent: var(--cb-tone-danger); }
2044
+
2045
+ .cb-notification__icon {
2046
+ display: inline-flex;
2047
+ color: var(--cb-notification-accent);
2048
+ }
2049
+
2050
+ .cb-notification__content {
2051
+ display: grid;
2052
+ gap: var(--cb-space-2);
2053
+ min-width: 0;
2054
+ }
2055
+
2056
+ .cb-notification__title {
2057
+ color: var(--cb-fg);
2058
+ font-size: var(--cb-text-md);
2059
+ font-weight: var(--cb-weight-semibold);
2060
+ line-height: var(--cb-leading-normal);
2061
+ }
2062
+
2063
+ .cb-notification__description {
2064
+ color: var(--cb-fg-muted);
2065
+ font-size: var(--cb-text-sm);
2066
+ line-height: var(--cb-leading-normal);
2067
+ }
2068
+
2069
+ .cb-notification__actions {
2070
+ display: flex;
2071
+ flex-wrap: wrap;
2072
+ align-items: center;
2073
+ gap: var(--cb-space-2);
2074
+ margin-top: var(--cb-space-1);
2075
+ }
2076
+
2077
+ .cb-notification__skeleton-icon {
2078
+ width: var(--cb-space-5);
2079
+ height: var(--cb-space-5);
2080
+ border-radius: var(--cb-radius-full);
2081
+ }
2082
+
2083
+ .cb-notification__skeleton-title,
2084
+ .cb-notification__skeleton-line,
2085
+ .cb-notification__skeleton-action {
2086
+ display: block;
2087
+ border-radius: var(--cb-radius-sm);
2088
+ }
2089
+
2090
+ .cb-notification__skeleton-title {
2091
+ width: 58%;
2092
+ height: var(--cb-space-4);
2093
+ }
2094
+
2095
+ .cb-notification__skeleton-line {
2096
+ width: 100%;
2097
+ height: var(--cb-space-3);
2098
+ }
2099
+
2100
+ .cb-notification__skeleton-line[data-last] { width: 76%; }
2101
+
2102
+ .cb-notification__skeleton-action {
2103
+ width: calc(var(--cb-space-8) * 2);
2104
+ height: var(--cb-control-height-sm);
2105
+ }
2106
+
2107
+
1402
2108
  /* feedback/progress.css */
1403
2109
  .cb-spin {
1404
2110
  --cb-spin-accent: var(--cb-tone-brand);
@@ -1472,6 +2178,89 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1472
2178
  text-align: end;
1473
2179
  }
1474
2180
 
2181
+ /* feedback/result/result.css */
2182
+ .cb-result {
2183
+ display: flex;
2184
+ flex-direction: column;
2185
+ align-items: center;
2186
+ gap: var(--cb-space-3);
2187
+ padding: var(--cb-space-8) var(--cb-space-5);
2188
+ color: var(--cb-fg);
2189
+ font-family: var(--cb-font-sans);
2190
+ text-align: center;
2191
+ }
2192
+
2193
+ .cb-result__icon {
2194
+ display: inline-flex;
2195
+ align-items: center;
2196
+ justify-content: center;
2197
+ min-width: var(--cb-space-7);
2198
+ min-height: var(--cb-space-7);
2199
+ padding: var(--cb-space-2);
2200
+ border-radius: var(--cb-radius-full);
2201
+ background: color-mix(
2202
+ in oklch,
2203
+ var(--cb-result-accent) calc(var(--cb-tint-strength) * 100%),
2204
+ transparent
2205
+ );
2206
+ color: var(--cb-result-accent);
2207
+ font-size: var(--cb-text-sm);
2208
+ font-weight: var(--cb-weight-semibold);
2209
+ }
2210
+
2211
+ .cb-result__mark {
2212
+ font-size: var(--cb-text-lg);
2213
+ font-weight: var(--cb-weight-semibold);
2214
+ line-height: var(--cb-leading-tight);
2215
+ }
2216
+
2217
+ .cb-result[data-tone="neutral"] { --cb-result-accent: var(--cb-fg-muted); }
2218
+ .cb-result[data-tone="brand"] { --cb-result-accent: var(--cb-tone-brand); }
2219
+ .cb-result[data-tone="info"] { --cb-result-accent: var(--cb-tone-info); }
2220
+ .cb-result[data-tone="success"] { --cb-result-accent: var(--cb-tone-success); }
2221
+ .cb-result[data-tone="warning"] { --cb-result-accent: var(--cb-tone-warning); }
2222
+ .cb-result[data-tone="danger"] { --cb-result-accent: var(--cb-tone-danger); }
2223
+
2224
+ .cb-result__title {
2225
+ margin: 0;
2226
+ color: var(--cb-fg);
2227
+ font-size: var(--cb-text-lg);
2228
+ font-weight: var(--cb-weight-semibold);
2229
+ line-height: var(--cb-leading-tight);
2230
+ }
2231
+
2232
+ .cb-result__description {
2233
+ max-width: calc(var(--cb-space-8) * 8);
2234
+ margin: 0;
2235
+ color: var(--cb-fg-muted);
2236
+ font-size: var(--cb-text-sm);
2237
+ line-height: var(--cb-leading-normal);
2238
+ }
2239
+
2240
+ .cb-result__extra,
2241
+ .cb-result__content {
2242
+ display: flex;
2243
+ flex-wrap: wrap;
2244
+ justify-content: center;
2245
+ gap: var(--cb-space-2);
2246
+ }
2247
+
2248
+ .cb-result__content {
2249
+ width: 100%;
2250
+ margin-top: var(--cb-space-2);
2251
+ }
2252
+
2253
+ .cb-result--skeleton { gap: var(--cb-space-3); }
2254
+ .cb-result__skeleton-icon,
2255
+ .cb-result__skeleton-title,
2256
+ .cb-result__skeleton-description,
2257
+ .cb-result__skeleton-action { flex: none; }
2258
+ .cb-result__skeleton-icon { width: var(--cb-space-8); height: var(--cb-space-8); border-radius: var(--cb-radius-full); }
2259
+ .cb-result__skeleton-title { width: var(--cb-space-7); height: var(--cb-space-3); }
2260
+ .cb-result__skeleton-description { width: var(--cb-space-8); height: var(--cb-space-2); }
2261
+ .cb-result__skeleton-action { width: var(--cb-space-7); height: var(--cb-space-6); }
2262
+ .cb-result__skeleton-extra { display: flex; gap: var(--cb-space-2); }
2263
+
1475
2264
  /* feedback/skeleton.css */
1476
2265
  .cb-skeleton {
1477
2266
  display: block;
@@ -1524,7 +2313,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1524
2313
  transition: border-color var(--cb-duration-fast) var(--cb-ease-standard),
1525
2314
  background-color var(--cb-duration-fast) var(--cb-ease-standard);
1526
2315
  }
1527
- .cb-tag--pressable:hover { border-color: var(--cb-tone-brand); }
2316
+ @media (hover: hover) {
2317
+ .cb-tag--pressable:hover { border-color: var(--cb-tone-brand); }
2318
+ }
1528
2319
  .cb-tag--pressable:focus-visible {
1529
2320
  outline: var(--cb-focus-width) solid var(--cb-tone-brand);
1530
2321
  outline-offset: var(--cb-focus-offset);
@@ -1545,7 +2336,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1545
2336
  opacity: 0.7;
1546
2337
  cursor: pointer;
1547
2338
  }
1548
- .cb-tag__close:hover { opacity: 1; }
2339
+ @media (hover: hover) {
2340
+ .cb-tag__close:hover { opacity: 1; }
2341
+ }
1549
2342
  .cb-tag__close:focus-visible {
1550
2343
  outline: var(--cb-focus-width) solid currentColor;
1551
2344
  outline-offset: 1px;
@@ -1632,7 +2425,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1632
2425
  cursor: pointer;
1633
2426
  transition: background-color var(--cb-duration-fast) var(--cb-ease-standard);
1634
2427
  }
1635
- .cb-toast__action:hover { background: color-mix(in oklch, var(--cb-toast-accent) 26%, transparent); }
2428
+ @media (hover: hover) {
2429
+ .cb-toast__action:hover { background: color-mix(in oklch, var(--cb-toast-accent) 26%, transparent); }
2430
+ }
1636
2431
  /* An action-less toast must not reserve the row it would have sat in. */
1637
2432
  .cb-toast:not(:has(.cb-toast__action)) { grid-template-areas: "icon content close"; }
1638
2433
  .cb-toast__close {
@@ -1644,26 +2439,93 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1644
2439
  padding: var(--cb-space-1);
1645
2440
  border-radius: var(--cb-radius-sm);
1646
2441
  }
1647
- .cb-toast__close:hover { color: var(--cb-fg); }
2442
+ @media (hover: hover) {
2443
+ .cb-toast__close:hover { color: var(--cb-fg); }
2444
+ }
1648
2445
  .cb-toast__close:focus-visible,
1649
2446
  .cb-toast__action:focus-visible { outline: var(--cb-focus-width) solid var(--cb-toast-accent); outline-offset: var(--cb-focus-offset); }
1650
2447
 
1651
- /* overlay/command-palette.css */
1652
- .cb-palette__backdrop {
1653
- position: fixed;
2448
+ /* feedback/watermark/watermark.css */
2449
+ .cb-watermark {
2450
+ position: relative;
2451
+ color: var(--cb-fg);
2452
+ }
2453
+
2454
+ .cb-watermark__content {
2455
+ position: relative;
2456
+ z-index: 1;
2457
+ }
2458
+
2459
+ .cb-watermark__marks {
2460
+ position: absolute;
2461
+ z-index: 2;
1654
2462
  inset: 0;
1655
- z-index: var(--cb-z-command-backdrop);
1656
- background: var(--cb-scrim);
1657
- backdrop-filter: blur(2px);
1658
- transition: opacity var(--cb-duration-base) var(--cb-ease-entrance);
2463
+ width: 100%;
2464
+ height: 100%;
2465
+ overflow: hidden;
2466
+ pointer-events: none;
2467
+ user-select: none;
2468
+ color: var(--cb-watermark-color);
1659
2469
  }
1660
- .cb-palette__backdrop[data-starting-style],
1661
- .cb-palette__backdrop[data-ending-style] { opacity: 0; }
1662
2470
 
1663
- .cb-palette {
1664
- position: fixed;
1665
- top: 12vh;
1666
- left: 50%;
2471
+ .cb-watermark__mark {
2472
+ font-family: var(--cb-font-sans);
2473
+ font-size: var(--cb-watermark-size);
2474
+ font-weight: var(--cb-weight-medium);
2475
+ line-height: var(--cb-leading-tight);
2476
+ fill: color-mix(in oklch, currentColor calc(var(--cb-tint-strength) * 100%), transparent);
2477
+ }
2478
+
2479
+ .cb-watermark--sm {
2480
+ --cb-watermark-tile-size: calc(var(--cb-space-8) * 4);
2481
+ --cb-watermark-size: var(--cb-text-xs);
2482
+ }
2483
+
2484
+ .cb-watermark--md {
2485
+ --cb-watermark-tile-size: calc(var(--cb-space-8) * 6);
2486
+ --cb-watermark-size: var(--cb-text-sm);
2487
+ }
2488
+
2489
+ .cb-watermark--lg {
2490
+ --cb-watermark-tile-size: calc(var(--cb-space-8) * 8);
2491
+ --cb-watermark-size: var(--cb-text-md);
2492
+ }
2493
+
2494
+ .cb-watermark__pattern {
2495
+ font-size: var(--cb-watermark-tile-size);
2496
+ }
2497
+
2498
+ .cb-watermark[data-tone='brand'] { --cb-watermark-color: var(--cb-tone-brand); }
2499
+ .cb-watermark[data-tone='info'] { --cb-watermark-color: var(--cb-tone-info); }
2500
+ .cb-watermark[data-tone='success'] { --cb-watermark-color: var(--cb-tone-success); }
2501
+ .cb-watermark[data-tone='warning'] { --cb-watermark-color: var(--cb-tone-warning); }
2502
+ .cb-watermark[data-tone='danger'] { --cb-watermark-color: var(--cb-tone-danger); }
2503
+ .cb-watermark[data-tone='neutral'] { --cb-watermark-color: var(--cb-fg-muted); }
2504
+
2505
+ .cb-watermark--vertical .cb-watermark__mark {
2506
+ writing-mode: vertical-rl;
2507
+ }
2508
+
2509
+ .cb-watermark--skeleton .cb-watermark__marks {
2510
+ z-index: 2;
2511
+ }
2512
+
2513
+ /* overlay/command-palette.css */
2514
+ .cb-palette__backdrop {
2515
+ position: fixed;
2516
+ inset: 0;
2517
+ z-index: var(--cb-z-command-backdrop);
2518
+ background: var(--cb-scrim);
2519
+ backdrop-filter: blur(2px);
2520
+ transition: opacity var(--cb-duration-base) var(--cb-ease-entrance);
2521
+ }
2522
+ .cb-palette__backdrop[data-starting-style],
2523
+ .cb-palette__backdrop[data-ending-style] { opacity: 0; }
2524
+
2525
+ .cb-palette {
2526
+ position: fixed;
2527
+ top: 12vh;
2528
+ left: 50%;
1667
2529
  translate: -50% 0;
1668
2530
  z-index: var(--cb-z-command);
1669
2531
  display: flex;
@@ -1868,6 +2730,175 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1868
2730
  }
1869
2731
  .cb-modal__footer { flex: none; display: flex; justify-content: flex-end; gap: var(--cb-space-2); margin-top: var(--cb-space-2); }
1870
2732
 
2733
+ .cb-modal-confirm__heading {
2734
+ display: flex;
2735
+ align-items: center;
2736
+ gap: var(--cb-space-2);
2737
+ }
2738
+
2739
+ .cb-modal-confirm__icon {
2740
+ display: inline-flex;
2741
+ flex: none;
2742
+ color: var(--cb-modal-confirm-accent, var(--cb-tone-warning));
2743
+ }
2744
+
2745
+ .cb-modal-confirm__icon[data-tone="neutral"] { --cb-modal-confirm-accent: var(--cb-tone-neutral); }
2746
+ .cb-modal-confirm__icon[data-tone="brand"] { --cb-modal-confirm-accent: var(--cb-tone-brand); }
2747
+ .cb-modal-confirm__icon[data-tone="info"] { --cb-modal-confirm-accent: var(--cb-tone-info); }
2748
+ .cb-modal-confirm__icon[data-tone="success"] { --cb-modal-confirm-accent: var(--cb-tone-success); }
2749
+ .cb-modal-confirm__icon[data-tone="warning"] { --cb-modal-confirm-accent: var(--cb-tone-warning); }
2750
+ .cb-modal-confirm__icon[data-tone="danger"] { --cb-modal-confirm-accent: var(--cb-tone-danger); }
2751
+
2752
+ .cb-modal-skeleton {
2753
+ display: flex;
2754
+ flex-direction: column;
2755
+ gap: var(--cb-space-3);
2756
+ box-sizing: border-box;
2757
+ width: 100%;
2758
+ padding: var(--cb-space-5);
2759
+ color: var(--cb-fg);
2760
+ background: var(--cb-surface-raised);
2761
+ border: var(--cb-border-width) solid var(--cb-border);
2762
+ border-radius: var(--cb-radius-lg);
2763
+ box-shadow: var(--cb-shadow-lg);
2764
+ }
2765
+
2766
+ .cb-modal-skeleton__body {
2767
+ padding-block: var(--cb-space-2);
2768
+ }
2769
+
2770
+ /* overlay/popconfirm/popconfirm.css */
2771
+ .cb-popconfirm__positioner {
2772
+ z-index: var(--cb-z-popover);
2773
+ }
2774
+
2775
+ .cb-popconfirm__positioner[data-side='top'] { padding-block-end: var(--cb-space-2); }
2776
+ .cb-popconfirm__positioner[data-side='bottom'] { padding-block-start: var(--cb-space-2); }
2777
+ .cb-popconfirm__positioner[data-side='left'] { padding-inline-end: var(--cb-space-2); }
2778
+ .cb-popconfirm__positioner[data-side='right'] { padding-inline-start: var(--cb-space-2); }
2779
+
2780
+ .cb-popconfirm {
2781
+ --cb-popconfirm-accent: var(--cb-tone-warning);
2782
+ box-sizing: border-box;
2783
+ display: grid;
2784
+ grid-template-columns: auto minmax(0, 1fr);
2785
+ gap: var(--cb-space-3);
2786
+ max-width: calc(var(--cb-space-8) * 11);
2787
+ padding: var(--cb-space-4);
2788
+ color: var(--cb-fg);
2789
+ background: var(--cb-surface-raised);
2790
+ border: var(--cb-border-width) solid var(--cb-border);
2791
+ border-radius: var(--cb-radius-md);
2792
+ box-shadow: var(--cb-shadow-md);
2793
+ font-family: var(--cb-font-sans);
2794
+ font-size: var(--cb-text-sm);
2795
+ transition: opacity var(--cb-duration-fast) var(--cb-ease-entrance),
2796
+ transform var(--cb-duration-fast) var(--cb-ease-entrance);
2797
+ }
2798
+
2799
+ .cb-popconfirm[data-tone='neutral'] { --cb-popconfirm-accent: var(--cb-tone-neutral); }
2800
+ .cb-popconfirm[data-tone='danger'] { --cb-popconfirm-accent: var(--cb-tone-danger); }
2801
+ .cb-popconfirm[data-icon='none'] { grid-template-columns: minmax(0, 1fr); }
2802
+
2803
+ .cb-popconfirm[data-starting-style],
2804
+ .cb-popconfirm[data-ending-style] {
2805
+ opacity: 0;
2806
+ transform: scale(0.96);
2807
+ }
2808
+
2809
+ .cb-popconfirm[data-motion='off'] {
2810
+ transition: none;
2811
+ }
2812
+
2813
+ .cb-popconfirm[data-motion='off'][data-starting-style],
2814
+ .cb-popconfirm[data-motion='off'][data-ending-style] {
2815
+ transform: none;
2816
+ }
2817
+
2818
+ .cb-popconfirm__arrow {
2819
+ --cb-arrow-bg: var(--cb-surface-raised);
2820
+ --cb-arrow-border: var(--cb-border);
2821
+ position: absolute;
2822
+ display: block;
2823
+ width: var(--cb-space-4);
2824
+ height: var(--cb-space-2);
2825
+ overflow: visible;
2826
+ pointer-events: none;
2827
+ }
2828
+
2829
+ .cb-popconfirm__arrow[data-side='bottom'] { top: calc(var(--cb-space-2) * -1); }
2830
+ .cb-popconfirm__arrow[data-side='top'] { bottom: calc(var(--cb-space-2) * -1); rotate: 180deg; }
2831
+ .cb-popconfirm__arrow[data-side='left'] { right: calc(var(--cb-space-3) * -1); rotate: 90deg; }
2832
+ .cb-popconfirm__arrow[data-side='right'] { left: calc(var(--cb-space-3) * -1); rotate: -90deg; }
2833
+
2834
+ .cb-popconfirm__icon {
2835
+ display: inline-flex;
2836
+ color: var(--cb-popconfirm-accent);
2837
+ }
2838
+
2839
+ .cb-popconfirm__content {
2840
+ display: grid;
2841
+ gap: var(--cb-space-2);
2842
+ min-width: 0;
2843
+ }
2844
+
2845
+ .cb-popconfirm__title {
2846
+ margin: 0;
2847
+ color: var(--cb-fg);
2848
+ font: inherit;
2849
+ font-weight: var(--cb-weight-semibold);
2850
+ }
2851
+
2852
+ .cb-popconfirm__description {
2853
+ margin: 0;
2854
+ color: var(--cb-fg-muted);
2855
+ line-height: var(--cb-leading-normal);
2856
+ }
2857
+
2858
+ .cb-popconfirm__actions {
2859
+ display: flex;
2860
+ justify-content: flex-end;
2861
+ gap: var(--cb-space-2);
2862
+ margin-top: var(--cb-space-1);
2863
+ }
2864
+
2865
+ .cb-popconfirm--skeleton {
2866
+ position: relative;
2867
+ width: calc(var(--cb-space-8) * 9);
2868
+ }
2869
+
2870
+ .cb-popconfirm__skeleton-icon {
2871
+ width: var(--cb-space-5);
2872
+ height: var(--cb-space-5);
2873
+ border-radius: var(--cb-radius-full);
2874
+ }
2875
+
2876
+ .cb-popconfirm__skeleton-title,
2877
+ .cb-popconfirm__skeleton-description,
2878
+ .cb-popconfirm__skeleton-action {
2879
+ display: block;
2880
+ height: var(--cb-space-3);
2881
+ border-radius: var(--cb-radius-sm);
2882
+ }
2883
+
2884
+ .cb-popconfirm__skeleton-title { width: calc(var(--cb-space-8) * 6); }
2885
+ .cb-popconfirm__skeleton-description { align-self: stretch; }
2886
+ .cb-popconfirm__skeleton-action {
2887
+ width: var(--cb-space-7);
2888
+ height: var(--cb-control-height-sm);
2889
+ }
2890
+
2891
+ @media (prefers-reduced-motion: reduce) {
2892
+ .cb-popconfirm {
2893
+ transition: opacity var(--cb-duration-fast) linear;
2894
+ }
2895
+
2896
+ .cb-popconfirm[data-starting-style],
2897
+ .cb-popconfirm[data-ending-style] {
2898
+ transform: none;
2899
+ }
2900
+ }
2901
+
1871
2902
  /* overlay/popover.css */
1872
2903
  .cb-popover-positioner { z-index: var(--cb-z-popover); }
1873
2904
  .cb-tooltip-positioner { z-index: var(--cb-z-tooltip); }
@@ -1948,6 +2979,534 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
1948
2979
  .cb-tooltip[data-starting-style],
1949
2980
  .cb-tooltip[data-ending-style] { opacity: 0; }
1950
2981
 
2982
+ /* data/calendar/calendar.css */
2983
+ .cb-calendar {
2984
+ display: grid;
2985
+ gap: var(--cb-space-3);
2986
+ box-sizing: border-box;
2987
+ padding: var(--cb-space-4);
2988
+ color: var(--cb-fg);
2989
+ background: var(--cb-surface-raised);
2990
+ border: var(--cb-border-width) solid var(--cb-border);
2991
+ border-radius: var(--cb-radius-lg);
2992
+ font-family: var(--cb-font-sans);
2993
+ }
2994
+
2995
+ .cb-calendar__header {
2996
+ display: grid;
2997
+ grid-template-columns: var(--cb-control-height-sm) minmax(0, 1fr) var(--cb-control-height-sm);
2998
+ align-items: center;
2999
+ gap: var(--cb-space-2);
3000
+ }
3001
+
3002
+ .cb-calendar__month {
3003
+ margin: 0;
3004
+ color: var(--cb-fg);
3005
+ font-size: var(--cb-text-sm);
3006
+ font-weight: var(--cb-weight-medium);
3007
+ line-height: var(--cb-leading-tight);
3008
+ text-align: center;
3009
+ }
3010
+
3011
+ .cb-calendar__nav,
3012
+ .cb-calendar__day {
3013
+ border: 0;
3014
+ border-radius: var(--cb-radius-sm);
3015
+ font: inherit;
3016
+ cursor: pointer;
3017
+ }
3018
+
3019
+ .cb-calendar__nav {
3020
+ display: inline-flex;
3021
+ width: var(--cb-control-height-sm);
3022
+ height: var(--cb-control-height-sm);
3023
+ align-items: center;
3024
+ justify-content: center;
3025
+ background: transparent;
3026
+ color: var(--cb-fg-muted);
3027
+ }
3028
+
3029
+ @media (hover: hover) {
3030
+ .cb-calendar__nav:hover:not(:disabled) { color: var(--cb-fg); background: var(--cb-bg-subtle); }
3031
+ }
3032
+ .cb-calendar__nav svg { width: var(--cb-space-4); height: var(--cb-space-4); }
3033
+
3034
+ .cb-calendar__weekdays,
3035
+ .cb-calendar__week {
3036
+ display: grid;
3037
+ grid-template-columns: repeat(7, minmax(0, 1fr));
3038
+ }
3039
+
3040
+ .cb-calendar__weekdays {
3041
+ color: var(--cb-fg-subtle);
3042
+ font-size: var(--cb-text-xs);
3043
+ font-weight: var(--cb-weight-medium);
3044
+ line-height: var(--cb-leading-tight);
3045
+ text-align: center;
3046
+ }
3047
+
3048
+ .cb-calendar__grid { display: grid; }
3049
+ .cb-calendar__cell { display: grid; place-items: center; }
3050
+
3051
+ .cb-calendar__day {
3052
+ width: var(--cb-control-height-sm);
3053
+ height: var(--cb-control-height-sm);
3054
+ background: transparent;
3055
+ color: var(--cb-fg);
3056
+ font-size: var(--cb-text-sm);
3057
+ font-variant-numeric: tabular-nums;
3058
+ }
3059
+
3060
+ @media (hover: hover) {
3061
+ .cb-calendar__day:hover:not(:disabled) { background: var(--cb-bg-subtle); }
3062
+ }
3063
+ .cb-calendar__day[data-outside] { color: var(--cb-fg-subtle); }
3064
+ .cb-calendar__day[data-today] { box-shadow: inset 0 0 0 var(--cb-border-width) var(--cb-border-strong); }
3065
+ .cb-calendar__day[data-selected] { background: var(--cb-tone-brand); color: var(--cb-fg-on-brand); font-weight: var(--cb-weight-medium); }
3066
+ .cb-calendar__day:disabled { cursor: not-allowed; color: var(--cb-fg-subtle); }
3067
+ .cb-calendar__nav:focus-visible,
3068
+ .cb-calendar__day:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
3069
+
3070
+ .cb-calendar--skeleton .cb-calendar__header { pointer-events: none; }
3071
+ .cb-calendar--skeleton .cb-calendar__weekdays { align-items: center; justify-items: center; }
3072
+ .cb-calendar--skeleton .cb-calendar__grid { grid-template-columns: repeat(7, minmax(0, 1fr)); }
3073
+ .cb-calendar__skeleton-day { width: var(--cb-control-height-sm); height: var(--cb-control-height-sm); justify-self: center; }
3074
+
3075
+ /* data/card/card.css */
3076
+ .cb-card {
3077
+ --cb-card-padding: var(--cb-space-5);
3078
+ --cb-card-gap: var(--cb-space-4);
3079
+ overflow: hidden;
3080
+ transition:
3081
+ transform calc(var(--cb-duration-base) * var(--cb-motion-scale)) var(--cb-ease-standard),
3082
+ box-shadow calc(var(--cb-duration-base) * var(--cb-motion-scale)) var(--cb-ease-standard);
3083
+ }
3084
+
3085
+ .cb-card--sm {
3086
+ --cb-card-padding: var(--cb-space-3);
3087
+ --cb-card-gap: var(--cb-space-2);
3088
+ }
3089
+
3090
+ .cb-card--lg {
3091
+ --cb-card-padding: var(--cb-space-6);
3092
+ --cb-card-gap: var(--cb-space-5);
3093
+ }
3094
+
3095
+ .cb-card--nested {
3096
+ --cb-card-padding: var(--cb-space-4);
3097
+ --cb-card-gap: var(--cb-space-3);
3098
+ box-shadow: var(--cb-surface-material-shadow);
3099
+ }
3100
+
3101
+ @media (hover: hover) {
3102
+ .cb-card--hoverable:hover {
3103
+ transform: translateY(calc(var(--cb-space-1) * -1 * var(--cb-motion-scale)));
3104
+ box-shadow: var(--cb-surface-material-shadow), var(--cb-shadow-md);
3105
+ }
3106
+ }
3107
+
3108
+ .cb-card__cover {
3109
+ overflow: hidden;
3110
+ line-height: 0;
3111
+ }
3112
+
3113
+ .cb-card__cover > * {
3114
+ display: block;
3115
+ width: 100%;
3116
+ }
3117
+
3118
+ .cb-card__header {
3119
+ display: flex;
3120
+ align-items: center;
3121
+ justify-content: space-between;
3122
+ gap: var(--cb-card-gap);
3123
+ padding: var(--cb-card-padding);
3124
+ border-bottom: var(--cb-border-width) solid var(--cb-border);
3125
+ }
3126
+
3127
+ .cb-card__title {
3128
+ min-width: 0;
3129
+ color: var(--cb-fg);
3130
+ font-size: var(--cb-text-lg);
3131
+ font-weight: var(--cb-weight-semibold);
3132
+ line-height: var(--cb-leading-tight);
3133
+ }
3134
+
3135
+ .cb-card__extra {
3136
+ flex: none;
3137
+ color: var(--cb-fg-muted);
3138
+ }
3139
+
3140
+ .cb-card__tabs {
3141
+ padding: var(--cb-card-padding);
3142
+ }
3143
+
3144
+ .cb-card__body {
3145
+ padding: var(--cb-card-padding);
3146
+ }
3147
+
3148
+ .cb-card__body[aria-busy="true"] {
3149
+ cursor: progress;
3150
+ }
3151
+
3152
+ .cb-card__actions {
3153
+ display: flex;
3154
+ align-items: center;
3155
+ flex-wrap: wrap;
3156
+ gap: var(--cb-space-2);
3157
+ padding: var(--cb-space-3) var(--cb-card-padding);
3158
+ border-top: var(--cb-border-width) solid var(--cb-border);
3159
+ }
3160
+
3161
+ .cb-card-meta {
3162
+ display: flex;
3163
+ align-items: flex-start;
3164
+ gap: var(--cb-space-3);
3165
+ }
3166
+
3167
+ .cb-card-meta__avatar {
3168
+ flex: none;
3169
+ }
3170
+
3171
+ .cb-card-meta__content {
3172
+ display: flex;
3173
+ min-width: 0;
3174
+ flex: 1;
3175
+ flex-direction: column;
3176
+ gap: var(--cb-space-1);
3177
+ }
3178
+
3179
+ .cb-card-meta__title {
3180
+ color: var(--cb-fg);
3181
+ font-weight: var(--cb-weight-medium);
3182
+ line-height: var(--cb-leading-tight);
3183
+ }
3184
+
3185
+ .cb-card-meta__description {
3186
+ color: var(--cb-fg-muted);
3187
+ font-size: var(--cb-text-sm);
3188
+ line-height: var(--cb-leading-normal);
3189
+ }
3190
+
3191
+ .cb-card-grid {
3192
+ overflow: hidden;
3193
+ border: var(--cb-border-width) solid var(--cb-border);
3194
+ border-radius: var(--cb-radius-md);
3195
+ }
3196
+
3197
+ .cb-card-grid > * {
3198
+ min-width: 0;
3199
+ padding: var(--cb-space-4);
3200
+ border: var(--cb-border-width) solid var(--cb-border);
3201
+ }
3202
+
3203
+ .cb-card__skeleton-cover {
3204
+ aspect-ratio: 16 / 9;
3205
+ }
3206
+
3207
+ .cb-card__skeleton-actions {
3208
+ justify-content: flex-end;
3209
+ }
3210
+
3211
+ @media (prefers-reduced-motion: reduce) {
3212
+ .cb-card {
3213
+ transition: none;
3214
+ }
3215
+
3216
+ @media (hover: hover) {
3217
+ .cb-card--hoverable:hover {
3218
+ transform: none;
3219
+ }
3220
+ }
3221
+ }
3222
+
3223
+ /* data/collapse/collapse.css */
3224
+ .cb-collapse {
3225
+ --cb-collapse-padding-block: var(--cb-space-4);
3226
+ --cb-collapse-padding-inline: var(--cb-space-4);
3227
+ overflow: hidden;
3228
+ color: var(--cb-fg);
3229
+ background: var(--cb-surface-raised);
3230
+ border-radius: var(--cb-radius-lg);
3231
+ }
3232
+
3233
+ .cb-collapse--sm {
3234
+ --cb-collapse-padding-block: var(--cb-space-2);
3235
+ --cb-collapse-padding-inline: var(--cb-space-3);
3236
+ }
3237
+
3238
+ .cb-collapse--lg {
3239
+ --cb-collapse-padding-block: var(--cb-space-5);
3240
+ --cb-collapse-padding-inline: var(--cb-space-5);
3241
+ }
3242
+
3243
+ .cb-collapse--bordered {
3244
+ border: var(--cb-border-width) solid var(--cb-border);
3245
+ }
3246
+
3247
+ .cb-collapse__item + .cb-collapse__item {
3248
+ border-top: var(--cb-border-width) solid var(--cb-border);
3249
+ }
3250
+
3251
+ .cb-collapse__heading {
3252
+ margin: 0;
3253
+ font: inherit;
3254
+ }
3255
+
3256
+ .cb-collapse__trigger {
3257
+ box-sizing: border-box;
3258
+ display: flex;
3259
+ width: 100%;
3260
+ align-items: center;
3261
+ gap: var(--cb-space-3);
3262
+ padding: var(--cb-collapse-padding-block) var(--cb-collapse-padding-inline);
3263
+ border: 0;
3264
+ border-radius: 0;
3265
+ background: transparent;
3266
+ color: var(--cb-fg);
3267
+ font-family: var(--cb-font-sans);
3268
+ font-size: var(--cb-text-sm);
3269
+ font-weight: var(--cb-weight-medium);
3270
+ line-height: var(--cb-leading-tight);
3271
+ text-align: start;
3272
+ cursor: pointer;
3273
+ transition: background-color var(--cb-duration-fast) var(--cb-ease-standard);
3274
+ }
3275
+
3276
+ @media (hover: hover) {
3277
+ .cb-collapse__trigger:hover:not([data-disabled]) {
3278
+ background: var(--cb-bg-subtle);
3279
+ }
3280
+ }
3281
+
3282
+ .cb-collapse__trigger:focus-visible {
3283
+ position: relative;
3284
+ z-index: 1;
3285
+ outline: var(--cb-focus-width) solid var(--cb-tone-brand);
3286
+ outline-offset: var(--cb-focus-offset-inset);
3287
+ }
3288
+
3289
+ .cb-collapse__trigger[data-disabled] {
3290
+ cursor: not-allowed;
3291
+ opacity: 0.45;
3292
+ }
3293
+
3294
+ .cb-collapse__label {
3295
+ min-width: 0;
3296
+ flex: 1;
3297
+ }
3298
+
3299
+ .cb-collapse__icon {
3300
+ display: inline-flex;
3301
+ flex: none;
3302
+ width: 1rem;
3303
+ height: 1rem;
3304
+ align-items: center;
3305
+ justify-content: center;
3306
+ transition: transform calc(var(--cb-duration-base) * var(--cb-motion-scale)) var(--cb-ease-standard);
3307
+ }
3308
+
3309
+ .cb-collapse__icon svg {
3310
+ width: 100%;
3311
+ height: 100%;
3312
+ }
3313
+
3314
+ .cb-collapse__trigger[data-panel-open] .cb-collapse__icon {
3315
+ transform: rotate(180deg);
3316
+ }
3317
+
3318
+ .cb-collapse--icon-end .cb-collapse__icon {
3319
+ order: 2;
3320
+ }
3321
+
3322
+ .cb-collapse__panel {
3323
+ box-sizing: border-box;
3324
+ height: var(--accordion-panel-height);
3325
+ overflow: hidden;
3326
+ opacity: 1;
3327
+ font-family: var(--cb-font-sans);
3328
+ font-size: var(--cb-text-sm);
3329
+ line-height: var(--cb-leading-normal);
3330
+ transition:
3331
+ height calc(var(--cb-duration-base) * var(--cb-motion-scale)) var(--cb-ease-standard),
3332
+ opacity calc(var(--cb-duration-fast) * var(--cb-motion-scale)) var(--cb-ease-standard);
3333
+ }
3334
+
3335
+ .cb-collapse__panel[data-starting-style],
3336
+ .cb-collapse__panel[data-ending-style] {
3337
+ height: 0;
3338
+ opacity: 0;
3339
+ }
3340
+
3341
+ .cb-collapse__content {
3342
+ padding: 0 var(--cb-collapse-padding-inline) var(--cb-collapse-padding-block);
3343
+ color: var(--cb-fg-muted);
3344
+ }
3345
+
3346
+ .cb-collapse--motionless .cb-collapse__icon,
3347
+ .cb-collapse--motionless .cb-collapse__panel {
3348
+ transition: none;
3349
+ }
3350
+
3351
+ .cb-collapse--skeleton .cb-collapse__trigger {
3352
+ cursor: default;
3353
+ pointer-events: none;
3354
+ }
3355
+
3356
+ @media (prefers-reduced-motion: reduce) {
3357
+ .cb-collapse__icon {
3358
+ transition: none;
3359
+ }
3360
+
3361
+ .cb-collapse__trigger[data-panel-open] .cb-collapse__icon {
3362
+ transform: none;
3363
+ }
3364
+
3365
+ .cb-collapse__panel {
3366
+ transition: opacity var(--cb-duration-fast) var(--cb-ease-standard);
3367
+ }
3368
+
3369
+ .cb-collapse__panel[data-starting-style],
3370
+ .cb-collapse__panel[data-ending-style] {
3371
+ height: var(--accordion-panel-height);
3372
+ opacity: 0;
3373
+ }
3374
+ }
3375
+
3376
+ /* data/descriptions/descriptions.css */
3377
+ .cb-descriptions {
3378
+ color: var(--cb-fg);
3379
+ }
3380
+
3381
+ .cb-descriptions__header {
3382
+ display: flex;
3383
+ align-items: center;
3384
+ justify-content: space-between;
3385
+ gap: var(--cb-space-4);
3386
+ margin-bottom: var(--cb-space-3);
3387
+ }
3388
+
3389
+ .cb-descriptions__title {
3390
+ color: var(--cb-fg);
3391
+ font-size: var(--cb-text-lg);
3392
+ font-weight: var(--cb-weight-semibold);
3393
+ line-height: var(--cb-leading-tight);
3394
+ }
3395
+
3396
+ .cb-descriptions__extra {
3397
+ color: var(--cb-fg-muted);
3398
+ }
3399
+
3400
+ .cb-descriptions__list {
3401
+ display: grid;
3402
+ grid-template-columns: repeat(var(--cb-descriptions-columns), minmax(0, 1fr));
3403
+ margin: 0;
3404
+ }
3405
+
3406
+ .cb-descriptions__item {
3407
+ min-width: 0;
3408
+ display: grid;
3409
+ grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
3410
+ gap: var(--cb-space-2);
3411
+ padding: var(--cb-descriptions-padding);
3412
+ }
3413
+
3414
+ .cb-descriptions--vertical .cb-descriptions__item {
3415
+ display: flex;
3416
+ flex-direction: column;
3417
+ gap: var(--cb-space-1);
3418
+ }
3419
+
3420
+ .cb-descriptions__item--span-2 { grid-column: span 2; }
3421
+ .cb-descriptions__item--span-3 { grid-column: span 3; }
3422
+ .cb-descriptions__item--span-4 { grid-column: span 4; }
3423
+
3424
+ .cb-descriptions[data-columns="1"] > .cb-descriptions__list > .cb-descriptions__item--span-2,
3425
+ .cb-descriptions[data-columns="1"] > .cb-descriptions__list > .cb-descriptions__item--span-3,
3426
+ .cb-descriptions[data-columns="1"] > .cb-descriptions__list > .cb-descriptions__item--span-4 { grid-column: span 1; }
3427
+ .cb-descriptions[data-columns="2"] > .cb-descriptions__list > .cb-descriptions__item--span-3,
3428
+ .cb-descriptions[data-columns="2"] > .cb-descriptions__list > .cb-descriptions__item--span-4 { grid-column: span 2; }
3429
+ .cb-descriptions[data-columns="3"] > .cb-descriptions__list > .cb-descriptions__item--span-4 { grid-column: span 3; }
3430
+
3431
+ .cb-descriptions__label,
3432
+ .cb-descriptions__value {
3433
+ min-width: 0;
3434
+ margin: 0;
3435
+ overflow-wrap: anywhere;
3436
+ }
3437
+
3438
+ .cb-descriptions__label {
3439
+ color: var(--cb-fg-muted);
3440
+ font-weight: var(--cb-weight-medium);
3441
+ }
3442
+
3443
+ .cb-descriptions__label::after {
3444
+ content: ':';
3445
+ }
3446
+
3447
+ .cb-descriptions--without-colon .cb-descriptions__label::after {
3448
+ content: none;
3449
+ }
3450
+
3451
+ .cb-descriptions__value {
3452
+ color: var(--cb-fg);
3453
+ }
3454
+
3455
+ .cb-descriptions--sm { --cb-descriptions-padding: var(--cb-space-2); }
3456
+ .cb-descriptions--md { --cb-descriptions-padding: var(--cb-space-3); }
3457
+ .cb-descriptions--lg { --cb-descriptions-padding: var(--cb-space-4); }
3458
+
3459
+ .cb-descriptions--bordered {
3460
+ border: var(--cb-border-width) solid var(--cb-border);
3461
+ border-radius: var(--cb-radius-md);
3462
+ overflow: hidden;
3463
+ }
3464
+
3465
+ .cb-descriptions--bordered > .cb-descriptions__list {
3466
+ gap: var(--cb-border-width);
3467
+ background: var(--cb-border);
3468
+ }
3469
+
3470
+ .cb-descriptions--bordered > .cb-descriptions__list > .cb-descriptions__item {
3471
+ background: var(--cb-surface);
3472
+ }
3473
+
3474
+ .cb-descriptions--bordered .cb-descriptions__label {
3475
+ color: var(--cb-fg-muted);
3476
+ }
3477
+
3478
+ .cb-descriptions--skeleton .cb-skeleton {
3479
+ display: block;
3480
+ }
3481
+
3482
+ .cb-descriptions__skeleton-label .cb-skeleton {
3483
+ width: var(--cb-space-8);
3484
+ max-width: 100%;
3485
+ height: var(--cb-space-3);
3486
+ }
3487
+
3488
+ .cb-descriptions__skeleton-value .cb-skeleton {
3489
+ width: var(--cb-space-8);
3490
+ max-width: 100%;
3491
+ height: var(--cb-space-3);
3492
+ }
3493
+
3494
+ @media (max-width: 900px) {
3495
+ .cb-descriptions__list { grid-template-columns: repeat(min(var(--cb-descriptions-columns), 2), minmax(0, 1fr)); }
3496
+ .cb-descriptions[data-columns="1"] > .cb-descriptions__list > .cb-descriptions__item--span-2,
3497
+ .cb-descriptions[data-columns="1"] > .cb-descriptions__list > .cb-descriptions__item--span-3,
3498
+ .cb-descriptions[data-columns="1"] > .cb-descriptions__list > .cb-descriptions__item--span-4 { grid-column: span 1; }
3499
+ .cb-descriptions__item--span-3,
3500
+ .cb-descriptions__item--span-4 { grid-column: span 2; }
3501
+ }
3502
+
3503
+ @media (max-width: 560px) {
3504
+ .cb-descriptions__list { grid-template-columns: minmax(0, 1fr); }
3505
+ .cb-descriptions__item--span-2,
3506
+ .cb-descriptions__item--span-3,
3507
+ .cb-descriptions__item--span-4 { grid-column: span 1; }
3508
+ }
3509
+
1951
3510
  /* data/donut.css */
1952
3511
  .cb-donut { position: relative; display: inline-grid; place-items: center; }
1953
3512
  .cb-donut svg { position: absolute; inset: 0; }
@@ -2041,6 +3600,35 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2041
3600
  .cb-leaderboard__delta[data-direction="flat"] { color: var(--cb-fg-subtle); }
2042
3601
  .cb-leaderboard__score { font-size: var(--cb-text-sm); font-weight: var(--cb-weight-semibold); font-variant-numeric: tabular-nums; color: var(--cb-fg); }
2043
3602
 
3603
+ /* data/listy/listy.css */
3604
+ .cb-listy,
3605
+ .cb-listy__group-items,
3606
+ .cb-listy__section-items {
3607
+ display: grid;
3608
+ gap: var(--cb-space-2);
3609
+ margin: 0;
3610
+ padding: 0;
3611
+ list-style: none;
3612
+ }
3613
+
3614
+ .cb-listy {
3615
+ color: var(--cb-fg);
3616
+ font-family: var(--cb-font-sans);
3617
+ }
3618
+
3619
+ .cb-listy__group,
3620
+ .cb-listy__section { min-width: 0; }
3621
+ .cb-listy__group { display: grid; gap: var(--cb-space-2); }
3622
+ .cb-listy__group-heading { padding-block: var(--cb-space-1); color: var(--cb-fg-muted); font-size: var(--cb-text-sm); font-weight: var(--cb-weight-semibold); }
3623
+ .cb-listy__group-heading[data-sticky] { position: sticky; inset-block-start: 0; background: var(--cb-surface); }
3624
+ .cb-listy__item { min-width: 0; }
3625
+ .cb-listy[data-optimized] .cb-listy__item {
3626
+ content-visibility: auto;
3627
+ contain-intrinsic-block-size: var(--cb-control-height-md);
3628
+ }
3629
+ .cb-listy__skeleton-heading { display: block; inline-size: calc(var(--cb-space-8) * 3); block-size: var(--cb-text-sm); }
3630
+ .cb-listy__skeleton-row { display: block; block-size: var(--cb-control-height-md); }
3631
+
2044
3632
  /* data/progress-ring.css */
2045
3633
  .cb-ring {
2046
3634
  --cb-ring-accent: var(--cb-tone-brand);
@@ -2085,6 +3673,28 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2085
3673
  color: var(--cb-fg);
2086
3674
  }
2087
3675
 
3676
+ /* data/qr-code/qr-code.css */
3677
+ .cb-qr-code {
3678
+ display: block;
3679
+ box-sizing: border-box;
3680
+ width: var(--cb-qr-code-size);
3681
+ height: var(--cb-qr-code-size);
3682
+ max-width: 100%;
3683
+ padding: var(--cb-space-2);
3684
+ overflow: visible;
3685
+ background: var(--cb-surface-raised);
3686
+ border: var(--cb-border-width) solid var(--cb-border);
3687
+ border-radius: var(--cb-radius-sm);
3688
+ }
3689
+
3690
+ .cb-qr-code--sm { --cb-qr-code-size: calc(var(--cb-space-8) * 4); }
3691
+ .cb-qr-code--md { --cb-qr-code-size: calc(var(--cb-space-8) * 6); }
3692
+ .cb-qr-code--lg { --cb-qr-code-size: calc(var(--cb-space-8) * 8); }
3693
+
3694
+ .cb-qr-code__background { fill: var(--cb-surface-raised); }
3695
+ .cb-qr-code__modules { fill: var(--cb-fg); }
3696
+
3697
+
2088
3698
  /* data/statistic.css */
2089
3699
  .cb-stat { display: flex; flex-direction: column; gap: var(--cb-space-3); }
2090
3700
  .cb-stat__head { display: flex; align-items: center; justify-content: space-between; gap: var(--cb-space-2); }
@@ -2176,7 +3786,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2176
3786
  .cb-table td:has(> .cb-menu-anchor) { padding-block: 0; }
2177
3787
 
2178
3788
  .cb-table tbody tr[data-clickable] { cursor: pointer; }
2179
- .cb-table tbody tr[data-clickable]:hover td { background: var(--cb-bg-subtle); }
3789
+ @media (hover: hover) {
3790
+ .cb-table tbody tr[data-clickable]:hover td { background: var(--cb-bg-subtle); }
3791
+ }
2180
3792
 
2181
3793
  .cb-table__sort {
2182
3794
  display: inline-flex;
@@ -2195,7 +3807,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2195
3807
  padding: 0;
2196
3808
  border-radius: var(--cb-radius-sm);
2197
3809
  }
2198
- .cb-table__sort:hover { color: var(--cb-fg); }
3810
+ @media (hover: hover) {
3811
+ .cb-table__sort:hover { color: var(--cb-fg); }
3812
+ }
2199
3813
  .cb-table__sort:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
2200
3814
  .cb-table__sort-idle { opacity: 0.4; }
2201
3815
 
@@ -2239,8 +3853,10 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2239
3853
  transition: background-color var(--cb-duration-fast) var(--cb-ease-standard),
2240
3854
  color var(--cb-duration-fast) var(--cb-ease-standard);
2241
3855
  }
2242
- .cb-pagination__page:hover:not([data-active]),
2243
- .cb-pagination__step:hover:not(:disabled) { background: var(--cb-bg-subtle); color: var(--cb-fg); }
3856
+ @media (hover: hover) {
3857
+ .cb-pagination__page:hover:not([data-active]),
3858
+ .cb-pagination__step:hover:not(:disabled) { background: var(--cb-bg-subtle); color: var(--cb-fg); }
3859
+ }
2244
3860
  .cb-pagination__page[data-active] {
2245
3861
  background: color-mix(in oklch, var(--cb-tone-brand) 14%, transparent);
2246
3862
  border-color: color-mix(in oklch, var(--cb-tone-brand) 35%, transparent);
@@ -2290,6 +3906,51 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2290
3906
  .cb-timeline__time { font-size: var(--cb-text-xs); color: var(--cb-fg-subtle); white-space: nowrap; font-variant-numeric: tabular-nums; }
2291
3907
  .cb-timeline__description { margin: var(--cb-space-1) 0 0; font-size: var(--cb-text-sm); color: var(--cb-fg-muted); line-height: var(--cb-leading-normal); }
2292
3908
 
3909
+ /* data/tree/tree.css */
3910
+ .cb-tree {
3911
+ --cb-tree-gap: var(--cb-space-1);
3912
+ --cb-tree-padding: var(--cb-space-2);
3913
+ --cb-tree-accent: var(--cb-tone-brand);
3914
+ color: var(--cb-fg);
3915
+ font-family: var(--cb-font-sans);
3916
+ font-size: var(--cb-text-sm);
3917
+ }
3918
+ .cb-tree--sm { --cb-tree-padding: var(--cb-space-1); font-size: var(--cb-text-xs); }
3919
+ .cb-tree--lg { --cb-tree-gap: var(--cb-space-2); --cb-tree-padding: var(--cb-space-3); font-size: var(--cb-text-md); }
3920
+ .cb-tree--neutral { --cb-tree-accent: var(--cb-tone-neutral); }
3921
+ .cb-tree--brand { --cb-tree-accent: var(--cb-tone-brand); }
3922
+ .cb-tree--success { --cb-tree-accent: var(--cb-tone-success); }
3923
+ .cb-tree--warning { --cb-tree-accent: var(--cb-tone-warning); }
3924
+ .cb-tree--danger { --cb-tree-accent: var(--cb-tone-danger); }
3925
+ .cb-tree--info { --cb-tree-accent: var(--cb-tone-info); }
3926
+ .cb-tree__group { display: flex; flex-direction: column; gap: var(--cb-tree-gap); }
3927
+ .cb-tree__node { min-width: 0; }
3928
+ .cb-tree__node > .cb-tree__group { margin-inline-start: var(--cb-space-4); padding-inline-start: var(--cb-space-3); border-inline-start: var(--cb-border-width) solid var(--cb-border); }
3929
+ .cb-tree__item { display: flex; align-items: center; gap: var(--cb-space-2); min-width: 0; padding: var(--cb-tree-padding); border-radius: var(--cb-radius-sm); outline: none; cursor: pointer; }
3930
+ @media (hover: hover) {
3931
+ .cb-tree__item:hover { background: var(--cb-bg-subtle); }
3932
+ }
3933
+ .cb-tree__item:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tree-accent); outline-offset: var(--cb-focus-offset); }
3934
+ .cb-tree__item[data-selected] { background: var(--cb-bg-subtle); color: var(--cb-tree-accent); font-weight: var(--cb-weight-medium); }
3935
+ .cb-tree__item[data-disabled] { color: var(--cb-fg-subtle); cursor: not-allowed; }
3936
+ .cb-tree__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
3937
+ .cb-tree__content { margin-inline-start: auto; color: var(--cb-fg-subtle); font-size: var(--cb-text-xs); }
3938
+ .cb-tree__chevrons, .cb-tree__indent { display: inline-flex; flex: none; width: var(--cb-control-height-sm); align-items: center; justify-content: center; }
3939
+ .cb-tree__chevron { transition: rotate var(--cb-duration-fast) var(--cb-ease-standard); }
3940
+ .cb-tree__chevron--expanded { display: none; }
3941
+ .cb-tree__chevrons[data-expanded] .cb-tree__chevron--collapsed { rotate: 90deg; }
3942
+ .cb-tree--motion-off .cb-tree__chevron { transition: none; }
3943
+ .cb-tree--motion-off .cb-tree__chevrons[data-expanded] .cb-tree__chevron--collapsed { display: none; }
3944
+ .cb-tree--motion-off .cb-tree__chevrons[data-expanded] .cb-tree__chevron--expanded { display: block; }
3945
+ .cb-tree--skeleton .cb-tree__group { pointer-events: none; }
3946
+ .cb-tree__skeleton-line { display: block; width: calc(var(--cb-space-8) * 4); height: var(--cb-control-height-sm); }
3947
+ .cb-tree__skeleton-line--long { width: calc(var(--cb-space-8) * 5); }
3948
+ @media (prefers-reduced-motion: reduce) {
3949
+ .cb-tree__chevron { transition: none; }
3950
+ .cb-tree__chevrons[data-expanded] .cb-tree__chevron--collapsed { display: none; }
3951
+ .cb-tree__chevrons[data-expanded] .cb-tree__chevron--expanded { display: block; }
3952
+ }
3953
+
2293
3954
  /* media/avatar.css */
2294
3955
  .cb-avatar {
2295
3956
  --cb-avatar-accent: var(--cb-decor-violet);
@@ -2390,7 +4051,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2390
4051
  transition: background-color var(--cb-duration-fast) var(--cb-ease-standard),
2391
4052
  opacity var(--cb-duration-fast) var(--cb-ease-standard);
2392
4053
  }
2393
- .cb-carousel__arrow:hover:not(:disabled) { background: var(--cb-bg-subtle); }
4054
+ @media (hover: hover) {
4055
+ .cb-carousel__arrow:hover:not(:disabled) { background: var(--cb-bg-subtle); }
4056
+ }
2394
4057
  .cb-carousel__arrow:disabled { opacity: 0.35; cursor: not-allowed; }
2395
4058
  .cb-carousel__arrow:focus-visible {
2396
4059
  outline: var(--cb-focus-width) solid var(--cb-tone-brand);
@@ -2432,15 +4095,17 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2432
4095
  .cb-image[data-blurred]::before {
2433
4096
  content: "";
2434
4097
  position: absolute;
2435
- inset: -5%;
4098
+ inset: calc(-1 * var(--cb-space-1));
2436
4099
  background: inherit;
2437
4100
  background-size: cover;
2438
4101
  background-position: center;
2439
- filter: blur(16px);
4102
+ filter: blur(var(--cb-space-4));
2440
4103
  transform: scale(1.05);
2441
4104
  transition: opacity var(--cb-duration-slow) var(--cb-ease-standard);
2442
4105
  }
2443
- .cb-image[data-loaded][data-blurred]::before { opacity: 0; }
4106
+ .cb-image[data-loaded][data-blurred]::before {
4107
+ opacity: 0;
4108
+ }
2444
4109
 
2445
4110
  .cb-image__img {
2446
4111
  position: relative;
@@ -2450,12 +4115,392 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2450
4115
  opacity: 0;
2451
4116
  transition: opacity var(--cb-duration-slow) var(--cb-ease-entrance);
2452
4117
  }
2453
- .cb-image[data-loaded] .cb-image__img { opacity: 1; }
4118
+ .cb-image[data-loaded] .cb-image__img {
4119
+ opacity: 1;
4120
+ }
4121
+
4122
+ .cb-image[data-motion="off"] .cb-image__img,
4123
+ .cb-image[data-motion="off"][data-blurred]::before {
4124
+ transition: none;
4125
+ }
4126
+
4127
+ .cb-image--skeleton {
4128
+ min-height: var(--cb-control-height-lg);
4129
+ }
4130
+ .cb-image__skeleton-shape {
4131
+ position: absolute;
4132
+ inset: 0;
4133
+ }
4134
+
4135
+ .cb-image-preview-group {
4136
+ display: grid;
4137
+ grid-template-columns: repeat(
4138
+ auto-fit,
4139
+ minmax(min(100%, calc(var(--cb-space-8) * 3)), 1fr)
4140
+ );
4141
+ gap: var(--cb-space-3);
4142
+ }
4143
+
4144
+ .cb-image-preview-group__trigger {
4145
+ display: block;
4146
+ min-width: 0;
4147
+ padding: var(--cb-space-0);
4148
+ border: var(--cb-border-width) solid transparent;
4149
+ border-radius: var(--cb-radius-md);
4150
+ background: transparent;
4151
+ color: inherit;
4152
+ cursor: zoom-in;
4153
+ }
4154
+
4155
+ .cb-image-preview-group__trigger:focus-visible {
4156
+ outline: var(--cb-focus-width) solid var(--cb-tone-brand);
4157
+ outline-offset: var(--cb-focus-offset);
4158
+ }
4159
+
4160
+ .cb-image-preview__backdrop {
4161
+ position: fixed;
4162
+ inset: 0;
4163
+ z-index: var(--cb-z-modal-backdrop);
4164
+ background: var(--cb-scrim-strong);
4165
+ transition: opacity var(--cb-duration-base) var(--cb-ease-standard);
4166
+ }
4167
+
4168
+ .cb-image-preview__backdrop[data-starting-style],
4169
+ .cb-image-preview__backdrop[data-ending-style] {
4170
+ opacity: 0;
4171
+ }
4172
+
4173
+ .cb-image-preview {
4174
+ position: fixed;
4175
+ inset: 0;
4176
+ z-index: var(--cb-z-modal);
4177
+ display: grid;
4178
+ grid-template-rows: auto minmax(0, 1fr) auto;
4179
+ box-sizing: border-box;
4180
+ width: 100%;
4181
+ height: 100dvh;
4182
+ padding: var(--cb-space-4);
4183
+ color: var(--cb-fg-on-brand);
4184
+ font-family: var(--cb-font-sans);
4185
+ outline: none;
4186
+ transition: opacity var(--cb-duration-base) var(--cb-ease-entrance),
4187
+ transform var(--cb-duration-base) var(--cb-ease-entrance);
4188
+ }
4189
+
4190
+ .cb-image-preview[data-starting-style],
4191
+ .cb-image-preview[data-ending-style] {
4192
+ opacity: 0;
4193
+ transform: scale(0.98);
4194
+ }
4195
+
4196
+ .cb-image-preview[data-motion="off"] {
4197
+ transition: opacity var(--cb-duration-fast) var(--cb-ease-standard);
4198
+ }
4199
+ .cb-image-preview[data-motion="off"][data-starting-style],
4200
+ .cb-image-preview[data-motion="off"][data-ending-style] {
4201
+ transform: none;
4202
+ }
4203
+
4204
+ .cb-image-preview__sr-title {
4205
+ position: absolute;
4206
+ width: var(--cb-border-width);
4207
+ height: var(--cb-border-width);
4208
+ padding: var(--cb-space-0);
4209
+ margin: calc(var(--cb-border-width) * -1);
4210
+ overflow: hidden;
4211
+ clip: rect(0, 0, 0, 0);
4212
+ white-space: nowrap;
4213
+ border: 0;
4214
+ }
4215
+
4216
+ .cb-image-preview__toolbar {
4217
+ display: flex;
4218
+ align-items: center;
4219
+ justify-content: flex-end;
4220
+ gap: var(--cb-space-2);
4221
+ min-width: 0;
4222
+ }
4223
+
4224
+ .cb-image-preview__position {
4225
+ margin-inline-end: auto;
4226
+ font-size: var(--cb-text-sm);
4227
+ font-variant-numeric: tabular-nums;
4228
+ }
4229
+
4230
+ .cb-image-preview__control,
4231
+ .cb-image-preview__navigation {
4232
+ display: inline-flex;
4233
+ align-items: center;
4234
+ justify-content: center;
4235
+ width: var(--cb-control-height-md);
4236
+ height: var(--cb-control-height-md);
4237
+ padding: var(--cb-space-0);
4238
+ border: var(--cb-border-width) solid
4239
+ color-mix(in oklch, currentColor 35%, transparent);
4240
+ border-radius: var(--cb-radius-full);
4241
+ background: var(--cb-surface-raised);
4242
+ color: var(--cb-fg);
4243
+ cursor: pointer;
4244
+ transition: background-color var(--cb-duration-fast) var(--cb-ease-standard),
4245
+ opacity var(--cb-duration-fast) var(--cb-ease-standard);
4246
+ }
4247
+
4248
+ .cb-image-preview__control svg,
4249
+ .cb-image-preview__navigation svg {
4250
+ width: 1em;
4251
+ height: 1em;
4252
+ }
4253
+ @media (hover: hover) {
4254
+ .cb-image-preview__control:hover:not(:disabled),
4255
+ .cb-image-preview__navigation:hover:not(:disabled) {
4256
+ background: var(--cb-bg-subtle);
4257
+ }
4258
+ }
4259
+ .cb-image-preview__control:disabled,
4260
+ .cb-image-preview__navigation:disabled {
4261
+ opacity: 0.4;
4262
+ cursor: not-allowed;
4263
+ }
4264
+ .cb-image-preview__control:focus-visible,
4265
+ .cb-image-preview__navigation:focus-visible {
4266
+ outline: var(--cb-focus-width) solid var(--cb-tone-brand);
4267
+ outline-offset: var(--cb-focus-offset);
4268
+ }
4269
+
4270
+ .cb-image-preview__stage {
4271
+ position: relative;
4272
+ display: flex;
4273
+ align-items: center;
4274
+ justify-content: center;
4275
+ min-width: 0;
4276
+ min-height: 0;
4277
+ overflow: hidden;
4278
+ padding: var(--cb-space-3)
4279
+ calc(var(--cb-control-height-md) + var(--cb-space-3));
4280
+ }
4281
+
4282
+ .cb-image-preview__image {
4283
+ display: block;
4284
+ max-width: 100%;
4285
+ max-height: 100%;
4286
+ object-fit: contain;
4287
+ user-select: none;
4288
+ touch-action: manipulation;
4289
+ cursor: zoom-in;
4290
+ transform: scale(var(--cb-image-preview-scale));
4291
+ transition: transform var(--cb-duration-base) var(--cb-ease-emphasis);
4292
+ }
4293
+
4294
+ .cb-image-preview__navigation {
4295
+ position: absolute;
4296
+ inset-block-start: 50%;
4297
+ transform: translateY(-50%);
4298
+ }
4299
+ .cb-image-preview__navigation--previous {
4300
+ inset-inline-start: var(--cb-space-1);
4301
+ }
4302
+ .cb-image-preview__navigation--next {
4303
+ inset-inline-end: var(--cb-space-1);
4304
+ }
4305
+
4306
+ .cb-image-preview__caption {
4307
+ max-width: calc(var(--cb-space-8) * 12);
4308
+ margin-inline: auto;
4309
+ padding-block-start: var(--cb-space-2);
4310
+ color: var(--cb-fg-on-brand);
4311
+ font-size: var(--cb-text-sm);
4312
+ text-align: center;
4313
+ }
2454
4314
 
2455
4315
  /* Reduced motion: the image appears rather than fading, and the placeholder still holds the space. */
2456
4316
  @media (prefers-reduced-motion: reduce) {
2457
4317
  .cb-image__img,
2458
- .cb-image[data-blurred]::before { transition: none; }
4318
+ .cb-image[data-blurred]::before,
4319
+ .cb-image-preview__image {
4320
+ transition: none;
4321
+ }
4322
+ .cb-image-preview {
4323
+ transition: opacity var(--cb-duration-fast) var(--cb-ease-standard);
4324
+ }
4325
+ .cb-image-preview[data-starting-style],
4326
+ .cb-image-preview[data-ending-style] {
4327
+ transform: none;
4328
+ }
4329
+ }
4330
+
4331
+ /* nav/anchor/anchor.css */
4332
+ .cb-anchor {
4333
+ --cb-anchor-gap: var(--cb-space-2);
4334
+ --cb-anchor-padding-block: var(--cb-space-1);
4335
+ --cb-anchor-padding-inline: var(--cb-space-3);
4336
+ --cb-anchor-color: var(--cb-fg-muted);
4337
+ --cb-anchor-active-color: var(--cb-tone-brand);
4338
+ font-family: var(--cb-font-sans);
4339
+ font-size: var(--cb-text-sm);
4340
+ line-height: var(--cb-leading-tight);
4341
+ }
4342
+
4343
+ .cb-anchor--sm {
4344
+ --cb-anchor-gap: var(--cb-space-1);
4345
+ --cb-anchor-padding-block: var(--cb-space-1);
4346
+ --cb-anchor-padding-inline: var(--cb-space-2);
4347
+ font-size: var(--cb-text-xs);
4348
+ }
4349
+
4350
+ .cb-anchor--lg {
4351
+ --cb-anchor-gap: var(--cb-space-3);
4352
+ --cb-anchor-padding-block: var(--cb-space-2);
4353
+ --cb-anchor-padding-inline: var(--cb-space-4);
4354
+ font-size: var(--cb-text-md);
4355
+ }
4356
+
4357
+ .cb-anchor--neutral { --cb-anchor-active-color: var(--cb-fg); }
4358
+ .cb-anchor--brand { --cb-anchor-active-color: var(--cb-tone-brand); }
4359
+ .cb-anchor--success { --cb-anchor-active-color: var(--cb-tone-success); }
4360
+ .cb-anchor--warning { --cb-anchor-active-color: var(--cb-tone-warning); }
4361
+ .cb-anchor--danger { --cb-anchor-active-color: var(--cb-tone-danger); }
4362
+ .cb-anchor--info { --cb-anchor-active-color: var(--cb-tone-info); }
4363
+
4364
+ .cb-anchor__list {
4365
+ display: flex;
4366
+ gap: var(--cb-anchor-gap);
4367
+ margin: 0;
4368
+ padding: 0;
4369
+ list-style: none;
4370
+ }
4371
+
4372
+ .cb-anchor--vertical .cb-anchor__list { flex-direction: column; }
4373
+ .cb-anchor--horizontal .cb-anchor__list { flex-direction: row; flex-wrap: wrap; }
4374
+ .cb-anchor__list--nested { padding-inline-start: var(--cb-space-4); }
4375
+
4376
+ .cb-anchor__link {
4377
+ display: block;
4378
+ padding: var(--cb-anchor-padding-block) var(--cb-anchor-padding-inline);
4379
+ border-inline-start: var(--cb-border-width) solid transparent;
4380
+ color: var(--cb-anchor-color);
4381
+ text-decoration: none;
4382
+ transition: color var(--cb-duration-fast) var(--cb-ease-standard), background-color var(--cb-duration-fast) var(--cb-ease-standard);
4383
+ }
4384
+
4385
+ .cb-anchor--horizontal .cb-anchor__link { border-inline-start: var(--cb-border-width) solid transparent; border-block-end: var(--cb-border-width) solid transparent; }
4386
+ @media (hover: hover) {
4387
+ .cb-anchor__link:hover { color: var(--cb-anchor-active-color); }
4388
+ }
4389
+ .cb-anchor__link:focus-visible {
4390
+ outline: var(--cb-focus-width) solid var(--cb-anchor-active-color);
4391
+ outline-offset: var(--cb-focus-offset);
4392
+ }
4393
+ .cb-anchor__link[aria-current='location'] {
4394
+ border-color: var(--cb-anchor-active-color);
4395
+ color: var(--cb-anchor-active-color);
4396
+ font-weight: var(--cb-weight-medium);
4397
+ }
4398
+
4399
+ .cb-anchor--horizontal .cb-anchor__link[aria-current='location'] {
4400
+ border-inline-start-color: transparent;
4401
+ border-block-end-color: var(--cb-anchor-active-color);
4402
+ }
4403
+ .cb-anchor--motion-off .cb-anchor__link { transition: none; }
4404
+ .cb-anchor--skeleton .cb-anchor__list { pointer-events: none; }
4405
+ .cb-anchor__skeleton-link { display: block; width: calc(var(--cb-space-8) * 2); height: var(--cb-control-height-sm); }
4406
+ .cb-anchor__skeleton-link--long { width: calc(var(--cb-space-8) * 3); }
4407
+
4408
+ @media (prefers-reduced-motion: reduce) {
4409
+ .cb-anchor__link { transition: none; }
4410
+ }
4411
+
4412
+ /* nav/menu/menu.css */
4413
+ .cb-persistent-menu {
4414
+ --cb-persistent-menu-gap: var(--cb-space-1);
4415
+ --cb-persistent-menu-padding: var(--cb-space-2);
4416
+ --cb-persistent-menu-active: var(--cb-tone-brand);
4417
+ display: block;
4418
+ font-family: var(--cb-font-sans);
4419
+ font-size: var(--cb-text-sm);
4420
+ }
4421
+
4422
+ .cb-persistent-menu--sm {
4423
+ --cb-persistent-menu-gap: var(--cb-space-1);
4424
+ --cb-persistent-menu-padding: var(--cb-space-1);
4425
+ font-size: var(--cb-text-xs);
4426
+ }
4427
+
4428
+ .cb-persistent-menu--lg {
4429
+ --cb-persistent-menu-gap: var(--cb-space-2);
4430
+ --cb-persistent-menu-padding: var(--cb-space-3);
4431
+ font-size: var(--cb-text-md);
4432
+ }
4433
+
4434
+ .cb-persistent-menu--neutral { --cb-persistent-menu-active: var(--cb-fg); }
4435
+ .cb-persistent-menu--brand { --cb-persistent-menu-active: var(--cb-tone-brand); }
4436
+ .cb-persistent-menu--success { --cb-persistent-menu-active: var(--cb-tone-success); }
4437
+ .cb-persistent-menu--warning { --cb-persistent-menu-active: var(--cb-tone-warning); }
4438
+ .cb-persistent-menu--danger { --cb-persistent-menu-active: var(--cb-tone-danger); }
4439
+ .cb-persistent-menu--info { --cb-persistent-menu-active: var(--cb-tone-info); }
4440
+
4441
+ .cb-persistent-menu__list {
4442
+ display: flex;
4443
+ flex-direction: column;
4444
+ gap: var(--cb-persistent-menu-gap);
4445
+ margin: 0;
4446
+ padding: 0;
4447
+ list-style: none;
4448
+ }
4449
+
4450
+ .cb-persistent-menu__list--nested {
4451
+ margin-inline-start: var(--cb-space-3);
4452
+ padding-inline-start: var(--cb-space-3);
4453
+ border-inline-start: var(--cb-border-width) solid var(--cb-border);
4454
+ }
4455
+
4456
+ .cb-persistent-menu__row { display: flex; align-items: center; gap: var(--cb-space-1); }
4457
+
4458
+ .cb-persistent-menu__entry,
4459
+ .cb-persistent-menu__branch-trigger {
4460
+ display: inline-flex;
4461
+ flex: 1;
4462
+ align-items: center;
4463
+ gap: var(--cb-space-2);
4464
+ min-width: 0;
4465
+ padding: var(--cb-persistent-menu-padding);
4466
+ border: none;
4467
+ border-radius: var(--cb-radius-sm);
4468
+ background: transparent;
4469
+ color: var(--cb-fg-muted);
4470
+ font: inherit;
4471
+ text-align: start;
4472
+ text-decoration: none;
4473
+ cursor: pointer;
4474
+ }
4475
+
4476
+ @media (hover: hover) {
4477
+ .cb-persistent-menu__entry:hover,
4478
+ .cb-persistent-menu__branch-trigger:hover { background: var(--cb-bg-subtle); color: var(--cb-fg); }
4479
+ }
4480
+ .cb-persistent-menu__entry[data-current] { background: var(--cb-bg-subtle); color: var(--cb-persistent-menu-active); font-weight: var(--cb-weight-medium); }
4481
+ .cb-persistent-menu__entry:focus-visible,
4482
+ .cb-persistent-menu__branch-trigger:focus-visible { outline: var(--cb-focus-width) solid var(--cb-persistent-menu-active); outline-offset: var(--cb-focus-offset); }
4483
+ .cb-persistent-menu__entry[data-disabled],
4484
+ .cb-persistent-menu__branch-trigger[data-disabled] { color: var(--cb-fg-subtle); cursor: not-allowed; }
4485
+ .cb-persistent-menu__icon { display: inline-flex; flex: none; }
4486
+ .cb-persistent-menu__label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4487
+
4488
+ .cb-persistent-menu__chevron { flex: none; transition: rotate var(--cb-duration-fast) var(--cb-ease-standard); }
4489
+ .cb-persistent-menu__chevron--expanded { display: none; }
4490
+ .cb-persistent-menu__branch-trigger[data-open] .cb-persistent-menu__chevron--collapsed { rotate: 90deg; }
4491
+ .cb-persistent-menu__branch { overflow: hidden; }
4492
+ .cb-persistent-menu--motion-off .cb-persistent-menu__chevron { transition: none; }
4493
+ .cb-persistent-menu--motion-off .cb-persistent-menu__branch-trigger[data-open] .cb-persistent-menu__chevron--collapsed { display: none; }
4494
+ .cb-persistent-menu--motion-off .cb-persistent-menu__branch-trigger[data-open] .cb-persistent-menu__chevron--expanded { display: block; }
4495
+
4496
+ .cb-persistent-menu--skeleton .cb-persistent-menu__list { pointer-events: none; }
4497
+ .cb-persistent-menu__skeleton-line { display: block; width: calc(var(--cb-space-8) * 3); height: var(--cb-control-height-sm); }
4498
+ .cb-persistent-menu__skeleton-line--long { width: calc(var(--cb-space-8) * 4); }
4499
+
4500
+ @media (prefers-reduced-motion: reduce) {
4501
+ .cb-persistent-menu__chevron { transition: none; }
4502
+ .cb-persistent-menu__branch-trigger[data-open] .cb-persistent-menu__chevron--collapsed { display: none; }
4503
+ .cb-persistent-menu__branch-trigger[data-open] .cb-persistent-menu__chevron--expanded { display: block; }
2459
4504
  }
2460
4505
 
2461
4506
  /* nav/nav.css */
@@ -2534,7 +4579,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2534
4579
  }
2535
4580
  .cb-crumbs__item { margin: 0; display: inline-flex; align-items: center; gap: var(--cb-space-1); }
2536
4581
  .cb-crumbs__link { color: var(--cb-fg-muted); text-decoration: none; border-radius: var(--cb-radius-sm); }
2537
- .cb-crumbs__link:hover { color: var(--cb-fg); text-decoration: underline; }
4582
+ @media (hover: hover) {
4583
+ .cb-crumbs__link:hover { color: var(--cb-fg); text-decoration: underline; }
4584
+ }
2538
4585
  .cb-crumbs__link:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
2539
4586
  .cb-crumbs__text { color: var(--cb-fg-subtle); }
2540
4587
  .cb-crumbs__current { color: var(--cb-fg); font-weight: var(--cb-weight-medium); }
@@ -2615,7 +4662,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2615
4662
  text-decoration: none;
2616
4663
  cursor: pointer;
2617
4664
  }
2618
- .cb-sidebar__item:hover { background: var(--cb-surface); color: var(--cb-fg); }
4665
+ @media (hover: hover) {
4666
+ .cb-sidebar__item:hover { background: var(--cb-surface); color: var(--cb-fg); }
4667
+ }
2619
4668
  .cb-sidebar__item[data-active] { background: var(--cb-surface); color: var(--cb-fg); font-weight: var(--cb-weight-medium); }
2620
4669
  .cb-sidebar__item:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
2621
4670
  .cb-sidebar__icon { display: inline-flex; flex: none; }
@@ -2641,7 +4690,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2641
4690
  color: var(--cb-fg-subtle);
2642
4691
  cursor: pointer;
2643
4692
  }
2644
- .cb-sidebar__toggle:hover { background: var(--cb-surface); color: var(--cb-fg); }
4693
+ @media (hover: hover) {
4694
+ .cb-sidebar__toggle:hover { background: var(--cb-surface); color: var(--cb-fg); }
4695
+ }
2645
4696
  .cb-sidebar__toggle:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
2646
4697
 
2647
4698
  .cb-topbar {
@@ -2734,7 +4785,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2734
4785
  transition: color var(--cb-duration-fast) var(--cb-ease-standard),
2735
4786
  background-color var(--cb-duration-fast) var(--cb-ease-standard);
2736
4787
  }
2737
- .cb-tabs__tab:hover:not([data-disabled]) { color: var(--cb-fg); }
4788
+ @media (hover: hover) {
4789
+ .cb-tabs__tab:hover:not([data-disabled]) { color: var(--cb-fg); }
4790
+ }
2738
4791
  .cb-tabs__tab[data-selected] { color: var(--cb-fg); }
2739
4792
  .cb-tabs__tab[data-disabled] { opacity: 0.45; cursor: not-allowed; }
2740
4793
  .cb-tabs__tab:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
@@ -2772,6 +4825,67 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2772
4825
 
2773
4826
  .cb-tabs__panel:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
2774
4827
 
4828
+ /* motion/border-beam/border-beam.css */
4829
+ .cb-border-beam {
4830
+ --cb-border-beam-angle: 0turn;
4831
+ --cb-border-beam-tone: var(--cb-tone-brand);
4832
+ --cb-border-beam-thickness: var(--cb-border-width);
4833
+ position: relative;
4834
+ isolation: isolate;
4835
+ overflow: visible;
4836
+ border-radius: var(--cb-radius-md);
4837
+ }
4838
+
4839
+ .cb-border-beam[data-tone="neutral"] { --cb-border-beam-tone: var(--cb-tone-neutral); }
4840
+ .cb-border-beam[data-tone="info"] { --cb-border-beam-tone: var(--cb-tone-info); }
4841
+ .cb-border-beam[data-tone="success"] { --cb-border-beam-tone: var(--cb-tone-success); }
4842
+ .cb-border-beam[data-tone="warning"] { --cb-border-beam-tone: var(--cb-tone-warning); }
4843
+ .cb-border-beam[data-tone="danger"] { --cb-border-beam-tone: var(--cb-tone-danger); }
4844
+
4845
+ .cb-border-beam--sm { --cb-border-beam-thickness: var(--cb-border-width); }
4846
+ .cb-border-beam--md { --cb-border-beam-thickness: calc(var(--cb-border-width) * 2); }
4847
+ .cb-border-beam--lg { --cb-border-beam-thickness: calc(var(--cb-border-width) * 3); }
4848
+
4849
+ .cb-border-beam__overlay {
4850
+ position: absolute;
4851
+ inset: calc(var(--cb-border-beam-thickness) * -1);
4852
+ z-index: 0;
4853
+ border-radius: inherit;
4854
+ padding: var(--cb-border-beam-thickness);
4855
+ background: conic-gradient(
4856
+ from var(--cb-border-beam-angle),
4857
+ transparent,
4858
+ var(--cb-border-beam-tone),
4859
+ transparent
4860
+ );
4861
+ pointer-events: none;
4862
+ mask: linear-gradient(currentColor 0 0) content-box, linear-gradient(currentColor 0 0);
4863
+ mask-composite: exclude;
4864
+ animation: cb-border-beam-sweep var(--cb-duration-deliberate) var(--cb-ease-standard) infinite;
4865
+ }
4866
+
4867
+ @property --cb-border-beam-angle {
4868
+ syntax: "<angle>";
4869
+ inherits: false;
4870
+ initial-value: 0turn;
4871
+ }
4872
+
4873
+ .cb-border-beam__content { position: relative; z-index: 1; }
4874
+
4875
+ .cb-border-beam[data-motion="off"] .cb-border-beam__overlay {
4876
+ animation: none;
4877
+ }
4878
+
4879
+ @keyframes cb-border-beam-sweep {
4880
+ to { --cb-border-beam-angle: 1turn; }
4881
+ }
4882
+
4883
+ @media (prefers-reduced-motion: reduce) {
4884
+ .cb-border-beam__overlay {
4885
+ animation: none;
4886
+ }
4887
+ }
4888
+
2775
4889
  /* onboarding/checklist.css */
2776
4890
  .cb-checklist {
2777
4891
  display: flex;
@@ -2803,7 +4917,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2803
4917
  cursor: pointer;
2804
4918
  }
2805
4919
  .cb-checklist__task:disabled { cursor: default; }
2806
- .cb-checklist__task:hover:not(:disabled) { background: var(--cb-bg-subtle); }
4920
+ @media (hover: hover) {
4921
+ .cb-checklist__task:hover:not(:disabled) { background: var(--cb-bg-subtle); }
4922
+ }
2807
4923
  .cb-checklist__task:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset-inset); }
2808
4924
 
2809
4925
  .cb-checklist__marker {
@@ -2890,7 +5006,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
2890
5006
  border-radius: var(--cb-radius-sm);
2891
5007
  display: inline-flex;
2892
5008
  }
2893
- .cb-coachmark__close:hover { color: var(--cb-fg); background: var(--cb-bg-subtle); }
5009
+ @media (hover: hover) {
5010
+ .cb-coachmark__close:hover { color: var(--cb-fg); background: var(--cb-bg-subtle); }
5011
+ }
2894
5012
  .cb-coachmark__close:focus-visible { outline: var(--cb-focus-width) solid var(--cb-tone-brand); outline-offset: var(--cb-focus-offset); }
2895
5013
 
2896
5014
  .cb-coachmark__body { font-size: var(--cb-text-sm); color: var(--cb-fg-muted); line-height: var(--cb-leading-normal); }