@opencosmos/ui 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.claude/CLAUDE.md +47 -47
  2. package/README.md +21 -21
  3. package/dist/{hooks-CKW8vE9H.d.ts → hooks-CFPKFXhH.d.ts} +1 -1
  4. package/dist/{hooks-1b8WaQf1.d.mts → hooks-CeAuZ0i5.d.mts} +1 -1
  5. package/dist/hooks.d.mts +1 -1
  6. package/dist/hooks.d.ts +1 -1
  7. package/dist/hooks.js.map +1 -1
  8. package/dist/hooks.mjs.map +1 -1
  9. package/dist/index.d.mts +78 -11
  10. package/dist/index.d.ts +78 -11
  11. package/dist/index.js +585 -342
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.mjs +548 -312
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/{providers-CXPDMsl7.d.mts → providers-CzKisd2T.d.mts} +1 -1
  16. package/dist/{providers-Dn_Msjvz.d.ts → providers-D39-kwai.d.ts} +1 -1
  17. package/dist/providers.d.mts +1 -1
  18. package/dist/providers.d.ts +1 -1
  19. package/dist/providers.js.map +1 -1
  20. package/dist/providers.mjs.map +1 -1
  21. package/dist/tokens.js.map +1 -1
  22. package/dist/{utils-Cs04sxth.d.mts → utils-CkatYLG4.d.mts} +1 -1
  23. package/dist/{utils-CIIM7dAC.d.ts → utils-Y1Zi7biA.d.ts} +1 -1
  24. package/dist/utils.d.mts +1 -1
  25. package/dist/utils.d.ts +1 -1
  26. package/dist/utils.js.map +1 -1
  27. package/dist/utils.mjs.map +1 -1
  28. package/package.json +257 -257
  29. package/src/component-registry.ts +4 -4
  30. package/src/components/data-display/CollapsibleCodeBlock.tsx +1 -1
  31. package/src/components/data-display/OpenCosmosIcon.tsx +39 -0
  32. package/src/components/data-display/index.ts +1 -0
  33. package/src/components/layout/AppSidebar.tsx +277 -0
  34. package/src/components/layout/CustomizerPanel.tsx +2 -2
  35. package/src/components/layout/index.ts +1 -0
  36. package/src/hooks/useTheme.ts +1 -1
  37. package/src/hooks.ts +1 -1
  38. package/src/index.ts +6 -4
  39. package/src/lib/store/customizer.ts +1 -1
  40. package/src/lib/store/theme.ts +1 -1
  41. package/src/lib/syntax-parser/index.ts +1 -1
  42. package/src/providers/ThemeProvider.tsx +2 -2
  43. package/src/providers.ts +1 -1
  44. package/src/tokens.ts +3 -3
  45. package/src/utils.ts +1 -1
package/dist/index.js CHANGED
@@ -31,6 +31,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  // src/index.ts
32
32
  var index_exports = {};
33
33
  __export(index_exports, {
34
+ APP_SIDEBAR_WIDTH: () => APP_SIDEBAR_WIDTH,
35
+ APP_SIDEBAR_WIDTH_COLLAPSED: () => APP_SIDEBAR_WIDTH_COLLAPSED,
34
36
  Accordion: () => Accordion,
35
37
  AccordionContent: () => AccordionContent,
36
38
  AccordionItem: () => AccordionItem,
@@ -51,6 +53,9 @@ __export(index_exports, {
51
53
  AlertDialogTrigger: () => AlertDialogTrigger,
52
54
  AlertTitle: () => AlertTitle,
53
55
  AnimatedBeam: () => AnimatedBeam,
56
+ AppSidebar: () => AppSidebar,
57
+ AppSidebarInset: () => AppSidebarInset,
58
+ AppSidebarProvider: () => AppSidebarProvider,
54
59
  AspectImage: () => AspectImage,
55
60
  AspectRatio: () => AspectRatio,
56
61
  Avatar: () => Avatar,
@@ -220,6 +225,7 @@ __export(index_exports, {
220
225
  NavigationMenuTrigger: () => NavigationMenuTrigger,
221
226
  NavigationMenuViewport: () => NavigationMenuViewport,
222
227
  NotificationCenter: () => NotificationCenter,
228
+ OpenCosmosIcon: () => OpenCosmosIcon,
223
229
  OpenGraphCard: () => OpenGraphCard,
224
230
  OrbBackground: () => OrbBackground,
225
231
  Overlays: () => overlays_exports,
@@ -376,6 +382,7 @@ __export(index_exports, {
376
382
  transitions: () => transitions,
377
383
  treeNodeVariants: () => treeNodeVariants,
378
384
  typographySystem: () => typographySystem,
385
+ useAppSidebar: () => useAppSidebar,
379
386
  useCustomizer: () => useCustomizer,
380
387
  useForm: () => useForm,
381
388
  useFormField: () => useFormField,
@@ -8610,6 +8617,34 @@ var GitHubIcon = ({
8610
8617
  );
8611
8618
  };
8612
8619
 
8620
+ // src/components/data-display/OpenCosmosIcon.tsx
8621
+ var import_jsx_runtime68 = require("react/jsx-runtime");
8622
+ var OpenCosmosIcon = ({
8623
+ ref,
8624
+ size = 20,
8625
+ className = ""
8626
+ }) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
8627
+ "svg",
8628
+ {
8629
+ ref,
8630
+ xmlns: "http://www.w3.org/2000/svg",
8631
+ width: size,
8632
+ height: size,
8633
+ viewBox: "0 0 24 24",
8634
+ fill: "none",
8635
+ stroke: "currentColor",
8636
+ strokeLinecap: "round",
8637
+ strokeLinejoin: "round",
8638
+ className,
8639
+ "aria-hidden": "true",
8640
+ children: [
8641
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("circle", { cx: "12", cy: "12", r: "9.5", strokeWidth: "1.5" }),
8642
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("ellipse", { cx: "12", cy: "12", rx: "9.5", ry: "3.2", strokeWidth: "1.25", transform: "rotate(-35 12 12)" }),
8643
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("circle", { cx: "12", cy: "12", r: "1.75", fill: "currentColor", stroke: "none" })
8644
+ ]
8645
+ }
8646
+ );
8647
+
8613
8648
  // src/components/data-display/Heading.tsx
8614
8649
  var import_react13 = __toESM(require("react"));
8615
8650
  var Heading = ({
@@ -8717,7 +8752,7 @@ var Text = ({
8717
8752
 
8718
8753
  // src/components/data-display/VariableWeightText.tsx
8719
8754
  var import_framer_motion2 = require("framer-motion");
8720
- var import_jsx_runtime68 = require("react/jsx-runtime");
8755
+ var import_jsx_runtime69 = require("react/jsx-runtime");
8721
8756
  var VariableWeightText = ({
8722
8757
  children,
8723
8758
  minWeight = 200,
@@ -8733,7 +8768,7 @@ var VariableWeightText = ({
8733
8768
  const effectiveIntensity = intensity ?? motionIntensity;
8734
8769
  const scaledDuration = effectiveIntensity > 0 ? duration * (5 / effectiveIntensity) : duration;
8735
8770
  if (effectiveIntensity === 0) {
8736
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
8771
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
8737
8772
  "div",
8738
8773
  {
8739
8774
  className,
@@ -8752,7 +8787,7 @@ var VariableWeightText = ({
8752
8787
  }
8753
8788
  );
8754
8789
  }
8755
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
8790
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
8756
8791
  import_framer_motion2.motion.div,
8757
8792
  {
8758
8793
  initial: {
@@ -8789,7 +8824,7 @@ var VariableWeightText = ({
8789
8824
  // src/components/data-display/Typewriter.tsx
8790
8825
  var import_framer_motion3 = require("framer-motion");
8791
8826
  var import_react15 = require("react");
8792
- var import_jsx_runtime69 = require("react/jsx-runtime");
8827
+ var import_jsx_runtime70 = require("react/jsx-runtime");
8793
8828
  function Typewriter({
8794
8829
  text,
8795
8830
  speed = 0.05,
@@ -8852,9 +8887,9 @@ function Typewriter({
8852
8887
  clearTimeout(timeoutId);
8853
8888
  };
8854
8889
  }, [text, speed, delay, loop, loopDelay, shouldAnimate, scale]);
8855
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Component, { className: cn("inline", className), children: [
8856
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: displayedText }),
8857
- showCursor && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
8890
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Component, { className: cn("inline", className), children: [
8891
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { children: displayedText }),
8892
+ showCursor && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
8858
8893
  import_framer_motion3.motion.span,
8859
8894
  {
8860
8895
  initial: { opacity: 0 },
@@ -8869,7 +8904,7 @@ function Typewriter({
8869
8904
 
8870
8905
  // src/components/data-display/StatCard.tsx
8871
8906
  var import_class_variance_authority12 = require("class-variance-authority");
8872
- var import_jsx_runtime70 = require("react/jsx-runtime");
8907
+ var import_jsx_runtime71 = require("react/jsx-runtime");
8873
8908
  var statCardVariants = (0, import_class_variance_authority12.cva)(
8874
8909
  "rounded-2xl border bg-surface text-foreground shadow-xs p-6",
8875
8910
  {
@@ -8918,7 +8953,7 @@ var statCardChangeVariants = (0, import_class_variance_authority12.cva)(
8918
8953
  }
8919
8954
  }
8920
8955
  );
8921
- var TrendUpIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
8956
+ var TrendUpIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
8922
8957
  "svg",
8923
8958
  {
8924
8959
  xmlns: "http://www.w3.org/2000/svg",
@@ -8932,12 +8967,12 @@ var TrendUpIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
8932
8967
  strokeLinejoin: "round",
8933
8968
  "aria-hidden": "true",
8934
8969
  children: [
8935
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }),
8936
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("polyline", { points: "16 7 22 7 22 13" })
8970
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }),
8971
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "16 7 22 7 22 13" })
8937
8972
  ]
8938
8973
  }
8939
8974
  );
8940
- var TrendDownIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
8975
+ var TrendDownIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
8941
8976
  "svg",
8942
8977
  {
8943
8978
  xmlns: "http://www.w3.org/2000/svg",
@@ -8951,12 +8986,12 @@ var TrendDownIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
8951
8986
  strokeLinejoin: "round",
8952
8987
  "aria-hidden": "true",
8953
8988
  children: [
8954
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }),
8955
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("polyline", { points: "16 17 22 17 22 11" })
8989
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }),
8990
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "16 17 22 17 22 11" })
8956
8991
  ]
8957
8992
  }
8958
8993
  );
8959
- var MinusIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
8994
+ var MinusIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
8960
8995
  "svg",
8961
8996
  {
8962
8997
  xmlns: "http://www.w3.org/2000/svg",
@@ -8969,7 +9004,7 @@ var MinusIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
8969
9004
  strokeLinecap: "round",
8970
9005
  strokeLinejoin: "round",
8971
9006
  "aria-hidden": "true",
8972
- children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("line", { x1: "5", y1: "12", x2: "19", y2: "12" })
9007
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("line", { x1: "5", y1: "12", x2: "19", y2: "12" })
8973
9008
  }
8974
9009
  );
8975
9010
  function StatCard({
@@ -8985,31 +9020,31 @@ function StatCard({
8985
9020
  ...props
8986
9021
  }) {
8987
9022
  const resolvedTrend = trend ?? (change !== void 0 ? change > 0 ? "up" : change < 0 ? "down" : "flat" : void 0);
8988
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
9023
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
8989
9024
  "div",
8990
9025
  {
8991
9026
  "data-slot": "stat-card",
8992
9027
  role: "article",
8993
9028
  className: cn(statCardVariants({ variant, size }), className),
8994
9029
  ...props,
8995
- children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("dl", { className: "space-y-1", children: [
8996
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex items-center justify-between", children: [
8997
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("dt", { className: "text-sm font-medium text-foreground-secondary", children: label }),
8998
- icon && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "text-foreground-secondary", "aria-hidden": "true", children: icon })
9030
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("dl", { className: "space-y-1", children: [
9031
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center justify-between", children: [
9032
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("dt", { className: "text-sm font-medium text-foreground-secondary", children: label }),
9033
+ icon && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "text-foreground-secondary", "aria-hidden": "true", children: icon })
8999
9034
  ] }),
9000
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("dd", { className: cn(statCardValueVariants({ size })), children: value }),
9001
- (change !== void 0 || description) && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("dd", { className: "flex items-center gap-2 pt-1", children: [
9002
- change !== void 0 && resolvedTrend && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: cn(statCardChangeVariants({ trend: resolvedTrend })), children: [
9003
- resolvedTrend === "up" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(TrendUpIcon, {}),
9004
- resolvedTrend === "down" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(TrendDownIcon, {}),
9005
- resolvedTrend === "flat" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(MinusIcon, {}),
9006
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { children: [
9035
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("dd", { className: cn(statCardValueVariants({ size })), children: value }),
9036
+ (change !== void 0 || description) && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("dd", { className: "flex items-center gap-2 pt-1", children: [
9037
+ change !== void 0 && resolvedTrend && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: cn(statCardChangeVariants({ trend: resolvedTrend })), children: [
9038
+ resolvedTrend === "up" && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(TrendUpIcon, {}),
9039
+ resolvedTrend === "down" && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(TrendDownIcon, {}),
9040
+ resolvedTrend === "flat" && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(MinusIcon, {}),
9041
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
9007
9042
  change > 0 ? "+" : "",
9008
9043
  change,
9009
9044
  "%"
9010
9045
  ] })
9011
9046
  ] }),
9012
- description && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "text-sm text-foreground-secondary", children: description })
9047
+ description && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "text-sm text-foreground-secondary", children: description })
9013
9048
  ] })
9014
9049
  ] })
9015
9050
  }
@@ -9019,7 +9054,7 @@ function StatCardGroup({
9019
9054
  className,
9020
9055
  ...props
9021
9056
  }) {
9022
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
9057
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9023
9058
  "div",
9024
9059
  {
9025
9060
  "data-slot": "stat-card-group",
@@ -9031,7 +9066,7 @@ function StatCardGroup({
9031
9066
 
9032
9067
  // src/components/data-display/Timeline.tsx
9033
9068
  var import_class_variance_authority13 = require("class-variance-authority");
9034
- var import_jsx_runtime71 = require("react/jsx-runtime");
9069
+ var import_jsx_runtime72 = require("react/jsx-runtime");
9035
9070
  var timelineVariants = (0, import_class_variance_authority13.cva)("relative", {
9036
9071
  variants: {
9037
9072
  orientation: {
@@ -9065,7 +9100,7 @@ var timelineItemStatusVariants = (0, import_class_variance_authority13.cva)(
9065
9100
  }
9066
9101
  }
9067
9102
  );
9068
- var CheckIcon3 = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9103
+ var CheckIcon3 = () => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
9069
9104
  "svg",
9070
9105
  {
9071
9106
  xmlns: "http://www.w3.org/2000/svg",
@@ -9078,10 +9113,10 @@ var CheckIcon3 = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9078
9113
  strokeLinecap: "round",
9079
9114
  strokeLinejoin: "round",
9080
9115
  "aria-hidden": "true",
9081
- children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "20 6 9 17 4 12" })
9116
+ children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("polyline", { points: "20 6 9 17 4 12" })
9082
9117
  }
9083
9118
  );
9084
- var XIcon4 = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
9119
+ var XIcon4 = () => /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
9085
9120
  "svg",
9086
9121
  {
9087
9122
  xmlns: "http://www.w3.org/2000/svg",
@@ -9095,12 +9130,12 @@ var XIcon4 = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
9095
9130
  strokeLinejoin: "round",
9096
9131
  "aria-hidden": "true",
9097
9132
  children: [
9098
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
9099
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
9133
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
9134
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
9100
9135
  ]
9101
9136
  }
9102
9137
  );
9103
- var CircleIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9138
+ var CircleIcon = () => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
9104
9139
  "svg",
9105
9140
  {
9106
9141
  xmlns: "http://www.w3.org/2000/svg",
@@ -9109,7 +9144,7 @@ var CircleIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9109
9144
  viewBox: "0 0 24 24",
9110
9145
  fill: "currentColor",
9111
9146
  "aria-hidden": "true",
9112
- children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("circle", { cx: "12", cy: "12", r: "6" })
9147
+ children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("circle", { cx: "12", cy: "12", r: "6" })
9113
9148
  }
9114
9149
  );
9115
9150
  function Timeline({
@@ -9118,7 +9153,7 @@ function Timeline({
9118
9153
  children,
9119
9154
  ...props
9120
9155
  }) {
9121
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9156
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
9122
9157
  "ol",
9123
9158
  {
9124
9159
  "data-slot": "timeline",
@@ -9142,16 +9177,16 @@ function TimelineItem({
9142
9177
  const defaultIcon = (() => {
9143
9178
  switch (status) {
9144
9179
  case "completed":
9145
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CheckIcon3, {});
9180
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CheckIcon3, {});
9146
9181
  case "error":
9147
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(XIcon4, {});
9182
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(XIcon4, {});
9148
9183
  case "active":
9149
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CircleIcon, {});
9184
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CircleIcon, {});
9150
9185
  default:
9151
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CircleIcon, {});
9186
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CircleIcon, {});
9152
9187
  }
9153
9188
  })();
9154
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
9189
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
9155
9190
  "li",
9156
9191
  {
9157
9192
  "data-slot": "timeline-item",
@@ -9159,8 +9194,8 @@ function TimelineItem({
9159
9194
  "aria-current": status === "active" ? "step" : void 0,
9160
9195
  ...props,
9161
9196
  children: [
9162
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex flex-col items-center", children: [
9163
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9197
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex flex-col items-center", children: [
9198
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
9164
9199
  "div",
9165
9200
  {
9166
9201
  "data-slot": "timeline-icon",
@@ -9169,7 +9204,7 @@ function TimelineItem({
9169
9204
  children: icon ?? defaultIcon
9170
9205
  }
9171
9206
  ),
9172
- !isLast && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
9207
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
9173
9208
  "div",
9174
9209
  {
9175
9210
  "data-slot": "timeline-connector",
@@ -9180,12 +9215,12 @@ function TimelineItem({
9180
9215
  }
9181
9216
  )
9182
9217
  ] }),
9183
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: cn("pb-6", isLast && "pb-0"), children: [
9184
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center gap-2", children: [
9185
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("p", { className: "font-medium text-foreground leading-none", children: title }),
9186
- timestamp && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("time", { className: "text-xs text-foreground-secondary", children: timestamp })
9218
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: cn("pb-6", isLast && "pb-0"), children: [
9219
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center gap-2", children: [
9220
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "font-medium text-foreground leading-none", children: title }),
9221
+ timestamp && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("time", { className: "text-xs text-foreground-secondary", children: timestamp })
9187
9222
  ] }),
9188
- description && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("p", { className: "mt-1 text-sm text-foreground-secondary", children: description })
9223
+ description && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "mt-1 text-sm text-foreground-secondary", children: description })
9189
9224
  ] })
9190
9225
  ]
9191
9226
  }
