mnfst 0.5.57 → 0.5.59

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/lib/manifest.css CHANGED
@@ -693,23 +693,48 @@
693
693
  /* Manifest Color Picker */
694
694
 
695
695
  :root {
696
+ --color-picker-swatch: var(--color-line);
697
+ --icon-color-solid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='lucide lucide-paint-roller-icon lucide-paint-roller'%3E%3Crect width='16' height='6' x='2' y='2' rx='2'/%3E%3Cpath d='M10 16v-2a2 2 0 0 1 2-2h8a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2'/%3E%3Crect width='4' height='6' x='8' y='16' rx='1'/%3E%3C/svg%3E");
698
+ --icon-color-gradient: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='lucide lucide-blend-icon lucide-blend'%3E%3Ccircle cx='9' cy='9' r='7'/%3E%3Ccircle cx='15' cy='15' r='7'/%3E%3C/svg%3E");
699
+ --icon-color-library: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='lucide lucide-swatch-book-icon lucide-swatch-book'%3E%3Cpath d='M11 17a4 4 0 0 1-8 0V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2Z'/%3E%3Cpath d='M16.7 13H19a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H7'/%3E%3Cpath d='M 7 17h.01'/%3E%3Cpath d='m11 8 2.3-2.3a2.4 2.4 0 0 1 3.404.004L18.6 7.6a2.4 2.4 0 0 1 .026 3.434L9.9 19.8'/%3E%3C/svg%3E");
700
+ --icon-color-grab: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='lucide lucide-pipette-icon lucide-pipette'%3E%3Cpath d='m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12'/%3E%3Cpath d='m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z'/%3E%3Cpath d='m2 22 .414-.414'/%3E%3C/svg%3E");
696
701
  --icon-alpha-pattern: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2 2'%3E%3Crect width='1' height='1' x='0' y='0' fill='%23808080' opacity='0.15'/%3E%3Crect width='1' height='1' x='1' y='1' fill='%23808080' opacity='0.15'/%3E%3C/svg%3E");
697
702
  }
698
703
 
