@zovaris/sephiro 0.6.0 → 0.7.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.
@@ -1,6 +1,6 @@
1
1
  :where([class^="sph-"], [class*=" sph-"]) {
2
- --tw-font-weight: initial;
3
2
  --tw-border-style: solid;
3
+ --tw-font-weight: initial;
4
4
  --tw-leading: initial;
5
5
  --tw-shadow: 0 0 #0000;
6
6
  --tw-shadow-color: initial;
@@ -16,10 +16,267 @@
16
16
  --tw-ring-offset-width: 0px;
17
17
  --tw-ring-offset-color: #fff;
18
18
  --tw-ring-offset-shadow: 0 0 #0000;
19
- --tw-duration: initial;
20
- --tw-ease: initial;
21
19
  }
22
20
  /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
21
+ @keyframes sph-fade-in {
22
+ from {
23
+ opacity: 0;
24
+ }
25
+ to {
26
+ opacity: 1;
27
+ }
28
+ }
29
+ @keyframes sph-fade-out {
30
+ from {
31
+ opacity: 1;
32
+ }
33
+ to {
34
+ opacity: 0;
35
+ }
36
+ }
37
+ @keyframes sph-rise-in {
38
+ from {
39
+ opacity: 0;
40
+ transform: translateY(6px);
41
+ }
42
+ to {
43
+ opacity: 1;
44
+ transform: translateY(0);
45
+ }
46
+ }
47
+ @keyframes sph-rise-out {
48
+ from {
49
+ opacity: 1;
50
+ transform: translateY(0);
51
+ }
52
+ to {
53
+ opacity: 0;
54
+ transform: translateY(4px);
55
+ }
56
+ }
57
+ @keyframes sph-drop-in {
58
+ from {
59
+ opacity: 0;
60
+ transform: translateY(-5px) scale(0.975);
61
+ }
62
+ to {
63
+ opacity: 1;
64
+ transform: translateY(0) scale(1);
65
+ }
66
+ }
67
+ @keyframes sph-drop-out {
68
+ from {
69
+ opacity: 1;
70
+ transform: translateY(0) scale(1);
71
+ }
72
+ to {
73
+ opacity: 0;
74
+ transform: translateY(-3px) scale(0.98);
75
+ }
76
+ }
77
+ @keyframes sph-pop {
78
+ from {
79
+ opacity: 0;
80
+ transform: scale(0.86);
81
+ }
82
+ 60% {
83
+ opacity: 1;
84
+ transform: scale(1.06);
85
+ }
86
+ to {
87
+ opacity: 1;
88
+ transform: scale(1);
89
+ }
90
+ }
91
+ @keyframes sph-bounce {
92
+ 0% {
93
+ transform: scale(0.88);
94
+ }
95
+ 60% {
96
+ transform: scale(1.12);
97
+ }
98
+ 100% {
99
+ transform: scale(1);
100
+ }
101
+ }
102
+ @keyframes sph-glow-pulse {
103
+ from {
104
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--sph-accent) 60%, transparent);
105
+ }
106
+ to {
107
+ box-shadow: 0 0 0 7px transparent;
108
+ }
109
+ }
110
+ @keyframes sph-shake {
111
+ 0%, 100% {
112
+ transform: translateX(0);
113
+ }
114
+ 24% {
115
+ transform: translateX(-3px);
116
+ }
117
+ 48% {
118
+ transform: translateX(3px);
119
+ }
120
+ 72% {
121
+ transform: translateX(-2px);
122
+ }
123
+ 88% {
124
+ transform: translateX(1px);
125
+ }
126
+ }
127
+ @keyframes sph-blur-in {
128
+ from {
129
+ opacity: 0;
130
+ transform: translateX(-8px);
131
+ filter: blur(4px);
132
+ }
133
+ to {
134
+ opacity: 1;
135
+ transform: translateX(0);
136
+ filter: blur(0);
137
+ }
138
+ }
139
+ @keyframes sph-digit-pop {
140
+ from {
141
+ opacity: 0;
142
+ transform: translateY(0.55em);
143
+ filter: blur(3px);
144
+ }
145
+ to {
146
+ opacity: 1;
147
+ transform: translateY(0);
148
+ filter: blur(0);
149
+ }
150
+ }
151
+ @keyframes sph-dot-bounce {
152
+ 0%, 85%, 100% {
153
+ transform: translateY(0);
154
+ opacity: 0.4;
155
+ }
156
+ 40% {
157
+ transform: translateY(-3px);
158
+ opacity: 1;
159
+ }
160
+ }
161
+ @keyframes sph-draw-x {
162
+ from {
163
+ transform: scaleX(0);
164
+ }
165
+ to {
166
+ transform: scaleX(1);
167
+ }
168
+ }
169
+ @keyframes sph-draw-y {
170
+ from {
171
+ transform: scaleY(0);
172
+ }
173
+ to {
174
+ transform: scaleY(1);
175
+ }
176
+ }
177
+ .sph-motion-in {
178
+ animation: sph-rise-in var(--sph-motion-slow) var(--sph-ease-emphasis) both;
179
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
180
+ }
181
+ .sph-motion-in--fade {
182
+ animation-name: sph-fade-in;
183
+ }
184
+ .sph-motion-in--pop {
185
+ animation-name: sph-pop;
186
+ animation-duration: var(--sph-motion-normal);
187
+ }
188
+ .sph-motion-in--blur {
189
+ animation-name: sph-blur-in;
190
+ }
191
+ .sph-motion-in--digit {
192
+ animation-name: sph-digit-pop;
193
+ }
194
+ .sph-typing {
195
+ display: inline-flex;
196
+ gap: 3px;
197
+ align-items: center;
198
+ color: inherit;
199
+ }
200
+ .sph-typing > * {
201
+ inline-size: 5px;
202
+ block-size: 5px;
203
+ border-radius: 999px;
204
+ background: currentcolor;
205
+ animation: sph-dot-bounce 1.1s var(--sph-ease-standard) infinite;
206
+ }
207
+ .sph-typing > :nth-child(2) {
208
+ animation-delay: 130ms;
209
+ }
210
+ .sph-typing > :nth-child(3) {
211
+ animation-delay: 260ms;
212
+ }
213
+ @media (prefers-reduced-motion: reduce) {
214
+ .sph-typing > * {
215
+ animation: none;
216
+ opacity: 0.6;
217
+ }
218
+ }
219
+ .sph-avatar {
220
+ position: relative;
221
+ display: inline-flex;
222
+ flex-shrink: 0;
223
+ align-items: center;
224
+ justify-content: center;
225
+ border-radius: calc(infinity * 1px);
226
+ border-style: var(--tw-border-style);
227
+ border-width: 0px;
228
+ background-color: var(--sph-raised);
229
+ font-family: var(--sph-font-sans);
230
+ --tw-font-weight: var(--font-weight-medium, 500);
231
+ font-weight: var(--font-weight-medium, 500);
232
+ color: var(--sph-text-muted);
233
+ inline-size: 32px;
234
+ block-size: 32px;
235
+ user-select: none;
236
+ }
237
+ .sph-avatar[data-size="sm"] {
238
+ inline-size: 24px;
239
+ block-size: 24px;
240
+ font-size: 10px;
241
+ }
242
+ .sph-avatar[data-size="lg"] {
243
+ inline-size: 40px;
244
+ block-size: 40px;
245
+ font-size: 14px;
246
+ }
247
+ .sph-avatar__image {
248
+ width: 100%;
249
+ height: 100%;
250
+ border-radius: calc(infinity * 1px);
251
+ object-fit: cover;
252
+ }
253
+ .sph-avatar__initials {
254
+ --tw-leading: 1;
255
+ line-height: 1;
256
+ letter-spacing: 0.02em;
257
+ }
258
+ .sph-avatar__status {
259
+ position: absolute;
260
+ inset-block-end: -1px;
261
+ inset-inline-end: -1px;
262
+ inline-size: 9px;
263
+ block-size: 9px;
264
+ border-radius: 999px;
265
+ box-shadow: 0 0 0 2px var(--sph-surface);
266
+ animation: sph-pop var(--sph-motion-normal) var(--sph-ease-spring) both;
267
+ }
268
+ .sph-avatar__status[data-status="online"] {
269
+ background: var(--sph-success);
270
+ }
271
+ .sph-avatar__status[data-status="busy"] {
272
+ background: var(--sph-danger);
273
+ }
274
+ .sph-avatar__status[data-status="away"] {
275
+ background: var(--sph-warning);
276
+ }
277
+ .sph-avatar__status[data-status="offline"] {
278
+ background: var(--sph-border-strong);
279
+ }
23
280
  .sph-badge {
24
281
  display: inline-flex;
25
282
  align-items: center;
@@ -91,7 +348,11 @@
91
348
  cursor: pointer;
92
349
  font-family: var(--sph-font-sans);
93
350
  font-weight: 550;
94
- transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
351
+ position: relative;
352
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-normal) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
353
+ }
354
+ .sph-button:hover:not(:disabled) {
355
+ transform: translateY(-1px);
95
356
  }
96
357
  .sph-button[data-size="sm"] {
97
358
  height: calc(var(--spacing, 0.25rem) * 8);
@@ -106,16 +367,38 @@
106
367
  font-size: var(--text-sm, 0.875rem);
107
368
  line-height: var(--tw-leading, var(--text-sm--line-height, calc(1.25 / 0.875)));
108
369
  }
370
+ .sph-button:active:not(:disabled) {
371
+ transform: translateY(1px) scale(0.98);
372
+ }
109
373
  .sph-button[data-variant="primary"] {
110
374
  background-color: var(--sph-accent);
111
375
  color: var(--sph-on-accent);
376
+ overflow: hidden;
377
+ }
378
+ .sph-button[data-variant="primary"]:hover:not(:disabled) {
379
+ box-shadow: 0 8px 20px -10px var(--sph-accent);
380
+ @supports (color: color-mix(in lab, red, red)) {
381
+ box-shadow: 0 8px 20px -10px color-mix(in srgb, var(--sph-accent) 80%, transparent);
382
+ }
383
+ }
384
+ .sph-button[data-variant="primary"]::after {
385
+ content: "";
386
+ position: absolute;
387
+ inset: 0;
388
+ background: linear-gradient( 105deg, transparent 32%, rgb(255 255 255 / 0.22) 50%, transparent 68% );
389
+ transform: translateX(-140%);
390
+ transition: transform var(--sph-motion-slow) var(--sph-ease-standard);
391
+ pointer-events: none;
392
+ }
393
+ .sph-button[data-variant="primary"]:hover:not(:disabled)::after {
394
+ transform: translateX(140%);
112
395
  }
113
396
  .sph-button[data-variant="primary"]:hover {
114
397
  background-color: var(--sph-accent-hover);
115
398
  }
116
399
  .sph-button[data-variant="primary"]:active {
117
400
  background-color: var(--sph-accent-pressed);
118
- transform: translateY(1px);
401
+ transform: translateY(1px) scale(0.98);
119
402
  }
120
403
  .sph-button[data-variant="secondary"] {
121
404
  border-style: var(--tw-border-style);
@@ -198,6 +481,7 @@
198
481
  .sph-checkbox__input:checked + .sph-checkbox__box {
199
482
  border-color: var(--sph-accent);
200
483
  background-color: var(--sph-accent);
484
+ animation: sph-bounce var(--sph-motion-slow) var(--sph-ease-spring);
201
485
  }
202
486
  .sph-checkbox__check {
203
487
  display: block;
@@ -245,7 +529,8 @@
245
529
  box-sizing: border-box;
246
530
  cursor: pointer;
247
531
  font-family: var(--sph-font-sans);
248
- transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
532
+ position: relative;
533
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-normal) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
249
534
  }