@@ -9195,7 +9230,7 @@ function TimelineItem({
9195
9230
  // src/components/data-display/TreeView.tsx
9196
9231
  var React18 = __toESM(require("react"));
9197
9232
  var import_class_variance_authority14 = require("class-variance-authority");
9198
- var import_jsx_runtime72 = require("react/jsx-runtime");
9233
+ var import_jsx_runtime73 = require("react/jsx-runtime");
9199
9234
  var treeNodeVariants = (0, import_class_variance_authority14.cva)(
9200
9235
  "flex items-center gap-2 py-1 px-2 rounded-md text-sm cursor-pointer select-none transition-colors",
9201
9236
  {
@@ -9211,7 +9246,7 @@ var treeNodeVariants = (0, import_class_variance_authority14.cva)(
9211
9246
  }
9212
9247
  }
9213
9248
  );
9214
- var ChevronIcon = ({ expanded }) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
9249
+ var ChevronIcon = ({ expanded }) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
9215
9250
  "svg",
9216
9251
  {
9217
9252
  xmlns: "http://www.w3.org/2000/svg",
@@ -9228,7 +9263,7 @@ var ChevronIcon = ({ expanded }) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx
9228
9263
  "shrink-0 transition-transform",
9229
9264
  expanded ? "rotate-90" : "rotate-0"
9230
9265
  ),
9231
- children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("polyline", { points: "9 18 15 12 9 6" })
9266
+ children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("polyline", { points: "9 18 15 12 9 6" })
9232
9267
  }
9233
9268
  );
9234
9269
  var TreeViewContext = React18.createContext({
@@ -9280,14 +9315,14 @@ function TreeView({
9280
9315
  },
9281
9316
  [controlledSelected, onSelectChange]
9282
9317
  );
9283
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(TreeViewContext.Provider, { value: { expanded, selected, toggleExpand, selectNode }, children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
9318
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TreeViewContext.Provider, { value: { expanded, selected, toggleExpand, selectNode }, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
9284
9319
  "div",
9285
9320
  {
9286
9321
  "data-slot": "tree-view",
9287
9322
  role: "tree",
9288
9323
  className: cn("space-y-0.5", className),
9289
9324
  ...props,
9290
- children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(TreeViewNodeComponent, { node, level: 1 }, node.id))
9325
+ children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TreeViewNodeComponent, { node, level: 1 }, node.id))
9291
9326
  }
9292
9327
  ) });
9293
9328
  }
@@ -9326,8 +9361,8 @@ function TreeViewNodeComponent({ node, level }) {
9326
9361
  break;
9327
9362
  }
9328
9363
  };
9329
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { "data-slot": "tree-view-node", role: "treeitem", "aria-expanded": hasChildren ? isExpanded : void 0, "aria-level": level, "aria-selected": isSelected, children: [
9330
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
9364
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { "data-slot": "tree-view-node", role: "treeitem", "aria-expanded": hasChildren ? isExpanded : void 0, "aria-level": level, "aria-selected": isSelected, children: [
9365
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
9331
9366
  "div",
9332
9367
  {
9333
9368
  className: cn(treeNodeVariants({ state })),
@@ -9336,18 +9371,18 @@ function TreeViewNodeComponent({ node, level }) {
9336
9371
  onKeyDown: handleKeyDown,
9337
9372
  tabIndex: node.disabled ? -1 : 0,
9338
9373
  children: [
9339
- hasChildren ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(ChevronIcon, { expanded: isExpanded }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "w-3.5 shrink-0", "aria-hidden": "true" }),
9340
- node.icon && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "shrink-0 text-foreground-secondary", "aria-hidden": "true", children: node.icon }),
9341
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "truncate", children: node.label })
9374
+ hasChildren ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ChevronIcon, { expanded: isExpanded }) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "w-3.5 shrink-0", "aria-hidden": "true" }),
9375
+ node.icon && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "shrink-0 text-foreground-secondary", "aria-hidden": "true", children: node.icon }),
9376
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "truncate", children: node.label })
9342
9377
  ]
9343
9378
  }
9344
9379
  ),
9345
- hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { role: "group", children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(TreeViewNodeComponent, { node: child, level: level + 1 }, child.id)) })
9380
+ hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { role: "group", children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TreeViewNodeComponent, { node: child, level: level + 1 }, child.id)) })
9346
9381
  ] });
9347
9382
  }
9348
9383
 
9349
9384
  // src/components/blocks/social/OpenGraphCard.tsx
