@valbuild/ui 0.45.0 → 0.46.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.
@@ -50849,7 +50849,7 @@ var Schema = /* @__PURE__ */ function() {
50849
50849
  return Schema2;
50850
50850
  }();
50851
50851
  var GetSchema = Symbol("GetSchema");
50852
- var Path = Symbol("Path");
50852
+ var Path$1 = Symbol("Path");
50853
50853
  var GetSource = Symbol("GetSource");
50854
50854
  function getSchema(selector) {
50855
50855
  return selector[GetSchema];
@@ -50898,10 +50898,10 @@ function isSerializedVal(val) {
50898
50898
  return _typeof(val) === "object" && val !== null && val !== void 0 && ("val" in val || "valPath" in val);
50899
50899
  }
50900
50900
  function isVal(val) {
50901
- return _typeof(val) === "object" && val !== null && val !== void 0 && Path in val && "val" in val;
50901
+ return _typeof(val) === "object" && val !== null && val !== void 0 && Path$1 in val && "val" in val;
50902
50902
  }
50903
50903
  function getValPath(valOrSelector) {
50904
- return valOrSelector[Path];
50904
+ return valOrSelector[Path$1];
50905
50905
  }
50906
50906
  function hasOwn$1(obj, prop) {
50907
50907
  return Object.prototype.hasOwnProperty.call(obj, prop);
@@ -50913,7 +50913,7 @@ function _andThen(f, source, path) {
50913
50913
  return newSelectorProxy(source, path);
50914
50914
  }
50915
50915
  function isSelector(source) {
50916
- return _typeof(source) === "object" && source !== null && (GetSource in source || Path in source);
50916
+ return _typeof(source) === "object" && source !== null && (GetSource in source || Path$1 in source);
50917
50917
  }
50918
50918
  function newSelectorProxy(source, path, moduleSchema) {
50919
50919
  if (_typeof(source) === "object") {
@@ -50942,7 +50942,7 @@ function newSelectorProxy(source, path, moduleSchema) {
50942
50942
  if (prop === GetSource) {
50943
50943
  return true;
50944
50944
  }
50945
- if (prop === Path) {
50945
+ if (prop === Path$1) {
50946
50946
  return true;
50947
50947
  }
50948
50948
  if (prop === "andThen") {
@@ -50957,7 +50957,7 @@ function newSelectorProxy(source, path, moduleSchema) {
50957
50957
  if (prop === GetSource) {
50958
50958
  return source;
50959
50959
  }
50960
- if (prop === Path) {
50960
+ if (prop === Path$1) {
50961
50961
  return path;
50962
50962
  }
50963
50963
  if (prop === GetSchema) {
@@ -51024,7 +51024,7 @@ function newSelectorProxy(source, path, moduleSchema) {
51024
51024
  andThen: function andThen(f) {
51025
51025
  return _andThen(f, source === void 0 ? null : source, path);
51026
51026
  }
51027
- }, GetSource, source === void 0 ? null : source), Path, path), GetSchema, moduleSchema);
51027
+ }, GetSource, source === void 0 ? null : source), Path$1, path), GetSchema, moduleSchema);
51028
51028
  }
51029
51029
  }
51030
51030
  function createValPathOfItem$1(arrayPath, prop) {
@@ -51034,7 +51034,7 @@ function createValPathOfItem$1(arrayPath, prop) {
51034
51034
  return arrayPath && "".concat(arrayPath, ".").concat(JSON.stringify(prop));
51035
51035
  }
51036
51036
  function unValify(valueOrSelector) {
51037
- if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path in valueOrSelector)) {
51037
+ if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path$1 in valueOrSelector)) {
51038
51038
  var selectorValue = valueOrSelector[GetSource];
51039
51039
  return selectorValue;
51040
51040
  }
@@ -51845,6 +51845,96 @@ function parsePath$1(input) {
51845
51845
  }
51846
51846
  return result2;
51847
51847
  }
51848
+ var StringSchema = /* @__PURE__ */ function(_Schema) {
51849
+ _inherits(StringSchema2, _Schema);
51850
+ var _super = _createSuper(StringSchema2);
51851
+ function StringSchema2(options) {
51852
+ var _this;
51853
+ var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
51854
+ var isRaw = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
51855
+ _classCallCheck(this, StringSchema2);
51856
+ _this = _super.call(this);
51857
+ _this.options = options;
51858
+ _this.opt = opt;
51859
+ _this.isRaw = isRaw;
51860
+ return _this;
51861
+ }
51862
+ _createClass(StringSchema2, [{
51863
+ key: "validate",
51864
+ value: function validate(path, src) {
51865
+ var _this$options, _this$options2, _this$options3;
51866
+ if (this.opt && (src === null || src === void 0)) {
51867
+ return false;
51868
+ }
51869
+ if (typeof src !== "string") {
51870
+ return _defineProperty$5({}, path, [{
51871
+ message: "Expected 'string', got '".concat(_typeof(src), "'"),
51872
+ value: src
51873
+ }]);
51874
+ }
51875
+ var errors = [];
51876
+ if ((_this$options = this.options) !== null && _this$options !== void 0 && _this$options.maxLength && src.length > this.options.maxLength) {
51877
+ errors.push({
51878
+ message: "Expected string to be at most ".concat(this.options.maxLength, " characters long, got ").concat(src.length),
51879
+ value: src
51880
+ });
51881
+ }
51882
+ if ((_this$options2 = this.options) !== null && _this$options2 !== void 0 && _this$options2.minLength && src.length < this.options.minLength) {
51883
+ errors.push({
51884
+ message: "Expected string to be at least ".concat(this.options.minLength, " characters long, got ").concat(src.length),
51885
+ value: src
51886
+ });
51887
+ }
51888
+ if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.regexp && !this.options.regexp.test(src)) {
51889
+ errors.push({
51890
+ message: "Expected string to match reg exp: ".concat(this.options.regexp.toString(), ", got '").concat(src, "'"),
51891
+ value: src
51892
+ });
51893
+ }
51894
+ if (errors.length > 0) {
51895
+ return _defineProperty$5({}, path, errors);
51896
+ }
51897
+ return false;
51898
+ }
51899
+ }, {
51900
+ key: "assert",
51901
+ value: function assert(src) {
51902
+ if (this.opt && (src === null || src === void 0)) {
51903
+ return true;
51904
+ }
51905
+ return typeof src === "string";
51906
+ }
51907
+ }, {
51908
+ key: "optional",
51909
+ value: function optional() {
51910
+ return new StringSchema2(this.options, true, this.isRaw);
51911
+ }
51912
+ }, {
51913
+ key: "raw",
51914
+ value: function raw() {
51915
+ return new StringSchema2(this.options, this.opt, true);
51916
+ }
51917
+ }, {
51918
+ key: "serialize",
51919
+ value: function serialize() {
51920
+ var _this$options4, _this$options5, _this$options6;
51921
+ return {
51922
+ type: "string",
51923
+ options: {
51924
+ maxLength: (_this$options4 = this.options) === null || _this$options4 === void 0 ? void 0 : _this$options4.maxLength,
51925
+ minLength: (_this$options5 = this.options) === null || _this$options5 === void 0 ? void 0 : _this$options5.minLength,
51926
+ regexp: ((_this$options6 = this.options) === null || _this$options6 === void 0 ? void 0 : _this$options6.regexp) && {
51927
+ source: this.options.regexp.source,
51928
+ flags: this.options.regexp.flags
51929
+ }
51930
+ },
51931
+ opt: this.opt,
51932
+ raw: this.isRaw
51933
+ };
51934
+ }
51935
+ }]);
51936
+ return StringSchema2;
51937
+ }(Schema);
51848
51938
  function getVal(selector) {
51849
51939
  return newValProxy(serializedValOfSelectorSource(selector));
51850
51940
  }
