@loafmarkets/ui 0.1.405 → 0.1.406

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
@@ -5076,6 +5076,7 @@ var Header = ({
5076
5076
  onOrdersNavigate: _onOrdersNavigate,
5077
5077
  onWalletNavigate: _onWalletNavigate,
5078
5078
  onSettingsClick,
5079
+ onReferClick,
5079
5080
  portfolioSummary,
5080
5081
  fundsPending = false,
5081
5082
  transparentOnTop = false,
@@ -5514,7 +5515,7 @@ var Header = ({
5514
5515
  onClick: (event) => {
5515
5516
  event?.preventDefault();
5516
5517
  closeMenus();
5517
- onSettingsClick?.();
5518
+ (onReferClick ?? onSettingsClick)?.();
5518
5519
  },
5519
5520
  children: "Refer"
5520
5521
  }
@@ -5557,7 +5558,7 @@ var Header = ({
5557
5558
  onClick: (event) => {
5558
5559
  event?.preventDefault();
5559
5560
  closeMenus();
5560
- onSettingsClick?.();
5561
+ (onReferClick ?? onSettingsClick)?.();
5561
5562
  },
5562
5563
  children: /* @__PURE__ */ jsx(MenuItem, { children: "Refer" })
5563
5564
  }
@@ -7675,12 +7676,12 @@ var LoginPopup = ({
7675
7676
  marginBottom: "1.25rem"
7676
7677
  }, children: [
7677
7678
  /* @__PURE__ */ jsx("div", { style: { width: 7, height: 7, borderRadius: "50%", background: "#0052FF", flexShrink: 0 } }),
7678
- /* @__PURE__ */ jsx("span", { style: { fontSize: "0.72rem", fontWeight: 600, color: "#6b9fff", letterSpacing: "0.02em" }, children: "Base Sepolia" })
7679
+ /* @__PURE__ */ jsx("span", { style: { fontSize: "0.72rem", fontWeight: 600, color: "#6b9fff", letterSpacing: "0.02em" }, children: "Arbitrum Sepolia" })
7679
7680
  ] }),
7680
7681
  /* @__PURE__ */ jsxs("p", { style: { fontSize: "0.82rem", color: "rgba(255,255,255,0.5)", textAlign: "center", marginBottom: "1.1rem", lineHeight: 1.5, maxWidth: 320 }, children: [
7681
7682
  "Send ",
7682
7683
  /* @__PURE__ */ jsx("strong", { style: { color: "rgba(255,255,255,0.8)" }, children: "USDC" }),
7683
- " on Base Sepolia to the address below. Only send on this network."
7684
+ " on Arbitrum Sepolia to the address below. Only send on this network."
7684
7685
  ] }),
7685
7686
  /* @__PURE__ */ jsxs("div", { style: {
7686
7687
  width: "100%",
@@ -10325,7 +10326,7 @@ function PropertyOverview({
10325
10326
  isLoading = false,
10326
10327
  ticker,
10327
10328
  contractAddress,
10328
- chain = "Base (Ethereum L2)",
10329
+ chain = "Arbitrum (Ethereum L2)",
10329
10330
  volume24h,
10330
10331
  priceHistory: priceHistoryProp,
10331
10332
  beta = false,
@@ -10364,13 +10365,13 @@ function PropertyOverview({
10364
10365
  const resolvedPropertyType = rawPropertyType?.toLowerCase() === "house" ? "Residential" : rawPropertyType;
10365
10366
  const galleryImages = images ?? [];
10366
10367
  const chainValue = /* @__PURE__ */ jsxs(ChainLogos, { children: [
10367
- /* @__PURE__ */ jsx(ChainLogoImg, { src: "/Base-Symbol.png", alt: "Base" }),
10368
+ /* @__PURE__ */ jsx(ChainLogoImg, { src: "/Arbitrum-Symbol.svg", alt: "Arbitrum" }),
10368
10369
  /* @__PURE__ */ jsx(ChainLogoImg, { src: "/Ethereum-Logo.png", alt: "Ethereum", style: { filter: "brightness(0) invert(1)" } }),
10369
10370
  /* @__PURE__ */ jsx("span", { children: chain })
10370
10371
  ] });
10371
10372
  const tokenDetailsItems = [
10372
10373
  { label: "Chain", value: chainValue },
10373
- { label: "On-Chain Address", value: contractAddress ? truncateAddress(contractAddress) : "\u2014", mono: true, link: contractAddress ? `https://sepolia.basescan.org/address/${contractAddress}` : void 0, copyValue: contractAddress },
10374
+ { label: "On-Chain Address", value: contractAddress ? truncateAddress(contractAddress) : "\u2014", mono: true, link: contractAddress ? `https://sepolia.arbiscan.io/address/${contractAddress}` : void 0, copyValue: contractAddress },
10374
10375
  { label: "Token Ticker", value: ticker ?? "\u2014" },
10375
10376
  { label: "Total Circulating Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued?.toLocaleString() ?? "\u2014" },
10376
10377
  { label: "Legal Structuring", value: "See Documents", docLink: true },
@@ -10390,7 +10391,9 @@ function PropertyOverview({
10390
10391
  ];
10391
10392
  const growthPct = overviewData?.growth5Yr;
10392
10393
  const propertyStats = [
10393
- { label: "Property Value", value: isLoading && tokenMarketCap == null ? loadingSkeleton : tokenMarketCap ? fmtDollar(tokenMarketCap) : "\u2014" },
10394
+ // Property Value = the API offeringValuation (OverviewResponse.offeringValuation), NOT
10395
+ // midPrice×tokensIssued market cap (fixed 2026-07-22). null → '—', never a fabricated cap.
10396
+ { label: "Property Value", value: isLoading && overviewData?.offeringValuation == null ? loadingSkeleton : overviewData?.offeringValuation ? fmtDollar(overviewData.offeringValuation) : "\u2014" },
10394
10397
  ...beta ? [] : [{ label: "Offers", value: "3" }],
10395
10398
  { label: "Growth (5yr)", value: growthPct != null ? `${growthPct > 0 ? "+" : ""}${growthPct}%` : "\u2014" },
10396
10399
  { label: "Last Dividend", value: overviewData?.lastDividend != null ? `$${overviewData.lastDividend.toFixed(2)}` : "\u2014" },
@@ -14891,7 +14894,7 @@ var getOrderStatusMeta = (statusRaw) => {
14891
14894
  return { color: "#E6C87E", bg: "rgba(240,185,11,0.15)" };
14892
14895
  };
14893
14896
  var ChevronDown = () => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "rgba(255,255,255,0.5)", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "6 9 12 15 18 9" }) });
14894
- var BaseScanIconLink = ({ url }) => /* @__PURE__ */ jsx(TxLink, { href: url, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
14897
+ var ArbiscanIconLink = ({ url }) => /* @__PURE__ */ jsx(TxLink, { href: url, target: "_blank", rel: "noopener noreferrer", title: "View on Arbiscan", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
14895
14898
  /* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
14896
14899
  /* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
14897
14900
  /* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
@@ -14916,7 +14919,7 @@ function PortfolioActivityPanel({
14916
14919
  defaultTab,
14917
14920
  onTabChange,
14918
14921
  pageSize = ACTIVITY_PAGE_SIZE_DEFAULT,
14919
- blockExplorerBaseUrl: _blockExplorerBaseUrl = "https://sepolia.basescan.org/tx",
14922
+ blockExplorerBaseUrl: _blockExplorerBaseUrl = "https://sepolia.arbiscan.io/tx",
14920
14923
  className,
14921
14924
  style
14922
14925
  }) {
@@ -15360,7 +15363,7 @@ function PortfolioActivityPanel({
15360
15363
  /* @__PURE__ */ jsxs("span", { style: { display: "inline-flex", alignItems: "center", gap: "0.35rem" }, children: [
15361
15364
  formatNumber2(order.quantity),
15362
15365
  order.ticker && /* @__PURE__ */ jsx(TickerTag, { style: { marginLeft: 0 }, children: order.ticker.toUpperCase() }),
15363
- order.txHash && /* @__PURE__ */ jsx(BaseScanIconLink, { url: `${_blockExplorerBaseUrl}/${order.txHash}` })
15366
+ order.txHash && /* @__PURE__ */ jsx(ArbiscanIconLink, { url: `${_blockExplorerBaseUrl}/${order.txHash}` })
15364
15367
  ] })
15365
15368
  ] }),
15366
15369
  /* @__PURE__ */ jsxs(CUnitsCell, { children: [
@@ -15413,7 +15416,7 @@ function PortfolioActivityPanel({
15413
15416
  order.status === "REJECTED" && order.rejectionReason && /* @__PURE__ */ jsx(CellText, { $muted: true, style: { fontSize: "0.62rem", marginTop: "0.2rem", maxWidth: "120px", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, title: order.rejectionReason, children: order.rejectionReason })
15414
15417
  ] }),
15415
15418
  /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(order.createdAt) }) }),
15416
- /* @__PURE__ */ jsx(GridCell, { children: order.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${order.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15419
+ /* @__PURE__ */ jsx(GridCell, { children: order.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${order.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on Arbiscan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15417
15420
  /* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
15418
15421
  /* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
15419
15422
  /* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
@@ -15657,7 +15660,7 @@ function PortfolioActivityPanel({
15657
15660
  /* @__PURE__ */ jsxs("span", { style: { display: "inline-flex", alignItems: "center", gap: "0.35rem" }, children: [
15658
15661
  formatNumber2(trade.quantity),
15659
15662
  trade.ticker && /* @__PURE__ */ jsx(TickerTag, { style: { marginLeft: 0 }, children: trade.ticker.toUpperCase() }),
15660
- trade.txHash && /* @__PURE__ */ jsx(BaseScanIconLink, { url: `${_blockExplorerBaseUrl}/${trade.txHash}` })
15663
+ trade.txHash && /* @__PURE__ */ jsx(ArbiscanIconLink, { url: `${_blockExplorerBaseUrl}/${trade.txHash}` })
15661
15664
  ] })
15662
15665
  ] }),
15663
15666
  /* @__PURE__ */ jsxs(CUnitsCell, { children: [
@@ -15724,7 +15727,7 @@ function PortfolioActivityPanel({
15724
15727
  /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatCurrency4(trade.price * trade.quantity) }) }),
15725
15728
  /* @__PURE__ */ jsx(GridCell, { children: settlementMeta ? /* @__PURE__ */ jsx(ActivityTag, { $color: settlementMeta.color, $bg: settlementMeta.bg, children: settlementLabel }) : /* @__PURE__ */ jsx(CellText, { $muted: true, children: "\u2014" }) }),
15726
15729
  /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(trade.executedAt) }) }),
15727
- /* @__PURE__ */ jsx(GridCell, { children: trade.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${trade.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15730
+ /* @__PURE__ */ jsx(GridCell, { children: trade.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${trade.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on Arbiscan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15728
15731
  /* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
15729
15732
  /* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
15730
15733
  /* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
@@ -15771,7 +15774,7 @@ function PortfolioActivityPanel({
15771
15774
  /* @__PURE__ */ jsx(CDValue, { children: formatTimestamp(t.createdAt) })
15772
15775
  ] })
15773
15776
  ] }),
15774
- txUrl && /* @__PURE__ */ jsx(CExpandedLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", children: "View on BaseScan \u2197" })
15777
+ txUrl && /* @__PURE__ */ jsx(CExpandedLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", children: "View on Arbiscan \u2197" })
15775
15778
  ] })
15776
15779
  ] }, rowKey);
15777
15780
  }),
@@ -15797,7 +15800,7 @@ function PortfolioActivityPanel({
15797
15800
  /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatAddress(t.address) }) }),
15798
15801
  /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(ActivityTag, { $color: statusMeta.color, $bg: statusMeta.bg, children: prettyLabel(t.status) }) }),
