pxengine 0.1.117 → 0.1.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -15797,6 +15797,10 @@ var RefreshIcon = () => /* @__PURE__ */ jsxs108("svg", { width: "14", height: "1
15797
15797
  /* @__PURE__ */ jsx147("polyline", { points: "23 4 23 10 17 10" }),
15798
15798
  /* @__PURE__ */ jsx147("path", { d: "M20.49 15a9 9 0 1 1-2.12-9.36L23 10" })
15799
15799
  ] });
15800
+ var EditIcon = () => /* @__PURE__ */ jsxs108("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15801
+ /* @__PURE__ */ jsx147("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
15802
+ /* @__PURE__ */ jsx147("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
15803
+ ] });
15800
15804
  var SlideTypeIcon = () => /* @__PURE__ */ jsxs108("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15801
15805
  /* @__PURE__ */ jsx147("rect", { x: "3", y: "4", width: "18", height: "14", rx: "2" }),
15802
15806
  /* @__PURE__ */ jsx147("line", { x1: "3", y1: "10", x2: "21", y2: "10" })
@@ -15834,7 +15838,7 @@ var FORMATS = [
15834
15838
  ext: ".html",
15835
15839
  emoji: "\u{1F310}",
15836
15840
  desc: "Interactive web presentation \u2014 download and open in browser",
15837
- accent: { text: "text-indigo-400", bg: "bg-indigo-500/10 border-indigo-500/20" }
15841
+ accent: { text: "text-sky-400", bg: "bg-sky-500/10 border-sky-500/20" }
15838
15842
  }
15839
15843
  ];
