@valbuild/ui 0.45.0 → 0.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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" }]
56720
+ ]);
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" }]
56641
56725
  ]);
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" }]
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,43 +67730,63 @@ 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}%`
67667
- }
67668
- }
67669
- ),
67739
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-fit", children: [
67740
+ /* @__PURE__ */ jsxRuntime.jsx(
67741
+ "div",
67742
+ {
67743
+ className: "flex flex-col justify-start p-2 border border-b-0 rounded-sm rounded-b-none gap-y-4 bg-background text-foreground border-input",
67744
+ children: data || url ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
67745
+ hotspot && /* @__PURE__ */ jsxRuntime.jsx(
67746
+ "div",
67747
+ {
67748
+ className: "rounded-full h-[12px] w-[12px] bg-background mix-blend-difference border-accent border-2 absolute pointer-events-none",
67749
+ style: {
67750
+ top: `${hotspot.y * 100}%`,
67751
+ left: `${hotspot.x * 100}%`
67752
+ }
67753
+ }
67754
+ ),
67755
+ /* @__PURE__ */ jsxRuntime.jsx(
67756
+ "img",
67757
+ {
67758
+ src: (data == null ? void 0 : data.src) || url,
67759
+ draggable: false,
67760
+ className: "object-contain w-full max-h-[500px]",
67761
+ style: {
67762
+ cursor: "crosshair"
67763
+ },
67764
+ onClick: (ev) => {
67765
+ const { width: width2, height: height2, left, top } = ev.currentTarget.getBoundingClientRect();
67766
+ const hotspotX = (ev.clientX - 6 - left) / width2;
67767
+ const hotspotY = (ev.clientY - 6 - top) / height2;
67768
+ setHotspot({
67769
+ x: hotspotX,
67770
+ y: hotspotY,
67771
+ width: 1,
67772
+ height: 1
67773
+ });
67774
+ }
67775
+ }
67776
+ )
67777
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Select image below" })
67778
+ },
67779
+ path
67780
+ ),
67781
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 border border-t-0 rounded-b-sm bg-background border-input", children: [
67670
67782
  /* @__PURE__ */ jsxRuntime.jsx(
67671
- "img",
67783
+ "label",
67672
67784
  {
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 });
67683
- }
67785
+ htmlFor: `img_input:${path}`,
67786
+ className: "block px-1 py-2 text-sm text-center rounded-md cursor-pointer bg-primary text-background",
67787
+ children: "Update"
67684
67788
  }
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" }),
67789
+ ),
67689
67790
  /* @__PURE__ */ jsxRuntime.jsx(
67690
67791
  "input",
67691
67792
  {
@@ -67717,43 +67818,39 @@ function ImageField({
67717
67818
  }
67718
67819
  )
67719
67820
  ] })
67720
- ] }, path),
67721
- onSubmit && data && /* @__PURE__ */ jsxRuntime.jsx(
67821
+ ] }),
67822
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67722
67823
  SubmitButton,
67723
67824
  {
67724
67825
  loading,
67826
+ 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),
67725
67827
  onClick: () => {
67726
- setLoading(true);
67727
- onSubmit(
67728
- (path2) => Promise.resolve(
67729
- createImagePatch(
67730
- path2,
67731
- data.src,
67732
- data.filename ?? null,
67733
- metadata
67828
+ if (data) {
67829
+ setLoading(true);
67830
+ onSubmit(
67831
+ (path2) => Promise.resolve(
67832
+ createImagePatch(
67833
+ path2,
67834
+ data.src,
67835
+ data.filename ?? null,
67836
+ metadata
67837
+ )
67734
67838
  )
67735
- )
67736
- ).finally(() => {
67737
- setLoading(false);
67738
- setData(null);
67739
- setMetadata(void 0);
67740
- });
67741
- }
67742
- }
67743
- ),
67744
- onSubmit && !data && metadata && /* @__PURE__ */ jsxRuntime.jsx(
67745
- SubmitButton,
67746
- {
67747
- loading,
67748
- 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
- });
67839
+ ).finally(() => {
67840
+ setLoading(false);
67841
+ setData(null);
67842
+ setMetadata(void 0);
67843
+ });
67844
+ } else if (metadata) {
67845
+ setLoading(true);
67846
+ onSubmit(
67847
+ (path2) => Promise.resolve(createImageMetadataPatch(path2, metadata))
67848
+ ).finally(() => {
67849
+ setLoading(false);
67850
+ setData(null);
67851
+ setMetadata(void 0);
67852
+ });
67853
+ }
67757
67854
  }
67758
67855
  }
67759
67856
  )
@@ -67834,10 +67931,11 @@ function RichTextField({
67834
67931
  }
67835
67932
  }
67836
67933
  ),
67837
- onSubmit && didChange && /* @__PURE__ */ jsxRuntime.jsx(
67934
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67838
67935
  SubmitButton,
67839
67936
  {
67840
67937
  loading: loading || !editor,
67938
+ enabled: didChange,
67841
67939
  onClick: () => {
67842
67940
  if (editor) {
67843
67941
  setLoading(true);
@@ -67919,10 +68017,11 @@ function KeyOfField({
67919
68017
  ]
67920
68018
  }
67921
68019
  ),
67922
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68020
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67923
68021
  SubmitButton,
67924
68022
  {
67925
68023
  loading,
68024
+ enabled: defaultValue !== value,
67926
68025
  onClick: () => {
67927
68026
  setLoading(true);
67928
68027
  onSubmit(async (path) => [
@@ -67976,10 +68075,11 @@ function NumberField({
67976
68075
  type: "number"
67977
68076
  }
67978
68077
  ),
67979
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68078
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67980
68079
  SubmitButton,
67981
68080
  {
67982
68081
  loading,
68082
+ enabled: defaultValue !== value,
67983
68083
  onClick: () => {
67984
68084
  setLoading(true);
67985
68085
  onSubmit(async (path) => {
@@ -68002,6 +68102,8 @@ function NumberField({
68002
68102
  function StringField({
68003
68103
  disabled,
68004
68104
  defaultValue,
68105
+ path,
68106
+ schema,
68005
68107
  registerPatchCallback,
68006
68108
  onSubmit
68007
68109
  }) {
@@ -68013,18 +68115,28 @@ function StringField({
68013
68115
  const ref = React$3.useRef(null);
68014
68116
  React$3.useEffect(() => {
68015
68117
  if (registerPatchCallback) {
68016
- registerPatchCallback(async (path) => {
68118
+ registerPatchCallback(async (path2) => {
68017
68119
  var _a;
68018
68120
  return [
68019
68121
  {
68020
68122
  op: "replace",
68021
- path,
68123
+ path: path2,
68022
68124
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
68023
68125
  }
68024
68126
  ];
68025
68127
  });
68026
68128
  }
68027
68129
  }, []);
68130
+ const actualSchema = new StringSchema(
68131
+ schema.options ? {
68132
+ ...schema.options,
68133
+ regexp: schema.options.regexp ? new RegExp(
68134
+ schema.options.regexp.source,
68135
+ schema.options.regexp.flags
68136
+ ) : void 0
68137
+ } : void 0
68138
+ );
68139
+ const validationErrors = actualSchema.validate(path, value);
68028
68140
  return /* @__PURE__ */ jsxRuntime.jsxs(FieldContainer, { children: [
68029
68141
  /* @__PURE__ */ jsxRuntime.jsx(
68030
68142
  Input,
@@ -68035,18 +68147,20 @@ function StringField({
68035
68147
  onChange: (e) => setValue(e.target.value)
68036
68148
  }
68037
68149
  ),
68038
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68150
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
68039
68151
  SubmitButton,
68040
68152
  {
68153
+ validationErrors: validationErrors && validationErrors[path],
68041
68154
  loading,
68155
+ enabled: defaultValue !== value && !validationErrors,
68042
68156
  onClick: () => {
68043
68157
  setLoading(true);
68044
- onSubmit(async (path) => {
68158
+ onSubmit(async (path2) => {
68045
68159
  var _a;
68046
68160
  return [
68047
68161
  {
68048
68162
  op: "replace",
68049
- path,
68163
+ path: path2,
68050
68164
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
68051
68165
  }
68052
68166
  ];
@@ -68058,14 +68172,28 @@ function StringField({
68058
68172
  )
68059
68173
  ] });
68060
68174
  }
68061
- function FieldContainer({ children }) {
68062
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative p-4 border rounded border-card", children });
68175
+ function InlineValidationErrors({ errors }) {
68176
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col p-2 text-sm rounded-md gap-y-1 text-destructive-foreground bg-destructive", children: errors.map((error, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: error.message }, i)) });
68177
+ }
68178
+ function FieldContainer({
68179
+ children,
68180
+ className: className2
68181
+ }) {
68182
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classNames("relative max-w-lg px-4 pt-4", className2), children });
68063
68183
  }
68064
68184
  function SubmitButton({
68065
68185
  loading,
68186
+ enabled,
68187
+ validationErrors,
68066
68188
  onClick
68067
68189
  }) {
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" }) }) });
68190
+ const { session } = useValOverlayContext();
68191
+ const isProxy = session.status === "success" && session.data.mode === "proxy";
68192
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky bottom-0 m-4 mt-2 ml-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-start w-full gap-2 text-sm", children: [
68193
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { disabled: loading || !enabled, onClick, children: loading ? isProxy ? "Staging..." : "Saving..." : isProxy ? "Stage" : "Save" }),
68194
+ " ",
68195
+ validationErrors ? /* @__PURE__ */ jsxRuntime.jsx(InlineValidationErrors, { errors: validationErrors || [] }) : /* @__PURE__ */ jsxRuntime.jsx("span", {})
68196
+ ] }) });
68069
68197
  }
68070
68198
  const Logo = ({ className: className2 }) => {
68071
68199
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -68082,7 +68210,7 @@ const Logo = ({ className: className2 }) => {
68082
68210
  "path",
68083
68211
  {
68084
68212
  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"
68213
+ fill: "hsl(var(--accent))"
68086
68214
  }
68087
68215
  ) }),
68088
68216
  /* @__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 +72664,33 @@ function useSession(api) {
72536
72664
  }, [sessionResetId]);
72537
72665
  return session;
72538
72666
  }
72667
+ function Path({ children }) {
72668
+ const segs = children.split("/").filter((seg) => seg);
72669
+ return segs.map((seg, i) => {
72670
+ if (i !== segs.length - 1) {
72671
+ return /* @__PURE__ */ jsxRuntime.jsxs(React$3.Fragment, { children: [
72672
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: seg }),
72673
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-[2px] text-muted", children: "/" })
72674
+ ] }, `${children}/${seg}`);
72675
+ }
72676
+ return /* @__PURE__ */ jsxRuntime.jsx(Seg, { children: seg }, children);
72677
+ });
72678
+ }
72679
+ function Seg({ children }) {
72680
+ if (children.includes(".")) {
72681
+ const segs = children.split(".");
72682
+ return segs.map((seg, i) => {
72683
+ if (i !== segs.length - 1) {
72684
+ return /* @__PURE__ */ jsxRuntime.jsxs(React$3.Fragment, { children: [
72685
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }),
72686
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-[2px] text-muted", children: "." })
72687
+ ] }, `${children}.${seg}`);
72688
+ }
72689
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }, children);
72690
+ });
72691
+ }
72692
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { children });
72693
+ }
72539
72694
  const ValModulesContext = React$3.createContext(null);
72540
72695
  const useValModuleFromPath = (sourcePath) => {
72541
72696
  var _a, _b;
@@ -72686,12 +72841,13 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72686
72841
  "div",
72687
72842
  {
72688
72843
  id: "val-fullscreen-container",
72689
- className: "relative font-serif antialiased",
72844
+ className: "relative w-full h-[100] overflow-hidden font-serif antialiased bg-background text-primary",
72690
72845
  "data-mode": theme2,
72691
72846
  children: [
72692
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-x-1/2 z-overlay left-1/2 bottom-4", children: /* @__PURE__ */ jsxRuntime.jsx(
72847
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(
72693
72848
  ValMenu,
72694
72849
  {
72850
+ direction: "vertical",
72695
72851
  api,
72696
72852
  patches,
72697
72853
  onCommit: () => setPatchResetId((prev) => prev + 1)
@@ -72704,18 +72860,19 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72704
72860
  value: {
72705
72861
  hoverElem: hoverElemRef == null ? void 0 : hoverElemRef.current
72706
72862
  },
72707
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-primary bg-background", children: /* @__PURE__ */ jsxRuntime.jsxs(Grid, { children: [
72863
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-primary", children: /* @__PURE__ */ jsxRuntime.jsxs(Grid, { children: [
72708
72864
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 h-[50px] flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Logo$1, {}) }),
72709
72865
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "px-4", children: modules ? /* @__PURE__ */ jsxRuntime.jsx(
72710
72866
  PathTree,
72711
72867
  {
72868
+ selectedPath,
72712
72869
  paths: Object.keys(modules),
72713
72870
  setSelectedModuleId: (path) => {
72714
72871
  navigate(path);
72715
72872
  }
72716
72873
  }
72717
72874
  ) : !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: [
72875
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start h-[50px] gap-2 font-serif text-xs", children: [
72719
72876
  /* @__PURE__ */ jsxRuntime.jsx(
72720
72877
  "button",
72721
72878
  {
@@ -72725,10 +72882,18 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72725
72882
  children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft, {})
72726
72883
  }
72727
72884
  ),
72728
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: selectedPath || "/" })
72885
+ /* @__PURE__ */ jsxRuntime.jsx(
72886
+ "div",
72887
+ {
72888
+ className: "truncate max-w-[300px]",
72889
+ dir: "rtl",
72890
+ title: selectedPath,
72891
+ children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: selectedPath || "/" })
72892
+ }
72893
+ )
72729
72894
  ] }),
72730
72895
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4", children: [
72731
- error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg text-destructive-foreground", children: [
72896
+ error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-xl p-4 text-lg bg-destructive text-destructive-foreground", children: [
72732
72897
  "ERROR: ",
72733
72898
  error
72734
72899
  ] }),
@@ -72797,7 +72962,7 @@ function AnyVal({
72797
72962
  initOnSubmit,
72798
72963
  top
72799
72964
  }) {
72800
- if (source === null || schema.opt) {
72965
+ if (schema.opt) {
72801
72966
  return /* @__PURE__ */ jsxRuntime.jsx(
72802
72967
  ValOptional,
72803
72968
  {
@@ -72810,6 +72975,18 @@ function AnyVal({
72810
72975
  }
72811
72976
  );
72812
72977
  }
72978
+ if (source === null) {
72979
+ return /* @__PURE__ */ jsxRuntime.jsx(
72980
+ ValDefaultOf,
72981
+ {
72982
+ source,
72983
+ schema,
72984
+ path,
72985
+ setSelectedPath,
72986
+ initOnSubmit
72987
+ }
72988
+ );
72989
+ }
72813
72990
  if (schema.type === "object") {
72814
72991
  if (typeof source !== "object" || isJsonArray(source)) {
72815
72992
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -72835,15 +73012,18 @@ function AnyVal({
72835
73012
  typeof source
72836
73013
  ] });
72837
73014
  }
72838
- return /* @__PURE__ */ jsxRuntime.jsx(
72839
- ValList,
72840
- {
72841
- source,
72842
- path,
72843
- schema,
72844
- setSelectedPath
72845
- }
72846
- );
73015
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73016
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate max-w-[300px]", title: path, dir: "rtl", children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }) }),
73017
+ /* @__PURE__ */ jsxRuntime.jsx(
73018
+ ValList,
73019
+ {
73020
+ source,
73021
+ path,
73022
+ schema,
73023
+ setSelectedPath
73024
+ }
73025
+ )
73026
+ ] });
72847
73027
  } else if (schema.type === "record") {
72848
73028
  if (typeof source !== "object") {
72849
73029
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -72859,18 +73039,39 @@ function AnyVal({
72859
73039
  schema.type
72860
73040
  ] });
72861
73041
  }
72862
- return /* @__PURE__ */ jsxRuntime.jsx(
72863
- ValRecord,
72864
- {
72865
- source,
72866
- path,
72867
- schema,
72868
- setSelectedPath
72869
- }
72870
- );
73042
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73043
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate max-w-[300px]", title: path, dir: "rtl", children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }) }),
73044
+ /* @__PURE__ */ jsxRuntime.jsx(
73045
+ ValRecord,
73046
+ {
73047
+ source,
73048
+ path,
73049
+ schema,
73050
+ setSelectedPath
73051
+ }
73052
+ )
73053
+ ] });
73054
+ } else if ((schema == null ? void 0 : schema.type) === "union") {
73055
+ if (schema.key && typeof source === "object" && !isJsonArray(source)) {
73056
+ return /* @__PURE__ */ jsxRuntime.jsx(
73057
+ ValTaggedUnion,
73058
+ {
73059
+ field,
73060
+ tag: schema.key,
73061
+ source,
73062
+ path,
73063
+ schema,
73064
+ initOnSubmit,
73065
+ setSelectedPath,
73066
+ top
73067
+ }
73068
+ );
73069
+ }
73070
+ } else if ((schema == null ? void 0 : schema.type) === "literal") {
73071
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
72871
73072
  }
72872
73073
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-2 gap-y-4", children: [
72873
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field || path }),
73074
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate max-w-[300px]", title: path, dir: "rtl", children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }) }),
72874
73075
  /* @__PURE__ */ jsxRuntime.jsx(
72875
73076
  ValFormField,
72876
73077
  {
@@ -72883,6 +73084,110 @@ function AnyVal({
72883
73084
  )
72884
73085
  ] });
72885
73086
  }
73087
+ function ValTaggedUnion({
73088
+ tag,
73089
+ field,
73090
+ path,
73091
+ source,
73092
+ schema,
73093
+ setSelectedPath,
73094
+ initOnSubmit,
73095
+ top
73096
+ }) {
73097
+ const [currentKey, setCurrentKey] = React$3.useState(null);
73098
+ const [current, setCurrent] = React$3.useState(null);
73099
+ const keys = schema.items.flatMap((item) => {
73100
+ if (item.type === "object" && item.items[tag]) {
73101
+ const maybeLiteral = item.items[tag];
73102
+ if (maybeLiteral.type === "literal") {
73103
+ return [maybeLiteral.value];
73104
+ }
73105
+ }
73106
+ return [];
73107
+ });
73108
+ React$3.useEffect(() => {
73109
+ if (!currentKey) {
73110
+ const maybeCurrentKey = source == null ? void 0 : source[tag];
73111
+ if (maybeCurrentKey && typeof maybeCurrentKey === "string") {
73112
+ setCurrentKey(maybeCurrentKey);
73113
+ }
73114
+ } else {
73115
+ const sourceKey = source[tag];
73116
+ const unionSchema = schema.items.find((item) => {
73117
+ if (item.type === "object" && item.items[tag]) {
73118
+ const maybeLiteral = item.items[tag];
73119
+ if (maybeLiteral.type === "literal") {
73120
+ return maybeLiteral.value === currentKey;
73121
+ }
73122
+ return false;
73123
+ }
73124
+ });
73125
+ if (sourceKey && typeof sourceKey === "string" && unionSchema) {
73126
+ setCurrent({ source, schema: unionSchema });
73127
+ } else if (unionSchema) {
73128
+ setCurrent({ schema: unionSchema });
73129
+ } else {
73130
+ console.error(
73131
+ "Could not find source or schema of key",
73132
+ currentKey,
73133
+ source,
73134
+ schema
73135
+ );
73136
+ setCurrent(null);
73137
+ }
73138
+ }
73139
+ }, [currentKey, source, tag, schema, keys]);
73140
+ if (keys.length !== schema.items.length) {
73141
+ console.warn("Not all items have tag:", tag);
73142
+ }
73143
+ const loading = false;
73144
+ const onSubmit = initOnSubmit(path);
73145
+ return /* @__PURE__ */ jsxRuntime.jsxs(
73146
+ FieldContainer,
73147
+ {
73148
+ className: classNames("flex flex-col gap-y-4", {
73149
+ "border-l-2 border-border pl-6": !top
73150
+ }),
73151
+ children: [
73152
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate max-w-[300px]", title: path, dir: "rtl", children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }) }),
73153
+ /* @__PURE__ */ jsxRuntime.jsxs(
73154
+ Select,
73155
+ {
73156
+ value: currentKey ?? void 0,
73157
+ disabled: loading,
73158
+ onValueChange: (key) => {
73159
+ setCurrentKey(key);
73160
+ },
73161
+ children: [
73162
+ /* @__PURE__ */ jsxRuntime.jsx(SelectTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(SelectValue, { placeholder: "Select type" }) }),
73163
+ /* @__PURE__ */ jsxRuntime.jsx(SelectContent, { children: keys.map((tag2) => /* @__PURE__ */ jsxRuntime.jsx(SelectItem, { value: tag2.toString(), children: tag2.toString() }, tag2)) })
73164
+ ]
73165
+ }
73166
+ ),
73167
+ /* @__PURE__ */ jsxRuntime.jsx(
73168
+ SubmitButton,
73169
+ {
73170
+ loading,
73171
+ enabled: false,
73172
+ onClick: () => onSubmit(async () => [])
73173
+ }
73174
+ ),
73175
+ current && /* @__PURE__ */ jsxRuntime.jsx(
73176
+ AnyVal,
73177
+ {
73178
+ path,
73179
+ source: current.source ?? null,
73180
+ schema: current.schema,
73181
+ setSelectedPath,
73182
+ initOnSubmit,
73183
+ top
73184
+ }
73185
+ )
73186
+ ]
73187
+ },
73188
+ path
73189
+ );
73190
+ }
72886
73191
  function ValObject({
72887
73192
  path,
72888
73193
  source,
@@ -72894,7 +73199,7 @@ function ValObject({
72894
73199
  return /* @__PURE__ */ jsxRuntime.jsx(
72895
73200
  "div",
72896
73201
  {
72897
- className: classNames("flex flex-col gap-y-8", {
73202
+ className: classNames("flex flex-col gap-y-1", {
72898
73203
  "border-l-2 border-border pl-6": !top
72899
73204
  }),
72900
73205
  children: Object.entries(schema.items).map(([key, property]) => {
@@ -72903,7 +73208,7 @@ function ValObject({
72903
73208
  AnyVal,
72904
73209
  {
72905
73210
  path: subPath,
72906
- source: source[key],
73211
+ source: (source == null ? void 0 : source[key]) ?? null,
72907
73212
  schema: property,
72908
73213
  setSelectedPath,
72909
73214
  field: key,
@@ -72987,7 +73292,7 @@ function ValList({
72987
73292
  setSelectedPath
72988
73293
  }) {
72989
73294
  const navigate = useNavigate();
72990
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 p-2", children: source.map((item, index2) => {
73295
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 p-2 pb-8", children: source.map((item, index2) => {
72991
73296
  const subPath = createValPathOfItem(path, index2);
72992
73297
  return /* @__PURE__ */ jsxRuntime.jsx(
72993
73298
  "button",
@@ -73226,9 +73531,10 @@ function ValOptional({
73226
73531
  field
73227
73532
  }) {
73228
73533
  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: [
73231
- /* @__PURE__ */ jsxRuntime.jsx(
73534
+ const { editMode } = useValOverlayContext();
73535
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-2", children: [
73536
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
73537
+ editMode === "full" && /* @__PURE__ */ jsxRuntime.jsx(
73232
73538
  Switch,
73233
73539
  {
73234
73540
  checked: enable,
@@ -73237,16 +73543,8 @@ function ValOptional({
73237
73543
  }
73238
73544
  }
73239
73545
  ),
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
- ),
73546
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate max-w-[300px]", title: path, dir: "rtl", children: field ? field : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }) })
73547
+ ] }),
73250
73548
  enable && /* @__PURE__ */ jsxRuntime.jsx(
73251
73549
  ValDefaultOf,
73252
73550
  {
@@ -73315,61 +73613,62 @@ function ValDefaultOf({
73315
73613
  function isJsonArray(source) {
73316
73614
  return Array.isArray(source);
73317
73615
  }
73318
- function pathsToTree(paths) {
73319
- const tree = {};
73616
+ function dirPaths(paths) {
73617
+ const res = {};
73320
73618
  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] = {};
73619
+ const allParts = path.split("/").filter((part) => part !== "");
73620
+ if (allParts.length === 1) {
73621
+ if (!res[""]) {
73622
+ res[""] = [];
73326
73623
  }
73327
- current = current[part];
73328
- });
73624
+ res[""].push(allParts[0]);
73625
+ } else if (allParts.length > 1) {
73626
+ const dir = allParts.slice(0, allParts.length - 1).join("/");
73627
+ const file = allParts.slice(-1)[0];
73628
+ if (!res[dir]) {
73629
+ res[dir] = [];
73630
+ }
73631
+ res[dir].push(file);
73632
+ }
73329
73633
  });
73330
- return tree;
73634
+ return res;
73331
73635
  }
73332
73636
  function PathTree({
73637
+ selectedPath,
73333
73638
  paths,
73334
73639
  setSelectedModuleId
73335
73640
  }) {
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
- ] });
73641
+ const tree = dirPaths(paths);
73642
+ const selectedModuleId = selectedPath && Internal.splitModuleIdAndModulePath(selectedPath)[0];
73643
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: Object.entries(tree).map(([dir, files]) => {
73644
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 py-2", children: [
73645
+ dir && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-bold truncate max-w-[300px]", title: dir, children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: dir }) }),
73646
+ /* @__PURE__ */ jsxRuntime.jsx(
73647
+ "div",
73648
+ {
73649
+ className: classNames({
73650
+ "flex flex-col py-2 justify-start items-start": !!dir
73651
+ }),
73652
+ children: files.map((file) => {
73653
+ const moduleId = `/${dir}/${file}`;
73654
+ return /* @__PURE__ */ jsxRuntime.jsx(
73655
+ "button",
73656
+ {
73657
+ className: classNames("block px-2 py-1 rounded-full", {
73658
+ "bg-accent text-accent-foreground": selectedModuleId === moduleId
73659
+ }),
73660
+ onClick: () => {
73661
+ setSelectedModuleId(moduleId);
73662
+ },
73663
+ children: file
73664
+ },
73665
+ moduleId
73666
+ );
73667
+ })
73668
+ }
73669
+ )
73670
+ ] }, `/${dir}`);
73671
+ }) });
73373
73672
  }
73374
73673
  const theme = {
73375
73674
  tags: {
@@ -73561,76 +73860,91 @@ function ValOverlay({
73561
73860
  windowSize,
73562
73861
  setWindowSize
73563
73862
  },
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",
73863
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
73864
+ "div",
73865
+ {
73866
+ "data-mode": theme2,
73867
+ className: "font-serif antialiased",
73868
+ style: {
73869
+ position: "fixed",
73870
+ top: 0,
73871
+ left: 0,
73872
+ zIndex: 8999
73873
+ // 1 less than the NextJS error z-index: 9000
73874
+ },
73875
+ children: [
73876
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(
73877
+ ValMenu,
73593
73878
  {
73594
- className: "p-4",
73595
- style: {
73596
- maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
73879
+ direction: "vertical",
73880
+ api,
73881
+ patches,
73882
+ onCommit: () => {
73883
+ setPatchResetId((patchResetId) => patchResetId + 1);
73884
+ }
73885
+ }
73886
+ ) }),
73887
+ session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsxRuntime.jsx(
73888
+ ValHover,
73889
+ {
73890
+ hoverTarget,
73891
+ setHoverTarget,
73892
+ setEditMode,
73893
+ setWindowTarget
73894
+ }
73895
+ ),
73896
+ editMode === "window" && windowTarget && /* @__PURE__ */ jsxRuntime.jsx(
73897
+ ValWindow,
73898
+ {
73899
+ onClose: () => {
73900
+ setWindowTarget(null);
73901
+ setEditMode("hover");
73597
73902
  },
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
73903
+ children: /* @__PURE__ */ jsxRuntime.jsx(
73904
+ "div",
73905
+ {
73906
+ className: "p-4",
73907
+ style: {
73908
+ maxHeight: windowSize == null ? void 0 : windowSize.innerHeight,
73909
+ maxWidth: windowSize == null ? void 0 : windowSize.width
73625
73910
  },
73626
- path
73627
- );
73628
- })
73911
+ children: Object.entries(formData).map(([path, data]) => {
73912
+ if (data.status !== "success") {
73913
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73914
+ path,
73915
+ ": ",
73916
+ data.status
73917
+ ] }, path);
73918
+ }
73919
+ const { source, schema } = data.data;
73920
+ if (!source || !schema) {
73921
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73922
+ "Module: ",
73923
+ path,
73924
+ " is missing source or schema"
73925
+ ] });
73926
+ }
73927
+ return /* @__PURE__ */ jsxRuntime.jsx(
73928
+ AnyVal,
73929
+ {
73930
+ initOnSubmit,
73931
+ path,
73932
+ schema,
73933
+ source,
73934
+ setSelectedPath: () => {
73935
+ },
73936
+ top: true
73937
+ },
73938
+ path
73939
+ );
73940
+ })
73941
+ }
73942
+ )
73629
73943
  }
73630
73944
  )
73631
- }
73632
- )
73633
- ] })
73945
+ ]
73946
+ }
73947
+ )
73634
73948
  }
73635
73949
  );
73636
73950
  }
@@ -73697,7 +74011,7 @@ function ValHover({
73697
74011
  "div",
73698
74012
  {
73699
74013
  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)]",
74014
+ className: "fixed border-2 cursor-pointer z-overlay-hover border-accent",
73701
74015
  style: {
73702
74016
  top: rect == null ? void 0 : rect.top,
73703
74017
  left: rect == null ? void 0 : rect.left,
@@ -73718,7 +74032,7 @@ function ValHover({
73718
74032
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-end w-full text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(
73719
74033
  "div",
73720
74034
  {
73721
- className: "flex items-center justify-center px-3 py-1 text-primary bg-highlight",
74035
+ className: "flex items-center justify-center px-3 py-1 border-b-2 border-l-2 text-accent-foreground bg-accent border-accent",
73722
74036
  style: {
73723
74037
  maxHeight: (rect == null ? void 0 : rect.height) && rect.height - 4,
73724
74038
  fontSize: (rect == null ? void 0 : rect.height) && rect.height <= 16 ? rect.height - 4 : void 0
@@ -73762,9 +74076,19 @@ function useHoverTarget(editMode) {
73762
74076
  setTargetRect(targetElement.getBoundingClientRect());
73763
74077
  }
73764
74078
  };
74079
+ const observer = new ResizeObserver(() => {
74080
+ if (targetElement) {
74081
+ setTargetRect(targetElement.getBoundingClientRect());
74082
+ }
74083
+ });
74084
+ const valUIElement = document.getElementById("val-ui");
74085
+ if (targetElement && valUIElement) {
74086
+ observer.observe(valUIElement);
74087
+ }
73765
74088
  document.addEventListener("scroll", scrollListener, { passive: true });
73766
74089
  return () => {
73767
74090
  document.removeEventListener("scroll", scrollListener);
74091
+ observer.disconnect();
73768
74092
  };
73769
74093
  }, [targetElement]);
73770
74094
  return [
@@ -73811,7 +74135,7 @@ function useInitEditMode() {
73811
74135
  }, []);
73812
74136
  return [editMode, setEditMode];
73813
74137
  }
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";
74138
+ 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.max-h-\\[500px\\] {\n max-height: 500px;\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-\\[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.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.pb-8 {\n padding-bottom: 2rem;\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
74139
  function Style() {
73816
74140
  return /* @__PURE__ */ jsxRuntime.jsx("style", { children: styleCss });
73817
74141
  }