9350
- var import_jsx_runtime73 = require("react/jsx-runtime");
9385
+ var import_jsx_runtime74 = require("react/jsx-runtime");
9351
9386
  function buildGradientCSS(config) {
9352
9387
  const { type, angle = 135, position = "circle at 50% 50%", colors, stops } = config;
9353
9388
  const colorStops = colors.map((color, index) => {
@@ -9415,7 +9450,7 @@ function OpenGraphCard({
9415
9450
  const activeStyle = backgroundStyles[variant] || backgroundStyles.sage;
9416
9451
  const firstColor = gradient?.colors[0] || primaryColor || "#0a0a0a";
9417
9452
  const isLight = variant === "secondary" || isLightColor(firstColor);
9418
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
9453
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
9419
9454
  "div",
9420
9455
  {
9421
9456
  className: cn(className),
@@ -9436,7 +9471,7 @@ function OpenGraphCard({
9436
9471
  },
9437
9472
  ...props,
9438
9473
  children: [
9439
- !isLight && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
9474
+ !isLight && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
9440
9475
  "div",
9441
9476
  {
9442
9477
  style: {
@@ -9452,7 +9487,7 @@ function OpenGraphCard({
9452
9487
  }
9453
9488
  }
9454
9489
  ),
9455
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
9490
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
9456
9491
  "div",
9457
9492
  {
9458
9493
  style: {
@@ -9466,7 +9501,7 @@ function OpenGraphCard({
9466
9501
  textAlign: "center"
9467
9502
  },
9468
9503
  children: [
9469
- icon !== null && (icon !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
9504
+ icon !== null && (icon !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
9470
9505
  "div",
9471
9506
  {
9472
9507
  style: {
@@ -9477,7 +9512,7 @@ function OpenGraphCard({
9477
9512
  },
9478
9513
  children: icon
9479
9514
  }
9480
- ) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
9515
+ ) : /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
9481
9516
  "div",
9482
9517
  {
9483
9518
  style: {
@@ -9491,10 +9526,10 @@ function OpenGraphCard({
9491
9526
  boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
9492
9527
  marginBottom: "16px"
9493
9528
  },
9494
- children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { style: { width: "24px", height: "24px", borderRadius: "50%", background: isLight ? "white" : activeStyle.accentColor } })
9529
+ children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { style: { width: "24px", height: "24px", borderRadius: "50%", background: isLight ? "white" : activeStyle.accentColor } })
9495
9530
  }
9496
9531
  )),
9497
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
9532
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
9498
9533
  "h1",
9499
9534
  {
9500
9535
  style: {
@@ -9508,7 +9543,7 @@ function OpenGraphCard({
9508
9543
  children: title
9509
9544
  }
9510
9545
  ),
9511
- description && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
9546
+ description && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
9512
9547
  "p",
9513
9548
  {
9514
9549
  style: {
@@ -9534,13 +9569,13 @@ function OpenGraphCard({
9534
9569
  // src/components/layout/Accordion.tsx
9535
9570
  var AccordionPrimitive = __toESM(require("@radix-ui/react-accordion"));
9536
9571
  var import_lucide_react16 = require("lucide-react");
9537
- var import_jsx_runtime74 = require("react/jsx-runtime");
9572
+ var import_jsx_runtime75 = require("react/jsx-runtime");
9538
9573
  var Accordion = AccordionPrimitive.Root;
9539
9574
  var AccordionItem = ({
9540
9575
  ref,
9541
9576
  className,
9542
9577
  ...props
9543
- }) => /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
9578
+ }) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
9544
9579
  AccordionPrimitive.Item,
9545
9580
  {
9546
9581
  ref,
@@ -9553,7 +9588,7 @@ var AccordionTrigger = ({
9553
9588
  className,
9554
9589
  children,
9555
9590
  ...props
9556
- }) => /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
9591
+ }) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
9557
9592
  AccordionPrimitive.Trigger,
9558
9593
  {
9559
9594
  ref,
@@ -9564,7 +9599,7 @@ var AccordionTrigger = ({
9564
9599
  ...props,
9565
9600
  children: [
9566
9601
  children,
9567
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_lucide_react16.ChevronDown, { className: "pointer-events-none h-4 w-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200" })
9602
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_lucide_react16.ChevronDown, { className: "pointer-events-none h-4 w-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200" })
9568
9603
  ]
9569
9604
  }
9570
9605
  ) });
@@ -9573,13 +9608,13 @@ var AccordionContent = ({
9573
9608
  className,
9574
9609
  children,
9575
9610
  ...props
9576
- }) => /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
9611
+ }) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
9577
9612
  AccordionPrimitive.Content,
9578
9613
  {
9579
9614
  ref,
9580
9615
  className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
9581
9616
  ...props,
9582
- children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: cn("pb-4 pt-0", className), children })
9617
+ children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: cn("pb-4 pt-0", className), children })
9583
9618
  }
9584
9619
  );
9585
9620
 
@@ -9591,7 +9626,7 @@ var AspectRatio = AspectRatioPrimitive.Root;
9591
9626
  var React19 = __toESM(require("react"));
9592
9627
  var import_embla_carousel_react = __toESM(require("embla-carousel-react"));
9593
9628
  var import_lucide_react17 = require("lucide-react");
9594
- var import_jsx_runtime75 = require("react/jsx-runtime");
9629
+ var import_jsx_runtime76 = require("react/jsx-runtime");
9595
9630
  var CarouselContext = React19.createContext(null);
9596
9631
  function useCarousel() {
9597
9632
  const context = React19.useContext(CarouselContext);
@@ -9661,7 +9696,7 @@ var Carousel = ({
9661
9696
  api?.off("select", onSelect);
9662
9697
  };
9663
9698
  }, [api, onSelect]);
9664
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
9699
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
9665
9700
  CarouselContext.Provider,
9666
9701
  {
9667
9702
  value: {
@@ -9674,7 +9709,7 @@ var Carousel = ({
9674
9709
  canScrollPrev,
9675
9710
  canScrollNext
9676
9711
  },
9677
- children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
9712
+ children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
9678
9713
  "div",
9679
9714
  {
9680
9715
  ref,
@@ -9695,7 +9730,7 @@ var CarouselContent = ({
9695
9730
  ...props
9696
9731
  }) => {
9697
9732
  const { carouselRef, orientation } = useCarousel();
9698
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
9733
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
9699
9734
  "div",
9700
9735
  {
9701
9736
  ref,
@@ -9714,7 +9749,7 @@ var CarouselItem = ({
9714
9749
  ...props
9715
9750
  }) => {
9716
9751
  const { orientation } = useCarousel();
9717
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
9752
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
9718
9753
  "div",
9719
9754
  {
9720
9755
  ref,
@@ -9737,7 +9772,7 @@ var CarouselPrevious = ({
9737
9772
  ...props
9738
9773
  }) => {
9739
9774
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
9740
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
9775
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
9741
9776
  Button,
9742
9777
  {
9743
9778
  ref,
@@ -9752,8 +9787,8 @@ var CarouselPrevious = ({
9752
9787
  onClick: scrollPrev,
9753
9788
  ...props,
9754
9789
  children: [
9755
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_lucide_react17.ArrowLeft, { className: "h-4 w-4" }),
9756
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "sr-only", children: "Previous slide" })
9790
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react17.ArrowLeft, { className: "h-4 w-4" }),
9791
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "sr-only", children: "Previous slide" })
9757
9792
  ]
9758
9793
  }
9759
9794
  );
@@ -9766,7 +9801,7 @@ var CarouselNext = ({
9766
9801
  ...props
9767
9802
  }) => {
9768
9803
  const { orientation, scrollNext, canScrollNext } = useCarousel();
9769
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
9804
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
9770
9805
  Button,
9771
9806
  {
9772
9807
  ref,
@@ -9781,8 +9816,8 @@ var CarouselNext = ({
9781
9816
  onClick: scrollNext,
9782
9817
  ...props,
9783
9818
  children: [
9784
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_lucide_react17.ArrowRight, { className: "h-4 w-4" }),
9785
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "sr-only", children: "Next slide" })
9819
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react17.ArrowRight, { className: "h-4 w-4" }),
9820
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "sr-only", children: "Next slide" })
9786
9821
  ]
9787
9822
  }
9788
9823
  );
@@ -9790,7 +9825,7 @@ var CarouselNext = ({
9790
9825
 
9791
9826
  // src/components/layout/Collapsible.tsx
9792
9827
  var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"));
9793
- var import_jsx_runtime76 = require("react/jsx-runtime");
9828
+ var import_jsx_runtime77 = require("react/jsx-runtime");
9794
9829
  var Collapsible = CollapsiblePrimitive.Root;
9795
9830
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
9796
9831
  var CollapsibleContent2 = ({
@@ -9798,7 +9833,7 @@ var CollapsibleContent2 = ({
9798
9833
  className,
9799
9834
  children,
9800
9835
  ...props
9801
- }) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
9836
+ }) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
9802
9837
  CollapsiblePrimitive.CollapsibleContent,
9803
9838
  {
9804
9839
  ref,
@@ -9843,12 +9878,12 @@ var Container = ({
9843
9878
  // src/components/layout/CustomizerPanel.tsx
9844
9879
  var import_react17 = __toESM(require("react"));
9845
9880
  var import_lucide_react18 = require("lucide-react");
9846
- var import_jsx_runtime77 = require("react/jsx-runtime");
9881
+ var import_jsx_runtime78 = require("react/jsx-runtime");
9847
9882
  var allThemeOptions = [
9848
- { id: "studio", label: "Studio", icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.Building2, { className: "w-4 h-4" }) },
9849
- { id: "terra", label: "Terra", icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.Leaf, { className: "w-4 h-4" }) },
9850
- { id: "volt", label: "Volt", icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.Zap, { className: "w-4 h-4" }) },
9851
- { id: "speedboat", label: "Speedboat", icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.Rocket, { className: "w-4 h-4" }) }
9883
+ { id: "studio", label: "Studio", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Building2, { className: "w-4 h-4" }) },
9884
+ { id: "terra", label: "Terra", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Leaf, { className: "w-4 h-4" }) },
9885
+ { id: "volt", label: "Volt", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Zap, { className: "w-4 h-4" }) },
9886
+ { id: "speedboat", label: "Speedboat", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Rocket, { className: "w-4 h-4" }) }
9852
9887
  ];
9853
9888
  var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) => {
9854
9889
  const [mounted, setMounted] = import_react17.default.useState(false);
@@ -9927,7 +9962,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9927
9962
  }, [isOpen]);
9928
9963
  if (!mounted) return null;
9929
9964
  if (!isOpen) {
9930
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
9965
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
9931
9966
  "button",
9932
9967
  {
9933
9968
  onClick: () => setIsOpen(true),
@@ -9935,13 +9970,13 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9935
9970
  className: "fixed bottom-4 right-4 bg-background text-foreground px-4 py-2 rounded-full shadow-lg border border-[var(--color-glass-border)] font-medium hover:opacity-80 transition-all z-50 flex items-center gap-2",
9936
9971
  style: { backdropFilter: "var(--effect-blur-sm)" },
9937
9972
  children: [
9938
- mode === "lightweight" ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.SunMoon, { className: "w-5 h-5" }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.SlidersHorizontal, { className: "w-5 h-5" }),
9973
+ mode === "lightweight" ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.SunMoon, { className: "w-5 h-5" }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.SlidersHorizontal, { className: "w-5 h-5" }),
9939
9974
  mode === "lightweight" ? "Theme" : "Customizer"
9940
9975
  ]
9941
9976
  }
9942
9977
  );
9943
9978
  }
9944
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
9979
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
9945
9980
  "div",
9946
9981
  {
9947
9982
  ref: panelRef,
@@ -9960,25 +9995,25 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9960
9995
  backgroundColor: "var(--color-glass)"
9961
9996
  },
9962
9997
  children: [
9963
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex justify-between items-center mb-6", children: [
9964
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("h3", { className: "font-bold text-lg", children: mode === "lightweight" ? "Theme Settings" : "Experience Customizer" }),
9965
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
9998
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex justify-between items-center mb-6", children: [
9999
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("h3", { className: "font-bold text-lg", children: mode === "lightweight" ? "Theme Settings" : "Experience Customizer" }),
10000
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
9966
10001
  "button",
9967
10002
  {
9968
10003
  onClick: () => setIsOpen(false),
9969
10004
  "aria-label": "Close customizer",
9970
10005
  className: "text-foreground opacity-60 hover:opacity-100 transition-opacity p-1",
9971
- children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.X, { className: "w-5 h-5", "aria-hidden": "true" })
10006
+ children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.X, { className: "w-5 h-5", "aria-hidden": "true" })
9972
10007
  }
9973
10008
  )
9974
10009
  ] }),
9975
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "space-y-6", children: [
9976
- mode === "full" && showMotionIntensity && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
9977
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex justify-between mb-2", children: [
9978
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "text-sm font-medium opacity-80", children: "Motion Intensity" }),
9979
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "text-sm opacity-60", children: motion6 })
10010
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "space-y-6", children: [
10011
+ mode === "full" && showMotionIntensity && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10012
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex justify-between mb-2", children: [
10013
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-sm font-medium opacity-80", children: "Motion Intensity" }),
10014
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "text-sm opacity-60", children: motion6 })
9980
10015
  ] }),
9981
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10016
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
9982
10017
  "input",
9983
10018
  {
9984
10019
  type: "range",
@@ -9994,9 +10029,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9994
10029
  }
9995
10030
  )
9996
10031
  ] }),
9997
- mode === "full" && showThemeSelector && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
9998
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Theme" }),
9999
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: `grid gap-2 mb-3 ${visibleThemes.length <= 3 ? "grid-cols-3" : "grid-cols-4"}`, children: visibleThemes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
10032
+ mode === "full" && showThemeSelector && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10033
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Theme" }),
10034
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: `grid gap-2 mb-3 ${visibleThemes.length <= 3 ? "grid-cols-3" : "grid-cols-4"}`, children: visibleThemes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
10000
10035
  "button",
10001
10036
  {
10002
10037
  onClick: () => setTheme(t.id),
@@ -10011,31 +10046,31 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10011
10046
  borderColor: "var(--color-primary)"
10012
10047
  } : {},
10013
10048
  children: [
10014
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "text-base", children: t.icon }),
10015
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { children: t.label })
10049
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "text-base", children: t.icon }),
10050
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: t.label })
10016
10051
  ]
10017
10052
  },
10018
10053
  t.id
10019
10054
  )) }),
10020
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "text-xs opacity-60 space-y-1", children: [
10021
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
10022
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "font-heading", children: "Heading:" }),
10055
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "text-xs opacity-60 space-y-1", children: [
10056
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10057
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "font-heading", children: "Heading:" }),
10023
10058
  " ",
10024
10059
  theme === "studio" ? "Outfit" : theme === "terra" ? "Lora" : theme === "speedboat" ? "Montserrat" : "Space Grotesk"
10025
10060
  ] }),
10026
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
10027
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "font-body", children: "Body:" }),
10061
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10062
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "font-body", children: "Body:" }),
10028
10063
  " ",
10029
10064
  theme === "studio" ? "Manrope" : theme === "terra" ? "Instrument Sans" : theme === "speedboat" ? "Roboto" : "Space Grotesk"
10030
10065
  ] })
10031
10066
  ] })
10032
10067
  ] }),
10033
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
10034
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Mode" }),
10035
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "grid grid-cols-2 gap-2", children: [
10036
- { id: "light", label: "Light", icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.Sun, { className: "w-4 h-4" }) },
10037
- { id: "dark", label: "Dark", icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.Moon, { className: "w-4 h-4" }) }
10038
- ].map((m) => /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
10068
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10069
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Mode" }),
10070
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "grid grid-cols-2 gap-2", children: [
10071
+ { id: "light", label: "Light", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Sun, { className: "w-4 h-4" }) },
10072
+ { id: "dark", label: "Dark", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Moon, { className: "w-4 h-4" }) }
10073
+ ].map((m) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
10039
10074
  "button",
10040
10075
  {
10041
10076
  onClick: () => setMode(m.id),
@@ -10050,21 +10085,21 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10050
10085
  borderColor: "var(--color-primary)"
10051
10086
  } : {},
10052
10087
  children: [
10053
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { children: m.icon }),
10054
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { children: m.label })
10088
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: m.icon }),
10089
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: m.label })
10055
10090
  ]
10056
10091
  },
10057
10092
  m.id
10058
10093
  )) })
10059
10094
  ] }),
10060
- mode === "full" && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "pt-4 border-t border-[var(--color-border)]", children: [
10061
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
10062
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex items-center gap-2", children: [
10063
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react18.Palette, { className: "w-4 h-4 opacity-80" }),
10064
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "text-sm font-medium opacity-80", children: "Color Customization" })
10095
+ mode === "full" && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "pt-4 border-t border-[var(--color-border)]", children: [
10096
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
10097
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex items-center gap-2", children: [
10098
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Palette, { className: "w-4 h-4 opacity-80" }),
10099
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-sm font-medium opacity-80", children: "Color Customization" })
10065
10100
  ] }),
