@shift-css/core 0.5.0 → 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/shift.css CHANGED
@@ -359,11 +359,12 @@
359
359
  --_surface-bg: var(--s-surface-base);
360
360
  --_surface-padding: var(--s-space-4);
361
361
  --_surface-radius: var(--s-radius-lg);
362
+ --_surface-depth: 0;
362
363
  background-color: var(--_surface-bg);
363
364
  padding: var(--_surface-padding);
364
365
  border-radius: var(--_surface-radius);
365
366
  color: var(--s-text-primary);
366
- container-type: inline-size;
367
+ container: surface / inline-size;
367
368
 
368
369
  @supports (color: oklch(from red l c h)) {
369
370
  color: oklch(from var(--_surface-bg) clamp(.15, calc((.55 - l) * 1000 + .15), .95) 0 0);
@@ -376,20 +377,24 @@
376
377
 
377
378
  [s-surface="flat"] {
378
379
  --_surface-bg: var(--s-surface-base);
380
+ --_surface-depth: 0;
379
381
  }
380
382
 
381
383
  [s-surface="sunken"] {
382
384
  --_surface-bg: var(--s-surface-sunken);
385
+ --_surface-depth: -1;
383
386
  box-shadow: var(--s-shadow-inner);
384
387
  }
385
388
 
386
389
  [s-surface="raised"] {
387
390
  --_surface-bg: var(--s-surface-raised);
391
+ --_surface-depth: 1;
388
392
  box-shadow: var(--s-shadow-md);
389
393
  }
390
394
 
391
395
  [s-surface="floating"] {
392
396
  --_surface-bg: var(--s-surface-raised);
397
+ --_surface-depth: 2;
393
398
  box-shadow: var(--s-shadow-xl);
394
399
  }
395
400
 
@@ -505,11 +510,20 @@
505
510
  user-select: none;
506
511
 
507
512
  &:hover:not(:disabled) {
508
- --_btn-bg: var(--s-interactive-primary-hover);
513
+ background-color: var(--s-interactive-primary-hover);
514
+
515
+ @supports (color: oklch(from red l c h)) and (color: light-dark(red, blue)) {
516
+ background-color: light-dark(oklch(from var(--_btn-bg) calc(l * .92) c h), oklch(from var(--_btn-bg) min(calc(l * 1.1), .95) c h));
517
+ }
509
518
  }
510
519
 
511
520
  &:active:not(:disabled) {
512
- --_btn-bg: var(--s-interactive-primary-active);
521
+ background-color: var(--s-interactive-primary-active);
522
+
523
+ @supports (color: oklch(from red l c h)) and (color: light-dark(red, blue)) {
524
+ background-color: light-dark(oklch(from var(--_btn-bg) calc(l * .85) c h), oklch(from var(--_btn-bg) min(calc(l * 1.2), .98) c h));
525
+ }
526
+
513
527
  transform: scale(.98);
514
528
  }
515
529
 
@@ -528,14 +542,6 @@
528
542
  [s-btn="primary"] {
529
543
  --_btn-bg: var(--s-interactive-primary);
530
544
  --_btn-text: var(--s-text-inverse);
531
-
532
- &:hover:not(:disabled) {
533
- --_btn-bg: var(--s-interactive-primary-hover);
534
- }
535
-
536
- &:active:not(:disabled) {
537
- --_btn-bg: var(--s-interactive-primary-active);
538
- }
539
545
  }
540
546
 
541
547
  [s-btn="secondary"] {
@@ -543,10 +549,6 @@
543
549
  --_btn-text: var(--s-text-primary);
544
550
  --_btn-border: var(--s-border-default);
545
551
  color: var(--_btn-text);
546
-
547
- &:hover:not(:disabled) {
548
- --_btn-bg: var(--s-surface-sunken);
549
- }
550
552
  }
551
553
 
552
554
  [s-btn="ghost"] {
@@ -581,45 +583,21 @@
581
583
 
582
584
  &:hover:not(:disabled) {
583
585
  --_btn-bg: var(--s-interactive-primary);
584
- --_btn-text: var(--s-text-inverse);
585
- color: var(--_btn-text);
586
+ background-color: var(--s-interactive-primary);
587
+ color: var(--s-text-inverse);
586
588
  }
587
589
  }
588
590
 
589
591
  [s-btn="danger"] {
590
592
  --_btn-bg: var(--s-state-danger);
591
-
592
- &:hover:not(:disabled) {
593
- --_btn-bg: var(--s-danger-800);
594
- }
595
-
596
- &:active:not(:disabled) {
597
- --_btn-bg: var(--s-danger-900);
598
- }
599
593
  }
600
594
 
601
595
  [s-btn="success"] {
602
596
  --_btn-bg: var(--s-state-success);
603
-
604
- &:hover:not(:disabled) {
605
- --_btn-bg: var(--s-success-800);
606
- }
607
-
608
- &:active:not(:disabled) {
609
- --_btn-bg: var(--s-success-900);
610
- }
611
597
  }
612
598
 
613
599
  [s-btn="warning"] {
614
600
  --_btn-bg: var(--s-state-warning);
615
-
616
- &:hover:not(:disabled) {
617
- --_btn-bg: var(--s-warning-800);
618
- }
619
-
620
- &:active:not(:disabled) {
621
- --_btn-bg: var(--s-warning-900);
622
- }
623
601
  }
624
602
 
625
603
  [s-btn][s-size="sm"] {
@@ -647,7 +625,7 @@
647
625
  }
648
626
 
649
627
  [s-btn][s-loading] {
650
- color: #0000;
628
+ color: var(--_btn-bg);
651
629
  pointer-events: none;
652
630
  position: relative;
653
631
 
@@ -691,6 +669,31 @@
691
669
  }
692
670
  }
