uivisor 0.1.10 → 0.2.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.
Files changed (2) hide show
  1. package/dist/overlay/index.js +1084 -27
  2. package/package.json +1 -1
@@ -411,7 +411,8 @@ var ICONS = {
411
411
  tablet: sv('<rect x="3.3" y="2.2" width="9.4" height="11.6" rx="1.6"/><path d="M7 11.7h2"/>'),
412
412
  desktop: sv('<rect x="1.8" y="2.8" width="12.4" height="8" rx="1"/><path d="M5.8 14h4.4 M8 10.8v3.2"/>'),
413
413
  live: sv('<circle cx="8" cy="8" r="2"/><path d="M4.6 4.6a4.8 4.8 0 0 0 0 6.8 M11.4 4.6a4.8 4.8 0 0 1 0 6.8"/>'),
414
- all: sv('<path d="M8 2.5v11 M3.2 5.2l9.6 5.6 M12.8 5.2l-9.6 5.6"/>')
414
+ all: sv('<path d="M8 2.5v11 M3.2 5.2l9.6 5.6 M12.8 5.2l-9.6 5.6"/>'),
415
+ grip: '<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><circle cx="6" cy="4" r="1.05"/><circle cx="6" cy="8" r="1.05"/><circle cx="6" cy="12" r="1.05"/><circle cx="10" cy="4" r="1.05"/><circle cx="10" cy="8" r="1.05"/><circle cx="10" cy="12" r="1.05"/></svg>'
415
416
  };
