@planningcenter/topbar 12.4.0 → 12.4.1-qa-959.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/topbar.css CHANGED
@@ -504,24 +504,72 @@ Caused by products overriding .topbar-wrap’s z-index.
504
504
  max-height: calc(100% - var(--topbar-height) - var(--t-spacing-3));
505
505
  }
506
506
 
507
- /* Placeholder until design lands: just enough to tell which product is selected. */
508
- .tab-dz8ki[aria-selected="true"] {
509
- background-color: var(--t-fill-color-interaction);
510
- color: var(--t-text-color-inverted);
511
- font-weight: var(--t-font-weight-semibold);
507
+ .searchButton-fYa5- {
508
+ display: inline-flex;
509
+ align-items: center;
510
+ justify-content: center;
511
+ flex-shrink: 0;
512
+ width: var(--topbar-nav-link-height);
513
+ height: var(--topbar-nav-link-height);
514
+ padding: 0;
515
+ margin-right: var(--t-spacing-half);
516
+ background-color: var(--topbar-nav-link-background-color-active);
517
+ color: var(--topbar-nav-link-font-color);
518
+ border: var(--t-border-width) solid var(--topbar-nav-link-border-color-active);
519
+ border-radius: var(--topbar-nav-link-border-radius);
520
+ cursor: pointer;
521
+ transition: var(--topbar-nav-link-transition);
512
522
  }
513
523
 
514
- /* Placeholder until design lands: just enough to see which result is highlighted. */
515
- .result-Thq2C {
516
- display: block;
524
+ /*
525
+ * At phone widths, where the small topbar shows, it sits bare in the header,
526
+ * the same target as the avatar's.
527
+ */
528
+ @media (max-width: 599px) {
529
+ .searchButton-fYa5- {
530
+ width: var(--t-container-size-xl);
531
+ height: var(--t-container-size-xl);
532
+ margin-right: 0;
533
+ background-color: transparent;
534
+ color: var(--t-text-color-headline);
535
+ border: 0;
536
+ border-radius: 0;
537
+ }
517
538
  }
518
539
 
519
- .result-Thq2C[aria-selected="true"] {
520
- background-color: var(--t-fill-color-interaction);
521
- color: var(--t-text-color-inverted);
540
+ .modal-NR3TO {
541
+ --product-search-padding-inline: var(--t-spacing-2);
542
+ --product-search-padding-block: var(--t-spacing-2);
543
+ --product-search-tab-padding-inline: var(--t-spacing-2);
544
+ --product-search-heading-inset: calc(
545
+ var(--product-search-tab-padding-inline) + var(--t-border-width)
546
+ );
547
+
548
+ height: 640px;
549
+ max-height: calc(100vh - var(--t-spacing-3) * 2);
550
+ /* Keeps the results panel's background inside the rounded corners. */
551
+ overflow: hidden;
522
552
  }
523
553
 
524
- .visuallyHidden-S9VG5 {
554
+ /*
555
+ * Tapestry's .tds-modal sets padding and border on the same element with
556
+ * equal weight, and some products load Tapestry after topbar. The modal's ID
557
+ * outranks it whatever the order. Only these two properties use it, so the
558
+ * phone-width .modal rules below still override the rest.
559
+ */
560
+ .modal-NR3TO#product_search_modal {
561
+ padding: 0;
562
+ border: var(--t-border-width) solid var(--t-border-color);
563
+ }
564
+
565
+ /* Fits mobile Safari's visible viewport, between its toolbars. */
566
+ @supports (height: 100dvh) {
567
+ .modal-NR3TO {
568
+ max-height: calc(100dvh - var(--t-spacing-3) * 2);
569
+ }
570
+ }
571
+
572
+ .visuallyHidden-C28ju {
525
573
  position: absolute;
526
574
  width: 1px;
527
575
  height: 1px;
@@ -530,6 +578,615 @@ Caused by products overriding .topbar-wrap’s z-index.
530
578
  white-space: nowrap;
531
579
  }
532
580
 
581
+ /* Scrolls the results under the product picker, tabs or dropdown. */
582
+ .panel-HlF7S {
583
+ flex: 1;
584
+ min-height: 0;
585
+ padding: var(--product-search-padding-block)
586
+ var(--product-search-results-inset, var(--product-search-padding-inline));
587
+ /* Lets results lay out by the panel's width rather than the viewport's. */
588
+ container-type: inline-size;
589
+ scroll-padding-block: var(--product-search-padding-block);
590
+ overflow-y: auto;
591
+ overscroll-behavior: contain;
592
+ }
593
+
594
+ /*
595
+ * Phone widths, where the small topbar shows (DisplaySwitch's default "xs"
596
+ * and "sm" breakpoints). The modal fills the screen rather than floating at a
597
+ * desktop height, with tighter padding above and below each section.
598
+ * Result rows and headings pad themselves by --product-search-row-inset,
599
+ * narrower here so the highlight sits closer to the content, and the panel's
600
+ * sides take that off to line their images and text up with the search icon.
601
+ * There are no tabs here, so headings line up with the results instead.
602
+ */
603
+ @media (max-width: 599px) {
604
+ .modal-NR3TO {
605
+ --product-search-padding-block: var(--t-spacing-2);
606
+ --product-search-row-inset: var(--t-spacing-1);
607
+ --product-search-heading-inset: var(--product-search-row-inset);
608
+ --product-search-results-inset: calc(
609
+ var(--product-search-padding-inline) - var(--product-search-row-inset)
610
+ );
611
+
612
+ height: calc(100vh - var(--t-spacing-3) * 2);
613
+ }
614
+
615
+ @supports (height: 100dvh) {
616
+ .modal-NR3TO {
617
+ height: calc(100dvh - var(--t-spacing-3) * 2);
618
+ }
619
+ }
620
+
621
+ /* Section headings pad themselves, so they start just under the select. */
622
+ .panel-HlF7S {
623
+ padding-block-start: 0;
624
+ }
625
+
626
+ /*
627
+ * Tapestry only takes a class for the dialog, so its overlay and frame are
628
+ * reached through it. Top and bottom margins narrow to 8px; the sides keep
629
+ * 16px of backdrop to tap. The frame fills the dynamic viewport, which
630
+ * follows Safari's toolbars as they show and hide. The dialog stretches to
631
+ * fill the frame.
632
+ *
633
+ * Mobile Safari draws the keyboard over the page without shrinking 100dvh,
634
+ * so while it's open the frame sizes to the visible viewport instead. A
635
+ * bottom margin the keyboard's height keeps the overlay's centering above
636
+ * it.
637
+ *
638
+ * Browsers without :has() drop these rules, so the modal keeps its own
639
+ * height there. No @supports selector() guard: consuming apps run this file
640
+ * through libsass, which can't parse it.
641
+ */
642
+ .tds-modal-overlay:has(.modal-NR3TO) {
643
+ --tds-modal-min-margin-block: var(--t-spacing-1);
644
+ }
645
+
646
+ .tds-modal-frame:has(> .modal-NR3TO) {
647
+ --tds-modal-edge-margin-inline: var(--t-spacing-2);
648
+
649
+ height: calc(100vh - var(--t-spacing-1) * 2);
650
+ height: calc(
651
+ var(--visual-viewport-height, 100dvh) - var(--t-spacing-1) * 2
652
+ );
653
+ margin-block-end: calc(100dvh - var(--visual-viewport-height, 100dvh));
654
+ }
655
+
656
+ .tds-modal-frame:has(> .modal-NR3TO) > .modal-NR3TO {
657
+ height: auto;
658
+ max-height: none;
659
+ }
660
+ }
661
+
662
+ .container-YDdM1 {
663
+ display: flex;
664
+ flex-shrink: 0;
665
+ flex-wrap: wrap;
666
+ gap: var(--t-spacing-1);
667
+ /* Each hint pads itself by --t-spacing-1, so its keycaps line up with
668
+ the tabs. */
669
+ padding: var(--t-spacing-half)
670
+ calc(var(--product-search-padding-inline) - var(--t-spacing-1));
671
+ margin: 0;
672
+ list-style: none;
673
+ border-top: var(--t-border-width) solid var(--t-border-color);
674
+ }
675
+
676
+ .hint-017Rd {
677
+ display: flex;
678
+ flex-shrink: 0;
679
+ align-items: center;
680
+ gap: var(--t-spacing-half);
681
+ padding: var(--t-spacing-half) var(--t-spacing-1);
682
+ border-radius: var(--t-border-radius-lg);
683
+ color: var(--t-text-color-placeholder);
684
+ font-size: var(--t-font-size-xs);
685
+ }
686
+
687
+ .keycap-ENJM2 {
688
+ --keycap-size: 20px;
689
+ --keycap-padding: 4px;
690
+
691
+ display: inline-flex;
692
+ align-items: center;
693
+ justify-content: center;
694
+ width: var(--keycap-size);
695
+ height: var(--keycap-size);
696
+ padding: var(--keycap-padding);
697
+ margin-block: var(--t-spacing-fourth);
698
+ background-color: var(--t-fill-color-neutral-070);
699
+ color: var(--t-text-color-placeholder);
700
+ font-family: inherit;
701
+ font-size: calc(var(--keycap-size) - var(--keycap-padding) * 2);
702
+ font-weight: var(--t-font-weight-semibold);
703
+ border-radius: var(--t-border-radius-md);
704
+ }
705
+
706
+ .keycap-ENJM2 svg {
707
+ flex-shrink: 0;
708
+ width: 1.4em;
709
+ width: 2cap;
710
+ height: 1.4em;
711
+ height: 2cap;
712
+ stroke-width: 2;
713
+ }
714
+
715
+ .labels-GHPqL {
716
+ display: grid;
717
+ overflow: clip;
718
+ }
719
+
720
+ .labels-GHPqL > * {
721
+ grid-area: 1 / 1;
722
+ }
723
+
724
+ @property --copied {
725
+ syntax: "<percentage>";
726
+ inherits: true;
727
+ initial-value: 0%;
728
+ }
729
+
730
+ .copied-DUFa1 {
731
+ position: relative;
732
+ background-color: color-mix(
733
+ in srgb,
734
+ var(--t-fill-color-status-success-ghost) calc(var(--copied) * 0.3),
735
+ transparent
736
+ );
737
+ animation:
738
+ copied-enter-k4P4y var(--copied-enter) var(--t-ease-out) forwards,
739
+ copied-exit-oCDAu var(--copied-exit) var(--t-ease-out)
740
+ calc(var(--copied-enter) + var(--copied-active)) forwards;
741
+ }
742
+
743
+ .copied-DUFa1 .keycap-ENJM2 {
744
+ animation: copied-keypress-znahZ 350ms cubic-bezier(0.34, 1.56, 0.64, 1);
745
+ }
746
+
747
+ .copied-DUFa1 .labels-GHPqL > :first-child {
748
+ translate: 0 calc(var(--copied) * -1);
749
+ }
750
+
751
+ .copied-DUFa1 .labels-GHPqL > :last-child {
752
+ translate: 0 calc(100% - var(--copied));
753
+ }
754
+
755
+ .copied-DUFa1::after {
756
+ content: "";
757
+ position: absolute;
758
+ inset: 0;
759
+ border-radius: inherit;
760
+ pointer-events: none;
761
+ border: 2px solid var(--t-border-color-status-success);
762
+ opacity: var(--copied);
763
+ }
764
+
765
+ @keyframes copied-enter-k4P4y {
766
+ to { --copied: 100% }
767
+ }
768
+
769
+ @keyframes copied-exit-oCDAu {
770
+ from { --copied: 100% }
771
+ to { --copied: 0% }
772
+ }
773
+
774
+ @keyframes copied-keypress-znahZ {
775
+ 20%,
776
+ 26% {
777
+ translate: 0 1px;
778
+ scale: 0.88;
779
+ }
780
+ }
781
+
782
+ @media (prefers-reduced-motion: reduce) {
783
+ .copied-DUFa1 {
784
+ --copied: 100%;
785
+ animation: none;
786
+ }
787
+
788
+ .copied-DUFa1 .keycap-ENJM2 {
789
+ animation: none;
790
+ }
791
+ }
792
+
793
+ .icon-XKLvN {
794
+ position: relative;
795
+ display: block;
796
+ flex-shrink: 0;
797
+ }
798
+
799
+ .icon-XKLvN::before {
800
+ content: "";
801
+ position: absolute;
802
+ inset: 12.5%;
803
+ background-color: hsl(0, 0%, 100%);
804
+ border-radius: 20%;
805
+ }
806
+
807
+ .squircle-JCHr6 {
808
+ position: absolute;
809
+ inset: 0;
810
+ mask-size: 100%;
811
+ }
812
+
813
+ .picker-iuzzj {
814
+ flex-shrink: 0;
815
+ padding: 0 var(--product-search-padding-inline) var(--t-spacing-1);
816
+ }
817
+
818
+ .option--7LXg {
819
+ display: inline-flex;
820
+ align-items: center;
821
+ gap: var(--t-spacing-1);
822
+ }
823
+
824
+ .tablist-7ASvc {
825
+ display: flex;
826
+ flex-shrink: 0;
827
+ gap: var(--t-spacing-half);
828
+ padding-inline: var(--product-search-padding-inline);
829
+ padding-top: var(--t-spacing-2);
830
+ border-bottom: var(--t-border-width) solid var(--t-border-color);
831
+ }
832
+
833
+ .tab-dz8ki {
834
+ position: relative;
835
+ display: inline-flex;
836
+ align-items: center;
837
+ justify-content: center;
838
+ gap: var(--t-spacing-1);
839
+ min-width: 48px;
840
+ height: 40px;
841
+ padding: 0 var(--product-search-tab-padding-inline);
842
+ margin-bottom: calc(var(--t-border-width) * -1);
843
+ background-color: var(--t-fill-color-neutral-070);
844
+ color: var(--t-text-color-secondary);
845
+ font-size: var(--t-font-size-md);
846
+ border: var(--t-border-width) solid transparent;
847
+ border-bottom-color: var(--t-border-color);
848
+ border-radius: var(--t-border-radius-md) var(--t-border-radius-md) 0 0;
849
+ cursor: pointer;
850
+ }
851
+
852
+ .tab-dz8ki:hover {
853
+ background-color: var(--t-fill-color-neutral-060);
854
+ }
855
+
856
+ .tab-dz8ki:focus-visible {
857
+ outline: none;
858
+ }
859
+
860
+ /* Set by useKeyboardFocus: Safari leaves :focus-visible off focus the modal's
861
+ focus scope moves here by script, as it does when Tab is pressed. */
862
+ .tab-dz8ki[data-focus-visible] {
863
+ z-index: 1;
864
+ }
865
+
866
+ .tab-dz8ki[data-focus-visible]::after {
867
+ content: "";
868
+ position: absolute;
869
+ /* Measured from inside the tab's border, so step out past it too. */
870
+ inset: calc((var(--t-focus-ring-offset) + var(--t-border-width)) * -1);
871
+ border-radius: calc(var(--t-border-radius-md) + var(--t-focus-ring-offset));
872
+ box-shadow: 0 0 0 var(--t-focus-ring-width) var(--t-focus-ring-color);
873
+ pointer-events: none;
874
+ }
875
+
876
+ .tab-dz8ki[aria-selected="true"] {
877
+ background-color: var(--t-surface-color-card);
878
+ border-color: var(--t-border-color);
879
+ border-bottom-color: var(--t-surface-color-card);
880
+ cursor: default;
881
+ }
882
+
883
+ .blank_state-wMOWN {
884
+ max-width: 300px;
885
+ margin-inline: auto;
886
+ padding-block: var(--t-spacing-2);
887
+ text-align: center;
888
+ }
889
+ @media screen and (min-width: 600px) {
890
+ .blank_state-wMOWN {
891
+ padding-block: var(--t-spacing-5);
892
+ }
893
+ }
894
+ .blank_state-wMOWN h2 {
895
+ color: var(--t-text-color-headline);
896
+ font-size: var(--t-font-size-xl);
897
+ font-weight: var(--t-font-weight-semibold);
898
+ margin: 0;
899
+ }
900
+ .blank_state-wMOWN p {
901
+ color: var(--t-text-color-secondary);
902
+ font-size: var(--t-font-size-md);
903
+ margin: 0;
904
+ }
905
+
906
+ .image-uy0Fd {
907
+ color: var(--t-fill-color-status-info-ghost);
908
+ }
909
+ .image-uy0Fd svg {
910
+ width: 30vw;
911
+ max-width: 240px;
912
+ height: auto;
913
+ }
914
+ @media screen and (min-width: 600px) {
915
+ .image-uy0Fd svg {
916
+ width: 18vw;
917
+ }
918
+ }
919
+ :root[data-color-mode="dark"] .image-uy0Fd {
920
+ color: var(--t-fill-color-status-neutral-ghost);
921
+ }
922
+ @media (prefers-color-scheme: dark) {
923
+ :root[data-color-mode="system"] .image-uy0Fd {
924
+ color: var(--t-fill-color-status-neutral-ghost);
925
+ }
926
+ }
927
+ .result-Thq2C {
928
+ display: flex;
929
+ align-items: center;
930
+ gap: 12px;
931
+ min-height: 56px;
932
+ padding: var(--t-spacing-1) var(--product-search-row-inset, 12px);
933
+ color: var(--t-text-color);
934
+ text-decoration: none;
935
+ border-radius: var(--t-border-radius-md);
936
+ /* Taps get the highlight below instead of the browser's grey flash. */
937
+ -webkit-tap-highlight-color: transparent;
938
+ }
939
+
940
+ .result-Thq2C:hover,
941
+ .result-Thq2C:focus,
942
+ .result-Thq2C:active,
943
+ .result-Thq2C:visited {
944
+ color: var(--t-text-color);
945
+ text-decoration: none;
946
+ }
947
+
948
+ .result-Thq2C[aria-selected="true"],
949
+ .result-Thq2C:active {
950
+ background-color: var(--t-fill-color-button-interaction-ghost-hover);
951
+ }
952
+
953
+ .title-KYUEn {
954
+ flex-shrink: 0;
955
+ max-width: 60%;
956
+ overflow: hidden;
957
+ font-size: var(--t-font-size-lg);
958
+ text-overflow: ellipsis;
959
+ white-space: nowrap;
960
+ }
961
+
962
+ .subtitle-R2haq {
963
+ min-width: 0;
964
+ overflow: hidden;
965
+ color: var(--t-text-color-secondary);
966
+ font-size: var(--t-font-size-sm);
967
+ text-overflow: ellipsis;
968
+ white-space: nowrap;
969
+ }
970
+
971
+ .image-KVDor {
972
+ --result-image-size: 32px;
973
+
974
+ position: relative;
975
+ flex-shrink: 0;
976
+ width: var(--result-image-size);
977
+ height: var(--result-image-size);
978
+ }
979
+
980
+ .avatar-6Gh62,
981
+ .photo-FZR3Q {
982
+ display: block;
983
+ width: 100%;
984
+ height: 100%;
985
+ object-fit: cover;
986
+ }
987
+
988
+ .avatar-6Gh62 {
989
+ border-radius: 50%;
990
+ }
991
+
992
+ .photo-FZR3Q {
993
+ border-radius: var(--t-border-radius-md);
994
+ }
995
+
996
+ .badge-trUKt {
997
+ position: absolute;
998
+ right: -4px;
999
+ bottom: -4px;
1000
+ filter: drop-shadow(0 1px 1px var(--t-fill-color-transparency-dark-static-010));
1001
+ }
1002
+
1003
+ /*
1004
+ * Too narrow for the title and meta to share a line, as on a phone, so they
1005
+ * stack beside a smaller image.
1006
+ */
1007
+ @container (max-width: 480px) {
1008
+ .result-Thq2C {
1009
+ display: grid;
1010
+ grid-template-columns: auto minmax(0, 1fr);
1011
+ align-content: center;
1012
+ gap: 0 12px;
1013
+ }
1014
+
1015
+ .image-KVDor {
1016
+ --result-image-size: 28px;
1017
+
1018
+ grid-row: span 2;
1019
+ align-self: center;
1020
+ }
1021
+
1022
+ .title-KYUEn {
1023
+ max-width: none;
1024
+ }
1025
+ }
1026
+
1027
+ .message-1-PP- {
1028
+ margin: 0;
1029
+ padding-block: var(--t-spacing-5);
1030
+ color: var(--t-text-color-secondary);
1031
+ text-align: center;
1032
+ }
1033
+
1034
+ .heading-LioUF {
1035
+ padding: var(--t-spacing-half)
1036
+ var(--product-search-heading-inset, var(--product-search-row-inset, 12px));
1037
+ color: var(--t-text-color-secondary);
1038
+ font-size: var(--t-font-size-sm);
1039
+ }
1040
+
1041
+ .group-cKChg:not(:first-child) > .heading-LioUF {
1042
+ margin-top: var(--t-spacing-2);
1043
+ }
1044
+
1045
+ /*
1046
+ * The field is a box of its own, so keyboard focus can ring it like an input.
1047
+ * Padding all around gives the ring room, and the row's padding is that much
1048
+ * less than the section padding, so the icon lines up with the tabs.
1049
+ */
1050
+ .row-5P7UQ {
1051
+ --header-inset-block: var(--t-spacing-1);
1052
+ --header-inset-inline: var(--t-spacing-half);
1053
+
1054
+ display: flex;
1055
+ flex-shrink: 0;
1056
+ align-items: center;
1057
+ gap: var(--t-spacing-1);
1058
+ padding-top: calc(
1059
+ var(--product-search-padding-block) - var(--header-inset-block)
1060
+ );
1061
+ padding-inline: calc(
1062
+ var(--product-search-padding-inline) - var(--header-inset-inline)
1063
+ );
1064
+ padding-bottom: calc(var(--t-spacing-1-half) - var(--header-inset-block));
1065
+ }
1066
+
1067
+ .header-sXEyG {
1068
+ display: flex;
1069
+ flex: 1;
1070
+ align-items: center;
1071
+ gap: var(--t-spacing-1);
1072
+ min-width: 0;
1073
+ padding: var(--header-inset-block) var(--header-inset-inline);
1074
+ border-radius: var(--t-border-radius-lg);
1075
+ outline: var(--t-focus-ring-width) solid transparent;
1076
+ cursor: text;
1077
+ transition: outline-color var(--t-duration-200) var(--t-ease-in-out);
1078
+ }
1079
+
1080
+ /* Only from the keyboard, since a click or tap already shows where it is. */
1081
+ .header-sXEyG:has([data-focus-visible]) {
1082
+ outline-color: var(--t-focus-ring-color);
1083
+ }
1084
+
1085
+ /* A 48px tap target around the 32px button, like the small topbar's. */
1086
+ .closeButton-rPJJV {
1087
+ position: relative;
1088
+ flex-shrink: 0;
1089
+ }
1090
+
1091
+ .closeButton-rPJJV::before {
1092
+ position: absolute;
1093
+ inset: calc((var(--t-container-size-xl) - var(--t-container-size-md)) / -2);
1094
+ content: "";
1095
+ }
1096
+
1097
+ /*
1098
+ * Products style their own inputs, often by element and type with states
1099
+ * like :focus. There's only ever one product search field, so these rules
1100
+ * add its ID, set as a plain string in SearchInput, which outranks any
1101
+ * product rule without one.
1102
+ */
1103
+ .input-YQkTC#product_search {
1104
+ position: static;
1105
+ flex: 1;
1106
+ min-width: 0;
1107
+ height: auto;
1108
+ margin: 0;
1109
+ padding: 0;
1110
+ background: none;
1111
+ color: var(--t-text-color);
1112
+ font: inherit;
1113
+ font-size: var(--t-font-size-xl);
1114
+ border: 0 solid transparent;
1115
+ border-radius: 0;
1116
+ box-shadow: none;
1117
+ outline: none;
1118
+ }
1119
+
1120
+ .input-YQkTC#product_search::placeholder {
1121
+ color: var(--t-text-color-placeholder);
1122
+ }
1123
+
1124
+ .input-YQkTC#product_search::-webkit-search-cancel-button {
1125
+ appearance: none;
1126
+ }
1127
+
1128
+ .clearButton-9Yh9w {
1129
+ --clear-button-size: 20px;
1130
+ --clear-button-background: var(--t-fill-color-neutral-030);
1131
+ --clear-button-background-hover: var(--t-fill-color-neutral-025);
1132
+
1133
+ display: inline-flex;
1134
+ align-items: center;
1135
+ justify-content: center;
1136
+ flex-shrink: 0;
1137
+ width: var(--clear-button-size);
1138
+ height: var(--clear-button-size);
1139
+ padding: 0;
1140
+ background: var(--clear-button-background);
1141
+ color: #fff;
1142
+ border: 0;
1143
+ border-radius: var(--t-border-radius-round);
1144
+ cursor: pointer;
1145
+ transition: var(--topbar-slight-transition-background);
1146
+ }
1147
+
1148
+ .clearButton-9Yh9w:hover {
1149
+ background-color: var(--clear-button-background-hover);
1150
+ }
1151
+
1152
+ :root[data-color-mode="dark"] .clearButton-9Yh9w {
1153
+ --clear-button-background: var(--t-fill-color-neutral-040);
1154
+ --clear-button-background-hover: var(--t-fill-color-neutral-050);
1155
+ }
1156
+
1157
+ @media (prefers-color-scheme: dark) {
1158
+ :root[data-color-mode="system"] .clearButton-9Yh9w {
1159
+ --clear-button-background: var(--t-fill-color-neutral-040);
1160
+ --clear-button-background-hover: var(--t-fill-color-neutral-050);
1161
+ }
1162
+ }
1163
+
1164
+ .clearButton-9Yh9w svg {
1165
+ height: calc(var(--clear-button-size) * 0.65);
1166
+ width: calc(var(--clear-button-size) * 0.65);
1167
+ }
1168
+
1169
+ .spinner-b5tlz {
1170
+ --spinner-size: 54px;
1171
+ --spinner-track-width: 6px;
1172
+ --spinner-track-color: var(--t-border-color-dim);
1173
+ --spinner-color: var(--t-border-color-status-info);
1174
+
1175
+ display: inline-block;
1176
+ box-sizing: border-box;
1177
+ width: var(--spinner-size);
1178
+ height: var(--spinner-size);
1179
+ border: var(--spinner-track-width) solid var(--spinner-track-color);
1180
+ border-bottom-color: var(--spinner-color);
1181
+ border-radius: 50%;
1182
+ animation: rotation-q2xiP .75s linear infinite;
1183
+ }
1184
+
1185
+ @keyframes rotation-q2xiP {
1186
+ to {
1187
+ transform: rotate(1turn);
1188
+ }
1189
+ }
533
1190
  .route--8BWe {
534
1191
  font-size: var(--topbar-nav-link-font-size);
535
1192
  font-family: inherit;
@@ -576,6 +1233,9 @@ Caused by products overriding .topbar-wrap’s z-index.
576
1233
  }