693
671
 
672
+ @supports (container-type: inline-size) {
673
+ @container surface style(--_surface-depth: 1) {
674
+ :where([s-btn="secondary"]) {
675
+ --_btn-border: var(--s-border-strong);
676
+ }
677
+ }
678
+
679
+ @container surface style(--_surface-depth: 2) {
680
+ :where([s-btn="secondary"]) {
681
+ --_btn-border: var(--s-border-strong);
682
+ --_btn-bg: var(--s-surface-base);
683
+ }
684
+
685
+ :where([s-btn="ghost"]) {
686
+ --_btn-border: var(--s-border-muted);
687
+ }
688
+ }
689
+
690
+ @container surface style(--_surface-depth: -1) {
691
+ :where([s-btn="secondary"]) {
692
+ --_btn-bg: var(--s-surface-base);
693
+ }
694
+ }
695
+ }
696
+
694
697
  :where([s-card]) {
695
698
  --_card-bg: var(--s-surface-raised);
696
699
  --_card-border: var(--s-border-muted);
@@ -757,12 +760,12 @@
757
760
 
758
761
  [s-card="elevated"], [s-card][s-surface="raised"] {
759
762
  --_card-shadow: var(--s-shadow-lg);
760
- --_card-border: transparent;
763
+ --_card-border: oklch(0% 0 0 / 0);
761
764
  }
762
765
 
763
766
  [s-card][s-surface="floating"] {
764
767
  --_card-shadow: var(--s-shadow-xl);
765
- --_card-border: transparent;
768
+ --_card-border: oklch(0% 0 0 / 0);
766
769
  }
767
770
 
768
771
  [s-card="outline"] {
@@ -773,11 +776,15 @@
773
776
 
774
777
  [s-card][s-interactive] {
775
778
  cursor: pointer;
776
- transition: transform var(--s-duration-200) var(--s-ease-out), box-shadow var(--s-duration-200) var(--s-ease-out);
779
+ transition: transform var(--s-duration-200) var(--s-ease-out), box-shadow var(--s-duration-200) var(--s-ease-out), border-color var(--s-duration-200) var(--s-ease-out);
777
780
 
778
781
  &:hover {
779
782
  --_card-shadow: var(--s-shadow-xl);
780
783
  transform: translateY(-4px);
784
+
785
+ @supports (color: oklch(from red l c h)) {
786
+ border-color: oklch(from var(--_card-border) max(calc(l - .1), .05) c h);
787
+ }
781
788
  }
782
789
 
783
790
  &:active {
@@ -852,6 +859,27 @@
852
859
  display: flex;
853
860
  }
854
861
 
862
+ @supports (container-type: inline-size) {
863
+ @container surface style(--_surface-depth: 1) {
864
+ :where([s-card]) {
865
+ --_card-shadow: var(--s-shadow-sm);
866
+ }
867
+ }
868
+
869
+ @container surface style(--_surface-depth: 2) {
870
+ :where([s-card]) {
871
+ --_card-shadow: none;
872
+ --_card-border: var(--s-border-default);
873
+ }
874
+ }
875
+
876
+ @container surface style(--_surface-depth: -1) {
877
+ :where([s-card]) {
878
+ --_card-shadow: var(--s-shadow-md);
879
+ }
880
+ }
881
+ }
882
+
855
883
  :where([s-input]) {
856
884
  --_input-bg: var(--s-surface-base);
857
885
  --_input-border: var(--s-border-default);
@@ -882,6 +910,10 @@
882
910
  --_input-border: var(--s-interactive-primary);
883
911
  outline: 2px solid var(--s-focus-ring);
884
912
  outline-offset: 2px;
913
+
914
+ @supports (color: oklch(from red l c h)) {
915
+ outline-color: oklch(from var(--s-interactive-primary) l c h / .3);
916
+ }
885
917
  }
886
918
 
887
919
  &:disabled {
@@ -1084,6 +1116,41 @@
1084
1116
  }
1085
1117
  }
1086
1118
 
1119
+ @supports (container-type: inline-size) {
1120
+ @container surface style(--_surface-depth: 1) {
1121
+ :where([s-input]) {
1122
+ --_input-bg: var(--s-surface-sunken);
1123
+ }
1124
+
1125
+ :where([s-checkbox]) input, :where([s-radio]) input {
1126
+ background-color: var(--s-surface-sunken);
1127
+ }
1128
+ }
1129
+
1130
+ @container surface style(--_surface-depth: 2) {
1131
+ :where([s-input]) {
1132
+ --_input-bg: var(--s-surface-sunken);
1133
+ --_input-border: var(--s-border-strong);
1134
+ }
1135
+
1136
+ :where([s-checkbox]) input, :where([s-radio]) input {
1137
+ background-color: var(--s-surface-sunken);
1138
+ border-color: var(--s-border-strong);
1139
+ }
1140
+ }
1141
+
1142
+ @container surface style(--_surface-depth: -1) {
1143
+ :where([s-input]) {
1144
+ --_input-bg: var(--s-surface-raised);
1145
+ --_input-border: var(--s-border-muted);
1146
+ }
1147
+
1148
+ :where([s-checkbox]) input, :where([s-radio]) input {
1149
+ background-color: var(--s-surface-raised);
1150
+ }
1151
+ }
1152
+ }
1153
+
1087
1154
  dialog[s-modal]:not([open]) {
1088
1155
  display: none;
1089
1156
  }
@@ -1138,6 +1205,10 @@
1138
1205
  backdrop-filter: blur(4px);
1139
1206
  animation: s-modal-backdrop-in var(--s-duration-200) var(--s-ease-out);
1140
1207
  background: oklch(0% 0 0 / .5);
1208
+
1209
+ @supports (color: oklch(from red l c h)) {
1210
+ background: oklch(from var(--s-primary-500) .1 .02 h / .5);
1211
+ }
1141
1212
  }
1142
1213
 
1143
1214
  @keyframes s-modal-backdrop-in {
@@ -1177,13 +1248,29 @@
1177
1248
  }
1178
1249
 
1179
1250
  dialog[s-modal][s-position="left"] {
1180
- margin-left: var(--s-space-8);
1251
+ border-radius: 0 var(--_modal-radius) var(--_modal-radius) 0;
1252
+ margin-left: 0;
1181
1253
  margin-right: auto;
1182
1254
  }
1183
1255
 
1256
+ @media (width >= 640px) {
1257
+ dialog[s-modal][s-position="left"] {
1258
+ margin-left: var(--s-space-8);
1259
+ border-radius: var(--_modal-radius);
1260
+ }
1261
+ }
1262
+
1184
1263
  dialog[s-modal][s-position="right"] {
1264
+ border-radius: var(--_modal-radius) 0 0 var(--_modal-radius);
1185
1265
  margin-left: auto;
1186
- margin-right: var(--s-space-8);
1266
+ margin-right: 0;
1267
+ }
1268
+
1269
+ @media (width >= 640px) {
1270
+ dialog[s-modal][s-position="right"] {
1271
+ margin-right: var(--s-space-8);
1272
+ border-radius: var(--_modal-radius);
1273
+ }
1187
1274
  }
1188
1275
 
1189
1276
  :where([s-modal-header]) {
@@ -1619,6 +1706,519 @@
1619
1706
  :root[style*="color-scheme: dark"] :where([s-skip-link]:not([s-skip-link="secondary"]):not([s-skip-link="contrast"])), :root[style*="color-scheme:dark"] :where([s-skip-link]:not([s-skip-link="secondary"]):not([s-skip-link="contrast"])) {
1620
1707
  --_skip-bg: var(--s-primary-500);
1621
1708
  }
1709
+
1710
+ :where([s-badge]) {
1711
+ --_badge-bg: var(--s-neutral-200);
1712
+ --_badge-text: var(--s-text-primary);
1713
+ justify-content: center;
1714
+ align-items: center;
1715
+ gap: var(--s-space-1);
1716
+ padding: var(--s-space-1) var(--s-space-2);
1717
+ border-radius: var(--s-radius-sm);
1718
+ font-weight: var(--s-font-medium);
1719
+ font-size: var(--s-text-xs);
1720
+ white-space: nowrap;
1721
+ vertical-align: middle;
1722
+ background-color: var(--_badge-bg);
1723
+ color: var(--_badge-text);
1724
+ line-height: 1.25;
1725
+ display: inline-flex;
1726
+
1727
+ @supports (color: oklch(from red l c h)) {
1728
+ color: oklch(from var(--_badge-bg) clamp(.15, calc((.55 - l) * 1000 + .15), .95) 0 0);
1729
+ }
1730
+
1731
+ @supports (color: contrast-color(red)) {
1732
+ color: contrast-color(var(--_badge-bg));
1733
+ }
1734
+ }
1735
+
1736
+ [s-badge="primary"] {
1737
+ --_badge-bg: var(--s-primary-700);
1738
+ background-color: var(--s-primary-700);
1739
+ color: #fff;
1740
+ }
1741
+
1742
+ [s-badge="secondary"] {
1743
+ --_badge-bg: var(--s-neutral-700);
1744
+ background-color: var(--s-neutral-700);
1745
+ color: #fff;
1746
+ }
1747
+
1748
+ [s-badge="success"] {
1749
+ --_badge-bg: var(--s-success-700);
1750
+ background-color: var(--s-success-700);
1751
+ color: #fff;
1752
+ }
1753
+
1754
+ [s-badge="warning"] {
1755
+ --_badge-bg: var(--s-warning-400);
1756
+ background-color: var(--s-warning-400);
1757
+ color: var(--s-warning-950);
1758
+ }
1759
+
1760
+ [s-badge="danger"] {
1761
+ --_badge-bg: var(--s-danger-700);
1762
+ background-color: var(--s-danger-700);
1763
+ color: #fff;
1764
+ }
1765
+
1766
+ [s-badge="accent"] {
1767
+ --_badge-bg: var(--s-accent-700);
1768
+ background-color: var(--s-accent-700);
1769
+ color: #fff;
1770
+ }
1771
+
1772
+ [s-badge="outline"] {
1773
+ --_badge-bg: transparent;
1774
+ color: var(--s-text-primary);
1775
+ box-shadow: inset 0 0 0 1px var(--s-border-default);
1776
+ background-color: #0000;
1777
+ }
1778
+
1779
+ [s-badge="outline-primary"] {
1780
+ --_badge-bg: transparent;
1781
+ background-color: oklch(from var(--s-primary-500) l c h / .1);
1782
+ color: light-dark(var(--s-primary-700), var(--s-primary-300));
1783
+ box-shadow: inset 0 0 0 1px light-dark(var(--s-primary-500), var(--s-primary-400));
1784
+ }
1785
+
1786
+ [s-badge="outline-success"] {
1787
+ --_badge-bg: transparent;
1788
+ background-color: oklch(from var(--s-success-500) l c h / .1);
1789
+ color: light-dark(var(--s-success-700), var(--s-success-300));
1790
+ box-shadow: inset 0 0 0 1px light-dark(var(--s-success-500), var(--s-success-400));
1791
+ }
1792
+
1793
+ [s-badge="outline-warning"] {
1794
+ --_badge-bg: transparent;
1795
+ background-color: oklch(from var(--s-warning-500) l c h / .1);
1796
+ color: light-dark(var(--s-warning-800), var(--s-warning-300));
1797
+ box-shadow: inset 0 0 0 1px light-dark(var(--s-warning-500), var(--s-warning-400));
1798
+ }
1799
+
1800
+ [s-badge="outline-danger"] {
1801
+ --_badge-bg: transparent;
1802
+ background-color: oklch(from var(--s-danger-500) l c h / .1);
1803
+ color: light-dark(var(--s-danger-800), var(--s-danger-300));
1804
+ box-shadow: inset 0 0 0 1px light-dark(var(--s-danger-500), var(--s-danger-400));
1805
+ }
1806
+
1807
+ [s-badge][s-size="sm"] {
1808
+ padding: .125rem .375rem;
1809
+ font-size: .625rem;
1810
+ }
1811
+
1812
+ [s-badge][s-size="lg"] {
1813
+ padding: var(--s-space-2) var(--s-space-4);
1814
+ font-size: var(--s-text-sm);
1815
+ }
1816
+
1817
+ [s-badge][s-pill] {
1818
+ border-radius: var(--s-radius-full);
1819
+ }
1820
+
1821
+ [s-badge][s-dot] {
1822
+ border-radius: var(--s-radius-full);
1823
+ width: .5rem;
1824
+ height: .5rem;
1825
+ padding: 0;
1826
+ }
1827
+
1828
+ [s-badge][s-dot][s-size="sm"] {
1829
+ width: .375rem;
1830
+ height: .375rem;
1831
+ }
1832
+
1833
+ [s-badge][s-dot][s-size="lg"] {
1834
+ width: .75rem;
1835
+ height: .75rem;
1836
+ }
1837
+
1838
+ @media (forced-colors: active) {
1839
+ [s-badge] {
1840
+ border: 1px solid canvastext;
1841
+ }
1842
+ }
1843
+
1844
+ @supports (container-type: inline-size) {
1845
+ @container surface style(--_surface-depth: 1) {
1846
+ :where([s-badge=""]) {
1847
+ --_badge-bg: var(--s-neutral-300);
1848
+ }
1849
+
1850
+ :where([s-badge="outline"]) {
1851
+ box-shadow: inset 0 0 0 1px var(--s-border-strong);
1852
+ }
1853
+ }
1854
+
1855
+ @container surface style(--_surface-depth: 2) {
1856
+ :where([s-badge=""]) {
1857
+ --_badge-bg: var(--s-neutral-300);
1858
+ box-shadow: var(--s-shadow-sm);
1859
+ }
1860
+
1861
+ :where([s-badge="outline"]) {
1862
+ box-shadow: inset 0 0 0 1px var(--s-border-strong);
1863
+ }
1864
+ }
1865
+
1866
+ @container surface style(--_surface-depth: -1) {
1867
+ :where([s-badge=""]) {
1868
+ --_badge-bg: var(--s-neutral-100);
1869
+ }
1870
+ }
1871
+ }
1872
+
1873
+ :where([s-tooltip]) {
1874
+ --_tooltip-bg: var(--s-surface-overlay);
1875
+ --_tooltip-text: var(--s-text-inverse);
1876
+ --_tooltip-radius: var(--s-radius-md);
1877
+ --_tooltip-padding-x: var(--s-space-3);
1878
+ --_tooltip-padding-y: var(--s-space-1_5);
1879
+ --_tooltip-offset: var(--s-space-2);
1880
+ --_tooltip-max-width: 200px;
1881
+ --_tooltip-arrow-size: 6px;
1882
+ position: relative;
1883
+ }
1884
+
1885
+ :where([s-tooltip]):after {
1886
+ content: attr(s-tooltip);
1887
+ visibility: hidden;
1888
+ opacity: 0;
1889
+ z-index: 9999;
1890
+ margin-bottom: var(--_tooltip-offset);
1891
+ background-color: var(--_tooltip-bg);
1892
+ color: var(--_tooltip-text);
1893
+ padding: var(--_tooltip-padding-y) var(--_tooltip-padding-x);
1894
+ border-radius: var(--_tooltip-radius);
1895
+ box-shadow: var(--s-shadow-md);
1896
+ position: absolute;
1897
+ bottom: 100%;
1898
+ left: 50%;
1899
+ transform: translateX(-50%)translateY(4px);
1900
+
1901
+ @supports (color: oklch(from red l c h)) {
1902
+ border: 1px solid oklch(from var(--_tooltip-bg) max(calc(l - .1), .05) c h);
1903
+ }
1904
+
1905
+ font-size: var(--s-text-xs);
1906
+ font-weight: var(--s-font-medium);
1907
+ line-height: var(--s-leading-tight);
1908
+ text-align: center;
1909
+ text-wrap: balance;
1910
+ min-width: min(100%, var(--_tooltip-max-width));
1911
+ max-width: var(--_tooltip-max-width);
1912
+ pointer-events: none;
1913
+ transition: opacity var(--s-duration-150) var(--s-ease-out), visibility var(--s-duration-150) var(--s-ease-out), transform var(--s-duration-150) var(--s-ease-out);
1914
+ }
1915
+
1916
+ :where([s-tooltip]):before {
1917
+ content: "";
1918
+ visibility: hidden;
1919
+ opacity: 0;
1920
+ z-index: 9999;
1921
+ margin-bottom: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
1922
+ border-left: var(--_tooltip-arrow-size) solid transparent;
1923
+ border-right: var(--_tooltip-arrow-size) solid transparent;
1924
+ border-top: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
1925
+ pointer-events: none;
1926
+ transition: opacity var(--s-duration-150) var(--s-ease-out), visibility var(--s-duration-150) var(--s-ease-out), transform var(--s-duration-150) var(--s-ease-out);
1927
+ position: absolute;
1928
+ bottom: 100%;
1929
+ left: 50%;
1930
+ transform: translateX(-50%)translateY(4px);
1931
+ }
1932
+
1933
+ [s-tooltip]:hover:after, [s-tooltip]:hover:before, [s-tooltip]:focus-visible:after, [s-tooltip]:focus-visible:before {
1934
+ visibility: visible;
1935
+ opacity: 1;
1936
+ transform: translateX(-50%)translateY(0);
1937
+ }
1938
+
1939
+ [s-tooltip-pos="bottom"]:after {
1940
+ margin-bottom: 0;
1941
+ margin-top: var(--_tooltip-offset);
1942
+ top: 100%;
1943
+ bottom: auto;
1944
+ transform: translateX(-50%)translateY(-4px);
1945
+ }
1946
+
1947
+ [s-tooltip-pos="bottom"]:before {
1948
+ margin-bottom: 0;
1949
+ margin-top: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
1950
+ border-top: none;
1951
+ border-bottom: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
1952
+ top: 100%;
1953
+ bottom: auto;
1954
+ transform: translateX(-50%)translateY(-4px);
1955
+ }
1956
+
1957
+ [s-tooltip-pos="bottom"]:hover:after, [s-tooltip-pos="bottom"]:hover:before, [s-tooltip-pos="bottom"]:focus-visible:after, [s-tooltip-pos="bottom"]:focus-visible:before {
1958
+ transform: translateX(-50%)translateY(0);
1959
+ }
1960
+
1961
+ [s-tooltip-pos="left"]:after {
1962
+ margin-bottom: 0;
1963
+ margin-right: var(--_tooltip-offset);
1964
+ inset: 50% 100% auto auto;
1965
+ transform: translateY(-50%)translateX(4px);
1966
+ }
1967
+
1968
+ [s-tooltip-pos="left"]:before {
1969
+ margin-bottom: 0;
1970
+ margin-right: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
1971
+ border-top: var(--_tooltip-arrow-size) solid transparent;
1972
+ border-bottom: var(--_tooltip-arrow-size) solid transparent;
1973
+ border-left: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
1974
+ border-right: none;
1975
+ inset: 50% 100% auto auto;
1976
+ transform: translateY(-50%)translateX(4px);
1977
+ }
1978
+
1979
+ [s-tooltip-pos="left"]:hover:after, [s-tooltip-pos="left"]:hover:before, [s-tooltip-pos="left"]:focus-visible:after, [s-tooltip-pos="left"]:focus-visible:before {
1980
+ transform: translateY(-50%)translateX(0);
1981
+ }
1982
+
1983
+ [s-tooltip-pos="right"]:after {
1984
+ margin-bottom: 0;
1985
+ margin-left: var(--_tooltip-offset);
1986
+ top: 50%;
1987
+ bottom: auto;
1988
+ left: 100%;
1989
+ transform: translateY(-50%)translateX(-4px);
1990
+ }
1991
+
1992
+ [s-tooltip-pos="right"]:before {
1993
+ margin-bottom: 0;
1994
+ margin-left: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
1995
+ border-top: var(--_tooltip-arrow-size) solid transparent;
1996
+ border-bottom: var(--_tooltip-arrow-size) solid transparent;
1997
+ border-right: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
1998
+ border-left: none;
1999
+ top: 50%;
2000
+ bottom: auto;
2001
+ left: 100%;
2002
+ transform: translateY(-50%)translateX(-4px);
2003
+ }
2004
+
2005
+ [s-tooltip-pos="right"]:hover:after, [s-tooltip-pos="right"]:hover:before, [s-tooltip-pos="right"]:focus-visible:after, [s-tooltip-pos="right"]:focus-visible:before {
2006
+ transform: translateY(-50%)translateX(0);
2007
+ }
2008
+
2009
+ @media (prefers-reduced-motion: reduce) {
2010
+ [s-tooltip]:after, [s-tooltip]:before {
2011
+ transition: none;
2012
+ }
2013
+ }
2014
+
2015
+ @media (forced-colors: active) {
2016
+ [s-tooltip]:after {
2017
+ color: canvastext;
2018
+ background-color: canvas;
2019
+ border: 1px solid canvastext;
2020
+ }
2021
+
2022
+ [s-tooltip]:before {
2023
+ display: none;
2024
+ }
2025
+ }
2026
+
2027
+ :where([s-menu]) {
2028
+ --_menu-bg: var(--s-surface-raised);
2029
+ --_menu-border: var(--s-border-muted);
2030
+ --_menu-radius: var(--s-radius-lg);
2031
+ --_menu-shadow: var(--s-shadow-lg);
2032
+ --_menu-min-width: 10rem;
2033
+ --_menu-padding: var(--s-space-1);
2034
+ --_menu-offset: var(--s-space-1);
2035
+ }
2036
+
2037
+ [s-menu] {
2038
+ anchor-scope: --menu-trigger;
2039
+ display: inline-block;
2040
+ position: relative;
2041
+ }
2042
+
2043
+ [s-menu]::marker {
2044
+ display: none;
2045
+ }
2046
+
2047
+ [s-menu] ::-webkit-details-marker {
2048
+ display: none;
2049
+ }
2050
+
2051
+ [s-menu-trigger] {
2052
+ cursor: pointer;
2053
+ anchor-name: --menu-trigger;
2054
+ list-style: none;
2055
+ }
2056
+
2057
+ [s-menu-trigger]::-webkit-details-marker {
2058
+ display: none;
2059
+ }
2060
+
2061
+ [s-menu-items] {
2062
+ z-index: 9999;
2063
+ margin-top: var(--_menu-offset);
2064
+ background-color: var(--_menu-bg);
2065
+ border: 1px solid var(--_menu-border);
2066
+ border-radius: var(--_menu-radius);
2067
+ box-shadow: var(--_menu-shadow);
2068
+ min-width: var(--_menu-min-width);
2069
+ padding: var(--_menu-padding);
2070
+ font-size: var(--s-text-sm);
2071
+ color: var(--s-text-primary);
2072
+ opacity: 0;
2073
+ visibility: hidden;
2074
+ transition: opacity var(--s-duration-150) var(--s-ease-out), transform var(--s-duration-150) var(--s-ease-out), visibility var(--s-duration-150);
2075
+ flex-direction: column;
2076
+ display: flex;
2077
+ position: absolute;
2078
+ top: 100%;
2079
+ left: 0;
2080
+ transform: scale(.95)translateY(-4px);
2081
+ }
2082
+
2083
+ [s-menu][open] > [s-menu-items] {
2084
+ opacity: 1;
2085
+ visibility: visible;
2086
+ transform: scale(1)translateY(0);
2087
+ }
2088
+
2089
+ [s-menu="end"] > [s-menu-items] {
2090
+ left: auto;
2091
+ right: 0;
2092
+ }
2093
+
2094
+ [s-menu="top"] > [s-menu-items] {
2095
+ margin-top: 0;
2096
+ margin-bottom: var(--_menu-offset);
2097
+ top: auto;
2098
+ bottom: 100%;
2099
+ transform: scale(.95)translateY(4px);
2100
+ }
2101
+
2102
+ [s-menu="top"][open] > [s-menu-items] {
2103
+ transform: scale(1)translateY(0);
2104
+ }
2105
+
2106
+ [s-menu="top-end"] > [s-menu-items] {
2107
+ margin-top: 0;
2108
+ margin-bottom: var(--_menu-offset);
2109
+ inset: auto 0 100% auto;
2110
+ transform: scale(.95)translateY(4px);
2111
+ }
2112
+
2113
+ [s-menu="top-end"][open] > [s-menu-items] {
2114
+ transform: scale(1)translateY(0);
2115
+ }
2116
+
2117
+ @supports (anchor-scope: all) {
2118
+ [s-menu-items] {
2119
+ position-anchor: --menu-trigger;
2120
+ inset: auto;
2121
+ margin: 0;
2122
+ position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline;
2123
+ margin-block-start: var(--_menu-offset);
2124
+ position: absolute;
2125
+ inset-block-start: anchor(end);
2126
+ inset-inline-start: anchor(start);
2127
+ }
2128
+
2129
+ [s-menu="end"] > [s-menu-items] {
2130
+ inset-inline-start: auto;
2131
+ inset-inline-end: anchor(end);
2132
+ }
2133
+
2134
+ [s-menu="top"] > [s-menu-items] {
2135
+ margin-block-start: 0;
2136
+ margin-block-end: var(--_menu-offset);
2137
+ inset-block-start: auto;
2138
+ inset-block-end: anchor(start);
2139
+ }
2140
+
2141
+ [s-menu="top-end"] > [s-menu-items] {
2142
+ margin-block-start: 0;
2143
+ margin-block-end: var(--_menu-offset);
2144
+ inset-block-start: auto;
2145
+ inset-block-end: anchor(start);
2146
+ inset-inline-start: auto;
2147
+ inset-inline-end: anchor(end);
2148
+ }
2149
+ }
2150
+
2151
+ [s-menu-item] {
2152
+ align-items: center;
2153
+ gap: var(--s-space-2);
2154
+ width: 100%;
2155
+ padding: var(--s-space-2) var(--s-space-3);
2156
+ border-radius: var(--s-radius-md);
2157
+ color: var(--s-text-primary);
2158
+ font-size: inherit;
2159
+ text-align: start;
2160
+ cursor: pointer;
2161
+ transition: background-color var(--s-duration-100) var(--s-ease-out);
2162
+ background: none;
2163
+ border: none;
2164
+ display: flex;
2165
+ }
2166
+
2167
+ [s-menu-item]:hover {
2168
+ background-color: var(--s-surface-sunken);
2169
+ }
2170
+
2171
+ [s-menu-item]:focus-visible {
2172
+ outline: 2px solid var(--s-focus-ring);
2173
+ outline-offset: -2px;
2174
+ }
2175
+
2176
+ [s-menu-item]:disabled {
2177
+ opacity: .5;
2178
+ cursor: not-allowed;
2179
+ }
2180
+
2181
+ [s-menu-item][s-danger] {
2182
+ color: var(--s-state-danger);
2183
+ }
2184
+
2185
+ [s-menu-item][s-danger]:hover {
2186
+ background-color: var(--s-state-danger-bg);
2187
+ }
2188
+
2189
+ [s-menu-divider] {
2190
+ height: 1px;
2191
+ margin: var(--s-space-1) 0;
2192
+ background-color: var(--s-border-muted);
2193
+ border: none;
2194
+ }
2195
+
2196
+ [s-menu-label] {
2197
+ padding: var(--s-space-2) var(--s-space-3);
2198
+ font-size: var(--s-text-xs);
2199
+ font-weight: var(--s-font-semibold);
2200
+ color: var(--s-text-secondary);
2201
+ text-transform: uppercase;
2202
+ letter-spacing: var(--s-tracking-wide);
2203
+ display: block;
2204
+ }
2205
+
2206
+ @media (prefers-reduced-motion: reduce) {
2207
+ [s-menu-items] {
2208
+ transition: none;
2209
+ }
2210
+ }
2211
+
2212
+ @media (forced-colors: active) {
2213
+ [s-menu-items] {
2214
+ border: 2px solid canvastext;
2215
+ }
2216
+
2217
+ [s-menu-item]:hover {
2218
+ color: highlighttext;
2219
+ background-color: highlight;
2220
+ }
2221
+ }
1622
2222
  }
1623
2223
 
1624
2224
  @layer shift.utils {