@zovaris/sephiro 0.6.1 → 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.
package/dist/index.css CHANGED
@@ -29,8 +29,11 @@
29
29
  --sph-motion-fast: 120ms;
30
30
  --sph-motion-normal: 180ms;
31
31
  --sph-motion-slow: 280ms;
32
+ --sph-motion-stagger: 26ms;
32
33
  --sph-ease-standard: cubic-bezier(0.2, 0.8, 0.2, 1);
33
34
  --sph-ease-emphasis: cubic-bezier(0.16, 1, 0.3, 1);
35
+ --sph-ease-exit: cubic-bezier(0.4, 0, 1, 1);
36
+ --sph-ease-spring: cubic-bezier(0.3, 1.45, 0.45, 1);
34
37
  --sph-control-height-sm: 32px;
35
38
  --sph-control-height-md: 36px;
36
39
  --sph-control-height-lg: 40px;
@@ -189,17 +192,25 @@
189
192
  color-scheme: dark;
190
193
  }
191
194
 
195
+ :where([data-sephiro-motion="off"]) {
196
+ --sph-motion-fast: 0ms;
197
+ --sph-motion-normal: 0ms;
198
+ --sph-motion-slow: 0ms;
199
+ --sph-motion-stagger: 0ms;
200
+ }
201
+
192
202
  @media (prefers-reduced-motion: reduce) {
193
203
  :where(:root, [data-sephiro-theme]) {
194
204
  --sph-motion-fast: 0ms;
195
205
  --sph-motion-normal: 0ms;
196
206
  --sph-motion-slow: 0ms;
207
+ --sph-motion-stagger: 0ms;
197
208
  }
198
209
  }
199
210
 
200
211
  :where([class^="sph-"], [class*=" sph-"]) {
201
- --tw-font-weight: initial;
202
212
  --tw-border-style: solid;
213
+ --tw-font-weight: initial;
203
214
  --tw-leading: initial;
204
215
  --tw-shadow: 0 0 #0000;
205
216
  --tw-shadow-color: initial;
@@ -215,10 +226,267 @@
215
226
  --tw-ring-offset-width: 0px;
216
227
  --tw-ring-offset-color: #fff;
217
228
  --tw-ring-offset-shadow: 0 0 #0000;
218
- --tw-duration: initial;
219
- --tw-ease: initial;
220
229
  }
221
230
  /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
231
+ @keyframes sph-fade-in {
232
+ from {
233
+ opacity: 0;
234
+ }
235
+ to {
236
+ opacity: 1;
237
+ }
238
+ }
239
+ @keyframes sph-fade-out {
240
+ from {
241
+ opacity: 1;
242
+ }
243
+ to {
244
+ opacity: 0;
245
+ }
246
+ }
247
+ @keyframes sph-rise-in {
248
+ from {
249
+ opacity: 0;
250
+ transform: translateY(6px);
251
+ }
252
+ to {
253
+ opacity: 1;
254
+ transform: translateY(0);
255
+ }
256
+ }
257
+ @keyframes sph-rise-out {
258
+ from {
259
+ opacity: 1;
260
+ transform: translateY(0);
261
+ }
262
+ to {
263
+ opacity: 0;
264
+ transform: translateY(4px);
265
+ }
266
+ }
267
+ @keyframes sph-drop-in {
268
+ from {
269
+ opacity: 0;
270
+ transform: translateY(-5px) scale(0.975);
271
+ }
272
+ to {
273
+ opacity: 1;
274
+ transform: translateY(0) scale(1);
275
+ }
276
+ }
277
+ @keyframes sph-drop-out {
278
+ from {
279
+ opacity: 1;
280
+ transform: translateY(0) scale(1);
281
+ }
282
+ to {
283
+ opacity: 0;
284
+ transform: translateY(-3px) scale(0.98);
285
+ }
286
+ }
287
+ @keyframes sph-pop {
288
+ from {
289
+ opacity: 0;
290
+ transform: scale(0.86);
291
+ }
292
+ 60% {
293
+ opacity: 1;
294
+ transform: scale(1.06);
295
+ }
296
+ to {
297
+ opacity: 1;
298
+ transform: scale(1);
299
+ }
300
+ }
301
+ @keyframes sph-bounce {
302
+ 0% {
303
+ transform: scale(0.88);
304
+ }
305
+ 60% {
306
+ transform: scale(1.12);
307
+ }
308
+ 100% {
309
+ transform: scale(1);
310
+ }
311
+ }
312
+ @keyframes sph-glow-pulse {
313
+ from {
314
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--sph-accent) 60%, transparent);
315
+ }
316
+ to {
317
+ box-shadow: 0 0 0 7px transparent;
318
+ }
319
+ }
320
+ @keyframes sph-shake {
321
+ 0%, 100% {
322
+ transform: translateX(0);
323
+ }
324
+ 24% {
325
+ transform: translateX(-3px);
326
+ }
327
+ 48% {
328
+ transform: translateX(3px);
329
+ }
330
+ 72% {
331
+ transform: translateX(-2px);
332
+ }
333
+ 88% {
334
+ transform: translateX(1px);
335
+ }
336
+ }
337
+ @keyframes sph-blur-in {
338
+ from {
339
+ opacity: 0;
340
+ transform: translateX(-8px);
341
+ filter: blur(4px);
342
+ }
343
+ to {
344
+ opacity: 1;
345
+ transform: translateX(0);
346
+ filter: blur(0);
347
+ }
348
+ }
349
+ @keyframes sph-digit-pop {
350
+ from {
351
+ opacity: 0;
352
+ transform: translateY(0.55em);
353
+ filter: blur(3px);
354
+ }
355
+ to {
356
+ opacity: 1;
357
+ transform: translateY(0);
358
+ filter: blur(0);
359
+ }
360
+ }
361
+ @keyframes sph-dot-bounce {
362
+ 0%, 85%, 100% {
363
+ transform: translateY(0);
364
+ opacity: 0.4;
365
+ }
366
+ 40% {
367
+ transform: translateY(-3px);
368
+ opacity: 1;
369
+ }
370
+ }
371
+ @keyframes sph-draw-x {
372
+ from {
373
+ transform: scaleX(0);
374
+ }
375
+ to {
376
+ transform: scaleX(1);
377
+ }
378
+ }
379
+ @keyframes sph-draw-y {
380
+ from {
381
+ transform: scaleY(0);
382
+ }
383
+ to {
384
+ transform: scaleY(1);
385
+ }
386
+ }
387
+ .sph-motion-in {
388
+ animation: sph-rise-in var(--sph-motion-slow) var(--sph-ease-emphasis) both;
389
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
390
+ }
391
+ .sph-motion-in--fade {
392
+ animation-name: sph-fade-in;
393
+ }
394
+ .sph-motion-in--pop {
395
+ animation-name: sph-pop;
396
+ animation-duration: var(--sph-motion-normal);
397
+ }
398
+ .sph-motion-in--blur {
399
+ animation-name: sph-blur-in;
400
+ }
401
+ .sph-motion-in--digit {
402
+ animation-name: sph-digit-pop;
403
+ }
404
+ .sph-typing {
405
+ display: inline-flex;
406
+ gap: 3px;
407
+ align-items: center;
408
+ color: inherit;
409
+ }
410
+ .sph-typing > * {
411
+ inline-size: 5px;
412
+ block-size: 5px;
413
+ border-radius: 999px;
414
+ background: currentcolor;
415
+ animation: sph-dot-bounce 1.1s var(--sph-ease-standard) infinite;
416
+ }
417
+ .sph-typing > :nth-child(2) {
418
+ animation-delay: 130ms;
419
+ }
420
+ .sph-typing > :nth-child(3) {
421
+ animation-delay: 260ms;
422
+ }
423
+ @media (prefers-reduced-motion: reduce) {
424
+ .sph-typing > * {
425
+ animation: none;
426
+ opacity: 0.6;
427
+ }
428
+ }
429
+ .sph-avatar {
430
+ position: relative;
431
+ display: inline-flex;
432
+ flex-shrink: 0;
433
+ align-items: center;
434
+ justify-content: center;
435
+ border-radius: calc(infinity * 1px);
436
+ border-style: var(--tw-border-style);
437
+ border-width: 0px;
438
+ background-color: var(--sph-raised);
439
+ font-family: var(--sph-font-sans);
440
+ --tw-font-weight: var(--font-weight-medium, 500);
441
+ font-weight: var(--font-weight-medium, 500);
442
+ color: var(--sph-text-muted);
443
+ inline-size: 32px;
444
+ block-size: 32px;
445
+ user-select: none;
446
+ }
447
+ .sph-avatar[data-size="sm"] {
448
+ inline-size: 24px;
449
+ block-size: 24px;
450
+ font-size: 10px;
451
+ }
452
+ .sph-avatar[data-size="lg"] {
453
+ inline-size: 40px;
454
+ block-size: 40px;
455
+ font-size: 14px;
456
+ }
457
+ .sph-avatar__image {
458
+ width: 100%;
459
+ height: 100%;
460
+ border-radius: calc(infinity * 1px);
461
+ object-fit: cover;
462
+ }
463
+ .sph-avatar__initials {
464
+ --tw-leading: 1;
465
+ line-height: 1;
466
+ letter-spacing: 0.02em;
467
+ }
468
+ .sph-avatar__status {
469
+ position: absolute;
470
+ inset-block-end: -1px;
471
+ inset-inline-end: -1px;
472
+ inline-size: 9px;
473
+ block-size: 9px;
474
+ border-radius: 999px;
475
+ box-shadow: 0 0 0 2px var(--sph-surface);
476
+ animation: sph-pop var(--sph-motion-normal) var(--sph-ease-spring) both;
477
+ }
478
+ .sph-avatar__status[data-status="online"] {
479
+ background: var(--sph-success);
480
+ }
481
+ .sph-avatar__status[data-status="busy"] {
482
+ background: var(--sph-danger);
483
+ }
484
+ .sph-avatar__status[data-status="away"] {
485
+ background: var(--sph-warning);
486
+ }
487
+ .sph-avatar__status[data-status="offline"] {
488
+ background: var(--sph-border-strong);
489
+ }
222
490
  .sph-badge {
223
491
  display: inline-flex;
224
492
  align-items: center;
@@ -290,7 +558,11 @@
290
558
  cursor: pointer;
291
559
  font-family: var(--sph-font-sans);
292
560
  font-weight: 550;
293
- 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);
561
+ position: relative;
562
+ 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);
563
+ }
564
+ .sph-button:hover:not(:disabled) {
565
+ transform: translateY(-1px);
294
566
  }
295
567
  .sph-button[data-size="sm"] {
296
568
  height: calc(var(--spacing, 0.25rem) * 8);
@@ -305,16 +577,38 @@
305
577
  font-size: var(--text-sm, 0.875rem);
306
578
  line-height: var(--tw-leading, var(--text-sm--line-height, calc(1.25 / 0.875)));
307
579
  }
580
+ .sph-button:active:not(:disabled) {
581
+ transform: translateY(1px) scale(0.98);
582
+ }
308
583
  .sph-button[data-variant="primary"] {
309
584
  background-color: var(--sph-accent);
310
585
  color: var(--sph-on-accent);
586
+ overflow: hidden;
587
+ }
588
+ .sph-button[data-variant="primary"]:hover:not(:disabled) {
589
+ box-shadow: 0 8px 20px -10px var(--sph-accent);
590
+ @supports (color: color-mix(in lab, red, red)) {
591
+ box-shadow: 0 8px 20px -10px color-mix(in srgb, var(--sph-accent) 80%, transparent);
592
+ }
593
+ }
594
+ .sph-button[data-variant="primary"]::after {
595
+ content: "";
596
+ position: absolute;
597
+ inset: 0;
598
+ background: linear-gradient( 105deg, transparent 32%, rgb(255 255 255 / 0.22) 50%, transparent 68% );
599
+ transform: translateX(-140%);
600
+ transition: transform var(--sph-motion-slow) var(--sph-ease-standard);
601
+ pointer-events: none;
602
+ }
603
+ .sph-button[data-variant="primary"]:hover:not(:disabled)::after {
604
+ transform: translateX(140%);
311
605
  }
312
606
  .sph-button[data-variant="primary"]:hover {
313
607
  background-color: var(--sph-accent-hover);
314
608
  }
315
609
  .sph-button[data-variant="primary"]:active {
316
610
  background-color: var(--sph-accent-pressed);
317
- transform: translateY(1px);
611
+ transform: translateY(1px) scale(0.98);
318
612
  }
319
613
  .sph-button[data-variant="secondary"] {
320
614
  border-style: var(--tw-border-style);
@@ -397,6 +691,7 @@
397
691
  .sph-checkbox__input:checked + .sph-checkbox__box {
398
692
  border-color: var(--sph-accent);
399
693
  background-color: var(--sph-accent);
694
+ animation: sph-bounce var(--sph-motion-slow) var(--sph-ease-spring);
400
695
  }
401
696
  .sph-checkbox__check {
402
697
  display: block;
@@ -444,7 +739,8 @@
444
739
  box-sizing: border-box;
445
740
  cursor: pointer;
446
741
  font-family: var(--sph-font-sans);
447
- 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);
742
+ position: relative;
743
+ 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);
448
744
  }