@@ -51867,7 +51957,7 @@ function serializedValOfSelectorSource(selector) {
51867
51957
  var isObject = isObjectOrObjectSelector(child);
51868
51958
  if (isArray) {
51869
51959
  var array = GetSource in child ? child[GetSource] : child;
51870
- var valPath = Path in child ? child[Path] : void 0;
51960
+ var valPath = Path$1 in child ? child[Path$1] : void 0;
51871
51961
  return {
51872
51962
  val: array.map(function(item, i) {
51873
51963
  return rec(isSelector(item) ? item : newSelectorProxy(item, createValPathOfItem$1(valPath, i)));
@@ -51876,7 +51966,7 @@ function serializedValOfSelectorSource(selector) {
51876
51966
  };
51877
51967
  } else if (isObject) {
51878
51968
  var obj = GetSource in child ? child[GetSource] : child;
51879
- var _valPath = Path in child ? child[Path] : void 0;
51969
+ var _valPath = Path$1 in child ? child[Path$1] : void 0;
51880
51970
  return {
51881
51971
  val: obj !== null && Object.fromEntries(Object.entries(obj).map(function(_ref) {
51882
51972
  var _ref2 = _slicedToArray$1(_ref, 2), key = _ref2[0], value = _ref2[1];
@@ -51887,7 +51977,7 @@ function serializedValOfSelectorSource(selector) {
51887
51977
  } else if (isSelector(child)) {
51888
51978
  return {
51889
51979
  val: rec(child[GetSource]),
51890
- valPath: child[Path]
51980
+ valPath: child[Path$1]
51891
51981
  };
51892
51982
  } else {
51893
51983
  return child;
@@ -51929,13 +52019,13 @@ function newValProxy(val) {
51929
52019
  if (prop === "val") {
51930
52020
  return true;
51931
52021
  }
51932
- if (prop === Path) {
52022
+ if (prop === Path$1) {
51933
52023
  return true;
51934
52024
  }
51935
52025
  return hasOwn(target, prop);
51936
52026
  },
51937
52027
  get: function get(target, prop) {
51938
- if (prop === Path) {
52028
+ if (prop === Path$1) {
51939
52029
  return val.valPath;
51940
52030
  }
51941
52031
  if (prop === "val") {
@@ -51956,7 +52046,7 @@ function newValProxy(val) {
51956
52046
  });
51957
52047
  }
51958
52048
  default:
51959
- return _defineProperty$5(_defineProperty$5({}, Path, val.valPath), "val", val.val);
52049
+ return _defineProperty$5(_defineProperty$5({}, Path$1, val.valPath), "val", val.val);
51960
52050
  }
51961
52051
  }
51962
52052
  function hasOwn(obj, prop) {
@@ -56381,7 +56471,7 @@ const Toolbar = ({
56381
56471
  }
56382
56472
  });
56383
56473
  }, [activeEditor]);
56384
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border-b bg-background border-highlight", children: [
56474
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border rounded-md rounded-b-none border-input bg-background", children: [
56385
56475
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row gap-1", children: [
56386
56476
  /* @__PURE__ */ jsxRuntime.jsx(
56387
56477
  Dropdown$1,
@@ -56510,12 +56600,10 @@ const Toolbar$1 = Toolbar;
56510
56600
  function onError(error) {
56511
56601
  console.error(error);
56512
56602
  }
56513
- const TOOLBAR_HEIGHT = 28;
56514
56603
  const RichTextEditor = ({
56515
56604
  richtext,
56516
56605
  onEditor
56517
56606
  }) => {
56518
- const { windowSize } = useValOverlayContext();
56519
56607
  const prePopulatedState = (editor) => {
56520
56608
  editor.setEditorState(
56521
56609
  editor.parseEditorState({
@@ -56558,17 +56646,8 @@ const RichTextEditor = ({
56558
56646
  /* @__PURE__ */ jsxRuntime.jsx(
56559
56647
  LexicalRichTextPlugin_1.RichTextPlugin,
56560
56648
  {
56561
- contentEditable: /* @__PURE__ */ jsxRuntime.jsx(
56562
- "div",
56563
- {
56564
- className: "font-sans border-b text-primary border-highlight",
56565
- style: {
56566
- minHeight: (windowSize == null ? void 0 : windowSize.innerHeight) ? (windowSize == null ? void 0 : windowSize.innerHeight) - TOOLBAR_HEIGHT : void 0
56567
- },
56568
- children: /* @__PURE__ */ jsxRuntime.jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" })
56569
- }
56570
- ),
56571
- placeholder: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "", children: "Enter some text..." }),
56649
+ contentEditable: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 py-2 text-sm border-b rounded-md rounded-t-none border-x border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", children: /* @__PURE__ */ jsxRuntime.jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" }) }),
56650
+ placeholder: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "" }),
56572
56651
  ErrorBoundary: LexicalErrorBoundary$1
56573
56652
  }
56574
56653
  ),
@@ -56633,17 +56712,22 @@ const LogIn = createLucideIcon("LogIn", [
56633
56712
  ["polyline", { points: "10 17 15 12 10 7", key: "1ail0h" }],
56634
56713
  ["line", { x1: "15", x2: "3", y1: "12", y2: "12", key: "v6grx8" }]
56635
56714
  ]);
56636
- const Maximize = createLucideIcon("Maximize", [
56637
- ["path", { d: "M8 3H5a2 2 0 0 0-2 2v3", key: "1dcmit" }],
56638
- ["path", { d: "M21 8V5a2 2 0 0 0-2-2h-3", key: "1e4gt3" }],
56639
- ["path", { d: "M3 16v3a2 2 0 0 0 2 2h3", key: "wsl5sc" }],
56640
- ["path", { d: "M16 21h3a2 2 0 0 0 2-2v-3", key: "18trek" }]
56715
+ const Maximize2 = createLucideIcon("Maximize2", [
56716
+ ["polyline", { points: "15 3 21 3 21 9", key: "mznyad" }],
56717
+ ["polyline", { points: "9 21 3 21 3 15", key: "1avn1i" }],
56718
+ ["line", { x1: "21", x2: "14", y1: "3", y2: "10", key: "ota7mn" }],
56719
+ ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
56641
56720
  ]);
56642
- const Minimize = createLucideIcon("Minimize", [
56643
- ["path", { d: "M8 3v3a2 2 0 0 1-2 2H3", key: "hohbtr" }],
56644
- ["path", { d: "M21 8h-3a2 2 0 0 1-2-2V3", key: "5jw1f3" }],
56645
- ["path", { d: "M3 16h3a2 2 0 0 1 2 2v3", key: "198tvr" }],
56646
- ["path", { d: "M16 21v-3a2 2 0 0 1 2-2h3", key: "ph8mxp" }]
56721
+ const Menu = createLucideIcon("Menu", [
56722
+ ["line", { x1: "4", x2: "20", y1: "12", y2: "12", key: "1e0a9i" }],
56723
+ ["line", { x1: "4", x2: "20", y1: "6", y2: "6", key: "1owob3" }],
56724
+ ["line", { x1: "4", x2: "20", y1: "18", y2: "18", key: "yk5zj1" }]
56725
+ ]);
56726
+ const Minimize2 = createLucideIcon("Minimize2", [
56727
+ ["polyline", { points: "4 14 10 14 10 20", key: "11kfnr" }],
56728
+ ["polyline", { points: "20 10 14 10 14 4", key: "rlmsce" }],
56729
+ ["line", { x1: "14", x2: "21", y1: "10", y2: "3", key: "o5lafz" }],
56730
+ ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
56647
56731
  ]);
56648
56732
  const Moon = createLucideIcon("Moon", [
56649
56733
  ["path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z", key: "a7tn18" }]
@@ -56683,20 +56767,35 @@ const PREV_URL_KEY = "valbuild:urlBeforeNavigation";
56683
56767
  function ValMenu({
56684
56768
  api,
56685
56769
  patches,
56770
+ direction,
56686
56771
  onCommit
56687
56772
  }) {
56688
56773
  const { theme: theme2, setTheme, editMode, setEditMode, session } = useValOverlayContext();
56689
56774
  if (session.status === "success" && session.data.mode === "unauthorized") {
56690
- return /* @__PURE__ */ jsxRuntime.jsxs(SingleItemMenu, { href: api.getLoginUrl(window.location.href), children: [
56691
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Login" }),
56692
- /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56693
- ] });
56775
+ return /* @__PURE__ */ jsxRuntime.jsxs(
56776
+ SingleItemMenu,
56777
+ {
56778
+ direction,
56779
+ href: api.getLoginUrl(window.location.href),
56780
+ children: [
56781
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Login" }),
56782
+ /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56783
+ ]
56784
+ }
56785
+ );
56694
56786
  }
56695
56787
  if (session.status === "success" && !session.data.enabled) {
56696
- return /* @__PURE__ */ jsxRuntime.jsxs(SingleItemMenu, { href: api.getEnableUrl(window.location.href), children: [
56697
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Enable" }),
56698
- /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56699
- ] });
56788
+ return /* @__PURE__ */ jsxRuntime.jsxs(
56789
+ SingleItemMenu,
56790
+ {
56791
+ direction,
56792
+ href: api.getEnableUrl(window.location.href),
56793
+ children: [
56794
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Enable" }),
56795
+ /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56796
+ ]
56797
+ }
56798
+ );
56700
56799
  }
56701
56800
  const [patchCount, setPatchCount] = React$3.useState();
56702
56801
  React$3.useEffect(() => {
@@ -56706,9 +56805,9 @@ function ValMenu({
56706
56805
  }
56707
56806
  setPatchCount(patchCount2);
56708
56807
  }, [patches]);
56709
- return /* @__PURE__ */ jsxRuntime.jsxs(MenuContainer, { children: [
56808
+ return /* @__PURE__ */ jsxRuntime.jsxs(MenuContainer, { direction, children: [
56710
56809
  /* @__PURE__ */ jsxRuntime.jsx(
56711
- MenuButton,
56810
+ MenuButton$1,
56712
56811
  {
56713
56812
  active: editMode === "hover",
56714
56813
  onClick: () => {
@@ -56718,7 +56817,7 @@ function ValMenu({
56718
56817
  }
56719
56818
  ),
56720
56819
  /* @__PURE__ */ jsxRuntime.jsx(
56721
- MenuButton,
56820
+ MenuButton$1,
56722
56821
  {
56723
56822
  onClick: () => {
56724
56823
  setTheme(theme2 === "dark" ? "light" : "dark");
@@ -56730,7 +56829,7 @@ function ValMenu({
56730
56829
  }
56731
56830
  ),
56732
56831
  /* @__PURE__ */ jsxRuntime.jsx(
56733
- MenuButton,
56832
+ MenuButton$1,
56734
56833
  {
56735
56834
  active: editMode === "full",
56736
56835
  onClick: () => {
@@ -56742,11 +56841,11 @@ function ValMenu({
56742
56841
  window.location.href = prevUrl || "/";
56743
56842
  }
56744
56843
  },
56745
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsxRuntime.jsx(Minimize, { size: 15 }) : /* @__PURE__ */ jsxRuntime.jsx(Maximize, { size: 15 }) })
56844
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsxRuntime.jsx(Minimize2, { size: 15 }) : /* @__PURE__ */ jsxRuntime.jsx(Maximize2, { size: 15 }) })
56746
56845
  }
56747
56846
  ),
56748
56847
  patchCount !== void 0 && session.status === "success" && session.data.mode === "proxy" && /* @__PURE__ */ jsxRuntime.jsx(
56749
- MenuButton,
56848
+ MenuButton$1,
56750
56849
  {
56751
56850
  onClick: () => {
56752
56851
  if (patchCount > 0) {
@@ -56774,16 +56873,42 @@ function ValMenu({
56774
56873
  }
56775
56874
  function SingleItemMenu({
56776
56875
  href,
56876
+ direction,
56777
56877
  children
56778
56878
  }) {
56779
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-row items-center justify-center w-full h-full font-sans border-2 rounded-full gap-x-3 text-primary bg-background border-fill", children: /* @__PURE__ */ jsxRuntime.jsx("a", { className, href, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center px-2 gap-x-2", children }) }) });
56879
+ return /* @__PURE__ */ jsxRuntime.jsx(
56880
+ "div",
56881
+ {
56882
+ className: classNames(
56883
+ "flex items-start justify-center w-full h-full font-sans border rounded-full gap-3 text-primary border-fill bg-gradient-to-br from-background/90 from-40% to-background backdrop-blur-lg drop-shadow-2xl",
56884
+ {
56885
+ "flex-col items-start": direction === "vertical",
56886
+ "flex-row items-center": direction === "horizontal"
56887
+ }
56888
+ ),
56889
+ children: /* @__PURE__ */ jsxRuntime.jsx("a", { className, href, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center px-2 gap-y-2", children }) })
56890
+ }
56891
+ );
56780
56892
  }
56781
56893
  function MenuContainer({
56782
- children
56894
+ children,
56895
+ direction
56783
56896
  }) {
56784
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-row items-center justify-center w-full h-full px-2 py-2 font-sans border-2 rounded-full gap-x-3 text-primary bg-background border-fill", children });
56897
+ return /* @__PURE__ */ jsxRuntime.jsx(
56898
+ "div",
56899
+ {
56900
+ className: classNames(
56901
+ "flex justify-center w-full h-full px-2 py-2 font-sans border rounded-full gap-3 text-primary border-fill bg-gradient-to-br from-background/90 from-40% to-background backdrop-blur-lg drop-shadow-2xl",
56902
+ {
56903
+ "flex-col items-start": direction === "vertical",
56904
+ "flex-row items-center": direction === "horizontal"
56905
+ }
56906
+ ),
56907
+ children
56908
+ }
56909
+ );
56785
56910
  }
56786
- function MenuButton({
56911
+ function MenuButton$1({
56787
56912
  active,
56788
56913
  onClick,
56789
56914
  children
@@ -56792,7 +56917,7 @@ function MenuButton({
56792
56917
  "button",
56793
56918
  {
56794
56919
  className: classNames(className, {
56795
- "bg-accent drop-shadow-[0px_0px_12px_rgba(56,205,152,0.60)]": active
56920
+ "bg-accent text-accent-foreground drop-shadow-[0px_0px_12px_hsl(var(--accent))]": active
56796
56921
  }),
56797
56922
  onClick,
56798
56923
  children
@@ -62380,14 +62505,21 @@ const twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
62380
62505
  function cn(...inputs) {
62381
62506
  return twMerge(clsx(inputs));
62382
62507
  }
62383
- const ScrollArea = React__namespace.forwardRef(({ className: className2, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
62508
+ const ScrollArea = React__namespace.forwardRef(({ className: className2, children, innerRef, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
62384
62509
  $57acba87d6e25586$export$be92b6f5f03c0fe9,
62385
62510
  {
62386
62511
  ref,
62387
62512
  className: cn("relative overflow-hidden", className2),
62388
62513
  ...props,
62389
62514
  children: [
62390
- /* @__PURE__ */ jsxRuntime.jsx($57acba87d6e25586$export$d5c6c08dc2d3ca7, { className: "h-full w-full rounded-[inherit]", children }),
62515
+ /* @__PURE__ */ jsxRuntime.jsx(
62516
+ $57acba87d6e25586$export$d5c6c08dc2d3ca7,
62517
+ {
62518
+ className: "h-full w-full rounded-[inherit]",
62519
+ ref: innerRef,
62520
+ children
62521
+ }
62522
+ ),
62391
62523
  /* @__PURE__ */ jsxRuntime.jsx(ScrollBar, {}),
62392
62524
  /* @__PURE__ */ jsxRuntime.jsx($57acba87d6e25586$export$ac61190d9fc311a9, {})
62393
62525
  ]
@@ -62418,8 +62550,8 @@ const ScrollBar = React__namespace.forwardRef(({ className: className2, orientat
62418
62550
  }
62419
62551
  ));
62420
62552
  ScrollBar.displayName = $57acba87d6e25586$export$2fabd85d0eba3c57.displayName;
62421
- const MIN_WIDTH = 320;
62422
- const MIN_HEIGHT = 320;
62553
+ const MIN_WIDTH = 400;
62554
+ const MIN_HEIGHT = 250;
62423
62555
  function ValWindow({
62424
62556
  position,
62425
62557
  onClose,
@@ -62442,14 +62574,12 @@ function ValWindow({
62442
62574
  const { windowSize, setWindowSize } = useValOverlayContext();
62443
62575
  React$3.useEffect(() => {
62444
62576
  var _a, _b;
62445
- if (!windowSize) {
62446
- setWindowSize({
62447
- height: MIN_HEIGHT,
62448
- width: MIN_WIDTH,
62449
- innerHeight: MIN_HEIGHT - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62450
- });
62451
- }
62452
- }, [windowSize]);
62577
+ setWindowSize({
62578
+ height: window.innerHeight - 30,
62579
+ width: MIN_WIDTH,
62580
+ innerHeight: window.innerHeight - 30 - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62581
+ });
62582
+ }, []);
62453
62583
  const bottomRef = React$3.useRef(null);
62454
62584
  return /* @__PURE__ */ jsxRuntime.jsx(
62455
62585
  Resizable,
@@ -62461,7 +62591,7 @@ function ValWindow({
62461
62591
  var _a, _b;
62462
62592
  return setWindowSize({
62463
62593
  ...size2,
62464
- innerHeight: ((windowSize == null ? void 0 : windowSize.height) || MIN_HEIGHT) - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62594
+ innerHeight: size2.height - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62465
62595
  });
62466
62596
  },
62467
62597
  handle: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed bottom-0 right-0 cursor-se-resize", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -62495,14 +62625,16 @@ function ValWindow({
62495
62625
  width: (windowSize == null ? void 0 : windowSize.width) || MIN_WIDTH,
62496
62626
  height: (windowSize == null ? void 0 : windowSize.height) || MIN_HEIGHT,
62497
62627
  left: draggedPosition.left,
62498
- top: draggedPosition.top
62628
+ top: draggedPosition.top,
62629
+ right: draggedPosition.right,
62630
+ bottom: draggedPosition.bottom
62499
62631
  },
62500
62632
  children: [
62501
62633
  /* @__PURE__ */ jsxRuntime.jsxs(
62502
62634
  "div",
62503
62635
  {
62504
62636
  ref: dragRef,
62505
- className: "relative flex items-center justify-center px-2 pt-2 text-primary",
62637
+ className: "relative flex items-center justify-center px-2 py-2 text-primary",
62506
62638
  children: [
62507
62639
  /* @__PURE__ */ jsxRuntime.jsx(
62508
62640
  AlignJustify,
@@ -62527,56 +62659,32 @@ function ValWindow({
62527
62659
  ]
62528
62660
  }
62529
62661
  ),
62530
- /* @__PURE__ */ jsxRuntime.jsxs(
62531
- "form",
62532
- {
62533
- className: "h-full",
62534
- onSubmit: (ev) => {
62535
- ev.preventDefault();
62536
- },
62537
- children: [
62538
- Array.isArray(children) && children.slice(0, 1),
62539
- /* @__PURE__ */ jsxRuntime.jsx(
62540
- ScrollArea,
62541
- {
62542
- className: "relative",
62543
- style: {
62544
- height: windowSize == null ? void 0 : windowSize.innerHeight
62545
- },
62546
- children: Array.isArray(children) ? children.slice(1, -1) : children
62547
- }
62548
- ),
62549
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
62550
- ]
62551
- }
62552
- )
62662
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
62663
+ Array.isArray(children) && children.slice(0, 1),
62664
+ /* @__PURE__ */ jsxRuntime.jsx(
62665
+ ScrollArea,
62666
+ {
62667
+ className: "relative",
62668
+ style: {
62669
+ height: windowSize == null ? void 0 : windowSize.innerHeight
62670
+ },
62671
+ children: Array.isArray(children) ? children.slice(1, -1) : children
62672
+ }
62673
+ ),
62674
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
62675
+ ] })
62553
62676
  ]
62554
62677
  }
62555
62678
  )
62556
62679
  }
62557
62680
  );
62558
62681
  }
62559
- function useDrag({
62560
- position: initPosition
62561
- }) {
62682
+ function useDrag({ position: initPosition }) {
62562
62683
  var _a, _b;
62563
- const [position, setPosition] = React$3.useState({ left: 0, top: 0 });
62684
+ const [position, setPosition] = React$3.useState({ left: window.innerWidth - MIN_WIDTH - (24 + 50), top: 16 });
62564
62685
  React$3.useEffect(() => {
62565
- var _a2, _b2;
62566
62686
  if (initPosition) {
62567
- const left = initPosition.left - (((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2;
62568
- const top = initPosition.top - 16;
62569
- setPosition({
62570
- left: left < 0 ? 0 : left,
62571
- top: top < 0 ? 0 : top
62572
- });
62573
- } else {
62574
- const left = window.innerWidth / 2 - MIN_WIDTH / 2 - window.scrollX;
62575
- const top = window.innerHeight / 2 - MIN_HEIGHT / 2 + window.scrollY;
62576
- setPosition({
62577
- left,
62578
- top
62579
- });
62687
+ setPosition(initPosition);
62580
62688
  }
62581
62689
  }, [initPosition]);
62582
62690
  const [mouseDown, setMouseDown] = React$3.useState(false);
@@ -62590,8 +62698,8 @@ function useDrag({
62590
62698
  if (mouseDown) {
62591
62699
  e.preventDefault();
62592
62700
  e.stopPropagation();
62593
- const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.pageX;
62594
- const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.pageY;
62701
+ const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.clientX;
62702
+ const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.clientY;
62595
62703
  setPosition({
62596
62704
  left: left < 0 ? 0 : left,
62597
62705
  top: top < 0 ? 0 : top
@@ -62769,6 +62877,7 @@ function Grid({ children }) {
62769
62877
  const x = React$3.useRef(0);
62770
62878
  const dragRef = React$3.useRef(null);
62771
62879
  const originalWidth = React$3.useRef(0);
62880
+ const [showMobileLeftMenu, setShowMobileLeftMenu] = React$3.useState(true);
62772
62881
  const handleMouseUp = () => {
62773
62882
  isResizing.current = false;
62774
62883
  dragRef.current = null;
@@ -62809,17 +62918,40 @@ function Grid({ children }) {
62809
62918
  document.removeEventListener("mousemove", handleMouseMove);
62810
62919
  };
62811
62920
  }, []);
62812
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-screen", children: [
62921
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex h-screen", children: [
62813
62922
  /* @__PURE__ */ jsxRuntime.jsxs(
62814
62923
  "div",
62815
62924
  {
62816
62925
  ref: leftColRef,
62817
- className: "relative border-r border-border",
62818
- style: { width: 300 },
62926
+ className: classNames(
62927
+ "absolute top-0 left-0 border-r border-border md:relative z-[1] bg-gradient-to-br from-card from-50% to-background",
62928
+ {
62929
+ "w-[300px]": showMobileLeftMenu,
62930
+ "w-0 md:w-[300px]": !showMobileLeftMenu
62931
+ }
62932
+ ),
62819
62933
  children: [
62820
62934
  /* @__PURE__ */ jsxRuntime.jsxs(Grid.Column, { children: [
62821
- header1,
62822
- /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { style: { height: "calc(100vh - 50px)" }, children: body1 })
62935
+ /* @__PURE__ */ jsxRuntime.jsx(
62936
+ MenuButton,
62937
+ {
62938
+ showOnMobile: !showMobileLeftMenu,
62939
+ onClick: () => {
62940
+ setShowMobileLeftMenu(!showMobileLeftMenu);
62941
+ },
62942
+ children: header1
62943
+ }
62944
+ ),
62945
+ /* @__PURE__ */ jsxRuntime.jsx(
62946
+ ScrollArea,
62947
+ {
62948
+ style: { height: "calc(100vh - 50px)" },
62949
+ onClick: () => {
62950
+ setShowMobileLeftMenu(false);
62951
+ },
62952
+ children: body1
62953
+ }
62954
+ )
62823
62955
  ] }),
62824
62956
  /* @__PURE__ */ jsxRuntime.jsx(
62825
62957
  "div",
@@ -62838,7 +62970,28 @@ function Grid({ children }) {
62838
62970
  "w-full": !header3 && !body3
62839
62971
  }),
62840
62972
  children: /* @__PURE__ */ jsxRuntime.jsxs(Grid.Column, { children: [
62841
- header2,
62973
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex w-full border-b border-border", children: [
62974
+ /* @__PURE__ */ jsxRuntime.jsx(
62975
+ MenuButton,
62976
+ {
62977
+ className: "md:hidden",
62978
+ showOnMobile: showMobileLeftMenu,
62979
+ onClick: () => {
62980
+ setShowMobileLeftMenu(!showMobileLeftMenu);
62981
+ },
62982
+ children: header1
62983
+ }
62984
+ ),
62985
+ /* @__PURE__ */ jsxRuntime.jsx(
62986
+ "span",
62987
+ {
62988
+ className: classNames({
62989
+ "pl-[300px] md:pl-0": showMobileLeftMenu
62990
+ }),
62991
+ children: header2
62992
+ }
62993
+ )
62994
+ ] }),
62842
62995
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { style: { height: "calc(100vh - 50px)" }, children: body2 })
62843
62996
  ] })
62844
62997
  }
@@ -62866,111 +63019,30 @@ function Grid({ children }) {
62866
63019
  )
62867
63020
  ] });
62868
63021
  }
62869
- Grid.Column = ({ children }) => {
62870
- const [header, body] = React$3.Children.toArray(children);
62871
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
62872
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center border-b border-border", children: header }),
62873
- body
62874
- ] });
62875
- };
62876
- const Section = ({ className: className2 }) => {
63022
+ function MenuButton({
63023
+ className: className2,
63024
+ showOnMobile,
63025
+ onClick,
63026
+ children
63027
+ }) {
62877
63028
  return /* @__PURE__ */ jsxRuntime.jsxs(
62878
- "svg",
63029
+ "div",
62879
63030
  {
62880
- width: "9",
62881
- height: "10",
62882
- viewBox: "0 0 9 10",
62883
- className: className2,
62884
- fill: "currentColor",
62885
- xmlns: "http://www.w3.org/2000/svg",
63031
+ className: classNames("flex items-center px-4 md:px-4", className2, {
63032
+ "hidden md:flex": showOnMobile
63033
+ }),
62886
63034
  children: [
62887
- /* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip0_1222_1618)", children: [
62888
- /* @__PURE__ */ jsxRuntime.jsx(
62889
- "path",
62890
- {
62891
- fillRule: "evenodd",
62892
- clipRule: "evenodd",
62893
- d: "M9 1.5H0V0.5H9V1.5Z",
62894
- fill: "currentColor"
62895
- }
62896
- ),
62897
- /* @__PURE__ */ jsxRuntime.jsx(
62898
- "path",
62899
- {
62900
- fillRule: "evenodd",
62901
- clipRule: "evenodd",
62902
- d: "M9 9.5H0V8.5H9V9.5Z",
62903
- fill: "currentColor"
62904
- }
62905
- )
62906
- ] }),
62907
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: "clip0_1222_1618", children: /* @__PURE__ */ jsxRuntime.jsx(
62908
- "rect",
62909
- {
62910
- width: "9",
62911
- height: "9",
62912
- fill: "white",
62913
- transform: "translate(0 0.5)"
62914
- }
62915
- ) }) })
63035
+ /* @__PURE__ */ jsxRuntime.jsx("button", { className: "md:hidden", onClick, children: /* @__PURE__ */ jsxRuntime.jsx(Menu, {}) }),
63036
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center justify-between w-full", children })
62916
63037
  ]
62917
63038
  }
62918
63039
  );
62919
- };
62920
- const Section$1 = Section;
62921
- const TextIcon = ({ className: className2 }) => {
62922
- return /* @__PURE__ */ jsxRuntime.jsx(
62923
- "svg",
62924
- {
62925
- width: "9",
62926
- height: "10",
62927
- viewBox: "0 0 9 10",
62928
- fill: "currentColor",
62929
- xmlns: "http://www.w3.org/2000/svg",
62930
- className: className2,
62931
- children: /* @__PURE__ */ jsxRuntime.jsx("g", { clipPath: "url(#clip0_1229_1625)", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0.0145513 0.5H8.98545L9 3.18569H8.57074C8.43007 2.2276 8.02749 1.57948 7.36298 1.24133C6.98949 1.05491 6.43169 0.953035 5.68957 0.935694V7.94581C5.68957 8.43569 5.78416 8.76084 5.97332 8.92124C6.16734 9.08165 6.5675 9.16185 7.17381 9.16185V9.5H1.86257V9.16185C2.44462 9.16185 2.83023 9.08165 3.0194 8.92124C3.21342 8.7565 3.31043 8.43136 3.31043 7.94581V0.935694C2.58286 0.953035 2.02506 1.05491 1.63703 1.24133C0.92401 1.58815 0.521423 2.23627 0.429264 3.18569H0L0.0145513 0.5Z" }) })
62932
- }
62933
- );
62934
- };
62935
- const TextIcon$1 = TextIcon;
62936
- function Tree({ children, rootPath }) {
62937
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: React$3.Children.map(children, (child) => {
62938
- return React$3.cloneElement(child, {
62939
- paths: [rootPath]
62940
- });
62941
- }) });
62942
63040
  }
62943
- Tree.Node = ({
62944
- children,
62945
- paths = [],
62946
- path,
62947
- level = 1,
62948
- type,
62949
- setActivePath
62950
- }) => {
62951
- const paddingLeft = level * 30;
62952
- const logo = type === "string" ? /* @__PURE__ */ jsxRuntime.jsx(TextIcon$1, {}) : type === "image" ? /* @__PURE__ */ jsxRuntime.jsx(ImageIcon$1, { className: "h-[9px] w-[9px]" }) : /* @__PURE__ */ jsxRuntime.jsx(Section$1, {});
62953
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full", children: [
62954
- /* @__PURE__ */ jsxRuntime.jsx(
62955
- "button",
62956
- {
62957
- className: "flex justify-between w-full group py-2 text-xs font-[400] shrink-0",
62958
- onClick: () => {
62959
- setActivePath && setActivePath(path);
62960
- },
62961
- style: { paddingLeft },
62962
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2", children: [
62963
- logo,
62964
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: path })
62965
- ] })
62966
- }
62967
- ),
62968
- children && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: React$3.Children.map(children, (child) => {
62969
- return React$3.cloneElement(child, {
62970
- level: level + 1,
62971
- paths: [...paths, path]
62972
- });
62973
- }) })
63041
+ Grid.Column = ({ children, className: className2 }) => {
63042
+ const [header, body] = React$3.Children.toArray(children);
63043
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classNames("flex flex-col", className2), children: [
63044
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center border-b border-border", children: header }),
63045
+ body
62974
63046
  ] });
62975
63047
  };
62976
63048
  const falsyToString = (value) => typeof value === "boolean" ? "".concat(value) : value === 0 ? "0" : value;
@@ -67474,8 +67546,10 @@ function ValFormField({
67474
67546
  return /* @__PURE__ */ jsxRuntime.jsx(
67475
67547
  StringField,
67476
67548
  {
67549
+ path,
67477
67550
  defaultValue: source,
67478
67551
  disabled,
67552
+ schema,
67479
67553
  registerPatchCallback,
67480
67554
  onSubmit
67481
67555
  }
@@ -67550,7 +67624,13 @@ function ValFormField({
67550
67624
  }
67551
67625
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
67552
67626
  "Unsupported schema: ",
67553
- schema.type
67627
+ schema.type,
67628
+ " (source type: ",
67629
+ typeof source,
67630
+ " source:",
67631
+ " ",
67632
+ JSON.stringify(source),
67633
+ ")"
67554
67634
  ] });
67555
67635
  }
67556
67636
  function createImagePatch(path, data, filename, metadata) {
@@ -67609,6 +67689,7 @@ function ImageField({
67609
67689
  onSubmit,
67610
67690
  registerPatchCallback
67611
67691
  }) {
67692
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
67612
67693
  const [data, setData] = React$3.useState(
67613
67694
  null
67614
67695
  );
@@ -67632,7 +67713,7 @@ function ImageField({
67632
67713
  }
67633
67714
  }, [data, defaultValue]);
67634
67715
  React$3.useEffect(() => {
67635
- var _a;
67716
+ var _a2;
67636
67717
  if (hotspot) {
67637
67718
  if (metadata) {
67638
67719
  const newMetadata = {
@@ -67649,111 +67730,125 @@ function ImageField({
67649
67730
  console.error("Neither image metadata nor value is set");
67650
67731
  }
67651
67732
  } else {
67652
- if ((_a = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a.hotspot) {
67733
+ if ((_a2 = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a2.hotspot) {
67653
67734
  setHotspot(defaultValue.metadata.hotspot);
67654
67735
  }
67655
67736
  }
67656
67737
  }, [hotspot, defaultValue]);
67657
67738
  return /* @__PURE__ */ jsxRuntime.jsxs(FieldContainer, { children: [
67658
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col max-w-4xl p-4 gap-y-4", children: [
67659
- data || url ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
67660
- hotspot && /* @__PURE__ */ jsxRuntime.jsx(
67661
- "div",
67662
- {
67663
- className: "rounded-full h-[20px] w-[20px] bg-accent absolute",
67664
- style: {
67665
- top: `${hotspot.y * 100}%`,
67666
- left: `${hotspot.x * 100}%`
67739
+ /* @__PURE__ */ jsxRuntime.jsx(
67740
+ "div",
67741
+ {
67742
+ className: "flex flex-col max-w-4xl p-2 border border-b-0 rounded-sm rounded-b-none gap-y-4 bg-background text-foreground border-input",
67743
+ children: data || url ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
67744
+ hotspot && /* @__PURE__ */ jsxRuntime.jsx(
67745
+ "div",
67746
+ {
67747
+ className: "rounded-full h-[12px] w-[12px] bg-background mix-blend-difference border-accent border-2 absolute pointer-events-none",
67748
+ style: {
67749
+ top: `${hotspot.y * 100}%`,
67750
+ left: `${hotspot.x * 100}%`
67751
+ }
67667
67752
  }
67668
- }
67669
- ),
67670
- /* @__PURE__ */ jsxRuntime.jsx(
67671
- "img",
67672
- {
67673
- src: (data == null ? void 0 : data.src) || url,
67674
- className: "w-full cursor-crosshair",
67675
- onClick: (ev) => {
67676
- const x = ev.nativeEvent.offsetX;
67677
- const y = ev.nativeEvent.offsetY;
67678
- const width2 = ev.currentTarget.clientWidth;
67679
- const height2 = ev.currentTarget.clientHeight;
67680
- const hotspotX = Math.round(x / width2 * 100) / 100;
67681
- const hotspotY = Math.round(y / height2 * 100) / 100;
67682
- setHotspot({ x: hotspotX, y: hotspotY, width: 1, height: 1 });
67753
+ ),
67754
+ /* @__PURE__ */ jsxRuntime.jsx(
67755
+ "img",
67756
+ {
67757
+ src: (data == null ? void 0 : data.src) || url,
67758
+ draggable: false,
67759
+ className: "w-full",
67760
+ style: {
67761
+ cursor: "crosshair"
67762
+ },
67763
+ onClick: (ev) => {
67764
+ const { width: width2, height: height2, left, top } = ev.currentTarget.getBoundingClientRect();
67765
+ const hotspotX = (ev.clientX - 6 - left) / width2;
67766
+ const hotspotY = (ev.clientY - 6 - top) / height2;
67767
+ setHotspot({
67768
+ x: hotspotX,
67769
+ y: hotspotY,
67770
+ width: 1,
67771
+ height: 1
67772
+ });
67773
+ }
67683
67774
  }
67684
- }
67685
- )
67686
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Select image below" }),
67687
- /* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: `img_input:${path}`, className: "", children: [
67688
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-1 py-2 text-center rounded-md bg-primary text-background", children: "Update image" }),
67689
- /* @__PURE__ */ jsxRuntime.jsx(
67690
- "input",
67691
- {
67692
- hidden: true,
67693
- id: `img_input:${path}`,
67694
- type: "file",
67695
- onChange: (ev) => {
67696
- readImage(ev).then((res) => {
67697
- setData({ src: res.src, filename: res.filename });
67698
- if (res.width && res.height && res.mimeType) {
67699
- setMetadata({
67700
- sha256: res.sha256,
67701
- width: res.width,
67702
- height: res.height,
67703
- mimeType: res.mimeType,
67704
- hotspot
67705
- });
67706
- } else {
67707
- setMetadata(void 0);
67708
- setHotspot(void 0);
67709
- }
67710
- }).catch((err2) => {
67711
- console.error(err2.message);
67712
- setData(null);
67713
- setHotspot(void 0);
67775
+ )
67776
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Select image below" })
67777
+ },
67778
+ path
67779
+ ),
67780
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full p-4 border border-t-0 rounded-b-sm bg-background border-input", children: [
67781
+ /* @__PURE__ */ jsxRuntime.jsx(
67782
+ "label",
67783
+ {
67784
+ htmlFor: `img_input:${path}`,
67785
+ className: "block w-full px-1 py-2 text-sm text-center rounded-md cursor-pointer bg-primary text-background",
67786
+ children: "Update"
67787
+ }
67788
+ ),
67789
+ /* @__PURE__ */ jsxRuntime.jsx(
67790
+ "input",
67791
+ {
67792
+ hidden: true,
67793
+ id: `img_input:${path}`,
67794
+ type: "file",
67795
+ onChange: (ev) => {
67796
+ readImage(ev).then((res) => {
67797
+ setData({ src: res.src, filename: res.filename });
67798
+ if (res.width && res.height && res.mimeType) {
67799
+ setMetadata({
67800
+ sha256: res.sha256,
67801
+ width: res.width,
67802
+ height: res.height,
67803
+ mimeType: res.mimeType,
67804
+ hotspot
67805
+ });
67806
+ } else {
67714
67807
  setMetadata(void 0);
67715
- });
67716
- }
67808
+ setHotspot(void 0);
67809
+ }
67810
+ }).catch((err2) => {
67811
+ console.error(err2.message);
67812
+ setData(null);
67813
+ setHotspot(void 0);
67814
+ setMetadata(void 0);
67815
+ });
67717
67816
  }
67718
- )
67719
- ] })
67720
- ] }, path),
67721
- onSubmit && data && /* @__PURE__ */ jsxRuntime.jsx(
67722
- SubmitButton,
67723
- {
67724
- loading,
67725
- onClick: () => {
67726
- setLoading(true);
67727
- onSubmit(
67728
- (path2) => Promise.resolve(
67729
- createImagePatch(
67730
- path2,
67731
- data.src,
67732
- data.filename ?? null,
67733
- metadata
67734
- )
67735
- )
67736
- ).finally(() => {
67737
- setLoading(false);
67738
- setData(null);
67739
- setMetadata(void 0);
67740
- });
67741
67817
  }
67742
- }
67743
- ),
67744
- onSubmit && !data && metadata && /* @__PURE__ */ jsxRuntime.jsx(
67818
+ )
67819
+ ] }),
67820
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67745
67821
  SubmitButton,
67746
67822
  {
67747
67823
  loading,
67824
+ enabled: !!data || ((_b = (_a = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a.hotspot) == null ? void 0 : _b.height) !== (hotspot == null ? void 0 : hotspot.height) || ((_d = (_c = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _c.hotspot) == null ? void 0 : _d.width) !== (hotspot == null ? void 0 : hotspot.width) || ((_f = (_e = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _e.hotspot) == null ? void 0 : _f.x) !== (hotspot == null ? void 0 : hotspot.x) || ((_h = (_g = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _g.hotspot) == null ? void 0 : _h.y) !== (hotspot == null ? void 0 : hotspot.y) || ((_i = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _i.width) !== (metadata == null ? void 0 : metadata.width) || ((_j = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _j.height) !== (metadata == null ? void 0 : metadata.height) || ((_k = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _k.mimeType) !== (metadata == null ? void 0 : metadata.mimeType) || ((_l = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _l.sha256) !== (metadata == null ? void 0 : metadata.sha256),
67748
67825
  onClick: () => {
67749
- setLoading(true);
67750
- onSubmit(
67751
- (path2) => Promise.resolve(createImageMetadataPatch(path2, metadata))
67752
- ).finally(() => {
67753
- setLoading(false);
67754
- setData(null);
67755
- setMetadata(void 0);
67756
- });
67826
+ if (data) {
67827
+ setLoading(true);
67828
+ onSubmit(
67829
+ (path2) => Promise.resolve(
67830
+ createImagePatch(
67831
+ path2,
67832
+ data.src,
67833
+ data.filename ?? null,
67834
+ metadata
67835
+ )
67836
+ )
67837
+ ).finally(() => {
67838
+ setLoading(false);
67839
+ setData(null);
67840
+ setMetadata(void 0);
67841
+ });
67842
+ } else if (metadata) {
67843
+ setLoading(true);
67844
+ onSubmit(
67845
+ (path2) => Promise.resolve(createImageMetadataPatch(path2, metadata))
67846
+ ).finally(() => {
67847
+ setLoading(false);
67848
+ setData(null);
67849
+ setMetadata(void 0);
67850
+ });
67851
+ }
67757
67852
  }
67758
67853
  }
67759
67854
  )
@@ -67834,10 +67929,11 @@ function RichTextField({
67834
67929
  }
67835
67930
  }
67836
67931
  ),
67837
- onSubmit && didChange && /* @__PURE__ */ jsxRuntime.jsx(
67932
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67838
67933
  SubmitButton,
67839
67934
  {
67840
67935
  loading: loading || !editor,
67936
+ enabled: didChange,
67841
67937
  onClick: () => {
67842
67938
  if (editor) {
67843
67939
  setLoading(true);
@@ -67919,10 +68015,11 @@ function KeyOfField({
67919
68015
  ]
67920
68016
  }
67921
68017
  ),
67922
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68018
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67923
68019
  SubmitButton,
67924
68020
  {
67925
68021
  loading,
68022
+ enabled: defaultValue !== value,
67926
68023
  onClick: () => {
67927
68024
  setLoading(true);
67928
68025
  onSubmit(async (path) => [
@@ -67976,10 +68073,11 @@ function NumberField({
67976
68073
  type: "number"
67977
68074
  }
67978
68075
  ),
67979
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68076
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67980
68077
  SubmitButton,
67981
68078
  {
67982
68079
  loading,
68080
+ enabled: defaultValue !== value,
67983
68081
  onClick: () => {
67984
68082
  setLoading(true);
67985
68083
  onSubmit(async (path) => {
@@ -68002,6 +68100,8 @@ function NumberField({
68002
68100
  function StringField({
68003
68101
  disabled,
68004
68102
  defaultValue,
68103
+ path,
68104
+ schema,
68005
68105
  registerPatchCallback,
68006
68106
  onSubmit
68007
68107
  }) {
@@ -68013,18 +68113,28 @@ function StringField({
68013
68113
  const ref = React$3.useRef(null);
68014
68114
  React$3.useEffect(() => {
68015
68115
  if (registerPatchCallback) {
68016
- registerPatchCallback(async (path) => {
68116
+ registerPatchCallback(async (path2) => {
68017
68117
  var _a;
68018
68118
  return [
68019
68119
  {
68020
68120
  op: "replace",
68021
- path,
68121
+ path: path2,
68022
68122
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
68023
68123
  }
68024
68124
  ];
68025
68125
  });
68026
68126
  }
68027
68127
  }, []);
68128
+ const actualSchema = new StringSchema(
68129
+ schema.options ? {
68130
+ ...schema.options,
68131
+ regexp: schema.options.regexp ? new RegExp(
68132
+ schema.options.regexp.source,
68133
+ schema.options.regexp.flags
68134
+ ) : void 0
68135
+ } : void 0
68136
+ );
68137
+ const validationErrors = actualSchema.validate(path, value);
68028
68138
  return /* @__PURE__ */ jsxRuntime.jsxs(FieldContainer, { children: [
68029
68139
  /* @__PURE__ */ jsxRuntime.jsx(
68030
68140
  Input,
@@ -68035,18 +68145,20 @@ function StringField({
68035
68145
  onChange: (e) => setValue(e.target.value)
68036
68146
  }
68037
68147
  ),
68038
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68148
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
68039
68149
  SubmitButton,
68040
68150
  {
68151
+ validationErrors: validationErrors && validationErrors[path],
68041
68152
  loading,
68153
+ enabled: defaultValue !== value && !validationErrors,
68042
68154
  onClick: () => {
68043
68155
  setLoading(true);
68044
- onSubmit(async (path) => {
68156
+ onSubmit(async (path2) => {
68045
68157
  var _a;
68046
68158
  return [
68047
68159
  {
68048
68160
  op: "replace",
68049
- path,
68161
+ path: path2,
68050
68162
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
68051
68163
  }
68052
68164
  ];
@@ -68058,14 +68170,24 @@ function StringField({
68058
68170
  )
68059
68171
  ] });
68060
68172
  }
68173
+ function InlineValidationErrors({ errors }) {
68174
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-y-1 p-2 rounded-md text-sm text-destructive-foreground bg-destructive", children: errors.map((error, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: error.message }, i)) });
68175
+ }
68061
68176
  function FieldContainer({ children }) {
68062
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative p-4 border rounded border-card", children });
68177
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative p-4", children });
68063
68178
  }
68064
68179
  function SubmitButton({
68065
68180
  loading,
68181
+ enabled,
68182
+ validationErrors,
68066
68183
  onClick
68067
68184
  }) {
68068
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky bottom-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end w-full py-2", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { disabled: loading, onClick, children: loading ? "Saving..." : "Save" }) }) });
68185
+ const { session } = useValOverlayContext();
68186
+ const isProxy = session.status === "success" && session.data.mode === "proxy";
68187
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky bottom-0 m-4 ml-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between w-full gap-2 py-2 text-sm", children: [
68188
+ validationErrors ? /* @__PURE__ */ jsxRuntime.jsx(InlineValidationErrors, { errors: validationErrors || [] }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
68189
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { disabled: loading || !enabled, onClick, children: loading ? isProxy ? "Staging..." : "Saving..." : isProxy ? "Stage" : "Save" })
68190
+ ] }) });
68069
68191
  }
68070
68192
  const Logo = ({ className: className2 }) => {
68071
68193
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -68082,7 +68204,7 @@ const Logo = ({ className: className2 }) => {
68082
68204
  "path",
68083
68205
  {
68084
68206
  d: "M5 5.36426C5 5.16309 5.16309 5 5.36426 5H17.6581C17.8593 5 18.0223 5.16309 18.0223 5.36426V28.4949C18.0223 28.696 17.8593 28.8591 17.6581 28.8591H5.36426C5.16309 28.8591 5 28.696 5 28.4949V5.36426Z",
68085
- fill: "#38CD98"
68207
+ fill: "hsl(var(--accent))"
68086
68208
  }
68087
68209
  ) }),
68088
68210
  /* @__PURE__ */ jsxRuntime.jsx("g", { filter: "url(#filter1_i_21_1677)", children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11.4656", cy: "23.7595", r: "2.18557", fill: "currentColor" }) }),
@@ -72536,6 +72658,33 @@ function useSession(api) {
72536
72658
  }, [sessionResetId]);
72537
72659
  return session;
72538
72660
  }
72661
+ function Path({ children }) {
72662
+ const segs = children.split("/").filter((seg) => seg);
72663
+ return segs.map((seg, i) => {
72664
+ if (i !== segs.length - 1) {
72665
+ return /* @__PURE__ */ jsxRuntime.jsxs(React$3.Fragment, { children: [
72666
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: seg }),
72667
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-[2px] text-muted", children: "/" })
72668
+ ] }, `${children}/${seg}`);
72669
+ }
72670
+ return /* @__PURE__ */ jsxRuntime.jsx(Seg, { children: seg }, children);
72671
+ });
72672
+ }
72673
+ function Seg({ children }) {
72674
+ if (children.includes(".")) {
72675
+ const segs = children.split(".");
72676
+ return segs.map((seg, i) => {
72677
+ if (i !== segs.length - 1) {
72678
+ return /* @__PURE__ */ jsxRuntime.jsxs(React$3.Fragment, { children: [
72679
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }),
72680
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-[2px] text-muted", children: "." })
72681
+ ] }, `${children}.${seg}`);
72682
+ }
72683
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }, children);
72684
+ });
72685
+ }
72686
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { children });
72687
+ }
72539
72688
  const ValModulesContext = React$3.createContext(null);
72540
72689
  const useValModuleFromPath = (sourcePath) => {
72541
72690
  var _a, _b;
@@ -72686,12 +72835,13 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72686
72835
  "div",
72687
72836
  {
72688
72837
  id: "val-fullscreen-container",
72689
- className: "relative font-serif antialiased",
72838
+ className: "relative w-full h-[100] overflow-hidden font-serif antialiased bg-background text-primary",
72690
72839
  "data-mode": theme2,
72691
72840
  children: [
72692
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-x-1/2 z-overlay left-1/2 bottom-4", children: /* @__PURE__ */ jsxRuntime.jsx(
72841
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(
72693
72842
  ValMenu,
72694
72843
  {
72844
+ direction: "vertical",
72695
72845
  api,
72696
72846
  patches,
72697
72847
  onCommit: () => setPatchResetId((prev) => prev + 1)
@@ -72704,18 +72854,19 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72704
72854
  value: {
72705
72855
  hoverElem: hoverElemRef == null ? void 0 : hoverElemRef.current
72706
72856
  },
72707
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-primary bg-background", children: /* @__PURE__ */ jsxRuntime.jsxs(Grid, { children: [
72857
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-primary", children: /* @__PURE__ */ jsxRuntime.jsxs(Grid, { children: [
72708
72858
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 h-[50px] flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Logo$1, {}) }),
72709
72859
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "px-4", children: modules ? /* @__PURE__ */ jsxRuntime.jsx(
72710
72860
  PathTree,
72711
72861
  {
72862
+ selectedPath,
72712
72863
  paths: Object.keys(modules),
72713
72864
  setSelectedModuleId: (path) => {
72714
72865
  navigate(path);
72715
72866
  }
72716
72867
  }
72717
72868
  ) : !error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-4", children: "Loading..." }) }),
72718
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start w-full h-[50px] gap-2 font-serif text-xs", children: [
72869
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start h-[50px] gap-2 font-serif text-xs", children: [
72719
72870
  /* @__PURE__ */ jsxRuntime.jsx(
72720
72871
  "button",
72721
72872
  {
@@ -72725,10 +72876,10 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72725
72876
  children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft, {})
72726
72877
  }
72727
72878
  ),
72728
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: selectedPath || "/" })
72879
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: selectedPath || "/" }) })
72729
72880
  ] }),
72730
72881
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4", children: [
72731
- error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg text-destructive-foreground", children: [
72882
+ error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 text-lg bg-destructive text-destructive-foreground max-w-xl", children: [
72732
72883
  "ERROR: ",
72733
72884
  error
72734
72885
  ] }),
@@ -72797,7 +72948,7 @@ function AnyVal({
72797
72948
  initOnSubmit,
72798
72949
  top
72799
72950
  }) {
72800
- if (source === null || schema.opt) {
72951
+ if (schema.opt) {
72801
72952
  return /* @__PURE__ */ jsxRuntime.jsx(
72802
72953
  ValOptional,
72803
72954
  {
@@ -72810,6 +72961,18 @@ function AnyVal({
72810
72961
  }
72811
72962
  );
72812
72963
  }
72964
+ if (source === null) {
72965
+ return /* @__PURE__ */ jsxRuntime.jsx(
72966
+ ValDefaultOf,
72967
+ {
72968
+ source,
72969
+ schema,
72970
+ path,
72971
+ setSelectedPath,
72972
+ initOnSubmit
72973
+ }
72974
+ );
72975
+ }
72813
72976
  if (schema.type === "object") {
72814
72977
  if (typeof source !== "object" || isJsonArray(source)) {
72815
72978
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -72835,15 +72998,18 @@ function AnyVal({
72835
72998
  typeof source
72836
72999
  ] });
72837
73000
  }
72838
- return /* @__PURE__ */ jsxRuntime.jsx(
72839
- ValList,
72840
- {
72841
- source,
72842
- path,
72843
- schema,
72844
- setSelectedPath
72845
- }
72846
- );
73001
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73002
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }),
73003
+ /* @__PURE__ */ jsxRuntime.jsx(
73004
+ ValList,
73005
+ {
73006
+ source,
73007
+ path,
73008
+ schema,
73009
+ setSelectedPath
73010
+ }
73011
+ )
73012
+ ] });
72847
73013
  } else if (schema.type === "record") {
72848
73014
  if (typeof source !== "object") {
72849
73015
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -72859,18 +73025,38 @@ function AnyVal({
72859
73025
  schema.type
72860
73026
  ] });
72861
73027
  }
72862
- return /* @__PURE__ */ jsxRuntime.jsx(
72863
- ValRecord,
72864
- {
72865
- source,
72866
- path,
72867
- schema,
72868
- setSelectedPath
72869
- }
72870
- );
73028
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73029
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }),
73030
+ /* @__PURE__ */ jsxRuntime.jsx(
73031
+ ValRecord,
73032
+ {
73033
+ source,
73034
+ path,
73035
+ schema,
73036
+ setSelectedPath
73037
+ }
73038
+ )
73039
+ ] });
73040
+ } else if ((schema == null ? void 0 : schema.type) === "union") {
73041
+ if (schema.key && typeof source === "object" && !isJsonArray(source)) {
73042
+ return /* @__PURE__ */ jsxRuntime.jsx(
73043
+ ValTaggedUnion,
73044
+ {
73045
+ tag: schema.key,
73046
+ source,
73047
+ path,
73048
+ schema,
73049
+ initOnSubmit,
73050
+ setSelectedPath,
73051
+ top
73052
+ }
73053
+ );
73054
+ }
73055
+ } else if ((schema == null ? void 0 : schema.type) === "literal") {
73056
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
72871
73057
  }
72872
73058
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-2 gap-y-4", children: [
72873
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field || path }),
73059
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }),
72874
73060
  /* @__PURE__ */ jsxRuntime.jsx(
72875
73061
  ValFormField,
72876
73062
  {
@@ -72883,6 +73069,97 @@ function AnyVal({
72883
73069
  )
72884
73070
  ] });
72885
73071
  }
73072
+ function ValTaggedUnion({
73073
+ tag,
73074
+ path,
73075
+ source,
73076
+ schema,
73077
+ setSelectedPath,
73078
+ initOnSubmit,
73079
+ top
73080
+ }) {
73081
+ const [currentKey, setCurrentKey] = React$3.useState(null);
73082
+ const [current, setCurrent] = React$3.useState(null);
73083
+ const keys = schema.items.flatMap((item) => {
73084
+ if (item.type === "object" && item.items[tag]) {
73085
+ const maybeLiteral = item.items[tag];
73086
+ if (maybeLiteral.type === "literal") {
73087
+ return [maybeLiteral.value];
73088
+ }
73089
+ }
73090
+ return [];
73091
+ });
73092
+ React$3.useEffect(() => {
73093
+ if (!currentKey) {
73094
+ const maybeCurrentKey = source == null ? void 0 : source[tag];
73095
+ if (maybeCurrentKey && typeof maybeCurrentKey === "string") {
73096
+ setCurrentKey(maybeCurrentKey);
73097
+ }
73098
+ } else {
73099
+ const sourceKey = source[tag];
73100
+ const unionSchema = schema.items.find((item) => {
73101
+ if (item.type === "object" && item.items[tag]) {
73102
+ const maybeLiteral = item.items[tag];
73103
+ if (maybeLiteral.type === "literal") {
73104
+ return maybeLiteral.value === currentKey;
73105
+ }
73106
+ return false;
73107
+ }
73108
+ });
73109
+ if (sourceKey && typeof sourceKey === "string" && unionSchema) {
73110
+ setCurrent({ source, schema: unionSchema });
73111
+ } else {
73112
+ console.error(
73113
+ "Could not find source or schema of key",
73114
+ currentKey,
73115
+ source,
73116
+ schema
73117
+ );
73118
+ setCurrent(null);
73119
+ }
73120
+ }
73121
+ }, [currentKey, source, schema, keys]);
73122
+ if (keys.length !== schema.items.length) {
73123
+ console.warn("Not all items have tag:", tag);
73124
+ }
73125
+ const loading = false;
73126
+ return /* @__PURE__ */ jsxRuntime.jsxs(
73127
+ "div",
73128
+ {
73129
+ className: classNames("flex flex-col gap-y-8", {
73130
+ "border-l-2 border-border pl-6": !top
73131
+ }),
73132
+ children: [
73133
+ /* @__PURE__ */ jsxRuntime.jsxs(
73134
+ Select,
73135
+ {
73136
+ defaultValue: currentKey ?? void 0,
73137
+ disabled: loading,
73138
+ onValueChange: (key) => {
73139
+ setCurrentKey(key);
73140
+ },
73141
+ children: [
73142
+ /* @__PURE__ */ jsxRuntime.jsx(SelectTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(SelectValue, { placeholder: "Select type" }) }),
73143
+ /* @__PURE__ */ jsxRuntime.jsx(SelectContent, { children: keys.map((tag2) => /* @__PURE__ */ jsxRuntime.jsx(SelectItem, { value: tag2.toString(), children: tag2.toString() }, tag2)) })
73144
+ ]
73145
+ }
73146
+ ),
73147
+ current && /* @__PURE__ */ jsxRuntime.jsx(
73148
+ AnyVal,
73149
+ {
73150
+ path,
73151
+ source: current.source,
73152
+ schema: current.schema,
73153
+ setSelectedPath,
73154
+ initOnSubmit,
73155
+ top
73156
+ }
73157
+ )
73158
+ ]
73159
+ },
73160
+ path
73161
+ );
73162
+ }
72886
73163
  function ValObject({
72887
73164
  path,
72888
73165
  source,
@@ -72903,7 +73180,7 @@ function ValObject({
72903
73180
  AnyVal,
72904
73181
  {
72905
73182
  path: subPath,
72906
- source: source[key],
73183
+ source: (source == null ? void 0 : source[key]) ?? null,
72907
73184
  schema: property,
72908
73185
  setSelectedPath,
72909
73186
  field: key,
@@ -73226,8 +73503,8 @@ function ValOptional({
73226
73503
  field
73227
73504
  }) {
73228
73505
  const [enable, setEnable] = React$3.useState(source !== null);
73229
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-6", children: [
73230
- field ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
73506
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-2", children: [
73507
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
73231
73508
  /* @__PURE__ */ jsxRuntime.jsx(
73232
73509
  Switch,
73233
73510
  {
@@ -73237,16 +73514,8 @@ function ValOptional({
73237
73514
  }
73238
73515
  }
73239
73516
  ),
73240
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: field })
73241
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(
73242
- Switch,
73243
- {
73244
- checked: enable,
73245
- onClick: () => {
73246
- setEnable((prev) => !prev);
73247
- }
73248
- }
73249
- ),
73517
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: field ? field : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }) })
73518
+ ] }),
73250
73519
  enable && /* @__PURE__ */ jsxRuntime.jsx(
73251
73520
  ValDefaultOf,
73252
73521
  {
@@ -73315,61 +73584,62 @@ function ValDefaultOf({
73315
73584
  function isJsonArray(source) {
73316
73585
  return Array.isArray(source);
73317
73586
  }
73318
- function pathsToTree(paths) {
73319
- const tree = {};
73587
+ function dirPaths(paths) {
73588
+ const res = {};
73320
73589
  paths.forEach((path) => {
73321
- const parts = path.split("/").filter((part) => part !== "");
73322
- let current = tree;
73323
- parts.forEach((part) => {
73324
- if (!current[part]) {
73325
- current[part] = {};
73590
+ const allParts = path.split("/").filter((part) => part !== "");
73591
+ if (allParts.length === 1) {
73592
+ if (!res[""]) {
73593
+ res[""] = [];
73326
73594
  }
73327
- current = current[part];
73328
- });
73595
+ res[""].push(allParts[0]);
73596
+ } else if (allParts.length > 1) {
73597
+ const dir = allParts.slice(0, allParts.length - 1).join("/");
73598
+ const file = allParts.slice(-1)[0];
73599
+ if (!res[dir]) {
73600
+ res[dir] = [];
73601
+ }
73602
+ res[dir].push(file);
73603
+ }
73329
73604
  });
73330
- return tree;
73605
+ return res;
73331
73606
  }
73332
73607
  function PathTree({
73608
+ selectedPath,
73333
73609
  paths,
73334
73610
  setSelectedModuleId
73335
73611
  }) {
73336
- const tree = pathsToTree(paths);
73337
- return /* @__PURE__ */ jsxRuntime.jsx(Tree, { children: Object.entries(tree).map(([name, subTree]) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(
73338
- PathNode,
73339
- {
73340
- name,
73341
- tree: subTree,
73342
- moduleId: `/${name}`,
73343
- setSelectedModuleId
73344
- }
73345
- ) }, `/${name}`)) });
73346
- }
73347
- function PathNode({
73348
- name,
73349
- tree,
73350
- moduleId,
73351
- setSelectedModuleId
73352
- }) {
73353
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73354
- /* @__PURE__ */ jsxRuntime.jsx(
73355
- "button",
73356
- {
73357
- onClick: () => {
73358
- setSelectedModuleId(moduleId);
73359
- },
73360
- children: name
73361
- }
73362
- ),
73363
- Object.entries(tree).map(([childName, childTree]) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-1", children: /* @__PURE__ */ jsxRuntime.jsx(
73364
- PathNode,
73365
- {
73366
- name: childName,
73367
- tree: childTree,
73368
- moduleId: `${moduleId}/${childName}`,
73369
- setSelectedModuleId
73370
- }
73371
- ) }, `${moduleId}/${childName}`))
73372
- ] });
73612
+ const tree = dirPaths(paths);
73613
+ const selectedModuleId = selectedPath && Internal.splitModuleIdAndModulePath(selectedPath)[0];
73614
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: Object.entries(tree).map(([dir, files]) => {
73615
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 py-2", children: [
73616
+ dir && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-bold", children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: dir }) }),
73617
+ /* @__PURE__ */ jsxRuntime.jsx(
73618
+ "div",
73619
+ {
73620
+ className: classNames({
73621
+ "flex flex-col py-2 justify-start items-start": !!dir
73622
+ }),
73623
+ children: files.map((file) => {
73624
+ const moduleId = `/${dir}/${file}`;
73625
+ return /* @__PURE__ */ jsxRuntime.jsx(
73626
+ "button",
73627
+ {
73628
+ className: classNames("block px-2 py-1 rounded-full", {
73629
+ "bg-accent text-accent-foreground": selectedModuleId === moduleId
73630
+ }),
73631
+ onClick: () => {
73632
+ setSelectedModuleId(moduleId);
73633
+ },
73634
+ children: file
73635
+ },
73636
+ moduleId
73637
+ );
73638
+ })
73639
+ }
73640
+ )
73641
+ ] }, `/${dir}`);
73642
+ }) });
73373
73643
  }
73374
73644
  const theme = {
73375
73645
  tags: {
@@ -73561,76 +73831,90 @@ function ValOverlay({
73561
73831
  windowSize,
73562
73832
  setWindowSize
73563
73833
  },
73564
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-mode": theme2, className: "antialiased", children: [
73565
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-x-1/2 z-overlay left-1/2 bottom-4", children: /* @__PURE__ */ jsxRuntime.jsx(
73566
- ValMenu,
73567
- {
73568
- api,
73569
- patches,
73570
- onCommit: () => {
73571
- setPatchResetId((patchResetId) => patchResetId + 1);
73572
- }
73573
- }
73574
- ) }),
73575
- session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsxRuntime.jsx(
73576
- ValHover,
73577
- {
73578
- hoverTarget,
73579
- setHoverTarget,
73580
- setEditMode,
73581
- setWindowTarget
73582
- }
73583
- ),
73584
- editMode === "window" && windowTarget && /* @__PURE__ */ jsxRuntime.jsx(
73585
- ValWindow,
73586
- {
73587
- onClose: () => {
73588
- setWindowTarget(null);
73589
- setEditMode("hover");
73590
- },
73591
- children: /* @__PURE__ */ jsxRuntime.jsx(
73592
- "div",
73834
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
73835
+ "div",
73836
+ {
73837
+ "data-mode": theme2,
73838
+ className: "font-serif antialiased",
73839
+ style: {
73840
+ position: "fixed",
73841
+ top: 0,
73842
+ left: 0,
73843
+ zIndex: 8999
73844
+ // 1 less than the NextJS error z-index: 9000
73845
+ },
73846
+ children: [
73847
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(
73848
+ ValMenu,
73593
73849
  {
73594
- className: "p-4",
73595
- style: {
73596
- maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
73850
+ direction: "vertical",
73851
+ api,
73852
+ patches,
73853
+ onCommit: () => {
73854
+ setPatchResetId((patchResetId) => patchResetId + 1);
73855
+ }
73856
+ }
73857
+ ) }),
73858
+ session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsxRuntime.jsx(
73859
+ ValHover,
73860
+ {
73861
+ hoverTarget,
73862
+ setHoverTarget,
73863
+ setEditMode,
73864
+ setWindowTarget
73865
+ }
73866
+ ),
73867
+ editMode === "window" && windowTarget && /* @__PURE__ */ jsxRuntime.jsx(
73868
+ ValWindow,
73869
+ {
73870
+ onClose: () => {
73871
+ setWindowTarget(null);
73872
+ setEditMode("hover");
73597
73873
  },
73598
- children: Object.entries(formData).map(([path, data]) => {
73599
- if (data.status !== "success") {
73600
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73601
- path,
73602
- ": ",
73603
- data.status
73604
- ] }, path);
73605
- }
73606
- const { source, schema } = data.data;
73607
- if (!source || !schema) {
73608
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73609
- "Module: ",
73610
- path,
73611
- " is missing source or schema"
73612
- ] });
73613
- }
73614
- return /* @__PURE__ */ jsxRuntime.jsx(
73615
- AnyVal,
73616
- {
73617
- initOnSubmit,
73618
- path,
73619
- schema,
73620
- source,
73621
- setSelectedPath: () => {
73622
- },
73623
- field: path,
73624
- top: true
73874
+ children: /* @__PURE__ */ jsxRuntime.jsx(
73875
+ "div",
73876
+ {
73877
+ className: "p-4",
73878
+ style: {
73879
+ maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
73625
73880
  },
73626
- path
73627
- );
73628
- })
73881
+ children: Object.entries(formData).map(([path, data]) => {
73882
+ if (data.status !== "success") {
73883
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73884
+ path,
73885
+ ": ",
73886
+ data.status
73887
+ ] }, path);
73888
+ }
73889
+ const { source, schema } = data.data;
73890
+ if (!source || !schema) {
73891
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73892
+ "Module: ",
73893
+ path,
73894
+ " is missing source or schema"
73895
+ ] });
73896
+ }
73897
+ return /* @__PURE__ */ jsxRuntime.jsx(
73898
+ AnyVal,
73899
+ {
73900
+ initOnSubmit,
73901
+ path,
73902
+ schema,
73903
+ source,
73904
+ setSelectedPath: () => {
73905
+ },
73906
+ top: true
73907
+ },
73908
+ path
73909
+ );
73910
+ })
73911
+ }
73912
+ )
73629
73913
  }
73630
73914
  )
73631
- }
73632
- )
73633
- ] })
73915
+ ]
73916
+ }
73917
+ )
73634
73918
  }