250
535
  .sph-icon-button[data-size="sm"] {
251
536
  width: calc(var(--spacing, 0.25rem) * 8);
@@ -270,6 +555,19 @@
270
555
  .sph-icon-button[data-variant="solid"] {
271
556
  background-color: var(--sph-accent);
272
557
  color: var(--sph-on-accent);
558
+ overflow: hidden;
559
+ }
560
+ .sph-icon-button[data-variant="solid"]::after {
561
+ content: "";
562
+ position: absolute;
563
+ inset: 0;
564
+ background: linear-gradient( 105deg, transparent 32%, rgb(255 255 255 / 0.22) 50%, transparent 68% );
565
+ transform: translateX(-160%);
566
+ transition: transform var(--sph-motion-slow) var(--sph-ease-standard);
567
+ pointer-events: none;
568
+ }
569
+ .sph-icon-button[data-variant="solid"]:hover:not(:disabled)::after {
570
+ transform: translateX(160%);
273
571
  }
274
572
  .sph-icon-button[data-variant="solid"]:hover:not(:disabled) {
275
573
  background-color: var(--sph-accent-hover);
@@ -338,24 +636,147 @@
338
636
  }
339
637
  .sph-input[aria-invalid="true"] {
340
638
  border-color: var(--sph-danger);
639
+ animation: sph-shake calc(var(--sph-motion-normal) * 1.8) var(--sph-ease-standard);
341
640
  }
342
641
  .sph-input:disabled {
343
642
  opacity: 50%;
344
643
  cursor: not-allowed;
345
644
  }
346
- .sph-input:focus-visible {
645
+ .sph-input:focus-visible:not(:disabled) {
347
646
  outline: none;
348
- box-shadow: none;
349
- border-color: var(--sph-border-strong);
647
+ background: var(--sph-surface-elevated);
648
+ border-color: var(--sph-focus);
649
+ @supports (color: color-mix(in lab, red, red)) {
650
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
651
+ }
350
652
  }
351
- .sph-input[aria-invalid="true"]:focus-visible {
653
+ .sph-input[aria-invalid="true"]:focus-visible:not(:disabled) {
352
654
  border-color: var(--sph-danger);
655
+ @supports (color: color-mix(in lab, red, red)) {
656
+ border-color: color-mix(in srgb, var(--sph-danger) 70%, var(--sph-border));
657
+ }
353
658
  }
354
659
  @media (prefers-reduced-motion: reduce) {
355
660
  .sph-input {
356
661
  transition: none;
357
662
  }
358
663
  }
664
+ .sph-kbd {
665
+ display: inline-flex;
666
+ align-items: center;
667
+ gap: calc(var(--spacing, 0.25rem) * 0.5);
668
+ border-radius: var(--sph-radius-xs);
669
+ border-style: var(--tw-border-style);
670
+ border-width: 1px;
671
+ border-color: var(--sph-border);
672
+ background-color: var(--sph-raised);
673
+ padding-inline: calc(var(--spacing, 0.25rem) * 1.5);
674
+ color: var(--sph-text-muted);
675
+ min-width: 1.4rem;
676
+ height: 1.4rem;
677
+ box-sizing: border-box;
678
+ font: 11px / 1 var(--sph-font-sans);
679
+ }
680
+ .sph-kbd__key {
681
+ display: inline-flex;
682
+ align-items: center;
683
+ justify-content: center;
684
+ border-style: var(--tw-border-style);
685
+ border-width: 0px;
686
+ background-color: transparent;
687
+ padding: 0px;
688
+ font: inherit;
689
+ color: inherit;
690
+ }
691
+ .sph-progress {
692
+ display: block;
693
+ width: 100%;
694
+ }
695
+ .sph-progress__track {
696
+ position: relative;
697
+ display: block;
698
+ height: calc(var(--spacing, 0.25rem) * 1.5);
699
+ width: 100%;
700
+ overflow: hidden;
701
+ border-radius: calc(infinity * 1px);
702
+ background-color: var(--sph-raised);
703
+ }
704
+ .sph-progress[data-size="sm"] .sph-progress__track {
705
+ height: var(--spacing, 0.25rem);
706
+ }
707
+ .sph-progress[data-size="lg"] .sph-progress__track {
708
+ height: calc(var(--spacing, 0.25rem) * 2);
709
+ }
710
+ .sph-progress__bar {
711
+ display: block;
712
+ height: 100%;
713
+ border-radius: calc(infinity * 1px);
714
+ background-color: var(--sph-accent);
715
+ transition: width var(--sph-motion-normal) var(--sph-ease-standard);
716
+ }
717
+ .sph-progress__bar[data-indeterminate] {
718
+ width: 32%;
719
+ animation: sph-progress-sweep 1.4s var(--sph-ease-standard) infinite;
720
+ }
721
+ @keyframes sph-progress-sweep {
722
+ 0% {
723
+ transform: translateX(-110%);
724
+ }
725
+ 100% {
726
+ transform: translateX(330%);
727
+ }
728
+ }
729
+ @media (prefers-reduced-motion: reduce) {
730
+ .sph-progress__bar {
731
+ transition: none;
732
+ }
733
+ .sph-progress__bar[data-indeterminate] {
734
+ animation: none;
735
+ width: 100%;
736
+ opacity: 0.5;
737
+ }
738
+ }
739
+ .sph-scroll-area {
740
+ overflow: auto;
741
+ scrollbar-width: thin;
742
+ scrollbar-color: var(--sph-border-strong) transparent;
743
+ @supports (color: color-mix(in lab, red, red)) {
744
+ scrollbar-color: color-mix( in srgb, var(--sph-border-strong) 55%, transparent ) transparent;
745
+ }
746
+ }
747
+ .sph-scroll-area[data-orientation="vertical"] {
748
+ overflow-x: hidden;
749
+ }
750
+ .sph-scroll-area[data-orientation="horizontal"] {
751
+ overflow-y: hidden;
752
+ }
753
+ .sph-scroll-area::-webkit-scrollbar {
754
+ width: 8px;
755
+ height: 8px;
756
+ }
757
+ .sph-scroll-area::-webkit-scrollbar-track {
758
+ background: transparent;
759
+ }
760
+ .sph-scroll-area::-webkit-scrollbar-thumb {
761
+ border: 2px solid transparent;
762
+ border-radius: 999px;
763
+ background: var(--sph-border-strong);
764
+ @supports (color: color-mix(in lab, red, red)) {
765
+ background: color-mix(in srgb, var(--sph-border-strong) 45%, transparent);
766
+ }
767
+ background-clip: padding-box;
768
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard);
769
+ }
770
+ .sph-scroll-area:hover::-webkit-scrollbar-thumb, .sph-scroll-area::-webkit-scrollbar-thumb:hover {
771
+ background: var(--sph-border-strong);
772
+ @supports (color: color-mix(in lab, red, red)) {
773
+ background: color-mix(in srgb, var(--sph-border-strong) 80%, transparent);
774
+ }
775
+ background-clip: padding-box;
776
+ }
777
+ .sph-scroll-area::-webkit-scrollbar-corner {
778
+ background: transparent;
779
+ }
359
780
  .sph-skeleton {
360
781
  display: inline-block;
361
782
  min-height: calc(var(--spacing, 0.25rem) * 3);
@@ -366,7 +787,7 @@
366
787
  background-image: linear-gradient( 90deg, transparent, color-mix(in srgb, var(--sph-text) 8%, transparent), transparent );
367
788
  }
368
789
  background-size: 200% 100%;
369
- animation: sph-skeleton-shimmer 1.4s var(--sph-ease-standard) infinite;
790
+ animation: sph-skeleton-shimmer 1.4s linear infinite;
370
791
  }
371
792
  @keyframes sph-skeleton-shimmer {
372
793
  from {
@@ -464,7 +885,10 @@
464
885
  border-radius: 999px;
465
886
  background: var(--sph-slider-fill, var(--sph-accent));
466
887
  box-shadow: 0 0 0 1px var(--sph-slider-ring, var(--sph-surface)), 0 1px 2px rgb(0 0 0 / 0.28);
467
- transition: box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
888
+ transition: box-shadow var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
889
+ }
890
+ .sph-slider__input:active::-webkit-slider-thumb {
891
+ transform: scale(1.18);
468
892
  }
469
893
  .sph-slider__input::-moz-range-thumb {
470
894
  box-sizing: border-box;
@@ -474,6 +898,10 @@
474
898
  border-radius: 999px;
475
899
  background: var(--sph-slider-fill, var(--sph-accent));
476
900
  box-shadow: 0 0 0 1px var(--sph-slider-ring, var(--sph-surface)), 0 1px 2px rgb(0 0 0 / 0.28);
901
+ transition: box-shadow var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
902
+ }
903
+ .sph-slider__input:active::-moz-range-thumb {
904
+ transform: scale(1.18);
477
905
  }
478
906
  .sph-slider__input:hover::-webkit-slider-thumb, .sph-slider__input:active::-webkit-slider-thumb {
479
907
  box-shadow: 0 0 0 1px var(--sph-slider-ring, var(--sph-surface)), 0 0 0 5px var(--sph-accent-soft);
@@ -514,11 +942,15 @@
514
942
  .sph-separator[data-orientation="horizontal"] {
515
943
  height: 1px;
516
944
  width: 100%;
945
+ transform-origin: left center;
946
+ animation: sph-draw-x var(--sph-motion-slow) var(--sph-ease-emphasis) both;
517
947
  }
518
948
  .sph-separator[data-orientation="vertical"] {
519
949
  height: 100%;
520
950
  width: 1px;
521
951
  min-height: 18px;
952
+ transform-origin: center top;
953
+ animation: sph-draw-y var(--sph-motion-slow) var(--sph-ease-emphasis) both;
522
954
  }
523
955
  .sph-spinner {
524
956
  box-sizing: border-box;
@@ -595,7 +1027,7 @@
595
1027
  border: 0.5px solid color-mix(in srgb, var(--sph-border) 86%, transparent);
596
1028
  }
597
1029
  font: 13px / 1.5 var(--sph-font-sans);
598
- transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
1030
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard);
599
1031
  }
600
1032
  .sph-textarea[data-size="sm"] {
601
1033
  min-height: calc(var(--spacing, 0.25rem) * 20);
@@ -611,15 +1043,25 @@
611
1043
  }
612
1044
  .sph-textarea[aria-invalid="true"] {
613
1045
  border-color: var(--sph-danger);
1046
+ animation: sph-shake calc(var(--sph-motion-normal) * 1.8) var(--sph-ease-standard);
614
1047
  }
615
1048
  .sph-textarea:disabled {
616
1049
  opacity: 50%;
617
1050
  cursor: not-allowed;
618
1051
  }
619
- .sph-textarea:focus-visible {
620
- outline: 2px solid var(--sph-focus);
621
- outline-offset: 2px;
622
- box-shadow: 0 0 0 4px var(--sph-focus-ring);
1052
+ .sph-textarea:focus-visible:not(:disabled) {
1053
+ outline: none;
1054
+ background: var(--sph-surface-elevated);
1055
+ border-color: var(--sph-focus);
1056
+ @supports (color: color-mix(in lab, red, red)) {
1057
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
1058
+ }
1059
+ }
1060
+ .sph-textarea[aria-invalid="true"]:focus-visible:not(:disabled) {
1061
+ border-color: var(--sph-danger);
1062
+ @supports (color: color-mix(in lab, red, red)) {
1063
+ border-color: color-mix(in srgb, var(--sph-danger) 70%, var(--sph-border));
1064
+ }
623
1065
  }
624
1066
  @media (prefers-reduced-motion: reduce) {
625
1067
  .sph-textarea {
@@ -660,7 +1102,10 @@
660
1102
  border-radius: calc(infinity * 1px);
661
1103
  background-color: var(--sph-border-strong);
662
1104
  padding: calc(var(--spacing, 0.25rem) * 0.5);
663
- transition: background-color var(--sph-motion-normal) var(--sph-ease-standard);
1105
+ transition: background-color var(--sph-motion-normal) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1106
+ }
1107
+ .sph-toggle:active:not(:disabled) .sph-toggle__track {
1108
+ transform: scale(0.96);
664
1109
  }
665
1110
  .sph-toggle[data-size="sm"] .sph-toggle__track {
666
1111
  height: calc(var(--spacing, 0.25rem) * 4);
@@ -683,7 +1128,7 @@
683
1128
  @supports (color: color-mix(in lab, red, red)) {
684
1129
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--sph-text) 16%, transparent), 0 1px 3px rgb(0 0 0 / 0.3);
685
1130
  }
686
- transition: transform var(--sph-motion-normal) var(--sph-ease-emphasis);
1131
+ transition: transform var(--sph-motion-normal) var(--sph-ease-spring);
687
1132
  }
688
1133
  .sph-toggle[data-size="sm"] .sph-toggle__thumb {
689
1134
  width: calc(var(--spacing, 0.25rem) * 3);
@@ -773,6 +1218,7 @@
773
1218
  color: var(--sph-text-muted);
774
1219
  font-family: var(--sph-font-sans);
775
1220
  line-height: 1.4;
1221
+ animation: sph-rise-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
776
1222
  }
777
1223
  .sph-field-message[data-variant="error"] {
778
1224
  color: var(--sph-danger);
@@ -790,7 +1236,7 @@
790
1236
  background-color: var(--sph-surface);
791
1237
  color: var(--sph-text);
792
1238
  font-family: var(--sph-font-sans);
793
- transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1239
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-normal) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
794
1240
  }
795
1241
  .sph-card[data-interactive="true"] {
796
1242
  cursor: pointer;
@@ -798,13 +1244,16 @@
798
1244
  .sph-card[data-interactive="true"]:hover {
799
1245
  border-color: var(--sph-border-strong);
800
1246
  background: var(--sph-surface-elevated);
1247
+ transform: translateY(-2px);
1248
+ box-shadow: 0 14px 28px -18px rgb(0 0 0 / 0.45);
801
1249
  }
802
1250
  .sph-card[data-interactive="true"]:active {
803
- transform: translateY(1px);
1251
+ transform: translateY(1px) scale(0.995);
804
1252
  }
805
1253
  .sph-card[data-selected="true"] {
806
1254
  border-color: var(--sph-accent);
807
1255
  box-shadow: 0 0 0 1px var(--sph-accent-soft);
1256
+ animation: sph-glow-pulse var(--sph-motion-slow) var(--sph-ease-standard);
808
1257
  }
809
1258
  .sph-card:focus-within {
810
1259
  border-color: var(--sph-focus);
@@ -856,8 +1305,346 @@
856
1305
  transition: none;
857
1306
  }
858
1307
  }