449
745
  .sph-icon-button[data-size="sm"] {
450
746
  width: calc(var(--spacing, 0.25rem) * 8);
@@ -469,6 +765,19 @@
469
765
  .sph-icon-button[data-variant="solid"] {
470
766
  background-color: var(--sph-accent);
471
767
  color: var(--sph-on-accent);
768
+ overflow: hidden;
769
+ }
770
+ .sph-icon-button[data-variant="solid"]::after {
771
+ content: "";
772
+ position: absolute;
773
+ inset: 0;
774
+ background: linear-gradient( 105deg, transparent 32%, rgb(255 255 255 / 0.22) 50%, transparent 68% );
775
+ transform: translateX(-160%);
776
+ transition: transform var(--sph-motion-slow) var(--sph-ease-standard);
777
+ pointer-events: none;
778
+ }
779
+ .sph-icon-button[data-variant="solid"]:hover:not(:disabled)::after {
780
+ transform: translateX(160%);
472
781
  }
473
782
  .sph-icon-button[data-variant="solid"]:hover:not(:disabled) {
474
783
  background-color: var(--sph-accent-hover);
@@ -537,24 +846,147 @@
537
846
  }
538
847
  .sph-input[aria-invalid="true"] {
539
848
  border-color: var(--sph-danger);
849
+ animation: sph-shake calc(var(--sph-motion-normal) * 1.8) var(--sph-ease-standard);
540
850
  }
541
851
  .sph-input:disabled {
542
852
  opacity: 50%;
543
853
  cursor: not-allowed;
544
854
  }
545
- .sph-input:focus-visible {
855
+ .sph-input:focus-visible:not(:disabled) {
546
856
  outline: none;
547
- box-shadow: none;
548
- border-color: var(--sph-border-strong);
857
+ background: var(--sph-surface-elevated);
858
+ border-color: var(--sph-focus);
859
+ @supports (color: color-mix(in lab, red, red)) {
860
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
861
+ }
549
862
  }
550
- .sph-input[aria-invalid="true"]:focus-visible {
863
+ .sph-input[aria-invalid="true"]:focus-visible:not(:disabled) {
551
864
  border-color: var(--sph-danger);
865
+ @supports (color: color-mix(in lab, red, red)) {
866
+ border-color: color-mix(in srgb, var(--sph-danger) 70%, var(--sph-border));
867
+ }
552
868
  }
553
869
  @media (prefers-reduced-motion: reduce) {
554
870
  .sph-input {
555
871
  transition: none;
556
872
  }
557
873
  }
874
+ .sph-kbd {
875
+ display: inline-flex;
876
+ align-items: center;
877
+ gap: calc(var(--spacing, 0.25rem) * 0.5);
878
+ border-radius: var(--sph-radius-xs);
879
+ border-style: var(--tw-border-style);
880
+ border-width: 1px;
881
+ border-color: var(--sph-border);
882
+ background-color: var(--sph-raised);
883
+ padding-inline: calc(var(--spacing, 0.25rem) * 1.5);
884
+ color: var(--sph-text-muted);
885
+ min-width: 1.4rem;
886
+ height: 1.4rem;
887
+ box-sizing: border-box;
888
+ font: 11px / 1 var(--sph-font-sans);
889
+ }
890
+ .sph-kbd__key {
891
+ display: inline-flex;
892
+ align-items: center;
893
+ justify-content: center;
894
+ border-style: var(--tw-border-style);
895
+ border-width: 0px;
896
+ background-color: transparent;
897
+ padding: 0px;
898
+ font: inherit;
899
+ color: inherit;
900
+ }
901
+ .sph-progress {
902
+ display: block;
903
+ width: 100%;
904
+ }
905
+ .sph-progress__track {
906
+ position: relative;
907
+ display: block;
908
+ height: calc(var(--spacing, 0.25rem) * 1.5);
909
+ width: 100%;
910
+ overflow: hidden;
911
+ border-radius: calc(infinity * 1px);
912
+ background-color: var(--sph-raised);
913
+ }
914
+ .sph-progress[data-size="sm"] .sph-progress__track {
915
+ height: var(--spacing, 0.25rem);
916
+ }
917
+ .sph-progress[data-size="lg"] .sph-progress__track {
918
+ height: calc(var(--spacing, 0.25rem) * 2);
919
+ }
920
+ .sph-progress__bar {
921
+ display: block;
922
+ height: 100%;
923
+ border-radius: calc(infinity * 1px);
924
+ background-color: var(--sph-accent);
925
+ transition: width var(--sph-motion-normal) var(--sph-ease-standard);
926
+ }
927
+ .sph-progress__bar[data-indeterminate] {
928
+ width: 32%;
929
+ animation: sph-progress-sweep 1.4s var(--sph-ease-standard) infinite;
930
+ }
931
+ @keyframes sph-progress-sweep {
932
+ 0% {
933
+ transform: translateX(-110%);
934
+ }
935
+ 100% {
936
+ transform: translateX(330%);
937
+ }
938
+ }
939
+ @media (prefers-reduced-motion: reduce) {
940
+ .sph-progress__bar {
941
+ transition: none;
942
+ }
943
+ .sph-progress__bar[data-indeterminate] {
944
+ animation: none;
945
+ width: 100%;
946
+ opacity: 0.5;
947
+ }
948
+ }
949
+ .sph-scroll-area {
950
+ overflow: auto;
951
+ scrollbar-width: thin;
952
+ scrollbar-color: var(--sph-border-strong) transparent;
953
+ @supports (color: color-mix(in lab, red, red)) {
954
+ scrollbar-color: color-mix( in srgb, var(--sph-border-strong) 55%, transparent ) transparent;
955
+ }
956
+ }
957
+ .sph-scroll-area[data-orientation="vertical"] {
958
+ overflow-x: hidden;
959
+ }
960
+ .sph-scroll-area[data-orientation="horizontal"] {
961
+ overflow-y: hidden;
962
+ }
963
+ .sph-scroll-area::-webkit-scrollbar {
964
+ width: 8px;
965
+ height: 8px;
966
+ }
967
+ .sph-scroll-area::-webkit-scrollbar-track {
968
+ background: transparent;
969
+ }
970
+ .sph-scroll-area::-webkit-scrollbar-thumb {
971
+ border: 2px solid transparent;
972
+ border-radius: 999px;
973
+ background: var(--sph-border-strong);
974
+ @supports (color: color-mix(in lab, red, red)) {
975
+ background: color-mix(in srgb, var(--sph-border-strong) 45%, transparent);
976
+ }
977
+ background-clip: padding-box;
978
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard);
979
+ }
980
+ .sph-scroll-area:hover::-webkit-scrollbar-thumb, .sph-scroll-area::-webkit-scrollbar-thumb:hover {
981
+ background: var(--sph-border-strong);
982
+ @supports (color: color-mix(in lab, red, red)) {
983
+ background: color-mix(in srgb, var(--sph-border-strong) 80%, transparent);
984
+ }
985
+ background-clip: padding-box;
986
+ }
987
+ .sph-scroll-area::-webkit-scrollbar-corner {
988
+ background: transparent;
989
+ }
558
990
  .sph-skeleton {
559
991
  display: inline-block;
560
992
  min-height: calc(var(--spacing, 0.25rem) * 3);
@@ -565,7 +997,7 @@
565
997
  background-image: linear-gradient( 90deg, transparent, color-mix(in srgb, var(--sph-text) 8%, transparent), transparent );
566
998
  }
567
999
  background-size: 200% 100%;
568
- animation: sph-skeleton-shimmer 1.4s var(--sph-ease-standard) infinite;
1000
+ animation: sph-skeleton-shimmer 1.4s linear infinite;
569
1001
  }
570
1002
  @keyframes sph-skeleton-shimmer {
571
1003
  from {
@@ -663,7 +1095,10 @@
663
1095
  border-radius: 999px;
664
1096
  background: var(--sph-slider-fill, var(--sph-accent));
665
1097
  box-shadow: 0 0 0 1px var(--sph-slider-ring, var(--sph-surface)), 0 1px 2px rgb(0 0 0 / 0.28);
666
- transition: box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
1098
+ transition: box-shadow var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1099
+ }
1100
+ .sph-slider__input:active::-webkit-slider-thumb {
1101
+ transform: scale(1.18);
667
1102
  }
668
1103
  .sph-slider__input::-moz-range-thumb {
669
1104
  box-sizing: border-box;
@@ -673,6 +1108,10 @@
673
1108
  border-radius: 999px;
674
1109
  background: var(--sph-slider-fill, var(--sph-accent));
675
1110
  box-shadow: 0 0 0 1px var(--sph-slider-ring, var(--sph-surface)), 0 1px 2px rgb(0 0 0 / 0.28);
1111
+ transition: box-shadow var(--sph-motion-fast) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1112
+ }
1113
+ .sph-slider__input:active::-moz-range-thumb {
1114
+ transform: scale(1.18);
676
1115
  }
677
1116
  .sph-slider__input:hover::-webkit-slider-thumb, .sph-slider__input:active::-webkit-slider-thumb {
678
1117
  box-shadow: 0 0 0 1px var(--sph-slider-ring, var(--sph-surface)), 0 0 0 5px var(--sph-accent-soft);
@@ -713,11 +1152,15 @@
713
1152
  .sph-separator[data-orientation="horizontal"] {
714
1153
  height: 1px;
715
1154
  width: 100%;
1155
+ transform-origin: left center;
1156
+ animation: sph-draw-x var(--sph-motion-slow) var(--sph-ease-emphasis) both;
716
1157
  }
717
1158
  .sph-separator[data-orientation="vertical"] {
718
1159
  height: 100%;
719
1160
  width: 1px;
720
1161
  min-height: 18px;
1162
+ transform-origin: center top;
1163
+ animation: sph-draw-y var(--sph-motion-slow) var(--sph-ease-emphasis) both;
721
1164
  }
722
1165
  .sph-spinner {
723
1166
  box-sizing: border-box;
@@ -794,7 +1237,7 @@
794
1237
  border: 0.5px solid color-mix(in srgb, var(--sph-border) 86%, transparent);
795
1238
  }
796
1239
  font: 13px / 1.5 var(--sph-font-sans);
797
- transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
1240
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard);
798
1241
  }
799
1242
  .sph-textarea[data-size="sm"] {
800
1243
  min-height: calc(var(--spacing, 0.25rem) * 20);
@@ -810,15 +1253,25 @@
810
1253
  }
811
1254
  .sph-textarea[aria-invalid="true"] {
812
1255
  border-color: var(--sph-danger);
1256
+ animation: sph-shake calc(var(--sph-motion-normal) * 1.8) var(--sph-ease-standard);
813
1257
  }
814
1258
  .sph-textarea:disabled {
815
1259
  opacity: 50%;
816
1260
  cursor: not-allowed;
817
1261
  }
818
- .sph-textarea:focus-visible {
819
- outline: 2px solid var(--sph-focus);
820
- outline-offset: 2px;
821
- box-shadow: 0 0 0 4px var(--sph-focus-ring);
1262
+ .sph-textarea:focus-visible:not(:disabled) {
1263
+ outline: none;
1264
+ background: var(--sph-surface-elevated);
1265
+ border-color: var(--sph-focus);
1266
+ @supports (color: color-mix(in lab, red, red)) {
1267
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
1268
+ }
1269
+ }
1270
+ .sph-textarea[aria-invalid="true"]:focus-visible:not(:disabled) {
1271
+ border-color: var(--sph-danger);
1272
+ @supports (color: color-mix(in lab, red, red)) {
1273
+ border-color: color-mix(in srgb, var(--sph-danger) 70%, var(--sph-border));
1274
+ }
822
1275
  }
823
1276
  @media (prefers-reduced-motion: reduce) {
824
1277
  .sph-textarea {
@@ -859,7 +1312,10 @@
859
1312
  border-radius: calc(infinity * 1px);
860
1313
  background-color: var(--sph-border-strong);
861
1314
  padding: calc(var(--spacing, 0.25rem) * 0.5);
862
- transition: background-color var(--sph-motion-normal) var(--sph-ease-standard);
1315
+ transition: background-color var(--sph-motion-normal) var(--sph-ease-standard), transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1316
+ }
1317
+ .sph-toggle:active:not(:disabled) .sph-toggle__track {
1318
+ transform: scale(0.96);
863
1319
  }
864
1320
  .sph-toggle[data-size="sm"] .sph-toggle__track {
865
1321
  height: calc(var(--spacing, 0.25rem) * 4);
@@ -882,7 +1338,7 @@
882
1338
  @supports (color: color-mix(in lab, red, red)) {
883
1339
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--sph-text) 16%, transparent), 0 1px 3px rgb(0 0 0 / 0.3);
884
1340
  }
885
- transition: transform var(--sph-motion-normal) var(--sph-ease-emphasis);
1341
+ transition: transform var(--sph-motion-normal) var(--sph-ease-spring);
886
1342
  }
887
1343
  .sph-toggle[data-size="sm"] .sph-toggle__thumb {
888
1344
  width: calc(var(--spacing, 0.25rem) * 3);
@@ -972,6 +1428,7 @@
972
1428
  color: var(--sph-text-muted);
973
1429
  font-family: var(--sph-font-sans);
974
1430
  line-height: 1.4;
1431
+ animation: sph-rise-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
975
1432
  }
976
1433
  .sph-field-message[data-variant="error"] {
977
1434
  color: var(--sph-danger);
@@ -989,7 +1446,7 @@
989
1446
  background-color: var(--sph-surface);
990
1447
  color: var(--sph-text);
991
1448
  font-family: var(--sph-font-sans);
992
- 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);
1449
+ 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);
993
1450
  }
994
1451
  .sph-card[data-interactive="true"] {
995
1452
  cursor: pointer;
@@ -997,13 +1454,16 @@
997
1454
  .sph-card[data-interactive="true"]:hover {
998
1455
  border-color: var(--sph-border-strong);
999
1456
  background: var(--sph-surface-elevated);
1457
+ transform: translateY(-2px);
1458
+ box-shadow: 0 14px 28px -18px rgb(0 0 0 / 0.45);
1000
1459
  }
1001
1460
  .sph-card[data-interactive="true"]:active {
1002
- transform: translateY(1px);
1461
+ transform: translateY(1px) scale(0.995);
1003
1462
  }
1004
1463
  .sph-card[data-selected="true"] {
1005
1464
  border-color: var(--sph-accent);
1006
1465
  box-shadow: 0 0 0 1px var(--sph-accent-soft);
1466
+ animation: sph-glow-pulse var(--sph-motion-slow) var(--sph-ease-standard);
1007
1467
  }
1008
1468
  .sph-card:focus-within {
1009
1469
  border-color: var(--sph-focus);
@@ -1055,6 +1515,344 @@
1055
1515
  transition: none;
1056
1516
  }
1057
1517
  }