577
1234
 
578
1235
  .trigger-wrap-Jd-KR {
1236
+ /* Lets the trigger shrink, truncating the org name, when the nav runs out
1237
+ of room */
1238
+ min-width: 0;
579
1239
  margin-left: var(--t-spacing-1);
580
1240
  position: relative;
581
1241
  white-space: nowrap;
@@ -591,6 +1251,7 @@ Caused by products overriding .topbar-wrap’s z-index.
591
1251
  border: var(--t-border-width) solid var(--topbar-nav-link-border-color-active);
592
1252
  border-radius: var(--topbar-nav-link-border-radius);
593
1253
  min-width: var(--t-container-size-md);
1254
+ max-width: 100%;
594
1255
  transition: var(--topbar-nav-link-transition);
595
1256
  display: flex;
596
1257
  align-items: center;
@@ -601,6 +1262,7 @@ Caused by products overriding .topbar-wrap’s z-index.
601
1262
  }
602
1263
 
603
1264
  .trigger-WgRT5 svg {
1265
+ flex-shrink: 0;
604
1266
  transition: transform var(--topbar-slight-transition);
605
1267
  /* Negative margin ensures button is a circle when orgname isn’t visible */
606
1268
  margin-left: calc(var(--t-spacing-1) * -1);
@@ -915,13 +1577,35 @@ Caused by products overriding .topbar-wrap’s z-index.
915
1577
  background-color: var(--t-fill-color-button-interaction-outline-active);
916
1578
  }
