@twentyfirstmedia/pro 0.1.1 → 0.2.1
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/README.md +1 -1
- package/dist/scoped.css +904 -51
- package/dist/styles.css +773 -36
- package/dist/tailwind.css +15 -0
- package/dist/tokens.css +153 -0
- package/dist/tokens.json +178 -0
- package/package.json +2 -2
package/dist/styles.css
CHANGED
|
@@ -62,6 +62,10 @@
|
|
|
62
62
|
--dur-enter: var(--duration-base);
|
|
63
63
|
--dur-slow: var(--duration-base);
|
|
64
64
|
--stagger-step: 0ms;
|
|
65
|
+
--dur-exit: var(--duration-fast);
|
|
66
|
+
--motion-time: 1;
|
|
67
|
+
--motion-travel: 1;
|
|
68
|
+
--motion-blur: 0px;
|
|
65
69
|
--ease-out: var(--ease-standard);
|
|
66
70
|
--ease-spring: var(--ease-standard);
|
|
67
71
|
--ease-in-out: var(--ease-standard);
|
|
@@ -268,6 +272,20 @@
|
|
|
268
272
|
--on-frame-danger: var(--danger);
|
|
269
273
|
--scrim: rgba(0,0,0,0.62);
|
|
270
274
|
--scrim-strong: var(--scrim);
|
|
275
|
+
--glass: color-mix(in srgb, var(--card) 72%, transparent);
|
|
276
|
+
--glass-strong: color-mix(in srgb, var(--card) 88%, transparent);
|
|
277
|
+
--glass-control: color-mix(in srgb, var(--foreground) 7%, transparent);
|
|
278
|
+
--glass-well: color-mix(in srgb, var(--foreground) 5%, transparent);
|
|
279
|
+
--glass-hover: color-mix(in srgb, var(--foreground) 9%, transparent);
|
|
280
|
+
--glass-border: color-mix(in srgb, var(--foreground) 14%, transparent);
|
|
281
|
+
--glass-highlight: rgba(255, 255, 255, 0.07);
|
|
282
|
+
--glass-sheen: transparent;
|
|
283
|
+
--ambient-base: var(--background);
|
|
284
|
+
--ambient-1: color-mix(in oklab, var(--chart-1) 30%, var(--background));
|
|
285
|
+
--ambient-2: color-mix(in oklab, var(--chart-4) 26%, var(--background));
|
|
286
|
+
--ambient-3: color-mix(in oklab, var(--chart-2) 22%, var(--background));
|
|
287
|
+
--ambient-4: color-mix(in oklab, var(--foreground) 8%, var(--background));
|
|
288
|
+
--ambient-scrim: rgba(9, 9, 11, 0.55);
|
|
271
289
|
--bg-000: var(--background);
|
|
272
290
|
--bg-100: var(--card);
|
|
273
291
|
--bg-200: var(--muted);
|
|
@@ -325,6 +343,7 @@
|
|
|
325
343
|
--shadow-lift: none;
|
|
326
344
|
--shadow-float: 0 16px 40px rgba(0,0,0,0.55);
|
|
327
345
|
--shadow-overlay: 0 16px 40px rgba(0,0,0,0.55);
|
|
346
|
+
--shadow-glass: 0 12px 32px rgba(0, 0, 0, 0.5);
|
|
328
347
|
--button-radius: var(--radius-1);
|
|
329
348
|
--field-radius: var(--radius-1);
|
|
330
349
|
--badge-radius: var(--radius-1);
|
|
@@ -334,6 +353,8 @@
|
|
|
334
353
|
--panel-shadow: none;
|
|
335
354
|
--panel-pad: var(--space-4);
|
|
336
355
|
--panel-gap: 1px;
|
|
356
|
+
--glass-filter: blur(16px) saturate(120%) brightness(0.8);
|
|
357
|
+
--glass-tint: 40%;
|
|
337
358
|
color-scheme: dark;
|
|
338
359
|
}
|
|
339
360
|
@media (prefers-color-scheme: dark) {
|
|
@@ -399,6 +420,20 @@
|
|
|
399
420
|
--on-frame-danger: var(--danger);
|
|
400
421
|
--scrim: rgba(0,0,0,0.62);
|
|
401
422
|
--scrim-strong: var(--scrim);
|
|
423
|
+
--glass: color-mix(in srgb, var(--card) 72%, transparent);
|
|
424
|
+
--glass-strong: color-mix(in srgb, var(--card) 88%, transparent);
|
|
425
|
+
--glass-control: color-mix(in srgb, var(--foreground) 7%, transparent);
|
|
426
|
+
--glass-well: color-mix(in srgb, var(--foreground) 5%, transparent);
|
|
427
|
+
--glass-hover: color-mix(in srgb, var(--foreground) 9%, transparent);
|
|
428
|
+
--glass-border: color-mix(in srgb, var(--foreground) 14%, transparent);
|
|
429
|
+
--glass-highlight: rgba(255, 255, 255, 0.07);
|
|
430
|
+
--glass-sheen: transparent;
|
|
431
|
+
--ambient-base: var(--background);
|
|
432
|
+
--ambient-1: color-mix(in oklab, var(--chart-1) 30%, var(--background));
|
|
433
|
+
--ambient-2: color-mix(in oklab, var(--chart-4) 26%, var(--background));
|
|
434
|
+
--ambient-3: color-mix(in oklab, var(--chart-2) 22%, var(--background));
|
|
435
|
+
--ambient-4: color-mix(in oklab, var(--foreground) 8%, var(--background));
|
|
436
|
+
--ambient-scrim: rgba(9, 9, 11, 0.55);
|
|
402
437
|
--bg-000: var(--background);
|
|
403
438
|
--bg-100: var(--card);
|
|
404
439
|
--bg-200: var(--muted);
|
|
@@ -456,6 +491,7 @@
|
|
|
456
491
|
--shadow-lift: none;
|
|
457
492
|
--shadow-float: 0 16px 40px rgba(0,0,0,0.55);
|
|
458
493
|
--shadow-overlay: 0 16px 40px rgba(0,0,0,0.55);
|
|
494
|
+
--shadow-glass: 0 12px 32px rgba(0, 0, 0, 0.5);
|
|
459
495
|
--button-radius: var(--radius-1);
|
|
460
496
|
--field-radius: var(--radius-1);
|
|
461
497
|
--badge-radius: var(--radius-1);
|
|
@@ -465,6 +501,8 @@
|
|
|
465
501
|
--panel-shadow: none;
|
|
466
502
|
--panel-pad: var(--space-4);
|
|
467
503
|
--panel-gap: 1px;
|
|
504
|
+
--glass-filter: blur(16px) saturate(120%) brightness(0.8);
|
|
505
|
+
--glass-tint: 40%;
|
|
468
506
|
color-scheme: dark;
|
|
469
507
|
}
|
|
470
508
|
}
|
|
@@ -531,6 +569,20 @@
|
|
|
531
569
|
--on-frame-danger: var(--danger);
|
|
532
570
|
--scrim: rgba(17,17,20,0.36);
|
|
533
571
|
--scrim-strong: var(--scrim);
|
|
572
|
+
--glass: color-mix(in srgb, var(--card) 74%, transparent);
|
|
573
|
+
--glass-strong: color-mix(in srgb, var(--card) 88%, transparent);
|
|
574
|
+
--glass-control: color-mix(in srgb, var(--card) 55%, transparent);
|
|
575
|
+
--glass-well: color-mix(in srgb, var(--foreground) 5%, transparent);
|
|
576
|
+
--glass-hover: color-mix(in srgb, var(--foreground) 7%, transparent);
|
|
577
|
+
--glass-border: color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
578
|
+
--glass-highlight: rgba(255, 255, 255, 0.7);
|
|
579
|
+
--glass-sheen: transparent;
|
|
580
|
+
--ambient-base: var(--background);
|
|
581
|
+
--ambient-1: color-mix(in oklab, var(--chart-1) 22%, var(--background));
|
|
582
|
+
--ambient-2: color-mix(in oklab, var(--chart-4) 18%, var(--background));
|
|
583
|
+
--ambient-3: color-mix(in oklab, var(--chart-2) 16%, var(--background));
|
|
584
|
+
--ambient-4: color-mix(in oklab, var(--foreground) 6%, var(--background));
|
|
585
|
+
--ambient-scrim: rgba(246, 246, 247, 0.4);
|
|
534
586
|
--bg-000: var(--background);
|
|
535
587
|
--bg-100: var(--card);
|
|
536
588
|
--bg-200: var(--muted);
|
|
@@ -588,6 +640,7 @@
|
|
|
588
640
|
--shadow-lift: none;
|
|
589
641
|
--shadow-float: 0 16px 40px rgba(17,17,20,0.12);
|
|
590
642
|
--shadow-overlay: 0 16px 40px rgba(17,17,20,0.12);
|
|
643
|
+
--shadow-glass: 0 8px 24px rgba(17, 17, 20, 0.1);
|
|
591
644
|
--button-radius: var(--radius-1);
|
|
592
645
|
--field-radius: var(--radius-1);
|
|
593
646
|
--badge-radius: var(--radius-1);
|
|
@@ -597,6 +650,8 @@
|
|
|
597
650
|
--panel-shadow: none;
|
|
598
651
|
--panel-pad: var(--space-4);
|
|
599
652
|
--panel-gap: 1px;
|
|
653
|
+
--glass-filter: blur(16px) saturate(130%) brightness(1.04);
|
|
654
|
+
--glass-tint: 40%;
|
|
600
655
|
color-scheme: light;
|
|
601
656
|
}
|
|
602
657
|
}
|
|
@@ -662,6 +717,20 @@
|
|
|
662
717
|
--on-frame-danger: var(--danger);
|
|
663
718
|
--scrim: rgba(0,0,0,0.62);
|
|
664
719
|
--scrim-strong: var(--scrim);
|
|
720
|
+
--glass: color-mix(in srgb, var(--card) 72%, transparent);
|
|
721
|
+
--glass-strong: color-mix(in srgb, var(--card) 88%, transparent);
|
|
722
|
+
--glass-control: color-mix(in srgb, var(--foreground) 7%, transparent);
|
|
723
|
+
--glass-well: color-mix(in srgb, var(--foreground) 5%, transparent);
|
|
724
|
+
--glass-hover: color-mix(in srgb, var(--foreground) 9%, transparent);
|
|
725
|
+
--glass-border: color-mix(in srgb, var(--foreground) 14%, transparent);
|
|
726
|
+
--glass-highlight: rgba(255, 255, 255, 0.07);
|
|
727
|
+
--glass-sheen: transparent;
|
|
728
|
+
--ambient-base: var(--background);
|
|
729
|
+
--ambient-1: color-mix(in oklab, var(--chart-1) 30%, var(--background));
|
|
730
|
+
--ambient-2: color-mix(in oklab, var(--chart-4) 26%, var(--background));
|
|
731
|
+
--ambient-3: color-mix(in oklab, var(--chart-2) 22%, var(--background));
|
|
732
|
+
--ambient-4: color-mix(in oklab, var(--foreground) 8%, var(--background));
|
|
733
|
+
--ambient-scrim: rgba(9, 9, 11, 0.55);
|
|
665
734
|
--bg-000: var(--background);
|
|
666
735
|
--bg-100: var(--card);
|
|
667
736
|
--bg-200: var(--muted);
|
|
@@ -719,6 +788,7 @@
|
|
|
719
788
|
--shadow-lift: none;
|
|
720
789
|
--shadow-float: 0 16px 40px rgba(0,0,0,0.55);
|
|
721
790
|
--shadow-overlay: 0 16px 40px rgba(0,0,0,0.55);
|
|
791
|
+
--shadow-glass: 0 12px 32px rgba(0, 0, 0, 0.5);
|
|
722
792
|
--button-radius: var(--radius-1);
|
|
723
793
|
--field-radius: var(--radius-1);
|
|
724
794
|
--badge-radius: var(--radius-1);
|
|
@@ -728,6 +798,8 @@
|
|
|
728
798
|
--panel-shadow: none;
|
|
729
799
|
--panel-pad: var(--space-4);
|
|
730
800
|
--panel-gap: 1px;
|
|
801
|
+
--glass-filter: blur(16px) saturate(120%) brightness(0.8);
|
|
802
|
+
--glass-tint: 40%;
|
|
731
803
|
color-scheme: dark;
|
|
732
804
|
}
|
|
733
805
|
:where([data-theme="light"], .light) {
|
|
@@ -792,6 +864,20 @@
|
|
|
792
864
|
--on-frame-danger: var(--danger);
|
|
793
865
|
--scrim: rgba(17,17,20,0.36);
|
|
794
866
|
--scrim-strong: var(--scrim);
|
|
867
|
+
--glass: color-mix(in srgb, var(--card) 74%, transparent);
|
|
868
|
+
--glass-strong: color-mix(in srgb, var(--card) 88%, transparent);
|
|
869
|
+
--glass-control: color-mix(in srgb, var(--card) 55%, transparent);
|
|
870
|
+
--glass-well: color-mix(in srgb, var(--foreground) 5%, transparent);
|
|
871
|
+
--glass-hover: color-mix(in srgb, var(--foreground) 7%, transparent);
|
|
872
|
+
--glass-border: color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
873
|
+
--glass-highlight: rgba(255, 255, 255, 0.7);
|
|
874
|
+
--glass-sheen: transparent;
|
|
875
|
+
--ambient-base: var(--background);
|
|
876
|
+
--ambient-1: color-mix(in oklab, var(--chart-1) 22%, var(--background));
|
|
877
|
+
--ambient-2: color-mix(in oklab, var(--chart-4) 18%, var(--background));
|
|
878
|
+
--ambient-3: color-mix(in oklab, var(--chart-2) 16%, var(--background));
|
|
879
|
+
--ambient-4: color-mix(in oklab, var(--foreground) 6%, var(--background));
|
|
880
|
+
--ambient-scrim: rgba(246, 246, 247, 0.4);
|
|
795
881
|
--bg-000: var(--background);
|
|
796
882
|
--bg-100: var(--card);
|
|
797
883
|
--bg-200: var(--muted);
|
|
@@ -849,6 +935,7 @@
|
|
|
849
935
|
--shadow-lift: none;
|
|
850
936
|
--shadow-float: 0 16px 40px rgba(17,17,20,0.12);
|
|
851
937
|
--shadow-overlay: 0 16px 40px rgba(17,17,20,0.12);
|
|
938
|
+
--shadow-glass: 0 8px 24px rgba(17, 17, 20, 0.1);
|
|
852
939
|
--button-radius: var(--radius-1);
|
|
853
940
|
--field-radius: var(--radius-1);
|
|
854
941
|
--badge-radius: var(--radius-1);
|
|
@@ -858,6 +945,8 @@
|
|
|
858
945
|
--panel-shadow: none;
|
|
859
946
|
--panel-pad: var(--space-4);
|
|
860
947
|
--panel-gap: 1px;
|
|
948
|
+
--glass-filter: blur(16px) saturate(130%) brightness(1.04);
|
|
949
|
+
--glass-tint: 40%;
|
|
861
950
|
color-scheme: light;
|
|
862
951
|
}
|
|
863
952
|
@media (pointer: coarse) {
|
|
@@ -883,6 +972,70 @@
|
|
|
883
972
|
--density-font-size: 14px;
|
|
884
973
|
--density-line-height: 20px;
|
|
885
974
|
}
|
|
975
|
+
:where([data-motion="expressive"]) {
|
|
976
|
+
--dur-enter: 360ms;
|
|
977
|
+
--dur-slow: 560ms;
|
|
978
|
+
--dur-exit: 140ms;
|
|
979
|
+
--stagger-step: 45ms;
|
|
980
|
+
--motion-time: 1;
|
|
981
|
+
--motion-travel: 0.8;
|
|
982
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
983
|
+
--motion-blur: 0px;
|
|
984
|
+
}
|
|
985
|
+
:where([data-motion="off"]) {
|
|
986
|
+
--duration-fast: 0ms;
|
|
987
|
+
--duration-base: 0ms;
|
|
988
|
+
--dur-fast: 0ms;
|
|
989
|
+
--dur-base: 0ms;
|
|
990
|
+
--dur-enter: 0ms;
|
|
991
|
+
--dur-slow: 0ms;
|
|
992
|
+
--dur-exit: 0ms;
|
|
993
|
+
--stagger-step: 0ms;
|
|
994
|
+
--motion-time: 0;
|
|
995
|
+
--motion-travel: 0;
|
|
996
|
+
--motion-blur: 0px;
|
|
997
|
+
}
|
|
998
|
+
@media (prefers-reduced-motion: reduce) {
|
|
999
|
+
:where(:root, [data-motion], [data-theme]) {
|
|
1000
|
+
--duration-fast: 0ms;
|
|
1001
|
+
--duration-base: 0ms;
|
|
1002
|
+
--dur-fast: 0ms;
|
|
1003
|
+
--dur-base: 0ms;
|
|
1004
|
+
--dur-enter: 0ms;
|
|
1005
|
+
--dur-slow: 0ms;
|
|
1006
|
+
--dur-exit: 0ms;
|
|
1007
|
+
--stagger-step: 0ms;
|
|
1008
|
+
--motion-time: 0;
|
|
1009
|
+
--motion-travel: 0;
|
|
1010
|
+
--motion-blur: 0px;
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
1014
|
+
:where(:root, [data-theme], .dark, .light) {
|
|
1015
|
+
--glass: var(--glass-strong);
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
@media (prefers-contrast: more) {
|
|
1019
|
+
:where(:root, [data-theme], .dark, .light) {
|
|
1020
|
+
--glass: var(--glass-strong);
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
1024
|
+
:where(:root, [data-theme], .dark, .light) {
|
|
1025
|
+
--glass: var(--card);
|
|
1026
|
+
--glass-strong: var(--popover);
|
|
1027
|
+
--glass-sheen: transparent;
|
|
1028
|
+
--glass-filter: none;
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
@media (forced-colors: active) {
|
|
1032
|
+
:where(:root, [data-theme], .dark, .light) {
|
|
1033
|
+
--glass: var(--card);
|
|
1034
|
+
--glass-strong: var(--popover);
|
|
1035
|
+
--glass-sheen: transparent;
|
|
1036
|
+
--glass-filter: none;
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
886
1039
|
|
|
887
1040
|
/* 01-foundation.css */
|
|
888
1041
|
/* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
|
|
@@ -1429,18 +1582,23 @@ select.tf-input {
|
|
|
1429
1582
|
box-shadow: none;
|
|
1430
1583
|
}
|
|
1431
1584
|
.tf-bg-sky {
|
|
1585
|
+
--tint: var(--sky);
|
|
1432
1586
|
background: var(--sky);
|
|
1433
1587
|
}
|
|
1434
1588
|
.tf-bg-mint {
|
|
1589
|
+
--tint: var(--mint);
|
|
1435
1590
|
background: var(--mint);
|
|
1436
1591
|
}
|
|
1437
1592
|
.tf-bg-lilac {
|
|
1593
|
+
--tint: var(--lilac);
|
|
1438
1594
|
background: var(--lilac);
|
|
1439
1595
|
}
|
|
1440
1596
|
.tf-bg-butter {
|
|
1597
|
+
--tint: var(--butter);
|
|
1441
1598
|
background: var(--butter);
|
|
1442
1599
|
}
|
|
1443
1600
|
.tf-bg-blush {
|
|
1601
|
+
--tint: var(--blush);
|
|
1444
1602
|
background: var(--blush);
|
|
1445
1603
|
}
|
|
1446
1604
|
.tf-bg-surface {
|
|
@@ -1862,7 +2020,7 @@ select.tf-input {
|
|
|
1862
2020
|
@keyframes tf-rise {
|
|
1863
2021
|
from {
|
|
1864
2022
|
opacity: 0;
|
|
1865
|
-
transform: translateY(14px) scale(0.985);
|
|
2023
|
+
transform: translateY(calc(14px * var(--motion-travel))) scale(0.985);
|
|
1866
2024
|
}
|
|
1867
2025
|
to {
|
|
1868
2026
|
opacity: 1;
|
|
@@ -1880,7 +2038,7 @@ select.tf-input {
|
|
|
1880
2038
|
@keyframes tf-drop {
|
|
1881
2039
|
from {
|
|
1882
2040
|
opacity: 0;
|
|
1883
|
-
transform: translateY(-10px);
|
|
2041
|
+
transform: translateY(calc(-10px * var(--motion-travel)));
|
|
1884
2042
|
}
|
|
1885
2043
|
to {
|
|
1886
2044
|
opacity: 1;
|
|
@@ -1890,7 +2048,7 @@ select.tf-input {
|
|
|
1890
2048
|
@keyframes tf-slide-in {
|
|
1891
2049
|
from {
|
|
1892
2050
|
opacity: 0;
|
|
1893
|
-
transform: translateX(24px);
|
|
2051
|
+
transform: translateX(calc(24px * var(--motion-travel)));
|
|
1894
2052
|
}
|
|
1895
2053
|
to {
|
|
1896
2054
|
opacity: 1;
|
|
@@ -1900,7 +2058,8 @@ select.tf-input {
|
|
|
1900
2058
|
@keyframes tf-slide-up {
|
|
1901
2059
|
from {
|
|
1902
2060
|
opacity: 0;
|
|
1903
|
-
transform: translate(
|
|
2061
|
+
transform: translate(calc(0px * var(--motion-travel)), calc(28px * var(--motion-travel)))
|
|
2062
|
+
scale(0.9);
|
|
1904
2063
|
}
|
|
1905
2064
|
to {
|
|
1906
2065
|
opacity: 1;
|
|
@@ -1959,47 +2118,60 @@ select.tf-input {
|
|
|
1959
2118
|
}
|
|
1960
2119
|
|
|
1961
2120
|
.tf-in {
|
|
2121
|
+
--enter-delay: var(--d, 0ms);
|
|
1962
2122
|
animation: tf-rise var(--dur-enter) var(--ease-out) both;
|
|
1963
|
-
animation-delay: var(--
|
|
2123
|
+
animation-delay: var(--enter-delay);
|
|
1964
2124
|
}
|
|
1965
2125
|
.tf-stagger > * {
|
|
1966
2126
|
animation: tf-rise var(--dur-enter) var(--ease-out) both;
|
|
1967
2127
|
}
|
|
1968
2128
|
.tf-stagger > :nth-child(1) {
|
|
1969
|
-
|
|
2129
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 0);
|
|
2130
|
+
animation-delay: var(--enter-delay);
|
|
1970
2131
|
}
|
|
1971
2132
|
.tf-stagger > :nth-child(2) {
|
|
1972
|
-
|
|
2133
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 1);
|
|
2134
|
+
animation-delay: var(--enter-delay);
|
|
1973
2135
|
}
|
|
1974
2136
|
.tf-stagger > :nth-child(3) {
|
|
1975
|
-
|
|
2137
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 2);
|
|
2138
|
+
animation-delay: var(--enter-delay);
|
|
1976
2139
|
}
|
|
1977
2140
|
.tf-stagger > :nth-child(4) {
|
|
1978
|
-
|
|
2141
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 3);
|
|
2142
|
+
animation-delay: var(--enter-delay);
|
|
1979
2143
|
}
|
|
1980
2144
|
.tf-stagger > :nth-child(5) {
|
|
1981
|
-
|
|
2145
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 4);
|
|
2146
|
+
animation-delay: var(--enter-delay);
|
|
1982
2147
|
}
|
|
1983
2148
|
.tf-stagger > :nth-child(6) {
|
|
1984
|
-
|
|
2149
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 5);
|
|
2150
|
+
animation-delay: var(--enter-delay);
|
|
1985
2151
|
}
|
|
1986
2152
|
.tf-stagger > :nth-child(7) {
|
|
1987
|
-
|
|
2153
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 6);
|
|
2154
|
+
animation-delay: var(--enter-delay);
|
|
1988
2155
|
}
|
|
1989
2156
|
.tf-stagger > :nth-child(8) {
|
|
1990
|
-
|
|
2157
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 7);
|
|
2158
|
+
animation-delay: var(--enter-delay);
|
|
1991
2159
|
}
|
|
1992
2160
|
.tf-stagger > :nth-child(9) {
|
|
1993
|
-
|
|
2161
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 8);
|
|
2162
|
+
animation-delay: var(--enter-delay);
|
|
1994
2163
|
}
|
|
1995
2164
|
.tf-stagger > :nth-child(10) {
|
|
1996
|
-
|
|
2165
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 9);
|
|
2166
|
+
animation-delay: var(--enter-delay);
|
|
1997
2167
|
}
|
|
1998
2168
|
.tf-stagger > :nth-child(11) {
|
|
1999
|
-
|
|
2169
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 10);
|
|
2170
|
+
animation-delay: var(--enter-delay);
|
|
2000
2171
|
}
|
|
2001
2172
|
.tf-stagger > :nth-child(n + 12) {
|
|
2002
|
-
|
|
2173
|
+
--enter-delay: calc(var(--base, 0ms) + var(--stagger-step) * 11);
|
|
2174
|
+
animation-delay: var(--enter-delay);
|
|
2003
2175
|
}
|
|
2004
2176
|
.tf-topbar {
|
|
2005
2177
|
animation: tf-drop var(--dur-enter) var(--ease-out) both;
|
|
@@ -2009,32 +2181,32 @@ select.tf-input {
|
|
|
2009
2181
|
}
|
|
2010
2182
|
.tf-panel.tf-side {
|
|
2011
2183
|
animation: tf-slide-in var(--dur-enter) var(--ease-out) both;
|
|
2012
|
-
animation-delay: 160ms;
|
|
2184
|
+
animation-delay: calc(160ms * var(--motion-time));
|
|
2013
2185
|
}
|
|
2014
2186
|
.tf-dock {
|
|
2015
2187
|
animation: tf-slide-up var(--dur-enter) var(--ease-spring) both;
|
|
2016
|
-
animation-delay: 420ms;
|
|
2188
|
+
animation-delay: calc(420ms * var(--motion-time));
|
|
2017
2189
|
}
|
|
2018
2190
|
.tf-dock .tf-dock-btn {
|
|
2019
2191
|
animation: tf-pop var(--dur-base) var(--ease-spring) both;
|
|
2020
2192
|
}
|
|
2021
2193
|
.tf-dock .tf-dock-btn:nth-child(1) {
|
|
2022
|
-
animation-delay: 520ms;
|
|
2194
|
+
animation-delay: calc(520ms * var(--motion-time));
|
|
2023
2195
|
}
|
|
2024
2196
|
.tf-dock .tf-dock-btn:nth-child(2) {
|
|
2025
|
-
animation-delay: 570ms;
|
|
2197
|
+
animation-delay: calc(570ms * var(--motion-time));
|
|
2026
2198
|
}
|
|
2027
2199
|
.tf-dock .tf-dock-btn:nth-child(3) {
|
|
2028
|
-
animation-delay: 620ms;
|
|
2200
|
+
animation-delay: calc(620ms * var(--motion-time));
|
|
2029
2201
|
}
|
|
2030
2202
|
.tf-dock .tf-dock-btn:nth-child(4) {
|
|
2031
|
-
animation-delay: 670ms;
|
|
2203
|
+
animation-delay: calc(670ms * var(--motion-time));
|
|
2032
2204
|
}
|
|
2033
2205
|
.tf-dock .tf-dock-btn:nth-child(5) {
|
|
2034
|
-
animation-delay: 720ms;
|
|
2206
|
+
animation-delay: calc(720ms * var(--motion-time));
|
|
2035
2207
|
}
|
|
2036
2208
|
.tf-dock .tf-dock-btn:nth-child(n + 6) {
|
|
2037
|
-
animation-delay: 770ms;
|
|
2209
|
+
animation-delay: calc(770ms * var(--motion-time));
|
|
2038
2210
|
}
|
|
2039
2211
|
.tf-rail-btn {
|
|
2040
2212
|
animation: tf-pop var(--dur-base) var(--ease-spring) both;
|
|
@@ -2071,7 +2243,7 @@ select.tf-input {
|
|
|
2071
2243
|
.tf-progress > span {
|
|
2072
2244
|
transform-origin: left;
|
|
2073
2245
|
animation: tf-grow-x var(--dur-slow) var(--ease-out) both;
|
|
2074
|
-
animation-delay: 200ms;
|
|
2246
|
+
animation-delay: calc(var(--enter-delay, 0ms) + calc(200ms * var(--motion-time)));
|
|
2075
2247
|
}
|
|
2076
2248
|
|
|
2077
2249
|
/* Sliding tab indicator */
|
|
@@ -2150,6 +2322,7 @@ select.tf-input {
|
|
|
2150
2322
|
transform-box: fill-box;
|
|
2151
2323
|
transform-origin: bottom;
|
|
2152
2324
|
animation: tf-grow-y var(--dur-slow) var(--ease-out) both;
|
|
2325
|
+
animation-delay: var(--enter-delay, 0ms);
|
|
2153
2326
|
}
|
|
2154
2327
|
.tf-bar-ink {
|
|
2155
2328
|
fill: var(--primary);
|
|
@@ -2177,7 +2350,7 @@ select.tf-input {
|
|
|
2177
2350
|
stroke-dasharray: 1;
|
|
2178
2351
|
stroke-dashoffset: 1;
|
|
2179
2352
|
animation: tf-draw var(--dur-slow) var(--ease-out) forwards;
|
|
2180
|
-
animation-delay: 150ms;
|
|
2353
|
+
animation-delay: calc(var(--enter-delay, 0ms) + calc(150ms * var(--motion-time)));
|
|
2181
2354
|
}
|
|
2182
2355
|
.tf-line-ink {
|
|
2183
2356
|
stroke: var(--primary);
|
|
@@ -2200,7 +2373,7 @@ select.tf-input {
|
|
|
2200
2373
|
.tf-area {
|
|
2201
2374
|
opacity: 0;
|
|
2202
2375
|
animation: tf-fade var(--dur-slow) var(--ease-out) forwards;
|
|
2203
|
-
animation-delay: 500ms;
|
|
2376
|
+
animation-delay: calc(var(--enter-delay, 0ms) + calc(500ms * var(--motion-time)));
|
|
2204
2377
|
}
|
|
2205
2378
|
.tf-area-sky {
|
|
2206
2379
|
fill: var(--sky);
|
|
@@ -2221,7 +2394,7 @@ select.tf-input {
|
|
|
2221
2394
|
fill: var(--surface);
|
|
2222
2395
|
stroke-width: 2.5;
|
|
2223
2396
|
animation: tf-pop var(--dur-base) var(--ease-spring) both;
|
|
2224
|
-
animation-delay: 900ms;
|
|
2397
|
+
animation-delay: calc(var(--enter-delay, 0ms) + calc(900ms * var(--motion-time)));
|
|
2225
2398
|
transform-box: fill-box;
|
|
2226
2399
|
transform-origin: center;
|
|
2227
2400
|
}
|
|
@@ -2650,6 +2823,19 @@ select.tf-input {
|
|
|
2650
2823
|
}
|
|
2651
2824
|
}
|
|
2652
2825
|
|
|
2826
|
+
/* the same for an app that turns motion off: data-motion="off" */
|
|
2827
|
+
[data-motion="off"] *,
|
|
2828
|
+
[data-motion="off"] *::before,
|
|
2829
|
+
[data-motion="off"] *::after {
|
|
2830
|
+
animation-duration: 1ms !important;
|
|
2831
|
+
animation-delay: 0ms !important;
|
|
2832
|
+
animation-iteration-count: 1 !important;
|
|
2833
|
+
transition-duration: 1ms !important;
|
|
2834
|
+
}
|
|
2835
|
+
[data-motion="off"] .tf-line {
|
|
2836
|
+
stroke-dashoffset: 0;
|
|
2837
|
+
}
|
|
2838
|
+
|
|
2653
2839
|
/* ───────── Refinements ───────── */
|
|
2654
2840
|
.tf-nav-label {
|
|
2655
2841
|
white-space: nowrap;
|
|
@@ -2681,7 +2867,7 @@ select.tf-input {
|
|
|
2681
2867
|
.tf-area {
|
|
2682
2868
|
opacity: 0;
|
|
2683
2869
|
animation: tf-area-in var(--dur-slow) var(--ease-out) forwards;
|
|
2684
|
-
animation-delay: 500ms;
|
|
2870
|
+
animation-delay: calc(var(--enter-delay, 0ms) + calc(500ms * var(--motion-time)));
|
|
2685
2871
|
}
|
|
2686
2872
|
@keyframes tf-area-in {
|
|
2687
2873
|
to {
|
|
@@ -3243,7 +3429,7 @@ select.tf-input {
|
|
|
3243
3429
|
}
|
|
3244
3430
|
@keyframes tf-drawer-in {
|
|
3245
3431
|
from {
|
|
3246
|
-
transform: translateX(40px);
|
|
3432
|
+
transform: translateX(calc(40px * var(--motion-travel)));
|
|
3247
3433
|
opacity: 0;
|
|
3248
3434
|
}
|
|
3249
3435
|
to {
|
|
@@ -5219,6 +5405,7 @@ label.tf-menu-item {
|
|
|
5219
5405
|
transform-box: fill-box;
|
|
5220
5406
|
transform-origin: bottom;
|
|
5221
5407
|
animation: tf-grow-y var(--dur-slow) var(--ease-out) both;
|
|
5408
|
+
animation-delay: var(--enter-delay, 0ms);
|
|
5222
5409
|
transition: opacity var(--dur-fast);
|
|
5223
5410
|
}
|
|
5224
5411
|
.tf-chart g.dim .tf-seg-bar {
|
|
@@ -5264,7 +5451,7 @@ label.tf-menu-item {
|
|
|
5264
5451
|
.tf-area2 {
|
|
5265
5452
|
opacity: 0;
|
|
5266
5453
|
animation: tf-area2-in var(--dur-slow) var(--ease-out) forwards;
|
|
5267
|
-
animation-delay: 400ms;
|
|
5454
|
+
animation-delay: calc(var(--enter-delay, 0ms) + calc(400ms * var(--motion-time)));
|
|
5268
5455
|
}
|
|
5269
5456
|
@keyframes tf-area2-in {
|
|
5270
5457
|
to {
|
|
@@ -5501,6 +5688,18 @@ label.tf-menu-item {
|
|
|
5501
5688
|
display: none;
|
|
5502
5689
|
}
|
|
5503
5690
|
}
|
|
5691
|
+
/* the same for an app that turns motion off: data-motion="off" */
|
|
5692
|
+
[data-motion="off"] .tf-seg-bar,
|
|
5693
|
+
[data-motion="off"] .tf-area2,
|
|
5694
|
+
[data-motion="off"] .tf-heat-cell,
|
|
5695
|
+
[data-motion="off"] .tf-tooltip,
|
|
5696
|
+
[data-motion="off"] .tf-popover {
|
|
5697
|
+
animation: none !important;
|
|
5698
|
+
opacity: 1;
|
|
5699
|
+
}
|
|
5700
|
+
[data-motion="off"] .tf-toast-timer {
|
|
5701
|
+
display: none;
|
|
5702
|
+
}
|
|
5504
5703
|
@media (max-width: 640px) {
|
|
5505
5704
|
.tf-dp {
|
|
5506
5705
|
flex-direction: column;
|
|
@@ -7270,6 +7469,14 @@ label.tf-menu-item {
|
|
|
7270
7469
|
animation: none !important;
|
|
7271
7470
|
}
|
|
7272
7471
|
}
|
|
7472
|
+
/* the same for an app that turns motion off: data-motion="off" */
|
|
7473
|
+
[data-motion="off"] .tf-msg,
|
|
7474
|
+
[data-motion="off"] .tf-caret,
|
|
7475
|
+
[data-motion="off"] .tf-typing i,
|
|
7476
|
+
[data-motion="off"] .tf-spin,
|
|
7477
|
+
[data-motion="off"] .tf-reason.live .tf-reason-head {
|
|
7478
|
+
animation: none !important;
|
|
7479
|
+
}
|
|
7273
7480
|
|
|
7274
7481
|
/* 04-status-agents-operations.css */
|
|
7275
7482
|
/* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
|
|
@@ -9441,6 +9648,13 @@ label.tf-menu-item {
|
|
|
9441
9648
|
animation: none !important;
|
|
9442
9649
|
}
|
|
9443
9650
|
}
|
|
9651
|
+
/* the same for an app that turns motion off: data-motion="off" */
|
|
9652
|
+
[data-motion="off"] .tf-shape-pulse,
|
|
9653
|
+
[data-motion="off"] .tf-voice-wave i,
|
|
9654
|
+
[data-motion="off"] .tf-stage.st-running::after,
|
|
9655
|
+
[data-motion="off"] .tf-log-line.fresh {
|
|
9656
|
+
animation: none !important;
|
|
9657
|
+
}
|
|
9444
9658
|
.tf-approval-mail {
|
|
9445
9659
|
padding: 12px 16px;
|
|
9446
9660
|
border-radius: var(--radius-md);
|
|
@@ -9796,7 +10010,7 @@ label.tf-menu-item {
|
|
|
9796
10010
|
@keyframes tf-fresh {
|
|
9797
10011
|
0% {
|
|
9798
10012
|
background: var(--surface-sunken);
|
|
9799
|
-
transform: translateY(-4px);
|
|
10013
|
+
transform: translateY(calc(-4px * var(--motion-travel)));
|
|
9800
10014
|
opacity: 0;
|
|
9801
10015
|
}
|
|
9802
10016
|
15% {
|
|
@@ -11700,6 +11914,13 @@ button.tf-runs-main[aria-expanded]:hover {
|
|
|
11700
11914
|
animation: none;
|
|
11701
11915
|
}
|
|
11702
11916
|
}
|
|
11917
|
+
/* the same for an app that turns motion off: data-motion="off" */
|
|
11918
|
+
[data-motion="off"] .tf-live-dot,
|
|
11919
|
+
[data-motion="off"] .tf-map-bubble.pulse::after,
|
|
11920
|
+
[data-motion="off"] .tf-map-pin.pulse::after,
|
|
11921
|
+
[data-motion="off"] .tf-livefeed-row.fresh {
|
|
11922
|
+
animation: none;
|
|
11923
|
+
}
|
|
11703
11924
|
.tf-map-world {
|
|
11704
11925
|
position: absolute;
|
|
11705
11926
|
inset: 0;
|
|
@@ -11950,6 +12171,8 @@ button.tf-runs-main[aria-expanded]:hover {
|
|
|
11950
12171
|
}
|
|
11951
12172
|
.tf-togglegroup {
|
|
11952
12173
|
display: inline-flex;
|
|
12174
|
+
flex-wrap: wrap;
|
|
12175
|
+
width: fit-content;
|
|
11953
12176
|
align-items: center;
|
|
11954
12177
|
gap: 4px;
|
|
11955
12178
|
padding: 4px;
|
|
@@ -12612,19 +12835,19 @@ button.tf-runs-main[aria-expanded]:hover {
|
|
|
12612
12835
|
@keyframes tf-sheet-left {
|
|
12613
12836
|
from {
|
|
12614
12837
|
opacity: 0;
|
|
12615
|
-
transform: translateX(-24px);
|
|
12838
|
+
transform: translateX(calc(-24px * var(--motion-travel)));
|
|
12616
12839
|
}
|
|
12617
12840
|
}
|
|
12618
12841
|
@keyframes tf-sheet-top {
|
|
12619
12842
|
from {
|
|
12620
12843
|
opacity: 0;
|
|
12621
|
-
transform: translateY(-24px);
|
|
12844
|
+
transform: translateY(calc(-24px * var(--motion-travel)));
|
|
12622
12845
|
}
|
|
12623
12846
|
}
|
|
12624
12847
|
@keyframes tf-sheet-bottom {
|
|
12625
12848
|
from {
|
|
12626
12849
|
opacity: 0;
|
|
12627
|
-
transform: translateY(24px);
|
|
12850
|
+
transform: translateY(calc(24px * var(--motion-travel)));
|
|
12628
12851
|
}
|
|
12629
12852
|
}
|
|
12630
12853
|
|
|
@@ -13355,6 +13578,520 @@ textarea.tf-input,
|
|
|
13355
13578
|
box-sizing: border-box;
|
|
13356
13579
|
}
|
|
13357
13580
|
|
|
13581
|
+
/* 08-glass.css */
|
|
13582
|
+
/* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
|
|
13583
|
+
/* Glass: translucent surfaces for UI that floats over content (maps, 3D scenes, video, photos).
|
|
13584
|
+
*
|
|
13585
|
+
* A glass surface shows a blurred, colour-lifted view of what is behind it, with a light edge on
|
|
13586
|
+
* top. What sits on it reads the glass tokens too (inputs, chips, tab tracks, hover highlights,
|
|
13587
|
+
* nested cards), so the surface stays one piece of glass instead of opaque blocks on glass.
|
|
13588
|
+
*
|
|
13589
|
+
* - `.tf-glass` (the `surface="glass"` prop) makes one surface glass.
|
|
13590
|
+
* - `[data-surface="glass"]` (`<UIProvider surface="glass">`) makes every top-level surface and
|
|
13591
|
+
* every floating layer inside it glass. Surfaces nested in a surface stay clear instead of
|
|
13592
|
+
* stacking glass on glass; `.tf-solid` (`surface="solid"`) opts one surface out.
|
|
13593
|
+
*
|
|
13594
|
+
* Floating layers (menus, popovers, dialogs, drawers) use the stronger `--glass-strong` fill: they
|
|
13595
|
+
* carry more text. The fills are opaque enough for 4.5:1 body text over any backdrop; reduced
|
|
13596
|
+
* transparency, high contrast and forced colours fall back to solid surfaces.
|
|
13597
|
+
*/
|
|
13598
|
+
|
|
13599
|
+
/* the surface itself */
|
|
13600
|
+
.tf-glass:not(.tf-solid),
|
|
13601
|
+
[data-surface="glass"]
|
|
13602
|
+
:is(
|
|
13603
|
+
.tf-panel,
|
|
13604
|
+
.tf-card,
|
|
13605
|
+
.tf-stat,
|
|
13606
|
+
.tf-dock,
|
|
13607
|
+
.tf-sidebar,
|
|
13608
|
+
.tf-map-legend,
|
|
13609
|
+
.tf-map-ctl,
|
|
13610
|
+
.tf-map-pop
|
|
13611
|
+
):not(
|
|
13612
|
+
:is(
|
|
13613
|
+
.tf-panel,
|
|
13614
|
+
.tf-card,
|
|
13615
|
+
.tf-stat,
|
|
13616
|
+
.tf-dock,
|
|
13617
|
+
.tf-sidebar,
|
|
13618
|
+
.tf-popover,
|
|
13619
|
+
.tf-menu,
|
|
13620
|
+
.tf-hovercard,
|
|
13621
|
+
.tf-selectmenu-list,
|
|
13622
|
+
.tf-navmenu-panel,
|
|
13623
|
+
.tf-palette,
|
|
13624
|
+
.tf-modal,
|
|
13625
|
+
.tf-drawer,
|
|
13626
|
+
.tf-glass
|
|
13627
|
+
)
|
|
13628
|
+
*
|
|
13629
|
+
):not(.tf-solid),
|
|
13630
|
+
[data-surface="glass"]
|
|
13631
|
+
:is(
|
|
13632
|
+
.tf-popover,
|
|
13633
|
+
.tf-menu:not(.tf-menu-static),
|
|
13634
|
+
.tf-hovercard,
|
|
13635
|
+
.tf-selectmenu-list,
|
|
13636
|
+
.tf-navmenu-panel,
|
|
13637
|
+
.tf-palette,
|
|
13638
|
+
.tf-modal,
|
|
13639
|
+
.tf-drawer
|
|
13640
|
+
):not(.tf-solid) {
|
|
13641
|
+
--glass-fill: var(--glass);
|
|
13642
|
+
background:
|
|
13643
|
+
linear-gradient(to bottom, var(--glass-sheen), transparent 56px) border-box,
|
|
13644
|
+
linear-gradient(var(--glass-tinted), var(--glass-tinted)) border-box,
|
|
13645
|
+
var(--glass-fill);
|
|
13646
|
+
--glass-tinted: color-mix(in srgb, var(--tint, transparent) var(--glass-tint), transparent);
|
|
13647
|
+
-webkit-backdrop-filter: var(--glass-filter);
|
|
13648
|
+
backdrop-filter: var(--glass-filter);
|
|
13649
|
+
border-color: var(--glass-border);
|
|
13650
|
+
box-shadow:
|
|
13651
|
+
inset 0 1px 0 0 var(--glass-highlight),
|
|
13652
|
+
inset 0 0 0 1px var(--glass-border),
|
|
13653
|
+
var(--shadow-glass);
|
|
13654
|
+
color: var(--foreground);
|
|
13655
|
+
/* what sits on the glass */
|
|
13656
|
+
--surface: var(--glass-control);
|
|
13657
|
+
--secondary: var(--glass-control);
|
|
13658
|
+
--bg-100: var(--glass-control);
|
|
13659
|
+
--surface-sunken: var(--glass-well);
|
|
13660
|
+
--muted: var(--glass-well);
|
|
13661
|
+
--canvas: var(--glass-well);
|
|
13662
|
+
--bg-200: var(--glass-well);
|
|
13663
|
+
--accent: var(--glass-hover);
|
|
13664
|
+
--bg-300: var(--glass-hover);
|
|
13665
|
+
/* the faintest text steps up one shade: glass gives up some contrast to what is behind */
|
|
13666
|
+
--ink-subtle: var(--muted-foreground);
|
|
13667
|
+
--fg-300: var(--muted-foreground);
|
|
13668
|
+
}
|
|
13669
|
+
|
|
13670
|
+
/* floating layers carry more text: a stronger fill */
|
|
13671
|
+
:is(
|
|
13672
|
+
.tf-popover,
|
|
13673
|
+
.tf-menu,
|
|
13674
|
+
.tf-hovercard,
|
|
13675
|
+
.tf-selectmenu-list,
|
|
13676
|
+
.tf-navmenu-panel,
|
|
13677
|
+
.tf-palette,
|
|
13678
|
+
.tf-modal,
|
|
13679
|
+
.tf-drawer
|
|
13680
|
+
).tf-glass,
|
|
13681
|
+
[data-surface="glass"]
|
|
13682
|
+
:is(
|
|
13683
|
+
.tf-popover,
|
|
13684
|
+
.tf-menu:not(.tf-menu-static),
|
|
13685
|
+
.tf-hovercard,
|
|
13686
|
+
.tf-selectmenu-list,
|
|
13687
|
+
.tf-navmenu-panel,
|
|
13688
|
+
.tf-palette,
|
|
13689
|
+
.tf-modal,
|
|
13690
|
+
.tf-drawer
|
|
13691
|
+
):not(.tf-solid) {
|
|
13692
|
+
--glass-fill: var(--glass-strong);
|
|
13693
|
+
}
|
|
13694
|
+
|
|
13695
|
+
/* Controls floating on their own (not on a surface) become small glass pills: a search field or
|
|
13696
|
+
zoom buttons over a map */
|
|
13697
|
+
[data-surface="glass"]
|
|
13698
|
+
:is(
|
|
13699
|
+
.tf-search,
|
|
13700
|
+
.tf-seg,
|
|
13701
|
+
.tf-btngroup,
|
|
13702
|
+
.tf-iconbtn-soft,
|
|
13703
|
+
.tf-iconbtn-outline,
|
|
13704
|
+
.tf-btn-secondary,
|
|
13705
|
+
.tf-chip:not([aria-pressed="true"])
|
|
13706
|
+
):not(
|
|
13707
|
+
:is(
|
|
13708
|
+
.tf-panel,
|
|
13709
|
+
.tf-card,
|
|
13710
|
+
.tf-dock,
|
|
13711
|
+
.tf-popover,
|
|
13712
|
+
.tf-menu,
|
|
13713
|
+
.tf-hovercard,
|
|
13714
|
+
.tf-selectmenu-list,
|
|
13715
|
+
.tf-navmenu-panel,
|
|
13716
|
+
.tf-palette,
|
|
13717
|
+
.tf-modal,
|
|
13718
|
+
.tf-drawer,
|
|
13719
|
+
.tf-glass,
|
|
13720
|
+
.tf-btngroup,
|
|
13721
|
+
.tf-map-ctl,
|
|
13722
|
+
.tf-topbar
|
|
13723
|
+
)
|
|
13724
|
+
*
|
|
13725
|
+
):not(.tf-solid) {
|
|
13726
|
+
background:
|
|
13727
|
+
linear-gradient(to bottom, var(--glass-sheen), transparent) border-box,
|
|
13728
|
+
var(--glass);
|
|
13729
|
+
-webkit-backdrop-filter: var(--glass-filter);
|
|
13730
|
+
backdrop-filter: var(--glass-filter);
|
|
13731
|
+
box-shadow:
|
|
13732
|
+
inset 0 1px 0 0 var(--glass-highlight),
|
|
13733
|
+
inset 0 0 0 1px var(--glass-border),
|
|
13734
|
+
var(--shadow-glass);
|
|
13735
|
+
color: var(--foreground);
|
|
13736
|
+
--surface: var(--glass-control);
|
|
13737
|
+
--secondary: var(--glass-control);
|
|
13738
|
+
--surface-sunken: var(--glass-well);
|
|
13739
|
+
--bg-200: var(--glass-well);
|
|
13740
|
+
--accent: var(--glass-hover);
|
|
13741
|
+
--bg-300: var(--glass-hover);
|
|
13742
|
+
}
|
|
13743
|
+
[data-surface="glass"]
|
|
13744
|
+
:is(.tf-iconbtn-soft, .tf-iconbtn-outline, .tf-btn-secondary, .tf-chip):not(
|
|
13745
|
+
:is(.tf-panel, .tf-card, .tf-dock, .tf-popover, .tf-menu, .tf-modal, .tf-drawer, .tf-glass) *
|
|
13746
|
+
):not(.tf-solid):not([aria-pressed="true"]):hover {
|
|
13747
|
+
background:
|
|
13748
|
+
linear-gradient(var(--glass-hover), var(--glass-hover)) border-box,
|
|
13749
|
+
var(--glass);
|
|
13750
|
+
}
|
|
13751
|
+
|
|
13752
|
+
/* AppShell on glass: the same layout as the solid shell, the frame turned to glass. Top bar and
|
|
13753
|
+
rail sit on it without a fill of their own, the sheet clears so the backdrop shows through,
|
|
13754
|
+
and everything drawn on the frame (nav, user, rail) reads the glass colours */
|
|
13755
|
+
[data-surface="glass"] .tf-shell {
|
|
13756
|
+
background:
|
|
13757
|
+
linear-gradient(to bottom, var(--glass-sheen), transparent 56px) border-box,
|
|
13758
|
+
var(--glass);
|
|
13759
|
+
-webkit-backdrop-filter: var(--glass-filter);
|
|
13760
|
+
backdrop-filter: var(--glass-filter);
|
|
13761
|
+
box-shadow:
|
|
13762
|
+
inset 0 1px 0 0 var(--glass-highlight),
|
|
13763
|
+
inset 0 0 0 1px var(--glass-border),
|
|
13764
|
+
var(--shadow-glass);
|
|
13765
|
+
--frame: var(--glass);
|
|
13766
|
+
--frame-hover: var(--glass-hover);
|
|
13767
|
+
--frame-active: var(--glass-hover);
|
|
13768
|
+
--frame-strong: var(--glass-control);
|
|
13769
|
+
--on-frame: var(--foreground);
|
|
13770
|
+
--on-frame-muted: var(--muted-foreground);
|
|
13771
|
+
}
|
|
13772
|
+
[data-surface="glass"] .tf-shell .tf-sheet {
|
|
13773
|
+
background: transparent;
|
|
13774
|
+
}
|
|
13775
|
+
[data-surface="glass"] .tf-shell .tf-topbar {
|
|
13776
|
+
background: transparent;
|
|
13777
|
+
}
|
|
13778
|
+
|
|
13779
|
+
/* switch knobs stay solid on glass */
|
|
13780
|
+
.tf-glass .tf-switch::after,
|
|
13781
|
+
[data-surface="glass"] .tf-switch::after {
|
|
13782
|
+
background: var(--card);
|
|
13783
|
+
}
|
|
13784
|
+
|
|
13785
|
+
/* Reduced transparency, more contrast, forced colours and browsers without backdrop blur switch
|
|
13786
|
+
the glass tokens themselves (see tokens.css). Forced colours drop shadows, so glass keeps an
|
|
13787
|
+
edge there. */
|
|
13788
|
+
@media (forced-colors: active) {
|
|
13789
|
+
.tf-glass,
|
|
13790
|
+
[data-surface="glass"]
|
|
13791
|
+
:is(
|
|
13792
|
+
.tf-panel,
|
|
13793
|
+
.tf-card,
|
|
13794
|
+
.tf-stat,
|
|
13795
|
+
.tf-dock,
|
|
13796
|
+
.tf-sidebar,
|
|
13797
|
+
.tf-map-legend,
|
|
13798
|
+
.tf-map-ctl,
|
|
13799
|
+
.tf-map-pop
|
|
13800
|
+
) {
|
|
13801
|
+
outline: 1px solid CanvasText;
|
|
13802
|
+
outline-offset: -1px;
|
|
13803
|
+
}
|
|
13804
|
+
}
|
|
13805
|
+
|
|
13806
|
+
/* FloatingLayout: UI along the edges of a full-bleed background */
|
|
13807
|
+
.tf-floating {
|
|
13808
|
+
position: relative;
|
|
13809
|
+
overflow: hidden;
|
|
13810
|
+
isolation: isolate;
|
|
13811
|
+
border-radius: var(--radius-lg);
|
|
13812
|
+
background: var(--surface-sunken);
|
|
13813
|
+
container: tf-floating / inline-size;
|
|
13814
|
+
}
|
|
13815
|
+
.tf-floating-bg {
|
|
13816
|
+
position: absolute;
|
|
13817
|
+
inset: 0;
|
|
13818
|
+
}
|
|
13819
|
+
.tf-floating-bg > * {
|
|
13820
|
+
width: 100%;
|
|
13821
|
+
height: 100%;
|
|
13822
|
+
}
|
|
13823
|
+
.tf-floating-ui {
|
|
13824
|
+
position: absolute;
|
|
13825
|
+
inset: 0;
|
|
13826
|
+
z-index: 1;
|
|
13827
|
+
display: grid;
|
|
13828
|
+
grid-template-columns: minmax(0, 320px) minmax(0, 1fr) minmax(0, 340px);
|
|
13829
|
+
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
13830
|
+
grid-template-areas:
|
|
13831
|
+
"top top top"
|
|
13832
|
+
"start . end"
|
|
13833
|
+
"bottom bottom bottom";
|
|
13834
|
+
gap: var(--space-4);
|
|
13835
|
+
padding: var(--space-4);
|
|
13836
|
+
overflow-y: auto;
|
|
13837
|
+
/* the background stays usable between the slots */
|
|
13838
|
+
pointer-events: none;
|
|
13839
|
+
}
|
|
13840
|
+
.tf-floating-ui > * {
|
|
13841
|
+
pointer-events: auto;
|
|
13842
|
+
min-width: 0;
|
|
13843
|
+
}
|
|
13844
|
+
.tf-floating-top {
|
|
13845
|
+
grid-area: top;
|
|
13846
|
+
display: flex;
|
|
13847
|
+
flex-wrap: wrap;
|
|
13848
|
+
align-items: center;
|
|
13849
|
+
gap: var(--space-2);
|
|
13850
|
+
}
|
|
13851
|
+
.tf-floating-start {
|
|
13852
|
+
grid-area: start;
|
|
13853
|
+
align-self: start;
|
|
13854
|
+
}
|
|
13855
|
+
.tf-floating-end {
|
|
13856
|
+
grid-area: end;
|
|
13857
|
+
align-self: start;
|
|
13858
|
+
}
|
|
13859
|
+
.tf-floating-bottom {
|
|
13860
|
+
grid-area: bottom;
|
|
13861
|
+
justify-self: center;
|
|
13862
|
+
}
|
|
13863
|
+
.tf-floating-ui > :is(.tf-floating-top, .tf-floating-bottom) {
|
|
13864
|
+
pointer-events: none;
|
|
13865
|
+
}
|
|
13866
|
+
.tf-floating-ui > :is(.tf-floating-top, .tf-floating-bottom) > * {
|
|
13867
|
+
pointer-events: auto;
|
|
13868
|
+
}
|
|
13869
|
+
@container tf-floating (max-width: 720px) {
|
|
13870
|
+
/* on a phone the layout grows with its slots and the background fills behind them */
|
|
13871
|
+
.tf-floating-ui {
|
|
13872
|
+
position: relative;
|
|
13873
|
+
min-height: inherit;
|
|
13874
|
+
overflow: visible;
|
|
13875
|
+
grid-template-columns: minmax(0, 1fr);
|
|
13876
|
+
grid-template-rows: auto auto minmax(120px, 1fr) auto auto;
|
|
13877
|
+
grid-template-areas:
|
|
13878
|
+
"top"
|
|
13879
|
+
"start"
|
|
13880
|
+
"."
|
|
13881
|
+
"end"
|
|
13882
|
+
"bottom";
|
|
13883
|
+
gap: var(--space-3);
|
|
13884
|
+
padding: var(--space-3);
|
|
13885
|
+
}
|
|
13886
|
+
}
|
|
13887
|
+
|
|
13888
|
+
/* 09-motion.css */
|
|
13889
|
+
/* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
|
|
13890
|
+
/* Motion: leaving layers, reveal on scroll, page transitions, the expressive level.
|
|
13891
|
+
*
|
|
13892
|
+
* Levels come from `data-motion` (tokens.css): "standard", "expressive" (longer, staggered page
|
|
13893
|
+
* entrances, more travel) and "off". The reader's reduced-motion setting always means off. Only
|
|
13894
|
+
* transform, opacity and (expressive Halo) a short blur move; everything else stays put.
|
|
13895
|
+
*/
|
|
13896
|
+
|
|
13897
|
+
/* ── Leaving: layers animate out for --dur-exit, then unmount (usePresence) ── */
|
|
13898
|
+
@keyframes tf-out {
|
|
13899
|
+
to {
|
|
13900
|
+
opacity: 0;
|
|
13901
|
+
translate: 0 calc(6px * var(--motion-travel));
|
|
13902
|
+
scale: 0.98;
|
|
13903
|
+
}
|
|
13904
|
+
}
|
|
13905
|
+
@keyframes tf-out-fade {
|
|
13906
|
+
to {
|
|
13907
|
+
opacity: 0;
|
|
13908
|
+
}
|
|
13909
|
+
}
|
|
13910
|
+
@keyframes tf-out-right {
|
|
13911
|
+
to {
|
|
13912
|
+
opacity: 0;
|
|
13913
|
+
translate: calc(40px * var(--motion-travel)) 0;
|
|
13914
|
+
}
|
|
13915
|
+
}
|
|
13916
|
+
@keyframes tf-out-left {
|
|
13917
|
+
to {
|
|
13918
|
+
opacity: 0;
|
|
13919
|
+
translate: calc(-40px * var(--motion-travel)) 0;
|
|
13920
|
+
}
|
|
13921
|
+
}
|
|
13922
|
+
@keyframes tf-out-up {
|
|
13923
|
+
to {
|
|
13924
|
+
opacity: 0;
|
|
13925
|
+
translate: 0 calc(-40px * var(--motion-travel));
|
|
13926
|
+
}
|
|
13927
|
+
}
|
|
13928
|
+
@keyframes tf-out-down {
|
|
13929
|
+
to {
|
|
13930
|
+
opacity: 0;
|
|
13931
|
+
translate: 0 calc(16px * var(--motion-travel));
|
|
13932
|
+
}
|
|
13933
|
+
}
|
|
13934
|
+
[data-closing] {
|
|
13935
|
+
pointer-events: none;
|
|
13936
|
+
}
|
|
13937
|
+
.tf-popover[data-closing],
|
|
13938
|
+
.tf-hovercard[data-closing],
|
|
13939
|
+
.tf-modal-wrap[data-closing] .tf-modal,
|
|
13940
|
+
.tf-overlay[data-closing] :is(.tf-modal, .tf-confirm),
|
|
13941
|
+
.tf-palette-wrap[data-closing] .tf-palette {
|
|
13942
|
+
animation: tf-out var(--dur-exit) var(--ease-in-out) forwards;
|
|
13943
|
+
}
|
|
13944
|
+
.tf-tooltip[data-closing],
|
|
13945
|
+
.tf-modal-wrap[data-closing] .tf-backdrop,
|
|
13946
|
+
.tf-overlay[data-closing] .tf-backdrop,
|
|
13947
|
+
.tf-palette-wrap[data-closing],
|
|
13948
|
+
.tf-drawer-wrap[data-closing] {
|
|
13949
|
+
animation: tf-out-fade var(--dur-exit) var(--ease-in-out) forwards;
|
|
13950
|
+
}
|
|
13951
|
+
.tf-drawer-wrap[data-closing] .tf-drawer {
|
|
13952
|
+
animation: tf-out-right var(--dur-exit) var(--ease-in-out) forwards;
|
|
13953
|
+
}
|
|
13954
|
+
.tf-drawer-wrap[data-closing] .tf-drawer.side-left {
|
|
13955
|
+
animation-name: tf-out-left;
|
|
13956
|
+
}
|
|
13957
|
+
.tf-drawer-wrap[data-closing] .tf-drawer.side-top {
|
|
13958
|
+
animation-name: tf-out-up;
|
|
13959
|
+
}
|
|
13960
|
+
.tf-drawer-wrap[data-closing] .tf-drawer.side-bottom,
|
|
13961
|
+
.tf-toast[data-closing] {
|
|
13962
|
+
animation: tf-out-down var(--dur-exit) var(--ease-in-out) forwards;
|
|
13963
|
+
}
|
|
13964
|
+
|
|
13965
|
+
/* ── Reveal: a Stagger below the fold waits until it scrolls into view ── */
|
|
13966
|
+
.tf-stagger[data-reveal="waiting"] > *,
|
|
13967
|
+
.tf-stagger[data-reveal="waiting"] > * * {
|
|
13968
|
+
animation-play-state: paused;
|
|
13969
|
+
}
|
|
13970
|
+
|
|
13971
|
+
/* ── Page transitions (startViewTransition, Next.js and React view transitions) ── */
|
|
13972
|
+
@keyframes tf-vt-out {
|
|
13973
|
+
to {
|
|
13974
|
+
opacity: 0;
|
|
13975
|
+
translate: 0 calc(-6px * var(--motion-travel));
|
|
13976
|
+
}
|
|
13977
|
+
}
|
|
13978
|
+
@keyframes tf-vt-in {
|
|
13979
|
+
from {
|
|
13980
|
+
opacity: 0;
|
|
13981
|
+
translate: 0 calc(10px * var(--motion-travel));
|
|
13982
|
+
}
|
|
13983
|
+
}
|
|
13984
|
+
:root::view-transition-old(root) {
|
|
13985
|
+
animation: tf-vt-out var(--dur-base) var(--ease-in-out) both;
|
|
13986
|
+
}
|
|
13987
|
+
:root::view-transition-new(root) {
|
|
13988
|
+
animation: tf-vt-in var(--dur-enter) var(--ease-out) both;
|
|
13989
|
+
}
|
|
13990
|
+
|
|
13991
|
+
/* ── Expressive: things come into focus as they rise (Halo; Pro keeps a blur of 0) ── */
|
|
13992
|
+
@keyframes tf-focus-in {
|
|
13993
|
+
from {
|
|
13994
|
+
filter: blur(var(--motion-blur));
|
|
13995
|
+
}
|
|
13996
|
+
to {
|
|
13997
|
+
filter: none;
|
|
13998
|
+
}
|
|
13999
|
+
}
|
|
14000
|
+
[data-motion="expressive"] :is(.tf-stagger > *, .tf-in) {
|
|
14001
|
+
animation-name: tf-rise, tf-focus-in;
|
|
14002
|
+
}
|
|
14003
|
+
[data-motion="expressive"] .tf-topbar {
|
|
14004
|
+
animation-name: tf-drop, tf-focus-in;
|
|
14005
|
+
}
|
|
14006
|
+
|
|
14007
|
+
/* 10-ambient.css */
|
|
14008
|
+
/* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
|
|
14009
|
+
/* Ambient: a calm, living background for glass UI. Soft colour fields from the kit (pastels in
|
|
14010
|
+
* Halo, a faint aurora in Pro) drift slowly; a photo or video can take their place under a scrim.
|
|
14011
|
+
* The drift only moves (transform), stops with motion off and pauses off screen.
|
|
14012
|
+
*/
|
|
14013
|
+
:where(:has(> .tf-ambient:not(.fixed))) {
|
|
14014
|
+
position: relative;
|
|
14015
|
+
isolation: isolate;
|
|
14016
|
+
}
|
|
14017
|
+
.tf-ambient {
|
|
14018
|
+
position: absolute;
|
|
14019
|
+
inset: 0;
|
|
14020
|
+
z-index: -1;
|
|
14021
|
+
overflow: hidden;
|
|
14022
|
+
background: var(--ambient-base);
|
|
14023
|
+
pointer-events: none;
|
|
14024
|
+
}
|
|
14025
|
+
.tf-ambient.fixed {
|
|
14026
|
+
position: fixed;
|
|
14027
|
+
}
|
|
14028
|
+
.tf-ambient-field {
|
|
14029
|
+
position: absolute;
|
|
14030
|
+
width: 75%;
|
|
14031
|
+
aspect-ratio: 1;
|
|
14032
|
+
border-radius: var(--radius-1);
|
|
14033
|
+
background: radial-gradient(closest-side, var(--field), transparent);
|
|
14034
|
+
animation: tf-ambient-drift 34s var(--ease-in-out) infinite alternate;
|
|
14035
|
+
}
|
|
14036
|
+
.tf-ambient-field:nth-child(1) {
|
|
14037
|
+
top: -30%;
|
|
14038
|
+
left: -15%;
|
|
14039
|
+
}
|
|
14040
|
+
.tf-ambient-field:nth-child(2) {
|
|
14041
|
+
top: -10%;
|
|
14042
|
+
right: -25%;
|
|
14043
|
+
animation-duration: 41s;
|
|
14044
|
+
animation-direction: alternate-reverse;
|
|
14045
|
+
}
|
|
14046
|
+
.tf-ambient-field:nth-child(3) {
|
|
14047
|
+
bottom: -35%;
|
|
14048
|
+
left: 10%;
|
|
14049
|
+
animation-duration: 47s;
|
|
14050
|
+
}
|
|
14051
|
+
.tf-ambient-field:nth-child(4) {
|
|
14052
|
+
bottom: -25%;
|
|
14053
|
+
right: -10%;
|
|
14054
|
+
animation-duration: 38s;
|
|
14055
|
+
animation-direction: alternate-reverse;
|
|
14056
|
+
}
|
|
14057
|
+
.tf-ambient-field:nth-child(n + 5) {
|
|
14058
|
+
top: 20%;
|
|
14059
|
+
left: 30%;
|
|
14060
|
+
width: 55%;
|
|
14061
|
+
animation-duration: 52s;
|
|
14062
|
+
}
|
|
14063
|
+
@keyframes tf-ambient-drift {
|
|
14064
|
+
to {
|
|
14065
|
+
translate: 12% 9%;
|
|
14066
|
+
scale: 1.15;
|
|
14067
|
+
}
|
|
14068
|
+
}
|
|
14069
|
+
.tf-ambient.still .tf-ambient-field,
|
|
14070
|
+
.tf-ambient[data-paused] .tf-ambient-field {
|
|
14071
|
+
animation-play-state: paused;
|
|
14072
|
+
}
|
|
14073
|
+
.tf-ambient-media {
|
|
14074
|
+
position: absolute;
|
|
14075
|
+
inset: 0;
|
|
14076
|
+
width: 100%;
|
|
14077
|
+
height: 100%;
|
|
14078
|
+
object-fit: cover;
|
|
14079
|
+
}
|
|
14080
|
+
.tf-ambient.media::after {
|
|
14081
|
+
content: "";
|
|
14082
|
+
position: absolute;
|
|
14083
|
+
inset: 0;
|
|
14084
|
+
background: var(--ambient-scrim);
|
|
14085
|
+
}
|
|
14086
|
+
@media (prefers-reduced-motion: reduce) {
|
|
14087
|
+
.tf-ambient-field {
|
|
14088
|
+
animation: none;
|
|
14089
|
+
}
|
|
14090
|
+
}
|
|
14091
|
+
[data-motion="off"] .tf-ambient-field {
|
|
14092
|
+
animation: none;
|
|
14093
|
+
}
|
|
14094
|
+
|
|
13358
14095
|
/* 90-pro-look.css */
|
|
13359
14096
|
/* Pro look ("Clean Dark Pro", reference/pro): monochrome surfaces on a visible 1px hairline grid,
|
|
13360
14097
|
square corners (2px on controls), Geist and Geist Mono, colour only for state, dense by default.
|