1518
+ .sph-collapsible {
1519
+ font-family: var(--sph-font-sans);
1520
+ }
1521
+ .sph-collapsible__trigger {
1522
+ display: flex;
1523
+ min-height: calc(var(--spacing, 0.25rem) * 8);
1524
+ width: 100%;
1525
+ align-items: center;
1526
+ gap: calc(var(--spacing, 0.25rem) * 1.5);
1527
+ border-style: var(--tw-border-style);
1528
+ border-width: 0px;
1529
+ background-color: transparent;
1530
+ padding: 0px;
1531
+ text-align: left;
1532
+ font-size: var(--text-xs, 0.75rem);
1533
+ line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
1534
+ --tw-font-weight: var(--font-weight-medium, 500);
1535
+ font-weight: var(--font-weight-medium, 500);
1536
+ color: var(--sph-text);
1537
+ cursor: pointer;
1538
+ transition: color var(--sph-motion-fast) var(--sph-ease-standard);
1539
+ }
1540
+ .sph-collapsible__trigger:hover:not(:disabled) {
1541
+ color: var(--sph-accent-strong);
1542
+ }
1543
+ .sph-collapsible__trigger:focus-visible {
1544
+ outline: 2px solid var(--sph-focus);
1545
+ outline-offset: 2px;
1546
+ }
1547
+ .sph-collapsible__trigger:disabled {
1548
+ opacity: 45%;
1549
+ cursor: not-allowed;
1550
+ }
1551
+ .sph-collapsible__chevron {
1552
+ display: inline-flex;
1553
+ color: var(--sph-text-muted);
1554
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1555
+ }
1556
+ .sph-collapsible[data-state="open"] .sph-collapsible__chevron {
1557
+ transform: rotate(90deg);
1558
+ }
1559
+ .sph-collapsible__body {
1560
+ display: grid;
1561
+ grid-template-rows: 0fr;
1562
+ transition: grid-template-rows var(--sph-motion-normal) var(--sph-ease-standard);
1563
+ }
1564
+ .sph-collapsible[data-state="open"] .sph-collapsible__body {
1565
+ grid-template-rows: 1fr;
1566
+ }
1567
+ .sph-collapsible__inner {
1568
+ min-inline-size: 0;
1569
+ overflow: hidden;
1570
+ visibility: hidden;
1571
+ padding-inline-start: 14px;
1572
+ transition: visibility 0s linear var(--sph-motion-normal);
1573
+ }
1574
+ .sph-collapsible[data-state="open"] .sph-collapsible__inner {
1575
+ visibility: visible;
1576
+ transition-delay: 0s;
1577
+ }
1578
+ @media (prefers-reduced-motion: reduce) {
1579
+ .sph-collapsible__body, .sph-collapsible__chevron {
1580
+ transition: none;
1581
+ }
1582
+ }
1583
+ .sph-combobox {
1584
+ position: relative;
1585
+ display: inline-flex;
1586
+ min-width: 0px;
1587
+ font-family: var(--sph-font-sans);
1588
+ }
1589
+ .sph-combobox__control {
1590
+ display: flex;
1591
+ align-items: center;
1592
+ gap: 4px;
1593
+ min-block-size: 36px;
1594
+ inline-size: 100%;
1595
+ padding: 3px 6px 3px 9px;
1596
+ border: 0.5px solid var(--sph-border);
1597
+ @supports (color: color-mix(in lab, red, red)) {
1598
+ border: 0.5px solid color-mix(in srgb, var(--sph-border) 86%, transparent);
1599
+ }
1600
+ border-radius: var(--sph-radius-sm);
1601
+ background: var(--sph-surface);
1602
+ color: var(--sph-text);
1603
+ cursor: pointer;
1604
+ font: 13px var(--sph-font-sans);
1605
+ text-align: start;
1606
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), background-color var(--sph-motion-fast) var(--sph-ease-standard);
1607
+ }
1608
+ .sph-combobox[data-size="sm"] .sph-combobox__control {
1609
+ min-block-size: 32px;
1610
+ }
1611
+ .sph-combobox[data-size="lg"] .sph-combobox__control {
1612
+ min-block-size: 40px;
1613
+ }
1614
+ .sph-combobox__control--button {
1615
+ justify-content: space-between;
1616
+ padding-inline-end: 9px;
1617
+ }
1618
+ .sph-combobox__control:hover:not([data-open]) {
1619
+ border-color: var(--sph-border-strong);
1620
+ }
1621
+ .sph-combobox[data-open] .sph-combobox__control {
1622
+ background: var(--sph-surface-elevated);
1623
+ border-color: var(--sph-focus);
1624
+ @supports (color: color-mix(in lab, red, red)) {
1625
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
1626
+ }
1627
+ }
1628
+ .sph-combobox__control:focus-within:not(:has(:disabled)) {
1629
+ border-color: var(--sph-focus);
1630
+ @supports (color: color-mix(in lab, red, red)) {
1631
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
1632
+ }
1633
+ }
1634
+ .sph-combobox__control:has(:disabled) {
1635
+ opacity: 50%;
1636
+ cursor: not-allowed;
1637
+ }
1638
+ .sph-combobox__control:focus-visible {
1639
+ outline: none;
1640
+ }
1641
+ .sph-combobox__value, .sph-combobox__placeholder {
1642
+ flex: 1 1 auto;
1643
+ min-inline-size: 0;
1644
+ overflow: hidden;
1645
+ text-overflow: ellipsis;
1646
+ white-space: nowrap;
1647
+ }
1648
+ .sph-combobox__placeholder {
1649
+ color: var(--sph-text-muted);
1650
+ }
1651
+ .sph-combobox__caret {
1652
+ flex: 0 0 auto;
1653
+ color: var(--sph-text-muted);
1654
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
1655
+ }
1656
+ .sph-combobox[data-open] .sph-combobox__caret {
1657
+ transform: rotate(180deg);
1658
+ }
1659
+ .sph-combobox__chips {
1660
+ display: flex;
1661
+ flex: 1 1 auto;
1662
+ flex-wrap: wrap;
1663
+ gap: 3px;
1664
+ align-items: center;
1665
+ min-inline-size: 0;
1666
+ }
1667
+ .sph-combobox__chip {
1668
+ display: inline-flex;
1669
+ gap: 3px;
1670
+ align-items: center;
1671
+ max-inline-size: 12rem;
1672
+ padding: 2px 3px 2px 7px;
1673
+ border-radius: var(--sph-radius-xs);
1674
+ background: var(--sph-accent);
1675
+ @supports (color: color-mix(in lab, red, red)) {
1676
+ background: color-mix(in srgb, var(--sph-accent) 16%, transparent);
1677
+ }
1678
+ color: var(--sph-text);
1679
+ font-size: 11.5px;
1680
+ line-height: 1.4;
1681
+ animation: sph-pop var(--sph-motion-fast) var(--sph-ease-spring) both;
1682
+ }
1683
+ .sph-combobox__chip[data-removing] {
1684
+ animation: sph-rise-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1685
+ }
1686
+ .sph-combobox__chip-label {
1687
+ overflow: hidden;
1688
+ text-overflow: ellipsis;
1689
+ white-space: nowrap;
1690
+ }
1691
+ .sph-combobox__chip-remove {
1692
+ display: inline-flex;
1693
+ align-items: center;
1694
+ justify-content: center;
1695
+ inline-size: 15px;
1696
+ block-size: 15px;
1697
+ border: 0;
1698
+ border-radius: 999px;
1699
+ background: transparent;
1700
+ color: var(--sph-text-muted);
1701
+ cursor: pointer;
1702
+ padding: 0;
1703
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
1704
+ }
1705
+ .sph-combobox__chip-remove:hover:not(:disabled) {
1706
+ background: var(--sph-danger);
1707
+ @supports (color: color-mix(in lab, red, red)) {
1708
+ background: color-mix(in srgb, var(--sph-danger) 22%, transparent);
1709
+ }
1710
+ color: var(--sph-text);
1711
+ }
1712
+ .sph-combobox__toggle {
1713
+ display: inline-flex;
1714
+ align-items: center;
1715
+ justify-content: center;
1716
+ flex: 0 0 auto;
1717
+ inline-size: 22px;
1718
+ block-size: 22px;
1719
+ border: 0;
1720
+ background: transparent;
1721
+ color: var(--sph-text-muted);
1722
+ cursor: pointer;
1723
+ padding: 0;
1724
+ border-radius: var(--sph-radius-xs);
1725
+ }
1726
+ .sph-combobox__toggle:hover:not(:disabled) {
1727
+ background: var(--sph-raised);
1728
+ color: var(--sph-text);
1729
+ }
1730
+ .sph-combobox__toggle:focus-visible {
1731
+ outline: 2px solid var(--sph-focus);
1732
+ outline-offset: 1px;
1733
+ }
1734
+ .sph-combobox__panel {
1735
+ z-index: 260;
1736
+ overflow: hidden;
1737
+ border-radius: var(--sph-radius-md);
1738
+ border-style: var(--tw-border-style);
1739
+ border-width: 1px;
1740
+ border-color: var(--sph-border);
1741
+ background-color: var(--sph-surface);
1742
+ --tw-shadow: var(--sph-shadow-popover);
1743
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1744
+ min-inline-size: 12rem;
1745
+ animation: sph-drop-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1746
+ }
1747
+ .sph-combobox__panel[data-state="closed"] {
1748
+ pointer-events: none;
1749
+ animation: sph-drop-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1750
+ }
1751
+ .sph-combobox__search {
1752
+ display: flex;
1753
+ gap: 7px;
1754
+ align-items: center;
1755
+ padding: 8px 10px;
1756
+ border-bottom: 1px solid var(--sph-border);
1757
+ }
1758
+ .sph-combobox__search-icon {
1759
+ flex: 0 0 auto;
1760
+ color: var(--sph-text-muted);
1761
+ }
1762
+ .sph-combobox__input {
1763
+ flex: 1 1 auto;
1764
+ min-inline-size: 0;
1765
+ border: 0;
1766
+ outline: none;
1767
+ background: transparent;
1768
+ color: var(--sph-text);
1769
+ font: 13px var(--sph-font-sans);
1770
+ }
1771
+ .sph-combobox__input::placeholder {
1772
+ color: var(--sph-text-muted);
1773
+ }
1774
+ .sph-combobox__list {
1775
+ max-block-size: 15rem;
1776
+ overflow-y: auto;
1777
+ padding: 5px;
1778
+ }
1779
+ .sph-combobox__group {
1780
+ display: grid;
1781
+ gap: 2px;
1782
+ }
1783
+ .sph-combobox__group + .sph-combobox__group {
1784
+ margin-block-start: 6px;
1785
+ }
1786
+ .sph-combobox__heading {
1787
+ padding: 4px 7px 1px;
1788
+ color: var(--sph-text-muted);
1789
+ font-size: 10.5px;
1790
+ letter-spacing: 0.04em;
1791
+ text-transform: uppercase;
1792
+ }
1793
+ .sph-combobox__option {
1794
+ display: flex;
1795
+ gap: 7px;
1796
+ align-items: center;
1797
+ min-block-size: 32px;
1798
+ padding: 5px 7px;
1799
+ border-radius: var(--sph-radius-sm);
1800
+ color: var(--sph-text-muted);
1801
+ cursor: pointer;
1802
+ font-size: 13px;
1803
+ transition: color var(--sph-motion-fast) var(--sph-ease-standard);
1804
+ animation: sph-rise-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
1805
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
1806
+ }
1807
+ .sph-combobox__option:nth-child(1) {
1808
+ --sph-motion-index: 0;
1809
+ }
1810
+ .sph-combobox__option:nth-child(2) {
1811
+ --sph-motion-index: 1;
1812
+ }
1813
+ .sph-combobox__option:nth-child(3) {
1814
+ --sph-motion-index: 2;
1815
+ }
1816
+ .sph-combobox__option:nth-child(4) {
1817
+ --sph-motion-index: 3;
1818
+ }
1819
+ .sph-combobox__option:nth-child(5) {
1820
+ --sph-motion-index: 4;
1821
+ }
1822
+ .sph-combobox__option:nth-child(6) {
1823
+ --sph-motion-index: 5;
1824
+ }
1825
+ .sph-combobox__option[data-active] {
1826
+ background: var(--sph-accent);
1827
+ @supports (color: color-mix(in lab, red, red)) {
1828
+ background: color-mix(in srgb, var(--sph-accent) 13%, transparent);
1829
+ }
1830
+ color: var(--sph-text);
1831
+ }
1832
+ .sph-combobox__option[data-disabled] {
1833
+ opacity: 40%;
1834
+ cursor: default;
1835
+ }
1836
+ .sph-combobox__check {
1837
+ display: inline-flex;
1838
+ flex: 0 0 auto;
1839
+ inline-size: 14px;
1840
+ color: var(--sph-accent-strong);
1841
+ animation: sph-pop var(--sph-motion-fast) var(--sph-ease-spring) both;
1842
+ }
1843
+ .sph-combobox__label {
1844
+ flex: 1 1 auto;
1845
+ min-inline-size: 0;
1846
+ overflow: hidden;
1847
+ text-overflow: ellipsis;
1848
+ white-space: nowrap;
1849
+ }
1850
+ .sph-combobox__empty {
1851
+ padding: 16px 8px;
1852
+ color: var(--sph-text-muted);
1853
+ text-align: center;
1854
+ font-size: 13px;
1855
+ }
1058
1856
  .sph-alert {
1059
1857
  display: flex;
1060
1858
  min-width: 0px;
@@ -1071,6 +1869,11 @@
1071
1869
  border-color: var(--sph-border);
1072
1870
  color: var(--sph-text);
1073
1871
  font-family: var(--sph-font-sans);
1872
+ animation: sph-rise-in var(--sph-motion-slow) var(--sph-ease-emphasis) both;
1873
+ }
1874
+ .sph-alert[data-state="closed"] {
1875
+ pointer-events: none;
1876
+ animation: sph-rise-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1074
1877
  }