15799
15802
  /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(t.createdAt) }) }),
15800
- /* @__PURE__ */ jsx(GridCell, { children: txUrl && /* @__PURE__ */ jsx(TxLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15803
+ /* @__PURE__ */ jsx(GridCell, { children: txUrl && /* @__PURE__ */ jsx(TxLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", title: "View on Arbiscan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
15801
15804
  /* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
15802
15805
  /* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
15803
15806
  /* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
@@ -18900,13 +18903,14 @@ var CloseButton3 = styled10.button`
18900
18903
  var MainImageContainer = styled10.div`
18901
18904
  position: relative;
18902
18905
  flex: 1;
18906
+ min-height: 0;
18903
18907
  display: flex;
18904
18908
  align-items: center;
18905
18909
  justify-content: center;
18906
- padding: 80px 20px 140px;
18910
+ padding: 20px 20px 160px;
18907
18911
 
18908
18912
  @media (max-width: 768px) {
18909
- padding: 60px 0 110px;
18913
+ padding: 10px 0 130px;
18910
18914
  }
18911
18915
  `;
18912
18916
  var MainImage = styled10.img`
@@ -18918,8 +18922,11 @@ var MainImage = styled10.img`
18918
18922
  opacity: ${(p) => p.$visible ? 1 : 0};
18919
18923
  pointer-events: ${(p) => p.$visible ? "auto" : "none"};
18920
18924
  transition: opacity 300ms ease;
18921
- /* Inset box excludes the bottom thumbnail strip so margin:auto centres the image in the
18922
- space ABOVE the thumbnails (absolute ignores the parent's padding). */
18925
+ /* All slides share the same absolute box so switching only crossfades opacity
18926
+ no relative↔absolute size jump (the "grow then shrink" on navigation).
18927
+ The inset box excludes the bottom thumbnail strip so margin:auto centres the image
18928
+ in the space ABOVE the thumbnails (absolute positioning ignores the parent's padding,
18929
+ which otherwise let the image sink behind the thumbnails / "lean down"). */
18923
18930
  position: absolute;
18924
18931
  top: 24px;
18925
18932
  left: 24px;
@@ -19113,9 +19120,11 @@ function PropertyPhotoGallery({
19113
19120
  isOpen,
19114
19121
  onClose,
19115
19122
  startIndex = 0,
19123
+ startWithVideo = false,
19116
19124
  title = "28 Derby Street, Vaucluse",
19117
19125
  subtitle = "Elara \u2014 Luxury Harbour Residence",
19118
- images
19126
+ images,
19127
+ videoUrl
19119
19128
  }) {
19120
19129
  const galleryImages = images?.length ? images : DEFAULT_IMAGES;
19121
19130
  if (!isOpen) return null;
@@ -19124,16 +19133,19 @@ function PropertyPhotoGallery({
19124
19133
  {
19125
19134
  galleryImages,
19126
19135
  startIndex,
19136
+ startWithVideo,
19127
19137
  title,
19128
19138
  subtitle,
19129
- onClose
19139
+ onClose,
19140
+ videoUrl
19130
19141
  },
19131
- `${startIndex}-${galleryImages.length}`
19142
+ `${startIndex}-${galleryImages.length}-${startWithVideo}`
19132
19143
  );
19133
19144
  }
19134
- function GalleryContent({ galleryImages, startIndex, title, subtitle, onClose }) {
19145
+ function GalleryContent({ galleryImages, startIndex, startWithVideo, title, subtitle, onClose, videoUrl }) {
19135
19146
  const [currentIndex, setCurrentIndex] = useState(() => clampIndex(startIndex, galleryImages.length));
19136
19147
  const [activeHotspotId, setActiveHotspotId] = useState(null);
19148
+ const [showVideo, setShowVideo] = useState(startWithVideo ?? false);
19137
19149
  const sliderRef = useRef(null);
19138
19150
  const [isDragging, setIsDragging] = useState(false);
19139
19151
  const wasDraggingRef = useRef(false);
@@ -19183,7 +19195,7 @@ function GalleryContent({ galleryImages, startIndex, title, subtitle, onClose })
19183
19195
  ] }),
19184
19196
  /* @__PURE__ */ jsx(CloseButton3, { onClick: onClose, "aria-label": "Close gallery", children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "22", height: "22", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { d: "M6 6l12 12M6 18L18 6" }) }) })
19185
19197
  ] }),