917
1579
 
1580
+ /*
1581
+ * Spaces the header's buttons on the right. Each is the same touch target;
1582
+ * the padding keeps the avatar, and the title's width, where they were
1583
+ * before search joined it.
1584
+ */
1585
+ .actions-INQ7- {
1586
+ display: flex;
1587
+ flex-shrink: 0;
1588
+ align-items: center;
1589
+ padding-inline: var(--t-spacing-1-half) var(--t-spacing-1);
1590
+ }
1591
+
918
1592
  .profile-button-a2WO2 {
1593
+ display: flex;
1594
+ align-items: center;
1595
+ justify-content: center;
1596
+ width: var(--t-container-size-xl);
1597
+ height: var(--t-container-size-xl);
1598
+ padding: 0;
919
1599
  background-color: transparent;
920
1600
  border-width: 0;
921
- padding: var(--t-spacing-2);
922
1601
  appearance: none;
923
1602
  }
924
1603
 
1604
+ /* Centers the avatar in its target, without its own leading margin. */
1605
+ .profile-button-a2WO2 > div {
1606
+ margin-left: 0;
1607
+ }
1608
+
925
1609
  .debug-pco-resource-sLteM {
926
1610
  display: flex;
927
1611
  flex-direction: column;
@@ -1425,7 +2109,7 @@ Caused by products overriding .topbar-wrap’s z-index.
1425
2109
  align-items: center;
1426
2110
  justify-content: center;
1427
2111
  gap: var(--t-spacing-half);
1428
- height: var(--t-container-size-md);
2112
+ height: var(--t-container-size-sm);
1429
2113
  padding: 0 var(--t-spacing-1);
1430
2114
  border: var(--t-border-width) solid transparent;
1431
2115
  border-radius: var(--t-border-radius-md);
@@ -1468,6 +2152,7 @@ Caused by products overriding .topbar-wrap’s z-index.
1468
2152
  .sparkle-ruJGP {
1469
2153
  position: relative;
1470
2154
  flex-shrink: 0;
2155
+ color: var(--t-fill-color-tag-indigo-040);
1471
2156
  }
1472
2157
 
1473
2158
  .label-4NUGB {