10066
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex gap-1 bg-[var(--color-surface)] rounded-md p-0.5", children: [
10067
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10101
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex gap-1 bg-[var(--color-surface)] rounded-md p-0.5", children: [
10102
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10068
10103
  "button",
10069
10104
  {
10070
10105
  onClick: () => setCustomizationMode("simple"),
@@ -10076,7 +10111,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10076
10111
  children: "Simple"
10077
10112
  }
10078
10113
  ),
10079
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10114
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10080
10115
  "button",
10081
10116
  {
10082
10117
  onClick: () => setCustomizationMode("advanced"),
@@ -10090,10 +10125,10 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10090
10125
  )
10091
10126
  ] })
10092
10127
  ] }),
10093
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "space-y-4", children: [
10094
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
10095
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Primary Color" }),
10096
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10128
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "space-y-4", children: [
10129
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10130
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Primary Color" }),
10131
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10097
10132
  ColorPicker,
10098
10133
  {
10099
10134
  value: tempPrimaryColor,
@@ -10101,9 +10136,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10101
10136
  }
10102
10137
  )
10103
10138
  ] }),
10104
- customizationMode === "advanced" && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
10105
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Secondary Color" }),
10106
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10139
+ customizationMode === "advanced" && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10140
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Secondary Color" }),
10141
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10107
10142
  ColorPicker,
10108
10143
  {
10109
10144
  value: tempSecondaryColor,
@@ -10111,9 +10146,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10111
10146
  }
10112
10147
  )
10113
10148
  ] }),
10114
- customizationMode === "advanced" && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { children: [
10115
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Accent Color" }),
10116
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10149
+ customizationMode === "advanced" && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
10150
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Accent Color" }),
10151
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10117
10152
  ColorPicker,
10118
10153
  {
10119
10154
  value: tempAccentColor,
@@ -10122,8 +10157,8 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10122
10157
  )
10123
10158
  ] })
10124
10159
  ] }),
10125
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex gap-2 mt-4", children: [
10126
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10160
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex gap-2 mt-4", children: [
10161
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10127
10162
  Button,
10128
10163
  {
10129
10164
  onClick: handleApplyColor,
@@ -10133,7 +10168,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10133
10168
  children: "Apply Colors"
10134
10169
  }
10135
10170
  ),
10136
- currentPalette && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
10171
+ currentPalette && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10137
10172
  Button,
10138
10173
  {
10139
10174
  onClick: handleResetColors,
@@ -10143,7 +10178,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10143
10178
  }
10144
10179
  )
10145
10180
  ] }),
10146
- currentPalette && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("p", { className: "text-xs opacity-60 mt-2", children: [
10181
+ currentPalette && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("p", { className: "text-xs opacity-60 mt-2", children: [
10147
10182
  "Custom colors active for ",
10148
10183
  theme,
10149
10184
  " ",
@@ -10160,7 +10195,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
10160
10195
  // src/components/layout/DatePicker.tsx
10161
10196
  var import_date_fns = require("date-fns");
10162
10197
  var import_lucide_react19 = require("lucide-react");
10163
- var import_jsx_runtime78 = require("react/jsx-runtime");
10198
+ var import_jsx_runtime79 = require("react/jsx-runtime");
10164
10199
  function DatePicker({
10165
10200
  date,
10166
10201
  onDateChange,
@@ -10168,8 +10203,8 @@ function DatePicker({
10168
10203
  className,
10169
10204
  disabled = false
10170
10205
  }) {
10171
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(Popover, { children: [
10172
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
10206
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(Popover, { children: [
10207
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
10173
10208
  Button,
10174
10209
  {
10175
10210
  variant: "outline",
@@ -10180,12 +10215,12 @@ function DatePicker({
10180
10215
  ),
10181
10216
  disabled,
10182
10217
  children: [
10183
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react19.Calendar, { className: "mr-2 h-4 w-4" }),
10184
- date ? (0, import_date_fns.format)(date, "PPP") : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: placeholder })
10218
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react19.Calendar, { className: "mr-2 h-4 w-4" }),
10219
+ date ? (0, import_date_fns.format)(date, "PPP") : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { children: placeholder })
10185
10220
  ]
10186
10221
  }
10187
10222
  ) }),
10188
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PopoverContent, { className: "w-auto p-0", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
10223
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PopoverContent, { className: "w-auto p-0", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
10189
10224
  Calendar,
10190
10225
  {
10191
10226
  mode: "single",
@@ -10198,7 +10233,7 @@ function DatePicker({
10198
10233
  }
10199
10234
 
10200
10235
  // src/components/layout/Footer/Footer.tsx
10201
- var import_jsx_runtime79 = require("react/jsx-runtime");
10236
+ var import_jsx_runtime80 = require("react/jsx-runtime");
10202
10237
  var Footer = ({
10203
10238
  ref,
10204
10239
  logo,
@@ -10208,7 +10243,7 @@ var Footer = ({
10208
10243
  className = ""
10209
10244
  }) => {
10210
10245
  const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
10211
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
10246
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
10212
10247
  "footer",
10213
10248
  {
10214
10249
  ref,
@@ -10218,11 +10253,11 @@ var Footer = ({
10218
10253
  ${className}
10219
10254
  `,
10220
10255
  children: [
10221
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 sm:py-20 lg:py-24", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-12 lg:gap-8", children: [
10222
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "lg:col-span-4", children: logo && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "mb-6 text-2xl font-bold text-[var(--color-text-primary)]", children: logo }) }),
10223
- sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "lg:col-span-2", children: [
10224
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: section.title }),
10225
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("ul", { className: "space-y-3", children: section.links.map((link) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
10256
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 sm:py-20 lg:py-24", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-12 lg:gap-8", children: [
10257
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "lg:col-span-4", children: logo && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "mb-6 text-2xl font-bold text-[var(--color-text-primary)]", children: logo }) }),
10258
+ sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "lg:col-span-2", children: [
10259
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: section.title }),
10260
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("ul", { className: "space-y-3", children: section.links.map((link) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
10226
10261
  "a",
10227
10262
  {
10228
10263
  href: link.href,
@@ -10233,10 +10268,10 @@ var Footer = ({
10233
10268
  }
10234
10269
  ) }, link.label)) })
10235
10270
  ] }, section.title)),
10236
- socialLinks && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "lg:col-span-2", children: [
10237
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: "Connect" }),
10238
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("ul", { className: "space-y-3", children: [
10239
- socialLinks.github && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
10271
+ socialLinks && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "lg:col-span-2", children: [
10272
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: "Connect" }),
10273
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("ul", { className: "space-y-3", children: [
10274
+ socialLinks.github && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
10240
10275
  "a",
10241
10276
  {
10242
10277
  href: socialLinks.github,
@@ -10244,12 +10279,12 @@ var Footer = ({
10244
10279
  rel: "noopener noreferrer",
10245
10280
  className: "text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] transition-colors duration-200 text-sm flex items-center gap-2",
10246
10281
  children: [
10247
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GitHubIcon, { size: 16 }),
10282
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(GitHubIcon, { size: 16 }),
10248
10283
  "GitHub"
10249
10284
  ]
10250
10285
  }
10251
10286
  ) }),
10252
- socialLinks.linkedin && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
10287
+ socialLinks.linkedin && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
10253
10288
  "a",
10254
10289
  {
10255
10290
  href: socialLinks.linkedin,
@@ -10259,7 +10294,7 @@ var Footer = ({
10259
10294
  children: "LinkedIn"
10260
10295
  }
10261
10296
  ) }),
10262
- socialLinks.email && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
10297
+ socialLinks.email && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
10263
10298
  "a",
10264
10299
  {
10265
10300
  href: `mailto:${socialLinks.email}`,
@@ -10270,14 +10305,14 @@ var Footer = ({
10270
10305
  ] })
10271
10306
  ] })
10272
10307
  ] }) }),
10273
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "border-t border-[var(--color-border)]", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { className: "text-sm text-[var(--color-text-secondary)] text-center", children: copyright || `\xA9 ${currentYear} All rights reserved.` }) }) })
10308
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "border-t border-[var(--color-border)]", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "text-sm text-[var(--color-text-secondary)] text-center", children: copyright || `\xA9 ${currentYear} All rights reserved.` }) }) })
10274
10309
  ]
10275
10310
  }
10276
10311
  );
10277
10312
  };
10278
10313
 
10279
10314
  // src/components/layout/Grid.tsx
10280
- var import_jsx_runtime80 = require("react/jsx-runtime");
10315
+ var import_jsx_runtime81 = require("react/jsx-runtime");
10281
10316
  var mapResponsive = (prop, prefix, mapFunc) => {
10282
10317
  if (typeof prop === "number") {
10283
10318
  return mapFunc(prop);
@@ -10319,7 +10354,7 @@ var Grid = ({
10319
10354
  const getGapClass = (n) => `gap-${n}`;
10320
10355
  const colClasses = mapResponsive(columns, "grid-cols", getColClass);
10321
10356
  const gapClasses = mapResponsive(gap, "gap", getGapClass);
10322
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
10357
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10323
10358
  Component,
10324
10359
  {
10325
10360
  ref,
@@ -10374,13 +10409,13 @@ var GridItem = ({
10374
10409
  colStart ? mapResponsive(colStart, "col-start", getColStartClass) : "",
10375
10410
  className
10376
10411
  ].filter(Boolean).join(" ");
10377
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Component, { ref, className: classes, ...props, children });
10412
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Component, { ref, className: classes, ...props, children });
10378
10413
  };
10379
10414
 
10380
10415
  // src/components/layout/Header/Header.tsx
10381
10416
  var import_react18 = require("react");
10382
10417
  var import_lucide_react20 = require("lucide-react");
10383
- var import_jsx_runtime81 = require("react/jsx-runtime");
10418
+ var import_jsx_runtime82 = require("react/jsx-runtime");
10384
10419
  var Header2 = ({
10385
10420
  ref,
10386
10421
  logo,
@@ -10435,16 +10470,16 @@ var Header2 = ({
10435
10470
  return "absolute left-1/2 -translate-x-1/2";
10436
10471
  }
10437
10472
  };
10438
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
10439
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10473
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
10474
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10440
10475
  "header",
10441
10476
  {
10442
10477
  ref,
10443
10478
  className: `${baseStyles} ${positionStyles} ${transitionStyles} ${backgroundStyles} ${className}`,
10444
10479
  style: { transitionDuration },
10445
- children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: `${maxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "flex items-center justify-between h-16 lg:h-20 relative", children: [
10446
- logo && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "flex-shrink-0 z-10", children: logo }),
10447
- navLinks.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10480
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `${maxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "flex items-center justify-between h-16 lg:h-20 relative", children: [
10481
+ logo && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "flex-shrink-0 z-10", children: logo }),
10482
+ navLinks.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10448
10483
  "nav",
10449
10484
  {
10450
10485
  className: `hidden lg:flex items-center gap-8 ${getNavClasses()}`,
@@ -10453,14 +10488,14 @@ var Header2 = ({
10453
10488
  const hasDropdown = link.children && link.children.length > 0;
10454
10489
  const isOpen = openDropdown === link.label;
10455
10490
  if (hasDropdown) {
10456
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
10491
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
10457
10492
  "div",
10458
10493
  {
10459
10494
  className: "relative group",
10460
10495
  onMouseEnter: () => setOpenDropdown(link.label),
10461
10496
  onMouseLeave: () => setOpenDropdown(null),
10462
10497
  children: [
10463
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
10498
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
10464
10499
  "button",
10465
10500
  {
10466
10501
  className: `
@@ -10481,18 +10516,18 @@ var Header2 = ({
10481
10516
  "aria-haspopup": "true",
10482
10517
  children: [
10483
10518
  link.label,
10484
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react20.ChevronDown, { className: `w-3 h-3 ${shouldAnimate ? "transition-transform" : ""} ${isOpen ? "rotate-180" : ""}`, style: { transitionDuration } })
10519
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react20.ChevronDown, { className: `w-3 h-3 ${shouldAnimate ? "transition-transform" : ""} ${isOpen ? "rotate-180" : ""}`, style: { transitionDuration } })
10485
10520
  ]
10486
10521
  }
10487
10522
  ),
10488
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "absolute top-full left-1/2 -translate-x-1/2 w-[200px] h-2" }),
10489
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: `
10523
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "absolute top-full left-1/2 -translate-x-1/2 w-[200px] h-2" }),
10524
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `
10490
10525
  absolute top-full left-1/2 -translate-x-1/2 mt-2 min-w-[200px] z-50
10491
10526
  bg-[var(--color-surface)] border border-[var(--color-border)]
10492
10527
  rounded-lg shadow-xl py-1 p-1
10493
10528
  backdrop-blur-3xl bg-[var(--color-surface)]/95
10494
10529
  ${shouldAnimate ? "animate-fade-in" : ""}
10495
- `, style: { animationDuration: `${0.2 * motionFactor}s` }, children: link.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10530
+ `, style: { animationDuration: `${0.2 * motionFactor}s` }, children: link.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10496
10531
  NavLink,
10497
10532
  {
10498
10533
  href: child.href,
@@ -10508,7 +10543,7 @@ var Header2 = ({
10508
10543
  link.label
10509
10544
  );
10510
10545
  }
10511
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10546
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10512
10547
  NavLink,
10513
10548
  {
10514
10549
  href: link.href,
@@ -10523,8 +10558,8 @@ var Header2 = ({
10523
10558
  })
10524
10559
  }
10525
10560
  ),
10526
- actions && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "hidden lg:flex items-center gap-4 z-10", children: actions }),
10527
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10561
+ actions && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "hidden lg:flex items-center gap-4 z-10", children: actions }),
10562
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10528
10563
  "button",
10529
10564
  {
10530
10565
  onClick: () => setIsMenuOpen(!isMenuOpen),
@@ -10543,13 +10578,13 @@ var Header2 = ({
10543
10578
  style: { transitionDuration },
10544
10579
  "aria-label": isMenuOpen ? "Close menu" : "Open menu",
10545
10580
  "aria-expanded": isMenuOpen,
10546
- children: isMenuOpen ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react20.X, { className: "w-6 h-6" }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react20.Menu, { className: "w-6 h-6" })
10581
+ children: isMenuOpen ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react20.X, { className: "w-6 h-6" }) : /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react20.Menu, { className: "w-6 h-6" })
10547
10582
  }
10548
10583
  )
10549
10584
  ] }) })
10550
10585
  }
10551
10586
  ),
10552
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10587
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10553
10588
  "div",
10554
10589
  {
10555
10590
  className: `
@@ -10559,13 +10594,13 @@ var Header2 = ({
10559
10594
  `,
10560
10595
  style: { transitionDuration },
10561
10596
  "aria-hidden": !isMenuOpen,
10562
- children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "absolute inset-0 bg-[var(--color-background)]", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "flex flex-col items-center justify-center h-full gap-8 px-4", children: [
10597
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "absolute inset-0 bg-[var(--color-background)]", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "flex flex-col items-center justify-center h-full gap-8 px-4", children: [
10563
10598
  navLinks.map((link, index) => {
10564
10599
  const hasDropdown = link.children && link.children.length > 0;
10565
10600
  const isExpanded = expandedMobileSection === link.label;
10566
10601
  if (hasDropdown) {
10567
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "w-full max-w-xs", children: [
10568
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10602
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "w-full max-w-xs", children: [
10603
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10569
10604
  "button",
10570
10605
  {
10571
10606
  onClick: () => setExpandedMobileSection(isExpanded ? null : link.label),
@@ -10589,7 +10624,7 @@ var Header2 = ({
10589
10624
  children: link.label
10590
10625
  }
10591
10626
  ),
10592
- isExpanded && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "flex flex-col gap-3 mt-4", children: link.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10627
+ isExpanded && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "flex flex-col gap-3 mt-4", children: link.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10593
10628
  "a",
10594
10629
  {
10595
10630
  href: child.href,
@@ -10612,7 +10647,7 @@ var Header2 = ({
10612
10647
  )) })
10613
10648
  ] }, link.label);
10614
10649
  }
10615
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10650
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10616
10651
  "a",
10617
10652
  {
10618
10653
  href: link.href,
@@ -10639,7 +10674,7 @@ var Header2 = ({
10639
10674
  link.label
10640
10675
  );
10641
10676
  }),
10642
- actions && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
10677
+ actions && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10643
10678
  "div",
10644
10679
  {
10645
10680
  className: "flex flex-col gap-4 mt-8 w-full max-w-xs",
@@ -10653,7 +10688,7 @@ var Header2 = ({
10653
10688
  ] }) })
10654
10689
  }
10655
10690
  ),
10656
- shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("style", { children: `
10691
+ shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("style", { children: `
10657
10692
  @keyframes fadeInUp {
10658
10693
  from {
10659
10694
  opacity: 0;
@@ -10669,7 +10704,7 @@ var Header2 = ({
10669
10704
  };
10670
10705
 
10671
10706
  // src/components/layout/PageLayout.tsx
10672
- var import_jsx_runtime82 = require("react/jsx-runtime");
10707
+ var import_jsx_runtime83 = require("react/jsx-runtime");
10673
10708
  function PageLayout({
10674
10709
  header,
10675
10710
  stickyHeader = false,
@@ -10692,9 +10727,9 @@ function PageLayout({
10692
10727
  const titleAreaBottomSpacing = swissGridSpacing && showBreadcrumbsBelowTitle ? "pb-3" : swissGridSpacing ? "pb-12 lg:pb-16" : "pb-8";
10693
10728
  const titleBottomMargin = swissGridSpacing ? "mb-4" : "mb-3";
10694
10729
  const breadcrumbsAreaSpacing = swissGridSpacing ? "pt-4 pb-8" : "pt-3 pb-6";
10695
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "min-h-screen flex flex-col w-full min-w-0", children: [
10730
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "min-h-screen flex flex-col w-full min-w-0", children: [
10696
10731
  header,
10697
- breadcrumbs && showBreadcrumbsAtTop && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
10732
+ breadcrumbs && showBreadcrumbsAtTop && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
10698
10733
  "div",
10699
10734
  {
10700
10735
  className: `
@@ -10705,23 +10740,23 @@ function PageLayout({
10705
10740
  ${stickyHeaderSpacing}
10706
10741
  `,
10707
10742
  style: { zIndex: 45 },
10708
- children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-3`, children: breadcrumbs })
10743
+ children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-3`, children: breadcrumbs })
10709
10744
  }
10710
10745
  ),
10711
- (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `${titleAreaTopSpacing} ${titleAreaBottomSpacing} ${!showBreadcrumbsAtTop ? stickyHeaderSpacing : ""} bg-[var(--color-background)]`, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: [
10712
- title && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: titleBottomMargin, children: title }),
10713
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { children: subtitle })
10746
+ (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${titleAreaTopSpacing} ${titleAreaBottomSpacing} ${!showBreadcrumbsAtTop ? stickyHeaderSpacing : ""} bg-[var(--color-background)]`, children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: [
10747
+ title && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: titleBottomMargin, children: title }),
10748
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { children: subtitle })
10714
10749
  ] }) }),
10715
- breadcrumbs && showBreadcrumbsBelowTitle && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `${breadcrumbsAreaSpacing} bg-[var(--color-background)]`, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: breadcrumbs }) }),
10750
+ breadcrumbs && showBreadcrumbsBelowTitle && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${breadcrumbsAreaSpacing} bg-[var(--color-background)]`, children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: breadcrumbs }) }),
10716
10751
  secondaryNav,
10717
10752
  tertiaryNav,
10718
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("main", { className: `flex-1 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-12`, children }) }),
10753
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("main", { className: `flex-1 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-12`, children }) }),
10719
10754
  footer
10720
10755
  ] });