1075
1878
  .sph-alert[data-variant="info"] {
1076
1879
  background: var(--sph-accent);
@@ -1114,6 +1917,8 @@
1114
1917
  border-radius: var(--sph-radius-md);
1115
1918
  background: var(--sph-accent-soft, var(--sph-raised));
1116
1919
  color: var(--sph-accent);
1920
+ animation: sph-pop var(--sph-motion-slow) var(--sph-ease-spring) both;
1921
+ animation-delay: var(--sph-motion-stagger);
1117
1922
  }
1118
1923
  .sph-alert__icon svg {
1119
1924
  display: block;
@@ -1164,15 +1969,35 @@
1164
1969
  padding: 0px;
1165
1970
  color: var(--sph-text-muted);
1166
1971
  cursor: pointer;
1972
+ 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);
1167
1973
  }
1168
1974
  .sph-alert__dismiss:hover {
1169
1975
  background-color: var(--sph-raised);
1170
1976
  color: var(--sph-text);
1171
1977
  }
1978
+ .sph-alert__dismiss:active {
1979
+ transform: scale(0.88);
1980
+ }
1172
1981
  .sph-alert__dismiss:focus-visible {
1173
1982
  outline: 2px solid var(--sph-focus);
1174
1983
  outline-offset: 1px;
1175
1984
  }
1985
+ .sph-avatar-group {
1986
+ display: inline-flex;
1987
+ align-items: center;
1988
+ }
1989
+ .sph-avatar-group > * + * {
1990
+ margin-inline-start: -8px;
1991
+ box-shadow: 0 0 0 2px var(--sph-surface);
1992
+ }
1993
+ .sph-avatar-group > :hover {
1994
+ z-index: 1;
1995
+ }
1996
+ .sph-avatar--overflow {
1997
+ background-color: var(--sph-raised);
1998
+ color: var(--sph-text-muted);
1999
+ letter-spacing: 0;
2000
+ }
1176
2001
  .sph-select {
1177
2002
  position: relative;
1178
2003
  box-sizing: border-box;
@@ -1224,17 +2049,17 @@
1224
2049
  opacity: 50%;
1225
2050
  cursor: not-allowed;
1226
2051
  }
1227
- .sph-select__trigger:focus-visible {
1228
- outline: 2px solid var(--sph-focus);
1229
- outline-offset: 2px;
1230
- box-shadow: 0 0 0 4px var(--sph-focus-ring);
2052
+ .sph-select__trigger:focus-visible:not(:disabled) {
2053
+ outline: none;
2054
+ background: var(--sph-surface-elevated);
2055
+ border-color: var(--sph-focus);
2056
+ @supports (color: color-mix(in lab, red, red)) {
2057
+ border-color: color-mix(in srgb, var(--sph-focus) 60%, var(--sph-border));
2058
+ }
1231
2059
  }
1232
2060
  .sph-select__listbox {
1233
- position: absolute;
1234
- left: 0px;
1235
- z-index: 100;
2061
+ z-index: 260;
1236
2062
  max-height: calc(var(--spacing, 0.25rem) * 60);
1237
- width: 100%;
1238
2063
  overflow: auto;
1239
2064
  border-radius: var(--sph-radius-md);
1240
2065
  border-style: var(--tw-border-style);
@@ -1244,7 +2069,37 @@
1244
2069
  padding: var(--spacing, 0.25rem);
1245
2070
  --tw-shadow: var(--sph-shadow-popover);
1246
2071
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1247
- top: calc(100% + 4px);
2072
+ transform-origin: top center;
2073
+ animation: sph-drop-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2074
+ }
2075
+ .sph-select__listbox[data-state="closed"] {
2076
+ pointer-events: none;
2077
+ animation: sph-drop-out var(--sph-motion-fast) var(--sph-ease-exit) both;
2078
+ }
2079
+ .sph-select__listbox > * {
2080
+ animation: sph-rise-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
2081
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
2082
+ }
2083
+ .sph-select__listbox > :nth-child(2) {
2084
+ --sph-motion-index: 1;
2085
+ }
2086
+ .sph-select__listbox > :nth-child(3) {
2087
+ --sph-motion-index: 2;
2088
+ }
2089
+ .sph-select__listbox > :nth-child(4) {
2090
+ --sph-motion-index: 3;
2091
+ }
2092
+ .sph-select__listbox > :nth-child(5) {
2093
+ --sph-motion-index: 4;
2094
+ }
2095
+ .sph-select__listbox > :nth-child(6) {
2096
+ --sph-motion-index: 5;
2097
+ }
2098
+ .sph-select__listbox > :nth-child(7) {
2099
+ --sph-motion-index: 6;
2100
+ }
2101
+ .sph-select__listbox > :nth-child(8) {
2102
+ --sph-motion-index: 7;
1248
2103
  }
1249
2104
  .sph-select__option {
1250
2105
  display: flex;
@@ -1252,7 +2107,7 @@
1252
2107
  align-items: center;
1253
2108
  justify-content: space-between;
1254
2109
  gap: calc(var(--spacing, 0.25rem) * 3);
1255
- border-radius: var(--sph-radius-xs);
2110
+ border-radius: var(--sph-radius-sm);
1256
2111
  border-style: var(--tw-border-style);
1257
2112
  border-width: 0px;
1258
2113
  background-color: transparent;
@@ -1262,6 +2117,7 @@
1262
2117
  cursor: pointer;
1263
2118
  font: 13px var(--sph-font-sans);
1264
2119
  text-align: left;
2120
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
1265
2121
  }
1266
2122
  .sph-select__option[data-active="true"] {
1267
2123
  background-color: var(--sph-raised);
@@ -1278,6 +2134,7 @@
1278
2134
  flex: 0 0 auto;
1279
2135
  color: var(--sph-accent);
1280
2136
  font-size: 14px;
2137
+ animation: sph-pop var(--sph-motion-normal) var(--sph-ease-spring) both;
1281
2138
  }
1282
2139
  @media (prefers-reduced-motion: reduce) {
1283
2140
  .sph-select__trigger, .sph-select__caret {
@@ -1356,7 +2213,7 @@
1356
2213
  border-width: 1px;
1357
2214
  border-color: var(--sph-border);
1358
2215
  background-color: var(--sph-surface);
1359
- 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);
2216
+ 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);
1360
2217
  }
1361
2218
  .sph-radio-group[data-size="sm"] .sph-radio-group__control {
1362
2219
  width: calc(var(--spacing, 0.25rem) * 3.5);
@@ -1434,8 +2291,6 @@
1434
2291
  min-height: calc(var(--spacing, 0.25rem) * 9);
1435
2292
  flex-shrink: 0;
1436
2293
  border-radius: var(--sph-radius-sm);
1437
- border-style: var(--tw-border-style);
1438
- border-width: 0px;
1439
2294
  background-color: transparent;
1440
2295
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
1441
2296
  font-size: var(--text-xs, 0.75rem);
@@ -1443,14 +2298,18 @@
1443
2298
  --tw-font-weight: var(--font-weight-medium, 500);
1444
2299
  font-weight: var(--font-weight-medium, 500);
1445
2300
  color: var(--sph-text-muted);
2301
+ border: 1px solid transparent;
1446
2302
  cursor: pointer;
1447
2303
  font-family: var(--sph-font-sans);
1448
- transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
2304
+ 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);
1449
2305
  }
1450
2306
  .sph-tabs__tab:hover:not(:disabled) {
1451
2307
  background-color: var(--sph-raised);
1452
2308
  color: var(--sph-text);
1453
2309
  }
2310
+ .sph-tabs__tab:active:not(:disabled) {
2311
+ transform: scale(0.97);
2312
+ }
1454
2313
  .sph-tabs__tab[data-selected="true"] {
1455
2314
  color: var(--sph-text);
1456
2315
  }
@@ -1458,18 +2317,23 @@
1458
2317
  content: "";
1459
2318
  position: absolute;
1460
2319
  bottom: -1px;
1461
- left: 5px;
1462
- right: 5px;
2320
+ left: var(--sph-radius-sm);
2321
+ right: var(--sph-radius-sm);
1463
2322
  height: 2px;
1464
2323
  border-radius: 2px;
1465
2324
  background: var(--sph-accent);
1466
- transition-property: all;
1467
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
1468
- transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
1469
- --tw-duration: 200ms;
1470
- transition-duration: 200ms;
1471
- --tw-ease: var(--ease-in-out, cubic-bezier(0.4, 0, 0.2, 1));
1472
- transition-timing-function: var(--ease-in-out, cubic-bezier(0.4, 0, 0.2, 1));
2325
+ transform-origin: left center;
2326
+ animation: sph-tab-draw var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2327
+ }
2328
+ @keyframes sph-tab-draw {
2329
+ from {
2330
+ transform: scaleX(0);
2331
+ opacity: 0.4;
2332
+ }
2333
+ to {
2334
+ transform: scaleX(1);
2335
+ opacity: 1;
2336
+ }
1473
2337
  }
1474
2338
  .sph-tabs[data-orientation="vertical"] .sph-tabs__tab {
1475
2339
  text-align: left;
@@ -1495,11 +2359,15 @@
1495
2359
  min-width: 0px;
1496
2360
  padding-top: calc(var(--spacing, 0.25rem) * 4);
1497
2361
  color: var(--sph-text);
2362
+ animation: sph-rise-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1498
2363
  }
1499
2364
  @media (prefers-reduced-motion: reduce) {
1500
2365
  .sph-tabs__tab {
1501
2366
  transition: none;
1502
2367
  }
2368
+ .sph-tabs__tab[data-selected="true"]::after {
2369
+ animation: none;
2370
+ }
1503
2371
  }
1504
2372
  .sph-menu {
1505
2373
  position: relative;
@@ -1518,6 +2386,10 @@
1518
2386
  color: var(--sph-text);
1519
2387
  cursor: pointer;
1520
2388
  font: inherit;
2389
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
2390
+ }
2391
+ .sph-menu__trigger:active:not(:disabled) {
2392
+ transform: scale(0.97);
1521
2393
  }
1522
2394
  .sph-menu__trigger:focus-visible {
1523
2395
  outline: 2px solid var(--sph-focus);
@@ -1528,9 +2400,7 @@
1528
2400
  cursor: not-allowed;
1529
2401
  }
1530
2402
  .sph-menu__content {
1531
- position: absolute;
1532
- top: calc(100% + 4px);
1533
- z-index: 110;
2403
+ z-index: 260;
1534
2404
  display: grid;
1535
2405
  min-width: calc(var(--spacing, 0.25rem) * 44);
1536
2406
  gap: calc(var(--spacing, 0.25rem) * 0.5);
@@ -1542,19 +2412,50 @@
1542
2412
  padding: var(--spacing, 0.25rem);
1543
2413
  --tw-shadow: var(--sph-shadow-popover);
1544
2414
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2415
+ transform-origin: top left;
2416
+ animation: sph-drop-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1545
2417
  }
1546
2418
  .sph-menu__content[data-align="end"] {
1547
- right: 0px;
2419
+ transform-origin: top right;
1548
2420
  }
1549
- .sph-menu__item {
1550
- display: flex;
1551
- min-height: calc(var(--spacing, 0.25rem) * 8);
1552
- width: 100%;
1553
- align-items: center;
1554
- justify-content: space-between;
1555
- gap: calc(var(--spacing, 0.25rem) * 4);
1556
- border-radius: var(--sph-radius-sm);
1557
- border-style: var(--tw-border-style);
2421
+ .sph-menu__content[data-state="closed"] {
2422
+ pointer-events: none;
2423
+ animation: sph-drop-out var(--sph-motion-fast) var(--sph-ease-exit) both;
2424
+ }
2425
+ .sph-menu__content > * {
2426
+ animation: sph-rise-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
2427
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
2428
+ }
2429
+ .sph-menu__content > :nth-child(2) {
2430
+ --sph-motion-index: 1;
2431
+ }
2432
+ .sph-menu__content > :nth-child(3) {
2433
+ --sph-motion-index: 2;
2434
+ }
2435
+ .sph-menu__content > :nth-child(4) {
2436
+ --sph-motion-index: 3;
2437
+ }
2438
+ .sph-menu__content > :nth-child(5) {
2439
+ --sph-motion-index: 4;
2440
+ }
2441
+ .sph-menu__content > :nth-child(6) {
2442
+ --sph-motion-index: 5;
2443
+ }
2444
+ .sph-menu__content > :nth-child(7) {
2445
+ --sph-motion-index: 6;
2446
+ }
2447
+ .sph-menu__content > :nth-child(8) {
2448
+ --sph-motion-index: 7;
2449
+ }
2450
+ .sph-menu__item {
2451
+ display: flex;
2452
+ min-height: calc(var(--spacing, 0.25rem) * 8);
2453
+ width: 100%;
2454
+ align-items: center;
2455
+ justify-content: space-between;
2456
+ gap: calc(var(--spacing, 0.25rem) * 4);
2457
+ border-radius: var(--sph-radius-sm);
2458
+ border-style: var(--tw-border-style);
1558
2459
  border-width: 0px;
1559
2460
  background-color: transparent;
1560
2461
  padding-inline: calc(var(--spacing, 0.25rem) * 2.5);
@@ -1564,13 +2465,22 @@
1564
2465
  color: var(--sph-text-muted);
1565
2466
  cursor: pointer;
1566
2467
  font-family: var(--sph-font-sans);
2468
+ 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);
1567
2469
  }