859
- .sph-alert {
860
- display: flex;
1308
+ .sph-collapsible {
1309
+ font-family: var(--sph-font-sans);
1310
+ }
1311
+ .sph-collapsible__trigger {
1312
+ display: flex;
1313
+ min-height: calc(var(--spacing, 0.25rem) * 8);
1314
+ width: 100%;
1315
+ align-items: center;
1316
+ gap: calc(var(--spacing, 0.25rem) * 1.5);
1317
+ border-style: var(--tw-border-style);
1318
+ border-width: 0px;
1319
+ background-color: transparent;
1320
+ padding: 0px;
1321
+ text-align: left;
1322
+ font-size: var(--text-xs, 0.75rem);
1323
+ line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
1324
+ --tw-font-weight: var(--font-weight-medium, 500);
1325
+ font-weight: var(--font-weight-medium, 500);
1326
+ color: var(--sph-text);
1327
+ cursor: pointer;
1328
+ transition: color var(--sph-motion-fast) var(--sph-ease-standard);
1329
+ }
1330
+ .sph-collapsible__trigger:hover:not(:disabled) {
1331
+ color: var(--sph-accent-strong);
1332
+ }
1333
+ .sph-collapsible__trigger:focus-visible {
1334
+ outline: 2px solid var(--sph-focus);
1335
+ outline-offset: 2px;
1336
+ }
1337
+ .sph-collapsible__trigger:disabled {
1338
+ opacity: 45%;
1339
+ cursor: not-allowed;
1340
+ }
1341
+ .sph-collapsible__chevron {
1342
+ display: inline-flex;
1343
+ color: var(--sph-text-muted);
1344
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1345
+ }
1346
+ .sph-collapsible[data-state="open"] .sph-collapsible__chevron {
1347
+ transform: rotate(90deg);
1348
+ }
1349
+ .sph-collapsible__body {
1350
+ display: grid;
1351
+ grid-template-rows: 0fr;
1352
+ transition: grid-template-rows var(--sph-motion-normal) var(--sph-ease-standard);
1353
+ }
1354
+ .sph-collapsible[data-state="open"] .sph-collapsible__body {
1355
+ grid-template-rows: 1fr;
1356
+ }
1357
+ .sph-collapsible__inner {
1358
+ min-inline-size: 0;
1359
+ overflow: hidden;
1360
+ visibility: hidden;
1361
+ padding-inline-start: 14px;
1362
+ transition: visibility 0s linear var(--sph-motion-normal);
1363
+ }
1364
+ .sph-collapsible[data-state="open"] .sph-collapsible__inner {
1365
+ visibility: visible;
1366
+ transition-delay: 0s;
1367
+ }
1368
+ @media (prefers-reduced-motion: reduce) {
1369
+ .sph-collapsible__body, .sph-collapsible__chevron {
1370
+ transition: none;
1371
+ }
1372
+ }
1373
+ .sph-combobox {
1374
+ position: relative;
1375
+ display: inline-flex;
1376
+ min-width: 0px;
1377
+ font-family: var(--sph-font-sans);
1378
+ }
1379
+ .sph-combobox__control {
1380
+ display: flex;
1381
+ align-items: center;
1382
+ gap: 4px;
1383
+ min-block-size: 36px;
1384
+ inline-size: 100%;
1385
+ padding: 3px 6px 3px 9px;
1386
+ border: 0.5px solid var(--sph-border);
1387
+ @supports (color: color-mix(in lab, red, red)) {
1388
+ border: 0.5px solid color-mix(in srgb, var(--sph-border) 86%, transparent);
1389
+ }
1390
+ border-radius: var(--sph-radius-sm);
1391
+ background: var(--sph-surface);
1392
+ color: var(--sph-text);
1393
+ cursor: pointer;
1394
+ font: 13px var(--sph-font-sans);
1395
+ text-align: start;
1396
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard);
1397
+ }
1398
+ .sph-combobox[data-size="sm"] .sph-combobox__control {
1399
+ min-block-size: 32px;
1400
+ }
1401
+ .sph-combobox[data-size="lg"] .sph-combobox__control {
1402
+ min-block-size: 40px;
1403
+ }
1404
+ .sph-combobox__control--button {
1405
+ justify-content: space-between;
1406
+ padding-inline-end: 9px;
1407
+ }
1408
+ .sph-combobox__control:hover:not([data-open]) {
1409
+ border-color: var(--sph-border-strong);
1410
+ }
1411
+ .sph-combobox[data-open] .sph-combobox__control {
1412
+ background: var(--sph-surface-elevated);
1413
+ border-color: var(--sph-focus);
1414
+ @supports (color: color-mix(in lab, red, red)) {
1415
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
1416
+ }
1417
+ }
1418
+ .sph-combobox__control:focus-within:not(:has(:disabled)) {
1419
+ border-color: var(--sph-focus);
1420
+ @supports (color: color-mix(in lab, red, red)) {
1421
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
1422
+ }
1423
+ }
1424
+ .sph-combobox__control:has(:disabled) {
1425
+ opacity: 50%;
1426
+ cursor: not-allowed;
1427
+ }
1428
+ .sph-combobox__control:focus-visible {
1429
+ outline: none;
1430
+ }
1431
+ .sph-combobox__value, .sph-combobox__placeholder {
1432
+ flex: 1 1 auto;
1433
+ min-inline-size: 0;
1434
+ overflow: hidden;
1435
+ text-overflow: ellipsis;
1436
+ white-space: nowrap;
1437
+ }
1438
+ .sph-combobox__placeholder {
1439
+ color: var(--sph-text-muted);
1440
+ }
1441
+ .sph-combobox__caret {
1442
+ flex: 0 0 auto;
1443
+ color: var(--sph-text-muted);
1444
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1445
+ }
1446
+ .sph-combobox[data-open] .sph-combobox__caret {
1447
+ transform: rotate(180deg);
1448
+ }
1449
+ .sph-combobox__chips {
1450
+ display: flex;
1451
+ flex: 1 1 auto;
1452
+ flex-wrap: wrap;
1453
+ gap: 3px;
1454
+ align-items: center;
1455
+ min-inline-size: 0;
1456
+ }
1457
+ .sph-combobox__chip {
1458
+ display: inline-flex;
1459
+ gap: 3px;
1460
+ align-items: center;
1461
+ max-inline-size: 12rem;
1462
+ padding: 2px 3px 2px 7px;
1463
+ border-radius: var(--sph-radius-xs);
1464
+ background: var(--sph-accent);
1465
+ @supports (color: color-mix(in lab, red, red)) {
1466
+ background: color-mix(in srgb, var(--sph-accent) 16%, transparent);
1467
+ }
1468
+ color: var(--sph-text);
1469
+ font-size: 11.5px;
1470
+ line-height: 1.4;
1471
+ animation: sph-pop var(--sph-motion-fast) var(--sph-ease-spring) both;
1472
+ }
1473
+ .sph-combobox__chip[data-removing] {
1474
+ animation: sph-rise-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1475
+ }
1476
+ .sph-combobox__chip-label {
1477
+ overflow: hidden;
1478
+ text-overflow: ellipsis;
1479
+ white-space: nowrap;
1480
+ }
1481
+ .sph-combobox__chip-remove {
1482
+ display: inline-flex;
1483
+ align-items: center;
1484
+ justify-content: center;
1485
+ inline-size: 15px;
1486
+ block-size: 15px;
1487
+ border: 0;
1488
+ border-radius: 999px;
1489
+ background: transparent;
1490
+ color: var(--sph-text-muted);
1491
+ cursor: pointer;
1492
+ padding: 0;
1493
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
1494
+ }
1495
+ .sph-combobox__chip-remove:hover:not(:disabled) {
1496
+ background: var(--sph-danger);
1497
+ @supports (color: color-mix(in lab, red, red)) {
1498
+ background: color-mix(in srgb, var(--sph-danger) 22%, transparent);
1499
+ }
1500
+ color: var(--sph-text);
1501
+ }
1502
+ .sph-combobox__toggle {
1503
+ display: inline-flex;
1504
+ align-items: center;
1505
+ justify-content: center;
1506
+ flex: 0 0 auto;
1507
+ inline-size: 22px;
1508
+ block-size: 22px;
1509
+ border: 0;
1510
+ background: transparent;
1511
+ color: var(--sph-text-muted);
1512
+ cursor: pointer;
1513
+ padding: 0;
1514
+ border-radius: var(--sph-radius-xs);
1515
+ }
1516
+ .sph-combobox__toggle:hover:not(:disabled) {
1517
+ background: var(--sph-raised);
1518
+ color: var(--sph-text);
1519
+ }
1520
+ .sph-combobox__toggle:focus-visible {
1521
+ outline: 2px solid var(--sph-focus);
1522
+ outline-offset: 1px;
1523
+ }
1524
+ .sph-combobox__panel {
1525
+ z-index: 260;
1526
+ overflow: hidden;
1527
+ border-radius: var(--sph-radius-md);
1528
+ border-style: var(--tw-border-style);
1529
+ border-width: 1px;
1530
+ border-color: var(--sph-border);
1531
+ background-color: var(--sph-surface);
1532
+ --tw-shadow: var(--sph-shadow-popover);
1533
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1534
+ min-inline-size: 12rem;
1535
+ animation: sph-drop-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1536
+ }
1537
+ .sph-combobox__panel[data-state="closed"] {
1538
+ pointer-events: none;
1539
+ animation: sph-drop-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1540
+ }
1541
+ .sph-combobox__search {
1542
+ display: flex;
1543
+ gap: 7px;
1544
+ align-items: center;
1545
+ padding: 8px 10px;
1546
+ border-bottom: 1px solid var(--sph-border);
1547
+ }
1548
+ .sph-combobox__search-icon {
1549
+ flex: 0 0 auto;
1550
+ color: var(--sph-text-muted);
1551
+ }
1552
+ .sph-combobox__input {
1553
+ flex: 1 1 auto;
1554
+ min-inline-size: 0;
1555
+ border: 0;
1556
+ outline: none;
1557
+ background: transparent;
1558
+ color: var(--sph-text);
1559
+ font: 13px var(--sph-font-sans);
1560
+ }
1561
+ .sph-combobox__input::placeholder {
1562
+ color: var(--sph-text-muted);
1563
+ }
1564
+ .sph-combobox__list {
1565
+ max-block-size: 15rem;
1566
+ overflow-y: auto;
1567
+ padding: 5px;
1568
+ }
1569
+ .sph-combobox__group {
1570
+ display: grid;
1571
+ gap: 2px;
1572
+ }
1573
+ .sph-combobox__group + .sph-combobox__group {
1574
+ margin-block-start: 6px;
1575
+ }
1576
+ .sph-combobox__heading {
1577
+ padding: 4px 7px 1px;
1578
+ color: var(--sph-text-muted);
1579
+ font-size: 10.5px;
1580
+ letter-spacing: 0.04em;
1581
+ text-transform: uppercase;
1582
+ }
1583
+ .sph-combobox__option {
1584
+ display: flex;
1585
+ gap: 7px;
1586
+ align-items: center;
1587
+ min-block-size: 32px;
1588
+ padding: 5px 7px;
1589
+ border-radius: var(--sph-radius-sm);
1590
+ color: var(--sph-text-muted);
1591
+ cursor: pointer;
1592
+ font-size: 13px;
1593
+ transition: color var(--sph-motion-fast) var(--sph-ease-standard);
1594
+ animation: sph-rise-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
1595
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
1596
+ }
1597
+ .sph-combobox__option:nth-child(1) {
1598
+ --sph-motion-index: 0;
1599
+ }
1600
+ .sph-combobox__option:nth-child(2) {
1601
+ --sph-motion-index: 1;
1602
+ }
1603
+ .sph-combobox__option:nth-child(3) {
1604
+ --sph-motion-index: 2;
1605
+ }
1606
+ .sph-combobox__option:nth-child(4) {
1607
+ --sph-motion-index: 3;
1608
+ }
1609
+ .sph-combobox__option:nth-child(5) {
1610
+ --sph-motion-index: 4;
1611
+ }
1612
+ .sph-combobox__option:nth-child(6) {
1613
+ --sph-motion-index: 5;
1614
+ }
1615
+ .sph-combobox__option[data-active] {
1616
+ background: var(--sph-accent);
1617
+ @supports (color: color-mix(in lab, red, red)) {
1618
+ background: color-mix(in srgb, var(--sph-accent) 13%, transparent);
1619
+ }
1620
+ color: var(--sph-text);
1621
+ }
1622
+ .sph-combobox__option[data-disabled] {
1623
+ opacity: 40%;
1624
+ cursor: default;
1625
+ }
1626
+ .sph-combobox__check {
1627
+ display: inline-flex;
1628
+ flex: 0 0 auto;
1629
+ inline-size: 14px;
1630
+ color: var(--sph-accent-strong);
1631
+ animation: sph-pop var(--sph-motion-fast) var(--sph-ease-spring) both;
1632
+ }
1633
+ .sph-combobox__label {
1634
+ flex: 1 1 auto;
1635
+ min-inline-size: 0;
1636
+ overflow: hidden;
1637
+ text-overflow: ellipsis;
1638
+ white-space: nowrap;
1639
+ }
1640
+ .sph-combobox__empty {
1641
+ padding: 16px 8px;
1642
+ color: var(--sph-text-muted);
1643
+ text-align: center;
1644
+ font-size: 13px;
1645
+ }
1646
+ .sph-alert {
1647
+ display: flex;
861
1648
  min-width: 0px;
862
1649
  align-items: flex-start;
863
1650
  gap: calc(var(--spacing, 0.25rem) * 3);
@@ -872,6 +1659,11 @@
872
1659
  border-color: var(--sph-border);
873
1660
  color: var(--sph-text);
874
1661
  font-family: var(--sph-font-sans);
1662
+ animation: sph-rise-in var(--sph-motion-slow) var(--sph-ease-emphasis) both;
1663
+ }
1664
+ .sph-alert[data-state="closed"] {
1665
+ pointer-events: none;
1666
+ animation: sph-rise-out var(--sph-motion-fast) var(--sph-ease-exit) both;
875
1667
  }
876
1668
  .sph-alert[data-variant="info"] {
877
1669
  background: var(--sph-accent);
@@ -915,6 +1707,8 @@
915
1707
  border-radius: var(--sph-radius-md);
916
1708
  background: var(--sph-accent-soft, var(--sph-raised));
917
1709
  color: var(--sph-accent);
1710
+ animation: sph-pop var(--sph-motion-slow) var(--sph-ease-spring) both;
1711
+ animation-delay: var(--sph-motion-stagger);
918
1712
  }