10721
10756
  }
10722
10757
 
10723
10758
  // src/components/layout/PageTemplate.tsx
10724
- var import_jsx_runtime83 = require("react/jsx-runtime");
10759
+ var import_jsx_runtime84 = require("react/jsx-runtime");
10725
10760
  function PageTemplate({
10726
10761
  header,
10727
10762
  title,
@@ -10741,11 +10776,11 @@ function PageTemplate({
10741
10776
  narrow: "max-w-4xl"
10742
10777
  // 896px - for reading-focused pages
10743
10778
  }[variant];
10744
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
10745
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
10779
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_jsx_runtime84.Fragment, { children: [
10780
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
10746
10781
  PageLayout,
10747
10782
  {
10748
- header: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
10783
+ header: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
10749
10784
  Header2,
10750
10785
  {
10751
10786
  logo: header.logo,
@@ -10757,10 +10792,10 @@ function PageTemplate({
10757
10792
  ),
10758
10793
  stickyHeader: header.sticky ?? true,
10759
10794
  breadcrumbsPosition: "below-title",
10760
- breadcrumbs: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Breadcrumbs, { items: breadcrumbs, variant: "subtle" }),
10761
- title: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Heading, { level: 1, children: title }),
10762
- subtitle: subtitle ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Text, { size: "lg", variant: "secondary", children: subtitle }) : void 0,
10763
- secondaryNav: secondaryNav ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
10795
+ breadcrumbs: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Breadcrumbs, { items: breadcrumbs, variant: "subtle" }),
10796
+ title: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Heading, { level: 1, children: title }),
10797
+ subtitle: subtitle ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Text, { size: "lg", variant: "secondary", children: subtitle }) : void 0,
10798
+ secondaryNav: secondaryNav ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
10764
10799
  SecondaryNav,
10765
10800
  {
10766
10801
  items: secondaryNav.items,
@@ -10775,19 +10810,19 @@ function PageTemplate({
10775
10810
  children
10776
10811
  }
10777
10812
  ),
10778
- showCustomizer && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(CustomizerPanel, {})
10813
+ showCustomizer && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(CustomizerPanel, {})
10779
10814
  ] });
10780
10815
  }
10781
10816
 
10782
10817
  // src/components/layout/Resizable.tsx
10783
10818
  var import_lucide_react21 = require("lucide-react");
10784
10819
  var import_react_resizable_panels = require("react-resizable-panels");
10785
- var import_jsx_runtime84 = require("react/jsx-runtime");
10820
+ var import_jsx_runtime85 = require("react/jsx-runtime");
10786
10821
  var ResizablePanelGroup = ({
10787
10822
  className,
10788
10823
  ...props
10789
10824
  }) => {
10790
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
10825
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
10791
10826
  import_react_resizable_panels.Group,
10792
10827
  {
10793
10828
  className: cn(
@@ -10804,7 +10839,7 @@ var ResizableHandle = ({
10804
10839
  className,
10805
10840
  ...props
10806
10841
  }) => {
10807
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
10842
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
10808
10843
  import_react_resizable_panels.Separator,
10809
10844
  {
10810
10845
  className: cn(
@@ -10812,29 +10847,29 @@ var ResizableHandle = ({
10812
10847
  className
10813
10848
  ),
10814
10849
  ...props,
10815
- children: withHandle && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(import_lucide_react21.GripVertical, { className: "h-2.5 w-2.5" }) })
10850
+ children: withHandle && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(import_lucide_react21.GripVertical, { className: "h-2.5 w-2.5" }) })
10816
10851
  }
10817
10852
  );
10818
10853
  };
10819
10854
 
10820
10855
  // src/components/layout/ScrollArea.tsx
10821
10856
  var ScrollAreaPrimitive = __toESM(require("@radix-ui/react-scroll-area"));
10822
- var import_jsx_runtime85 = require("react/jsx-runtime");
10857
+ var import_jsx_runtime86 = require("react/jsx-runtime");
10823
10858
  var ScrollArea = ({
10824
10859
  ref,
10825
10860
  className,
10826
10861
  children,
10827
10862
  ...props
10828
- }) => /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
10863
+ }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
10829
10864
  ScrollAreaPrimitive.Root,
10830
10865
  {
10831
10866
  ref,
10832
10867
  className: cn("relative overflow-hidden", className),
10833
10868
  ...props,
10834
10869
  children: [
10835
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
10836
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ScrollBar, {}),
10837
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ScrollAreaPrimitive.Corner, {})
10870
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
10871
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollBar, {}),
10872
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollAreaPrimitive.Corner, {})
10838
10873
  ]
10839
10874
  }
10840
10875
  );
@@ -10843,7 +10878,7 @@ var ScrollBar = ({
10843
10878
  className,
10844
10879
  orientation = "vertical",
10845
10880
  ...props
10846
- }) => /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
10881
+ }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
10847
10882
  ScrollAreaPrimitive.Scrollbar,
10848
10883
  {
10849
10884
  ref,
@@ -10855,20 +10890,20 @@ var ScrollBar = ({
10855
10890
  className
10856
10891
  ),
10857
10892
  ...props,
10858
- children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ScrollAreaPrimitive.Thumb, { className: "relative flex-1 rounded-full bg-border" })
10893
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollAreaPrimitive.Thumb, { className: "relative flex-1 rounded-full bg-border" })
10859
10894
  }
10860
10895
  );
10861
10896
 
10862
10897
  // src/components/layout/Separator.tsx
10863
10898
  var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"));
10864
- var import_jsx_runtime86 = require("react/jsx-runtime");
10899
+ var import_jsx_runtime87 = require("react/jsx-runtime");
10865
10900
  var Separator4 = ({
10866
10901
  ref,
10867
10902
  className,
10868
10903
  orientation = "horizontal",
10869
10904
  decorative = true,
10870
10905
  ...props
10871
- }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
10906
+ }) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
10872
10907
  SeparatorPrimitive.Root,
10873
10908
  {
10874
10909
  ref,
@@ -10885,14 +10920,14 @@ var Separator4 = ({
10885
10920
 
10886
10921
  // src/components/layout/Sidebar.tsx
10887
10922
  var import_react_slot3 = require("@radix-ui/react-slot");
10888
- var import_jsx_runtime87 = require("react/jsx-runtime");
10923
+ var import_jsx_runtime88 = require("react/jsx-runtime");
10889
10924
  var Sidebar = ({
10890
10925
  ref,
10891
10926
  className,
10892
10927
  children,
10893
10928
  isOpen = true,
10894
10929
  ...props
10895
- }) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
10930
+ }) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
10896
10931
  "aside",
10897
10932
  {
10898
10933
  ref,
@@ -10902,7 +10937,7 @@ var Sidebar = ({
10902
10937
  className
10903
10938
  ),
10904
10939
  ...props,
10905
- children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "flex flex-col h-full", children })
10940
+ children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "flex flex-col h-full", children })
10906
10941
  }
10907
10942
  );