1568
2470
  .sph-menu__item:hover:not(:disabled) {
1569
2471
  background-color: var(--sph-raised);
1570
2472
  color: var(--sph-text);
2473
+ transform: translateX(2px);
2474
+ }
2475
+ .sph-menu__content[data-align="end"] .sph-menu__item:hover:not(:disabled) {
2476
+ transform: translateX(-2px);
1571
2477
  }
1572
2478
  .sph-menu__item:active:not(:disabled) {
1573
2479
  background-color: var(--sph-accent-soft);
2480
+ transform: translateX(2px) scale(0.98);
2481
+ }
2482
+ .sph-menu__content[data-align="end"] .sph-menu__item:active:not(:disabled) {
2483
+ transform: translateX(-2px) scale(0.98);
1574
2484
  }
1575
2485
  .sph-menu__item:focus-visible {
1576
2486
  outline: 2px solid var(--sph-focus);
@@ -1616,6 +2526,10 @@
1616
2526
  color: var(--sph-text);
1617
2527
  cursor: pointer;
1618
2528
  font: inherit;
2529
+ transition: transform var(--sph-motion-fast) var(--sph-ease-emphasis);
2530
+ }
2531
+ .sph-popover__trigger:active:not(:disabled) {
2532
+ transform: scale(0.97);
1619
2533
  }
1620
2534
  .sph-popover__trigger:focus-visible {
1621
2535
  outline: 2px solid var(--sph-focus);
@@ -1626,9 +2540,7 @@
1626
2540
  cursor: not-allowed;
1627
2541
  }
1628
2542
  .sph-popover__content {
1629
- position: absolute;
1630
- top: calc(100% + 6px);
1631
- z-index: 105;
2543
+ z-index: 260;
1632
2544
  max-width: min(26rem, calc(100vw - 2rem));
1633
2545
  min-width: calc(var(--spacing, 0.25rem) * 48);
1634
2546
  border-radius: var(--sph-radius-md);
@@ -1642,26 +2554,100 @@
1642
2554
  color: var(--sph-text);
1643
2555
  --tw-shadow: var(--sph-shadow-popover);
1644
2556
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1645
- animation: sph-popover-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
2557
+ transform-origin: top left;
2558
+ --sph-tilt: 0deg;
2559
+ animation: sph-popover-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2560
+ }
2561
+ .sph-popover__content[data-side="bottom"] {
2562
+ --sph-tilt: 7deg;
2563
+ }
2564
+ .sph-popover__content[data-side="top"] {
2565
+ --sph-tilt: -7deg;
1646
2566
  }
1647
2567
  .sph-popover__content[data-placement="end"] {
1648
- right: 0px;
2568
+ transform-origin: top right;
2569
+ }
2570
+ .sph-popover__content[data-state="closed"] {
2571
+ pointer-events: none;
2572
+ animation: sph-popover-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1649
2573
  }
1650
2574
  @keyframes sph-popover-in {
1651
2575
  from {
1652
2576
  opacity: 0;
1653
- transform: translateY(-3px) scale(0.98);
2577
+ transform: perspective(600px) rotateX(var(--sph-tilt)) translateY(-4px) scale(0.975);
1654
2578
  }
1655
2579
  to {
2580
+ opacity: 1;
2581
+ transform: perspective(600px) rotateX(0deg) translateY(0) scale(1);
2582
+ }
2583
+ }
2584
+ @keyframes sph-popover-out {
2585
+ from {
1656
2586
  opacity: 1;
1657
2587
  transform: translateY(0) scale(1);
1658
2588
  }
2589
+ to {
2590
+ opacity: 0;
2591
+ transform: translateY(-3px) scale(0.98);
2592
+ }
1659
2593
  }
1660
2594
  @media (prefers-reduced-motion: reduce) {
1661
2595
  .sph-popover__content {
1662
2596
  animation: none;
1663
2597
  }
1664
2598
  }
2599
+ .sph-hover-card {
2600
+ position: relative;
2601
+ display: inline-flex;
2602
+ min-width: 0px;
2603
+ font-family: var(--sph-font-sans);
2604
+ }
2605
+ .sph-hover-card__trigger {
2606
+ display: inline-flex;
2607
+ min-width: 0px;
2608
+ align-items: center;
2609
+ justify-content: center;
2610
+ border-style: var(--tw-border-style);
2611
+ border-width: 0px;
2612
+ background-color: transparent;
2613
+ padding: 0px;
2614
+ color: var(--sph-text);
2615
+ cursor: pointer;
2616
+ font: inherit;
2617
+ }
2618
+ .sph-hover-card__trigger:focus-visible {
2619
+ outline: 2px solid var(--sph-focus);
2620
+ outline-offset: 2px;
2621
+ }
2622
+ .sph-hover-card__content {
2623
+ z-index: 260;
2624
+ max-width: min(22rem, calc(100vw - 2rem));
2625
+ min-width: calc(var(--spacing, 0.25rem) * 52);
2626
+ border-radius: var(--sph-radius-md);
2627
+ border-style: var(--tw-border-style);
2628
+ border-width: 1px;
2629
+ border-color: var(--sph-border);
2630
+ background-color: var(--sph-surface);
2631
+ padding: calc(var(--spacing, 0.25rem) * 4);
2632
+ font-size: var(--text-sm, 0.875rem);
2633
+ line-height: var(--tw-leading, var(--text-sm--line-height, calc(1.25 / 0.875)));
2634
+ color: var(--sph-text);
2635
+ --tw-shadow: var(--sph-shadow-popover);
2636
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2637
+ transform-origin: top left;
2638
+ --sph-tilt: 0deg;
2639
+ animation: sph-popover-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2640
+ }
2641
+ .sph-hover-card__content[data-state="closed"] {
2642
+ pointer-events: none;
2643
+ animation: sph-popover-out var(--sph-motion-fast) var(--sph-ease-exit) both;
2644
+ }
2645
+ .sph-hover-card__content[data-side="bottom"] {
2646
+ --sph-tilt: 7deg;
2647
+ }
2648
+ .sph-hover-card__content[data-side="top"] {
2649
+ --sph-tilt: -7deg;
2650
+ }
1665
2651
  .sph-tooltip {
1666
2652
  position: relative;
1667
2653
  display: inline-flex;
@@ -1673,8 +2659,7 @@
1673
2659
  }
1674
2660
  .sph-tooltip__content {
1675
2661
  pointer-events: none;
1676
- position: absolute;
1677
- z-index: 140;
2662
+ z-index: 270;
1678
2663
  border-radius: var(--sph-radius-sm);
1679
2664
  border-style: var(--tw-border-style);
1680
2665
  border-width: 1px;
@@ -1692,35 +2677,47 @@
1692
2677
  white-space: normal;
1693
2678
  animation: sph-tooltip-in var(--sph-motion-fast) var(--sph-ease-emphasis) both;
1694
2679
  }
1695
- .sph-tooltip__content[hidden] {
1696
- display: none;
2680
+ .sph-tooltip__content[data-state="closed"] {
2681
+ animation: sph-tooltip-out var(--sph-motion-fast) var(--sph-ease-exit) both;
1697
2682
  }
1698
2683
  .sph-tooltip__content[data-side="top"] {
1699
- bottom: calc(100% + 6px);
1700
- left: 50%;
1701
- transform: translateX(-50%);
2684
+ --sph-tip-x: 0px;
2685
+ --sph-tip-y: 4px;
2686
+ transform-origin: bottom center;
1702
2687
  }
1703
2688
  .sph-tooltip__content[data-side="bottom"] {
1704
- left: 50%;
1705
- top: calc(100% + 6px);
1706
- transform: translateX(-50%);
2689
+ --sph-tip-x: 0px;
2690
+ --sph-tip-y: -4px;
2691
+ transform-origin: top center;
1707
2692
  }
1708
2693
  .sph-tooltip__content[data-side="left"] {
1709
- right: calc(100% + 6px);
1710
- top: 50%;
1711
- transform: translateY(-50%);
2694
+ --sph-tip-x: 4px;
2695
+ --sph-tip-y: 0px;
2696
+ transform-origin: right center;
1712
2697
  }
1713
2698
  .sph-tooltip__content[data-side="right"] {
1714
- left: calc(100% + 6px);
1715
- top: 50%;
1716
- transform: translateY(-50%);
2699
+ --sph-tip-x: -4px;
2700
+ --sph-tip-y: 0px;
2701
+ transform-origin: left center;
1717
2702
  }
1718
2703
  @keyframes sph-tooltip-in {
1719
2704
  from {
1720
2705
  opacity: 0;
2706
+ transform: translate(var(--sph-tip-x, 0px), var(--sph-tip-y, 4px)) scale(0.94);
1721
2707
  }
1722
2708
  to {
1723
2709
  opacity: 1;
2710
+ transform: none;
2711
+ }
2712
+ }
2713
+ @keyframes sph-tooltip-out {
2714
+ from {
2715
+ opacity: 1;
2716
+ transform: none;
2717
+ }
2718
+ to {
2719
+ opacity: 0;
2720
+ transform: translate(var(--sph-tip-x, 0px), var(--sph-tip-y, 4px)) scale(0.96);
1724
2721
  }
1725
2722
  }
1726
2723
  @media (prefers-reduced-motion: reduce) {
@@ -1740,8 +2737,13 @@
1740
2737
  background-color: color-mix(in oklab, var(--color-black, #000) 55%, transparent);
1741
2738
  }
1742
2739
  padding: calc(var(--spacing, 0.25rem) * 4);
2740
+ backdrop-filter: blur(6px);
2741
+ -webkit-backdrop-filter: blur(6px);
1743
2742
  animation: sph-dialog-fade var(--sph-motion-normal) var(--sph-ease-standard) both;
1744
2743
  }
2744
+ .sph-dialog__backdrop[data-state="closed"] {
2745
+ animation: sph-dialog-fade-out var(--sph-motion-normal) var(--sph-ease-exit) both;
2746
+ }
1745
2747
  .sph-dialog {
1746
2748
  display: grid;
1747
2749
  max-height: min(42rem, calc(100vh - 2rem));
@@ -1759,6 +2761,9 @@
1759
2761
  animation: sph-dialog-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
1760
2762
  font-family: var(--sph-font-sans);
1761
2763
  }
2764
+ .sph-dialog__backdrop[data-state="closed"] .sph-dialog {
2765
+ animation: sph-dialog-out var(--sph-motion-normal) var(--sph-ease-exit) both;
2766
+ }
1762
2767
  .sph-dialog__header {
1763
2768
  display: flex;
1764
2769
  align-items: flex-start;
@@ -1804,6 +2809,10 @@
1804
2809
  padding: 0px;
1805
2810
  color: var(--sph-text-muted);
1806
2811
  cursor: pointer;
2812
+ 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);
2813
+ }
2814
+ .sph-dialog__close:active {
2815
+ transform: scale(0.9);
1807
2816
  }
1808
2817
  .sph-dialog__close:hover {
1809
2818
  background-color: var(--sph-raised);
@@ -1848,11 +2857,224 @@
1848
2857
  transform: translateY(0) scale(1);
1849
2858
  }
1850
2859
  }
2860
+ @keyframes sph-dialog-fade-out {
2861
+ from {
2862
+ opacity: 1;
2863
+ }
2864
+ to {
2865
+ opacity: 0;
2866
+ }
2867
+ }
2868
+ @keyframes sph-dialog-out {
2869
+ from {
2870
+ opacity: 1;
2871
+ transform: translateY(0) scale(1);
2872
+ }
2873
+ to {
2874
+ opacity: 0;
2875
+ transform: translateY(8px) scale(0.975);
2876
+ }
2877
+ }
1851
2878
  @media (prefers-reduced-motion: reduce) {
1852
2879
  .sph-dialog__backdrop, .sph-dialog {
1853
2880
  animation: none;
1854
2881
  }
1855
2882
  }