15840
15844
  var ExportModal = ({ formats, title, onClose }) => {
@@ -15951,7 +15955,7 @@ var FullscreenModal = ({ url, title, slideCount, initialSlide = 1, onClose }) =>
15951
15955
  return /* @__PURE__ */ jsxs108("div", { className: "fixed inset-0 z-50 bg-black flex flex-col", children: [
15952
15956
  /* @__PURE__ */ jsxs108("div", { className: "flex items-center justify-between gap-4 px-4 h-11 bg-zinc-950/90 border-b border-zinc-800/60 flex-shrink-0", children: [
15953
15957
  /* @__PURE__ */ jsxs108("div", { className: "flex items-center gap-3 min-w-0", children: [
15954
- /* @__PURE__ */ jsx147("span", { className: "text-indigo-400 flex-shrink-0", children: /* @__PURE__ */ jsx147(SlidesIcon, {}) }),
15958
+ /* @__PURE__ */ jsx147("span", { className: "text-[#DCC99B] flex-shrink-0", children: /* @__PURE__ */ jsx147(SlidesIcon, {}) }),
15955
15959
  /* @__PURE__ */ jsx147("span", { className: "text-sm font-medium text-zinc-300 truncate", children: title }),
15956
15960
  slideCount > 0 && /* @__PURE__ */ jsxs108("span", { className: "text-xs text-zinc-600 flex-shrink-0", children: [
15957
15961
  currentSlide,
@@ -15965,7 +15969,7 @@ var FullscreenModal = ({ url, title, slideCount, initialSlide = 1, onClose }) =>
15965
15969
  {
15966
15970
  onClick: () => sendSlideCommand("prevSlide"),
15967
15971
  disabled: !iframeReady,
15968
- className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-indigo-500 hover:text-indigo-400 text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
15972
+ className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-[#C0AE82] hover:text-[#DCC99B] text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
15969
15973
  "aria-label": "Previous slide",
15970
15974
  children: /* @__PURE__ */ jsx147(ChevronLeft2, {})
15971
15975
  }
@@ -15975,7 +15979,7 @@ var FullscreenModal = ({ url, title, slideCount, initialSlide = 1, onClose }) =>
15975
15979
  {
15976
15980
  onClick: () => sendSlideCommand("nextSlide"),
15977
15981
  disabled: !iframeReady,
15978
- className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-indigo-500 hover:text-indigo-400 text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
15982
+ className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-[#C0AE82] hover:text-[#DCC99B] text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
15979
15983
  "aria-label": "Next slide",
15980
15984
  children: /* @__PURE__ */ jsx147(ChevronRight2, {})
15981
15985
  }
@@ -16551,11 +16555,11 @@ var PresentationJobCard = ({
16551
16555
  /* @__PURE__ */ jsx147(
16552
16556
  "div",
16553
16557
  {
16554
- className: "h-[3px] bg-gradient-to-r from-indigo-500 via-purple-500 to-indigo-500 bg-[length:200%_100%] animate-[gradient-shift_2s_ease-in-out_infinite]",
16558
+ className: "h-[3px]",
16555
16559
  style: {
16560
+ backgroundImage: accentGradient || "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B, #C0AE82, #8B7D5E)",
16556
16561
  backgroundSize: "200% 100%",
16557
- animation: "gradient-shift 2s ease-in-out infinite",
16558
- ...accentGradient ? { backgroundImage: accentGradient } : {}
16562
+ animation: "gradient-shift 2s ease-in-out infinite"
16559
16563
  }
16560
16564
  }
16561
16565
  ),
@@ -16564,7 +16568,7 @@ var PresentationJobCard = ({
16564
16568
  /* @__PURE__ */ jsx147(
16565
16569
  "div",
16566
16570
  {
16567
- className: "w-10 h-10 rounded-xl bg-indigo-500/10 border border-indigo-500/20 flex items-center justify-center flex-shrink-0",
16571
+ className: "w-10 h-10 rounded-xl bg-[#C0AE82]/10 border border-[#C0AE82]/25 flex items-center justify-center flex-shrink-0",
16568
16572
  style: { ...t.accentSubtle(0.1), ...t.accentBorder },
16569
16573
  children: /* @__PURE__ */ jsx147("span", { className: "text-lg", children: getPhaseIcon() })
16570
16574
  }
@@ -16582,10 +16586,11 @@ var PresentationJobCard = ({
16582
16586
  /* @__PURE__ */ jsx147("div", { className: "h-2 bg-zinc-800 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx147(
16583
16587
  "div",
16584
16588
  {
16585
- className: "h-full bg-gradient-to-r from-indigo-500 to-purple-500 rounded-full transition-all duration-500 ease-out",
16589
+ className: "h-full rounded-full transition-all duration-500 ease-out",
16586
16590
  style: {
16587
16591
  width: `${Math.max(pct, 2)}%`,
16588
- ...accentGradient ? { backgroundImage: accentGradient } : t.accentBg
16592
+ backgroundImage: accentGradient || "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B)",
16593
+ ...!accentGradient ? t.accentBg : {}
16589
16594
  }
16590
16595
  }
16591
16596
  ) }),
@@ -16595,7 +16600,7 @@ var PresentationJobCard = ({
16595
16600
  ] })
16596
16601
  ] }),
16597
16602
  /* @__PURE__ */ jsxs108("div", { className: "flex items-center gap-2", children: [
16598
- /* @__PURE__ */ jsx147("div", { className: "w-2 h-2 rounded-full bg-indigo-500 animate-pulse", style: t.accentBg }),
16603
+ /* @__PURE__ */ jsx147("div", { className: "w-2 h-2 rounded-full bg-[#C0AE82] animate-pulse", style: t.accentBg }),
16599
16604
  /* @__PURE__ */ jsx147("span", { className: "text-xs text-zinc-400", children: step })
16600
16605
  ] }),
16601
16606
  phase === "ai_generation" && slidesTotal > 0 && /* @__PURE__ */ jsxs108("div", { className: "flex items-center gap-2 pt-1", children: [
@@ -16604,7 +16609,7 @@ var PresentationJobCard = ({
16604
16609
  {
16605
16610
  className: cn(
16606
16611
  "w-6 h-1.5 rounded-full transition-all duration-300",
16607
- i < slidesCompleted ? "bg-indigo-500" : i === slidesCompleted ? "bg-indigo-500/50 animate-pulse" : "bg-zinc-700"
16612
+ i < slidesCompleted ? "bg-[#C0AE82]" : i === slidesCompleted ? "bg-[#C0AE82]/50 animate-pulse" : "bg-zinc-700"
16608
16613
  )
16609
16614
  },
16610
16615
  i
@@ -16652,7 +16657,7 @@ var PresentationJobCard = ({
16652
16657
  /* @__PURE__ */ jsx147(
16653
16658
  "div",
16654
16659
  {
16655
- className: "w-10 h-10 rounded-xl bg-indigo-500/10 border border-indigo-500/20 flex items-center justify-center flex-shrink-0 text-indigo-400",
16660
+ className: "w-10 h-10 rounded-xl bg-[#C0AE82]/10 border border-[#C0AE82]/25 flex items-center justify-center flex-shrink-0 text-[#DCC99B]",
16656
16661
  style: { ...t.accentSubtle(0.1), ...t.accentBorder, ...t.accent },
16657
16662
  children: /* @__PURE__ */ jsx147(SlidesIcon, {})
16658
16663
  }
@@ -16689,7 +16694,7 @@ var PresentationJobCard = ({
16689
16694
  onChange: (e) => setSlideTemplate(i, e.target.value),
16690
16695
  disabled: rowBusy,
16691
16696
  title: "Design template for this slide only (default: deck's template)",
16692
- className: "w-24 flex-shrink-0 bg-zinc-800/60 border border-zinc-700 rounded-lg px-1.5 h-8 text-[10px] text-zinc-300 focus:border-indigo-500 outline-none disabled:opacity-60",
16697
+ className: "w-24 flex-shrink-0 bg-zinc-800/60 border border-zinc-700 rounded-lg px-1.5 h-8 text-[10px] text-zinc-300 focus:border-[#C0AE82] outline-none disabled:opacity-60",
16693
16698
  children: [
16694
16699
  /* @__PURE__ */ jsx147("option", { value: "", children: "Deck default" }),
16695
16700
  slideTemplateOptions.map((opt) => /* @__PURE__ */ jsx147("option", { value: opt.id, children: opt.name }, opt.id))
@@ -16702,7 +16707,7 @@ var PresentationJobCard = ({
16702
16707
  value: messageEdits[i] ?? s.message ?? "",
16703
16708
  onChange: (e) => setMessageEdits((prev) => ({ ...prev, [i]: e.target.value })),
16704
16709
  disabled: building,
16705
- className: "flex-1 min-w-0 bg-zinc-800/60 border border-zinc-700 rounded-lg px-3 h-8 text-xs text-zinc-200 focus:border-indigo-500 outline-none disabled:opacity-60"
16710
+ className: "flex-1 min-w-0 bg-zinc-800/60 border border-zinc-700 rounded-lg px-3 h-8 text-xs text-zinc-200 focus:border-[#C0AE82] outline-none disabled:opacity-60"
16706
16711
  }
16707
16712
  ),
16708
16713
  /* @__PURE__ */ jsx147(
@@ -16777,7 +16782,7 @@ var PresentationJobCard = ({
16777
16782
  /* @__PURE__ */ jsx147(
16778
16783
  "div",
16779
16784
  {
16780
- className: "w-10 h-10 rounded-xl bg-indigo-500/10 border border-indigo-500/20 flex items-center justify-center flex-shrink-0 text-indigo-400",
16785
+ className: "w-10 h-10 rounded-xl bg-[#C0AE82]/10 border border-[#C0AE82]/25 flex items-center justify-center flex-shrink-0 text-[#DCC99B]",
16781
16786
  style: { ...t.accentSubtle(0.1), ...t.accentBorder, ...t.accent },
16782
16787
  children: /* @__PURE__ */ jsx147(SlidesIcon, {})
16783
16788
  }
@@ -16792,19 +16797,63 @@ var PresentationJobCard = ({
16792
16797
  generationMode === "template" && /* @__PURE__ */ jsx147("p", { className: "text-xs mt-1", children: isApproved ? /* @__PURE__ */ jsx147("span", { className: "text-emerald-400/90", children: "Approved \u2014 future decks use this format" }) : reviewStatus === "pending_review" ? /* @__PURE__ */ jsx147("span", { className: "text-amber-400/90", children: "Review this deck, then approve to lock the format" }) : null })
16793
16798
  ] }),
16794
16799
  /* @__PURE__ */ jsxs108("div", { className: "flex items-center gap-1.5 flex-shrink-0 flex-wrap justify-end", children: [
16795
- canRegenerate && /* @__PURE__ */ jsxs108(
16796
- "button",
16797
- {
16798
- onClick: handleRegenerate,
16799
- disabled: regenerating || approving,
16800
- title: "Try another design template with the same content",
16801
- className: "flex items-center gap-1.5 px-2.5 h-7 rounded-lg border border-zinc-700 bg-zinc-800 hover:border-zinc-500 text-zinc-300 text-xs font-medium transition-colors disabled:opacity-50",
16802
- children: [
16803
- /* @__PURE__ */ jsx147(RefreshIcon, {}),
16804
- /* @__PURE__ */ jsx147("span", { children: regenerating ? "Switching..." : "Regenerate" })
16805
- ]
16806
- }
16807
- ),
16800
+ /* @__PURE__ */ jsxs108("div", { className: "flex items-center rounded-lg border border-zinc-700 bg-zinc-800 overflow-hidden divide-x divide-zinc-700", children: [
16801
+ /* @__PURE__ */ jsxs108(
16802
+ "a",
16803
+ {
16804
+ href: hasHtml ? `/presentations/${_job_id}/edit` : void 0,
16805
+ "aria-disabled": !hasHtml,
16806
+ title: "Edit presentation content",
16807
+ className: cn(
16808
+ "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60 transition-colors",
16809
+ !hasHtml && "pointer-events-none opacity-40"
16810
+ ),
16811
+ children: [
16812
+ /* @__PURE__ */ jsx147(EditIcon, {}),
16813
+ /* @__PURE__ */ jsx147("span", { children: "Edit" })
16814
+ ]
16815
+ }
16816
+ ),
16817
+ /* @__PURE__ */ jsxs108(
16818
+ "button",
16819
+ {
16820
+ onClick: () => setShowFullscreen(true),
16821
+ disabled: !hasHtml,
16822
+ title: "Open fullscreen preview",
16823
+ className: "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
16824
+ children: [
16825
+ /* @__PURE__ */ jsx147(ExpandIcon, {}),
16826
+ /* @__PURE__ */ jsx147("span", { children: "Preview" })
16827
+ ]
16828
+ }
16829
+ ),
16830
+ canRegenerate && /* @__PURE__ */ jsxs108(
16831
+ "button",
16832
+ {
16833
+ onClick: handleRegenerate,
16834
+ disabled: regenerating || approving,
16835
+ title: "Try another design template with the same content",
16836
+ className: "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60 transition-colors disabled:opacity-40",
16837
+ children: [
16838
+ /* @__PURE__ */ jsx147(RefreshIcon, {}),
16839
+ /* @__PURE__ */ jsx147("span", { children: regenerating ? "Switching\u2026" : "Regenerate" })
16840
+ ]
16841
+ }
16842
+ ),
16843
+ /* @__PURE__ */ jsx147(
16844
+ "button",
16845
+ {
16846
+ onClick: handleShare,
16847
+ disabled: !hasHtml,
16848
+ title: copied ? "Copied!" : "Copy shareable link",
16849
+ className: cn(
16850
+ "flex items-center justify-center w-7 h-7 transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
16851
+ copied ? "text-green-400" : "text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60"
16852
+ ),
16853
+ children: copied ? /* @__PURE__ */ jsx147(CheckIcon, {}) : /* @__PURE__ */ jsx147(ShareIcon, {})
16854
+ }
16855
+ )
16856
+ ] }),
16808
16857
  canApprove && /* @__PURE__ */ jsxs108(
16809
16858
  "button",
16810
16859
  {
@@ -16819,39 +16868,16 @@ var PresentationJobCard = ({
16819
16868
  }
16820
16869
  ),
16821
16870
  isApproved && /* @__PURE__ */ jsx147("span", { className: "flex items-center justify-center w-7 h-7 rounded-lg border border-emerald-500/40 bg-emerald-500/10 text-emerald-400", title: "Format saved", children: /* @__PURE__ */ jsx147(CheckIcon, {}) }),
16822
- /* @__PURE__ */ jsx147(
16823
- "button",
16824
- {
16825
- onClick: handleShare,
16826
- disabled: !hasHtml,
16827
- title: copied ? "Copied!" : "Copy shareable link",
16828
- className: cn(
16829
- "w-7 h-7 rounded-lg border flex items-center justify-center transition-all",
16830
- copied ? "border-green-500/40 bg-green-500/10 text-green-400" : "border-zinc-700 bg-zinc-800 text-zinc-400 hover:border-zinc-500 hover:text-zinc-200",
16831
- "disabled:opacity-30 disabled:cursor-not-allowed"
16832
- ),
16833
- children: copied ? /* @__PURE__ */ jsx147(CheckIcon, {}) : /* @__PURE__ */ jsx147(ShareIcon, {})
16834
- }
16835
- ),
16836
- /* @__PURE__ */ jsxs108(
16837
- "button",
16838
- {
16839
- onClick: () => setShowFullscreen(true),
16840
- disabled: !hasHtml,
16841
- title: "Open fullscreen preview",
16842
- className: "flex items-center gap-1.5 px-2.5 h-7 rounded-lg border border-zinc-700 bg-zinc-800 hover:border-zinc-500 text-zinc-400 hover:text-zinc-200 text-xs font-medium transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
16843
- children: [
16844
- /* @__PURE__ */ jsx147(ExpandIcon, {}),
16845
- /* @__PURE__ */ jsx147("span", { children: "Preview" })
16846
- ]
16847
- }
16848
- ),
16849
16871
  /* @__PURE__ */ jsxs108(
16850
16872
  "button",
16851
16873
  {
16852
16874
  onClick: () => setShowExport(true),
16853
- className: "flex items-center gap-1.5 px-2.5 h-7 bg-indigo-600 hover:bg-indigo-500 active:bg-indigo-700 text-white text-xs font-medium rounded-lg transition-colors",
16854
- style: { ...t.accentBg, ...t.accentText },
16875
+ className: "flex items-center gap-1.5 px-3 h-7 text-xs font-semibold rounded-lg transition-colors",
16876
+ style: {
16877
+ backgroundImage: accentGradient || "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B)",
16878
+ color: "#0A0A0A",
16879
+ ...accentGradient ? t.accentText : {}
16880
+ },
16855
16881
  children: [
16856
16882
  /* @__PURE__ */ jsx147(DownloadIcon, {}),
16857
16883
  /* @__PURE__ */ jsx147("span", { children: "Export" })
@@ -16906,7 +16932,7 @@ var PresentationJobCard = ({
16906
16932
  sendSlideCommand("prevSlide");
16907
16933
  },
16908
16934
  disabled: !hasHtml || !iframeReady,
16909
- className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-indigo-500 hover:text-indigo-400 text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
16935
+ className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-[#C0AE82] hover:text-[#DCC99B] text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
16910
16936
  "aria-label": "Previous slide",
16911
16937
  children: /* @__PURE__ */ jsx147(ChevronLeft2, {})
16912
16938
  }
@@ -16924,7 +16950,7 @@ var PresentationJobCard = ({
16924
16950
  sendSlideCommand("nextSlide");
16925
16951
  },
16926
16952
  disabled: !hasHtml || !iframeReady,
16927
- className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-indigo-500 hover:text-indigo-400 text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
16953
+ className: "w-7 h-7 rounded-full border border-zinc-700 bg-zinc-800 hover:border-[#C0AE82] hover:text-[#DCC99B] text-zinc-400 flex items-center justify-center transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
16928
16954
  "aria-label": "Next slide",
16929
16955
  children: /* @__PURE__ */ jsx147(ChevronRight2, {})
16930
16956
  }
@@ -16951,10 +16977,11 @@ var PresentationJobCard = ({
16951
16977
  import { useCallback as useCallback5, useEffect as useEffect8, useRef as useRef7, useState as useState11 } from "react";
16952
16978
  import { Fragment as Fragment6, jsx as jsx148, jsxs as jsxs109 } from "react/jsx-runtime";
16953
16979
  var DEFAULT_THEME = {
16954
- primary: "#8b5cf6",
16955
- secondary: "#a78bfa",
16956
- accent: "#c4b5fd"
16980
+ primary: "#C0AE82",
16981
+ secondary: "#C4AD7C",
16982
+ accent: "#DCC99B"
16957
16983
  };
16984
+ var GOLD_GRADIENT = "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B)";
16958
16985
  function readableOn(bg) {
16959
16986
  if (!bg || typeof bg !== "string") return "#ffffff";
16960
16987
  const hex = bg.replace("#", "");
@@ -17001,6 +17028,10 @@ var RefreshIcon2 = () => /* @__PURE__ */ jsxs109("svg", { width: "14", height: "
17001
17028
  /* @__PURE__ */ jsx148("polyline", { points: "23 4 23 10 17 10" }),
17002
17029
  /* @__PURE__ */ jsx148("path", { d: "M20.49 15a9 9 0 1 1-2.12-9.36L23 10" })
17003
17030
  ] });
17031
+ var EditIcon2 = () => /* @__PURE__ */ jsxs109("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: [
17032
+ /* @__PURE__ */ jsx148("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
17033
+ /* @__PURE__ */ jsx148("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
17034
+ ] });
17004
17035
  function formatTemplateLabel2(templateId) {
17005
17036
  if (!templateId) return null;
17006
17037
  return templateId.split("-").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
@@ -17022,7 +17053,7 @@ var FullscreenPreviewModal = ({ url, title, onClose }) => {
17022
17053
  return /* @__PURE__ */ jsxs109("div", { className: "fixed inset-0 z-50 bg-black flex flex-col", children: [
17023
17054
  /* @__PURE__ */ jsxs109("div", { className: "flex items-center justify-between gap-4 px-4 h-11 bg-zinc-950/90 border-b border-zinc-800/60 flex-shrink-0", children: [
17024
17055
  /* @__PURE__ */ jsxs109("div", { className: "flex items-center gap-3 min-w-0", children: [
17025
- /* @__PURE__ */ jsx148("span", { className: "text-violet-400 flex-shrink-0", children: /* @__PURE__ */ jsx148(DocumentIcon, {}) }),
17056
+ /* @__PURE__ */ jsx148("span", { className: "text-[#DCC99B] flex-shrink-0", children: /* @__PURE__ */ jsx148(DocumentIcon, {}) }),
17026
17057
  /* @__PURE__ */ jsx148("span", { className: "text-sm font-medium text-zinc-300 truncate", children: title })
17027
17058
  ] }),
17028
17059
  /* @__PURE__ */ jsxs109(
@@ -17503,8 +17534,9 @@ var ResearchReportJobCard = (props) => {
17503
17534
  /* @__PURE__ */ jsx148(
17504
17535
  "div",
17505
17536
  {
17506
- className: "h-[3px] bg-gradient-to-r from-violet-500 via-purple-500 to-violet-500",
17537
+ className: "h-[3px]",
17507
17538
  style: {
17539
+ backgroundImage: "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B, #C0AE82, #8B7D5E)",
17508
17540
  backgroundSize: "200% 100%",
17509
17541
  animation: "gradient-shift 2s ease-in-out infinite"
17510
17542
  }
@@ -17512,7 +17544,7 @@ var ResearchReportJobCard = (props) => {
17512
17544
  ),
17513
17545
  /* @__PURE__ */ jsxs109("div", { className: "p-5", children: [
17514
17546
  /* @__PURE__ */ jsxs109("div", { className: "flex items-start gap-3", children: [
17515
- /* @__PURE__ */ jsx148("div", { className: "w-10 h-10 rounded-xl bg-violet-500/10 border border-violet-500/20 flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx148("span", { className: "text-lg", children: getPhaseIcon() }) }),
17547
+ /* @__PURE__ */ jsx148("div", { className: "w-10 h-10 rounded-xl bg-[#C0AE82]/10 border border-[#C0AE82]/25 flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx148("span", { className: "text-lg", children: getPhaseIcon() }) }),
17516
17548
  /* @__PURE__ */ jsxs109("div", { className: "flex-1 min-w-0", children: [
17517
17549
  /* @__PURE__ */ jsx148("h3", { className: "text-sm font-semibold text-zinc-100 truncate leading-tight", children: title || "Generating Research Report" }),
17518
17550
  /* @__PURE__ */ jsxs109("p", { className: "text-xs text-zinc-500 mt-0.5", children: [
@@ -17527,8 +17559,8 @@ var ResearchReportJobCard = (props) => {
17527
17559
  /* @__PURE__ */ jsx148("div", { className: "h-2 bg-zinc-800 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx148(
17528
17560
  "div",
17529
17561
  {
17530
- className: "h-full bg-gradient-to-r from-violet-500 to-purple-500 rounded-full transition-all duration-500 ease-out",
17531
- style: { width: `${Math.max(pct, 2)}%` }
17562
+ className: "h-full rounded-full transition-all duration-500 ease-out",
17563
+ style: { width: `${Math.max(pct, 2)}%`, backgroundImage: GOLD_GRADIENT }
17532
17564
  }
17533
17565
  ) }),
17534
17566
  /* @__PURE__ */ jsxs109("span", { className: "absolute right-0 -top-5 text-xs text-zinc-500 font-medium tabular-nums", children: [
@@ -17537,7 +17569,7 @@ var ResearchReportJobCard = (props) => {
17537
17569
  ] })
17538
17570
  ] }),
17539
17571
  /* @__PURE__ */ jsxs109("div", { className: "flex items-center gap-2", children: [
17540
- /* @__PURE__ */ jsx148("div", { className: "w-2 h-2 rounded-full bg-violet-500 animate-pulse" }),
17572
+ /* @__PURE__ */ jsx148("div", { className: "w-2 h-2 rounded-full bg-[#C0AE82] animate-pulse" }),
17541
17573
  /* @__PURE__ */ jsx148("span", { className: "text-xs text-zinc-400", children: step })
17542
17574
  ] }),
17543
17575
  phase === "ai_generation" && searchesTotal > 0 && /* @__PURE__ */ jsxs109("div", { className: "pt-1", children: [
@@ -17554,7 +17586,7 @@ var ResearchReportJobCard = (props) => {
17554
17586
  {
17555
17587
  className: cn(
17556
17588
  "flex-1 h-1 rounded-full transition-all duration-300",
17557
- i < searchesCompleted ? "bg-violet-500" : i === searchesCompleted ? "bg-violet-500/50 animate-pulse" : "bg-zinc-700"
17589
+ i < searchesCompleted ? "bg-[#C0AE82]" : i === searchesCompleted ? "bg-[#C0AE82]/50 animate-pulse" : "bg-zinc-700"
17558
17590
  )
17559
17591
  },
17560
17592
  i
@@ -17588,12 +17620,12 @@ var ResearchReportJobCard = (props) => {
17588
17620
  "div",
17589
17621
  {
17590
17622
  className: "h-[3px]",
17591
- style: { background: "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B)" }
17623
+ style: { backgroundImage: GOLD_GRADIENT }
17592
17624
  }
17593
17625
  ),
17594
17626
  /* @__PURE__ */ jsxs109("div", { className: "p-5", children: [
17595
17627
  /* @__PURE__ */ jsxs109("div", { className: "flex items-start gap-3", children: [
17596
- /* @__PURE__ */ jsx148("div", { className: "w-10 h-10 rounded-xl bg-violet-500/10 border border-violet-500/20 flex items-center justify-center flex-shrink-0 text-violet-300", children: /* @__PURE__ */ jsx148(DocumentIcon, {}) }),
17628
+ /* @__PURE__ */ jsx148("div", { className: "w-10 h-10 rounded-xl bg-[#C0AE82]/10 border border-[#C0AE82]/25 flex items-center justify-center flex-shrink-0 text-[#DCC99B]", children: /* @__PURE__ */ jsx148(DocumentIcon, {}) }),
17597
17629
  /* @__PURE__ */ jsxs109("div", { className: "flex-1 min-w-0", children: [
17598
17630
  /* @__PURE__ */ jsx148("h3", { className: "text-sm font-semibold text-zinc-100 truncate leading-tight", children: title || "Report outline" }),
17599
17631
  /* @__PURE__ */ jsxs109("p", { className: "text-xs text-amber-400/90 mt-0.5", children: [
@@ -17614,7 +17646,7 @@ var ResearchReportJobCard = (props) => {
17614
17646
  value: headingEdits[i] ?? s.heading ?? "",
17615
17647
  onChange: (e) => setHeadingEdits((prev) => ({ ...prev, [i]: e.target.value })),
17616
17648
  disabled: building,
17617
- className: "flex-1 min-w-0 bg-zinc-800/60 border border-zinc-700 rounded-lg px-3 h-8 text-xs text-zinc-200 focus:border-violet-500 outline-none disabled:opacity-60"
17649
+ className: "flex-1 min-w-0 bg-zinc-800/60 border border-zinc-700 rounded-lg px-3 h-8 text-xs text-zinc-200 focus:border-[#C0AE82] outline-none disabled:opacity-60"
17618
17650
  }
17619
17651
  ),
17620
17652
  /* @__PURE__ */ jsx148(
@@ -17876,19 +17908,75 @@ var ResearchReportJobCard = (props) => {
17876
17908
  generationMode === "template" && /* @__PURE__ */ jsx148("p", { className: "text-xs mt-1", children: isApproved ? /* @__PURE__ */ jsx148("span", { className: "text-emerald-400/90", children: "Approved \u2014 future reports use this format" }) : reviewStatus === "pending_review" ? /* @__PURE__ */ jsx148("span", { className: "text-amber-400/90", children: "Review this report, then approve to lock the layout" }) : null })
17877
17909
  ] }),
17878
17910
  /* @__PURE__ */ jsxs109("div", { className: "flex items-center gap-1.5 flex-shrink-0 flex-wrap justify-end", children: [
17879
- canRegenerate && /* @__PURE__ */ jsxs109(
17880
- "button",
17881
- {
17882
- onClick: handleRegenerate,
17883
- disabled: regenerating || approving,
17884
- title: "Try another report template with the same data",
17885
- className: "flex items-center gap-1.5 px-2.5 h-7 rounded-lg border border-zinc-700 bg-zinc-800 hover:border-zinc-500 text-zinc-300 text-xs font-medium transition-colors disabled:opacity-50",
17886
- children: [
17887
- /* @__PURE__ */ jsx148(RefreshIcon2, {}),
17888
- /* @__PURE__ */ jsx148("span", { children: regenerating ? "Switching..." : "Regenerate" })
17889
- ]
17890
- }
17891
- ),
17911
+ /* @__PURE__ */ jsxs109("div", { className: "flex items-center rounded-lg border border-zinc-700 bg-zinc-800 overflow-hidden divide-x divide-zinc-700", children: [
17912
+ /* @__PURE__ */ jsxs109(
17913
+ "a",
17914
+ {
17915
+ href: htmlUrl ? `/reports/${job_id}/edit` : void 0,
17916
+ "aria-disabled": !htmlUrl,
17917
+ title: "Edit report content",
17918
+ className: cn(
17919
+ "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60 transition-colors",
17920
+ !htmlUrl && "pointer-events-none opacity-40"
17921
+ ),
17922
+ children: [
17923
+ /* @__PURE__ */ jsx148(EditIcon2, {}),
17924
+ /* @__PURE__ */ jsx148("span", { children: "Edit" })
17925
+ ]
17926
+ }
17927
+ ),
17928
+ /* @__PURE__ */ jsxs109(
17929
+ "button",
17930
+ {
17931
+ onClick: () => setShowPreview(true),
17932
+ disabled: !hasHTML,
17933
+ title: "Preview report",
17934
+ className: "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
17935
+ children: [
17936
+ /* @__PURE__ */ jsx148(ExpandIcon2, {}),
17937
+ /* @__PURE__ */ jsx148("span", { children: "Preview" })
17938
+ ]
17939
+ }
17940
+ ),
17941
+ canRegenerate && /* @__PURE__ */ jsxs109(
17942
+ "button",
17943
+ {
17944
+ onClick: handleRegenerate,
17945
+ disabled: regenerating || approving,
17946
+ title: "Try another report template with the same data",
17947
+ className: "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60 transition-colors disabled:opacity-40",
17948
+ children: [
17949
+ /* @__PURE__ */ jsx148(RefreshIcon2, {}),
17950
+ /* @__PURE__ */ jsx148("span", { children: regenerating ? "Switching\u2026" : "Regenerate" })
17951
+ ]
17952
+ }
17953
+ ),
17954
+ /* @__PURE__ */ jsx148(
17955
+ "button",
17956
+ {
17957
+ onClick: handleShare,
17958
+ disabled: !canShare,
17959
+ title: !canShare && reviewStatus === "pending_review" ? "Approve the report to enable sharing" : copied ? "Copied!" : "Copy shareable link",
17960
+ className: cn(
17961
+ "flex items-center justify-center w-7 h-7 transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
17962
+ copied ? "text-green-400" : "text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60"
17963
+ ),
17964
+ children: copied ? /* @__PURE__ */ jsx148(CheckIcon2, {}) : /* @__PURE__ */ jsx148(ShareIcon2, {})
17965
+ }
17966
+ ),
17967
+ pdfUrl && /* @__PURE__ */ jsxs109(
17968
+ "button",
17969
+ {
17970
+ onClick: handleDownloadPdf,
17971
+ title: "Download PDF",
17972
+ className: "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium text-zinc-300 hover:text-zinc-100 hover:bg-zinc-700/60 transition-colors",
17973
+ children: [
17974
+ /* @__PURE__ */ jsx148(DownloadIcon2, {}),
17975
+ /* @__PURE__ */ jsx148("span", { children: "PDF" })
17976
+ ]
17977
+ }
17978
+ )
17979
+ ] }),
17892
17980
  canApprove && /* @__PURE__ */ jsxs109(
17893
17981
  "button",
17894
17982
  {
@@ -17903,53 +17991,14 @@ var ResearchReportJobCard = (props) => {
17903
17991
  }
17904
17992
  ),
17905
17993
  isApproved && /* @__PURE__ */ jsx148("span", { className: "flex items-center justify-center w-7 h-7 rounded-lg border border-emerald-500/40 bg-emerald-500/10 text-emerald-400", title: "Format saved", children: /* @__PURE__ */ jsx148(CheckIcon2, {}) }),
17906
- /* @__PURE__ */ jsx148(
17907
- "button",
17908
- {
17909
- onClick: handleShare,
17910
- disabled: !canShare,
17911
- title: !canShare && reviewStatus === "pending_review" ? "Approve the report to enable sharing" : copied ? "Copied!" : "Copy shareable link",
17912
- className: cn(
17913
- "w-7 h-7 rounded-lg border flex items-center justify-center transition-all",
17914
- copied ? "border-green-500/40 bg-green-500/10 text-green-400" : "border-zinc-700 bg-zinc-800 text-zinc-400 hover:border-zinc-500 hover:text-zinc-200",
17915
- "disabled:opacity-30 disabled:cursor-not-allowed"
17916
- ),
17917
- children: copied ? /* @__PURE__ */ jsx148(CheckIcon2, {}) : /* @__PURE__ */ jsx148(ShareIcon2, {})
17918
- }
17919
- ),
17920
- /* @__PURE__ */ jsxs109(
17921
- "button",
17922
- {
17923
- onClick: () => setShowPreview(true),
17924
- disabled: !hasHTML,
17925
- title: "Preview report",
17926
- className: "flex items-center gap-1.5 px-2.5 h-7 rounded-lg border border-zinc-700 bg-zinc-800 hover:border-zinc-500 text-zinc-400 hover:text-zinc-200 text-xs font-medium transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
17927
- children: [
17928
- /* @__PURE__ */ jsx148(ExpandIcon2, {}),
17929
- /* @__PURE__ */ jsx148("span", { children: "Preview" })
17930
- ]
17931
- }
17932
- ),
17933
- pdfUrl && /* @__PURE__ */ jsxs109(
17934
- "button",
17935
- {
17936
- onClick: handleDownloadPdf,
17937
- title: "Download PDF",
17938
- className: "flex items-center gap-1.5 px-2.5 h-7 rounded-lg border border-zinc-700 bg-zinc-800 hover:border-zinc-500 text-zinc-400 hover:text-zinc-200 text-xs font-medium transition-colors",
17939
- children: [
17940
- /* @__PURE__ */ jsx148(DownloadIcon2, {}),
17941
- /* @__PURE__ */ jsx148("span", { children: "PDF" })
17942
- ]
17943
- }
17944
- ),
17945
17994
  /* @__PURE__ */ jsxs109(
17946
17995
  "button",
17947
17996
  {
17948
17997
  onClick: handleDownload,
17949
17998
  disabled: !hasHTML,
17950
- className: "flex items-center gap-1.5 px-2.5 h-7 text-xs font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
17951
- style: { backgroundColor: primaryColor, color: readableOn(primaryColor) },
17952
- onMouseEnter: (e) => e.currentTarget.style.filter = "brightness(1.15)",
17999
+ className: "flex items-center gap-1.5 px-3 h-7 text-xs font-semibold rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
18000
+ style: { backgroundImage: GOLD_GRADIENT, color: readableOn(primaryColor) },
18001
+ onMouseEnter: (e) => e.currentTarget.style.filter = "brightness(1.1)",
17953
18002
  onMouseLeave: (e) => e.currentTarget.style.filter = "brightness(1)",
17954
18003
  children: [
17955
18004
  /* @__PURE__ */ jsx148(DownloadIcon2, {}),
@@ -18147,7 +18196,7 @@ var WebSearchJobCard = ({
18147
18196
  {
18148
18197
  className: "h-[3px]",
18149
18198
  style: {
18150
- background: "linear-gradient(90deg, #d97706, #f59e0b, #d97706)",
18199
+ backgroundImage: "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B, #C0AE82, #8B7D5E)",
18151
18200
  backgroundSize: "200% 100%",
18152
18201
  animation: "gradient-shift 2s ease-in-out infinite"
18153
18202
  }
@@ -18169,7 +18218,7 @@ var WebSearchJobCard = ({
18169
18218
  className: "h-full rounded-full transition-all duration-500 ease-out",
18170
18219
  style: {
18171
18220
  width: `${Math.max(pct, 2)}%`,
18172
- background: "linear-gradient(90deg, #d97706, #f59e0b)"
18221
+ backgroundImage: "linear-gradient(90deg, #8B7D5E, #C0AE82, #DCC99B)"
18173
18222
  }
18174
18223
  }
18175
18224
  ) }),
@@ -18179,7 +18228,7 @@ var WebSearchJobCard = ({
18179
18228
  ] })
18180
18229
  ] }),
18181
18230
  /* @__PURE__ */ jsxs110("div", { className: "flex items-center gap-2", children: [
18182
- /* @__PURE__ */ jsx149("div", { className: "w-2 h-2 rounded-full bg-amber-500 animate-pulse flex-shrink-0" }),
18231
+ /* @__PURE__ */ jsx149("div", { className: "w-2 h-2 rounded-full bg-[#C0AE82] animate-pulse flex-shrink-0" }),
18183
18232
  /* @__PURE__ */ jsx149("span", { className: "text-xs text-zinc-400", children: step })
18184
18233
  ] }),
18185
18234
  searchesTotal > 0 && /* @__PURE__ */ jsxs110("div", { className: "pt-1", children: [
@@ -18196,7 +18245,7 @@ var WebSearchJobCard = ({
18196
18245
  {
18197
18246
  className: cn(
18198
18247
  "flex-1 h-1 rounded-full transition-all duration-300",
18199
- i < searchesCompleted ? "bg-amber-500" : phase === "ai_generation" && i === searchesCompleted ? "bg-amber-500/50 animate-pulse" : "bg-zinc-700"
18248
+ i < searchesCompleted ? "bg-[#C0AE82]" : phase === "ai_generation" && i === searchesCompleted ? "bg-[#C0AE82]/50 animate-pulse" : "bg-zinc-700"
18200
18249
  )
18201
18250
  },
18202
18251
  i
@@ -21436,7 +21485,7 @@ function PlatformMetricsBanner({
21436
21485
  return /* @__PURE__ */ jsxs132(
21437
21486
  "div",
21438
21487
  {
21439
- className: "\r\n grid grid-cols-1 gap-3 rounded-xl py-4 px-4 shadow-sm\r\n md:flex md:overflow-x-auto md:gap-6 md:rounded-l-xl md:py-4 md:px-4 md:items-center md:gap-0 md:px-0 md:ml-8\r\n ",
21488
+ className: "\n grid grid-cols-1 gap-3 rounded-xl py-4 px-4 shadow-sm\n md:flex md:overflow-x-auto md:gap-6 md:rounded-l-xl md:py-4 md:px-4 md:items-center md:gap-0 md:px-0 md:ml-8\n ",
21440
21489
  style: { backgroundColor: bgColor },
21441
21490
  children: [
21442
21491
  /* @__PURE__ */ jsxs132("div", { className: "flex flex-col items-center md:min-w-0", children: [