10908
10943
  var SidebarOverlay = ({
@@ -10913,7 +10948,7 @@ var SidebarOverlay = ({
10913
10948
  ...props
10914
10949
  }) => {
10915
10950
  if (!isOpen) return null;
10916
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
10951
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
10917
10952
  "div",
10918
10953
  {
10919
10954
  ref,
@@ -10930,7 +10965,7 @@ var SidebarHeader = ({
10930
10965
  ref,
10931
10966
  className,
10932
10967
  ...props
10933
- }) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
10968
+ }) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
10934
10969
  "div",
10935
10970
  {
10936
10971
  ref,
@@ -10942,7 +10977,7 @@ var SidebarContent = ({
10942
10977
  ref,
10943
10978
  className,
10944
10979
  ...props
10945
- }) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
10980
+ }) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
10946
10981
  "div",
10947
10982
  {
10948
10983
  ref,
@@ -10954,7 +10989,7 @@ var SidebarFooter = ({
10954
10989
  ref,
10955
10990
  className,
10956
10991
  ...props
10957
- }) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
10992
+ }) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
10958
10993
  "div",
10959
10994
  {
10960
10995
  ref,
@@ -10976,7 +11011,7 @@ var SidebarItem = ({
10976
11011
  ...props
10977
11012
  }) => {
10978
11013
  const Comp = asChild ? import_react_slot3.Slot : "button";
10979
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
11014
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
10980
11015
  Comp,
10981
11016
  {
10982
11017
  ref,
@@ -10989,7 +11024,7 @@ var SidebarItem = ({
10989
11024
  style: { paddingLeft: `${12 + depth * 16}px` },
10990
11025
  ...props,
10991
11026
  children: [
10992
- hasChildren && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
11027
+ hasChildren && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
10993
11028
  "svg",
10994
11029
  {
10995
11030
  className: cn(
@@ -10999,7 +11034,7 @@ var SidebarItem = ({
10999
11034
  fill: "none",
11000
11035
  stroke: "currentColor",
11001
11036
  viewBox: "0 0 24 24",
11002
- children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
11037
+ children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
11003
11038
  "path",
11004
11039
  {
11005
11040
  strokeLinecap: "round",
@@ -11010,16 +11045,210 @@ var SidebarItem = ({
11010
11045
  )
11011
11046
  }
11012
11047
  ),
11013
- !hasChildren && depth > 0 && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "w-4 flex-shrink-0" }),
11014
- showIcon && icon && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "flex-shrink-0", children: icon }),
11015
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "flex-1 text-left truncate", children })
11048
+ !hasChildren && depth > 0 && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "w-4 flex-shrink-0" }),
11049
+ showIcon && icon && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "flex-shrink-0", children: icon }),
11050
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "flex-1 text-left truncate", children })
11016
11051
  ]
11017
11052
  }
11018
11053
  );
11019
11054
  };
11020
11055
 
11056
+ // src/components/layout/AppSidebar.tsx
11057
+ var import_react19 = require("react");
11058
+ var import_lucide_react22 = require("lucide-react");
11059
+ var import_jsx_runtime89 = require("react/jsx-runtime");
11060
+ var STORAGE_KEY = "appsidebar:state";
11061
+ var APP_SIDEBAR_WIDTH = 280;
11062
+ var APP_SIDEBAR_WIDTH_COLLAPSED = 60;
11063
+ var AppSidebarContext = (0, import_react19.createContext)(null);
11064
+ var DEFAULT_CONTEXT = {
11065
+ isOpen: true,
11066
+ toggle: () => {
11067
+ },
11068
+ open: () => {
11069
+ },
11070
+ close: () => {
11071
+ }
11072
+ };
11073
+ function useAppSidebar() {
11074
+ return (0, import_react19.useContext)(AppSidebarContext) ?? DEFAULT_CONTEXT;
11075
+ }
11076
+ function AppSidebarProvider({ children, defaultOpen = true }) {
11077
+ const [isOpen, setIsOpen] = (0, import_react19.useState)(defaultOpen);
11078
+ (0, import_react19.useEffect)(() => {
11079
+ const stored = localStorage.getItem(STORAGE_KEY);
11080
+ if (stored !== null) setIsOpen(stored === "true");
11081
+ }, []);
11082
+ const persist3 = (value) => localStorage.setItem(STORAGE_KEY, String(value));
11083
+ const toggle = () => setIsOpen((prev) => {
11084
+ const next = !prev;
11085
+ persist3(next);
11086
+ return next;
11087
+ });
11088
+ const open = () => {
11089
+ setIsOpen(true);
11090
+ persist3(true);
11091
+ };
11092
+ const close = () => {
11093
+ setIsOpen(false);
11094
+ persist3(false);
11095
+ };
11096
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(AppSidebarContext.Provider, { value: { isOpen, toggle, open, close }, children });
11097
+ }
11098
+ function AppSidebarInset({
11099
+ children,
11100
+ className
11101
+ }) {
11102
+ const { isOpen } = useAppSidebar();
11103
+ const { shouldAnimate, scale } = useMotionPreference();
11104
+ const duration = shouldAnimate ? Math.round(300 * (5 / Math.max(scale, 0.1))) : 0;
11105
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
11106
+ "div",
11107
+ {
11108
+ className: cn("min-h-screen", className),
11109
+ style: {
11110
+ marginLeft: isOpen ? APP_SIDEBAR_WIDTH : APP_SIDEBAR_WIDTH_COLLAPSED,
11111
+ transition: shouldAnimate ? `margin-left ${duration}ms ease-out` : "none"
11112
+ },
11113
+ children
11114
+ }
11115
+ );
11116
+ }
11117
+ function AppSidebar({
11118
+ logo,
11119
+ title,
11120
+ items = [],
11121
+ children,
11122
+ footer,
11123
+ className
11124
+ }) {
11125
+ const { isOpen, toggle } = useAppSidebar();
11126
+ const { shouldAnimate, scale } = useMotionPreference();
11127
+ const duration = shouldAnimate ? Math.round(300 * (5 / Math.max(scale, 0.1))) : 0;
11128
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
11129
+ "aside",
11130
+ {
11131
+ className: cn(
11132
+ "fixed left-0 top-0 bottom-0 z-40 flex flex-col",
11133
+ "bg-background border-r border-foreground/8 overflow-hidden",
11134
+ className
11135
+ ),
11136
+ style: {
11137
+ width: isOpen ? APP_SIDEBAR_WIDTH : APP_SIDEBAR_WIDTH_COLLAPSED,
11138
+ transition: shouldAnimate ? `width ${duration}ms ease-out` : "none"
11139
+ },
11140
+ children: [
11141
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className: "flex items-center h-16 px-[10px] shrink-0", children: [
11142
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
11143
+ "button",
11144
+ {
11145
+ onClick: toggle,
11146
+ className: cn(
11147
+ "flex items-center gap-2.5 flex-1 min-w-0",
11148
+ "rounded-lg p-1.5",
11149
+ "hover:bg-foreground/5 transition-colors duration-150",
11150
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]"
11151
+ ),
11152
+ "aria-label": isOpen ? title ?? "OpenCosmos" : "Expand sidebar",
11153
+ children: [
11154
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "w-8 h-8 shrink-0 flex items-center justify-center", children: logo }),
11155
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
11156
+ "span",
11157
+ {
11158
+ className: "font-semibold text-sm text-foreground whitespace-nowrap",
11159
+ style: {
11160
+ opacity: isOpen ? 1 : 0,
11161
+ width: isOpen ? "auto" : 0,
11162
+ overflow: "hidden",
11163
+ pointerEvents: isOpen ? "auto" : "none",
11164
+ transition: shouldAnimate ? `opacity ${Math.round(duration * 0.6)}ms ease-out` : "none"
11165
+ },
11166
+ children: title
11167
+ }
11168
+ )
11169
+ ]
11170
+ }
11171
+ ),
11172
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
11173
+ "button",
11174
+ {
11175
+ onClick: toggle,
11176
+ tabIndex: isOpen ? 0 : -1,
11177
+ className: cn(
11178
+ "shrink-0 w-8 h-8 flex items-center justify-center rounded-lg",
11179
+ "text-foreground/35 hover:text-foreground/65 hover:bg-foreground/5",
11180
+ "transition-colors duration-150",
11181
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]"
11182
+ ),
11183
+ style: {
11184
+ opacity: isOpen ? 1 : 0,
11185
+ pointerEvents: isOpen ? "auto" : "none",
11186
+ transition: shouldAnimate ? `opacity ${Math.round(duration * 0.5)}ms ease-out` : "none"
11187
+ },
11188
+ "aria-label": "Collapse sidebar",
11189
+ children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_lucide_react22.PanelLeftClose, { className: "w-4 h-4" })
11190
+ }
11191
+ )
11192
+ ] }),
11193
+ items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("nav", { className: "px-2 py-2 space-y-1 shrink-0", "aria-label": "Main navigation", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
11194
+ "a",
11195
+ {
11196
+ href: item.href,
11197
+ target: item.external ? "_blank" : void 0,
11198
+ rel: item.external ? "noopener noreferrer" : void 0,
11199
+ title: !isOpen ? item.label : void 0,
11200
+ "aria-label": !isOpen ? item.label : void 0,
11201
+ className: cn(
11202
+ "flex items-center rounded-lg transition-colors duration-150",
11203
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]",
11204
+ isOpen ? "gap-3 px-3 py-3" : "justify-center w-9 h-9 mx-auto",
11205
+ item.active ? "bg-foreground/8 text-foreground font-medium" : "text-[var(--color-text-secondary)] hover:bg-foreground/5 hover:text-[var(--color-text-primary)]"
11206
+ ),
11207
+ children: [
11208
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "shrink-0 flex items-center justify-center w-4 h-4", children: item.icon }),
11209
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
11210
+ "span",
11211
+ {
11212
+ className: "text-sm whitespace-nowrap",
11213
+ style: {
11214
+ opacity: isOpen ? 1 : 0,
11215
+ width: isOpen ? "auto" : 0,
11216
+ overflow: "hidden",
11217
+ pointerEvents: isOpen ? "auto" : "none",
11218
+ transition: shouldAnimate ? `opacity ${Math.round(duration * 0.55)}ms ease-out` : "none"
11219
+ },
11220
+ children: item.label
11221
+ }
11222
+ )
11223
+ ]
11224
+ },
11225
+ item.label
11226
+ )) }),
11227
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
11228
+ "div",
11229
+ {
11230
+ className: "flex-1 overflow-y-auto overflow-x-hidden min-h-0",
11231
+ style: { opacity: isOpen ? 1 : 0, pointerEvents: isOpen ? "auto" : "none" },
11232
+ children
11233
+ }
11234
+ ),
11235
+ footer && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
11236
+ "div",
11237
+ {
11238
+ className: cn(
11239
+ "shrink-0 border-t border-foreground/8",
11240
+ isOpen ? "px-4 py-4 space-y-3" : "px-2 py-3 flex justify-center"
11241
+ ),
11242
+ children: footer
11243
+ }
11244
+ )
11245
+ ]
11246
+ }
11247
+ );
11248
+ }
11249
+
11021
11250
  // src/components/layout/Stack.tsx