2883
+ .sph-drawer__backdrop {
2884
+ position: fixed;
2885
+ inset: 0px;
2886
+ z-index: 200;
2887
+ display: flex;
2888
+ background: rgb(0 0 0 / 0.5);
2889
+ backdrop-filter: blur(4px);
2890
+ -webkit-backdrop-filter: blur(4px);
2891
+ animation: sph-drawer-fade var(--sph-motion-normal) var(--sph-ease-standard) both;
2892
+ }
2893
+ .sph-drawer__backdrop[data-side="right"] {
2894
+ justify-content: flex-end;
2895
+ }
2896
+ .sph-drawer__backdrop[data-side="left"] {
2897
+ justify-content: flex-start;
2898
+ }
2899
+ .sph-drawer__backdrop[data-side="bottom"] {
2900
+ align-items: flex-end;
2901
+ }
2902
+ .sph-drawer__backdrop[data-state="closed"] {
2903
+ pointer-events: none;
2904
+ animation: sph-drawer-fade-out var(--sph-motion-normal) var(--sph-ease-exit) both;
2905
+ }
2906
+ .sph-drawer {
2907
+ --sph-slide-x: 0%;
2908
+ --sph-slide-y: 0%;
2909
+ position: relative;
2910
+ display: flex;
2911
+ flex-direction: column;
2912
+ min-inline-size: 0;
2913
+ min-block-size: 0;
2914
+ background: var(--sph-surface);
2915
+ border: 1px solid var(--sph-border);
2916
+ box-shadow: var(--sph-shadow-popover);
2917
+ font-family: var(--sph-font-sans);
2918
+ color: var(--sph-text);
2919
+ animation: sph-drawer-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2920
+ }
2921
+ .sph-drawer[data-side="right"] {
2922
+ --sph-slide-x: 100%;
2923
+ block-size: 100%;
2924
+ border-block-start-width: 0;
2925
+ border-block-end-width: 0;
2926
+ border-inline-end-width: 0;
2927
+ border-start-start-radius: var(--sph-radius-md);
2928
+ border-end-start-radius: var(--sph-radius-md);
2929
+ }
2930
+ .sph-drawer[data-side="left"] {
2931
+ --sph-slide-x: -100%;
2932
+ block-size: 100%;
2933
+ border-block-start-width: 0;
2934
+ border-block-end-width: 0;
2935
+ border-inline-start-width: 0;
2936
+ border-start-end-radius: var(--sph-radius-md);
2937
+ border-end-end-radius: var(--sph-radius-md);
2938
+ }
2939
+ .sph-drawer[data-side="bottom"] {
2940
+ --sph-slide-y: 100%;
2941
+ inline-size: 100%;
2942
+ border-inline-width: 0;
2943
+ border-block-end-width: 0;
2944
+ border-start-start-radius: var(--sph-radius-md);
2945
+ border-start-end-radius: var(--sph-radius-md);
2946
+ max-block-size: 85vh;
2947
+ }
2948
+ .sph-drawer__backdrop[data-state="closed"] .sph-drawer {
2949
+ animation: sph-drawer-out var(--sph-motion-fast) var(--sph-ease-exit) both;
2950
+ }
2951
+ .sph-drawer[data-size="sm"][data-side="right"], .sph-drawer[data-size="sm"][data-side="left"] {
2952
+ inline-size: min(300px, 100vw);
2953
+ }
2954
+ .sph-drawer[data-size="md"][data-side="right"], .sph-drawer[data-size="md"][data-side="left"] {
2955
+ inline-size: min(400px, 100vw);
2956
+ }
2957
+ .sph-drawer[data-size="lg"][data-side="right"], .sph-drawer[data-size="lg"][data-side="left"] {
2958
+ inline-size: min(560px, 100vw);
2959
+ }
2960
+ .sph-drawer[data-size="sm"][data-side="bottom"] {
2961
+ block-size: 32vh;
2962
+ }
2963
+ .sph-drawer[data-size="md"][data-side="bottom"] {
2964
+ block-size: 50vh;
2965
+ }
2966
+ .sph-drawer[data-size="lg"][data-side="bottom"] {
2967
+ block-size: 72vh;
2968
+ }
2969
+ .sph-drawer__header {
2970
+ display: flex;
2971
+ align-items: flex-start;
2972
+ justify-content: space-between;
2973
+ gap: calc(var(--spacing, 0.25rem) * 4);
2974
+ border-bottom-style: var(--tw-border-style);
2975
+ border-bottom-width: 1px;
2976
+ border-color: var(--sph-border);
2977
+ padding-inline: calc(var(--spacing, 0.25rem) * 5);
2978
+ padding-block: calc(var(--spacing, 0.25rem) * 4);
2979
+ }
2980
+ .sph-drawer__heading {
2981
+ display: grid;
2982
+ min-width: 0px;
2983
+ gap: var(--spacing, 0.25rem);
2984
+ }
2985
+ .sph-drawer__title {
2986
+ margin: 0px;
2987
+ font-size: var(--text-base, 1rem);
2988
+ line-height: var(--tw-leading, var(--text-base--line-height, calc(1.5 / 1)));
2989
+ --tw-font-weight: var(--font-weight-semibold, 600);
2990
+ font-weight: var(--font-weight-semibold, 600);
2991
+ line-height: 1.3;
2992
+ }
2993
+ .sph-drawer__description {
2994
+ margin: 0px;
2995
+ font-size: var(--text-xs, 0.75rem);
2996
+ line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
2997
+ color: var(--sph-text-muted);
2998
+ line-height: 1.45;
2999
+ }
3000
+ .sph-drawer__close {
3001
+ display: inline-flex;
3002
+ width: calc(var(--spacing, 0.25rem) * 7);
3003
+ height: calc(var(--spacing, 0.25rem) * 7);
3004
+ flex-shrink: 0;
3005
+ align-items: center;
3006
+ justify-content: center;
3007
+ border-radius: var(--sph-radius-sm);
3008
+ border-style: var(--tw-border-style);
3009
+ border-width: 0px;
3010
+ background-color: transparent;
3011
+ padding: 0px;
3012
+ color: var(--sph-text-muted);
3013
+ cursor: pointer;
3014
+ 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);
3015
+ }
3016
+ .sph-drawer__close:hover {
3017
+ background-color: var(--sph-raised);
3018
+ color: var(--sph-text);
3019
+ }
3020
+ .sph-drawer__close:active {
3021
+ transform: scale(0.9);
3022
+ }
3023
+ .sph-drawer__close:focus-visible {
3024
+ outline: 2px solid var(--sph-focus);
3025
+ outline-offset: 1px;
3026
+ }
3027
+ .sph-drawer__content {
3028
+ min-width: 0px;
3029
+ flex: 1;
3030
+ overflow: auto;
3031
+ padding-inline: calc(var(--spacing, 0.25rem) * 5);
3032
+ padding-block: calc(var(--spacing, 0.25rem) * 5);
3033
+ }
3034
+ .sph-drawer__footer {
3035
+ display: flex;
3036
+ flex-wrap: wrap;
3037
+ align-items: center;
3038
+ justify-content: flex-end;
3039
+ gap: calc(var(--spacing, 0.25rem) * 2);
3040
+ border-top-style: var(--tw-border-style);
3041
+ border-top-width: 1px;
3042
+ border-color: var(--sph-border);
3043
+ padding-inline: calc(var(--spacing, 0.25rem) * 5);
3044
+ padding-block: calc(var(--spacing, 0.25rem) * 3.5);
3045
+ }
3046
+ @keyframes sph-drawer-fade {
3047
+ from {
3048
+ opacity: 0;
3049
+ }
3050
+ to {
3051
+ opacity: 1;
3052
+ }
3053
+ }
3054
+ @keyframes sph-drawer-fade-out {
3055
+ from {
3056
+ opacity: 1;
3057
+ }
3058
+ to {
3059
+ opacity: 0;
3060
+ }
3061
+ }
3062
+ @keyframes sph-drawer-in {
3063
+ from {
3064
+ transform: translate(var(--sph-slide-x), var(--sph-slide-y));
3065
+ }
3066
+ to {
3067
+ transform: translate(0, 0);
3068
+ }
3069
+ }
3070
+ @keyframes sph-drawer-out {
3071
+ from {
3072
+ transform: translate(0, 0);
3073
+ }
3074
+ to {
3075
+ transform: translate(var(--sph-slide-x), var(--sph-slide-y));
3076
+ }
3077
+ }
1856
3078
  [data-sonner-toaster].sph-toast-viewport {
1857
3079
  --width: min(380px, calc(100vw - 32px));
1858
3080
  --offset-right: 16px;
@@ -1912,6 +3134,23 @@
1912
3134
  height: calc(var(--spacing, 0.25rem) * 5);
1913
3135
  align-items: center;
1914
3136
  justify-content: center;
3137
+ animation: sph-toast-status-in var(--sph-motion-slow) var(--sph-ease-spring) both;
3138
+ }
3139
+ @keyframes sph-toast-status-in {
3140
+ 0% {
3141
+ opacity: 0;
3142
+ transform: translateY(6px) scale(0.6);
3143
+ filter: blur(4px);
3144
+ }
3145
+ 55% {
3146
+ opacity: 1;
3147
+ transform: translateY(-1px) scale(1.08);
3148
+ filter: blur(0);
3149
+ }
3150
+ 100% {
3151
+ opacity: 1;
3152
+ transform: translateY(0) scale(1);
3153
+ }
1915
3154
  }
1916
3155
  .sph-toast__status-icon svg {
1917
3156
  display: block;
@@ -2022,6 +3261,22 @@
2022
3261
  text-align: center;
2023
3262
  font-family: var(--sph-font-sans);
2024
3263
  }
3264
+ .sph-empty-state > * {
3265
+ animation: sph-rise-in var(--sph-motion-slow) var(--sph-ease-emphasis) both;
3266
+ animation-delay: calc( var(--sph-motion-index, 0) * var(--sph-motion-stagger) );
3267
+ }
3268
+ .sph-empty-state > :nth-child(2) {
3269
+ --sph-motion-index: 1;
3270
+ }
3271
+ .sph-empty-state > :nth-child(3) {
3272
+ --sph-motion-index: 2;
3273
+ }
3274
+ .sph-empty-state > :nth-child(4) {
3275
+ --sph-motion-index: 3;
3276
+ }
3277
+ .sph-empty-state > :nth-child(5) {
3278
+ --sph-motion-index: 4;
3279
+ }
2025
3280
  .sph-empty-state[data-compact="true"] {
2026
3281
  padding-block: calc(var(--spacing, 0.25rem) * 8);
2027
3282
  }
@@ -2061,29 +3316,794 @@
2061
3316
  .sph-empty-state__action {
2062
3317
  margin-top: calc(var(--spacing, 0.25rem) * 2);
2063
3318
  }