19186
- /* @__PURE__ */ jsxs(SliderContainer, { onClick: (event) => event.stopPropagation(), children: [
19198
+ !showVideo && /* @__PURE__ */ jsxs(SliderContainer, { onClick: (event) => event.stopPropagation(), children: [
19187
19199
  /* @__PURE__ */ jsxs(
19188
19200
  SliderTrack,
19189
19201
  {
@@ -19246,7 +19258,21 @@ function GalleryContent({ galleryImages, startIndex, title, subtitle, onClose })
19246
19258
  children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "22", height: "22", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { d: "M15 18l-6-6 6-6" }) })
19247
19259
  }
19248
19260
  ),
19249
- galleryImages.map((image, idx) => /* @__PURE__ */ jsx(MainImage, { src: image.src, alt: image.alt, $visible: idx === currentIndex }, image.alt)),
19261
+ showVideo && videoUrl ? /* @__PURE__ */ jsx(GalleryVideoWrap, { children: /* @__PURE__ */ jsx(
19262
+ "video",
19263
+ {
19264
+ autoPlay: true,
19265
+ loop: true,
19266
+ playsInline: true,
19267
+ muted: true,
19268
+ controls: true,
19269
+ onVolumeChange: (e) => {
19270
+ if (!e.currentTarget.muted) e.currentTarget.muted = true;
19271
+ },
19272
+ style: { objectFit: "contain", borderRadius: 12, boxShadow: "0 30px 80px rgba(0,0,0,0.55)" },
19273
+ children: /* @__PURE__ */ jsx("source", { src: videoUrl, type: "video/mp4" })
19274
+ }
19275
+ ) }) : galleryImages.map((image, idx) => /* @__PURE__ */ jsx(MainImage, { src: image.src, alt: image.alt, $visible: idx === currentIndex }, image.alt)),
19250
19276
  galleryImages[currentIndex]?.hotspots?.map((hotspot) => /* @__PURE__ */ jsx(
19251
19277
  Hotspot,
19252
19278
  {
@@ -19291,11 +19317,83 @@ function GalleryContent({ galleryImages, startIndex, title, subtitle, onClose })
19291
19317
  ]
19292
19318
  }
19293
19319
  ),
19294
- /* @__PURE__ */ jsx(ThumbnailStrip, { onClick: (event) => event.stopPropagation(), children: galleryImages.map((image, idx) => /* @__PURE__ */ jsx(Thumbnail3, { $active: idx === currentIndex, onClick: () => setCurrentIndex(idx), "aria-label": `Preview ${image.label}`, children: /* @__PURE__ */ jsx("img", { src: image.src, alt: image.alt }) }, image.alt)) })
19320
+ /* @__PURE__ */ jsxs(ThumbnailStrip, { onClick: (event) => event.stopPropagation(), children: [
19321
+ galleryImages.map((image, idx) => /* @__PURE__ */ jsx(Thumbnail3, { $active: !showVideo && idx === currentIndex, onClick: () => {
19322
+ setShowVideo(false);
19323
+ setCurrentIndex(idx);
19324
+ }, "aria-label": `Preview ${image.label}`, children: /* @__PURE__ */ jsx("img", { src: image.src, alt: image.alt }) }, image.alt)),
19325
+ videoUrl && /* @__PURE__ */ jsxs(Fragment, { children: [
19326
+ /* @__PURE__ */ jsx(ThumbnailDivider, {}),
19327
+ /* @__PURE__ */ jsxs(VideoBtn, { $active: showVideo, onClick: () => setShowVideo(true), children: [
19328
+ /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
19329
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "4", width: "14", height: "16", rx: "2" }),
19330
+ /* @__PURE__ */ jsx("path", { d: "M16 8l6-4v16l-6-4z" })
19331
+ ] }),
19332
+ "Video"
19333
+ ] })
19334
+ ] })
19335
+ ] })
19295
19336
  ]