73635
73919
  );
73636
73920
  }
@@ -73697,7 +73981,7 @@ function ValHover({
73697
73981
  "div",
73698
73982
  {
73699
73983
  id: "val-hover",
73700
- className: "fixed border-2 cursor-pointer z-overlay-hover border-highlight drop-shadow-[0px_0px_12px_rgba(56,205,152,0.60)]",
73984
+ className: "fixed border-2 cursor-pointer z-overlay-hover border-accent",
73701
73985
  style: {
73702
73986
  top: rect == null ? void 0 : rect.top,
73703
73987
  left: rect == null ? void 0 : rect.left,
@@ -73718,7 +74002,7 @@ function ValHover({
73718
74002
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-end w-full text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(
73719
74003
  "div",
73720
74004
  {
73721
- className: "flex items-center justify-center px-3 py-1 text-primary bg-highlight",
74005
+ className: "flex items-center justify-center px-3 py-1 text-accent-foreground bg-accent border-l-2 border-b-2 border-accent",
73722
74006
  style: {
73723
74007
  maxHeight: (rect == null ? void 0 : rect.height) && rect.height - 4,
73724
74008
  fontSize: (rect == null ? void 0 : rect.height) && rect.height <= 16 ? rect.height - 4 : void 0
@@ -73762,9 +74046,19 @@ function useHoverTarget(editMode) {
73762
74046
  setTargetRect(targetElement.getBoundingClientRect());
73763
74047
  }
73764
74048
  };
74049
+ const observer = new ResizeObserver(() => {
74050
+ if (targetElement) {
74051
+ setTargetRect(targetElement.getBoundingClientRect());
74052
+ }
74053
+ });
74054
+ const valUIElement = document.getElementById("val-ui");
74055
+ if (targetElement && valUIElement) {
74056
+ observer.observe(valUIElement);
74057
+ }
73765
74058
  document.addEventListener("scroll", scrollListener, { passive: true });
73766
74059
  return () => {
73767
74060
  document.removeEventListener("scroll", scrollListener);
74061
+ observer.disconnect();
73768
74062
  };
73769
74063
  }, [targetElement]);
73770
74064
  return [
@@ -73811,7 +74105,7 @@ function useInitEditMode() {
73811
74105
  }, []);
73812
74106
  return [editMode, setEditMode];
73813
74107
  }
73814
- const styleCss = "/*\n Need to explicitly set config path, otherwise it may fail to resolve when\n built from outside packages/ui.\n*/\n\n/*\n ! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: 'Roboto', sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n display: none;\n}\n\n/* :host for use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 159, 60%, 51%, 1;\n --accent-foreground: 222.2 47.4% 11.2%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n:root {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 159, 60%, 51%, 1;\n --accent-foreground: 222.2 47.4% 11.2%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --background: 0 0% 4%;\n --foreground: 210 40% 98%;\n\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n\n --muted: 178, 23%, 76%, 1;\n --muted-foreground: 215 20.2% 65.1%;\n\n --accent: 159, 60%, 51%, 1;\n --accent-foreground: 210 40% 98%;\n\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n }\n\n* {\n border-color: hsl(var(--border));\n}\n\nbody {\n background-color: hsl(var(--background));\n color: hsl(var(--foreground));\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.invisible {\n visibility: hidden;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-2 {\n left: -0.5rem;\n}\n.-right-\\[10px\\] {\n right: -10px;\n}\n.-top-\\[10px\\] {\n top: -10px;\n}\n.-top-\\[4px\\] {\n top: -4px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-1 {\n left: 0.25rem;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-2 {\n left: 0.5rem;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-\\[16px\\] {\n right: 16px;\n}\n.top-0 {\n top: 0px;\n}\n.top-4 {\n top: 1rem;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[5\\] {\n z-index: 5;\n}\n.z-overlay {\n z-index: 4;\n}\n.-mx-1 {\n margin-left: -0.25rem;\n margin-right: -0.25rem;\n}\n.-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n.-my-\\[100px\\] {\n margin-top: -100px;\n margin-bottom: -100px;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.block {\n display: block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-11 {\n height: 2.75rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[18px\\] {\n height: 18px;\n}\n.h-\\[1px\\] {\n height: 1px;\n}\n.h-\\[20px\\] {\n height: 20px;\n}\n.h-\\[22px\\] {\n height: 22px;\n}\n.h-\\[24px\\] {\n height: 24px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[50px\\] {\n height: 50px;\n}\n.h-\\[75px\\] {\n height: 75px;\n}\n.h-\\[9px\\] {\n height: 9px;\n}\n.h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.h-screen {\n height: 100vh;\n}\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n.min-h-\\[200px\\] {\n min-height: 200px;\n}\n.min-h-\\[300px\\] {\n min-height: 300px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-\\[1px\\] {\n width: 1px;\n}\n.w-\\[20px\\] {\n width: 20px;\n}\n.w-\\[24px\\] {\n width: 24px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[44px\\] {\n width: 44px;\n}\n.w-\\[9px\\] {\n width: 9px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.min-w-\\[8rem\\] {\n min-width: 8rem;\n}\n.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-\\[1000px\\] {\n max-width: 1000px;\n}\n.max-w-\\[10vw\\] {\n max-width: 10vw;\n}\n.max-w-\\[300px\\] {\n max-width: 300px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-rotate-90 {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[-90deg\\] {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[90deg\\] {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-col-resize {\n cursor: col-resize;\n}\n.cursor-crosshair {\n cursor: crosshair;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.cursor-se-resize {\n cursor: se-resize;\n}\n.touch-none {\n touch-action: none;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.resize-none {\n resize: none;\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.grid-cols-\\[min-content_1fr\\] {\n grid-template-columns: min-content 1fr;\n}\n.grid-rows-\\[1fr\\2c _min-content\\] {\n grid-template-rows: 1fr min-content;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-col-reverse {\n flex-direction: column-reverse;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-\\[0\\.5em\\] {\n gap: 0.5em;\n}\n.gap-\\[36px\\] {\n gap: 36px;\n}\n.gap-x-2 {\n -moz-column-gap: 0.5rem;\n column-gap: 0.5rem;\n}\n.gap-x-3 {\n -moz-column-gap: 0.75rem;\n column-gap: 0.75rem;\n}\n.gap-x-4 {\n -moz-column-gap: 1rem;\n column-gap: 1rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-4 {\n row-gap: 1rem;\n}\n.gap-y-6 {\n row-gap: 1.5rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-clip {\n overflow: clip;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: var(--radius);\n}\n.rounded-md {\n border-radius: calc(var(--radius) - 2px);\n}\n.rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[2px\\] {\n border-width: 2px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-l {\n border-left-width: 1px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-accent {\n border-color: hsl(var(--accent));\n}\n.border-border {\n border-color: hsl(var(--border));\n}\n.border-card {\n border-color: hsl(var(--card));\n}\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(156 163 175 / var(--tw-border-opacity));\n}\n.border-input {\n border-color: hsl(var(--input));\n}\n.border-primary {\n border-color: hsl(var(--primary));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-l-transparent {\n border-left-color: transparent;\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.bg-accent {\n background-color: hsl(var(--accent));\n}\n.bg-background {\n background-color: hsl(var(--background));\n}\n.bg-background\\/80 {\n background-color: hsl(var(--background) / 0.8);\n}\n.bg-border {\n background-color: hsl(var(--border));\n}\n.bg-card {\n background-color: hsl(var(--card));\n}\n.bg-card-foreground {\n background-color: hsl(var(--card-foreground));\n}\n.bg-destructive {\n background-color: hsl(var(--destructive));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-muted {\n background-color: hsl(var(--muted));\n}\n.bg-popover {\n background-color: hsl(var(--popover));\n}\n.bg-primary {\n background-color: hsl(var(--primary));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-secondary {\n background-color: hsl(var(--secondary));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-gradient-to-b {\n background-image: linear-gradient(to bottom, var(--tw-gradient-stops));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.from-background\\/90 {\n --tw-gradient-from: hsl(var(--background) / 0.9) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-transparent {\n --tw-gradient-from: transparent var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-40\\% {\n --tw-gradient-from-position: 40%;\n}\n.to-background {\n --tw-gradient-to: hsl(var(--background)) var(--tw-gradient-to-position);\n}\n.fill-current {\n fill: currentColor;\n}\n.fill-white {\n fill: #fff;\n}\n.stroke-\\[2px\\] {\n stroke-width: 2px;\n}\n.stroke-\\[3px\\] {\n stroke-width: 3px;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-\\[1px\\] {\n padding: 1px;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-7 {\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.pb-0 {\n padding-bottom: 0px;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-6 {\n padding-left: 1.5rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pt-0 {\n padding-top: 0px;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-start {\n text-align: start;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'Space Mono', monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[0\\.8rem\\] {\n font-size: 0.8rem;\n}\n.text-\\[12px\\] {\n font-size: 12px;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[400\\] {\n font-weight: 400;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-\\[550\\] {\n font-weight: 550;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-4 {\n line-height: 1rem;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.tracking-widest {\n letter-spacing: 0.1em;\n}\n.text-accent {\n color: hsl(var(--accent));\n}\n.text-accent-foreground {\n color: hsl(var(--accent-foreground));\n}\n.text-background {\n color: hsl(var(--background));\n}\n.text-card-foreground {\n color: hsl(var(--card-foreground));\n}\n.text-current {\n color: currentColor;\n}\n.text-destructive {\n color: hsl(var(--destructive));\n}\n.text-destructive-foreground {\n color: hsl(var(--destructive-foreground));\n}\n.text-foreground {\n color: hsl(var(--foreground));\n}\n.text-muted {\n color: hsl(var(--muted));\n}\n.text-muted-foreground {\n color: hsl(var(--muted-foreground));\n}\n.text-popover-foreground {\n color: hsl(var(--popover-foreground));\n}\n.text-primary {\n color: hsl(var(--primary));\n}\n.text-primary-foreground {\n color: hsl(var(--primary-foreground));\n}\n.text-secondary-foreground {\n color: hsl(var(--secondary-foreground));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.underline-offset-4 {\n text-underline-offset: 4px;\n}\n.antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.outline {\n outline-style: solid;\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-offset-background {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.drop-shadow-2xl {\n --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow-\\[0px_0px_12px_rgba\\(56\\2c 205\\2c 152\\2c 0\\.60\\)\\] {\n --tw-drop-shadow: drop-shadow(0px 0px 12px rgba(56,205,152,0.60));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur-lg {\n --tw-backdrop-blur: blur(16px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n@keyframes enter {\n\n from {\n opacity: var(--tw-enter-opacity, 1);\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\n }\n}\n@keyframes exit {\n\n to {\n opacity: var(--tw-exit-opacity, 1);\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\n }\n}\n.animate-in {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.fade-in-0 {\n --tw-enter-opacity: 0;\n}\n.zoom-in-95 {\n --tw-enter-scale: .95;\n}\n.duration-150 {\n animation-duration: 150ms;\n}\n.duration-200 {\n animation-duration: 200ms;\n}\n.ease-in-out {\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.file\\:border-0::file-selector-button {\n border-width: 0px;\n}\n.file\\:bg-transparent::file-selector-button {\n background-color: transparent;\n}\n.file\\:text-sm::file-selector-button {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.file\\:font-medium::file-selector-button {\n font-weight: 500;\n}\n.placeholder\\:text-muted-foreground::-moz-placeholder {\n color: hsl(var(--muted-foreground));\n}\n.placeholder\\:text-muted-foreground::placeholder {\n color: hsl(var(--muted-foreground));\n}\n.focus-within\\:relative:focus-within {\n position: relative;\n}\n.hover\\:w-\\[2px\\]:hover {\n width: 2px;\n}\n.hover\\:w-\\[3px\\]:hover {\n width: 3px;\n}\n.hover\\:cursor-pointer:hover {\n cursor: pointer;\n}\n.hover\\:rounded-lg:hover {\n border-radius: var(--radius);\n}\n.hover\\:bg-accent:hover {\n background-color: hsl(var(--accent));\n}\n.hover\\:bg-border:hover {\n background-color: hsl(var(--border));\n}\n.hover\\:bg-destructive\\/90:hover {\n background-color: hsl(var(--destructive) / 0.9);\n}\n.hover\\:bg-muted:hover {\n background-color: hsl(var(--muted));\n}\n.hover\\:bg-primary:hover {\n background-color: hsl(var(--primary));\n}\n.hover\\:bg-primary\\/90:hover {\n background-color: hsl(var(--primary) / 0.9);\n}\n.hover\\:bg-red-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity));\n}\n.hover\\:bg-secondary\\/80:hover {\n background-color: hsl(var(--secondary) / 0.8);\n}\n.hover\\:text-accent-foreground:hover {\n color: hsl(var(--accent-foreground));\n}\n.hover\\:text-muted-foreground:hover {\n color: hsl(var(--muted-foreground));\n}\n.hover\\:text-primary-foreground:hover {\n color: hsl(var(--primary-foreground));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n.focus\\:bg-accent:focus {\n background-color: hsl(var(--accent));\n}\n.focus\\:bg-primary:focus {\n background-color: hsl(var(--primary));\n}\n.focus\\:text-accent-foreground:focus {\n color: hsl(var(--accent-foreground));\n}\n.focus\\:text-primary-foreground:focus {\n color: hsl(var(--primary-foreground));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-ring:focus {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:outline-none:focus-visible {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:outline-accent:focus-visible {\n outline-color: hsl(var(--accent));\n}\n.focus-visible\\:ring-2:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-visible\\:ring-ring:focus-visible {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:ring-offset-background:focus-visible {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.disabled\\:pointer-events-none:disabled {\n pointer-events: none;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:text-background:disabled {\n color: hsl(var(--background));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n.peer:disabled ~ .peer-disabled\\:opacity-70 {\n opacity: 0.7;\n}\n.aria-selected\\:bg-accent[aria-selected=\"true\"] {\n background-color: hsl(var(--accent));\n}\n.aria-selected\\:text-accent-foreground[aria-selected=\"true\"] {\n color: hsl(var(--accent-foreground));\n}\n.aria-selected\\:opacity-100[aria-selected=\"true\"] {\n opacity: 1;\n}\n.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {\n pointer-events: none;\n}\n.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom] {\n --tw-translate-y: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left] {\n --tw-translate-x: -0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=right\\]\\:translate-x-1[data-side=right] {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top] {\n --tw-translate-y: -0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[state\\=checked\\]\\:translate-x-5[data-state=checked] {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state=unchecked] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes accordion-up {\n\n from {\n height: var(--radix-accordion-content-height);\n }\n\n to {\n height: 0;\n }\n}\n.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=closed] {\n animation: accordion-up 0.2s ease-out;\n}\n@keyframes accordion-down {\n\n from {\n height: 0;\n }\n\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n.data-\\[state\\=open\\]\\:animate-accordion-down[data-state=open] {\n animation: accordion-down 0.2s ease-out;\n}\n.data-\\[state\\=active\\]\\:bg-background[data-state=active] {\n background-color: hsl(var(--background));\n}\n.data-\\[state\\=checked\\]\\:bg-accent[data-state=checked] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=checked\\]\\:bg-primary[data-state=checked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=on\\]\\:bg-accent[data-state=on] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=open\\]\\:bg-accent[data-state=open] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=unchecked\\]\\:bg-primary[data-state=unchecked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=active\\]\\:text-foreground[data-state=active] {\n color: hsl(var(--foreground));\n}\n.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state=checked] {\n color: hsl(var(--primary-foreground));\n}\n.data-\\[state\\=on\\]\\:text-accent-foreground[data-state=on] {\n color: hsl(var(--accent-foreground));\n}\n.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open] {\n color: hsl(var(--muted-foreground));\n}\n.data-\\[disabled\\]\\:opacity-50[data-disabled] {\n opacity: 0.5;\n}\n.data-\\[state\\=active\\]\\:shadow-sm[data-state=active] {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[state\\=open\\]\\:animate-in[data-state=open] {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:animate-out[data-state=closed] {\n animation-name: exit;\n animation-duration: 150ms;\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed] {\n --tw-exit-opacity: 0;\n}\n.data-\\[state\\=open\\]\\:fade-in-0[data-state=open] {\n --tw-enter-opacity: 0;\n}\n.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed] {\n --tw-exit-scale: .95;\n}\n.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open] {\n --tw-enter-scale: .95;\n}\n.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom] {\n --tw-enter-translate-y: -0.5rem;\n}\n.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left] {\n --tw-enter-translate-x: 0.5rem;\n}\n.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right] {\n --tw-enter-translate-x: -0.5rem;\n}\n.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top] {\n --tw-enter-translate-y: 0.5rem;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=closed] {\n --tw-exit-translate-x: -50%;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=closed] {\n --tw-exit-translate-y: -48%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=open] {\n --tw-enter-translate-x: -50%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=open] {\n --tw-enter-translate-y: -48%;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n@media (min-width: 640px) {\n\n .sm\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0px * var(--tw-space-y-reverse));\n }\n\n .sm\\:rounded-lg {\n border-radius: var(--radius);\n }\n\n .sm\\:p-0 {\n padding: 0px;\n }\n\n .sm\\:text-left {\n text-align: left;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:w-full {\n width: 100%;\n }\n}\n.\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:bg-accent:has([aria-selected]) {\n background-color: hsl(var(--accent));\n}\n.first\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-l-md:has([aria-selected]):first-child {\n border-top-left-radius: calc(var(--radius) - 2px);\n border-bottom-left-radius: calc(var(--radius) - 2px);\n}\n.last\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-r-md:has([aria-selected]):last-child {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n}\n.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading] {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {\n font-weight: 500;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading] {\n color: hsl(var(--muted-foreground));\n}\n.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: 0px;\n}\n.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg {\n width: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input] {\n height: 3rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item] {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg {\n width: 1.25rem;\n}\n";
74108
+ const styleCss = "/*\n Need to explicitly set config path, otherwise it may fail to resolve when\n built from outside packages/ui.\n*/\n\n/*\n ! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: 'Roboto', sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n display: none;\n}\n\n/* :host for use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 273 60% 51%;\n --accent-foreground: 110 10% 94%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n:root {\n --background: 110 10% 94%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 273 60% 51%;\n --accent-foreground: 110 10% 94%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 212.7 9.1% 76.3%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --background: 0 0% 4%;\n --foreground: 210 40% 98%;\n\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n\n --muted: 178 23% 76%;\n --muted-foreground: 215 20.2% 65.1%;\n\n --accent: 159 60% 51%;\n --accent-foreground: 210 40% 98%;\n\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n }\n\n* {\n border-color: hsl(var(--border));\n}\n\nbody {\n background-color: hsl(var(--background));\n color: hsl(var(--foreground));\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.invisible {\n visibility: hidden;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-2 {\n left: -0.5rem;\n}\n.-right-\\[10px\\] {\n right: -10px;\n}\n.-top-\\[10px\\] {\n top: -10px;\n}\n.-top-\\[4px\\] {\n top: -4px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.left-0 {\n left: 0px;\n}\n.left-1 {\n left: 0.25rem;\n}\n.left-2 {\n left: 0.5rem;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-\\[16px\\] {\n right: 16px;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-4 {\n top: 1rem;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[1\\] {\n z-index: 1;\n}\n.z-\\[5\\] {\n z-index: 5;\n}\n.z-overlay {\n z-index: 4;\n}\n.m-4 {\n margin: 1rem;\n}\n.-mx-1 {\n margin-left: -0.25rem;\n margin-right: -0.25rem;\n}\n.-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n.-my-\\[100px\\] {\n margin-top: -100px;\n margin-bottom: -100px;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.ml-0 {\n margin-left: 0px;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.block {\n display: block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-11 {\n height: 2.75rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[100\\] {\n height: 100;\n}\n.h-\\[12px\\] {\n height: 12px;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[18px\\] {\n height: 18px;\n}\n.h-\\[1px\\] {\n height: 1px;\n}\n.h-\\[20px\\] {\n height: 20px;\n}\n.h-\\[22px\\] {\n height: 22px;\n}\n.h-\\[24px\\] {\n height: 24px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[50px\\] {\n height: 50px;\n}\n.h-\\[75px\\] {\n height: 75px;\n}\n.h-\\[9px\\] {\n height: 9px;\n}\n.h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.h-screen {\n height: 100vh;\n}\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n.min-h-\\[200px\\] {\n min-height: 200px;\n}\n.min-h-\\[300px\\] {\n min-height: 300px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[12px\\] {\n width: 12px;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-\\[1px\\] {\n width: 1px;\n}\n.w-\\[20px\\] {\n width: 20px;\n}\n.w-\\[24px\\] {\n width: 24px;\n}\n.w-\\[300px\\] {\n width: 300px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[44px\\] {\n width: 44px;\n}\n.w-\\[9px\\] {\n width: 9px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.min-w-\\[8rem\\] {\n min-width: 8rem;\n}\n.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-\\[1000px\\] {\n max-width: 1000px;\n}\n.max-w-\\[10vw\\] {\n max-width: 10vw;\n}\n.max-w-\\[300px\\] {\n max-width: 300px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-rotate-90 {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[-90deg\\] {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[90deg\\] {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-col-resize {\n cursor: col-resize;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.cursor-se-resize {\n cursor: se-resize;\n}\n.touch-none {\n touch-action: none;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.resize-none {\n resize: none;\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.grid-cols-\\[min-content_1fr\\] {\n grid-template-columns: min-content 1fr;\n}\n.grid-rows-\\[1fr\\2c _min-content\\] {\n grid-template-rows: 1fr min-content;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-col-reverse {\n flex-direction: column-reverse;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-\\[0\\.5em\\] {\n gap: 0.5em;\n}\n.gap-\\[36px\\] {\n gap: 36px;\n}\n.gap-x-4 {\n -moz-column-gap: 1rem;\n column-gap: 1rem;\n}\n.gap-y-1 {\n row-gap: 0.25rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-4 {\n row-gap: 1rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-clip {\n overflow: clip;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: var(--radius);\n}\n.rounded-md {\n border-radius: calc(var(--radius) - 2px);\n}\n.rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n}\n.rounded-b-none {\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.rounded-b-sm {\n border-bottom-right-radius: calc(var(--radius) - 4px);\n border-bottom-left-radius: calc(var(--radius) - 4px);\n}\n.rounded-t-none {\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[2px\\] {\n border-width: 2px;\n}\n.border-x {\n border-left-width: 1px;\n border-right-width: 1px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-0 {\n border-bottom-width: 0px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l {\n border-left-width: 1px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-0 {\n border-top-width: 0px;\n}\n.border-accent {\n border-color: hsl(var(--accent));\n}\n.border-border {\n border-color: hsl(var(--border));\n}\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(156 163 175 / var(--tw-border-opacity));\n}\n.border-input {\n border-color: hsl(var(--input));\n}\n.border-primary {\n border-color: hsl(var(--primary));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-l-transparent {\n border-left-color: transparent;\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.bg-accent {\n background-color: hsl(var(--accent));\n}\n.bg-background {\n background-color: hsl(var(--background));\n}\n.bg-background\\/80 {\n background-color: hsl(var(--background) / 0.8);\n}\n.bg-border {\n background-color: hsl(var(--border));\n}\n.bg-card {\n background-color: hsl(var(--card));\n}\n.bg-card-foreground {\n background-color: hsl(var(--card-foreground));\n}\n.bg-destructive {\n background-color: hsl(var(--destructive));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-muted {\n background-color: hsl(var(--muted));\n}\n.bg-popover {\n background-color: hsl(var(--popover));\n}\n.bg-primary {\n background-color: hsl(var(--primary));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-secondary {\n background-color: hsl(var(--secondary));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-gradient-to-b {\n background-image: linear-gradient(to bottom, var(--tw-gradient-stops));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.from-background\\/90 {\n --tw-gradient-from: hsl(var(--background) / 0.9) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-card {\n --tw-gradient-from: hsl(var(--card)) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--card) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-transparent {\n --tw-gradient-from: transparent var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-40\\% {\n --tw-gradient-from-position: 40%;\n}\n.from-50\\% {\n --tw-gradient-from-position: 50%;\n}\n.to-background {\n --tw-gradient-to: hsl(var(--background)) var(--tw-gradient-to-position);\n}\n.fill-current {\n fill: currentColor;\n}\n.fill-white {\n fill: #fff;\n}\n.stroke-\\[2px\\] {\n stroke-width: 2px;\n}\n.stroke-\\[3px\\] {\n stroke-width: 3px;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-\\[1px\\] {\n padding: 1px;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.px-\\[2px\\] {\n padding-left: 2px;\n padding-right: 2px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-7 {\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.pb-0 {\n padding-bottom: 0px;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-0 {\n padding-left: 0px;\n}\n.pl-6 {\n padding-left: 1.5rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pl-\\[300px\\] {\n padding-left: 300px;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pt-0 {\n padding-top: 0px;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-start {\n text-align: start;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'Space Mono', monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[0\\.8rem\\] {\n font-size: 0.8rem;\n}\n.text-\\[12px\\] {\n font-size: 12px;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[400\\] {\n font-weight: 400;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-\\[550\\] {\n font-weight: 550;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-4 {\n line-height: 1rem;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.tracking-widest {\n letter-spacing: 0.1em;\n}\n.text-accent {\n color: hsl(var(--accent));\n}\n.text-accent-foreground {\n color: hsl(var(--accent-foreground));\n}\n.text-background {\n color: hsl(var(--background));\n}\n.text-card-foreground {\n color: hsl(var(--card-foreground));\n}\n.text-current {\n color: currentColor;\n}\n.text-destructive {\n color: hsl(var(--destructive));\n}\n.text-destructive-foreground {\n color: hsl(var(--destructive-foreground));\n}\n.text-foreground {\n color: hsl(var(--foreground));\n}\n.text-muted {\n color: hsl(var(--muted));\n}\n.text-muted-foreground {\n color: hsl(var(--muted-foreground));\n}\n.text-popover-foreground {\n color: hsl(var(--popover-foreground));\n}\n.text-primary {\n color: hsl(var(--primary));\n}\n.text-primary-foreground {\n color: hsl(var(--primary-foreground));\n}\n.text-secondary-foreground {\n color: hsl(var(--secondary-foreground));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.underline-offset-4 {\n text-underline-offset: 4px;\n}\n.antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.mix-blend-difference {\n mix-blend-mode: difference;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.outline {\n outline-style: solid;\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-offset-background {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.drop-shadow-2xl {\n --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow-\\[0px_0px_12px_hsl\\(var\\(--accent\\)\\)\\] {\n --tw-drop-shadow: drop-shadow(0px 0px 12px hsl(var(--accent)));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur-lg {\n --tw-backdrop-blur: blur(16px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n@keyframes enter {\n\n from {\n opacity: var(--tw-enter-opacity, 1);\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\n }\n}\n@keyframes exit {\n\n to {\n opacity: var(--tw-exit-opacity, 1);\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\n }\n}\n.animate-in {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.fade-in-0 {\n --tw-enter-opacity: 0;\n}\n.zoom-in-95 {\n --tw-enter-scale: .95;\n}\n.duration-150 {\n animation-duration: 150ms;\n}\n.duration-200 {\n animation-duration: 200ms;\n}\n.ease-in-out {\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.file\\:border-0::file-selector-button {\n border-width: 0px;\n}\n.file\\:bg-transparent::file-selector-button {\n background-color: transparent;\n}\n.file\\:text-sm::file-selector-button {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.file\\:font-medium::file-selector-button {\n font-weight: 500;\n}\n.placeholder\\:text-muted-foreground::-moz-placeholder {\n color: hsl(var(--muted-foreground));\n}\n.placeholder\\:text-muted-foreground::placeholder {\n color: hsl(var(--muted-foreground));\n}\n.focus-within\\:relative:focus-within {\n position: relative;\n}\n.hover\\:w-\\[2px\\]:hover {\n width: 2px;\n}\n.hover\\:w-\\[3px\\]:hover {\n width: 3px;\n}\n.hover\\:cursor-pointer:hover {\n cursor: pointer;\n}\n.hover\\:rounded-lg:hover {\n border-radius: var(--radius);\n}\n.hover\\:bg-accent:hover {\n background-color: hsl(var(--accent));\n}\n.hover\\:bg-border:hover {\n background-color: hsl(var(--border));\n}\n.hover\\:bg-destructive\\/90:hover {\n background-color: hsl(var(--destructive) / 0.9);\n}\n.hover\\:bg-muted:hover {\n background-color: hsl(var(--muted));\n}\n.hover\\:bg-primary:hover {\n background-color: hsl(var(--primary));\n}\n.hover\\:bg-primary\\/90:hover {\n background-color: hsl(var(--primary) / 0.9);\n}\n.hover\\:bg-red-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity));\n}\n.hover\\:bg-secondary\\/80:hover {\n background-color: hsl(var(--secondary) / 0.8);\n}\n.hover\\:text-accent-foreground:hover {\n color: hsl(var(--accent-foreground));\n}\n.hover\\:text-muted-foreground:hover {\n color: hsl(var(--muted-foreground));\n}\n.hover\\:text-primary-foreground:hover {\n color: hsl(var(--primary-foreground));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n.focus\\:bg-accent:focus {\n background-color: hsl(var(--accent));\n}\n.focus\\:bg-primary:focus {\n background-color: hsl(var(--primary));\n}\n.focus\\:text-accent-foreground:focus {\n color: hsl(var(--accent-foreground));\n}\n.focus\\:text-primary-foreground:focus {\n color: hsl(var(--primary-foreground));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-ring:focus {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:outline-none:focus-visible {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:outline-accent:focus-visible {\n outline-color: hsl(var(--accent));\n}\n.focus-visible\\:ring-2:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-visible\\:ring-ring:focus-visible {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:ring-offset-background:focus-visible {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.disabled\\:pointer-events-none:disabled {\n pointer-events: none;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:text-background:disabled {\n color: hsl(var(--background));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n.peer:disabled ~ .peer-disabled\\:opacity-70 {\n opacity: 0.7;\n}\n.aria-selected\\:bg-accent[aria-selected=\"true\"] {\n background-color: hsl(var(--accent));\n}\n.aria-selected\\:text-accent-foreground[aria-selected=\"true\"] {\n color: hsl(var(--accent-foreground));\n}\n.aria-selected\\:opacity-100[aria-selected=\"true\"] {\n opacity: 1;\n}\n.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {\n pointer-events: none;\n}\n.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom] {\n --tw-translate-y: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left] {\n --tw-translate-x: -0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=right\\]\\:translate-x-1[data-side=right] {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top] {\n --tw-translate-y: -0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[state\\=checked\\]\\:translate-x-5[data-state=checked] {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state=unchecked] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes accordion-up {\n\n from {\n height: var(--radix-accordion-content-height);\n }\n\n to {\n height: 0;\n }\n}\n.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=closed] {\n animation: accordion-up 0.2s ease-out;\n}\n@keyframes accordion-down {\n\n from {\n height: 0;\n }\n\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n.data-\\[state\\=open\\]\\:animate-accordion-down[data-state=open] {\n animation: accordion-down 0.2s ease-out;\n}\n.data-\\[state\\=active\\]\\:bg-background[data-state=active] {\n background-color: hsl(var(--background));\n}\n.data-\\[state\\=checked\\]\\:bg-accent[data-state=checked] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=checked\\]\\:bg-primary[data-state=checked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=on\\]\\:bg-accent[data-state=on] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=open\\]\\:bg-accent[data-state=open] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=unchecked\\]\\:bg-primary[data-state=unchecked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=active\\]\\:text-foreground[data-state=active] {\n color: hsl(var(--foreground));\n}\n.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state=checked] {\n color: hsl(var(--primary-foreground));\n}\n.data-\\[state\\=on\\]\\:text-accent-foreground[data-state=on] {\n color: hsl(var(--accent-foreground));\n}\n.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open] {\n color: hsl(var(--muted-foreground));\n}\n.data-\\[disabled\\]\\:opacity-50[data-disabled] {\n opacity: 0.5;\n}\n.data-\\[state\\=active\\]\\:shadow-sm[data-state=active] {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[state\\=open\\]\\:animate-in[data-state=open] {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:animate-out[data-state=closed] {\n animation-name: exit;\n animation-duration: 150ms;\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed] {\n --tw-exit-opacity: 0;\n}\n.data-\\[state\\=open\\]\\:fade-in-0[data-state=open] {\n --tw-enter-opacity: 0;\n}\n.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed] {\n --tw-exit-scale: .95;\n}\n.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open] {\n --tw-enter-scale: .95;\n}\n.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom] {\n --tw-enter-translate-y: -0.5rem;\n}\n.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left] {\n --tw-enter-translate-x: 0.5rem;\n}\n.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right] {\n --tw-enter-translate-x: -0.5rem;\n}\n.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top] {\n --tw-enter-translate-y: 0.5rem;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=closed] {\n --tw-exit-translate-x: -50%;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=closed] {\n --tw-exit-translate-y: -48%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=open] {\n --tw-enter-translate-x: -50%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=open] {\n --tw-enter-translate-y: -48%;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n@media (min-width: 640px) {\n\n .sm\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0px * var(--tw-space-y-reverse));\n }\n\n .sm\\:rounded-lg {\n border-radius: var(--radius);\n }\n\n .sm\\:p-0 {\n padding: 0px;\n }\n\n .sm\\:text-left {\n text-align: left;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:relative {\n position: relative;\n }\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:hidden {\n display: none;\n }\n\n .md\\:w-\\[300px\\] {\n width: 300px;\n }\n\n .md\\:w-full {\n width: 100%;\n }\n\n .md\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .md\\:pl-0 {\n padding-left: 0px;\n }\n}\n.\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:bg-accent:has([aria-selected]) {\n background-color: hsl(var(--accent));\n}\n.first\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-l-md:has([aria-selected]):first-child {\n border-top-left-radius: calc(var(--radius) - 2px);\n border-bottom-left-radius: calc(var(--radius) - 2px);\n}\n.last\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-r-md:has([aria-selected]):last-child {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n}\n.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading] {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {\n font-weight: 500;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading] {\n color: hsl(var(--muted-foreground));\n}\n.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: 0px;\n}\n.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg {\n width: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input] {\n height: 3rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item] {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg {\n width: 1.25rem;\n}\n";
73815
74109
  function Style() {
73816
74110
  return /* @__PURE__ */ jsxRuntime.jsx("style", { children: styleCss });
73817
74111
  }