2064
- .sph-table-wrap {
2065
- max-width: 100%;
2066
- min-width: 0px;
2067
- overflow-x: auto;
2068
- border-radius: var(--sph-radius-md);
2069
- border-style: var(--tw-border-style);
2070
- border-width: 1px;
2071
- border-color: var(--sph-border);
2072
- background-color: var(--sph-surface);
2073
- font-family: var(--sph-font-sans);
3319
+ .sph-palette__backdrop {
3320
+ position: fixed;
3321
+ inset: 0;
3322
+ z-index: 200;
3323
+ display: flex;
3324
+ justify-content: center;
3325
+ align-items: flex-start;
3326
+ padding-top: max(18vh, 3.5rem);
3327
+ background: rgb(0 0 0 / 0.55);
3328
+ backdrop-filter: blur(6px);
3329
+ -webkit-backdrop-filter: blur(6px);
3330
+ animation: sph-palette-fade-in var(--sph-motion-normal) var(--sph-ease-standard) both;
2074
3331
  }
2075
- .sph-table {
2076
- width: 100%;
2077
- border-collapse: collapse;
2078
- text-align: left;
2079
- font-size: var(--text-xs, 0.75rem);
2080
- line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
3332
+ .sph-palette__backdrop[data-state="closed"] {
3333
+ pointer-events: none;
3334
+ animation: sph-palette-fade-out var(--sph-motion-normal) var(--sph-ease-exit) both;
3335
+ }
3336
+ .sph-palette {
3337
+ width: min(92vw, 37.5rem);
3338
+ font-family: var(--sph-font-sans);
2081
3339
  color: var(--sph-text);
2082
- min-width: 480px;
3340
+ animation: sph-palette-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
2083
3341
  }
2084
- .sph-table caption {
2085
- border-bottom-style: var(--tw-border-style);
2086
- border-bottom-width: 1px;
3342
+ .sph-palette__backdrop[data-state="closed"] .sph-palette {
3343
+ animation: sph-palette-out var(--sph-motion-normal) var(--sph-ease-exit) both;
3344
+ }
3345
+ .sph-palette__panel {
3346
+ position: relative;
3347
+ display: grid;
3348
+ overflow: hidden;
3349
+ background: var(--sph-surface);
3350
+ border: 1px solid var(--sph-border);
3351
+ border-radius: var(--sph-radius-md);
3352
+ box-shadow: var(--sph-shadow-popover);
3353
+ }
3354
+ .sph-level-pulse {
3355
+ animation: sph-level-pulse var(--sph-motion-normal) var(--sph-ease-standard);
3356
+ }
3357
+ .sph-palette__crumbs {
3358
+ display: flex;
3359
+ flex-wrap: wrap;
3360
+ gap: 4px;
3361
+ align-items: center;
3362
+ padding: 10px 12px 0;
3363
+ }
3364
+ .sph-palette__crumb {
3365
+ display: inline-flex;
3366
+ align-items: center;
3367
+ height: 24px;
3368
+ padding: 0 9px;
3369
+ border: 0;
3370
+ border-radius: var(--sph-radius-xs);
3371
+ background: var(--sph-raised);
3372
+ color: var(--sph-text-muted);
3373
+ cursor: pointer;
3374
+ font: 11.5px / 1 var(--sph-font-sans);
3375
+ 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);
3376
+ }
3377
+ .sph-palette__crumb:hover {
3378
+ background: var(--sph-accent);
3379
+ @supports (color: color-mix(in lab, red, red)) {
3380
+ background: color-mix(in srgb, var(--sph-accent) 16%, var(--sph-raised));
3381
+ }
3382
+ color: var(--sph-text);
3383
+ }
3384
+ .sph-palette__crumb:active {
3385
+ transform: scale(0.96);
3386
+ }
3387
+ .sph-palette__crumb:focus-visible {
3388
+ outline: 2px solid var(--sph-focus);
3389
+ outline-offset: 1px;
3390
+ }
3391
+ .sph-palette__crumb[data-current] {
3392
+ background: var(--sph-accent);
3393
+ @supports (color: color-mix(in lab, red, red)) {
3394
+ background: color-mix(in srgb, var(--sph-accent) 18%, transparent);
3395
+ }
3396
+ color: var(--sph-text);
3397
+ cursor: default;
3398
+ }
3399
+ .sph-palette__crumb-sep {
3400
+ display: inline-flex;
3401
+ color: var(--sph-text-muted);
3402
+ opacity: 0.6;
3403
+ }
3404
+ .sph-palette__search {
3405
+ display: flex;
3406
+ gap: 9px;
3407
+ align-items: center;
3408
+ padding: 10px 12px;
3409
+ border-bottom: 1px solid var(--sph-border);
3410
+ }
3411
+ .sph-palette__search-icon {
3412
+ flex: 0 0 auto;
3413
+ color: var(--sph-text-muted);
3414
+ }
3415
+ .sph-palette__input {
3416
+ flex: 1 1 auto;
3417
+ min-width: 0;
3418
+ border: 0;
3419
+ outline: none;
3420
+ background: transparent;
3421
+ color: var(--sph-text);
3422
+ font: 14px var(--sph-font-sans);
3423
+ }
3424
+ .sph-palette__input::placeholder {
3425
+ color: var(--sph-text-muted);
3426
+ }
3427
+ .sph-palette__escape {
3428
+ cursor: pointer;
3429
+ flex: 0 0 auto;
3430
+ }
3431
+ .sph-palette__escape:hover {
3432
+ color: var(--sph-text);
3433
+ border-color: var(--sph-border-strong);
3434
+ }
3435
+ .sph-palette__body {
3436
+ overflow: hidden;
3437
+ }
3438
+ .sph-palette__list {
3439
+ max-height: min(46vh, 24rem);
3440
+ overflow-y: auto;
3441
+ padding: 6px;
3442
+ }
3443
+ .sph-palette__track {
3444
+ position: relative;
3445
+ display: grid;
3446
+ gap: 2px;
3447
+ }
3448
+ .sph-level-fade {
3449
+ animation: sph-level-fade var(--sph-motion-normal) var(--sph-ease-standard) both;
3450
+ }
3451
+ .sph-palette__indicator {
3452
+ position: absolute;
3453
+ top: 0;
3454
+ left: 0;
3455
+ z-index: 0;
3456
+ border-radius: var(--sph-radius-sm);
3457
+ background: var(--sph-accent);
3458
+ @supports (color: color-mix(in lab, red, red)) {
3459
+ background: color-mix(in srgb, var(--sph-accent) 15%, transparent);
3460
+ }
3461
+ pointer-events: none;
3462
+ opacity: 0;
3463
+ 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);
3464
+ }
3465
+ .sph-palette__group {
3466
+ display: grid;
3467
+ gap: 2px;
3468
+ }
3469
+ .sph-palette__heading {
3470
+ padding: 8px 10px 2px;
3471
+ color: var(--sph-text-muted);
3472
+ font: 11px / 1.2 var(--sph-font-sans);
3473
+ letter-spacing: 0.04em;
3474
+ text-transform: uppercase;
3475
+ }
3476
+ .sph-palette__option {
3477
+ position: relative;
3478
+ z-index: 1;
3479
+ display: flex;
3480
+ gap: 10px;
3481
+ align-items: center;
3482
+ min-height: 36px;
3483
+ padding: 7px 10px;
3484
+ border-radius: var(--sph-radius-sm);
3485
+ color: var(--sph-text-muted);
3486
+ cursor: pointer;
3487
+ font: 13px var(--sph-font-sans);
3488
+ transition: color var(--sph-motion-fast) var(--sph-ease-standard);
3489
+ }
3490
+ .sph-palette__option[data-active] {
3491
+ color: var(--sph-text);
3492
+ }
3493
+ .sph-palette__option[data-disabled] {
3494
+ opacity: 0.4;
3495
+ cursor: default;
3496
+ }
3497
+ .sph-palette__icon {
3498
+ display: inline-flex;
3499
+ flex: 0 0 auto;
3500
+ color: currentcolor;
3501
+ opacity: 0.85;
3502
+ }
3503
+ .sph-palette__label {
3504
+ flex: 1 1 auto;
3505
+ min-width: 0;
3506
+ overflow: hidden;
3507
+ text-overflow: ellipsis;
3508
+ white-space: nowrap;
3509
+ }
3510
+ .sph-palette__badge {
3511
+ flex: 0 0 auto;
3512
+ padding: 2px 6px;
3513
+ border-radius: var(--sph-radius-xs);
3514
+ background: var(--sph-accent);
3515
+ @supports (color: color-mix(in lab, red, red)) {
3516
+ background: color-mix(in srgb, var(--sph-accent) 18%, transparent);
3517
+ }
3518
+ color: var(--sph-accent-strong);
3519
+ font-size: 10.5px;
3520
+ line-height: 1.4;
3521
+ }
3522
+ .sph-palette__hint {
3523
+ flex: 0 0 auto;
3524
+ color: var(--sph-text-muted);
3525
+ font-size: 11px;
3526
+ }
3527
+ .sph-palette__more {
3528
+ display: inline-flex;
3529
+ flex: 0 0 auto;
3530
+ color: var(--sph-text-muted);
3531
+ opacity: 0.7;
3532
+ }
3533
+ .sph-palette__option .sph-kbd {
3534
+ flex: 0 0 auto;
3535
+ }
3536
+ .sph-palette__empty {
3537
+ padding: 20px 10px;
3538
+ color: var(--sph-text-muted);
3539
+ text-align: center;
3540
+ font-size: 13px;
3541
+ }
3542
+ .sph-palette__footer {
3543
+ display: flex;
3544
+ flex-wrap: wrap;
3545
+ gap: 14px;
3546
+ padding: 7px 12px;
3547
+ border-top: 1px solid var(--sph-border);
3548
+ color: var(--sph-text-muted);
3549
+ font-size: 11px;
3550
+ }
3551
+ .sph-palette__hintrow {
3552
+ display: inline-flex;
3553
+ gap: 4px;
3554
+ align-items: center;
3555
+ }
3556
+ @keyframes sph-palette-fade-in {
3557
+ from {
3558
+ opacity: 0;
3559
+ }
3560
+ to {
3561
+ opacity: 1;
3562
+ }
3563
+ }
3564
+ @keyframes sph-palette-fade-out {
3565
+ from {
3566
+ opacity: 1;
3567
+ }
3568
+ to {
3569
+ opacity: 0;
3570
+ }
3571
+ }
3572
+ @keyframes sph-palette-in {
3573
+ from {
3574
+ opacity: 0;
3575
+ transform: translateY(-4px) scale(0.96);
3576
+ }
3577
+ to {
3578
+ opacity: 1;
3579
+ transform: translateY(0) scale(1);
3580
+ }
3581
+ }
3582
+ @keyframes sph-palette-out {
3583
+ from {
3584
+ opacity: 1;
3585
+ transform: scale(1);
3586
+ }
3587
+ to {
3588
+ opacity: 0;
3589
+ transform: scale(0.97);
3590
+ }
3591
+ }
3592
+ @keyframes sph-level-pulse {
3593
+ 0% {
3594
+ transform: scale(1);
3595
+ animation-timing-function: var(--sph-ease-standard);
3596
+ }
3597
+ 40% {
3598
+ transform: scale(0.985);
3599
+ animation-timing-function: var(--sph-ease-emphasis);
3600
+ }
3601
+ 100% {
3602
+ transform: scale(1);
3603
+ }
3604
+ }
3605
+ @keyframes sph-level-fade {
3606
+ from {
3607
+ opacity: 0.5;
3608
+ }
3609
+ to {
3610
+ opacity: 1;
3611
+ }
3612
+ }
3613
+ .sph-dropzone {
3614
+ --sph-pull-x: 0px;
3615
+ --sph-pull-y: 0px;
3616
+ position: relative;
3617
+ display: flex;
3618
+ align-items: center;
3619
+ justify-content: center;
3620
+ min-block-size: 8rem;
3621
+ padding: 20px;
3622
+ border: 1.5px dashed var(--sph-border);
3623
+ @supports (color: color-mix(in lab, red, red)) {
3624
+ border: 1.5px dashed color-mix(in srgb, var(--sph-border) 85%, transparent);
3625
+ }
3626
+ border-radius: var(--sph-radius-md);
3627
+ background: var(--sph-raised);
3628
+ @supports (color: color-mix(in lab, red, red)) {
3629
+ background: color-mix(in srgb, var(--sph-raised) 45%, transparent);
3630
+ }
3631
+ cursor: pointer;
3632
+ text-align: center;
3633
+ font-family: var(--sph-font-sans);
3634
+ color: var(--sph-text-muted);
3635
+ 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);
3636
+ }
3637
+ .sph-dropzone:hover:not([data-disabled]) {
3638
+ border-color: var(--sph-border-strong);
3639
+ }
3640
+ .sph-dropzone[data-active] {
3641
+ border-color: var(--sph-accent);
3642
+ background: var(--sph-accent);
3643
+ @supports (color: color-mix(in lab, red, red)) {
3644
+ background: color-mix(in srgb, var(--sph-accent) 8%, transparent);
3645
+ }
3646
+ box-shadow: 0 0 0 3px var(--sph-accent);
3647
+ @supports (color: color-mix(in lab, red, red)) {
3648
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--sph-accent) 18%, transparent);
3649
+ }
3650
+ }
3651
+ .sph-dropzone[data-disabled] {
3652
+ opacity: 50%;
3653
+ cursor: not-allowed;
3654
+ }
3655
+ .sph-dropzone__content {
3656
+ display: grid;
3657
+ gap: 6px;
3658
+ justify-items: center;
3659
+ transform: translate(var(--sph-pull-x), var(--sph-pull-y));
3660
+ transition: transform var(--sph-motion-normal) var(--sph-ease-emphasis);
3661
+ }
3662
+ .sph-dropzone[data-active] .sph-dropzone__content {
3663
+ color: var(--sph-text);
3664
+ }
3665
+ .sph-dropzone__input {
3666
+ position: absolute;
3667
+ inline-size: 1px;
3668
+ block-size: 1px;
3669
+ opacity: 0;
3670
+ pointer-events: none;
3671
+ }
3672
+ @media (prefers-reduced-motion: reduce) {
3673
+ .sph-dropzone__content {
3674
+ transition: none;
3675
+ transform: none;
3676
+ }
3677
+ }
3678
+ .sph-reasoning {
3679
+ border: 1px solid var(--sph-border);
3680
+ border-radius: var(--sph-radius-md);
3681
+ background: var(--sph-surface);
3682
+ @supports (color: color-mix(in lab, red, red)) {
3683
+ background: color-mix(in srgb, var(--sph-surface) 80%, transparent);
3684
+ }
3685
+ padding: 8px 12px 10px;
3686
+ font-family: var(--sph-font-sans);
3687
+ }
3688
+ .sph-reasoning__trigger {
3689
+ display: flex;
3690
+ gap: 8px;
3691
+ align-items: center;
3692
+ justify-content: space-between;
3693
+ inline-size: 100%;
3694
+ }
3695
+ .sph-reasoning__label {
3696
+ color: var(--sph-text);
3697
+ }
3698
+ .sph-reasoning__meta {
3699
+ display: inline-flex;
3700
+ gap: 7px;
3701
+ align-items: center;
3702
+ color: var(--sph-text-muted);
3703
+ font-weight: 400;
3704
+ }
3705
+ .sph-reasoning__count {
3706
+ font-size: 11px;
3707
+ }
3708
+ .sph-reasoning__list {
3709
+ display: grid;
3710
+ gap: 4px;
3711
+ margin: 6px 0 0;
3712
+ padding: 0;
3713
+ list-style: none;
3714
+ }
3715
+ .sph-reasoning__step {
3716
+ display: flex;
3717
+ gap: 9px;
3718
+ align-items: baseline;
3719
+ padding: 5px 7px;
3720
+ border-radius: var(--sph-radius-sm);
3721
+ animation: sph-rise-in var(--sph-motion-normal) var(--sph-ease-emphasis) both;
3722
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard);
3723
+ }
3724
+ .sph-reasoning__step[data-status="active"] {
3725
+ background: var(--sph-accent);
3726
+ @supports (color: color-mix(in lab, red, red)) {
3727
+ background: color-mix(in srgb, var(--sph-accent) 10%, transparent);
3728
+ }
3729
+ }
3730
+ .sph-reasoning__step[data-status="pending"] {
3731
+ opacity: 0.55;
3732
+ }
3733
+ .sph-reasoning__marker {
3734
+ position: relative;
3735
+ flex: 0 0 auto;
3736
+ align-self: stretch;
3737
+ inline-size: 10px;
3738
+ }
3739
+ .sph-reasoning__marker::before {
3740
+ content: "";
3741
+ position: absolute;
3742
+ inset-block: 14px -6px;
3743
+ inset-inline-start: 4.5px;
3744
+ inline-size: 1px;
3745
+ background: var(--sph-border);
3746
+ }
3747
+ .sph-reasoning__step:last-child .sph-reasoning__marker::before {
3748
+ display: none;
3749
+ }
3750
+ .sph-reasoning__dot {
3751
+ position: absolute;
3752
+ inset-block-start: 4px;
3753
+ inset-inline-start: 1px;
3754
+ inline-size: 8px;
3755
+ block-size: 8px;
3756
+ border-radius: 999px;
3757
+ background: var(--sph-border-strong);
3758
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
3759
+ }
3760
+ .sph-reasoning__step[data-status="done"] .sph-reasoning__dot {
3761
+ background: var(--sph-success);
3762
+ }
3763
+ .sph-reasoning__step[data-status="active"] .sph-reasoning__dot {
3764
+ background: var(--sph-accent);
3765
+ box-shadow: 0 0 0 3px var(--sph-accent);
3766
+ @supports (color: color-mix(in lab, red, red)) {
3767
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--sph-accent) 25%, transparent);
3768
+ }
3769
+ animation: sph-glow-pulse 1.2s var(--sph-ease-standard) infinite alternate;
3770
+ }
3771
+ .sph-reasoning__body {
3772
+ display: grid;
3773
+ gap: 1px;
3774
+ flex: 1 1 auto;
3775
+ min-inline-size: 0;
3776
+ }
3777
+ .sph-reasoning__title {
3778
+ color: var(--sph-text);
3779
+ font-size: 12.5px;
3780
+ line-height: 1.45;
3781
+ }
3782
+ .sph-reasoning__detail {
3783
+ color: var(--sph-text-muted);
3784
+ font-size: 12px;
3785
+ line-height: 1.5;
3786
+ }
3787
+ .sph-reasoning__status {
3788
+ flex: 0 0 auto;
3789
+ color: var(--sph-text-muted);
3790
+ font-size: 10.5px;
3791
+ letter-spacing: 0.03em;
3792
+ text-transform: uppercase;
3793
+ }
3794
+ .sph-resizable {
3795
+ display: flex;
3796
+ min-inline-size: 0;
3797
+ min-block-size: 0;
3798
+ }
3799
+ .sph-resizable[data-direction="vertical"] {
3800
+ flex-direction: column;
3801
+ }
3802
+ .sph-resizable__pane {
3803
+ display: flex;
3804
+ flex-direction: column;
3805
+ min-inline-size: 0;
3806
+ min-block-size: 0;
3807
+ }
3808
+ .sph-resizable__handle {
3809
+ position: relative;
3810
+ flex: 0 0 auto;
3811
+ align-self: stretch;
3812
+ border: 0;
3813
+ padding: 0;
3814
+ background: transparent;
3815
+ touch-action: none;
3816
+ cursor: col-resize;
3817
+ }
3818
+ .sph-resizable[data-direction="horizontal"] .sph-resizable__handle {
3819
+ inline-size: 9px;
3820
+ }
3821
+ .sph-resizable[data-direction="vertical"] .sph-resizable__handle {
3822
+ block-size: 9px;
3823
+ cursor: row-resize;
3824
+ }
3825
+ .sph-resizable__handle::after {
3826
+ content: "";
3827
+ position: absolute;
3828
+ inset-block: 6px;
3829
+ inset-inline-start: 50%;
3830
+ inline-size: 2px;
3831
+ border-radius: 999px;
3832
+ background: var(--sph-border);
3833
+ @supports (color: color-mix(in lab, red, red)) {
3834
+ background: color-mix(in srgb, var(--sph-border) 80%, transparent);
3835
+ }
3836
+ transform: translateX(-50%);
3837
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), block-size var(--sph-motion-fast) var(--sph-ease-emphasis);
3838
+ }
3839
+ .sph-resizable[data-direction="vertical"] .sph-resizable__handle::after {
3840
+ inset-block: auto;
3841
+ inset-inline: 6px;
3842
+ inset-block-start: 50%;
3843
+ inline-size: auto;
3844
+ block-size: 2px;
3845
+ transform: translateY(-50%);
3846
+ }
3847
+ .sph-resizable__handle:hover::after, .sph-resizable__handle:focus-visible::after, .sph-resizable__handle[data-dragging]::after {
3848
+ background: var(--sph-accent);
3849
+ }
3850
+ .sph-resizable__handle:focus-visible {
3851
+ outline: 2px solid var(--sph-focus);
3852
+ outline-offset: -3px;
3853
+ border-radius: var(--sph-radius-xs);
3854
+ }
3855
+ @media (prefers-reduced-motion: reduce) {
3856
+ .sph-resizable__handle::after {
3857
+ transition: none;
3858
+ }
3859
+ }
3860
+ .sph-stream {
3861
+ color: inherit;
3862
+ font: inherit;
3863
+ line-height: inherit;
3864
+ word-break: break-word;
3865
+ }
3866
+ .sph-stream__word {
3867
+ display: inline-block;
3868
+ white-space: pre-wrap;
3869
+ }
3870
+ .sph-stream__word[data-animated] {
3871
+ animation: sph-stream-word var(--sph-motion-normal) var(--sph-ease-standard) both;
3872
+ }
3873
+ @keyframes sph-stream-word {
3874
+ 0% {
3875
+ opacity: 0;
3876
+ transform: translateY(3px);
3877
+ filter: blur(2px);
3878
+ }
3879
+ 55% {
3880
+ opacity: 1;
3881
+ transform: translateY(0);
3882
+ filter: blur(0);
3883
+ color: var(--sph-accent-strong);
3884
+ }
3885
+ 100% {
3886
+ opacity: 1;
3887
+ transform: translateY(0);
3888
+ filter: blur(0);
3889
+ color: inherit;
3890
+ }
3891
+ }
3892
+ @media (prefers-reduced-motion: reduce) {
3893
+ .sph-stream__word[data-animated] {
3894
+ animation: none;
3895
+ opacity: 1;
3896
+ }
3897
+ }
3898
+ .sph-sidebar {
3899
+ display: flex;
3900
+ flex-direction: column;
3901
+ gap: 6px;
3902
+ inline-size: 224px;
3903
+ padding: 8px;
3904
+ border-inline-end: 1px solid var(--sph-border);
3905
+ background: var(--sph-surface);
3906
+ font-family: var(--sph-font-sans);
3907
+ transition: inline-size var(--sph-motion-normal) var(--sph-ease-standard);
3908
+ }
3909
+ .sph-sidebar[data-collapsed] {
3910
+ inline-size: 56px;
3911
+ }
3912
+ .sph-sidebar__header {
3913
+ padding: 6px 8px 2px;
3914
+ }
3915
+ .sph-sidebar__nav {
3916
+ display: flex;
3917
+ flex: 1 1 auto;
3918
+ flex-direction: column;
3919
+ gap: 10px;
3920
+ min-block-size: 0;
3921
+ overflow-y: auto;
3922
+ overflow-x: hidden;
3923
+ scrollbar-width: thin;
3924
+ scrollbar-color: var(--sph-border-strong) transparent;
3925
+ @supports (color: color-mix(in lab, red, red)) {
3926
+ scrollbar-color: color-mix( in srgb, var(--sph-border-strong) 55%, transparent ) transparent;
3927
+ }
3928
+ }
3929
+ .sph-sidebar__section {
3930
+ display: flex;
3931
+ flex-direction: column;
3932
+ gap: 2px;
3933
+ }
3934
+ .sph-sidebar__section-title {
3935
+ padding: 4px 8px 2px;
3936
+ color: var(--sph-text-muted);
3937
+ font-size: 10.5px;
3938
+ font-weight: 500;
3939
+ letter-spacing: 0.05em;
3940
+ text-transform: uppercase;
3941
+ white-space: nowrap;
3942
+ overflow: hidden;
3943
+ transition: opacity var(--sph-motion-fast) var(--sph-ease-standard);
3944
+ }
3945
+ .sph-sidebar[data-collapsed] .sph-sidebar__section-title {
3946
+ opacity: 0;
3947
+ block-size: 0;
3948
+ padding: 0;
3949
+ }
3950
+ .sph-sidebar__item {
3951
+ position: relative;
3952
+ display: flex;
3953
+ gap: 9px;
3954
+ align-items: center;
3955
+ min-block-size: 32px;
3956
+ padding: 5px 9px;
3957
+ border: 0;
3958
+ border-radius: var(--sph-radius-sm);
3959
+ background: transparent;
3960
+ color: var(--sph-text-muted);
3961
+ cursor: pointer;
3962
+ font: 13px var(--sph-font-sans);
3963
+ text-align: start;
3964
+ 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);
3965
+ }
3966
+ .sph-sidebar__item:hover:not(:disabled) {
3967
+ background: var(--sph-raised);
3968
+ color: var(--sph-text);
3969
+ transform: translateX(2px);
3970
+ }
3971
+ .sph-sidebar__item:active:not(:disabled) {
3972
+ transform: translateX(2px) scale(0.985);
3973
+ }
3974
+ .sph-sidebar__item:focus-visible {
3975
+ outline: 2px solid var(--sph-focus);
3976
+ outline-offset: -2px;
3977
+ }
3978
+ .sph-sidebar__item:disabled {
3979
+ opacity: 45%;
3980
+ cursor: not-allowed;
3981
+ }
3982
+ .sph-sidebar__item[data-active] {
3983
+ background: var(--sph-accent);
3984
+ @supports (color: color-mix(in lab, red, red)) {
3985
+ background: color-mix(in srgb, var(--sph-accent) 15%, transparent);
3986
+ }
3987
+ color: var(--sph-text);
3988
+ }
3989
+ .sph-sidebar__item[data-active]::before {
3990
+ content: "";
3991
+ position: absolute;
3992
+ inset-block: 7px;
3993
+ inset-inline-start: -8px;
3994
+ inline-size: 2.5px;
3995
+ border-radius: 999px;
3996
+ background: var(--sph-accent);
3997
+ }
3998
+ .sph-sidebar__item[data-active] .sph-sidebar__icon {
3999
+ color: var(--sph-accent-strong);
4000
+ }
4001
+ .sph-sidebar__icon {
4002
+ display: inline-flex;
4003
+ flex: 0 0 auto;
4004
+ font-size: 15px;
4005
+ }
4006
+ .sph-sidebar__label {
4007
+ flex: 1 1 auto;
4008
+ min-inline-size: 0;
4009
+ white-space: nowrap;
4010
+ overflow: hidden;
4011
+ text-overflow: ellipsis;
4012
+ transition: opacity var(--sph-motion-fast) var(--sph-ease-standard), flex-basis var(--sph-motion-normal) var(--sph-ease-standard);
4013
+ }
4014
+ .sph-sidebar[data-collapsed] .sph-sidebar__label, .sph-sidebar[data-collapsed] .sph-sidebar__badge {
4015
+ opacity: 0;
4016
+ flex-basis: 0;
4017
+ inline-size: 0;
4018
+ margin: 0;
4019
+ pointer-events: none;
4020
+ }
4021
+ .sph-sidebar[data-collapsed] .sph-sidebar__item {
4022
+ justify-content: center;
4023
+ padding-inline: 0;
4024
+ }
4025
+ .sph-sidebar[data-collapsed] .sph-sidebar__item[data-active]::before {
4026
+ inset-inline-start: -6px;
4027
+ }
4028
+ .sph-sidebar__badge {
4029
+ flex: 0 0 auto;
4030
+ margin-inline-start: auto;
4031
+ transition: opacity var(--sph-motion-fast) var(--sph-ease-standard);
4032
+ }
4033
+ .sph-sidebar__footer {
4034
+ display: flex;
4035
+ align-items: center;
4036
+ gap: 6px;
4037
+ padding-top: 4px;
4038
+ border-block-start: 1px solid var(--sph-border);
4039
+ }
4040
+ .sph-sidebar__footer-content {
4041
+ flex: 1 1 auto;
4042
+ min-inline-size: 0;
4043
+ overflow: hidden;
4044
+ }
4045
+ .sph-sidebar[data-collapsed] .sph-sidebar__footer-content {
4046
+ display: none;
4047
+ }
4048
+ .sph-sidebar__toggle {
4049
+ display: inline-flex;
4050
+ align-items: center;
4051
+ justify-content: center;
4052
+ inline-size: 26px;
4053
+ block-size: 26px;
4054
+ flex: 0 0 auto;
4055
+ border: 0;
4056
+ border-radius: var(--sph-radius-xs);
4057
+ background: transparent;
4058
+ color: var(--sph-text-muted);
4059
+ cursor: pointer;
4060
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard), color var(--sph-motion-fast) var(--sph-ease-standard);
4061
+ }
4062
+ .sph-sidebar__toggle:hover {
4063
+ background: var(--sph-raised);
4064
+ color: var(--sph-text);
4065
+ }
4066
+ .sph-sidebar__toggle:focus-visible {
4067
+ outline: 2px solid var(--sph-focus);
4068
+ outline-offset: 1px;
4069
+ }
4070
+ @media (prefers-reduced-motion: reduce) {
4071
+ .sph-sidebar, .sph-sidebar__item {
4072
+ transition: none;
4073
+ }
4074
+ }
4075
+ .sph-match {
4076
+ border-radius: 2px;
4077
+ background: var(--sph-accent);
4078
+ @supports (color: color-mix(in lab, red, red)) {
4079
+ background: color-mix(in srgb, var(--sph-accent) 22%, transparent);
4080
+ }
4081
+ color: var(--sph-accent-strong);
4082
+ font-weight: 550;
4083
+ }
4084
+ .sph-table-wrap {
4085
+ max-width: 100%;
4086
+ min-width: 0px;
4087
+ overflow-x: auto;
4088
+ border-radius: var(--sph-radius-md);
4089
+ border-style: var(--tw-border-style);
4090
+ border-width: 1px;
4091
+ border-color: var(--sph-border);
4092
+ background-color: var(--sph-surface);
4093
+ font-family: var(--sph-font-sans);
4094
+ }
4095
+ .sph-table {
4096
+ width: 100%;
4097
+ border-collapse: collapse;
4098
+ text-align: left;
4099
+ font-size: var(--text-xs, 0.75rem);
4100
+ line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / 0.75)));
4101
+ color: var(--sph-text);
4102
+ min-width: 480px;
4103
+ }
4104
+ .sph-table caption {
4105
+ border-bottom-style: var(--tw-border-style);
4106
+ border-bottom-width: 1px;
2087
4107
  border-color: var(--sph-border);
2088
4108
  padding-inline: calc(var(--spacing, 0.25rem) * 4);
2089
4109
  padding-block: calc(var(--spacing, 0.25rem) * 3);
@@ -2118,6 +4138,9 @@
2118
4138
  .sph-table tbody tr:last-child td {
2119
4139
  border-bottom: 0;
2120
4140
  }
4141
+ .sph-table tbody tr {
4142
+ transition: background-color var(--sph-motion-fast) var(--sph-ease-standard);
4143
+ }
2121
4144
  .sph-table tbody tr:hover {
2122
4145
  background: var(--sph-raised);
2123
4146
  @supports (color: color-mix(in lab, red, red)) {
@@ -2171,6 +4194,10 @@
2171
4194
  border-color: var(--sph-border);
2172
4195
  background-color: var(--sph-surface);
2173
4196
  font-family: var(--sph-font-sans);
4197
+ transition: border-color var(--sph-motion-fast) var(--sph-ease-standard), box-shadow var(--sph-motion-fast) var(--sph-ease-standard);
4198
+ }
4199
+ .sph-toolbar:hover {
4200
+ border-color: var(--sph-border-strong);
2174
4201
  }
2175
4202
  .sph-toolbar[data-size="sm"] {
2176
4203
  gap: calc(var(--spacing, 0.25rem) * 1.5);
@@ -2231,9 +4258,9 @@
2231
4258
  min-height: 2.5rem;
2232
4259
  }
2233
4260
  .sph-toolbar .sph-tabs__tab[data-selected="true"]::after {
2234
- bottom: 1px;
2235
- left: 12px;
2236
- right: 12px;
4261
+ bottom: 3px;
4262
+ left: 10px;
4263
+ right: 10px;
2237
4264
  }
2238
4265
  @media (max-width: 560px) {
2239
4266
  .sph-toolbar {