19296
19337
  }
19297
19338
  );
19298
19339
  }
19340
+ var GalleryVideoWrap = styled10.div`
19341
+ position: absolute;
19342
+ inset: 0;
19343
+ display: flex;
19344
+ align-items: center;
19345
+ justify-content: center;
19346
+ padding: 20px 20px 160px;
19347
+
19348
+ video {
19349
+ max-width: 90%;
19350
+ max-height: 100%;
19351
+ }
19352
+
19353
+ /* Property videos stay permanently muted — remove the volume + mute buttons
19354
+ from the native player (Chrome/Edge/Safari/iOS/Android). Firefox ignores
19355
+ these and is covered by the onVolumeChange force-mute fallback. */
19356
+ video::-webkit-media-controls-mute-button,
19357
+ video::-webkit-media-controls-volume-slider,
19358
+ video::-webkit-media-controls-volume-control-container {
19359
+ display: none !important;
19360
+ }
19361
+
19362
+ @media (max-width: 768px) {
19363
+ padding: 10px 0 130px;
19364
+
19365
+ video {
19366
+ max-width: 100%;
19367
+ }
19368
+ }
19369
+ `;
19370
+ var ThumbnailDivider = styled10.div`
19371
+ width: 1px;
19372
+ height: 48px;
19373
+ background: rgba(255, 255, 255, 0.15);
19374
+ flex-shrink: 0;
19375
+ align-self: center;
19376
+ `;
19377
+ var VideoBtn = styled10.button`
19378
+ display: flex;
19379
+ align-items: center;
19380
+ gap: 6px;
19381
+ padding: 8px 14px;
19382
+ border-radius: 8px;
19383
+ border: 1px solid ${(p) => p.$active ? "var(--color-accent, #E6C87E)" : "rgba(255, 255, 255, 0.2)"};
19384
+ background: ${(p) => p.$active ? "rgba(240, 185, 11, 0.15)" : "rgba(255, 255, 255, 0.08)"};
19385
+ color: ${(p) => p.$active ? "var(--color-accent, #E6C87E)" : "#fff"};
19386
+ font-size: 0.82rem;
19387
+ font-weight: 500;
19388
+ cursor: pointer;
19389
+ flex-shrink: 0;
19390
+ transition: all 0.2s ease;
19391
+
19392
+ &:hover {
19393
+ background: rgba(255, 255, 255, 0.15);
19394
+ border-color: rgba(255, 255, 255, 0.3);
19395
+ }
19396
+ `;
19299
19397
  var slideIn2 = keyframes`
19300
19398
  from { transform: translateX(110%); opacity: 0; }
19301
19399
  to { transform: translateX(0); opacity: 1; }
@@ -19464,7 +19562,7 @@ var Container3 = styled10.div`
19464
19562
  gap: 8px;