704
+ @layer components {
705
+
706
+ :where(input[type="color"]) {
707
+ appearance: none;
708
+ -webkit-appearance: none;
709
+
710
+ &::-webkit-color-swatch-wrapper {
711
+ padding: 0;
712
+ }
713
+
714
+ &::-webkit-color-swatch {
715
+ border: 0 none
716
+ }
717
+
718
+ &::-moz-color-swatch {
719
+ border: 0 none
720
+ }
721
+ }
722
+ }
723
+
699
724
  @layer utilities {
700
725
 
701
726
  /* Swatch trigger button */
702
- :where(.colorpicker-swatch):not(.unstyle) {
727
+ :where([x-colorpicker\.swatch], input[type="color"]):not(.unstyle) {
703
728
  position: relative;
704
729
  width: var(--spacing-field-height, 2.25rem);
705
- height: var(--spacing-field-height, 2.25rem);
706
730
  min-width: var(--spacing-field-height, 2.25rem);
707
731
  max-width: var(--spacing-field-height, 2.25rem);
732
+ height: var(--spacing-field-height, 2.25rem);
708
733
  padding: 0;
709
- background: var(--swatch-color, #000000);
734
+ background: var(--color-picker-swatch, #000000);
710
735
  border-width: 1px;
711
736
  border-style: solid;
712
- border-color: oklch(from var(--swatch-color, #000000) calc(l + (0.5 - l) * 0.35) c calc(h + 0));
737
+ border-color: oklch(from var(--color-picker-swatch, #000000) calc(l + (0.5 - l) * 0.35) c calc(h + 0));
713
738
  border-radius: var(--radius, 0.5rem);
714
739
  cursor: pointer;
715
740
  overflow: hidden;
@@ -719,7 +744,7 @@
719
744
  &:active,
720
745
  &:focus,
721
746
  &:focus-visible {
722
- border-color: oklch(from var(--swatch-color, #000000) calc(l + (0.5 - l) * 0.35) c calc(h + 0) / 0.5)
747
+ border-color: oklch(from var(--color-picker-swatch, #000000) calc(l + (0.5 - l) * 0.35) c calc(h + 0) / 0.5)
723
748
  }
724
749
 
725
750
  /* Alpha pattern background */
@@ -737,354 +762,435 @@
737
762
  }
738
763
  }
739
764
 
740
- /* Dropdown menu — unwrapped from :where() to beat base menu[popover] specificity */
741
- [x-colorpicker]:not(.unstyle) {
742
-
743
- /* Resetting dropdown styles */
744
- & :where(hr) {
745
- margin-top: 2px;
746
- margin-bottom: 2px
747
- }
748
-
749
- /* & :where(li, a, button, label) {
750
- width: fit-content;
751
- min-width: var(--spacing-field-height, 2.25rem)
752
- } */
765
+ /* Color picker menu interface */
766
+ :where([x-colorpicker]):not(.unstyle) {
767
+ min-width: 18rem;
768
+ max-width: 18rem;
769
+ max-height: 30rem;
770
+ height: fit-content;
771
+ overflow: hidden;
753
772
 
754
- /* Canvas wrapper */
755
- & .canvas-wrapper {
756
- position: relative;
773
+ /* Tabs wrapper */
774
+ & :where(.tabs-wrapper) {
775
+ display: flex;
757
776
  width: 100%;
758
- aspect-ratio: 1;
759
- overflow: hidden;
760
- cursor: crosshair;
761
- touch-action: none
762
- }
777
+ padding: 2px;
778
+ border-bottom: 1px solid var(--color-line, oklch(80% 0.0029 264.26));
763
779
 
764
- /* Canvas (SV plane) */
765
- & canvas {
766
- display: block;
767
- width: 100%;
768
- height: 100%
780
+ /* Distribute button widths equally */
781
+ & button {
782
+ flex: 1;
783
+ justify-content: center
784
+ }
769
785
  }
770
786
 
771
- /* Reticle indicator */
772
- & .color-reticle {
773
- position: absolute;
774
- width: 0.75rem;
775
- height: 0.75rem;
776
- z-index: 1;
777
- border: 2px solid #ffffff;
778
- border-radius: 50%;
779
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.2);
780
- transform: translate(-50%, -50%);
781
- pointer-events: none;
782
- }
787
+ /* Solid options */
788
+ & [x-colorpicker\.solid] {
783
789
 
784
- /* Optional color controls container */
785
- & .color-controls {
786
- display: flex;
787
- flex-direction: column;
788
- gap: 0.75rem;
789
- padding: 0.75rem
790
- }
790
+ /* Canvas wrapper */
791
+ & :where(.canvas-wrapper) {
792
+ position: relative;
793
+ width: 100%;
794
+ padding: 2px;
795
+ aspect-ratio: 1;
796
+ overflow: hidden;
797
+ cursor: crosshair;
798
+ touch-action: none
799
+ }
791
800
 
792
- /* Shared slider styles */
793
- & input[type=range].hue,
794
- & input[type=range].alpha {
795
- width: 100%;
796
- height: 0.75rem;
797
- padding: 0;
798
- border-radius: 1rem;
799
- appearance: none;
800
- -webkit-appearance: none;
801
- cursor: pointer;
802
- outline: none;
803
- border: none;
804
- background: transparent;
801
+ /* Canvas (SV plane) */
802
+ & canvas {
803
+ display: block;
804
+ width: 100%;
805
+ height: 100%
806
+ }
805
807
 
806
- /* Webkit thumb */
807
- &::-webkit-slider-thumb {
808
- -webkit-appearance: none;
809
- width: 1rem;
810
- height: 1rem;
811
- border-radius: 50%;
812
- background: #ffffff;
808
+ /* Canvas reticle indicator */
809
+ & :where(.color-reticle) {
810
+ position: absolute;
811
+ width: 0.75rem;
812
+ height: 0.75rem;
813
+ z-index: 1;
813
814
  border: 2px solid #ffffff;
814
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.25);
815
- cursor: grab;
816
-
817
- &:active {
818
- cursor: grabbing;
819
- }
815
+ border-radius: 50%;
816
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.2);
817
+ transform: translate(-50%, -50%);
818
+ pointer-events: none
820
819
  }
821
820
 
822
- /* Firefox thumb */
823
- &::-moz-range-thumb {
824
- width: 1rem;
825
- height: 1rem;
826
- border-radius: 50%;
827
- background: #ffffff;
828
- border: 2px solid #ffffff;
829
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.25);
830
- cursor: grab;
821
+ & :where(.solid-options-inputs) {
822
+ display: flex;
823
+ flex-direction: column;
824
+ gap: 0.75rem;
825
+ padding: 0.75rem;
831
826
 
832
- &:active {
833
- cursor: grabbing;
827
+ & div:has(button[x-colorpicker\.set-color-space], input[x-colorpicker\.set-color-value], input[x-colorpicker\.set-alpha-value]) {
828
+ display: flex;
829
+ width: 100%
834
830
  }
835
831
  }
836
832
 
837
- /* Webkit track */
838
- &::-webkit-slider-runnable-track {
839
- height: 0.75rem;
840
- border-radius: 1rem
841
- }
842
-
843
- /* Firefox track */
844
- &::-moz-range-track {
833
+ /* Shared range styles */
834
+ & input[x-colorpicker\.set-hue],
835
+ & input[x-colorpicker\.set-alpha] {
836
+ width: 100%;
845
837
  height: 0.75rem;
846
- border-radius: 1rem
847
- }
848
- }
849
-
850
- /* Hue slider - static rainbow gradient */
851
- & input[type=range].hue {
852
- &::-webkit-slider-runnable-track {
853
- background: linear-gradient(to right,
854
- hsl(0 100% 50%), hsl(60 100% 50%), hsl(120 100% 50%),
855
- hsl(180 100% 50%), hsl(240 100% 50%), hsl(300 100% 50%),
856
- hsl(360 100% 50%))
857
- }
838
+ padding: 0;
839
+ border-radius: 1rem;
840
+ appearance: none;
841
+ -webkit-appearance: none;
842
+ cursor: pointer;
843
+ outline: none;
844
+ border: none;
845
+ background: transparent;
858
846
 
859
- &::-moz-range-track {
860
- background: linear-gradient(to right,
861
- hsl(0 100% 50%), hsl(60 100% 50%), hsl(120 100% 50%),
862
- hsl(180 100% 50%), hsl(240 100% 50%), hsl(300 100% 50%),
863
- hsl(360 100% 50%))
864
- }
865
- }
847
+ /* Webkit thumb */
848
+ &::-webkit-slider-thumb {
849
+ -webkit-appearance: none;
850
+ width: 1rem;
851
+ height: 1rem;
852
+ border-radius: 50%;
853
+ background: #ffffff;
854
+ border: 2px solid #ffffff;
855
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.25);
856
+ cursor: grab;
857
+
858
+ &:active {
859
+ cursor: grabbing
860
+ }
861
+ }
866
862
 
867
- /* Alpha slider - checkerboard + color gradient (set via JS --cp-color) */
868
- & input[type=range].alpha {
869
- --cp-color: rgb(0, 0, 0);
870
- position: relative;
863
+ /* Firefox thumb */
864
+ &::-moz-range-thumb {
865
+ width: 1rem;
866
+ height: 1rem;
867
+ border-radius: 50%;
868
+ background: #ffffff;
869
+ border: 2px solid #ffffff;
870
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.25);
871
+ cursor: grab;
872
+
873
+ &:active {
874
+ cursor: grabbing
875
+ }
876
+ }
871
877
 
872
- &::-webkit-slider-runnable-track {
873
- background:
874
- linear-gradient(to right, transparent, var(--cp-color)),
875
- repeating-conic-gradient(#e0e0e0 0% 25%, #ffffff 0% 50%) 0 0 / 0.5rem 0.5rem
876
- }
878
+ /* Webkit track */
879
+ &::-webkit-slider-runnable-track {
880
+ height: 0.75rem;
881
+ border-radius: 1rem
882
+ }
877
883
 
878
- &::-moz-range-track {
879
- background:
880
- linear-gradient(to right, transparent, var(--cp-color)),
881
- repeating-conic-gradient(#e0e0e0 0% 25%, #ffffff 0% 50%) 0 0 / 0.5rem 0.5rem
884
+ /* Firefox track */
885
+ &::-moz-range-track {
886
+ height: 0.75rem;
887
+ border-radius: 1rem
888
+ }
882
889
  }
883
- }
884
890
 
885
- /* Color space selector */
886
- & select.color-format {
887
- width: 8ch;
888
- padding-inline-start: 0;
889
- padding-inline-end: 0;
890
- font-size: 0.6875rem;
891
+ /* Hue range */
892
+ & input[x-colorpicker\.set-hue] {
893
+ &::-webkit-slider-runnable-track {
894
+ background: linear-gradient(to right,
895
+ hsl(0 100% 50%), hsl(60 100% 50%), hsl(120 100% 50%),
896
+ hsl(180 100% 50%), hsl(240 100% 50%), hsl(300 100% 50%),
897
+ hsl(360 100% 50%))
898
+ }
891
899
 
892
- &::picker-icon {
893
- display: none
900
+ &::-moz-range-track {
901
+ background: linear-gradient(to right,
902
+ hsl(0 100% 50%), hsl(60 100% 50%), hsl(120 100% 50%),
903
+ hsl(180 100% 50%), hsl(240 100% 50%), hsl(300 100% 50%),
904
+ hsl(360 100% 50%))
905
+ }
894
906
  }
895
- }
896
907
 
897
- /* Color value input */
898
- & input.color-value {
899
- flex: 1;
900
- padding-inline-end: 0;
901
- font-size: 50%
902
- }
908
+ /* Alpha range */
909
+ & input[x-colorpicker\.set-alpha] {
910
+ --color-picker-alpha: rgb(0, 0, 0);
911
+ position: relative;
903
912
 
904
- /* Alpha value input — hide spin buttons */
905
- & input.alpha-value {
906
- width: 6ch;
907
- padding-inline-end: 0;
908
- font-size: 50%;
909
- -moz-appearance: textfield;
913
+ &::-webkit-slider-runnable-track {
914
+ background:
915
+ linear-gradient(to right, transparent, var(--color-picker-alpha)),
916
+ var(--icon-alpha-pattern) 0 0 / 0.5rem 0.5rem
917
+ }
910
918
 
911
- &::-webkit-inner-spin-button,
912
- &::-webkit-outer-spin-button {
913
- -webkit-appearance: none;
914
- margin: 0
919
+ &::-moz-range-track {
920
+ background:
921
+ linear-gradient(to right, transparent, var(--color-picker-alpha)),
922
+ var(--icon-alpha-pattern) 0 0 / 0.5rem 0.5rem
923
+ }
915
924
  }
916
- }
917
925
 
918
- /* Gradient layers container */
919
- & .gradient-layers {
920
- display: flex;
921
- flex-direction: column;
922
- gap: 0.5rem;
923
- }
924
-
925
- /* Floating menus (non-popover, manually positioned) */
926
- & .layer-angle-menu,
927
- & .stop-floating-menu {
928
- display: none;
929
- flex-direction: column;
930
- min-width: 140px;
931
- margin: 0;
932
- padding: 0.25rem;
933
- list-style: none;
934
- background: var(--color-popover-surface, oklch(100% 0 0));
935
- border-radius: var(--radius, 0.5rem);
936
- box-shadow: rgba(15, 15, 15, 0.05) 0px 0px 0px 1px, rgba(15, 15, 15, 0.1) 0px 3px 6px, rgba(15, 15, 15, 0.2) 0px 9px 24px;
937
- z-index: 100;
926
+ /* Color space button */
927
+ & button[x-colorpicker\.set-color-space] {
928
+ justify-content: center;
929
+ width: 7ch;
930
+ padding-inline-start: 0;
931
+ padding-inline-end: 0
932
+ }
933
+
934
+ /* Color value input */
935
+ & input[x-colorpicker\.set-color-value] {
936
+ flex: 1;
937
+ padding-inline-end: 0
938
+ }
939
+
940
+ /* Alpha value input */
941
+ & input[x-colorpicker\.set-alpha-value] {
942
+ width: fit-content;
943
+ padding-inline-start: 0;
944
+ text-align: end
945
+ }
946
+ }
947
+
948
+ /* Gradients */
949
+ & [x-colorpicker\.gradient] {
950
+
951
+ /* Gradient layers */
952
+ & :where(.layer-options-wrapper) {
953
+ border-bottom: 1px solid var(--color-line, color-mix(in oklch, oklch(16.6% 0.026 267) 11%, transparent));
954
+
955
+ /* Layer options inputs */
956
+ & :where(.layer-options-inputs) {
957
+ display: flex;
958
+ flex-flow: row nowrap;
959
+ align-items: center;
960
+ padding: 0.5rem;
961
+
962
+ /* Gradient options drodown button */
963
+ & button {
964
+ width: auto;
965
+ justify-content: center
966
+ }
967
+
968
+ /* Gradient angle input wrapper */
969
+ & :where(.layer-angle-wrapper) {
970
+ position: relative;
971
+
972
+ /* Gradient angle input */
973
+ & input[x-colorpicker\.set-angle] {
974
+ width: 5.5ch;
975
+ cursor: ew-resize;
976
+ padding-inline-start: 0;
977
+ padding-inline-end: 0.75rem;
978
+ text-align: end;
979
+
980
+ &:focus {
981
+ cursor: text
982
+ }
983
+ }
984
+
985
+ /* Degree symbol */
986
+ & span {
987
+ position: absolute;
988
+ top: 0;
989
+ right: 0.25rem;
990
+ color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
991
+ }
992
+ }
993
+
994
+ /* Gradient stop bar */
995
+ & [x-colorpicker\.layer-stops-bar] {
996
+ position: relative;
997
+ width: 100%;
998
+ height: 0.75rem;
999
+ margin-inline-start: 1rem;
1000
+ margin-inline-end: 0.5rem;
1001
+ border-radius: 1rem;
1002
+ cursor: pointer;
1003
+ background: var(--color-field-surface, oklch(91.79% 0.0029 264.26));
1004
+
1005
+ /* Stop handle */
1006
+ & :where(.stop-handle) {
1007
+ position: absolute;
1008
+ top: 50%;
1009
+ width: 1rem;
1010
+ height: 1rem;
1011
+ border-radius: 50%;
1012
+ border: 2px solid #ffffff;
1013
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.25);
1014
+ transform: translate(-50%, -50%);
1015
+ cursor: grab;
1016
+ z-index: 1;
1017
+ touch-action: none;
1018
+
1019
+ &:hover {
1020
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.25), 0 1px 5px rgba(0, 0, 0, 0.25)
1021
+ }
1022
+
1023
+ &:active {
1024
+ cursor: grabbing
1025
+ }
1026
+
1027
+ &.active {
1028
+ box-shadow: inset 0 0 0 3px rgba(255, 255, 255, 0.85), 0 1px 5px rgba(0, 0, 0, 1)
1029
+ }
1030
+
1031
+ }
1032
+ }
1033
+ }
938
1034
 
939
- & :where(li) {
940
- display: flex;
941
- align-items: center;
942
- padding: 0.25rem 0.5rem;
943
- font-size: 0.8125rem;
944
- color: var(--color-content-stark, oklch(16.6% 0.026 267));
945
- border-radius: 6px;
946
- cursor: pointer;
947
- user-select: none;
1035
+ /* Solid options */
1036
+ & [x-colorpicker\.solid] {
1037
+ padding: 0;
948
1038
 
949
- &:hover {
950
- background-color: var(--color-field-surface, oklch(91.79% 0.0029 264.26));
951
- }
1039
+ & :where(.canvas-wrapper) {
1040
+ width: calc(100% - 2rem);
1041
+ margin: auto;
1042
+ padding: 0 0 2px 0
1043
+ }
952
1044
 
953
- &.negative:hover {
954
- color: var(--color-negative-content, #ef4444);
1045
+ & :where(.solid-options-inputs) {
1046
+ padding-left: 1rem;
1047
+ padding-right: 1rem
1048
+ }
955
1049
  }
956
1050
  }
957
1051
 
958
- & :where(hr) {
959
- margin: 0.25rem 0;
960
- border: none;
961
- border-top: 1px solid var(--color-line, color-mix(in oklch, oklch(16.6% 0.026 267) 11%, transparent));
962
- }
1052
+ /* Gradient value wrapper */
1053
+ & :where(.gradient-value-wrapper) {
1054
+ padding: 0.5rem;
963
1055
 
964
- & :where(small) {
965
- display: block;
966
- padding: 0.25rem 0.5rem 0.125rem;
967
- font-size: 0.6875rem;
968
- color: var(--color-content-subtle, oklch(52.38% 0.017 264.26));
1056
+ /* Gradient value input */
1057
+ & [x-colorpicker\.set-gradient-value] {
1058
+ resize: none;
1059
+ field-sizing: content
1060
+ }
969
1061
  }
970
1062
  }
971
1063
 
972
- & .layer-angle-menu.show,
973
- & .stop-floating-menu {
974
- display: flex;
975
- }
976
-
977
- /* Stop-floating-menu always shows when present (added to DOM) */
978
- & .stop-floating-menu {
979
- display: flex;
1064
+ /* Hide gradient angle input when the gradient type doesn't use it (holds space via visibility) */
1065
+ & [data-gradient-type="radial"] .layer-angle-wrapper {
1066
+ visibility: hidden
980
1067
  }
981
1068
 
982
- /* Angle input label */
983
- & .layer-angle {
984
- display: inline-flex;
985
- align-items: center;
986
- cursor: ew-resize;
1069
+ /* Library */
1070
+ & [x-colorpicker\.library] {
1071
+ max-height: 30rem;
1072
+ overflow-y: auto;
987
1073
 
988
- & input[type=number] {
989
- width: 4ch;
990
- padding: 0 0.125rem;
991
- font-size: 0.625rem;
992
- font-family: ui-monospace, monospace;
993
- text-align: right;
994
- background: transparent;
995
- border: none;
996
- color: var(--color-content-stark, oklch(16.6% 0.026 267));
997
- outline: none;
998
- cursor: ew-resize;
999
- -moz-appearance: textfield !important;
1000
- appearance: textfield !important;
1001
-
1002
- &:focus {
1003
- cursor: text;
1004
- background-color: var(--color-field-surface, oklch(91.79% 0.0029 264.26));
1005
- border-radius: 0.125rem;
1074
+ /* Library wrapper */
1075
+ & :where(.library-wrapper) {
1076
+ display: flex;
1077
+ flex-flow: column;
1078
+ gap: 1rem;
1079
+ width: 100%;
1080
+ padding: 1rem 1rem 4rem 1rem;
1081
+
1082
+ /* Group wrapper */
1083
+ & :where(.library-group) {
1084
+ display: flex;
1085
+ flex-direction: column;
1086
+ width: 100%;
1087
+ padding-bottom: 1rem;
1088
+ gap: 0.5rem;
1089
+
1090
+ /* Only apply border to all except last library-group */
1091
+ &:not(:last-child) {
1092
+ border-bottom: 1px solid var(--color-line, color-mix(in oklch, oklch(16.6% 0.026 267) 11%, transparent));
1093
+ }
1094
+
1095
+ /* Palette wrapper */
1096
+ & :where(.library-palette) {
1097
+ display: grid;
1098
+ grid-template-columns: repeat(11, 1fr);
1099
+ gap: 1px;
1100
+
1101
+ /* Swatch buttons */
1102
+ & button[x-colorpicker\.apply-color] {
1103
+ min-width: 0;
1104
+ width: 100%;
1105
+ max-width: 1.375rem;
1106
+ min-height: 0;
1107
+ height: auto;
1108
+ max-height: 1.375rem;
1109
+ aspect-ratio: 1/1;
1110
+ border-radius: calc(var(--radius, 0.5rem) / 2);
1111
+ border: 1px solid rgba(255, 255, 255, 0.15);
1112
+
1113
+ &:hover {
1114
+ border: 1px solid rgba(255, 255, 255, 0.35)
1115
+ }
1116
+
1117
+ &.active {
1118
+ border: 1px solid rgba(255, 255, 255, 1);
1119
+ box-shadow: inset 0 0 0 3px rgba(255, 255, 255, 0.85), 0 0 1px rgba(0, 0, 0, 1), inset 0 0 0 4px rgba(0, 0, 0, 0.25)
1120
+ }
1121
+ }
1122
+ }
1006
1123
  }
1007
1124
  }
1008
-
1009
- & span {
1010
- font-size: 0.625rem;
1011
- color: var(--color-content-subtle, oklch(52.38% 0.017 264.26));
1012
- pointer-events: none;
1013
- user-select: none;
1014
- }
1015
1125
  }
1126
+ }
1016
1127
 
1017
- /* Gradient stop bar */
1018
- & .gradient-layer {
1019
- position: relative;
1020
- width: 100%;
1021
- height: 0.75rem;
1022
- border-radius: 1rem;
1023
- cursor: pointer;
1024
- background: var(--color-field-surface, oklch(91.79% 0.0029 264.26));
1128
+ /* Colorpicker inside dropdown menu */
1129
+ :where(menu[popover][x-colorpicker]:not(.unstyle)) {
1130
+ padding: 0;
1131
+
1132
+ & .tabs-wrapper button {
1133
+ border: 1px solid var(--color-popover-surface, oklch(100% 0 0))
1025
1134
  }
1135
+ }
1026
1136
 
1027
- & .stop-handle {
1028
- position: absolute;
1029
- top: 50%;
1030
- width: 1rem;
1031
- height: 1rem;
1032
- border-radius: 50%;
1033
- border: 2px solid #ffffff;
1034
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.25);
1035
- transform: translate(-50%, -50%);
1036
- cursor: grab;
1037
- z-index: 1;
1038
- touch-action: none;
1137
+ /* Library wrapper inside dropdown menu */
1138
+ :where(menu[popover]:not(.unstyle) [x-colorpicker\.library], .dropdown-menu:not(.unstyle) [x-colorpicker\.library]) {
1139
+ /* max-height: initial !important;
1140
+ overflow: visible !important; */
1039
1141
 
1040
- &.active {
1041
- box-shadow: 0 0 0 2px var(--color-brand-content, #de6618), 0 1px 3px rgba(0, 0, 0, 0.25);
1042
- }
1142
+ & :where(.library-wrapper) {
1143
+ padding: 0.5rem 0.5rem 4rem 0.5rem !important;
1043
1144
 
1044
- &:active {
1045
- cursor: grabbing;
1046
- }
1047
1145
  }
1048
1146
 
1049
- /* Stop context menu */
1050
- & .stop-context-menu {
1051
- min-width: 140px;
1147
+ & :where(small) {
1148
+ padding-inline-start: 0
1052
1149
  }
1150
+ }
1053
1151
 
1054
- /* Eyedropper button */
1055
- & .eyedropper {}
1152
+ /* Colorpicker button icons */
1153
+ :where(.color-icon-solid, .color-icon-gradient, .color-icon-library, .color-icon-grab, .gradient-layer-icon-linear, .gradient-layer-icon-radial, .gradient-layer-icon-conic) {
1154
+ height: calc(var(--spacing-field-height, 2.25rem) / 2);
1155
+ max-height: 1rem;
1156
+ aspect-ratio: 1/1;
1157
+ background-color: currentColor
1158
+ }
1056
1159
 
1057
- /* Swatches grid */
1058
- & .swatches {
1059
- display: flex;
1060
- flex-wrap: wrap;
1061
- gap: 0.25rem;
1062
-
1063
- & [data-color] {
1064
- width: 1.25rem;
1065
- height: 1.25rem;
1066
- border-radius: calc(var(--radius, 0.5rem) - 0.125rem);
1067
- border: 1px solid var(--color-line, color-mix(in oklch, oklch(16.6% 0.026 267) 11%, transparent));
1068
- cursor: pointer;
1069
- transition: var(--transition, all .05s ease-in-out);
1160
+ /* Colorpicker dialog */
1161
+ :where(dialog[x-colorpicker]) {
1162
+ border-radius: calc(var(--radius, 0.5rem))
1163
+ }
1070
1164
 
1071
- &:hover {
1072
- scale: 1.15;
1073
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2)
1074
- }
1075
- }
1076
- }
1165
+ :where(.color-icon-solid) {
1166
+ mask-image: var(--icon-color-solid)
1167
+ }
1168
+
1169
+ :where(.color-icon-gradient) {
1170
+ mask-image: var(--icon-color-gradient)
1171
+ }
1172
+
1173
+ :where(.color-icon-library) {
1174
+ mask-image: var(--icon-color-library)
1175
+ }
1176
+
1177
+ :where(.color-icon-grab) {
1178
+ mask-image: var(--icon-color-grab)
1179
+ }
1180
+
1181
+ .gradient-layer-icon-linear {
1182
+ background: linear-gradient(to right, var(--color-content-neutral, oklch(48.26% 0.0365 255.09)), color-mix(in oklch, var(--color-content-neutral, oklch(48.26% 0.0365 255.09)) 0%, transparent 100%));
1183
+ border-radius: 50%
1184
+ }
1185
+
1186
+ .gradient-layer-icon-radial {
1187
+ background: radial-gradient(var(--color-content-neutral, oklch(48.26% 0.0365 255.09)), color-mix(in oklch, var(--color-content-neutral, oklch(48.26% 0.0365 255.09)) 0%, transparent 100%));
1188
+ border-radius: 50%
1077
1189
  }
1078
1190
 
1079
- /* Hide number input spin buttons inside colorpicker (high specificity, flat selectors) */
1080
- menu[popover].colorpicker .layer-angle input[type=number]::-webkit-inner-spin-button,
1081
- menu[popover].colorpicker .layer-angle input[type=number]::-webkit-outer-spin-button {
1082
- -webkit-appearance: none !important;
1083
- appearance: none !important;
1084
- margin: 0 !important;
1085
- display: none !important;
1086
- width: 0 !important;
1087
- height: 0 !important;
1191
+ .gradient-layer-icon-conic {
1192
+ background: conic-gradient(var(--color-content-neutral, oklch(48.26% 0.0365 255.09)), color-mix(in oklch, var(--color-content-neutral, oklch(48.26% 0.0365 255.09)) 0%, transparent 100%));
1193
+ border-radius: 50%
1088
1194
  }
1089
1195
  }
1090
1196
 
@@ -1272,7 +1378,7 @@
1272
1378
 
1273
1379
  @layer components {
1274
1380
 
1275
- :where(menu[popover]):not(.unstyle) {
1381
+ :where(menu[popover], .dropdown-menu):not(.unstyle) {
1276
1382
  position-try-fallbacks: flip-inline, flip-block, flip-start;
1277
1383
  position-area: end span-end;
1278
1384
  inset: auto;
@@ -1300,7 +1406,7 @@
1300
1406
  align-items: center;
1301
1407
  width: 100%;
1302
1408
  max-width: 100%;
1303
- min-height: 2rem;
1409
+ min-height: var(--spacing-field-height, 2.25rem);
1304
1410
  padding-inline-start: 0.5rem;
1305
1411
  padding-inline-end: 0.5rem;
1306
1412
  font-weight: normal;
@@ -3208,7 +3314,7 @@
3208
3314
 
3209
3315
  /* Selected */
3210
3316
  :where(.selected) {
3211
- background-color: color-mix(in oklch, var(--color-field-surface, oklch(91.79% 0.0029 264.26)) 25%, transparent);
3317
+ background-color: var(--color-field-surface, oklch(91.79% 0.0029 264.26))
3212
3318
  }
3213
3319
 
3214
3320
  /* Transparent */
@@ -3296,6 +3402,20 @@
3296
3402
  }
3297
3403
  }
3298
3404
 
3405
+ /* No spinners */
3406
+ .no-spinner {
3407
+ -moz-appearance: textfield !important;
3408
+ appearance: textfield !important;
3409
+
3410
+ &::-webkit-inner-spin-button,
3411
+ &::-webkit-outer-spin-button {
3412
+ -webkit-appearance: none;
3413
+ appearance: none;
3414
+ display: none;
3415
+ margin: 0;
3416
+ }
3417
+ }
3418
+
3299
3419
  /* Banner overlays */
3300
3420
  :where(.overlay-dark, .overlay-light) {
3301
3421
  position: relative;