919
1713
  .sph-alert__icon svg {
920
1714
  display: block;
@@ -965,15 +1759,35 @@
965
1759
  padding: 0px;
966
1760
  color: var(--sph-text-muted);
967
1761
  cursor: pointer;
1762
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
968
1763
  }
969
1764
  .sph-alert__dismiss:hover {
970
1765
  background-color: var(--sph-raised);
971
1766
  color: var(--sph-text);
972
1767
  }
1768
+ .sph-alert__dismiss:active {
1769
+ transform: scale(0.88);
1770
+ }
973
1771
  .sph-alert__dismiss:focus-visible {
974
1772
  outline: 2px solid var(--sph-focus);
975
1773
  outline-offset: 1px;
976
1774
  }
1775
+ .sph-avatar-group {
1776
+ display: inline-flex;
1777
+ align-items: center;
1778
+ }
1779
+ .sph-avatar-group > * + * {
1780
+ margin-inline-start: -8px;
1781
+ box-shadow: 0 0 0 2px var(--sph-surface);
1782
+ }
1783
+ .sph-avatar-group > :hover {
1784
+ z-index: 1;
1785
+ }
1786
+ .sph-avatar--overflow {
1787
+ background-color: var(--sph-raised);
1788
+ color: var(--sph-text-muted);
1789
+ letter-spacing: 0;
1790
+ }
977
1791
  .sph-select {
978
1792
  position: relative;
979
1793
  box-sizing: border-box;
@@ -1018,24 +1832,24 @@
1018
1832
  }
1019
1833
  .sph-select__caret {
1020
1834
  flex: 0 0 auto;
1021
- font-size: 18px;
1022
- transition: color var(--sph-motion-fast) var(--sph-ease-standard);
1835
+ font-size: 14px;
1836
+ transition: all var(--sph-motion-fast) var(--sph-ease-standard);
1023
1837
  }
1024
1838
  .sph-select__trigger:disabled {
1025
1839
  opacity: 50%;
1026
1840
  cursor: not-allowed;
1027
1841
  }
1028
- .sph-select__trigger:focus-visible {
1029
- outline: 2px solid var(--sph-focus);
1030
- outline-offset: 2px;
1031
- box-shadow: 0 0 0 4px var(--sph-focus-ring);
1842
+ .sph-select__trigger:focus-visible:not(:disabled) {
1843
+ outline: none;
1844
+ background: var(--sph-surface-elevated);
1845
+ border-color: var(--sph-focus);
1846
+ @supports (color: color-mix(in lab, red, red)) {
1847
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
1848
+ }
1032
1849
  }
1033
1850
  .sph-select__listbox {
1034
- position: absolute;
1035
- left: 0px;
1036
- z-index: 100;
1851
+ z-index: 260;
1037
1852
  max-height: calc(var(--spacing, 0.25rem) * 60);
1038
- width: 100%;
1039
1853
  overflow: auto;
1040
1854
  border-radius: var(--sph-radius-md);
1041
1855
  border-style: var(--tw-border-style);
@@ -1045,7 +1859,37 @@
1045
1859
  padding: var(--spacing, 0.25rem);
1046
1860
  --tw-shadow: var(--sph-shadow-popover);
1047
1861
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1048
- top: calc(100% + 4px);
1862
+ transform-origin: top center;
1863
+ animation: sph-drop-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1864
+ }
1865
+ .sph-select__listbox[data-state="closed"] {
1866
+ pointer-events: none;
1867
+ animation: sph-drop-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1868
+ }
1869
+ .sph-select__listbox > * {
1870
+ animation: sph-rise-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
1871
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
1872
+ }
1873
+ .sph-select__listbox > :nth-child(2) {
1874
+ --sph-motion-index: 1;
1875
+ }
1876
+ .sph-select__listbox > :nth-child(3) {
1877
+ --sph-motion-index: 2;
1878
+ }
1879
+ .sph-select__listbox > :nth-child(4) {
1880
+ --sph-motion-index: 3;
1881
+ }
1882
+ .sph-select__listbox > :nth-child(5) {
1883
+ --sph-motion-index: 4;
1884
+ }
1885
+ .sph-select__listbox > :nth-child(6) {
1886
+ --sph-motion-index: 5;
1887
+ }
1888
+ .sph-select__listbox > :nth-child(7) {
1889
+ --sph-motion-index: 6;
1890
+ }
1891
+ .sph-select__listbox > :nth-child(8) {
1892
+ --sph-motion-index: 7;
1049
1893
  }
1050
1894
  .sph-select__option {
1051
1895
  display: flex;
@@ -1053,7 +1897,7 @@
1053
1897
  align-items: center;
1054
1898
  justify-content: space-between;
1055
1899
  gap: calc(var(--spacing, 0.25rem) * 3);
1056
- border-radius: var(--sph-radius-xs);
1900
+ border-radius: var(--sph-radius-sm);
1057
1901
  border-style: var(--tw-border-style);
1058
1902
  border-width: 0px;
1059
1903
  background-color: transparent;
@@ -1063,6 +1907,7 @@
1063
1907
  cursor: pointer;
1064
1908
  font: 13px var(--sph-font-sans);
1065
1909
  text-align: left;
1910
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
1066
1911
  }
1067
1912
  .sph-select__option[data-active="true"] {
1068
1913
  background-color: var(--sph-raised);
@@ -1078,7 +1923,8 @@
1078
1923
  .sph-select__check {
1079
1924
  flex: 0 0 auto;
1080
1925
  color: var(--sph-accent);
1081
- font-size: 18px;
1926
+ font-size: 14px;
1927
+ animation: sph-pop var(--sph-motion-normal) var(--sph-ease-spring) both;
1082
1928
  }
1083
1929
  @media (prefers-reduced-motion: reduce) {
1084
1930
  .sph-select__trigger, .sph-select__caret {
@@ -1157,7 +2003,7 @@
1157
2003
  border-width: 1px;
1158
2004
  border-color: var(--sph-border);
1159
2005
  background-color: var(--sph-surface);
1160
- transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
2006
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-normal) var(--sph-ease-emphasis), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1161
2007
  }
1162
2008
  .sph-radio-group[data-size="sm"] .sph-radio-group__control {
1163
2009
  width: calc(var(--spacing, 0.25rem) * 3.5);
@@ -1235,8 +2081,6 @@
1235
2081
  min-height: calc(var(--spacing, 0.25rem) * 9);
1236
2082
  flex-shrink: 0;
1237
2083
  border-radius: var(--sph-radius-sm);
1238
- border-style: var(--tw-border-style);
1239
- border-width: 0px;
1240
2084
  background-color: transparent;
1241
2085
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
1242
2086
  font-size: var(--text-xs, 0.75rem);
@@ -1244,14 +2088,18 @@
1244
2088
  --tw-font-weight: var(--font-weight-medium, 500);
1245
2089
  font-weight: var(--font-weight-medium, 500);
1246
2090
  color: var(--sph-text-muted);
2091
+ border: 1px solid transparent;
1247
2092
  cursor: pointer;
1248
2093
  font-family: var(--sph-font-sans);
1249
- transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
2094
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), border-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1250
2095
  }
1251
2096
  .sph-tabs__tab:hover:not(:disabled) {
1252
2097
  background-color: var(--sph-raised);
1253
2098
  color: var(--sph-text);
1254
2099
  }
2100
+ .sph-tabs__tab:active:not(:disabled) {
2101
+ transform: scale(0.97);
2102
+ }
1255
2103
  .sph-tabs__tab[data-selected="true"] {
1256
2104
  color: var(--sph-text);
1257
2105
  }
@@ -1259,18 +2107,23 @@
1259
2107
  content: "";
1260
2108
  position: absolute;
1261
2109
  bottom: -1px;
1262
- left: 5px;
1263
- right: 5px;
2110
+ left: var(--sph-radius-sm);
2111
+ right: var(--sph-radius-sm);
1264
2112
  height: 2px;
1265
2113
  border-radius: 2px;
1266
2114
  background: var(--sph-accent);
1267
- transition-property: all;
1268
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
1269
- transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
1270
- --tw-duration: 200ms;
1271
- transition-duration: 200ms;
1272
- --tw-ease: var(--ease-in-out, cubic-bezier(0.4, 0, 0.2, 1));
1273
- transition-timing-function: var(--ease-in-out, cubic-bezier(0.4, 0, 0.2, 1));
2115
+ transform-origin: left center;
2116
+ animation: sph-tab-draw var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2117
+ }
2118
+ @keyframes sph-tab-draw {
2119
+ from {
2120
+ transform: scaleX(0);
2121
+ opacity: 0.4;
2122
+ }
2123
+ to {
2124
+ transform: scaleX(1);
2125
+ opacity: 1;
2126
+ }
1274
2127
  }
1275
2128
  .sph-tabs[data-orientation="vertical"] .sph-tabs__tab {
1276
2129
  text-align: left;
@@ -1296,11 +2149,15 @@
1296
2149
  min-width: 0px;
1297
2150
  padding-top: calc(var(--spacing, 0.25rem) * 4);
1298
2151
  color: var(--sph-text);
2152
+ animation: sph-rise-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1299
2153
  }
1300
2154
  @media (prefers-reduced-motion: reduce) {
1301
2155
  .sph-tabs__tab {
1302
2156
  transition: none;
1303
2157
  }
2158
+ .sph-tabs__tab[data-selected="true"]::after {
2159
+ animation: none;
2160
+ }
1304
2161
  }
1305
2162
  .sph-menu {
1306
2163
  position: relative;
@@ -1319,6 +2176,10 @@
1319
2176
  color: var(--sph-text);
1320
2177
  cursor: pointer;
1321
2178
  font: inherit;
2179
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
2180
+ }
2181
+ .sph-menu__trigger:active:not(:disabled) {
2182
+ transform: scale(0.97);
1322
2183
  }
1323
2184
  .sph-menu__trigger:focus-visible {
1324
2185
  outline: 2px solid var(--sph-focus);
@@ -1329,9 +2190,7 @@
1329
2190
  cursor: not-allowed;
1330
2191
  }
1331
2192
  .sph-menu__content {
1332
- position: absolute;
1333
- top: calc(100% + 4px);
1334
- z-index: 110;
2193
+ z-index: 260;
1335
2194
  display: grid;
1336
2195
  min-width: calc(var(--spacing, 0.25rem) * 44);
1337
2196
  gap: calc(var(--spacing, 0.25rem) * 0.5);
@@ -1343,15 +2202,46 @@
1343
2202
  padding: var(--spacing, 0.25rem);
1344
2203
  --tw-shadow: var(--sph-shadow-popover);
1345
2204
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2205
+ transform-origin: top left;
2206
+ animation: sph-drop-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1346
2207
  }
1347
2208
  .sph-menu__content[data-align="end"] {
1348
- right: 0px;
2209
+ transform-origin: top right;
1349
2210
  }