19465
19563
  }
19466
19564
  `;
19467
- var DEFAULT_EXPLORER = "https://sepolia.basescan.org/tx/";
19565
+ var DEFAULT_EXPLORER = "https://sepolia.arbiscan.io/tx/";
19468
19566
  function truncateHash(hash) {
19469
19567
  return `${hash.slice(0, 6)}\u2026${hash.slice(-4)}`;
19470
19568
  }
@@ -20031,8 +20129,7 @@ var SiteFooter = () => {
20031
20129
  /* @__PURE__ */ jsxs(LegalLinks, { children: [
20032
20130
  /* @__PURE__ */ jsx(LegalLink, { href: "/privacy", children: "Privacy Policy" }),
20033
20131
  /* @__PURE__ */ jsx(LegalLink, { href: "/terms", children: "Terms of Use" }),
20034
- /* @__PURE__ */ jsx(LegalLink, { href: "/cookies", children: "Cookie Policy" }),
20035
- /* @__PURE__ */ jsx(LegalLink, { href: "/risk", children: "Risk Warning" })
20132
+ /* @__PURE__ */ jsx(LegalLink, { href: "/cookies", children: "Cookie Policy" })
20036
20133
  ] })
20037
20134
  ] }),
20038
20135
  /* @__PURE__ */ jsx(Disclaimer2, { children: /* @__PURE__ */ jsx(DisclaimerText, { children: "Warning: Digital asset prices can be volatile. The value of your investment can go down or up and you may not get back the amount invested. Past gains are not indicative of future returns. You are solely responsible for your investment decisions and Loaf is not liable for any losses you may incur. The information here should not be regarded as financial or investment advice. For more information, see our Terms of Use and Risk Warning." }) })