416
417
  var SECTIONS = [
417
418
  {
@@ -736,6 +737,609 @@ function collectVarNames(rule, out) {
736
737
  if (inner) for (const r of Array.from(inner)) collectVarNames(r, out);
737
738
  }
738
739
 
740
+ // src/overlay/cssData.ts
741
+ var CSS_PROPERTY_DATA = [
742
+ { "property": "display", "category": "Layout", "type": "enum", "keywords": ["block", "inline", "inline-block", "flex", "inline-flex", "grid", "inline-grid", "flow-root", "none", "contents", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-cell", "table-column-group", "table-column", "table-caption", "list-item", "ruby"] },
743
+ { "property": "position", "category": "Layout", "type": "enum", "keywords": ["static", "relative", "absolute", "fixed", "sticky"] },
744
+ { "property": "top", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"], "box": "inset" },
745
+ { "property": "right", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"], "box": "inset" },
746
+ { "property": "bottom", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"], "box": "inset" },
747
+ { "property": "left", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"], "box": "inset" },
748
+ { "property": "inset", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"], "shorthand": true },
749
+ { "property": "inset-block", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"], "shorthand": true },
750
+ { "property": "inset-inline", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"], "shorthand": true },
751
+ { "property": "inset-block-start", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"] },
752
+ { "property": "inset-block-end", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"] },
753
+ { "property": "inset-inline-start", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"] },
754
+ { "property": "inset-inline-end", "category": "Layout", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw"] },
755
+ { "property": "float", "category": "Layout", "type": "enum", "keywords": ["left", "right", "none", "inline-start", "inline-end"] },
756
+ { "property": "clear", "category": "Layout", "type": "enum", "keywords": ["none", "left", "right", "both", "inline-start", "inline-end"] },
757
+ { "property": "visibility", "category": "Layout", "type": "enum", "keywords": ["visible", "hidden", "collapse"], "inherited": true },
758
+ { "property": "z-index", "category": "Layout", "type": "integer", "keywords": ["auto"] },
759
+ { "property": "box-sizing", "category": "Layout", "type": "enum", "keywords": ["content-box", "border-box"] },
760
+ { "property": "overflow", "category": "Layout", "type": "enum", "keywords": ["visible", "hidden", "clip", "scroll", "auto"], "shorthand": true },
761
+ { "property": "overflow-x", "category": "Layout", "type": "enum", "keywords": ["visible", "hidden", "clip", "scroll", "auto"] },
762
+ { "property": "overflow-y", "category": "Layout", "type": "enum", "keywords": ["visible", "hidden", "clip", "scroll", "auto"] },
763
+ { "property": "overflow-block", "category": "Layout", "type": "enum", "keywords": ["visible", "hidden", "clip", "scroll", "auto"] },
764
+ { "property": "overflow-inline", "category": "Layout", "type": "enum", "keywords": ["visible", "hidden", "clip", "scroll", "auto"] },
765
+ { "property": "overflow-clip-margin", "category": "Layout", "type": "length", "keywords": ["content-box", "padding-box", "border-box"], "units": ["px", "em", "rem"] },
766
+ { "property": "isolation", "category": "Layout", "type": "enum", "keywords": ["auto", "isolate"] },
767
+ { "property": "contain", "category": "Layout", "type": "enum", "keywords": ["none", "strict", "content", "size", "inline-size", "layout", "style", "paint"] },
768
+ { "property": "content-visibility", "category": "Layout", "type": "enum", "keywords": ["visible", "auto", "hidden"] },
769
+ { "property": "contain-intrinsic-size", "category": "Layout", "type": "length", "keywords": ["none", "auto"], "units": ["px", "em", "rem"], "shorthand": true },
770
+ { "property": "contain-intrinsic-width", "category": "Layout", "type": "length", "keywords": ["none", "auto"], "units": ["px", "em", "rem"] },
771
+ { "property": "contain-intrinsic-height", "category": "Layout", "type": "length", "keywords": ["none", "auto"], "units": ["px", "em", "rem"] },
772
+ { "property": "contain-intrinsic-block-size", "category": "Layout", "type": "length", "keywords": ["none", "auto"], "units": ["px", "em", "rem"] },
773
+ { "property": "contain-intrinsic-inline-size", "category": "Layout", "type": "length", "keywords": ["none", "auto"], "units": ["px", "em", "rem"] },
774
+ { "property": "order", "category": "Layout", "type": "integer" },
775
+ { "property": "flex", "category": "Flexbox", "type": "shorthand", "shorthand": true },
776
+ { "property": "flex-grow", "category": "Flexbox", "type": "number" },
777
+ { "property": "flex-shrink", "category": "Flexbox", "type": "number" },
778
+ { "property": "flex-basis", "category": "Flexbox", "type": "length", "keywords": ["auto", "content", "max-content", "min-content", "fit-content"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
779
+ { "property": "flex-direction", "category": "Flexbox", "type": "enum", "keywords": ["row", "row-reverse", "column", "column-reverse"] },
780
+ { "property": "flex-wrap", "category": "Flexbox", "type": "enum", "keywords": ["nowrap", "wrap", "wrap-reverse"] },
781
+ { "property": "flex-flow", "category": "Flexbox", "type": "shorthand", "keywords": ["row", "row-reverse", "column", "column-reverse", "nowrap", "wrap", "wrap-reverse"], "shorthand": true },
782
+ { "property": "justify-content", "category": "Flexbox", "type": "enum", "keywords": ["normal", "flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly", "start", "end", "left", "right", "stretch", "safe", "unsafe"] },
783
+ { "property": "align-items", "category": "Flexbox", "type": "enum", "keywords": ["normal", "stretch", "flex-start", "flex-end", "center", "baseline", "first baseline", "last baseline", "start", "end", "self-start", "self-end", "safe", "unsafe", "anchor-center"] },
784
+ { "property": "align-content", "category": "Flexbox", "type": "enum", "keywords": ["normal", "flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly", "stretch", "start", "end", "baseline", "first baseline", "last baseline", "safe", "unsafe"] },
785
+ { "property": "align-self", "category": "Flexbox", "type": "enum", "keywords": ["auto", "normal", "stretch", "flex-start", "flex-end", "center", "baseline", "first baseline", "last baseline", "start", "end", "self-start", "self-end", "safe", "unsafe", "anchor-center"] },
786
+ { "property": "justify-self", "category": "Flexbox", "type": "enum", "keywords": ["auto", "normal", "stretch", "flex-start", "flex-end", "center", "baseline", "first baseline", "last baseline", "start", "end", "self-start", "self-end", "left", "right", "safe", "unsafe", "anchor-center"] },
787
+ { "property": "justify-items", "category": "Flexbox", "type": "enum", "keywords": ["normal", "stretch", "flex-start", "flex-end", "center", "baseline", "first baseline", "last baseline", "start", "end", "self-start", "self-end", "left", "right", "legacy", "safe", "unsafe", "anchor-center"] },
788
+ { "property": "place-content", "category": "Flexbox", "type": "shorthand", "keywords": ["normal", "stretch", "flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly", "start", "end", "left", "right", "baseline", "first baseline", "last baseline"], "shorthand": true },
789
+ { "property": "place-items", "category": "Flexbox", "type": "shorthand", "keywords": ["normal", "stretch", "flex-start", "flex-end", "center", "baseline", "first baseline", "last baseline", "start", "end", "self-start", "self-end", "left", "right", "legacy"], "shorthand": true },
790
+ { "property": "place-self", "category": "Flexbox", "type": "shorthand", "keywords": ["auto", "normal", "stretch", "flex-start", "flex-end", "center", "baseline", "first baseline", "last baseline", "start", "end", "self-start", "self-end"], "shorthand": true },
791
+ { "property": "gap", "category": "Flexbox", "type": "shorthand", "keywords": ["normal"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
792
+ { "property": "row-gap", "category": "Flexbox", "type": "length", "keywords": ["normal"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
793
+ { "property": "column-gap", "category": "Flexbox", "type": "length", "keywords": ["normal"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
794
+ { "property": "grid", "category": "Grid", "type": "shorthand", "shorthand": true },
795
+ { "property": "grid-template", "category": "Grid", "type": "shorthand", "shorthand": true },
796
+ { "property": "grid-template-columns", "category": "Grid", "type": "string", "keywords": ["none", "min-content", "max-content", "auto", "subgrid", "masonry"], "units": ["px", "em", "rem", "%", "fr", "vh", "vw", "ch"] },
797
+ { "property": "grid-template-rows", "category": "Grid", "type": "string", "keywords": ["none", "min-content", "max-content", "auto", "subgrid", "masonry"], "units": ["px", "em", "rem", "%", "fr", "vh", "vw", "ch"] },
798
+ { "property": "grid-template-areas", "category": "Grid", "type": "string", "keywords": ["none"] },
799
+ { "property": "grid-auto-columns", "category": "Grid", "type": "length", "keywords": ["auto", "min-content", "max-content"], "units": ["px", "em", "rem", "%", "fr", "vh", "vw", "ch"] },
800
+ { "property": "grid-auto-rows", "category": "Grid", "type": "length", "keywords": ["auto", "min-content", "max-content"], "units": ["px", "em", "rem", "%", "fr", "vh", "vw", "ch"] },
801
+ { "property": "grid-auto-flow", "category": "Grid", "type": "enum", "keywords": ["row", "column", "dense"] },
802
+ { "property": "grid-column", "category": "Grid", "type": "shorthand", "keywords": ["auto", "span"], "shorthand": true },
803
+ { "property": "grid-row", "category": "Grid", "type": "shorthand", "keywords": ["auto", "span"], "shorthand": true },
804
+ { "property": "grid-column-start", "category": "Grid", "type": "string", "keywords": ["auto", "span"] },
805
+ { "property": "grid-column-end", "category": "Grid", "type": "string", "keywords": ["auto", "span"] },
806
+ { "property": "grid-row-start", "category": "Grid", "type": "string", "keywords": ["auto", "span"] },
807
+ { "property": "grid-row-end", "category": "Grid", "type": "string", "keywords": ["auto", "span"] },
808
+ { "property": "grid-area", "category": "Grid", "type": "shorthand", "keywords": ["auto", "span"], "shorthand": true },
809
+ { "property": "margin", "category": "Spacing", "type": "shorthand", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin", "shorthand": true },
810
+ { "property": "margin-top", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
811
+ { "property": "margin-right", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
812
+ { "property": "margin-bottom", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
813
+ { "property": "margin-left", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
814
+ { "property": "margin-block", "category": "Spacing", "type": "shorthand", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin", "shorthand": true },
815
+ { "property": "margin-block-start", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
816
+ { "property": "margin-block-end", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
817
+ { "property": "margin-inline", "category": "Spacing", "type": "shorthand", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin", "shorthand": true },
818
+ { "property": "margin-inline-start", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
819
+ { "property": "margin-inline-end", "category": "Spacing", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
820
+ { "property": "padding", "category": "Spacing", "type": "shorthand", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding", "shorthand": true },
821
+ { "property": "padding-top", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
822
+ { "property": "padding-right", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
823
+ { "property": "padding-bottom", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
824
+ { "property": "padding-left", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
825
+ { "property": "padding-block", "category": "Spacing", "type": "shorthand", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding", "shorthand": true },
826
+ { "property": "padding-block-start", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
827
+ { "property": "padding-block-end", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
828
+ { "property": "padding-inline", "category": "Spacing", "type": "shorthand", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding", "shorthand": true },
829
+ { "property": "padding-inline-start", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
830
+ { "property": "padding-inline-end", "category": "Spacing", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
831
+ { "property": "width", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
832
+ { "property": "height", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
833
+ { "property": "min-width", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
834
+ { "property": "max-width", "category": "Sizing", "type": "length", "keywords": ["none", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
835
+ { "property": "min-height", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
836
+ { "property": "max-height", "category": "Sizing", "type": "length", "keywords": ["none", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
837
+ { "property": "aspect-ratio", "category": "Sizing", "type": "number", "keywords": ["auto"] },
838
+ { "property": "block-size", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
839
+ { "property": "inline-size", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
840
+ { "property": "min-block-size", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
841
+ { "property": "max-block-size", "category": "Sizing", "type": "length", "keywords": ["none", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
842
+ { "property": "min-inline-size", "category": "Sizing", "type": "length", "keywords": ["auto", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
843
+ { "property": "max-inline-size", "category": "Sizing", "type": "length", "keywords": ["none", "max-content", "min-content", "fit-content", "stretch"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
844
+ { "property": "object-fit", "category": "Sizing", "type": "enum", "keywords": ["fill", "contain", "cover", "none", "scale-down"] },
845
+ { "property": "object-position", "category": "Sizing", "type": "length", "keywords": ["left", "right", "top", "bottom", "center"], "units": ["px", "%", "em", "rem"] },
846
+ { "property": "border", "category": "Border", "type": "shorthand", "shorthand": true },
847
+ { "property": "border-width", "category": "Border", "type": "shorthand", "shorthand": true },
848
+ { "property": "border-style", "category": "Border", "type": "shorthand", "shorthand": true },
849
+ { "property": "border-color", "category": "Border", "type": "shorthand", "shorthand": true },
850
+ { "property": "border-top", "category": "Border", "type": "shorthand", "shorthand": true },
851
+ { "property": "border-right", "category": "Border", "type": "shorthand", "shorthand": true },
852
+ { "property": "border-bottom", "category": "Border", "type": "shorthand", "shorthand": true },
853
+ { "property": "border-left", "category": "Border", "type": "shorthand", "shorthand": true },
854
+ { "property": "border-top-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "border-width" },
855
+ { "property": "border-right-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "border-width" },
856
+ { "property": "border-bottom-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "border-width" },
857
+ { "property": "border-left-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "border-width" },
858
+ { "property": "border-top-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"], "box": "border-style" },
859
+ { "property": "border-right-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"], "box": "border-style" },
860
+ { "property": "border-bottom-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"], "box": "border-style" },
861
+ { "property": "border-left-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"], "box": "border-style" },
862
+ { "property": "border-top-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"], "box": "border-color" },
863
+ { "property": "border-right-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"], "box": "border-color" },
864
+ { "property": "border-bottom-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"], "box": "border-color" },
865
+ { "property": "border-left-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"], "box": "border-color" },
866
+ { "property": "border-block", "category": "Border", "type": "shorthand", "shorthand": true },
867
+ { "property": "border-block-start", "category": "Border", "type": "shorthand", "shorthand": true },
868
+ { "property": "border-block-end", "category": "Border", "type": "shorthand", "shorthand": true },
869
+ { "property": "border-inline", "category": "Border", "type": "shorthand", "shorthand": true },
870
+ { "property": "border-inline-start", "category": "Border", "type": "shorthand", "shorthand": true },
871
+ { "property": "border-inline-end", "category": "Border", "type": "shorthand", "shorthand": true },
872
+ { "property": "border-block-width", "category": "Border", "type": "shorthand", "shorthand": true },
873
+ { "property": "border-inline-width", "category": "Border", "type": "shorthand", "shorthand": true },
874
+ { "property": "border-block-style", "category": "Border", "type": "shorthand", "shorthand": true },
875
+ { "property": "border-inline-style", "category": "Border", "type": "shorthand", "shorthand": true },
876
+ { "property": "border-block-color", "category": "Border", "type": "shorthand", "shorthand": true },
877
+ { "property": "border-inline-color", "category": "Border", "type": "shorthand", "shorthand": true },
878
+ { "property": "border-block-start-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"] },
879
+ { "property": "border-block-end-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"] },
880
+ { "property": "border-inline-start-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"] },
881
+ { "property": "border-inline-end-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"] },
882
+ { "property": "border-block-start-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] },
883
+ { "property": "border-block-end-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] },
884
+ { "property": "border-inline-start-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] },
885
+ { "property": "border-inline-end-style", "category": "Border", "type": "enum", "keywords": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] },
886
+ { "property": "border-block-start-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"] },
887
+ { "property": "border-block-end-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"] },
888
+ { "property": "border-inline-start-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"] },
889
+ { "property": "border-inline-end-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "transparent"] },
890
+ { "property": "border-radius", "category": "Border", "type": "shorthand", "shorthand": true },
891
+ { "property": "border-top-left-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "radius" },
892
+ { "property": "border-top-right-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "radius" },
893
+ { "property": "border-bottom-right-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "radius" },
894
+ { "property": "border-bottom-left-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "radius" },
895
+ { "property": "border-start-start-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
896
+ { "property": "border-start-end-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
897
+ { "property": "border-end-start-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
898
+ { "property": "border-end-end-radius", "category": "Border", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
899
+ { "property": "border-image", "category": "Border", "type": "shorthand", "shorthand": true },
900
+ { "property": "border-image-source", "category": "Border", "type": "image", "keywords": ["none"] },
901
+ { "property": "border-image-slice", "category": "Border", "type": "number", "keywords": ["fill"], "units": ["%"] },
902
+ { "property": "border-image-width", "category": "Border", "type": "number", "keywords": ["auto"], "units": ["px", "%", "em", "rem"] },
903
+ { "property": "border-image-outset", "category": "Border", "type": "number", "units": ["px", "em", "rem"] },
904
+ { "property": "border-image-repeat", "category": "Border", "type": "enum", "keywords": ["stretch", "repeat", "round", "space"] },
905
+ { "property": "outline", "category": "Border", "type": "shorthand", "shorthand": true },
906
+ { "property": "outline-width", "category": "Border", "type": "length", "keywords": ["thin", "medium", "thick"], "units": ["px", "em", "rem", "vh", "vw", "ch"] },
907
+ { "property": "outline-style", "category": "Border", "type": "enum", "keywords": ["auto", "none", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] },
908
+ { "property": "outline-color", "category": "Border", "type": "color", "keywords": ["currentcolor", "invert"] },
909
+ { "property": "outline-offset", "category": "Border", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"] },
910
+ { "property": "background", "category": "Background", "type": "shorthand", "shorthand": true },
911
+ { "property": "background-color", "category": "Background", "type": "color" },
912
+ { "property": "background-image", "category": "Background", "type": "image" },
913
+ { "property": "background-position", "category": "Background", "type": "shorthand", "keywords": ["top", "right", "bottom", "left", "center"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
914
+ { "property": "background-position-x", "category": "Background", "type": "length", "keywords": ["left", "right", "center"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
915
+ { "property": "background-position-y", "category": "Background", "type": "length", "keywords": ["top", "bottom", "center"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
916
+ { "property": "background-size", "category": "Background", "type": "shorthand", "keywords": ["auto", "cover", "contain"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
917
+ { "property": "background-repeat", "category": "Background", "type": "enum", "keywords": ["repeat", "repeat-x", "repeat-y", "no-repeat", "space", "round"] },
918
+ { "property": "background-attachment", "category": "Background", "type": "enum", "keywords": ["scroll", "fixed", "local"] },
919
+ { "property": "background-clip", "category": "Background", "type": "enum", "keywords": ["border-box", "padding-box", "content-box", "text"] },
920
+ { "property": "background-origin", "category": "Background", "type": "enum", "keywords": ["border-box", "padding-box", "content-box"] },
921
+ { "property": "background-blend-mode", "category": "Background", "type": "enum", "keywords": ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"] },
922
+ { "property": "color", "category": "Typography", "type": "color", "inherited": true },
923
+ { "property": "opacity", "category": "Typography", "type": "number" },
924
+ { "property": "font", "category": "Typography", "type": "shorthand", "inherited": true, "shorthand": true },
925
+ { "property": "font-family", "category": "Typography", "type": "string", "inherited": true },
926
+ { "property": "font-size", "category": "Typography", "type": "length", "keywords": ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "xxx-large", "larger", "smaller"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "inherited": true },
927
+ { "property": "font-size-adjust", "category": "Typography", "type": "number", "keywords": ["none", "ex-height", "cap-height", "ch-width", "ic-width", "ic-height", "from-font"], "inherited": true },
928
+ { "property": "font-weight", "category": "Typography", "type": "integer", "keywords": ["normal", "bold", "bolder", "lighter"], "inherited": true },
929
+ { "property": "font-style", "category": "Typography", "type": "enum", "keywords": ["normal", "italic", "oblique"], "inherited": true },
930
+ { "property": "font-variant", "category": "Typography", "type": "shorthand", "keywords": ["normal", "none", "small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps", "ordinal", "slashed-zero", "lining-nums", "oldstyle-nums", "proportional-nums", "tabular-nums", "diagonal-fractions", "stacked-fractions"], "inherited": true, "shorthand": true },
931
+ { "property": "font-variant-caps", "category": "Typography", "type": "enum", "keywords": ["normal", "small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps"], "inherited": true },
932
+ { "property": "font-variant-numeric", "category": "Typography", "type": "enum", "keywords": ["normal", "ordinal", "slashed-zero", "lining-nums", "oldstyle-nums", "proportional-nums", "tabular-nums", "diagonal-fractions", "stacked-fractions"], "inherited": true },
933
+ { "property": "font-variant-ligatures", "category": "Typography", "type": "enum", "keywords": ["normal", "none", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures", "contextual", "no-contextual"], "inherited": true },
934
+ { "property": "font-variant-east-asian", "category": "Typography", "type": "enum", "keywords": ["normal", "ruby", "jis78", "jis83", "jis90", "jis04", "simplified", "traditional", "full-width", "proportional-width"], "inherited": true },
935
+ { "property": "font-variant-position", "category": "Typography", "type": "enum", "keywords": ["normal", "sub", "super"], "inherited": true },
936
+ { "property": "font-stretch", "category": "Typography", "type": "percentage", "keywords": ["normal", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"], "units": ["%"], "inherited": true },
937
+ { "property": "font-feature-settings", "category": "Typography", "type": "string", "keywords": ["normal"], "inherited": true },
938
+ { "property": "font-variation-settings", "category": "Typography", "type": "string", "keywords": ["normal"], "inherited": true },
939
+ { "property": "font-kerning", "category": "Typography", "type": "enum", "keywords": ["auto", "normal", "none"], "inherited": true },
940
+ { "property": "font-optical-sizing", "category": "Typography", "type": "enum", "keywords": ["auto", "none"], "inherited": true },
941
+ { "property": "font-synthesis", "category": "Typography", "type": "enum", "keywords": ["none", "weight", "style", "small-caps", "position"], "inherited": true, "shorthand": true },
942
+ { "property": "line-height", "category": "Typography", "type": "number", "keywords": ["normal"], "units": ["px", "%", "em", "rem"], "inherited": true },
943
+ { "property": "letter-spacing", "category": "Typography", "type": "length", "keywords": ["normal"], "units": ["px", "em", "rem", "ch"], "inherited": true },
944
+ { "property": "word-spacing", "category": "Typography", "type": "length", "keywords": ["normal"], "units": ["px", "%", "em", "rem"], "inherited": true },
945
+ { "property": "text-align", "category": "Typography", "type": "enum", "keywords": ["start", "end", "left", "right", "center", "justify", "match-parent", "justify-all"], "inherited": true },
946
+ { "property": "text-align-last", "category": "Typography", "type": "enum", "keywords": ["auto", "start", "end", "left", "right", "center", "justify"], "inherited": true },
947
+ { "property": "text-justify", "category": "Typography", "type": "enum", "keywords": ["auto", "none", "inter-word", "inter-character"], "inherited": true },
948
+ { "property": "text-decoration", "category": "Typography", "type": "shorthand", "shorthand": true },
949
+ { "property": "text-decoration-line", "category": "Typography", "type": "enum", "keywords": ["none", "underline", "overline", "line-through", "blink"] },
950
+ { "property": "text-decoration-color", "category": "Typography", "type": "color" },
951
+ { "property": "text-decoration-style", "category": "Typography", "type": "enum", "keywords": ["solid", "double", "dotted", "dashed", "wavy"] },
952
+ { "property": "text-decoration-thickness", "category": "Typography", "type": "length", "keywords": ["auto", "from-font"], "units": ["px", "%", "em", "rem"] },
953
+ { "property": "text-decoration-skip-ink", "category": "Typography", "type": "enum", "keywords": ["auto", "none", "all"], "inherited": true },
954
+ { "property": "text-underline-offset", "category": "Typography", "type": "length", "keywords": ["auto"], "units": ["px", "%", "em", "rem"], "inherited": true },
955
+ { "property": "text-underline-position", "category": "Typography", "type": "enum", "keywords": ["auto", "from-font", "under", "left", "right"], "inherited": true },
956
+ { "property": "text-emphasis", "category": "Typography", "type": "shorthand", "inherited": true, "shorthand": true },
957
+ { "property": "text-emphasis-style", "category": "Typography", "type": "enum", "keywords": ["none", "filled", "open", "dot", "circle", "double-circle", "triangle", "sesame"], "inherited": true },
958
+ { "property": "text-emphasis-color", "category": "Typography", "type": "color", "inherited": true },
959
+ { "property": "text-emphasis-position", "category": "Typography", "type": "enum", "keywords": ["over", "under", "left", "right"], "inherited": true },
960
+ { "property": "text-transform", "category": "Typography", "type": "enum", "keywords": ["none", "capitalize", "uppercase", "lowercase", "full-width", "full-size-kana"], "inherited": true },
961
+ { "property": "text-indent", "category": "Typography", "type": "length", "keywords": ["hanging", "each-line"], "units": ["px", "%", "em", "rem"], "inherited": true },
962
+ { "property": "text-overflow", "category": "Typography", "type": "enum", "keywords": ["clip", "ellipsis"] },
963
+ { "property": "text-shadow", "category": "Typography", "type": "string", "keywords": ["none"], "inherited": true },
964
+ { "property": "white-space", "category": "Typography", "type": "enum", "keywords": ["normal", "nowrap", "pre", "pre-wrap", "pre-line", "break-spaces"], "inherited": true },
965
+ { "property": "white-space-collapse", "category": "Typography", "type": "enum", "keywords": ["collapse", "preserve", "preserve-breaks", "preserve-spaces", "break-spaces"], "inherited": true },
966
+ { "property": "text-wrap", "category": "Typography", "type": "enum", "keywords": ["wrap", "nowrap", "balance", "pretty", "stable"], "inherited": true },
967
+ { "property": "text-wrap-mode", "category": "Typography", "type": "enum", "keywords": ["wrap", "nowrap"], "inherited": true },
968
+ { "property": "text-wrap-style", "category": "Typography", "type": "enum", "keywords": ["auto", "balance", "pretty", "stable"], "inherited": true },
969
+ { "property": "word-break", "category": "Typography", "type": "enum", "keywords": ["normal", "break-all", "keep-all", "break-word", "auto-phrase"], "inherited": true },
970
+ { "property": "line-break", "category": "Typography", "type": "enum", "keywords": ["auto", "loose", "normal", "strict", "anywhere"], "inherited": true },
971
+ { "property": "overflow-wrap", "category": "Typography", "type": "enum", "keywords": ["normal", "break-word", "anywhere"], "inherited": true },
972
+ { "property": "hyphens", "category": "Typography", "type": "enum", "keywords": ["none", "manual", "auto"], "inherited": true },
973
+ { "property": "hyphenate-character", "category": "Typography", "type": "string", "keywords": ["auto"], "inherited": true },
974
+ { "property": "direction", "category": "Typography", "type": "enum", "keywords": ["ltr", "rtl"], "inherited": true },
975
+ { "property": "unicode-bidi", "category": "Typography", "type": "enum", "keywords": ["normal", "embed", "isolate", "bidi-override", "isolate-override", "plaintext"] },
976
+ { "property": "writing-mode", "category": "Typography", "type": "enum", "keywords": ["horizontal-tb", "vertical-rl", "vertical-lr", "sideways-rl", "sideways-lr"], "inherited": true },
977
+ { "property": "text-orientation", "category": "Typography", "type": "enum", "keywords": ["mixed", "upright", "sideways"], "inherited": true },
978
+ { "property": "text-combine-upright", "category": "Typography", "type": "enum", "keywords": ["none", "all", "digits"], "inherited": true },
979
+ { "property": "vertical-align", "category": "Typography", "type": "length", "keywords": ["baseline", "sub", "super", "text-top", "text-bottom", "middle", "top", "bottom"], "units": ["px", "%", "em", "rem"] },
980
+ { "property": "tab-size", "category": "Typography", "type": "number", "units": ["px", "em", "rem"], "inherited": true },
981
+ { "property": "quotes", "category": "Typography", "type": "string", "keywords": ["none", "auto"], "inherited": true },
982
+ { "property": "hanging-punctuation", "category": "Typography", "type": "enum", "keywords": ["none", "first", "last", "force-end", "allow-end"], "inherited": true },
983
+ { "property": "text-rendering", "category": "Typography", "type": "enum", "keywords": ["auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision"], "inherited": true },
984
+ { "property": "-webkit-text-stroke", "category": "Typography", "type": "shorthand", "shorthand": true },
985
+ { "property": "-webkit-text-stroke-width", "category": "Typography", "type": "length", "units": ["px", "em", "rem"] },
986
+ { "property": "-webkit-text-stroke-color", "category": "Typography", "type": "color" },
987
+ { "property": "-webkit-text-fill-color", "category": "Typography", "type": "color" },
988
+ { "property": "-webkit-line-clamp", "category": "Typography", "type": "integer", "keywords": ["none"] },
989
+ { "property": "caret-color", "category": "Typography", "type": "color", "keywords": ["auto"], "inherited": true },
990
+ { "property": "box-shadow", "category": "Effects", "type": "string", "keywords": ["none"] },
991
+ { "property": "filter", "category": "Effects", "type": "string", "keywords": ["none"] },
992
+ { "property": "backdrop-filter", "category": "Effects", "type": "string", "keywords": ["none"] },
993
+ { "property": "mix-blend-mode", "category": "Effects", "type": "enum", "keywords": ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity", "plus-darker", "plus-lighter"] },
994
+ { "property": "clip-path", "category": "Effects", "type": "string", "keywords": ["none", "border-box", "padding-box", "content-box", "margin-box", "fill-box", "stroke-box", "view-box"] },
995
+ { "property": "mask", "category": "Effects", "type": "shorthand", "shorthand": true },
996
+ { "property": "mask-image", "category": "Effects", "type": "image", "keywords": ["none"] },
997
+ { "property": "mask-mode", "category": "Effects", "type": "enum", "keywords": ["alpha", "luminance", "match-source"] },
998
+ { "property": "mask-repeat", "category": "Effects", "type": "enum", "keywords": ["repeat", "repeat-x", "repeat-y", "space", "round", "no-repeat"] },
999
+ { "property": "mask-position", "category": "Effects", "type": "length", "keywords": ["top", "bottom", "left", "right", "center"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
1000
+ { "property": "mask-clip", "category": "Effects", "type": "enum", "keywords": ["border-box", "padding-box", "content-box", "fill-box", "stroke-box", "view-box", "no-clip"] },
1001
+ { "property": "mask-origin", "category": "Effects", "type": "enum", "keywords": ["border-box", "padding-box", "content-box", "fill-box", "stroke-box", "view-box"] },
1002
+ { "property": "mask-size", "category": "Effects", "type": "length", "keywords": ["auto", "cover", "contain"], "units": ["px", "%", "em", "rem", "vh", "vw", "ch"] },
1003
+ { "property": "mask-composite", "category": "Effects", "type": "enum", "keywords": ["add", "subtract", "intersect", "exclude"] },
1004
+ { "property": "mask-type", "category": "Effects", "type": "enum", "keywords": ["luminance", "alpha"] },
1005
+ { "property": "cursor", "category": "Effects", "type": "enum", "keywords": ["auto", "default", "none", "context-menu", "help", "pointer", "progress", "wait", "cell", "crosshair", "text", "vertical-text", "alias", "copy", "move", "no-drop", "not-allowed", "grab", "grabbing", "all-scroll", "col-resize", "row-resize", "n-resize", "e-resize", "s-resize", "w-resize", "ne-resize", "nw-resize", "se-resize", "sw-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "zoom-in", "zoom-out"], "inherited": true },
1006
+ { "property": "accent-color", "category": "Effects", "type": "color", "keywords": ["auto"], "inherited": true },
1007
+ { "property": "color-scheme", "category": "Effects", "type": "enum", "keywords": ["normal", "light", "dark", "only"], "inherited": true },
1008
+ { "property": "transform", "category": "Transform", "type": "string" },
1009
+ { "property": "transform-origin", "category": "Transform", "type": "string" },
1010
+ { "property": "transform-style", "category": "Transform", "type": "enum", "keywords": ["flat", "preserve-3d"] },
1011
+ { "property": "transform-box", "category": "Transform", "type": "enum", "keywords": ["content-box", "border-box", "fill-box", "stroke-box", "view-box"] },
1012
+ { "property": "translate", "category": "Transform", "type": "string" },
1013
+ { "property": "rotate", "category": "Transform", "type": "string" },
1014
+ { "property": "scale", "category": "Transform", "type": "string" },
1015
+ { "property": "perspective", "category": "Transform", "type": "length", "keywords": ["none"], "units": ["px", "em", "rem", "vh", "vw", "ch"] },
1016
+ { "property": "perspective-origin", "category": "Transform", "type": "string" },
1017
+ { "property": "backface-visibility", "category": "Transform", "type": "enum", "keywords": ["visible", "hidden"] },
1018
+ { "property": "transition", "category": "Animation", "type": "shorthand", "shorthand": true },
1019
+ { "property": "transition-property", "category": "Animation", "type": "enum", "keywords": ["none", "all"] },
1020
+ { "property": "transition-duration", "category": "Animation", "type": "time", "units": ["s", "ms"] },
1021
+ { "property": "transition-timing-function", "category": "Animation", "type": "enum", "keywords": ["linear", "ease", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps", "cubic-bezier"] },
1022
+ { "property": "transition-delay", "category": "Animation", "type": "time", "units": ["s", "ms"] },
1023
+ { "property": "transition-behavior", "category": "Animation", "type": "enum", "keywords": ["normal", "allow-discrete"] },
1024
+ { "property": "animation", "category": "Animation", "type": "shorthand", "shorthand": true },
1025
+ { "property": "animation-name", "category": "Animation", "type": "enum", "keywords": ["none"] },
1026
+ { "property": "animation-duration", "category": "Animation", "type": "time", "units": ["s", "ms"] },
1027
+ { "property": "animation-timing-function", "category": "Animation", "type": "enum", "keywords": ["linear", "ease", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps", "cubic-bezier"] },
1028
+ { "property": "animation-delay", "category": "Animation", "type": "time", "units": ["s", "ms"] },
1029
+ { "property": "animation-iteration-count", "category": "Animation", "type": "number", "keywords": ["infinite"] },
1030
+ { "property": "animation-direction", "category": "Animation", "type": "enum", "keywords": ["normal", "reverse", "alternate", "alternate-reverse"] },
1031
+ { "property": "animation-fill-mode", "category": "Animation", "type": "enum", "keywords": ["none", "forwards", "backwards", "both"] },
1032
+ { "property": "animation-play-state", "category": "Animation", "type": "enum", "keywords": ["running", "paused"] },
1033
+ { "property": "animation-composition", "category": "Animation", "type": "enum", "keywords": ["replace", "add", "accumulate"] },
1034
+ { "property": "will-change", "category": "Animation", "type": "enum", "keywords": ["auto", "scroll-position", "contents"] },
1035
+ { "property": "content", "category": "Misc", "type": "string" },
1036
+ { "property": "list-style", "category": "Misc", "type": "shorthand", "inherited": true, "shorthand": true },
1037
+ { "property": "list-style-type", "category": "Misc", "type": "enum", "keywords": ["disc", "circle", "square", "decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-greek", "lower-latin", "upper-latin", "lower-alpha", "upper-alpha", "armenian", "georgian", "cjk-decimal", "cjk-ideographic", "hebrew", "hiragana", "hiragana-iroha", "katakana", "katakana-iroha", "arabic-indic", "bengali", "cambodian", "khmer", "devanagari", "gujarati", "gurmukhi", "kannada", "lao", "malayalam", "myanmar", "oriya", "persian", "tamil", "telugu", "thai", "tibetan", "japanese-formal", "japanese-informal", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "simp-chinese-formal", "simp-chinese-informal", "trad-chinese-formal", "trad-chinese-informal", "disclosure-open", "disclosure-closed", "none"], "inherited": true },
1038
+ { "property": "list-style-position", "category": "Misc", "type": "enum", "keywords": ["inside", "outside"], "inherited": true },
1039
+ { "property": "list-style-image", "category": "Misc", "type": "image", "inherited": true },
1040
+ { "property": "scroll-behavior", "category": "Misc", "type": "enum", "keywords": ["auto", "smooth"] },
1041
+ { "property": "scroll-snap-type", "category": "Misc", "type": "enum", "keywords": ["none", "x", "y", "block", "inline", "both", "mandatory", "proximity"] },
1042
+ { "property": "scroll-snap-align", "category": "Misc", "type": "enum", "keywords": ["none", "start", "end", "center"] },
1043
+ { "property": "scroll-snap-stop", "category": "Misc", "type": "enum", "keywords": ["normal", "always"] },
1044
+ { "property": "scroll-margin", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
1045
+ { "property": "scroll-margin-top", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1046
+ { "property": "scroll-margin-right", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1047
+ { "property": "scroll-margin-bottom", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1048
+ { "property": "scroll-margin-left", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1049
+ { "property": "scroll-margin-block", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
1050
+ { "property": "scroll-margin-inline", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
1051
+ { "property": "scroll-margin-block-start", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1052
+ { "property": "scroll-margin-block-end", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1053
+ { "property": "scroll-margin-inline-start", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1054
+ { "property": "scroll-margin-inline-end", "category": "Misc", "type": "length", "units": ["px", "em", "rem", "vh", "vw", "ch"], "box": "margin" },
1055
+ { "property": "scroll-padding", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
1056
+ { "property": "scroll-padding-top", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1057
+ { "property": "scroll-padding-right", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1058
+ { "property": "scroll-padding-bottom", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1059
+ { "property": "scroll-padding-left", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1060
+ { "property": "scroll-padding-block", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
1061
+ { "property": "scroll-padding-inline", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "shorthand": true },
1062
+ { "property": "scroll-padding-block-start", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1063
+ { "property": "scroll-padding-block-end", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1064
+ { "property": "scroll-padding-inline-start", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1065
+ { "property": "scroll-padding-inline-end", "category": "Misc", "type": "length", "units": ["px", "%", "em", "rem", "vh", "vw", "ch"], "box": "padding" },
1066
+ { "property": "overscroll-behavior", "category": "Misc", "type": "enum", "keywords": ["auto", "contain", "none"], "shorthand": true },
1067
+ { "property": "overscroll-behavior-x", "category": "Misc", "type": "enum", "keywords": ["auto", "contain", "none"] },
1068
+ { "property": "overscroll-behavior-y", "category": "Misc", "type": "enum", "keywords": ["auto", "contain", "none"] },
1069
+ { "property": "overscroll-behavior-block", "category": "Misc", "type": "enum", "keywords": ["auto", "contain", "none"] },
1070
+ { "property": "overscroll-behavior-inline", "category": "Misc", "type": "enum", "keywords": ["auto", "contain", "none"] },
1071
+ { "property": "user-select", "category": "Misc", "type": "enum", "keywords": ["auto", "text", "none", "all", "contain"] },
1072
+ { "property": "pointer-events", "category": "Misc", "type": "enum", "keywords": ["auto", "none", "visiblePainted", "visibleFill", "visibleStroke", "visible", "painted", "fill", "stroke", "all"], "inherited": true },
1073
+ { "property": "touch-action", "category": "Misc", "type": "enum", "keywords": ["auto", "none", "pan-x", "pan-left", "pan-right", "pan-y", "pan-up", "pan-down", "pinch-zoom", "manipulation"] },
1074
+ { "property": "resize", "category": "Misc", "type": "enum", "keywords": ["none", "both", "horizontal", "vertical", "block", "inline"] },
1075
+ { "property": "appearance", "category": "Misc", "type": "enum", "keywords": ["none", "auto", "base-select", "menulist-button", "textfield", "button", "searchfield", "textarea", "checkbox", "radio", "menulist", "listbox", "meter", "progress-bar", "push-button", "slider-horizontal", "square-button"] },
1076
+ { "property": "table-layout", "category": "Misc", "type": "enum", "keywords": ["auto", "fixed"] },
1077
+ { "property": "border-collapse", "category": "Misc", "type": "enum", "keywords": ["separate", "collapse"], "inherited": true },
1078
+ { "property": "border-spacing", "category": "Misc", "type": "length", "units": ["px", "em", "rem"], "inherited": true },
1079
+ { "property": "caption-side", "category": "Misc", "type": "enum", "keywords": ["top", "bottom", "block-start", "block-end", "inline-start", "inline-end"], "inherited": true },
1080
+ { "property": "empty-cells", "category": "Misc", "type": "enum", "keywords": ["show", "hide"], "inherited": true },
1081
+ { "property": "caret", "category": "Misc", "type": "shorthand", "inherited": true, "shorthand": true },
1082
+ { "property": "caret-shape", "category": "Misc", "type": "enum", "keywords": ["auto", "bar", "block", "underscore"], "inherited": true },
1083
+ { "property": "scrollbar-width", "category": "Misc", "type": "enum", "keywords": ["auto", "thin", "none"] },
1084
+ { "property": "scrollbar-color", "category": "Misc", "type": "color", "inherited": true },
1085
+ { "property": "scrollbar-gutter", "category": "Misc", "type": "enum", "keywords": ["auto", "stable", "both-edges"] },
1086
+ { "property": "image-rendering", "category": "Misc", "type": "enum", "keywords": ["auto", "smooth", "high-quality", "crisp-edges", "pixelated"], "inherited": true },
1087
+ { "property": "counter-reset", "category": "Misc", "type": "string" },
1088
+ { "property": "counter-increment", "category": "Misc", "type": "string" },
1089
+ { "property": "counter-set", "category": "Misc", "type": "string" },
1090
+ { "property": "all", "category": "Misc", "type": "enum", "keywords": ["initial", "inherit", "unset", "revert", "revert-layer"], "shorthand": true },
1091
+ { "property": "forced-color-adjust", "category": "Misc", "type": "enum", "keywords": ["auto", "none", "preserve-parent-color"], "inherited": true },
1092
+ { "property": "print-color-adjust", "category": "Misc", "type": "enum", "keywords": ["economy", "exact"], "inherited": true }
1093
+ ];
1094
+
1095
+ // src/overlay/cssRegistry.ts
1096
+ var COMMON = /* @__PURE__ */ new Set([
1097
+ // Layout
1098
+ "display",
1099
+ "position",
1100
+ "top",
1101
+ "right",
1102
+ "bottom",
1103
+ "left",
1104
+ "float",
1105
+ "clear",
1106
+ "z-index",
1107
+ "box-sizing",
1108
+ "visibility",
1109
+ "overflow",
1110
+ "overflow-x",
1111
+ "overflow-y",
1112
+ "opacity",
1113
+ // Flexbox
1114
+ "flex",
1115
+ "flex-direction",
1116
+ "flex-wrap",
1117
+ "justify-content",
1118
+ "align-items",
1119
+ "align-content",
1120
+ "align-self",
1121
+ "justify-self",
1122
+ "flex-grow",
1123
+ "flex-shrink",
1124
+ "flex-basis",
1125
+ "order",
1126
+ "gap",
1127
+ "row-gap",
1128
+ "column-gap",
1129
+ // Grid
1130
+ "grid-template-columns",
1131
+ "grid-template-rows",
1132
+ "grid-auto-flow",
1133
+ "grid-auto-columns",
1134
+ "grid-auto-rows",
1135
+ "grid-column",
1136
+ "grid-row",
1137
+ "grid-area",
1138
+ "justify-items",
1139
+ "place-items",
1140
+ // Spacing
1141
+ "margin",
1142
+ "margin-top",
1143
+ "margin-right",
1144
+ "margin-bottom",
1145
+ "margin-left",
1146
+ "padding",
1147
+ "padding-top",
1148
+ "padding-right",
1149
+ "padding-bottom",
1150
+ "padding-left",
1151
+ // Sizing
1152
+ "width",
1153
+ "height",
1154
+ "min-width",
1155
+ "max-width",
1156
+ "min-height",
1157
+ "max-height",
1158
+ "aspect-ratio",
1159
+ "object-fit",
1160
+ "object-position",
1161
+ // Border
1162
+ "border",
1163
+ "border-width",
1164
+ "border-style",
1165
+ "border-color",
1166
+ "border-top-width",
1167
+ "border-right-width",
1168
+ "border-bottom-width",
1169
+ "border-left-width",
1170
+ "border-radius",
1171
+ "border-top-left-radius",
1172
+ "border-top-right-radius",
1173
+ "border-bottom-right-radius",
1174
+ "border-bottom-left-radius",
1175
+ "outline",
1176
+ "outline-width",
1177
+ "outline-style",
1178
+ "outline-color",
1179
+ "outline-offset",
1180
+ // Background
1181
+ "background",
1182
+ "background-color",
1183
+ "background-image",
1184
+ "background-size",
1185
+ "background-position",
1186
+ "background-repeat",
1187
+ "background-attachment",
1188
+ "background-clip",
1189
+ // Typography
1190
+ "color",
1191
+ "font",
1192
+ "font-family",
1193
+ "font-size",
1194
+ "font-weight",
1195
+ "font-style",
1196
+ "font-variant",
1197
+ "line-height",
1198
+ "letter-spacing",
1199
+ "word-spacing",
1200
+ "text-align",
1201
+ "text-decoration",
1202
+ "text-decoration-line",
1203
+ "text-decoration-color",
1204
+ "text-transform",
1205
+ "text-indent",
1206
+ "text-overflow",
1207
+ "white-space",
1208
+ "text-shadow",
1209
+ "direction",
1210
+ "vertical-align",
1211
+ // Effects
1212
+ "box-shadow",
1213
+ "filter",
1214
+ "backdrop-filter",
1215
+ "mix-blend-mode",
1216
+ "clip-path",
1217
+ "cursor",
1218
+ "mask",
1219
+ // Transform
1220
+ "transform",
1221
+ "transform-origin",
1222
+ "transform-style",
1223
+ "perspective",
1224
+ "backface-visibility",
1225
+ "translate",
1226
+ "rotate",
1227
+ "scale",
1228
+ // Animation
1229
+ "transition",
1230
+ "transition-property",
1231
+ "transition-duration",
1232
+ "transition-timing-function",
1233
+ "transition-delay",
1234
+ "animation",
1235
+ "animation-name",
1236
+ "animation-duration",
1237
+ "animation-timing-function",
1238
+ "animation-delay",
1239
+ "animation-iteration-count",
1240
+ "animation-direction",
1241
+ "animation-fill-mode",
1242
+ "will-change",
1243
+ // Misc
1244
+ "content",
1245
+ "list-style",
1246
+ "list-style-type",
1247
+ "list-style-position",
1248
+ "user-select",
1249
+ "pointer-events",
1250
+ "scroll-behavior",
1251
+ "resize",
1252
+ "caret-color",
1253
+ "accent-color",
1254
+ "appearance"
1255
+ ]);
1256
+ var CATEGORY_ORDER = [
1257
+ "Layout",
1258
+ "Flexbox",
1259
+ "Grid",
1260
+ "Spacing",
1261
+ "Sizing",
1262
+ "Border",
1263
+ "Background",
1264
+ "Typography",
1265
+ "Effects",
1266
+ "Transform",
1267
+ "Animation",
1268
+ "Misc"
1269
+ ];
1270
+ var DEFAULT_UNITS = ["px", "%", "em", "rem", "vh", "vw", "ch"];
1271
+ function categoryFor(p) {
1272
+ if (/^grid/.test(p)) return "Grid";
1273
+ if (/^(flex|justify|align|order|place)/.test(p)) return "Flexbox";
1274
+ if (/^(margin|padding|gap|row-gap|column-gap)/.test(p)) return "Spacing";
1275
+ if (/^(width|height|min-|max-|aspect-ratio|inline-size|block-size|object-)/.test(p)) return "Sizing";
1276
+ if (/^(border|outline)/.test(p)) return "Border";
1277
+ if (/^background/.test(p)) return "Background";
1278
+ if (/^(font|text|color$|line-height|letter|word|white-space|writing|direction|vertical-align|tab-size|hyphens|quotes|list-style)/.test(p))
1279
+ return "Typography";
1280
+ if (/^(transition|animation|will-change)/.test(p)) return "Animation";
1281
+ if (/^(transform|translate|rotate|scale|perspective|backface)/.test(p)) return "Transform";
1282
+ if (/^(opacity|box-shadow|filter|backdrop|mix-blend|clip-path|mask|cursor)/.test(p)) return "Effects";
1283
+ if (/^(display|position|top|right|bottom|left|inset|float|clear|visibility|z-index|box-sizing|overflow|isolation|contain)/.test(p))
1284
+ return "Layout";
1285
+ return "Misc";
1286
+ }
1287
+ function typeForValue(p, v) {
1288
+ const s = (v || "").trim();
1289
+ if (/color/.test(p) || /^(rgb|rgba|hsl|hsla|#|currentcolor|transparent)\b/i.test(s)) return "color";
1290
+ if (/^-?\d*\.?\d+(px|em|rem|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc|q)$/i.test(s)) return "length";
1291
+ if (/^-?\d*\.?\d+(s|ms)$/i.test(s)) return "time";
1292
+ if (/^-?\d*\.?\d+(deg|rad|grad|turn)$/i.test(s)) return "angle";
1293
+ if (/^(url\(|linear-gradient|radial-gradient|conic-gradient)/i.test(s)) return "image";
1294
+ if (/(^|-)color$/.test(p)) return "color";
1295
+ if (/(width|height|size|^inset|margin|padding|gap|^top$|^left$|^right$|^bottom$|spacing|indent|offset|radius|translate|^scroll-padding|^scroll-margin)/.test(p))
1296
+ return "length";
1297
+ if (/^-?\d+$/.test(s)) return "integer";
1298
+ if (/^-?\d*\.?\d+$/.test(s)) return "number";
1299
+ return "string";
1300
+ }
1301
+ var _registry = null;
1302
+ function cssRegistry() {
1303
+ if (_registry) return _registry;
1304
+ const byProp = /* @__PURE__ */ new Map();
1305
+ for (const m of CSS_PROPERTY_DATA) {
1306
+ byProp.set(m.property, {
1307
+ ...m,
1308
+ units: m.units && m.units.length ? m.units : m.type === "length" ? DEFAULT_UNITS : void 0,
1309
+ common: COMMON.has(m.property)
1310
+ });
1311
+ }
1312
+ try {
1313
+ if (typeof document !== "undefined") {
1314
+ const cs = getComputedStyle(document.documentElement);
1315
+ for (let i = 0; i < cs.length; i++) {
1316
+ const p = cs[i];
1317
+ if (!p || p.startsWith("--") || byProp.has(p)) continue;
1318
+ const type = typeForValue(p, cs.getPropertyValue(p));
1319
+ byProp.set(p, { property: p, category: categoryFor(p), type, units: type === "length" ? DEFAULT_UNITS : void 0 });
1320
+ }
1321
+ }
1322
+ } catch {
1323
+ }
1324
+ const groups = /* @__PURE__ */ new Map();
1325
+ for (const [prop, m] of byProp) {
1326
+ const cat = m.category || "Misc";
1327
+ const arr = groups.get(cat) ?? [];
1328
+ arr.push(prop);
1329
+ groups.set(cat, arr);
1330
+ }
1331
+ const orderedNames = [
1332
+ ...CATEGORY_ORDER.filter((c) => groups.has(c)),
1333
+ ...[...groups.keys()].filter((c) => !CATEGORY_ORDER.includes(c)).sort()
1334
+ ];
1335
+ const categories = orderedNames.map((name) => ({ name, props: groups.get(name).slice().sort() }));
1336
+ _registry = { byProp, categories };
1337
+ return _registry;
1338
+ }
1339
+ function cssMeta(property) {
1340
+ return cssRegistry().byProp.get(property);
1341
+ }
1342
+
739
1343
  // src/overlay/mechanism.ts
740
1344
  var TW_UTILITY = /^-?(?:p|m|px|py|pt|pr|pb|pl|mx|my|mt|mr|mb|ml|gap|w|h|min-w|max-w|min-h|max-h|text|bg|border|rounded|flex|grid|gap-x|gap-y|items|justify|self|place|font|leading|tracking|space|inline|block|inline-block|hidden|table|absolute|relative|fixed|sticky|static|top|bottom|left|right|inset|z|shadow|opacity|transition|duration|ease|scale|rotate|translate|cursor|overflow|object|aspect|order|col|row|basis|grow|shrink|divide|ring|outline)(?:-|$)/;
741
1345
  var TW_VARIANT = /^(?:sm|md|lg|xl|2xl|hover|focus|focus-visible|focus-within|active|visited|disabled|dark|group|group-hover|peer|first|last|odd|even|motion-safe|motion-reduce|print|rtl|ltr)::?|^(?:sm|md|lg|xl|2xl|hover|focus|active|disabled|dark|group-hover):/;
@@ -942,8 +1546,9 @@ function renderPrompt(records) {
942
1546
  }
943
1547
  if (c.after.designToken || c.after.token && /^(text|bg|border|rounded|shadow)-(?!\[)/.test(c.after.token))
944
1548
  anyDesignToken = true;
1549
+ const from = (c.before.computed ?? "").trim();
945
1550
  lines.push(
946
- ` - ${c.property}: ${c.before.computed} \u2192 ${c.after.computed}${suggestion}`
1551
+ from ? ` - ${c.property}: ${from} \u2192 ${c.after.computed}${suggestion}` : ` - ${c.property}: set to ${c.after.computed}${suggestion}`
947
1552
  );
948
1553
  }
949
1554
  }
@@ -1189,24 +1794,34 @@ var CSS = (
1189
1794
 
1190
1795
  .uiv-panel {
1191
1796
  position: fixed; right: 16px; bottom: 72px; z-index: 2147483647;
1192
- width: 328px; max-height: 80vh; overflow: auto;
1193
- background: #18181b; color: #e4e4e7; border: 1px solid #3f3f46;
1194
- border-radius: 12px; box-shadow: 0 12px 40px rgba(0,0,0,0.45);
1797
+ width: 360px; max-height: 84vh; overflow: auto;
1798
+ background: #141416; color: #e4e4e7; border: 1px solid #2a2a2e;
1799
+ border-radius: 14px; box-shadow: 0 16px 48px rgba(0,0,0,0.5);
1195
1800
  font-size: 12px; display: none;
1196
1801
  }
1197
1802
  .uiv-panel.show { display: block; }
1198
1803
 
1199
1804
  .uiv-head {
1200
- display: flex; align-items: center; gap: 8px; padding: 10px 12px;
1201
- border-bottom: 1px solid #27272a; position: sticky; top: 0; background: #18181b;
1805
+ display: flex; align-items: center; gap: 8px; padding: 11px 13px;
1806
+ border-bottom: 1px solid #242428; position: sticky; top: 0; z-index: 5; background: #141416;
1202
1807
  }
1203
- .uiv-head b { font-size: 13px; color: #fff; letter-spacing: .3px; }
1204
- .uiv-bp { margin-left: auto; font-size: 10px; padding: 2px 7px; border-radius: 999px;
1808
+ .uiv-head b { font-size: 13px; color: #fafafa; letter-spacing: .2px; }
1809
+ .uiv-bp { margin-left: auto; font-size: 10px; padding: 2px 8px; border-radius: 999px;
1205
1810
  background: #312e81; color: #c7d2fe; font-weight: 600; }
1206
1811
  .uiv-x { cursor: pointer; color: #71717a; padding: 2px 4px; }
1207
1812
  .uiv-x:hover { color: #fff; }
1208
1813
 
1209
- .uiv-sec { padding: 10px 12px; border-bottom: 1px solid #27272a; }
1814
+ .uiv-sec { padding: 11px 13px; border-bottom: 1px solid #1f1f22; }
1815
+
1816
+ /* ---- Framer-style top alignment toolbar ---- */
1817
+ .uiv-toolbar { display: flex; align-items: center; gap: 8px; padding: 8px 13px;
1818
+ border-bottom: 1px solid #1f1f22; }
1819
+ .uiv-tgroup { display: flex; gap: 2px; }
1820
+ .uiv-tbtn { display: flex; align-items: center; justify-content: center; width: 26px; height: 22px;
1821
+ border-radius: 5px; background: transparent; border: 1px solid transparent; color: #8b8b94; cursor: pointer; }
1822
+ .uiv-tbtn:hover { background: #1f1f23; color: #e4e4e7; }
1823
+ .uiv-tbtn.on { background: #312e81; border-color: #4f46e5; color: #fff; }
1824
+ .uiv-tsep { width: 1px; height: 16px; background: #2a2a2e; }
1210
1825
  .uiv-empty { color: #71717a; padding: 18px 12px; text-align: center; }
1211
1826
 
1212
1827
  .uiv-meta { line-height: 1.5; }
@@ -1318,8 +1933,8 @@ var CSS = (
1318
1933
  .uiv-ctl > .cfield { min-width: 0; }
1319
1934
 
1320
1935
  /* numeric field with a scrub handle on the left */
1321
- .uiv-num { display: flex; align-items: stretch; background: #27272a;
1322
- border: 1px solid #3f3f46; border-radius: 7px; overflow: hidden; }
1936
+ .uiv-num { display: flex; align-items: stretch; background: #1c1c20;
1937
+ border: 1px solid #313138; border-radius: 7px; overflow: hidden; }
1323
1938
  .uiv-num.changed { border-color: #4ade80; }
1324
1939
  .uiv-num.changed input { color: #4ade80; } /* uivisor-edited value \u2192 green */
1325
1940
  .uiv-sel.changed, .uiv-color.changed { border-color: #4ade80; }
@@ -1344,7 +1959,7 @@ var CSS = (
1344
1959
 
1345
1960
  .uiv-expand { display: flex; align-items: center; justify-content: center;
1346
1961
  width: 26px; height: 28px; border-radius: 7px; cursor: pointer;
1347
- background: #27272a; border: 1px solid #3f3f46; color: #8b8b94; }
1962
+ background: #1c1c20; border: 1px solid #313138; color: #8b8b94; }
1348
1963
  .uiv-expand:hover { color: #fff; background: #3f3f46; }
1349
1964
  .uiv-expand.on { color: #c7d2fe; border-color: #4f46e5; background: #312e81; }
1350
1965
 
@@ -1353,13 +1968,13 @@ var CSS = (
1353
1968
 
1354
1969
  /* Weight dropdown only \u2014 must NOT match the unit <select> inside dim fields. */
1355
1970
  .uiv-ctl select.uiv-sel {
1356
- width: 100%; background: #27272a; border: 1px solid #3f3f46; color: #fff;
1971
+ width: 100%; background: #1c1c20; border: 1px solid #313138; color: #fff;
1357
1972
  border-radius: 7px; padding: 6px 7px; font-size: 12px; outline: none;
1358
1973
  }
1359
1974
  .uiv-ctl select.uiv-sel:focus { border-color: #6366f1; }
1360
1975
  .uiv-ctl input[type=color] { width: 100%; height: 28px; padding: 2px; cursor: pointer;
1361
- background: #27272a; border: 1px solid #3f3f46; border-radius: 7px; }
1362
- .uiv-ctl input.uiv-text { width: 100%; background: #27272a; border: 1px solid #3f3f46;
1976
+ background: #1c1c20; border: 1px solid #313138; border-radius: 7px; }
1977
+ .uiv-ctl input.uiv-text { width: 100%; background: #1c1c20; border: 1px solid #313138;
1363
1978
  color: #fff; border-radius: 7px; padding: 6px 7px; font-size: 12px; outline: none; }
1364
1979
  .uiv-ctl input.uiv-text:focus { border-color: #6366f1; }
1365
1980
  .uiv-ctl input.uiv-text.changed { border-color: #4ade80; color: #4ade80; }
@@ -1383,7 +1998,7 @@ var CSS = (
1383
1998
  .uiv-btn.primary:hover { background: #4338ca; }
1384
1999
  .uiv-btn.ghost { flex: 0 0 auto; }
1385
2000
  /* floating read-only "all styles" block, docked bottom-right, left of the panel */
1386
- .uiv-info { position: fixed; right: 352px; bottom: 16px; z-index: 2147483646;
2001
+ .uiv-info { position: fixed; right: 384px; bottom: 16px; z-index: 2147483646;
1387
2002
  width: 216px; max-height: 52vh; overflow: auto; display: none;
1388
2003
  background: rgba(24,24,27,0.86); color: #e4e4e7;
1389
2004
  border: 1px solid #3f3f46; border-radius: 10px; padding: 8px 10px;
@@ -1392,6 +2007,76 @@ var CSS = (
1392
2007
  .uiv-info-h { font-size: 10px; text-transform: uppercase; letter-spacing: .4px;
1393
2008
  color: #8b8b94; font-weight: 600; margin-bottom: 6px; }
1394
2009
  .uiv-info-sub { color: #52525b; }
2010
+ /* ---- box-model widget (nested margin / padding, Figma/Framer style) ----
2011
+ Bands are sized so the side inputs NEVER overlap the inner content box:
2012
+ vertical band 26px (> input 18px), horizontal band 46px (> input 36px). */
2013
+ .uiv-bm { position: relative; height: 148px; margin: 2px 0 9px;
2014
+ background: #1b1b1f; border: 1px solid #2f2f35; border-radius: 9px; }
2015
+ .uiv-bm-pad { position: absolute; top: 26px; bottom: 26px; left: 46px; right: 46px;
2016
+ background: #26262c; border: 1px solid #3a3a42; border-radius: 7px; }
2017
+ .uiv-bm-content { position: absolute; z-index: 0; top: 26px; bottom: 26px; left: 46px; right: 46px;
2018
+ background: #34343c; border-radius: 5px; }
2019
+ .uiv-bm-tag { position: absolute; z-index: 1; top: 4px; left: 8px; font-size: 7.5px; font-weight: 700;
2020
+ letter-spacing: .5px; color: #6b6b73; pointer-events: none; }
2021
+ .uiv-bm-i { position: absolute; z-index: 3; width: 36px; height: 18px; padding: 0; box-sizing: border-box;
2022
+ background: #0e0e11; border: 1px solid #34343c; border-radius: 5px;
2023
+ color: #d4d4d8; text-align: center; text-align-last: center; line-height: 16px; font-size: 10px;
2024
+ outline: none; cursor: ew-resize; font-family: ui-monospace, monospace; -moz-appearance: textfield; }
2025
+ .uiv-bm-i::-webkit-outer-spin-button, .uiv-bm-i::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
2026
+ .uiv-bm-i:hover { border-color: #52525b; }
2027
+ .uiv-bm-i:focus { cursor: text; border-color: #6366f1; }
2028
+ .uiv-bm-i.bm-top { top: 4px; left: 50%; transform: translateX(-50%); }
2029
+ .uiv-bm-i.bm-bottom { bottom: 4px; left: 50%; transform: translateX(-50%); }
2030
+ .uiv-bm-i.bm-left { left: 5px; top: 50%; transform: translateY(-50%); }
2031
+ .uiv-bm-i.bm-right { right: 5px; top: 50%; transform: translateY(-50%); }
2032
+ .uiv-bm-i.st-file { color: #e4e4e7; }
2033
+ .uiv-bm-i.st-edited { color: #4ade80; }
2034
+ .uiv-bm-i.st-inherit { color: #38bdf8; }
2035
+ .uiv-bm-i.st-auto { color: #6b7280; }
2036
+ /* spacing-token dropdown \u2014 opens when a side value is focused/clicked */
2037
+ .uiv-bm-pop { display: flex; flex-wrap: wrap; gap: 5px; align-items: center;
2038
+ margin: -3px 0 8px; padding: 8px; background: #1c1c20; border: 1px solid #34343c;
2039
+ border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,0.4); }
2040
+ .uiv-bm-pop[hidden] { display: none; }
2041
+ .uiv-bm-poplabel { width: 100%; font-size: 9px; font-weight: 700; text-transform: uppercase;
2042
+ letter-spacing: .4px; color: #6b6b73; font-family: ui-monospace, monospace; }
2043
+ .uiv-bm-chip { background: #1e1b4b55; border: 1px solid #4338ca; color: #c7d2fe; border-radius: 6px;
2044
+ padding: 3px 8px; font-size: 10px; cursor: pointer; font-family: ui-monospace, monospace; }
2045
+ .uiv-bm-chip:hover { background: #4f46e5; border-color: #6366f1; color: #fff; }
2046
+
2047
+ /* ---- All CSS inspector (search + categories + generic smart inputs) ---- */
2048
+ .uiv-csssearch { width: 100%; background: #0f0f12; border: 1px solid #3f3f46; color: #e4e4e7;
2049
+ border-radius: 7px; padding: 7px 9px; font-size: 12px; outline: none; font-family: ui-monospace, monospace; }
2050
+ .uiv-csssearch:focus { border-color: #6366f1; }
2051
+ .uiv-csssearch::placeholder { color: #6b6b73; }
2052
+ .uiv-catacc .uiv-catn { color: #52525b; font-weight: 700; margin-left: auto; }
2053
+ .uiv-showall { background: none; border: 0; color: #818cf8; cursor: pointer;
2054
+ font-size: 10px; padding: 2px 0 4px; font-weight: 600; }
2055
+ .uiv-showall:hover { color: #a5b4fc; }
2056
+ .uiv-gctl { grid-template-columns: 108px 1fr; gap: 8px; margin-bottom: 5px; }
2057
+ .uiv-gplabel { font-family: ui-monospace, monospace; font-size: 10px; color: #a1a1aa;
2058
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2059
+ .uiv-gsel { width: 100%; background: #1c1c20; border: 1px solid #313138; color: #fff;
2060
+ border-radius: 7px; padding: 5px 6px; font-size: 11px; outline: none; font-family: ui-monospace, monospace; }
2061
+ .uiv-gsel:focus { border-color: #6366f1; }
2062
+ .uiv-gnum { display: flex; align-items: stretch; background: #1c1c20; border: 1px solid #313138;
2063
+ border-radius: 7px; overflow: hidden; }
2064
+ .uiv-gnum:focus-within { border-color: #6366f1; }
2065
+ .uiv-gtext { flex: 1; min-width: 0; background: #1c1c20; border: 1px solid #313138; color: #fff;
2066
+ border-radius: 7px; padding: 5px 7px; font-size: 11px; outline: none; font-family: ui-monospace, monospace; }
2067
+ .uiv-gnum .uiv-gtext { border: none; border-radius: 0; background: transparent; padding-left: 2px; }
2068
+ .uiv-gtext:focus { border-color: #6366f1; }
2069
+ .uiv-gtext::placeholder { color: #6b6b73; }
2070
+ .uiv-gcolorwrap { display: flex; gap: 5px; align-items: center; }
2071
+ .uiv-gcolor { width: 28px; height: 26px; padding: 2px; flex: 0 0 auto; background: #1c1c20;
2072
+ border: 1px solid #313138; border-radius: 7px; cursor: pointer; }
2073
+ .uiv-gtextc { flex: 1; }
2074
+ .uiv-gctl.st-file .uiv-gtext, .uiv-gctl.st-file .uiv-gsel { color: #e4e4e7; }
2075
+ .uiv-gctl.st-edited .uiv-gtext, .uiv-gctl.st-edited .uiv-gsel { color: #4ade80; }
2076
+ .uiv-gctl.st-edited .uiv-gnum, .uiv-gctl.st-edited .uiv-gsel { border-color: #4ade80; }
2077
+ .uiv-gctl.st-inherit .uiv-gtext, .uiv-gctl.st-inherit .uiv-gsel { color: #38bdf8; }
2078
+ .uiv-gctl.st-auto .uiv-gtext, .uiv-gctl.st-auto .uiv-gsel { color: #6b7280; }
2079
+
1395
2080
  .uiv-toast { position: fixed; right: 16px; bottom: 128px; z-index: 2147483647;
1396
2081
  background: #22c55e; color: #052e16; padding: 8px 12px; border-radius: 8px;
1397
2082
  font-size: 12px; font-weight: 600; display: none; }
@@ -1412,6 +2097,38 @@ var INHERITED_PROPS = /* @__PURE__ */ new Set([
1412
2097
  "text-align",
1413
2098
  "font-family"
1414
2099
  ]);
2100
+ var BOX_SIDES = {
2101
+ inset: [
2102
+ { css: "top", label: "T" },
2103
+ { css: "right", label: "R" },
2104
+ { css: "bottom", label: "B" },
2105
+ { css: "left", label: "L" }
2106
+ ],
2107
+ padding: [
2108
+ { css: "padding-top", label: "T" },
2109
+ { css: "padding-right", label: "R" },
2110
+ { css: "padding-bottom", label: "B" },
2111
+ { css: "padding-left", label: "L" }
2112
+ ],
2113
+ margin: [
2114
+ { css: "margin-top", label: "T" },
2115
+ { css: "margin-right", label: "R" },
2116
+ { css: "margin-bottom", label: "B" },
2117
+ { css: "margin-left", label: "L" }
2118
+ ],
2119
+ radius: [
2120
+ { css: "border-top-left-radius", label: "TL" },
2121
+ { css: "border-top-right-radius", label: "TR" },
2122
+ { css: "border-bottom-right-radius", label: "BR" },
2123
+ { css: "border-bottom-left-radius", label: "BL" }
2124
+ ],
2125
+ "border-width": [
2126
+ { css: "border-top-width", label: "T" },
2127
+ { css: "border-right-width", label: "R" },
2128
+ { css: "border-bottom-width", label: "B" },
2129
+ { css: "border-left-width", label: "L" }
2130
+ ]
2131
+ };
1415
2132
  var Uivisor = class {
1416
2133
  constructor() {
1417
2134
  this.enabled = false;
@@ -1422,6 +2139,12 @@ var Uivisor = class {
1422
2139
  this.collapsedSecs = /* @__PURE__ */ new Set();
1423
2140
  /** Controls manually revealed via "+" (hideWhenAuto controls that are auto). */
1424
2141
  this.revealedCtls = /* @__PURE__ */ new Set();
2142
+ /** "All CSS" search query + which property categories are expanded / showing all. */
2143
+ this.cssSearch = "";
2144
+ this.expandedCats = /* @__PURE__ */ new Set();
2145
+ this.showAllCats = /* @__PURE__ */ new Set();
2146
+ /** Box-model widget: the last-focused side the token dropdown targets. */
2147
+ this.lastBmSide = "padding-top";
1425
2148
  /** Undo / redo stacks of full edit-state snapshots. */
1426
2149
  this.undoStack = [];
1427
2150
  this.redoStack = [];
@@ -1508,6 +2231,12 @@ var Uivisor = class {
1508
2231
  this.selBox.style.display = "none";
1509
2232
  }
1510
2233
  };
2234
+ /** Properties to snapshot on selection: the curated set ∪ the whole registry. */
2235
+ this._snapProps = null;
2236
+ // ---- "All CSS" inspector (registry-driven, curated like Framer/Webflow) ----
2237
+ /** Properties already covered by the curated quick-control sections above — so we
2238
+ * don't show them again in the All-CSS area. */
2239
+ this._curatedProps = null;
1511
2240
  }
1512
2241
  /** Project breakpoints — re-detect until the stylesheets yield a real set. */
1513
2242
  bpSystem() {
@@ -1810,7 +2539,9 @@ var Uivisor = class {
1810
2539
  };
1811
2540
  this.states.set(el, {
1812
2541
  record,
1813
- original: snapshot(el, ALL_CSS),
2542
+ // Snapshot every registry property (not just the curated set) so a generic
2543
+ // edit's "before" value is known — the All-CSS inspector edits anything.
2544
+ original: snapshot(el, this.snapshotProps()),
1814
2545
  applied: /* @__PURE__ */ new Set(),
1815
2546
  dimUnit: {}
1816
2547
  });
@@ -1819,6 +2550,10 @@ var Uivisor = class {
1819
2550
  this.reposition();
1820
2551
  this.renderBody();
1821
2552
  }
2553
+ snapshotProps() {
2554
+ if (!this._snapProps) this._snapProps = [.../* @__PURE__ */ new Set([...ALL_CSS, ...cssRegistry().byProp.keys()])];
2555
+ return this._snapProps;
2556
+ }
1822
2557
  // ---- value helpers ----
1823
2558
  st() {
1824
2559
  return this.selected ? this.states.get(this.selected) ?? null : null;
@@ -1876,8 +2611,10 @@ var Uivisor = class {
1876
2611
  }
1877
2612
  selectCurrent(css) {
1878
2613
  let v = this.liveVal(css).trim();
1879
- if (v === "normal") v = "400";
1880
- if (v === "bold") v = "700";
2614
+ if (css === "font-weight") {
2615
+ if (v === "normal") v = "400";
2616
+ if (v === "bold") v = "700";
2617
+ }
1881
2618
  return v;
1882
2619
  }
1883
2620
  // ---- apply / record / revert ----
@@ -2021,13 +2758,13 @@ var Uivisor = class {
2021
2758
  const el = this.selected;
2022
2759
  const st = this.st();
2023
2760
  if (!el || !st) return;
2024
- const sibs = this.siblingsOf(el);
2761
+ const scope = this.activeScope();
2025
2762
  for (const css of cssList) {
2026
- for (const e of sibs) removeOverride(e, css);
2027
- st.applied.delete(css);
2028
- st.record.changes = st.record.changes.filter((c) => c.property !== css);
2763
+ st.record.changes = st.record.changes.filter(
2764
+ (c) => !(c.property === css && c.breakpoint === scope.name)
2765
+ );
2029
2766
  }
2030
- this.reposition();
2767
+ this.reapplyScope();
2031
2768
  this.renderBody();
2032
2769
  }
2033
2770
  commitNumeric(cssList, raw) {
@@ -2103,11 +2840,13 @@ var Uivisor = class {
2103
2840
  <div class="uiv-src">${escapeHtml(src)}</div>
2104
2841
  <span class="uiv-mech">${st.record.styling.primaryMechanism}</span>
2105
2842
  </div>
2843
+ ${this.alignToolbarHtml()}
2106
2844
  ${this.dsIndicatorHtml()}
2107
2845
  ${this.breakpointBarHtml()}
2108
2846
  ${this.targetHtml(st)}
2109
2847
  ${this.controlsHtml(this.context(this.selected))}
2110
2848
  ${this.journalHtml()}
2849
+ ${this.allCssHtml()}
2111
2850
  `;
2112
2851
  if (this.responsive) this.renderFrameBar();
2113
2852
  this.renderInfo();
@@ -2403,15 +3142,55 @@ var Uivisor = class {
2403
3142
  if (req === "flexgrid") return ctx.flexGrid;
2404
3143
  return true;
2405
3144
  }
3145
+ /** Framer-style top alignment toolbar — justify (horizontal) + align (vertical)
3146
+ * icon buttons. Shown for flex/grid containers (where they apply). */
3147
+ alignToolbarHtml() {
3148
+ const el = this.selected;
3149
+ if (!el || !this.context(el).flexGrid) return "";
3150
+ const j = this.liveVal("justify-content").trim();
3151
+ const a = this.liveVal("align-items").trim();
3152
+ const g = (r) => `<svg viewBox="0 0 14 14" width="13" height="13" fill="currentColor">${r}</svg>`;
3153
+ const JI = {
3154
+ "flex-start": g('<rect x="1" y="3" width="2" height="8"/><rect x="4" y="3" width="2" height="8"/>'),
3155
+ center: g('<rect x="4" y="3" width="2" height="8"/><rect x="8" y="3" width="2" height="8"/>'),
3156
+ "flex-end": g('<rect x="8" y="3" width="2" height="8"/><rect x="11" y="3" width="2" height="8"/>'),
3157
+ "space-between": g('<rect x="1" y="3" width="2" height="8"/><rect x="11" y="3" width="2" height="8"/>')
3158
+ };
3159
+ const AI = {
3160
+ "flex-start": g('<rect x="3" y="1" width="8" height="2"/><rect x="3" y="4" width="8" height="2"/>'),
3161
+ center: g('<rect x="3" y="4" width="8" height="2"/><rect x="3" y="8" width="8" height="2"/>'),
3162
+ "flex-end": g('<rect x="3" y="8" width="8" height="2"/><rect x="3" y="11" width="8" height="2"/>'),
3163
+ stretch: g('<rect x="3" y="1" width="8" height="12"/>')
3164
+ };
3165
+ const btn = (prop, val, icon, cur) => `<button class="uiv-tbtn${cur === val ? " on" : ""}" data-prop="${prop}" data-val="${val}" title="${prop}: ${val}">${icon}</button>`;
3166
+ const jb = Object.entries(JI).map(([v, ic]) => btn("justify-content", v, ic, j)).join("");
3167
+ const ab = Object.entries(AI).map(([v, ic]) => btn("align-items", v, ic, a)).join("");
3168
+ return `<div class="uiv-toolbar"><div class="uiv-tgroup">${jb}</div><div class="uiv-tsep"></div><div class="uiv-tgroup">${ab}</div></div>`;
3169
+ }
3170
+ /** Figma/Framer-style nested box-model widget: MARGIN ring around a PADDING ring,
3171
+ * with an editable number on each of the 8 sides. Commits via the engine. */
3172
+ boxModelHtml() {
3173
+ const num = (css) => {
3174
+ const n = this.liveNum(css);
3175
+ return n == null ? "0" : String(round2(n));
3176
+ };
3177
+ const side = (css, pos) => `<input class="uiv-bm-i ${pos}${this.controlStateClass([css])}" data-css="${css}" value="${escapeAttr(num(css))}" title="${css}" inputmode="decimal" spellcheck="false">`;
3178
+ const spaceTokens = this.designSystem().byCategory["spacing"] ?? [];
3179
+ const pop = spaceTokens.length ? `<div class="uiv-bm-pop" hidden><span class="uiv-bm-poplabel">Token</span>` + spaceTokens.map((t) => `<button class="uiv-bm-chip" data-var="${escapeAttr(t.cssVar)}" title="${escapeAttr(t.value)}">${escapeHtml(t.name)} \xB7 ${escapeHtml(t.value)}</button>`).join("") + `</div>` : "";
3180
+ return `<div class="uiv-bm"><span class="uiv-bm-tag">MARGIN</span>` + side("margin-top", "bm-top") + side("margin-right", "bm-right") + side("margin-bottom", "bm-bottom") + side("margin-left", "bm-left") + `<div class="uiv-bm-pad"><span class="uiv-bm-tag">PADDING</span>` + side("padding-top", "bm-top") + side("padding-right", "bm-right") + side("padding-bottom", "bm-bottom") + side("padding-left", "bm-left") + `<div class="uiv-bm-content"></div></div></div>` + pop;
3181
+ }
2406
3182
  controlsHtml(ctx) {
2407
3183
  const legend = `<div class="uiv-leg"><span class="uiv-lg">file</span><span class="uiv-lg edit">edited</span><span class="uiv-lg inh">inherited</span><span class="uiv-lg auto">auto</span></div>`;
2408
3184
  const secs = SECTIONS.map((sec) => {
2409
3185
  const controls = sec.controls.filter((c) => this.relevant(c, ctx));
2410
3186
  if (!controls.length) return "";
2411
3187
  if (this.collapsedSecs.has(sec.title)) return `<div class="uiv-sec">${this.accordionTitle(sec.title)}</div>`;
3188
+ const isSpacing = sec.title === "Spacing";
3189
+ const widget = isSpacing ? this.boxModelHtml() : "";
2412
3190
  const rows = [];
2413
3191
  const adds = [];
2414
3192
  for (const c of controls) {
3193
+ if (isSpacing && c.kind === "box" && (c.key === "padding" || c.key === "margin")) continue;
2415
3194
  const css = c.css;
2416
3195
  if (c.kind === "len" && c.hideWhenAuto && css && !this.revealedCtls.has(css) && this.controlState([css]) === "auto") {
2417
3196
  adds.push(`<button class="uiv-addctl" data-css="${css}">+ ${escapeHtml(c.label)}</button>`);
@@ -2420,7 +3199,7 @@ var Uivisor = class {
2420
3199
  }
2421
3200
  }
2422
3201
  const addRow = adds.length ? `<div class="uiv-adds">${adds.join("")}</div>` : "";
2423
- return `<div class="uiv-sec">${this.accordionTitle(sec.title)}${rows.join("")}${addRow}</div>`;
3202
+ return `<div class="uiv-sec">${this.accordionTitle(sec.title)}${widget}${rows.join("")}${addRow}</div>`;
2424
3203
  }).join("");
2425
3204
  return legend + secs;
2426
3205
  }
@@ -2566,8 +3345,285 @@ var Uivisor = class {
2566
3345
  const val = toHexInput(this.liveVal(c.css));
2567
3346
  return `<div class="uiv-ctl${this.controlStateClass([c.css])}">${this.ctlLabel(c.label, [c.css])}<div class="cfield"><input type="color" class="uiv-color${this.isChanged([c.css]) ? " changed" : ""}" data-css="${c.css}" value="${val}"></div><span></span></div>` + this.tokenRowHtml(c.css, "Token");
2568
3347
  }
3348
+ curatedCssProps() {
3349
+ if (this._curatedProps) return this._curatedProps;
3350
+ const set = /* @__PURE__ */ new Set();
3351
+ for (const sec of SECTIONS)
3352
+ for (const c of sec.controls) {
3353
+ if (c.kind === "box") c.sides.forEach((s) => set.add(s.css));
3354
+ else set.add(c.css || "");
3355
+ }
3356
+ set.delete("");
3357
+ this._curatedProps = set;
3358
+ return set;
3359
+ }
3360
+ /**
3361
+ * Search box + categorised accordions. By default each category shows only the
3362
+ * COMMON properties (Framer/Webflow-style — no logical/vendor/rare noise), box
3363
+ * groups as a 4-sided editor; "+ N more" reveals the long tail and search reaches
3364
+ * literally everything. Additive: the curated sections above are untouched.
3365
+ */
3366
+ allCssHtml() {
3367
+ const reg = cssRegistry();
3368
+ const curated = this.curatedCssProps();
3369
+ const q = this.cssSearch.trim().toLowerCase();
3370
+ const search = `<div class="uiv-sec"><div class="uiv-sectitle">All CSS</div><input class="uiv-csssearch" placeholder="Search any of ${reg.byProp.size} properties\u2026" value="${escapeAttr(this.cssSearch)}" spellcheck="false"></div>`;
3371
+ if (q) {
3372
+ const hits = [...reg.byProp.values()].filter((m) => m.property.includes(q)).sort((a, b) => a.property.localeCompare(b.property));
3373
+ const rows = hits.slice(0, 60).map((m) => this.genericRow(m)).join("");
3374
+ const more = hits.length > 60 ? `<div class="uiv-bphint">+${hits.length - 60} more \u2014 refine the search</div>` : "";
3375
+ return search + `<div class="uiv-sec"><div class="uiv-sectitle">Results (${hits.length})</div>` + (rows || '<div class="uiv-empty">No property matches.</div>') + more + `</div>`;
3376
+ }
3377
+ const cats = reg.categories.map((c) => {
3378
+ const avail = c.props.filter((p) => !curated.has(p));
3379
+ if (!avail.length) return "";
3380
+ const common = avail.filter((p) => reg.byProp.get(p).common);
3381
+ const open = this.expandedCats.has(c.name);
3382
+ const head = `<button class="uiv-sectitle uiv-catacc${open ? "" : " collapsed"}" data-cat="${escapeAttr(c.name)}"><span class="uiv-chev">${ICONS.chevron}</span>${c.name} <span class="uiv-catn">${common.length}</span></button>`;
3383
+ let body = "";
3384
+ if (open) {
3385
+ const showAll = this.showAllCats.has(c.name);
3386
+ body = this.renderCommonControls(showAll ? avail : common);
3387
+ if (!showAll && avail.length > common.length)
3388
+ body += `<button class="uiv-showall" data-cat="${escapeAttr(c.name)}">+ ${avail.length - common.length} more</button>`;
3389
+ }
3390
+ return `<div class="uiv-sec">${head}${body}</div>`;
3391
+ }).filter(Boolean).join("");
3392
+ return search + cats;
3393
+ }
3394
+ /** Render a property list: box-groups (inset etc.) as a 4-sided editor, the rest
3395
+ * as smart inputs. Reuses the tested box control + the generic field. */
3396
+ renderCommonControls(props) {
3397
+ const reg = cssRegistry();
3398
+ const boxGroups = {};
3399
+ const singles = [];
3400
+ for (const p of props) {
3401
+ const m = reg.byProp.get(p);
3402
+ if (m.box && BOX_SIDES[m.box] && !m.shorthand) boxGroups[m.box] = true;
3403
+ else singles.push(p);
3404
+ }
3405
+ let html = "";
3406
+ for (const g of Object.keys(boxGroups)) html += this.boxGroupControl(g);
3407
+ for (const p of singles) html += this.genericRow(reg.byProp.get(p));
3408
+ return html;
3409
+ }
3410
+ /** A 4-sided box editor for a box group (inset/padding/…), via the curated control. */
3411
+ boxGroupControl(group) {
3412
+ const sides = BOX_SIDES[group];
3413
+ if (!sides) return "";
3414
+ const icon = group === "radius" ? ICONS.radius : group === "border-width" ? ICONS.border : group === "margin" ? ICONS.margin : group === "inset" ? ICONS.margin : ICONS.padding;
3415
+ const label = { inset: "Inset", padding: "Padding", margin: "Margin", radius: "Radius", "border-width": "Border" }[group] || group;
3416
+ return this.controlRow({ kind: "box", key: `g-${group}`, label, icon, sides });
3417
+ }
3418
+ genericRow(m) {
3419
+ const prop = m.property;
3420
+ return `<div class="uiv-ctl uiv-gctl${this.controlStateClass([prop])}"><span class="clabel uiv-gplabel" title="${escapeAttr(prop)}">${escapeHtml(prop)}</span><div class="cfield">${this.genericField(m)}</div></div>`;
3421
+ }
3422
+ /** Smart input for one property, by its registry type. Commits via the engine. */
3423
+ genericField(m) {
3424
+ const prop = m.property;
3425
+ const cur = this.liveVal(prop);
3426
+ const da = `data-gprop="${escapeAttr(prop)}"`;
3427
+ if (m.type === "enum" && m.keywords && m.keywords.length) {
3428
+ const c = cur.trim();
3429
+ const list = c && !m.keywords.includes(c) ? [c, ...m.keywords] : m.keywords;
3430
+ const opts = list.map((k) => `<option value="${escapeAttr(k)}"${k === c ? " selected" : ""}>${escapeHtml(k)}</option>`).join("");
3431
+ return `<select class="uiv-gsel" ${da}>${opts}</select>`;
3432
+ }
3433
+ if (m.type === "color") {
3434
+ return `<div class="uiv-gcolorwrap"><input type="color" class="uiv-gcolor" ${da} value="${toHexInput(cur)}"><input type="text" class="uiv-gtext uiv-gtextc" ${da} value="${escapeAttr(cur)}" placeholder="\u2014" spellcheck="false"></div>`;
3435
+ }
3436
+ const complex = (m.type === "shorthand" || m.shorthand || /^grid-template/.test(prop)) && !this.isChanged([prop]);
3437
+ const val = complex ? "" : cur;
3438
+ const ph = complex && cur ? escapeAttr(cur) : "\u2014";
3439
+ const numeric = m.type === "length" || m.type === "number" || m.type === "integer" || m.type === "percentage" || m.type === "time" || m.type === "angle";
3440
+ if (numeric) {
3441
+ return `<div class="uiv-gnum"><span class="uiv-scrub uiv-gscrub" ${da} title="Drag to change">${ICONS.size}</span><input type="text" class="uiv-gtext" ${da} value="${escapeAttr(val)}" placeholder="${ph}" spellcheck="false"></div>`;
3442
+ }
3443
+ return `<input type="text" class="uiv-gtext uiv-gtextonly" ${da} value="${escapeAttr(val)}" placeholder="${ph}" spellcheck="false">`;
3444
+ }
3445
+ /** Bind the "All CSS" search, category toggles and generic inputs. */
3446
+ bindGeneric() {
3447
+ const root = this.root;
3448
+ const search = root.querySelector(".uiv-csssearch");
3449
+ if (search) {
3450
+ search.addEventListener("input", () => {
3451
+ const pos = search.selectionStart ?? search.value.length;
3452
+ this.cssSearch = search.value;
3453
+ this.renderBody();
3454
+ const s2 = this.root.querySelector(".uiv-csssearch");
3455
+ if (s2) {
3456
+ s2.focus();
3457
+ s2.setSelectionRange(pos, pos);
3458
+ }
3459
+ });
3460
+ }
3461
+ root.querySelectorAll(".uiv-catacc").forEach((node) => {
3462
+ const btn = node;
3463
+ const cat = btn.getAttribute("data-cat");
3464
+ btn.addEventListener("click", () => {
3465
+ if (this.expandedCats.has(cat)) this.expandedCats.delete(cat);
3466
+ else this.expandedCats.add(cat);
3467
+ this.renderBody();
3468
+ });
3469
+ });
3470
+ root.querySelectorAll(".uiv-showall").forEach((node) => {
3471
+ const btn = node;
3472
+ const cat = btn.getAttribute("data-cat");
3473
+ btn.addEventListener("click", () => {
3474
+ this.showAllCats.add(cat);
3475
+ this.renderBody();
3476
+ });
3477
+ });
3478
+ const commit = (prop, value) => {
3479
+ this.pushHistory();
3480
+ this.commitValue([prop], value, true);
3481
+ };
3482
+ root.querySelectorAll(".uiv-gsel").forEach((node) => {
3483
+ const sel = node;
3484
+ sel.addEventListener("change", () => commit(sel.getAttribute("data-gprop"), sel.value));
3485
+ });
3486
+ root.querySelectorAll(".uiv-gcolor").forEach((node) => {
3487
+ const inp = node;
3488
+ const prop = inp.getAttribute("data-gprop");
3489
+ inp.addEventListener("change", () => {
3490
+ if (inp.value.toLowerCase() === toHexInput(this.liveVal(prop)).toLowerCase()) return;
3491
+ commit(prop, inp.value);
3492
+ });
3493
+ });
3494
+ root.querySelectorAll(".uiv-gtext").forEach((node) => {
3495
+ const inp = node;
3496
+ inp.addEventListener("change", () => commit(inp.getAttribute("data-gprop"), inp.value));
3497
+ inp.addEventListener("keydown", (e) => {
3498
+ if (e.key === "Enter") inp.blur();
3499
+ });
3500
+ });
3501
+ root.querySelectorAll(".uiv-gscrub").forEach((node) => {
3502
+ const handle = node;
3503
+ const prop = handle.getAttribute("data-gprop");
3504
+ const input = handle.parentElement.querySelector("input");
3505
+ this.bindGenericScrub(handle, input, prop);
3506
+ });
3507
+ }
3508
+ /** Default unit for a numeric property when the current value carries none —
3509
+ * from the registry type, so a unitless number never gets a bogus "px". */
3510
+ defaultUnit(prop) {
3511
+ const t = cssMeta(prop)?.type;
3512
+ if (t === "number" || t === "integer") return "";
3513
+ if (t === "time") return "s";
3514
+ if (t === "angle") return "deg";
3515
+ if (t === "percentage") return "%";
3516
+ return "px";
3517
+ }
3518
+ bindGenericScrub(handle, input, prop) {
3519
+ handle.addEventListener("pointerdown", (e) => {
3520
+ e.preventDefault();
3521
+ const startX = e.clientX;
3522
+ const m = /^(-?\d*\.?\d+)(\D*)$/.exec(input.value.trim());
3523
+ const start2 = m ? parseFloat(m[1]) : 0;
3524
+ const unit = m && m[2] ? m[2] : this.defaultUnit(prop);
3525
+ const unitless = unit === "";
3526
+ const step = unitless ? cssMeta(prop)?.type === "integer" ? 1 : 0.01 : 1;
3527
+ let pushed = false;
3528
+ try {
3529
+ handle.setPointerCapture(e.pointerId);
3530
+ } catch {
3531
+ }
3532
+ const move = (ev) => {
3533
+ if (!pushed) {
3534
+ this.pushHistory();
3535
+ pushed = true;
3536
+ }
3537
+ let nv = start2 + Math.round(ev.clientX - startX) * step;
3538
+ if (ev.shiftKey) nv = Math.round(nv / (10 * step)) * 10 * step;
3539
+ nv = +nv.toFixed(unitless && step < 1 ? 2 : 0);
3540
+ input.value = `${nv}${unit}`;
3541
+ this.liveSet([prop], input.value);
3542
+ };
3543
+ const up = () => {
3544
+ handle.removeEventListener("pointermove", move);
3545
+ handle.removeEventListener("pointerup", up);
3546
+ this.recordProps([prop]);
3547
+ };
3548
+ handle.addEventListener("pointermove", move);
3549
+ handle.addEventListener("pointerup", up);
3550
+ });
3551
+ }
2569
3552
  bindControls() {
2570
3553
  const root = this.root;
3554
+ this.bindGeneric();
3555
+ root.querySelectorAll(".uiv-tbtn").forEach((node) => {
3556
+ const btn = node;
3557
+ const prop = btn.getAttribute("data-prop");
3558
+ const val = btn.getAttribute("data-val");
3559
+ btn.addEventListener("click", () => {
3560
+ this.pushHistory();
3561
+ this.commitValue([prop], val);
3562
+ });
3563
+ });
3564
+ const bmPop = root.querySelector(".uiv-bm-pop");
3565
+ const bmPopLabel = bmPop?.querySelector(".uiv-bm-poplabel");
3566
+ root.querySelectorAll(".uiv-bm-i").forEach((node) => {
3567
+ const inp = node;
3568
+ const css = inp.getAttribute("data-css");
3569
+ inp.addEventListener("focus", () => {
3570
+ this.lastBmSide = css;
3571
+ if (bmPop) {
3572
+ bmPop.hidden = false;
3573
+ if (bmPopLabel) bmPopLabel.textContent = `${css} \u2192`;
3574
+ }
3575
+ });
3576
+ inp.addEventListener("blur", () => {
3577
+ window.setTimeout(() => {
3578
+ if (bmPop) bmPop.hidden = true;
3579
+ }, 140);
3580
+ });
3581
+ inp.addEventListener("change", () => {
3582
+ this.pushHistory();
3583
+ this.commitNumeric([css], inp.value);
3584
+ });
3585
+ inp.addEventListener("keydown", (e) => {
3586
+ if (e.key === "Enter") inp.blur();
3587
+ });
3588
+ inp.addEventListener("pointerdown", (e) => {
3589
+ const startX = e.clientX;
3590
+ const startVal = parseFloat(inp.value) || 0;
3591
+ let moved = false;
3592
+ let pushed = false;
3593
+ const move = (ev) => {
3594
+ if (!moved && Math.abs(ev.clientX - startX) < 3) return;
3595
+ if (!moved) {
3596
+ moved = true;
3597
+ inp.blur();
3598
+ }
3599
+ if (!pushed) {
3600
+ this.pushHistory();
3601
+ pushed = true;
3602
+ }
3603
+ let nv = startVal + Math.round(ev.clientX - startX);
3604
+ if (ev.shiftKey) nv = Math.round(nv / 10) * 10;
3605
+ nv = Math.max(0, nv);
3606
+ inp.value = String(nv);
3607
+ this.liveSet([css], `${nv}px`);
3608
+ };
3609
+ const up = () => {
3610
+ window.removeEventListener("pointermove", move);
3611
+ window.removeEventListener("pointerup", up);
3612
+ if (moved) this.recordProps([css]);
3613
+ };
3614
+ window.addEventListener("pointermove", move);
3615
+ window.addEventListener("pointerup", up);
3616
+ });
3617
+ });
3618
+ root.querySelectorAll(".uiv-bm-chip").forEach((node) => {
3619
+ const btn = node;
3620
+ const cssVar = btn.getAttribute("data-var");
3621
+ btn.addEventListener("mousedown", (e) => {
3622
+ e.preventDefault();
3623
+ const token = this.designSystem().tokens.find((t) => t.cssVar === cssVar);
3624
+ if (token) this.applyToken(this.lastBmSide, token);
3625
+ });
3626
+ });
2571
3627
  root.querySelectorAll(".uiv-num:not(.uiv-dim)").forEach((node) => {
2572
3628
  const box = node;
2573
3629
  const cssList = (box.getAttribute("data-css") || "").split(",").filter(Boolean);
@@ -2602,6 +3658,7 @@ var Uivisor = class {
2602
3658
  const input = node;
2603
3659
  const css = input.getAttribute("data-css");
2604
3660
  input.addEventListener("change", () => {
3661
+ if (input.value.toLowerCase() === toHexInput(this.liveVal(css)).toLowerCase()) return;
2605
3662
  this.pushHistory();
2606
3663
  this.commitValue([css], input.value);
2607
3664
  });
@@ -2955,7 +4012,7 @@ function escapeHtml(s) {
2955
4012
  return s.replace(/[&<>"]/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" })[c]);
2956
4013
  }
2957
4014
  function escapeAttr(s) {
2958
- return s.replace(/"/g, "&quot;");
4015
+ return s.replace(/&/g, "&amp;").replace(/"/g, "&quot;");
2959
4016
  }
2960
4017
  function cssAttrEscape(s) {
2961
4018
  return s.replace(/["\\]/g, "\\$&");