1350
- .sph-menu__item {
1351
- display: flex;
1352
- min-height: calc(var(--spacing, 0.25rem) * 8);
1353
- width: 100%;
1354
- align-items: center;
2211
+ .sph-menu__content[data-state="closed"] {
2212
+ pointer-events: none;
2213
+ animation: sph-drop-out var(--sph-motion-fast) var(--sph-ease-exit) both;
2214
+ }
2215
+ .sph-menu__content > * {
2216
+ animation: sph-rise-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
2217
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
2218
+ }
2219
+ .sph-menu__content > :nth-child(2) {
2220
+ --sph-motion-index: 1;
2221
+ }
2222
+ .sph-menu__content > :nth-child(3) {
2223
+ --sph-motion-index: 2;
2224
+ }
2225
+ .sph-menu__content > :nth-child(4) {
2226
+ --sph-motion-index: 3;
2227
+ }
2228
+ .sph-menu__content > :nth-child(5) {
2229
+ --sph-motion-index: 4;
2230
+ }
2231
+ .sph-menu__content > :nth-child(6) {
2232
+ --sph-motion-index: 5;
2233
+ }
2234
+ .sph-menu__content > :nth-child(7) {
2235
+ --sph-motion-index: 6;
2236
+ }
2237
+ .sph-menu__content > :nth-child(8) {
2238
+ --sph-motion-index: 7;
2239
+ }
2240
+ .sph-menu__item {
2241
+ display: flex;
2242
+ min-height: calc(var(--spacing, 0.25rem) * 8);
2243
+ width: 100%;
2244
+ align-items: center;
1355
2245
  justify-content: space-between;
1356
2246
  gap: calc(var(--spacing, 0.25rem) * 4);
1357
2247
  border-radius: var(--sph-radius-sm);
@@ -1365,13 +2255,22 @@
1365
2255
  color: var(--sph-text-muted);
1366
2256
  cursor: pointer;
1367
2257
  font-family: var(--sph-font-sans);
2258
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1368
2259
  }
1369
2260
  .sph-menu__item:hover:not(:disabled) {
1370
2261
  background-color: var(--sph-raised);
1371
2262
  color: var(--sph-text);
2263
+ transform: translateX(2px);
2264
+ }
2265
+ .sph-menu__content[data-align="end"] .sph-menu__item:hover:not(:disabled) {
2266
+ transform: translateX(-2px);
1372
2267
  }
1373
2268
  .sph-menu__item:active:not(:disabled) {
1374
2269
  background-color: var(--sph-accent-soft);
2270
+ transform: translateX(2px) scale(0.98);
2271
+ }
2272
+ .sph-menu__content[data-align="end"] .sph-menu__item:active:not(:disabled) {
2273
+ transform: translateX(-2px) scale(0.98);
1375
2274
  }
1376
2275
  .sph-menu__item:focus-visible {
1377
2276
  outline: 2px solid var(--sph-focus);
@@ -1417,6 +2316,10 @@
1417
2316
  color: var(--sph-text);
1418
2317
  cursor: pointer;
1419
2318
  font: inherit;
2319
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
2320
+ }
2321
+ .sph-popover__trigger:active:not(:disabled) {
2322
+ transform: scale(0.97);
1420
2323
  }
1421
2324
  .sph-popover__trigger:focus-visible {
1422
2325
  outline: 2px solid var(--sph-focus);
@@ -1427,9 +2330,7 @@
1427
2330
  cursor: not-allowed;
1428
2331
  }
1429
2332
  .sph-popover__content {
1430
- position: absolute;
1431
- top: calc(100% + 6px);
1432
- z-index: 105;
2333
+ z-index: 260;
1433
2334
  max-width: min(26rem, calc(100vw - 2rem));
1434
2335
  min-width: calc(var(--spacing, 0.25rem) * 48);
1435
2336
  border-radius: var(--sph-radius-md);
@@ -1443,26 +2344,100 @@
1443
2344
  color: var(--sph-text);
1444
2345
  --tw-shadow: var(--sph-shadow-popover);
1445
2346
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1446
- animation: sph-popover-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
2347
+ transform-origin: top left;
2348
+ --sph-tilt: 0deg;
2349
+ animation: sph-popover-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2350
+ }
2351
+ .sph-popover__content[data-side="bottom"] {
2352
+ --sph-tilt: 7deg;
2353
+ }
2354
+ .sph-popover__content[data-side="top"] {
2355
+ --sph-tilt: -7deg;
1447
2356
  }
1448
2357
  .sph-popover__content[data-placement="end"] {
1449
- right: 0px;
2358
+ transform-origin: top right;
2359
+ }
2360
+ .sph-popover__content[data-state="closed"] {
2361
+ pointer-events: none;
2362
+ animation: sph-popover-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1450
2363
  }
1451
2364
  @keyframes sph-popover-in {
1452
2365
  from {
1453
2366
  opacity: 0;
1454
- transform: translateY(-3px) scale(0.98);
2367
+ transform: perspective(600px) rotateX(var(--sph-tilt)) translateY(-4px) scale(0.975);
1455
2368
  }
1456
2369
  to {
2370
+ opacity: 1;
2371
+ transform: perspective(600px) rotateX(0deg) translateY(0) scale(1);
2372
+ }
2373
+ }
2374
+ @keyframes sph-popover-out {
2375
+ from {
1457
2376
  opacity: 1;
1458
2377
  transform: translateY(0) scale(1);
1459
2378
  }
2379
+ to {
2380
+ opacity: 0;
2381
+ transform: translateY(-3px) scale(0.98);
2382
+ }
1460
2383
  }
1461
2384
  @media (prefers-reduced-motion: reduce) {
1462
2385
  .sph-popover__content {
1463
2386
  animation: none;
1464
2387
  }
1465
2388
  }
2389
+ .sph-hover-card {
2390
+ position: relative;
2391
+ display: inline-flex;
2392
+ min-width: 0px;
2393
+ font-family: var(--sph-font-sans);
2394
+ }
2395
+ .sph-hover-card__trigger {
2396
+ display: inline-flex;
2397
+ min-width: 0px;
2398
+ align-items: center;
2399
+ justify-content: center;
2400
+ border-style: var(--tw-border-style);
2401
+ border-width: 0px;
2402
+ background-color: transparent;
2403
+ padding: 0px;
2404
+ color: var(--sph-text);
2405
+ cursor: pointer;
2406
+ font: inherit;
2407
+ }
2408
+ .sph-hover-card__trigger:focus-visible {
2409
+ outline: 2px solid var(--sph-focus);
2410
+ outline-offset: 2px;
2411
+ }
2412
+ .sph-hover-card__content {
2413
+ z-index: 260;
2414
+ max-width: min(22rem, calc(100vw - 2rem));
2415
+ min-width: calc(var(--spacing, 0.25rem) * 52);
2416
+ border-radius: var(--sph-radius-md);
2417
+ border-style: var(--tw-border-style);
2418
+ border-width: 1px;
2419
+ border-color: var(--sph-border);
2420
+ background-color: var(--sph-surface);
2421
+ padding: calc(var(--spacing, 0.25rem) * 4);
2422
+ font-size: var(--text-sm, 0.875rem);
2423
+ line-height: var(--tw-leading, var(--text-sm--line-height, calc(1.25 / 0.875)));
2424
+ color: var(--sph-text);
2425
+ --tw-shadow: var(--sph-shadow-popover);
2426
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2427
+ transform-origin: top left;
2428
+ --sph-tilt: 0deg;
2429
+ animation: sph-popover-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2430
+ }
2431
+ .sph-hover-card__content[data-state="closed"] {
2432
+ pointer-events: none;
2433
+ animation: sph-popover-out var(--sph-motion-fast) var(--sph-ease-exit) both;
2434
+ }
2435
+ .sph-hover-card__content[data-side="bottom"] {
2436
+ --sph-tilt: 7deg;
2437
+ }
2438
+ .sph-hover-card__content[data-side="top"] {
2439
+ --sph-tilt: -7deg;
2440
+ }
1466
2441
  .sph-tooltip {
1467
2442
  position: relative;
1468
2443
  display: inline-flex;
@@ -1474,8 +2449,7 @@
1474
2449
  }
1475
2450
  .sph-tooltip__content {
1476
2451
  pointer-events: none;
1477
- position: absolute;
1478
- z-index: 140;
2452
+ z-index: 270;
1479
2453
  border-radius: var(--sph-radius-sm);
1480
2454
  border-style: var(--tw-border-style);
1481
2455
  border-width: 1px;
@@ -1493,35 +2467,47 @@
1493
2467
  white-space: normal;
1494
2468
  animation: sph-tooltip-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
1495
2469
  }
1496
- .sph-tooltip__content[hidden] {
1497
- display: none;
2470
+ .sph-tooltip__content[data-state="closed"] {
2471
+ animation: sph-tooltip-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1498
2472
  }
1499
2473
  .sph-tooltip__content[data-side="top"] {
1500
- bottom: calc(100% + 6px);
1501
- left: 50%;
1502
- transform: translateX(-50%);
2474
+ --sph-tip-x: 0px;
2475
+ --sph-tip-y: 4px;
2476
+ transform-origin: bottom center;
1503
2477
  }
1504
2478
  .sph-tooltip__content[data-side="bottom"] {
1505
- left: 50%;
1506
- top: calc(100% + 6px);
1507
- transform: translateX(-50%);
2479
+ --sph-tip-x: 0px;
2480
+ --sph-tip-y: -4px;
2481
+ transform-origin: top center;
1508
2482
  }
1509
2483
  .sph-tooltip__content[data-side="left"] {
1510
- right: calc(100% + 6px);
1511
- top: 50%;
1512
- transform: translateY(-50%);
2484
+ --sph-tip-x: 4px;
2485
+ --sph-tip-y: 0px;
2486
+ transform-origin: right center;
1513
2487
  }
1514
2488
  .sph-tooltip__content[data-side="right"] {
1515
- left: calc(100% + 6px);
1516
- top: 50%;
1517
- transform: translateY(-50%);
2489
+ --sph-tip-x: -4px;
2490
+ --sph-tip-y: 0px;
2491
+ transform-origin: left center;
1518
2492
  }
1519
2493
  @keyframes sph-tooltip-in {
1520
2494
  from {
1521
2495
  opacity: 0;
2496
+ transform: translate(var(--sph-tip-x, 0px), var(--sph-tip-y, 4px)) scale(0.94);
1522
2497
  }
1523
2498
  to {
1524
2499
  opacity: 1;
2500
+ transform: none;
2501
+ }
2502
+ }
2503
+ @keyframes sph-tooltip-out {
2504
+ from {
2505
+ opacity: 1;
2506
+ transform: none;
2507
+ }
2508
+ to {
2509
+ opacity: 0;
2510
+ transform: translate(var(--sph-tip-x, 0px), var(--sph-tip-y, 4px)) scale(0.96);
1525
2511
  }
1526
2512
  }
1527
2513
  @media (prefers-reduced-motion: reduce) {
@@ -1541,8 +2527,13 @@
1541
2527
  background-color: color-mix(in oklab, var(--color-black, #000) 55%, transparent);
1542
2528
  }
1543
2529
  padding: calc(var(--spacing, 0.25rem) * 4);
2530
+ backdrop-filter: blur(6px);
2531
+ -webkit-backdrop-filter: blur(6px);
1544
2532
  animation: sph-dialog-fade var(--sph-motion-normal) var(--sph-ease-standard) both;
1545
2533
  }
2534
+ .sph-dialog__backdrop[data-state="closed"] {
2535
+ animation: sph-dialog-fade-out var(--sph-motion-normal) var(--sph-ease-exit) both;
2536
+ }
1546
2537
  .sph-dialog {
1547
2538
  display: grid;
1548
2539
  max-height: min(42rem, calc(100vh - 2rem));
@@ -1560,6 +2551,9 @@
1560
2551
  animation: sph-dialog-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1561
2552
  font-family: var(--sph-font-sans);
1562
2553
  }
2554
+ .sph-dialog__backdrop[data-state="closed"] .sph-dialog {
2555
+ animation: sph-dialog-out var(--sph-motion-normal) var(--sph-ease-exit) both;
2556
+ }
1563
2557
  .sph-dialog__header {
1564
2558
  display: flex;
1565
2559
  align-items: flex-start;
@@ -1605,6 +2599,10 @@
1605
2599
  padding: 0px;
1606
2600
  color: var(--sph-text-muted);
1607
2601
  cursor: pointer;
2602
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
2603
+ }
2604
+ .sph-dialog__close:active {
2605
+ transform: scale(0.9);
1608
2606
  }
1609
2607
  .sph-dialog__close:hover {
1610
2608
  background-color: var(--sph-raised);
@@ -1649,11 +2647,224 @@
1649
2647
  transform: translateY(0) scale(1);
1650
2648
  }
1651
2649
  }
2650
+ @keyframes sph-dialog-fade-out {
2651
+ from {
2652
+ opacity: 1;
2653
+ }
2654
+ to {
2655
+ opacity: 0;
2656
+ }
2657
+ }
2658
+ @keyframes sph-dialog-out {
2659
+ from {
2660
+ opacity: 1;
2661
+ transform: translateY(0) scale(1);
2662
+ }
2663
+ to {
2664
+ opacity: 0;
2665
+ transform: translateY(8px) scale(0.975);
2666
+ }
2667
+ }
1652
2668
  @media (prefers-reduced-motion: reduce) {
1653
2669
  .sph-dialog__backdrop, .sph-dialog {
1654
2670
  animation: none;
1655
2671
  }
1656
2672
  }
2673
+ .sph-drawer__backdrop {
2674
+ position: fixed;
2675
+ inset: 0px;
2676
+ z-index: 200;
2677
+ display: flex;
2678
+ background: rgb(0 0 0 / 0.5);
2679
+ backdrop-filter: blur(4px);
2680
+ -webkit-backdrop-filter: blur(4px);
2681
+ animation: sph-drawer-fade var(--sph-motion-normal) var(--sph-ease-standard) both;
2682
+ }
2683
+ .sph-drawer__backdrop[data-side="right"] {
2684
+ justify-content: flex-end;
2685
+ }
2686
+ .sph-drawer__backdrop[data-side="left"] {
2687
+ justify-content: flex-start;
2688
+ }
2689
+ .sph-drawer__backdrop[data-side="bottom"] {
2690
+ align-items: flex-end;
2691
+ }
2692
+ .sph-drawer__backdrop[data-state="closed"] {
2693
+ pointer-events: none;
2694
+ animation: sph-drawer-fade-out var(--sph-motion-normal) var(--sph-ease-exit) both;
2695
+ }
2696
+ .sph-drawer {
2697
+ --sph-slide-x: 0%;
2698
+ --sph-slide-y: 0%;
2699
+ position: relative;
2700
+ display: flex;
2701
+ flex-direction: column;
2702
+ min-inline-size: 0;
2703
+ min-block-size: 0;
2704
+ background: var(--sph-surface);
2705
+ border: 1px solid var(--sph-border);
2706
+ box-shadow: var(--sph-shadow-popover);
2707
+ font-family: var(--sph-font-sans);
2708
+ color: var(--sph-text);
2709
+ animation: sph-drawer-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2710
+ }
2711
+ .sph-drawer[data-side="right"] {
2712
+ --sph-slide-x: 100%;
2713
+ block-size: 100%;
2714
+ border-block-start-width: 0;
2715
+ border-block-end-width: 0;
2716
+ border-inline-end-width: 0;
2717
+ border-start-start-radius: var(--sph-radius-md);
2718
+ border-end-start-radius: var(--sph-radius-md);
2719
+ }
2720
+ .sph-drawer[data-side="left"] {
2721
+ --sph-slide-x: -100%;
2722
+ block-size: 100%;
2723
+ border-block-start-width: 0;
2724
+ border-block-end-width: 0;
2725
+ border-inline-start-width: 0;
2726
+ border-start-end-radius: var(--sph-radius-md);
2727
+ border-end-end-radius: var(--sph-radius-md);
2728
+ }
2729
+ .sph-drawer[data-side="bottom"] {
2730
+ --sph-slide-y: 100%;
2731
+ inline-size: 100%;
2732
+ border-inline-width: 0;
2733
+ border-block-end-width: 0;
2734
+ border-start-start-radius: var(--sph-radius-md);
2735
+ border-start-end-radius: var(--sph-radius-md);
2736
+ max-block-size: 85vh;
2737
+ }
2738
+ .sph-drawer__backdrop[data-state="closed"] .sph-drawer {
2739
+ animation: sph-drawer-out var(--sph-motion-fast) var(--sph-ease-exit) both;
2740
+ }
2741
+ .sph-drawer[data-size="sm"][data-side="right"], .sph-drawer[data-size="sm"][data-side="left"] {
2742
+ inline-size: min(300px, 100vw);
2743
+ }
2744
+ .sph-drawer[data-size="md"][data-side="right"], .sph-drawer[data-size="md"][data-side="left"] {
2745
+ inline-size: min(400px, 100vw);
2746
+ }
2747
+ .sph-drawer[data-size="lg"][data-side="right"], .sph-drawer[data-size="lg"][data-side="left"] {
2748
+ inline-size: min(560px, 100vw);
2749
+ }
2750
+ .sph-drawer[data-size="sm"][data-side="bottom"] {
2751
+ block-size: 32vh;
2752
+ }
2753
+ .sph-drawer[data-size="md"][data-side="bottom"] {
2754
+ block-size: 50vh;
2755
+ }
2756
+ .sph-drawer[data-size="lg"][data-side="bottom"] {
2757
+ block-size: 72vh;
2758
+ }
2759
+ .sph-drawer__header {
2760
+ display: flex;
2761
+ align-items: flex-start;
2762
+ justify-content: space-between;
2763
+ gap: calc(var(--spacing, 0.25rem) * 4);
2764
+ border-bottom-style: var(--tw-border-style);
2765
+ border-bottom-width: 1px;
2766
+ border-color: var(--sph-border);
2767
+ padding-inline: calc(var(--spacing, 0.25rem) * 5);
2768
+ padding-block: calc(var(--spacing, 0.25rem) * 4);
2769
+ }
2770
+ .sph-drawer__heading {
2771
+ display: grid;
2772
+ min-width: 0px;
2773
+ gap: var(--spacing, 0.25rem);
2774
+ }
2775
+ .sph-drawer__title {
2776
+ margin: 0px;
2777
+ font-size: var(--text-base, 1rem);
2778
+ line-height: var(--tw-leading, var(--text-base--line-height, calc(1.5 / 1)));
2779
+ --tw-font-weight: var(--font-weight-semibold, 600);
2780
+ font-weight: var(--font-weight-semibold, 600);
2781
+ line-height: 1.3;
2782
+ }
2783
+ .sph-drawer__description {
2784
+ margin: 0px;
2785
+ font-size: var(--text-xs, 0.75rem);
2786
+ line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
2787
+ color: var(--sph-text-muted);
2788
+ line-height: 1.45;
2789
+ }
2790
+ .sph-drawer__close {
2791
+ display: inline-flex;
2792
+ width: calc(var(--spacing, 0.25rem) * 7);
2793
+ height: calc(var(--spacing, 0.25rem) * 7);
2794
+ flex-shrink: 0;
2795
+ align-items: center;
2796
+ justify-content: center;
2797
+ border-radius: var(--sph-radius-sm);
2798
+ border-style: var(--tw-border-style);
2799
+ border-width: 0px;
2800
+ background-color: transparent;
2801
+ padding: 0px;
2802
+ color: var(--sph-text-muted);
2803
+ cursor: pointer;
2804
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
2805
+ }
2806
+ .sph-drawer__close:hover {
2807
+ background-color: var(--sph-raised);
2808
+ color: var(--sph-text);
2809
+ }
2810
+ .sph-drawer__close:active {
2811
+ transform: scale(0.9);
2812
+ }
2813
+ .sph-drawer__close:focus-visible {
2814
+ outline: 2px solid var(--sph-focus);
2815
+ outline-offset: 1px;
2816
+ }
2817
+ .sph-drawer__content {
2818
+ min-width: 0px;
2819
+ flex: 1;
2820
+ overflow: auto;
2821
+ padding-inline: calc(var(--spacing, 0.25rem) * 5);
2822
+ padding-block: calc(var(--spacing, 0.25rem) * 5);
2823
+ }
2824
+ .sph-drawer__footer {
2825
+ display: flex;
2826
+ flex-wrap: wrap;
2827
+ align-items: center;
2828
+ justify-content: flex-end;
2829
+ gap: calc(var(--spacing, 0.25rem) * 2);
2830
+ border-top-style: var(--tw-border-style);
2831
+ border-top-width: 1px;
2832
+ border-color: var(--sph-border);
2833
+ padding-inline: calc(var(--spacing, 0.25rem) * 5);
2834
+ padding-block: calc(var(--spacing, 0.25rem) * 3.5);
2835
+ }
2836
+ @keyframes sph-drawer-fade {
2837
+ from {
2838
+ opacity: 0;
2839
+ }
2840
+ to {
2841
+ opacity: 1;
2842
+ }
2843
+ }
2844
+ @keyframes sph-drawer-fade-out {
2845
+ from {
2846
+ opacity: 1;
2847
+ }
2848
+ to {
2849
+ opacity: 0;
2850
+ }
2851
+ }
2852
+ @keyframes sph-drawer-in {
2853
+ from {
2854
+ transform: translate(var(--sph-slide-x), var(--sph-slide-y));
2855
+ }
2856
+ to {
2857
+ transform: translate(0, 0);
2858
+ }
2859
+ }
2860
+ @keyframes sph-drawer-out {
2861
+ from {
2862
+ transform: translate(0, 0);
2863
+ }
2864
+ to {
2865
+ transform: translate(var(--sph-slide-x), var(--sph-slide-y));
2866
+ }
2867
+ }
1657
2868
  [data-sonner-toaster].sph-toast-viewport {
1658
2869
  --width: min(380px, calc(100vw - 32px));
1659
2870
  --offset-right: 16px;
@@ -1713,6 +2924,23 @@
1713
2924
  height: calc(var(--spacing, 0.25rem) * 5);
1714
2925
  align-items: center;
1715
2926
  justify-content: center;
2927
+ animation: sph-toast-status-in var(--sph-motion-slow) var(--sph-ease-spring) both;
2928
+ }
2929
+ @keyframes sph-toast-status-in {
2930
+ 0% {
2931
+ opacity: 0;
2932
+ transform: translateY(6px) scale(0.6);
2933
+ filter: blur(4px);
2934
+ }
2935
+ 55% {
2936
+ opacity: 1;
2937
+ transform: translateY(-1px) scale(1.08);
2938
+ filter: blur(0);
2939
+ }
2940
+ 100% {
2941
+ opacity: 1;
2942
+ transform: translateY(0) scale(1);
2943
+ }
1716
2944
  }
1717
2945
  .sph-toast__status-icon svg {
1718
2946
  display: block;
@@ -1823,6 +3051,22 @@
1823
3051
  text-align: center;
1824
3052
  font-family: var(--sph-font-sans);
1825
3053
  }
3054
+ .sph-empty-state > * {
3055
+ animation: sph-rise-in var(--sph-motion-slow) var(--sph-ease-emphasis) both;
3056
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
3057
+ }
3058
+ .sph-empty-state > :nth-child(2) {
3059
+ --sph-motion-index: 1;
3060
+ }
3061
+ .sph-empty-state > :nth-child(3) {
3062
+ --sph-motion-index: 2;
3063
+ }
3064
+ .sph-empty-state > :nth-child(4) {
3065
+ --sph-motion-index: 3;
3066
+ }
3067
+ .sph-empty-state > :nth-child(5) {
3068
+ --sph-motion-index: 4;
3069
+ }
1826
3070
  .sph-empty-state[data-compact="true"] {
1827
3071
  padding-block: calc(var(--spacing, 0.25rem) * 8);
1828
3072
  }
@@ -1862,33 +3106,798 @@
1862
3106
  .sph-empty-state__action {
1863
3107
  margin-top: calc(var(--spacing, 0.25rem) * 2);
1864
3108
  }
1865
- .sph-table-wrap {
1866
- max-width: 100%;
1867
- min-width: 0px;
1868
- overflow-x: auto;
1869
- border-radius: var(--sph-radius-md);
1870
- border-style: var(--tw-border-style);
1871
- border-width: 1px;
1872
- border-color: var(--sph-border);
1873
- background-color: var(--sph-surface);
1874
- font-family: var(--sph-font-sans);
3109
+ .sph-palette__backdrop {
3110
+ position: fixed;
3111
+ inset: 0;
3112
+ z-index: 200;
3113
+ display: flex;
3114
+ justify-content: center;
3115
+ align-items: flex-start;
3116
+ padding-top: max(18vh, 3.5rem);
3117
+ background: rgb(0 0 0 / 0.55);
3118
+ backdrop-filter: blur(6px);
3119
+ -webkit-backdrop-filter: blur(6px);
3120
+ animation: sph-palette-fade-in var(--sph-motion-normal) var(--sph-ease-standard) both;
1875
3121
  }
1876
- .sph-table {
1877
- width: 100%;
1878
- border-collapse: collapse;
1879
- text-align: left;
1880
- font-size: var(--text-xs, 0.75rem);
1881
- line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
3122
+ .sph-palette__backdrop[data-state="closed"] {
3123
+ pointer-events: none;
3124
+ animation: sph-palette-fade-out var(--sph-motion-normal) var(--sph-ease-exit) both;
3125
+ }
3126
+ .sph-palette {
3127
+ width: min(92vw, 37.5rem);
3128
+ font-family: var(--sph-font-sans);
1882
3129
  color: var(--sph-text);
1883
- min-width: 480px;
3130
+ animation: sph-palette-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1884
3131
  }
1885
- .sph-table caption {
1886
- border-bottom-style: var(--tw-border-style);
1887
- border-bottom-width: 1px;
1888
- border-color: var(--sph-border);
1889
- padding-inline: calc(var(--spacing, 0.25rem) * 4);
1890
- padding-block: calc(var(--spacing, 0.25rem) * 3);
1891
- text-align: left;
3132
+ .sph-palette__backdrop[data-state="closed"] .sph-palette {
3133
+ animation: sph-palette-out var(--sph-motion-normal) var(--sph-ease-exit) both;
3134
+ }
3135
+ .sph-palette__panel {
3136
+ position: relative;
3137
+ display: grid;
3138
+ overflow: hidden;
3139
+ background: var(--sph-surface);
3140
+ border: 1px solid var(--sph-border);
3141
+ border-radius: var(--sph-radius-md);
3142
+ box-shadow: var(--sph-shadow-popover);
3143
+ }
3144
+ .sph-level-pulse {
3145
+ animation: sph-level-pulse var(--sph-motion-normal) var(--sph-ease-standard);
3146
+ }
3147
+ .sph-palette__crumbs {
3148
+ display: flex;
3149
+ flex-wrap: wrap;
3150
+ gap: 4px;
3151
+ align-items: center;
3152
+ padding: 10px 12px 0;
3153
+ }
3154
+ .sph-palette__crumb {
3155
+ display: inline-flex;
3156
+ align-items: center;
3157
+ height: 24px;
3158
+ padding: 0 9px;
3159
+ border: 0;
3160
+ border-radius: var(--sph-radius-xs);
3161
+ background: var(--sph-raised);
3162
+ color: var(--sph-text-muted);
3163
+ cursor: pointer;
3164
+ font: 11.5px / 1 var(--sph-font-sans);
3165
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
3166
+ }
3167
+ .sph-palette__crumb:hover {
3168
+ background: var(--sph-accent);
3169
+ @supports (color: color-mix(in lab, red, red)) {
3170
+ background: color-mix(in srgb, var(--sph-accent) 16%, var(--sph-raised));
3171
+ }
3172
+ color: var(--sph-text);
3173
+ }
3174
+ .sph-palette__crumb:active {
3175
+ transform: scale(0.96);
3176
+ }
3177
+ .sph-palette__crumb:focus-visible {
3178
+ outline: 2px solid var(--sph-focus);
3179
+ outline-offset: 1px;
3180
+ }
3181
+ .sph-palette__crumb[data-current] {
3182
+ background: var(--sph-accent);
3183
+ @supports (color: color-mix(in lab, red, red)) {
3184
+ background: color-mix(in srgb, var(--sph-accent) 18%, transparent);
3185
+ }
3186
+ color: var(--sph-text);
3187
+ cursor: default;
3188
+ }
3189
+ .sph-palette__crumb-sep {
3190
+ display: inline-flex;
3191
+ color: var(--sph-text-muted);
3192
+ opacity: 0.6;
3193
+ }
3194
+ .sph-palette__search {
3195
+ display: flex;
3196
+ gap: 9px;
3197
+ align-items: center;
3198
+ padding: 10px 12px;
3199
+ border-bottom: 1px solid var(--sph-border);
3200
+ }
3201
+ .sph-palette__search-icon {
3202
+ flex: 0 0 auto;
3203
+ color: var(--sph-text-muted);
3204
+ }
3205
+ .sph-palette__input {
3206
+ flex: 1 1 auto;
3207
+ min-width: 0;
3208
+ border: 0;
3209
+ outline: none;
3210
+ background: transparent;
3211
+ color: var(--sph-text);
3212
+ font: 14px var(--sph-font-sans);
3213
+ }
3214
+ .sph-palette__input::placeholder {
3215
+ color: var(--sph-text-muted);
3216
+ }
3217
+ .sph-palette__escape {
3218
+ cursor: pointer;
3219
+ flex: 0 0 auto;
3220
+ }
3221
+ .sph-palette__escape:hover {
3222
+ color: var(--sph-text);
3223
+ border-color: var(--sph-border-strong);
3224
+ }
3225
+ .sph-palette__body {
3226
+ overflow: hidden;
3227
+ }
3228
+ .sph-palette__list {
3229
+ max-height: min(46vh, 24rem);
3230
+ overflow-y: auto;
3231
+ padding: 6px;
3232
+ }
3233
+ .sph-palette__track {
3234
+ position: relative;
3235
+ display: grid;
3236
+ gap: 2px;
3237
+ }
3238
+ .sph-level-fade {
3239
+ animation: sph-level-fade var(--sph-motion-normal) var(--sph-ease-standard) both;
3240
+ }
3241
+ .sph-palette__indicator {
3242
+ position: absolute;
3243
+ top: 0;
3244
+ left: 0;
3245
+ z-index: 0;
3246
+ border-radius: var(--sph-radius-sm);
3247
+ background: var(--sph-accent);
3248
+ @supports (color: color-mix(in lab, red, red)) {
3249
+ background: color-mix(in srgb, var(--sph-accent) 15%, transparent);
3250
+ }
3251
+ pointer-events: none;
3252
+ opacity: 0;
3253
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis), width var(--sph-motion-fast) var(--sph-ease-emphasis), height var(--sph-motion-fast) var(--sph-ease-emphasis);
3254
+ }
3255
+ .sph-palette__group {
3256
+ display: grid;
3257
+ gap: 2px;
3258
+ }
3259
+ .sph-palette__heading {
3260
+ padding: 8px 10px 2px;
3261
+ color: var(--sph-text-muted);
3262
+ font: 11px / 1.2 var(--sph-font-sans);
3263
+ letter-spacing: 0.04em;
3264
+ text-transform: uppercase;
3265
+ }
3266
+ .sph-palette__option {
3267
+ position: relative;
3268
+ z-index: 1;
3269
+ display: flex;
3270
+ gap: 10px;
3271
+ align-items: center;
3272
+ min-height: 36px;
3273
+ padding: 7px 10px;
3274
+ border-radius: var(--sph-radius-sm);
3275
+ color: var(--sph-text-muted);
3276
+ cursor: pointer;
3277
+ font: 13px var(--sph-font-sans);
3278
+ transition: color var(--sph-motion-fast) var(--sph-ease-standard);
3279
+ }
3280
+ .sph-palette__option[data-active] {
3281
+ color: var(--sph-text);
3282
+ }
3283
+ .sph-palette__option[data-disabled] {
3284
+ opacity: 0.4;
3285
+ cursor: default;
3286
+ }
3287
+ .sph-palette__icon {
3288
+ display: inline-flex;
3289
+ flex: 0 0 auto;
3290
+ color: currentcolor;
3291
+ opacity: 0.85;
3292
+ }
3293
+ .sph-palette__label {
3294
+ flex: 1 1 auto;
3295
+ min-width: 0;
3296
+ overflow: hidden;
3297
+ text-overflow: ellipsis;
3298
+ white-space: nowrap;
3299
+ }
3300
+ .sph-palette__badge {
3301
+ flex: 0 0 auto;
3302
+ padding: 2px 6px;
3303
+ border-radius: var(--sph-radius-xs);
3304
+ background: var(--sph-accent);
3305
+ @supports (color: color-mix(in lab, red, red)) {
3306
+ background: color-mix(in srgb, var(--sph-accent) 18%, transparent);
3307
+ }
3308
+ color: var(--sph-accent-strong);
3309
+ font-size: 10.5px;
3310
+ line-height: 1.4;
3311
+ }
3312
+ .sph-palette__hint {
3313
+ flex: 0 0 auto;
3314
+ color: var(--sph-text-muted);
3315
+ font-size: 11px;
3316
+ }
3317
+ .sph-palette__more {
3318
+ display: inline-flex;
3319
+ flex: 0 0 auto;
3320
+ color: var(--sph-text-muted);
3321
+ opacity: 0.7;
3322
+ }
3323
+ .sph-palette__option .sph-kbd {
3324
+ flex: 0 0 auto;
3325
+ }
3326
+ .sph-palette__empty {
3327
+ padding: 20px 10px;
3328
+ color: var(--sph-text-muted);
3329
+ text-align: center;
3330
+ font-size: 13px;
3331
+ }
3332
+ .sph-palette__footer {
3333
+ display: flex;
3334
+ flex-wrap: wrap;
3335
+ gap: 14px;
3336
+ padding: 7px 12px;
3337
+ border-top: 1px solid var(--sph-border);
3338
+ color: var(--sph-text-muted);
3339
+ font-size: 11px;
3340
+ }
3341
+ .sph-palette__hintrow {
3342
+ display: inline-flex;
3343
+ gap: 4px;
3344
+ align-items: center;
3345
+ }
3346
+ @keyframes sph-palette-fade-in {
3347
+ from {
3348
+ opacity: 0;
3349
+ }
3350
+ to {
3351
+ opacity: 1;
3352
+ }
3353
+ }
3354
+ @keyframes sph-palette-fade-out {
3355
+ from {
3356
+ opacity: 1;
3357
+ }
3358
+ to {
3359
+ opacity: 0;
3360
+ }
3361
+ }
3362
+ @keyframes sph-palette-in {
3363
+ from {
3364
+ opacity: 0;
3365
+ transform: translateY(-4px) scale(0.96);
3366
+ }
3367
+ to {
3368
+ opacity: 1;
3369
+ transform: translateY(0) scale(1);
3370
+ }
3371
+ }
3372
+ @keyframes sph-palette-out {
3373
+ from {
3374
+ opacity: 1;
3375
+ transform: scale(1);
3376
+ }
3377
+ to {
3378
+ opacity: 0;
3379
+ transform: scale(0.97);
3380
+ }
3381
+ }
3382
+ @keyframes sph-level-pulse {
3383
+ 0% {
3384
+ transform: scale(1);
3385
+ animation-timing-function: var(--sph-ease-standard);
3386
+ }
3387
+ 40% {
3388
+ transform: scale(0.985);
3389
+ animation-timing-function: var(--sph-ease-emphasis);
3390
+ }
3391
+ 100% {
3392
+ transform: scale(1);
3393
+ }
3394
+ }
3395
+ @keyframes sph-level-fade {
3396
+ from {
3397
+ opacity: 0.5;
3398
+ }
3399
+ to {
3400
+ opacity: 1;
3401
+ }
3402
+ }
3403
+ .sph-dropzone {
3404
+ --sph-pull-x: 0px;
3405
+ --sph-pull-y: 0px;
3406
+ position: relative;
3407
+ display: flex;
3408
+ align-items: center;
3409
+ justify-content: center;
3410
+ min-block-size: 8rem;
3411
+ padding: 20px;
3412
+ border: 1.5px dashed var(--sph-border);
3413
+ @supports (color: color-mix(in lab, red, red)) {
3414
+ border: 1.5px dashed color-mix(in srgb, var(--sph-border) 85%, transparent);
3415
+ }
3416
+ border-radius: var(--sph-radius-md);
3417
+ background: var(--sph-raised);
3418
+ @supports (color: color-mix(in lab, red, red)) {
3419
+ background: color-mix(in srgb, var(--sph-raised) 45%, transparent);
3420
+ }
3421
+ cursor: pointer;
3422
+ text-align: center;
3423
+ font-family: var(--sph-font-sans);
3424
+ color: var(--sph-text-muted);
3425
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
3426
+ }
3427
+ .sph-dropzone:hover:not([data-disabled]) {
3428
+ border-color: var(--sph-border-strong);
3429
+ }
3430
+ .sph-dropzone[data-active] {
3431
+ border-color: var(--sph-accent);
3432
+ background: var(--sph-accent);
3433
+ @supports (color: color-mix(in lab, red, red)) {
3434
+ background: color-mix(in srgb, var(--sph-accent) 8%, transparent);
3435
+ }
3436
+ box-shadow: 0 0 0 3px var(--sph-accent);
3437
+ @supports (color: color-mix(in lab, red, red)) {
3438
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--sph-accent) 18%, transparent);
3439
+ }
3440
+ }
3441
+ .sph-dropzone[data-disabled] {
3442
+ opacity: 50%;
3443
+ cursor: not-allowed;
3444
+ }
3445
+ .sph-dropzone__content {
3446
+ display: grid;
3447
+ gap: 6px;
3448
+ justify-items: center;
3449
+ transform: translate(var(--sph-pull-x), var(--sph-pull-y));
3450
+ transition: transform var(--sph-motion-normal) var(--sph-ease-emphasis);
3451
+ }
3452
+ .sph-dropzone[data-active] .sph-dropzone__content {
3453
+ color: var(--sph-text);
3454
+ }
3455
+ .sph-dropzone__input {
3456
+ position: absolute;
3457
+ inline-size: 1px;
3458
+ block-size: 1px;
3459
+ opacity: 0;
3460
+ pointer-events: none;
3461
+ }
3462
+ @media (prefers-reduced-motion: reduce) {
3463
+ .sph-dropzone__content {
3464
+ transition: none;
3465
+ transform: none;
3466
+ }
3467
+ }
3468
+ .sph-reasoning {
3469
+ border: 1px solid var(--sph-border);
3470
+ border-radius: var(--sph-radius-md);
3471
+ background: var(--sph-surface);
3472
+ @supports (color: color-mix(in lab, red, red)) {
3473
+ background: color-mix(in srgb, var(--sph-surface) 80%, transparent);
3474
+ }
3475
+ padding: 8px 12px 10px;
3476
+ font-family: var(--sph-font-sans);
3477
+ }
3478
+ .sph-reasoning__trigger {
3479
+ display: flex;
3480
+ gap: 8px;
3481
+ align-items: center;
3482
+ justify-content: space-between;
3483
+ inline-size: 100%;
3484
+ }
3485
+ .sph-reasoning__label {
3486
+ color: var(--sph-text);
3487
+ }
3488
+ .sph-reasoning__meta {
3489
+ display: inline-flex;
3490
+ gap: 7px;
3491
+ align-items: center;
3492
+ color: var(--sph-text-muted);
3493
+ font-weight: 400;
3494
+ }
3495
+ .sph-reasoning__count {
3496
+ font-size: 11px;
3497
+ }
3498
+ .sph-reasoning__list {
3499
+ display: grid;
3500
+ gap: 4px;
3501
+ margin: 6px 0 0;
3502
+ padding: 0;
3503
+ list-style: none;
3504
+ }
3505
+ .sph-reasoning__step {
3506
+ display: flex;
3507
+ gap: 9px;
3508
+ align-items: baseline;
3509
+ padding: 5px 7px;
3510
+ border-radius: var(--sph-radius-sm);
3511
+ animation: sph-rise-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
3512
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard);
3513
+ }
3514
+ .sph-reasoning__step[data-status="active"] {
3515
+ background: var(--sph-accent);
3516
+ @supports (color: color-mix(in lab, red, red)) {
3517
+ background: color-mix(in srgb, var(--sph-accent) 10%, transparent);
3518
+ }
3519
+ }
3520
+ .sph-reasoning__step[data-status="pending"] {
3521
+ opacity: 0.55;
3522
+ }
3523
+ .sph-reasoning__marker {
3524
+ position: relative;
3525
+ flex: 0 0 auto;
3526
+ align-self: stretch;
3527
+ inline-size: 10px;
3528
+ }
3529
+ .sph-reasoning__marker::before {
3530
+ content: "";
3531
+ position: absolute;
3532
+ inset-block: 14px -6px;
3533
+ inset-inline-start: 4.5px;
3534
+ inline-size: 1px;
3535
+ background: var(--sph-border);
3536
+ }
3537
+ .sph-reasoning__step:last-child .sph-reasoning__marker::before {
3538
+ display: none;
3539
+ }
3540
+ .sph-reasoning__dot {
3541
+ position: absolute;
3542
+ inset-block-start: 4px;
3543
+ inset-inline-start: 1px;
3544
+ inline-size: 8px;
3545
+ block-size: 8px;
3546
+ border-radius: 999px;
3547
+ background: var(--sph-border-strong);
3548
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
3549
+ }
3550
+ .sph-reasoning__step[data-status="done"] .sph-reasoning__dot {
3551
+ background: var(--sph-success);
3552
+ }
3553
+ .sph-reasoning__step[data-status="active"] .sph-reasoning__dot {
3554
+ background: var(--sph-accent);
3555
+ box-shadow: 0 0 0 3px var(--sph-accent);
3556
+ @supports (color: color-mix(in lab, red, red)) {
3557
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--sph-accent) 25%, transparent);
3558
+ }
3559
+ animation: sph-glow-pulse 1.2s var(--sph-ease-standard) infinite alternate;
3560
+ }
3561
+ .sph-reasoning__body {
3562
+ display: grid;
3563
+ gap: 1px;
3564
+ flex: 1 1 auto;
3565
+ min-inline-size: 0;
3566
+ }
3567
+ .sph-reasoning__title {
3568
+ color: var(--sph-text);
3569
+ font-size: 12.5px;
3570
+ line-height: 1.45;
3571
+ }
3572
+ .sph-reasoning__detail {
3573
+ color: var(--sph-text-muted);
3574
+ font-size: 12px;
3575
+ line-height: 1.5;
3576
+ }
3577
+ .sph-reasoning__status {
3578
+ flex: 0 0 auto;
3579
+ color: var(--sph-text-muted);
3580
+ font-size: 10.5px;
3581
+ letter-spacing: 0.03em;
3582
+ text-transform: uppercase;
3583
+ }
3584
+ .sph-resizable {
3585
+ display: flex;
3586
+ min-inline-size: 0;
3587
+ min-block-size: 0;
3588
+ }
3589
+ .sph-resizable[data-direction="vertical"] {
3590
+ flex-direction: column;
3591
+ }
3592
+ .sph-resizable__pane {
3593
+ display: flex;
3594
+ flex-direction: column;
3595
+ min-inline-size: 0;
3596
+ min-block-size: 0;
3597
+ }
3598
+ .sph-resizable__handle {
3599
+ position: relative;
3600
+ flex: 0 0 auto;
3601
+ align-self: stretch;
3602
+ border: 0;
3603
+ padding: 0;
3604
+ background: transparent;
3605
+ touch-action: none;
3606
+ cursor: col-resize;
3607
+ }
3608
+ .sph-resizable[data-direction="horizontal"] .sph-resizable__handle {
3609
+ inline-size: 9px;
3610
+ }
3611
+ .sph-resizable[data-direction="vertical"] .sph-resizable__handle {
3612
+ block-size: 9px;
3613
+ cursor: row-resize;
3614
+ }
3615
+ .sph-resizable__handle::after {
3616
+ content: "";
3617
+ position: absolute;
3618
+ inset-block: 6px;
3619
+ inset-inline-start: 50%;
3620
+ inline-size: 2px;
3621
+ border-radius: 999px;
3622
+ background: var(--sph-border);
3623
+ @supports (color: color-mix(in lab, red, red)) {
3624
+ background: color-mix(in srgb, var(--sph-border) 80%, transparent);
3625
+ }
3626
+ transform: translateX(-50%);
3627
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), block-size var(--sph-motion-fast) var(--sph-ease-emphasis);
3628
+ }
3629
+ .sph-resizable[data-direction="vertical"] .sph-resizable__handle::after {
3630
+ inset-block: auto;
3631
+ inset-inline: 6px;
3632
+ inset-block-start: 50%;
3633
+ inline-size: auto;
3634
+ block-size: 2px;
3635
+ transform: translateY(-50%);
3636
+ }
3637
+ .sph-resizable__handle:hover::after, .sph-resizable__handle:focus-visible::after, .sph-resizable__handle[data-dragging]::after {
3638
+ background: var(--sph-accent);
3639
+ }
3640
+ .sph-resizable__handle:focus-visible {
3641
+ outline: 2px solid var(--sph-focus);
3642
+ outline-offset: -3px;
3643
+ border-radius: var(--sph-radius-xs);
3644
+ }
3645
+ @media (prefers-reduced-motion: reduce) {
3646
+ .sph-resizable__handle::after {
3647
+ transition: none;
3648
+ }
3649
+ }
3650
+ .sph-stream {
3651
+ color: inherit;
3652
+ font: inherit;
3653
+ line-height: inherit;
3654
+ word-break: break-word;
3655
+ }
3656
+ .sph-stream__word {
3657
+ display: inline-block;
3658
+ white-space: pre-wrap;
3659
+ }
3660
+ .sph-stream__word[data-animated] {
3661
+ animation: sph-stream-word var(--sph-motion-normal) var(--sph-ease-standard) both;
3662
+ }
3663
+ @keyframes sph-stream-word {
3664
+ 0% {
3665
+ opacity: 0;
3666
+ transform: translateY(3px);
3667
+ filter: blur(2px);
3668
+ }
3669
+ 55% {
3670
+ opacity: 1;
3671
+ transform: translateY(0);
3672
+ filter: blur(0);
3673
+ color: var(--sph-accent-strong);
3674
+ }
3675
+ 100% {
3676
+ opacity: 1;
3677
+ transform: translateY(0);
3678
+ filter: blur(0);
3679
+ color: inherit;
3680
+ }
3681
+ }
3682
+ @media (prefers-reduced-motion: reduce) {
3683
+ .sph-stream__word[data-animated] {
3684
+ animation: none;
3685
+ opacity: 1;
3686
+ }
3687
+ }
3688
+ .sph-sidebar {
3689
+ display: flex;
3690
+ flex-direction: column;
3691
+ gap: 6px;
3692
+ inline-size: 224px;
3693
+ padding: 8px;
3694
+ border-inline-end: 1px solid var(--sph-border);
3695
+ background: var(--sph-surface);
3696
+ font-family: var(--sph-font-sans);
3697
+ transition: inline-size var(--sph-motion-normal) var(--sph-ease-standard);
3698
+ }
3699
+ .sph-sidebar[data-collapsed] {
3700
+ inline-size: 56px;
3701
+ }
3702
+ .sph-sidebar__header {
3703
+ padding: 6px 8px 2px;
3704
+ }
3705
+ .sph-sidebar__nav {
3706
+ display: flex;
3707
+ flex: 1 1 auto;
3708
+ flex-direction: column;
3709
+ gap: 10px;
3710
+ min-block-size: 0;
3711
+ overflow-y: auto;
3712
+ overflow-x: hidden;
3713
+ scrollbar-width: thin;
3714
+ scrollbar-color: var(--sph-border-strong) transparent;
3715
+ @supports (color: color-mix(in lab, red, red)) {
3716
+ scrollbar-color: color-mix( in srgb, var(--sph-border-strong) 55%, transparent ) transparent;
3717
+ }
3718
+ }
3719
+ .sph-sidebar__section {
3720
+ display: flex;
3721
+ flex-direction: column;
3722
+ gap: 2px;
3723
+ }
3724
+ .sph-sidebar__section-title {
3725
+ padding: 4px 8px 2px;
3726
+ color: var(--sph-text-muted);
3727
+ font-size: 10.5px;
3728
+ font-weight: 500;
3729
+ letter-spacing: 0.05em;
3730
+ text-transform: uppercase;
3731
+ white-space: nowrap;
3732
+ overflow: hidden;
3733
+ transition: opacity var(--sph-motion-fast) var(--sph-ease-standard);
3734
+ }
3735
+ .sph-sidebar[data-collapsed] .sph-sidebar__section-title {
3736
+ opacity: 0;
3737
+ block-size: 0;
3738
+ padding: 0;
3739
+ }
3740
+ .sph-sidebar__item {
3741
+ position: relative;
3742
+ display: flex;
3743
+ gap: 9px;
3744
+ align-items: center;
3745
+ min-block-size: 32px;
3746
+ padding: 5px 9px;
3747
+ border: 0;
3748
+ border-radius: var(--sph-radius-sm);
3749
+ background: transparent;
3750
+ color: var(--sph-text-muted);
3751
+ cursor: pointer;
3752
+ font: 13px var(--sph-font-sans);
3753
+ text-align: start;
3754
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
3755
+ }
3756
+ .sph-sidebar__item:hover:not(:disabled) {
3757
+ background: var(--sph-raised);
3758
+ color: var(--sph-text);
3759
+ transform: translateX(2px);
3760
+ }
3761
+ .sph-sidebar__item:active:not(:disabled) {
3762
+ transform: translateX(2px) scale(0.985);
3763
+ }
3764
+ .sph-sidebar__item:focus-visible {
3765
+ outline: 2px solid var(--sph-focus);
3766
+ outline-offset: -2px;
3767
+ }
3768
+ .sph-sidebar__item:disabled {
3769
+ opacity: 45%;
3770
+ cursor: not-allowed;
3771
+ }
3772
+ .sph-sidebar__item[data-active] {
3773
+ background: var(--sph-accent);
3774
+ @supports (color: color-mix(in lab, red, red)) {
3775
+ background: color-mix(in srgb, var(--sph-accent) 15%, transparent);
3776
+ }
3777
+ color: var(--sph-text);
3778
+ }
3779
+ .sph-sidebar__item[data-active]::before {
3780
+ content: "";
3781
+ position: absolute;
3782
+ inset-block: 7px;
3783
+ inset-inline-start: -8px;
3784
+ inline-size: 2.5px;
3785
+ border-radius: 999px;
3786
+ background: var(--sph-accent);
3787
+ }
3788
+ .sph-sidebar__item[data-active] .sph-sidebar__icon {
3789
+ color: var(--sph-accent-strong);
3790
+ }
3791
+ .sph-sidebar__icon {
3792
+ display: inline-flex;
3793
+ flex: 0 0 auto;
3794
+ font-size: 15px;
3795
+ }
3796
+ .sph-sidebar__label {
3797
+ flex: 1 1 auto;
3798
+ min-inline-size: 0;
3799
+ white-space: nowrap;
3800
+ overflow: hidden;
3801
+ text-overflow: ellipsis;
3802
+ transition: opacity var(--sph-motion-fast) var(--sph-ease-standard), flex-basis var(--sph-motion-normal) var(--sph-ease-standard);
3803
+ }
3804
+ .sph-sidebar[data-collapsed] .sph-sidebar__label, .sph-sidebar[data-collapsed] .sph-sidebar__badge {
3805
+ opacity: 0;
3806
+ flex-basis: 0;
3807
+ inline-size: 0;
3808
+ margin: 0;
3809
+ pointer-events: none;
3810
+ }
3811
+ .sph-sidebar[data-collapsed] .sph-sidebar__item {
3812
+ justify-content: center;
3813
+ padding-inline: 0;
3814
+ }
3815
+ .sph-sidebar[data-collapsed] .sph-sidebar__item[data-active]::before {
3816
+ inset-inline-start: -6px;
3817
+ }
3818
+ .sph-sidebar__badge {
3819
+ flex: 0 0 auto;
3820
+ margin-inline-start: auto;
3821
+ transition: opacity var(--sph-motion-fast) var(--sph-ease-standard);
3822
+ }
3823
+ .sph-sidebar__footer {
3824
+ display: flex;
3825
+ align-items: center;
3826
+ gap: 6px;
3827
+ padding-top: 4px;
3828
+ border-block-start: 1px solid var(--sph-border);
3829
+ }
3830
+ .sph-sidebar__footer-content {
3831
+ flex: 1 1 auto;
3832
+ min-inline-size: 0;
3833
+ overflow: hidden;
3834
+ }
3835
+ .sph-sidebar[data-collapsed] .sph-sidebar__footer-content {
3836
+ display: none;
3837
+ }
3838
+ .sph-sidebar__toggle {
3839
+ display: inline-flex;
3840
+ align-items: center;
3841
+ justify-content: center;
3842
+ inline-size: 26px;
3843
+ block-size: 26px;
3844
+ flex: 0 0 auto;
3845
+ border: 0;
3846
+ border-radius: var(--sph-radius-xs);
3847
+ background: transparent;
3848
+ color: var(--sph-text-muted);
3849
+ cursor: pointer;
3850
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
3851
+ }
3852
+ .sph-sidebar__toggle:hover {
3853
+ background: var(--sph-raised);
3854
+ color: var(--sph-text);
3855
+ }
3856
+ .sph-sidebar__toggle:focus-visible {
3857
+ outline: 2px solid var(--sph-focus);
3858
+ outline-offset: 1px;
3859
+ }
3860
+ @media (prefers-reduced-motion: reduce) {
3861
+ .sph-sidebar, .sph-sidebar__item {
3862
+ transition: none;
3863
+ }
3864
+ }
3865
+ .sph-match {
3866
+ border-radius: 2px;
3867
+ background: var(--sph-accent);
3868
+ @supports (color: color-mix(in lab, red, red)) {
3869
+ background: color-mix(in srgb, var(--sph-accent) 22%, transparent);
3870
+ }
3871
+ color: var(--sph-accent-strong);
3872
+ font-weight: 550;
3873
+ }
3874
+ .sph-table-wrap {
3875
+ max-width: 100%;
3876
+ min-width: 0px;
3877
+ overflow-x: auto;
3878
+ border-radius: var(--sph-radius-md);
3879
+ border-style: var(--tw-border-style);
3880
+ border-width: 1px;
3881
+ border-color: var(--sph-border);
3882
+ background-color: var(--sph-surface);
3883
+ font-family: var(--sph-font-sans);
3884
+ }
3885
+ .sph-table {
3886
+ width: 100%;
3887
+ border-collapse: collapse;
3888
+ text-align: left;
3889
+ font-size: var(--text-xs, 0.75rem);
3890
+ line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
3891
+ color: var(--sph-text);
3892
+ min-width: 480px;
3893
+ }
3894
+ .sph-table caption {
3895
+ border-bottom-style: var(--tw-border-style);
3896
+ border-bottom-width: 1px;
3897
+ border-color: var(--sph-border);
3898
+ padding-inline: calc(var(--spacing, 0.25rem) * 4);
3899
+ padding-block: calc(var(--spacing, 0.25rem) * 3);
3900
+ text-align: left;
1892
3901
  font-size: var(--text-sm, 0.875rem);
1893
3902
  line-height: var(--tw-leading, var(--text-sm--line-height, calc(1.25 / 0.875)));
1894
3903
  --tw-font-weight: var(--font-weight-semibold, 600);
@@ -1919,6 +3928,9 @@
1919
3928
  .sph-table tbody tr:last-child td {
1920
3929
  border-bottom: 0;
1921
3930
  }
3931
+ .sph-table tbody tr {
3932
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard);
3933
+ }
1922
3934
  .sph-table tbody tr:hover {
1923
3935
  background: var(--sph-raised);
1924
3936
  @supports (color: color-mix(in lab, red, red)) {
@@ -1972,6 +3984,10 @@
1972
3984
  border-color: var(--sph-border);
1973
3985
  background-color: var(--sph-surface);
1974
3986
  font-family: var(--sph-font-sans);
3987
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
3988
+ }
3989
+ .sph-toolbar:hover {
3990
+ border-color: var(--sph-border-strong);
1975
3991
  }
1976
3992
  .sph-toolbar[data-size="sm"] {
1977
3993
  gap: calc(var(--spacing, 0.25rem) * 1.5);
@@ -2032,9 +4048,9 @@
2032
4048
  min-height: 2.5rem;
2033
4049
  }
2034
4050
  .sph-toolbar .sph-tabs__tab[data-selected="true"]::after {
2035
- bottom: 1px;
2036
- left: 12px;
2037
- right: 12px;
4051
+ bottom: 3px;
4052
+ left: 10px;
4053
+ right: 10px;
2038
4054
  }
2039
4055
  @media (max-width: 560px) {
2040
4056
  .sph-toolbar {