11022
- var import_jsx_runtime88 = require("react/jsx-runtime");
11251
+ var import_jsx_runtime90 = require("react/jsx-runtime");
11023
11252
  var Stack = ({
11024
11253
  ref,
11025
11254
  children,
@@ -11055,7 +11284,7 @@ var Stack = ({
11055
11284
  evenly: "justify-evenly"
11056
11285
  }
11057
11286
  };
11058
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
11287
+ return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
11059
11288
  Component,
11060
11289
  {
11061
11290
  ref,
@@ -11067,7 +11296,7 @@ var Stack = ({
11067
11296
  };
11068
11297
 
11069
11298
  // src/components/layout/GlassSurface.tsx
11070
- var import_jsx_runtime89 = require("react/jsx-runtime");
11299
+ var import_jsx_runtime91 = require("react/jsx-runtime");
11071
11300
  var TINT_COLORS = {
11072
11301
  0: "255, 255, 255",
11073
11302
  1: "227, 227, 227",
@@ -11108,7 +11337,7 @@ function GlassSurface({
11108
11337
  } : void 0,
11109
11338
  ...style
11110
11339
  };
11111
- return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { ref, className: classes, style: inlineStyles, children });
11340
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { ref, className: classes, style: inlineStyles, children });
11112
11341
  }
11113
11342
 
11114
11343
  // src/lib/webgl/Renderer.ts
@@ -11297,8 +11526,8 @@ var Color = class {
11297
11526
  };
11298
11527
 
11299
11528
  // src/components/backgrounds/WarpBackground.tsx
11300
- var import_react19 = require("react");
11301
- var import_jsx_runtime90 = require("react/jsx-runtime");
11529
+ var import_react20 = require("react");
11530
+ var import_jsx_runtime92 = require("react/jsx-runtime");
11302
11531
  var vertexShader = `
11303
11532
  attribute vec2 uv;
11304
11533
  attribute vec2 position;
@@ -11485,12 +11714,12 @@ function WarpBackground({
11485
11714
  className = "",
11486
11715
  ...rest
11487
11716
  }) {
11488
- const ctnDom = (0, import_react19.useRef)(null);
11489
- const targetMousePos = (0, import_react19.useRef)({ x: 0.5, y: 0.5 });
11490
- const smoothMousePos = (0, import_react19.useRef)({ x: 0.5, y: 0.5 });
11491
- const targetMouseActive = (0, import_react19.useRef)(0);
11492
- const smoothMouseActive = (0, import_react19.useRef)(0);
11493
- (0, import_react19.useEffect)(() => {
11717
+ const ctnDom = (0, import_react20.useRef)(null);
11718
+ const targetMousePos = (0, import_react20.useRef)({ x: 0.5, y: 0.5 });
11719
+ const smoothMousePos = (0, import_react20.useRef)({ x: 0.5, y: 0.5 });
11720
+ const targetMouseActive = (0, import_react20.useRef)(0);
11721
+ const smoothMouseActive = (0, import_react20.useRef)(0);
11722
+ (0, import_react20.useEffect)(() => {
11494
11723
  if (!ctnDom.current) return;
11495
11724
  const ctn = ctnDom.current;
11496
11725
  const renderer = new Renderer({
@@ -11611,12 +11840,12 @@ function WarpBackground({
11611
11840
  autoCenterRepulsion,
11612
11841
  transparent
11613
11842
  ]);
11614
- return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { ref: ctnDom, className: `w-full h-full relative ${className}`, ...rest });
11843
+ return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { ref: ctnDom, className: `w-full h-full relative ${className}`, ...rest });
11615
11844
  }
11616
11845
 
11617
11846
  // src/components/backgrounds/FaultyTerminal.tsx
11618
- var import_react20 = require("react");
11619
- var import_jsx_runtime91 = require("react/jsx-runtime");
11847
+ var import_react21 = require("react");
11848
+ var import_jsx_runtime93 = require("react/jsx-runtime");
11620
11849
  var vertexShader2 = `
11621
11850
  attribute vec2 position;
11622
11851
  attribute vec2 uv;
@@ -11852,18 +12081,18 @@ function FaultyTerminal({
11852
12081
  style,
11853
12082
  ...rest
11854
12083
  }) {
11855
- const containerRef = (0, import_react20.useRef)(null);
11856
- const programRef = (0, import_react20.useRef)(null);
11857
- const rendererRef = (0, import_react20.useRef)(null);
11858
- const mouseRef = (0, import_react20.useRef)({ x: 0.5, y: 0.5 });
11859
- const smoothMouseRef = (0, import_react20.useRef)({ x: 0.5, y: 0.5 });
11860
- const frozenTimeRef = (0, import_react20.useRef)(0);
11861
- const rafRef = (0, import_react20.useRef)(0);
11862
- const loadAnimationStartRef = (0, import_react20.useRef)(0);
11863
- const timeOffsetRef = (0, import_react20.useRef)(Math.random() * 100);
11864
- const tintVec = (0, import_react20.useMemo)(() => hexToRgb3(tint), [tint]);
11865
- const ditherValue = (0, import_react20.useMemo)(() => typeof dither === "boolean" ? dither ? 1 : 0 : dither, [dither]);
11866
- const handleMouseMove = (0, import_react20.useCallback)((e) => {
12084
+ const containerRef = (0, import_react21.useRef)(null);
12085
+ const programRef = (0, import_react21.useRef)(null);
12086
+ const rendererRef = (0, import_react21.useRef)(null);
12087
+ const mouseRef = (0, import_react21.useRef)({ x: 0.5, y: 0.5 });
12088
+ const smoothMouseRef = (0, import_react21.useRef)({ x: 0.5, y: 0.5 });
12089
+ const frozenTimeRef = (0, import_react21.useRef)(0);
12090
+ const rafRef = (0, import_react21.useRef)(0);
12091
+ const loadAnimationStartRef = (0, import_react21.useRef)(0);
12092
+ const timeOffsetRef = (0, import_react21.useRef)(Math.random() * 100);
12093
+ const tintVec = (0, import_react21.useMemo)(() => hexToRgb3(tint), [tint]);
12094
+ const ditherValue = (0, import_react21.useMemo)(() => typeof dither === "boolean" ? dither ? 1 : 0 : dither, [dither]);
12095
+ const handleMouseMove = (0, import_react21.useCallback)((e) => {
11867
12096
  const ctn = containerRef.current;
11868
12097
  if (!ctn) return;
11869
12098
  const rect = ctn.getBoundingClientRect();
@@ -11871,7 +12100,7 @@ function FaultyTerminal({
11871
12100
  const y = 1 - (e.clientY - rect.top) / rect.height;
11872
12101
  mouseRef.current = { x, y };
11873
12102
  }, []);
11874
- (0, import_react20.useEffect)(() => {
12103
+ (0, import_react21.useEffect)(() => {
11875
12104
  const ctn = containerRef.current;
11876
12105
  if (!ctn) return;
11877
12106
  const renderer = new Renderer({ dpr });
@@ -11987,13 +12216,13 @@ function FaultyTerminal({
11987
12216
  brightness,
11988
12217
  handleMouseMove
11989
12218
  ]);
11990
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { ref: containerRef, className: `w-full h-full relative overflow-hidden ${className}`, style, ...rest });
12219
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { ref: containerRef, className: `w-full h-full relative overflow-hidden ${className}`, style, ...rest });
11991
12220
  }
11992
12221
 
11993
12222
  // src/components/motion/AnimatedBeam.tsx
11994
12223
  var import_framer_motion4 = require("framer-motion");
11995
- var import_react21 = require("react");
11996
- var import_jsx_runtime92 = require("react/jsx-runtime");
12224
+ var import_react22 = require("react");
12225
+ var import_jsx_runtime94 = require("react/jsx-runtime");
11997
12226
  var AnimatedBeam = ({
11998
12227
  className,
11999
12228
  containerRef,
@@ -12014,7 +12243,7 @@ var AnimatedBeam = ({
12014
12243
  endY
12015
12244
  }) => {
12016
12245
  const { shouldAnimate, scale } = useMotionPreference();
12017
- const id = (0, import_react21.useId)();
12246
+ const id = (0, import_react22.useId)();
12018
12247
  const pathId = `beam-path-${id}`;
12019
12248
  const gradientId = `beam-gradient-${id}`;
12020
12249
  const maskId = `beam-mask-${id}`;
@@ -12029,7 +12258,7 @@ var AnimatedBeam = ({
12029
12258
  const controlY = y1;
12030
12259
  const controlX = x2;
12031
12260
  const path = `M ${x1},${y1} C ${x1 + curvature},${y1} ${x2 - curvature},${y2} ${x2},${y2}`;
12032
- return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(
12261
+ return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
12033
12262
  "svg",
12034
12263
  {
12035
12264
  fill: "none",
@@ -12038,16 +12267,16 @@ var AnimatedBeam = ({
12038
12267
  xmlns: "http://www.w3.org/2000/svg",
12039
12268
  className: cn("pointer-events-none absolute inset-0 transform-gpu overflow-visible", className),
12040
12269
  children: [
12041
- /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("defs", { children: [
12042
- /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("linearGradient", { id: gradientId, gradientUnits: "userSpaceOnUse", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
12043
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
12044
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("stop", { stopColor: gradientStartColor }),
12045
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("stop", { offset: "32.5%", stopColor: gradientStopColor }),
12046
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
12270
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("defs", { children: [
12271
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("linearGradient", { id: gradientId, gradientUnits: "userSpaceOnUse", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
12272
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
12273
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { stopColor: gradientStartColor }),
12274
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { offset: "32.5%", stopColor: gradientStopColor }),
12275
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
12047
12276
  ] }),
12048
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("marker", { id: `arrow-${id}`, markerWidth: "5", markerHeight: "5", refX: "2.5", refY: "2.5", orient: "auto", markerUnits: "strokeWidth", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("circle", { cx: "2.5", cy: "2.5", r: "2.5", fill: gradientStopColor }) })
12277
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("marker", { id: `arrow-${id}`, markerWidth: "5", markerHeight: "5", refX: "2.5", refY: "2.5", orient: "auto", markerUnits: "strokeWidth", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("circle", { cx: "2.5", cy: "2.5", r: "2.5", fill: gradientStopColor }) })
12049
12278
  ] }),
12050
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
12279
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
12051
12280
  "path",
12052
12281
  {
12053
12282
  d: path,
@@ -12057,7 +12286,7 @@ var AnimatedBeam = ({
12057
12286
  strokeLinecap: "round"
12058
12287
  }
12059
12288
  ),
12060
- shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
12289
+ shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
12061
12290
  "path",
12062
12291
  {
12063
12292
  d: path,
@@ -12065,7 +12294,7 @@ var AnimatedBeam = ({
12065
12294
  strokeWidth: pathWidth,
12066
12295
  strokeLinecap: "round",
12067
12296
  fill: "none",
12068
- children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
12297
+ children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
12069
12298
  "animate",
12070
12299
  {
12071
12300
  attributeName: "stroke-dasharray",
@@ -12076,7 +12305,7 @@ var AnimatedBeam = ({
12076
12305
  )
12077
12306
  }
12078
12307
  ),
12079
- shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
12308
+ shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
12080
12309
  import_framer_motion4.motion.circle,
12081
12310
  {
12082
12311
  r: pathWidth * 1.5,
@@ -12093,7 +12322,7 @@ var AnimatedBeam = ({
12093
12322
  style: { offsetPath: `path('${path}')` }
12094
12323
  }
12095
12324
  ),
12096
- shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
12325
+ shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
12097
12326
  import_framer_motion4.motion.circle,
12098
12327
  {
12099
12328
  r: pathWidth,
@@ -12116,8 +12345,8 @@ var AnimatedBeam = ({
12116
12345
  };
12117
12346
 
12118
12347
  // src/components/backgrounds/OrbBackground.tsx
12119
- var import_react22 = require("react");
12120
- var import_jsx_runtime93 = require("react/jsx-runtime");
12348
+ var import_react23 = require("react");
12349
+ var import_jsx_runtime95 = require("react/jsx-runtime");
12121
12350
  function hexToRgb4(hex) {
12122
12351
  const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
12123
12352
  if (!result) return [0, 0, 0];
@@ -12143,7 +12372,7 @@ function OrbBackground({
12143
12372
  orbColor2,
12144
12373
  orbColor3
12145
12374
  }) {
12146
- const ctnDom = (0, import_react22.useRef)(null);
12375
+ const ctnDom = (0, import_react23.useRef)(null);
12147
12376
  const vert = (
12148
12377
  /* glsl */
12149
12378
  `
@@ -12328,7 +12557,7 @@ function OrbBackground({
12328
12557
  }
12329
12558
  `
12330
12559
  );
12331
- (0, import_react22.useEffect)(() => {
12560
+ (0, import_react23.useEffect)(() => {
12332
12561
  const container = ctnDom.current;
12333
12562
  if (!container) return;
12334
12563
  const bgColor = backgroundColor || getCSSVariable2("--color-background", "#000000");
@@ -12431,13 +12660,13 @@ function OrbBackground({
12431
12660
  gl.getExtension("WEBGL_lose_context")?.loseContext();
12432
12661
  };
12433
12662
  }, [hue, hoverIntensity, rotateOnHover, forceHoverState, backgroundColor]);
12434
- return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { ref: ctnDom, className: cn("w-full h-full pointer-events-auto", className) });
12663
+ return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { ref: ctnDom, className: cn("w-full h-full pointer-events-auto", className) });
12435
12664
  }
12436
12665
 
12437
12666
  // src/components/blocks/Hero.tsx
12438
- var import_lucide_react22 = require("lucide-react");
12667
+ var import_lucide_react23 = require("lucide-react");
12439
12668
  var import_framer_motion5 = require("framer-motion");
12440
- var import_jsx_runtime94 = require("react/jsx-runtime");
12669
+ var import_jsx_runtime96 = require("react/jsx-runtime");
12441
12670
  function HeroBlock({
12442
12671
  className,
12443
12672
  badge,
@@ -12475,12 +12704,12 @@ function HeroBlock({
12475
12704
  } : { duration: 0 }
12476
12705
  }
12477
12706
  };
12478
- return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: cn("relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden w-full", className), children: [
12479
- background && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "absolute inset-0 z-0 select-none pointer-events-none", children: [
12480
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "absolute inset-0", children: background }),
12481
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-transparent to-[var(--color-background)] z-10" })
12707
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: cn("relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden w-full", className), children: [
12708
+ background && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "absolute inset-0 z-0 select-none pointer-events-none", children: [
12709
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "absolute inset-0", children: background }),
12710
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-transparent to-[var(--color-background)] z-10" })
12482
12711
  ] }),
12483
- /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
12712
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
12484
12713
  import_framer_motion5.motion.div,
12485
12714
  {
12486
12715
  className: "relative z-20 container max-w-4xl px-4 text-center space-y-8",
@@ -12489,8 +12718,8 @@ function HeroBlock({
12489
12718
  whileInView: "visible",
12490
12719
  viewport: { once: true },
12491
12720
  children: [
12492
- badge && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Badge, { variant: "outline", className: "backdrop-blur-md bg-[var(--color-surface)]/30 border-[var(--color-border)] px-4 py-1.5", children: badge }) }),
12493
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
12721
+ badge && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Badge, { variant: "outline", className: "backdrop-blur-md bg-[var(--color-surface)]/30 border-[var(--color-border)] px-4 py-1.5", children: badge }) }),
12722
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
12494
12723
  import_framer_motion5.motion.h1,
12495
12724
  {
12496
12725
  variants: itemVariants,
@@ -12498,14 +12727,14 @@ function HeroBlock({
12498
12727
  children: headline
12499
12728
  }
12500
12729
  ),
12501
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Text, { variant: "secondary", className: "text-xl md:text-2xl max-w-2xl mx-auto", children: description }) }),
12502
- children && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex justify-center", children }),
12503
- /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex flex-col sm:flex-row gap-4 justify-center items-center pt-4", children: [
12504
- primaryCta && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(Button, { size: "lg", variant: primaryCta.variant || "default", onClick: primaryCta.onClick, children: [
12730
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { variant: "secondary", className: "text-xl md:text-2xl max-w-2xl mx-auto", children: description }) }),
12731
+ children && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex justify-center", children }),
12732
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex flex-col sm:flex-row gap-4 justify-center items-center pt-4", children: [
12733
+ primaryCta && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(Button, { size: "lg", variant: primaryCta.variant || "default", onClick: primaryCta.onClick, children: [
12505
12734
  primaryCta.label,
12506
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react22.ArrowRight, { className: "w-4 h-4 ml-2" })
12735
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react23.ArrowRight, { className: "w-4 h-4 ml-2" })
12507
12736
  ] }),
12508
- secondaryCta && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Button, { size: "lg", variant: "outline", className: "bg-[var(--color-surface)]/50 backdrop-blur-md", onClick: secondaryCta.onClick, children: secondaryCta.label })
12737
+ secondaryCta && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Button, { size: "lg", variant: "outline", className: "bg-[var(--color-surface)]/50 backdrop-blur-md", onClick: secondaryCta.onClick, children: secondaryCta.label })
12509
12738
  ] })
12510
12739
  ]
12511
12740
  }
@@ -12514,8 +12743,8 @@ function HeroBlock({
12514
12743
  }
12515
12744
 
12516
12745
  // src/components/cursor/SplashCursor.tsx
12517
- var import_react23 = require("react");
12518
- var import_jsx_runtime95 = require("react/jsx-runtime");
12746
+ var import_react24 = require("react");
12747
+ var import_jsx_runtime97 = require("react/jsx-runtime");
12519
12748
  function pointerPrototype() {
12520
12749
  return {
12521
12750
  id: -1,
@@ -12548,8 +12777,8 @@ function SplashCursor({
12548
12777
  className,
12549
12778
  style
12550
12779
  }) {
12551
- const canvasRef = (0, import_react23.useRef)(null);
12552
- (0, import_react23.useEffect)(() => {
12780
+ const canvasRef = (0, import_react24.useRef)(null);
12781
+ (0, import_react24.useEffect)(() => {
12553
12782
  const canvas = canvasRef.current;
12554
12783
  if (!canvas) return;
12555
12784
  const pointers = [pointerPrototype()];
@@ -13595,7 +13824,7 @@ function SplashCursor({
13595
13824
  BACK_COLOR,
13596
13825
  TRANSPARENT
13597
13826
  ]);
13598
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
13827
+ return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
13599
13828
  "div",
13600
13829
  {
13601
13830
  style: {
@@ -13609,7 +13838,7 @@ function SplashCursor({
13609
13838
  ...style
13610
13839
  },
13611
13840
  className,
13612
- children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
13841
+ children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
13613
13842
  "canvas",
13614
13843
  {
13615
13844
  ref: canvasRef,
@@ -13626,8 +13855,8 @@ function SplashCursor({
13626
13855
  }
13627
13856
 
13628
13857
  // src/components/cursor/TargetCursor.tsx
13629
- var import_react24 = require("react");
13630
- var import_jsx_runtime96 = require("react/jsx-runtime");
13858
+ var import_react25 = require("react");
13859
+ var import_jsx_runtime98 = require("react/jsx-runtime");
13631
13860
  function TargetCursor({
13632
13861
  color = "255, 255, 255",
13633
13862
  outerSize = 40,
@@ -13638,18 +13867,18 @@ function TargetCursor({
13638
13867
  clickScale = 0.7,
13639
13868
  blendMode = true
13640
13869
  }) {
13641
- const cursorOuterRef = (0, import_react24.useRef)(null);
13642
- const cursorInnerRef = (0, import_react24.useRef)(null);
13643
- const requestRef = (0, import_react24.useRef)(null);
13644
- const previousTimeRef = (0, import_react24.useRef)(null);
13645
- const endX = (0, import_react24.useRef)(0);
13646
- const endY = (0, import_react24.useRef)(0);
13647
- const _x = (0, import_react24.useRef)(0);
13648
- const _y = (0, import_react24.useRef)(0);
13649
- const [isActive, setIsActive] = (0, import_react24.useState)(false);
13650
- const [isActiveClickable, setIsActiveClickable] = (0, import_react24.useState)(false);
13651
- const [isVisible, setIsVisible] = (0, import_react24.useState)(false);
13652
- (0, import_react24.useEffect)(() => {
13870
+ const cursorOuterRef = (0, import_react25.useRef)(null);
13871
+ const cursorInnerRef = (0, import_react25.useRef)(null);
13872
+ const requestRef = (0, import_react25.useRef)(null);
13873
+ const previousTimeRef = (0, import_react25.useRef)(null);
13874
+ const endX = (0, import_react25.useRef)(0);
13875
+ const endY = (0, import_react25.useRef)(0);
13876
+ const _x = (0, import_react25.useRef)(0);
13877
+ const _y = (0, import_react25.useRef)(0);
13878
+ const [isActive, setIsActive] = (0, import_react25.useState)(false);
13879
+ const [isActiveClickable, setIsActiveClickable] = (0, import_react25.useState)(false);
13880
+ const [isVisible, setIsVisible] = (0, import_react25.useState)(false);
13881
+ (0, import_react25.useEffect)(() => {
13653
13882
  const onMouseMove = (e) => {
13654
13883
  endX.current = e.clientX;
13655
13884
  endY.current = e.clientY;
@@ -13697,11 +13926,11 @@ function TargetCursor({
13697
13926
  previousTimeRef.current = time;
13698
13927
  requestRef.current = requestAnimationFrame(animateCursor);
13699
13928
  };
13700
- (0, import_react24.useEffect)(() => {
13929
+ (0, import_react25.useEffect)(() => {
13701
13930
  requestRef.current = requestAnimationFrame(animateCursor);
13702
13931
  return () => cancelAnimationFrame(requestRef.current);
13703
13932
  }, []);
13704
- (0, import_react24.useEffect)(() => {
13933
+ (0, import_react25.useEffect)(() => {
13705
13934
  if (isVisible) {
13706
13935
  const style = document.createElement("style");
13707
13936
  style.innerHTML = `body, a, button, input, [role="button"] { cursor: none !important; }`;
@@ -13735,8 +13964,8 @@ function TargetCursor({
13735
13964
  }
13736
13965
  };
13737
13966
  if (!isVisible) return null;
13738
- return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [
13739
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
13967
+ return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment, { children: [
13968
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
13740
13969
  "div",
13741
13970
  {
13742
13971
  ref: cursorOuterRef,
@@ -13753,7 +13982,7 @@ function TargetCursor({
13753
13982
  }
13754
13983
  }
13755
13984
  ),
13756
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
13985
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
13757
13986
  "div",
13758
13987
  {
13759
13988
  ref: cursorInnerRef,
@@ -13772,8 +14001,8 @@ function TargetCursor({
13772
14001
  }
13773
14002
 
13774
14003
  // src/providers/ThemeProvider.tsx
13775
- var import_react25 = require("react");
13776
- var import_jsx_runtime97 = require("react/jsx-runtime");
14004
+ var import_react26 = require("react");
14005
+ var import_jsx_runtime99 = require("react/jsx-runtime");
13777
14006
  var themeTokens = {
13778
14007
  studio: studioTokens,
13779
14008
  terra: terraTokens,
@@ -13998,19 +14227,19 @@ function ThemeProvider({ children, defaultTheme, defaultMode }) {
13998
14227
  const { theme, mode, setTheme, setMode } = useThemeStore();
13999
14228
  const customPalette = useCustomizer((state) => state.customColors?.[theme]?.[mode]);
14000
14229
  const motionIntensity = useCustomizer((state) => state.motion);
14001
- const [isTransitioning, setIsTransitioning] = (0, import_react25.useState)(false);
14002
- const [mounted, setMounted] = (0, import_react25.useState)(false);
14003
- (0, import_react25.useEffect)(() => {
14230
+ const [isTransitioning, setIsTransitioning] = (0, import_react26.useState)(false);
14231
+ const [mounted, setMounted] = (0, import_react26.useState)(false);
14232
+ (0, import_react26.useEffect)(() => {
14004
14233
  if (!defaultTheme && !defaultMode) return;
14005
14234
  const persisted = typeof window !== "undefined" && localStorage.getItem("ecosystem-theme");
14006
14235
  if (persisted) return;
14007
14236
  if (defaultTheme) setTheme(defaultTheme);
14008
14237
  if (defaultMode) setMode(defaultMode);
14009
14238
  }, []);
14010
- (0, import_react25.useEffect)(() => {
14239
+ (0, import_react26.useEffect)(() => {
14011
14240
  setMounted(true);
14012
14241
  }, []);
14013
- (0, import_react25.useEffect)(() => {
14242
+ (0, import_react26.useEffect)(() => {
14014
14243
  if (!mounted) return;
14015
14244
  setIsTransitioning(true);
14016
14245
  const root = document.documentElement;
@@ -14045,7 +14274,7 @@ function ThemeProvider({ children, defaultTheme, defaultMode }) {
14045
14274
  }, 400);
14046
14275
  return () => clearTimeout(timeout);
14047
14276
  }, [theme, mode, mounted, customPalette, motionIntensity]);
14048
- return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_jsx_runtime97.Fragment, { children });
14277
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_jsx_runtime99.Fragment, { children });
14049
14278
  }
14050
14279
 
14051
14280
  // src/lib/animations.ts
@@ -14331,7 +14560,7 @@ function generateBreadcrumbs(hash, routeConfig, baseUrl = "#") {
14331
14560
 
14332
14561
  // src/component-registry.ts
14333
14562
  var BRAND = {
14334
- productName: "Sage Design Engine",
14563
+ productName: "OpenCosmos UI",
14335
14564
  productNameShort: "Sage",
14336
14565
  themeNames: {
14337
14566
  organic: "Terra",
@@ -14343,7 +14572,7 @@ var BRAND = {
14343
14572
  };
14344
14573
  var COMPONENT_REGISTRY = {
14345
14574
  /**
14346
- * Total count of all exported UI components from @thesage/ui
14575
+ * Total count of all exported UI components from @opencosmos/ui
14347
14576
  */
14348
14577
  totalCount: 100,
14349
14578
  /**
@@ -14702,6 +14931,7 @@ __export(data_display_exports, {
14702
14931
  DescriptionList: () => DescriptionList,
14703
14932
  GitHubIcon: () => GitHubIcon,
14704
14933
  Heading: () => Heading,
14934
+ OpenCosmosIcon: () => OpenCosmosIcon,
14705
14935
  StatCard: () => StatCard,
14706
14936
  StatCardGroup: () => StatCardGroup,
14707
14937
  Table: () => Table,
@@ -14728,10 +14958,15 @@ __export(data_display_exports, {
14728
14958
  // src/components/layout/index.ts
14729
14959
  var layout_exports = {};
14730
14960
  __export(layout_exports, {
14961
+ APP_SIDEBAR_WIDTH: () => APP_SIDEBAR_WIDTH,
14962
+ APP_SIDEBAR_WIDTH_COLLAPSED: () => APP_SIDEBAR_WIDTH_COLLAPSED,
14731
14963
  Accordion: () => Accordion,
14732
14964
  AccordionContent: () => AccordionContent,
14733
14965
  AccordionItem: () => AccordionItem,
14734
14966
  AccordionTrigger: () => AccordionTrigger,
14967
+ AppSidebar: () => AppSidebar,
14968
+ AppSidebarInset: () => AppSidebarInset,
14969
+ AppSidebarProvider: () => AppSidebarProvider,
14735
14970
  AspectRatio: () => AspectRatio,
14736
14971
  Carousel: () => Carousel,
14737
14972
  CarouselContent: () => CarouselContent,
@@ -14763,7 +14998,8 @@ __export(layout_exports, {
14763
14998
  SidebarHeader: () => SidebarHeader,
14764
14999
  SidebarItem: () => SidebarItem,
14765
15000
  SidebarOverlay: () => SidebarOverlay,
14766
- Stack: () => Stack
15001
+ Stack: () => Stack,
15002
+ useAppSidebar: () => useAppSidebar
14767
15003
  });
14768
15004
 
14769
15005
  // src/components/backgrounds/index.ts
@@ -14788,6 +15024,8 @@ __export(providers_exports, {
14788
15024
  });
14789
15025
  // Annotate the CommonJS export names for ESM import in node:
14790
15026
  0 && (module.exports = {
15027
+ APP_SIDEBAR_WIDTH,
15028
+ APP_SIDEBAR_WIDTH_COLLAPSED,
14791
15029
  Accordion,
14792
15030
  AccordionContent,
14793
15031
  AccordionItem,
@@ -14808,6 +15046,9 @@ __export(providers_exports, {
14808
15046
  AlertDialogTrigger,
14809
15047
  AlertTitle,
14810
15048
  AnimatedBeam,
15049
+ AppSidebar,
15050
+ AppSidebarInset,
15051
+ AppSidebarProvider,
14811
15052
  AspectImage,
14812
15053
  AspectRatio,
14813
15054
  Avatar,
@@ -14977,6 +15218,7 @@ __export(providers_exports, {
14977
15218
  NavigationMenuTrigger,
14978
15219
  NavigationMenuViewport,
14979
15220
  NotificationCenter,
15221
+ OpenCosmosIcon,
14980
15222
  OpenGraphCard,
14981
15223
  OrbBackground,
14982
15224
  Overlays,
@@ -15133,6 +15375,7 @@ __export(providers_exports, {
15133
15375
  transitions,
15134
15376
  treeNodeVariants,
15135
15377
  typographySystem,
15378
+ useAppSidebar,
15136
15379
  useCustomizer,
15137
15380
  useForm,
15138
15381
  useFormField,