@loafmarkets/ui 0.1.101 → 0.1.102

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
@@ -1,5 +1,5 @@
1
1
  import * as React5 from 'react';
2
- import React5__default, { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext } from 'react';
2
+ import React5__default, { createContext, useState, useEffect, useCallback, useContext, useMemo, useRef } from 'react';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import { cva } from 'class-variance-authority';
5
5
  import { clsx } from 'clsx';
@@ -7,7 +7,7 @@ import { twMerge } from 'tailwind-merge';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import styled25, { keyframes, css } from 'styled-components';
9
9
  import * as ReactDOM from 'react-dom';
10
- import { Newspaper } from 'lucide-react';
10
+ import { Newspaper, BedDouble, Bath, CarFront } from 'lucide-react';
11
11
  import * as LightweightCharts from 'lightweight-charts';
12
12
  import { BiChevronUp, BiChevronDown, BiX, BiCoin, BiWallet, BiCreditCard, BiCalendar, BiInfoCircle, BiPencil, BiImages, BiVideo, BiMap } from 'react-icons/bi';
13
13
  import { FaChartLine, FaBitcoin } from 'react-icons/fa';
@@ -1770,11 +1770,6 @@ function useViewportCompact(breakpoint) {
1770
1770
  return isCompact;
1771
1771
  }
1772
1772
  var formatNumber = (value, precision) => value.toFixed(precision);
1773
- var formatTradeTime = (time) => {
1774
- const d = new Date(time);
1775
- if (Number.isNaN(d.getTime())) return time;
1776
- return d.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false });
1777
- };
1778
1773
  var FLASH_DURATION_MS = 450;
1779
1774
  var FLASH_UP_COLOR = "rgba(14, 203, 129, 0.35)";
1780
1775
  var FLASH_DOWN_COLOR = "rgba(246, 70, 93, 0.35)";
@@ -1844,12 +1839,14 @@ function TradeRow({
1844
1839
  {
1845
1840
  ref: rowRef,
1846
1841
  className: "grid items-center",
1847
- style: { gridTemplateColumns: "1fr 1fr 1fr", padding: "0.2rem 0", fontSize: "0.8rem" },
1842
+ style: { gridTemplateColumns: "1.2fr 0.8fr", padding: "0.2rem 0", fontSize: "0.8rem" },
1848
1843
  children: [
1849
- /* @__PURE__ */ jsx("div", { style: { color: trade.type === "buy" ? "#0ecb81" : "#f6465d" }, className: "tabular-nums", children: formatNumber(trade.price, precision) }),
1850
- /* @__PURE__ */ jsx("div", { style: { textAlign: "right" }, className: "tabular-nums text-white/90", children: formatNumber(trade.amount, amountPrecision) }),
1851
- /* @__PURE__ */ jsxs("div", { style: { textAlign: "right", paddingRight: "0.5rem", display: "flex", alignItems: "center", justifyContent: "flex-end", gap: "4px" }, className: "tabular-nums text-white/50", children: [
1852
- trade.time != null && /* @__PURE__ */ jsx("span", { children: formatTradeTime(trade.time) }),
1844
+ /* @__PURE__ */ jsxs("div", { style: { color: trade.type === "buy" ? "#0ecb81" : "#f6465d", fontWeight: 500 }, children: [
1845
+ "$",
1846
+ formatNumber(trade.price, precision)
1847
+ ] }),
1848
+ /* @__PURE__ */ jsxs("div", { style: { textAlign: "right", paddingRight: "0.5rem", display: "flex", alignItems: "center", justifyContent: "flex-end", gap: "4px" }, children: [
1849
+ formatNumber(trade.amount, amountPrecision),
1853
1850
  explorerUrl && /* @__PURE__ */ jsx(
1854
1851
  "a",
1855
1852
  {
@@ -1870,22 +1867,24 @@ function TradeRow({
1870
1867
  "div",
1871
1868
  {
1872
1869
  ref: rowRef,
1873
- className: "relative grid grid-cols-3 items-center gap-3 px-3 text-[0.8rem]",
1874
- style: { height: `${DEPTH_ROW_HEIGHT_PX}px` },
1870
+ className: "grid grid-cols-3 items-center gap-3 px-3 py-1.5",
1875
1871
  children: [
1876
- /* @__PURE__ */ jsx(
1872
+ /* @__PURE__ */ jsxs(
1877
1873
  "div",
1878
1874
  {
1879
1875
  className: cn(
1880
1876
  "tabular-nums",
1881
1877
  trade.type === "buy" ? "text-[#0ecb81]" : "text-[#f6465d]"
1882
1878
  ),
1883
- children: formatNumber(trade.price, precision)
1879
+ children: [
1880
+ "$",
1881
+ formatNumber(trade.price, precision)
1882
+ ]
1884
1883
  }
1885
1884
  ),
1886
1885
  /* @__PURE__ */ jsx("div", { className: "text-right tabular-nums text-white/90", children: formatNumber(trade.amount, amountPrecision) }),
1887
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-1.5 tabular-nums text-white/50", children: [
1888
- trade.time != null && /* @__PURE__ */ jsx("span", { children: trade.time }),
1886
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-1.5", children: [
1887
+ trade.time != null && /* @__PURE__ */ jsx("span", { className: "tabular-nums text-white/50 text-xs", children: trade.time }),
1889
1888
  explorerUrl && /* @__PURE__ */ jsx(
1890
1889
  "a",
1891
1890
  {
@@ -1953,8 +1952,8 @@ function DepthRow({
1953
1952
  );
1954
1953
  }
1955
1954
  var clamp3 = (value, min, max) => Math.min(max, Math.max(min, value));
1956
- var LEVEL_ROWS_VISIBLE = 5;
1957
- var DEPTH_ROW_HEIGHT_PX = 28;
1955
+ var LEVEL_ROWS_VISIBLE = 6;
1956
+ var DEPTH_ROW_HEIGHT_PX = 26;
1958
1957
  var COMPACT_ROWS_VISIBLE = 5;
1959
1958
  var COMPACT_ROW_HEIGHT_PX = 30;
1960
1959
  var COMPACT_BREAKPOINT_PX = 1024;
@@ -1978,8 +1977,6 @@ var Orderbook = React5.forwardRef(
1978
1977
  onPriceClick,
1979
1978
  onLoafLiquidityClick,
1980
1979
  tradeExplorerUrl,
1981
- maxLevels,
1982
- fillHeight = false,
1983
1980
  className,
1984
1981
  ...props
1985
1982
  }, ref) => {
@@ -2024,10 +2021,8 @@ var Orderbook = React5.forwardRef(
2024
2021
  onTabChange?.(next);
2025
2022
  };
2026
2023
  const isCompact = variant === "compact" || variant === "auto" && viewportCompact;
2027
- const effectiveLevels = maxLevels ?? LEVEL_ROWS_VISIBLE;
2028
- const effectiveCompactLevels = maxLevels ?? COMPACT_ROWS_VISIBLE;
2029
- const sectionHeight = isCompact ? effectiveCompactLevels * COMPACT_ROW_HEIGHT_PX : effectiveLevels * DEPTH_ROW_HEIGHT_PX;
2030
- const rowCount = isCompact ? effectiveCompactLevels : effectiveLevels;
2024
+ const sectionHeight = isCompact ? COMPACT_ROWS_VISIBLE * COMPACT_ROW_HEIGHT_PX : LEVEL_ROWS_VISIBLE * DEPTH_ROW_HEIGHT_PX;
2025
+ const rowCount = isCompact ? COMPACT_ROWS_VISIBLE : LEVEL_ROWS_VISIBLE;
2031
2026
  const askVisibleLevels = asks.slice(-rowCount);
2032
2027
  const bidVisibleLevels = bids.slice(0, rowCount);
2033
2028
  const askCumDepths = new Array(askVisibleLevels.length);
@@ -2046,8 +2041,7 @@ var Orderbook = React5.forwardRef(
2046
2041
  bidCumDepths[i] = acc;
2047
2042
  }
2048
2043
  }
2049
- const askMaxCumDepth = Math.max(1, ...askCumDepths);
2050
- const bidMaxCumDepth = Math.max(1, ...bidCumDepths);
2044
+ const combinedMaxCumDepth = Math.max(1, ...askCumDepths, ...bidCumDepths);
2051
2045
  const midClass = midChangePercent == null ? "text-white" : midChangePercent >= 0 ? "text-[#0ecb81]" : "text-[#f6465d]";
2052
2046
  const tradeFiltered = trades.filter((t) => tradeFilter === "all" || t.type === tradeFilter);
2053
2047
  const layoutProps = {
@@ -2067,8 +2061,7 @@ var Orderbook = React5.forwardRef(
2067
2061
  bidVisibleLevels,
2068
2062
  askCumDepths,
2069
2063
  bidCumDepths,
2070
- askMaxCumDepth,
2071
- bidMaxCumDepth,
2064
+ combinedMaxCumDepth,
2072
2065
  midPrice,
2073
2066
  midChangePercent,
2074
2067
  midClass,
@@ -2078,19 +2071,15 @@ var Orderbook = React5.forwardRef(
2078
2071
  isLoading,
2079
2072
  seenTradeKeysRef,
2080
2073
  tradeExplorerUrl,
2081
- onPriceClick,
2082
- levelCount: effectiveLevels,
2083
- compactLevelCount: effectiveCompactLevels,
2084
- fillHeight
2074
+ onPriceClick
2085
2075
  };
2086
2076
  return /* @__PURE__ */ jsx(
2087
2077
  Card,
2088
2078
  {
2089
2079
  ref,
2090
2080
  className: cn(
2091
- "w-full max-w-[520px] overflow-hidden rounded-[12px] border border-white/10 bg-[#111111] text-white shadow-md flex flex-col",
2081
+ "w-full max-w-[520px] overflow-hidden rounded-[12px] border border-white/10 bg-[#111111] text-white shadow-md flex flex-col h-full",
2092
2082
  isCompact && "max-w-none",
2093
- fillHeight && "h-full",
2094
2083
  className
2095
2084
  ),
2096
2085
  ...props,
@@ -2139,8 +2128,7 @@ function DesktopOrderbookLayout({
2139
2128
  bidVisibleLevels,
2140
2129
  askCumDepths,
2141
2130
  bidCumDepths,
2142
- askMaxCumDepth,
2143
- bidMaxCumDepth,
2131
+ combinedMaxCumDepth,
2144
2132
  midPrice,
2145
2133
  midChangePercent,
2146
2134
  midClass,
@@ -2150,10 +2138,7 @@ function DesktopOrderbookLayout({
2150
2138
  isLoading,
2151
2139
  seenTradeKeysRef,
2152
2140
  tradeExplorerUrl,
2153
- onPriceClick,
2154
- levelCount: effectiveLevels,
2155
- compactLevelCount: _compactLevelCount,
2156
- fillHeight
2141
+ onPriceClick
2157
2142
  }) {
2158
2143
  const midRef = React5.useRef(null);
2159
2144
  useMidPriceFlash(midRef, midPrice, "#0b1a24");
@@ -2241,7 +2226,7 @@ function DesktopOrderbookLayout({
2241
2226
  {
2242
2227
  className: "max-h-[380px] overflow-y-auto overflow-x-hidden",
2243
2228
  style: { scrollbarGutter: "stable" },
2244
- children: isLoading && tradeFiltered.length === 0 ? /* @__PURE__ */ jsx("div", { children: Array.from({ length: effectiveLevels }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, {}, `trade-skel-${i}`)) }) : tradeFiltered.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-10 text-center text-sm text-white/50", children: "No trades" }) : /* @__PURE__ */ jsx("div", { children: tradeFiltered.map((trade, i) => {
2229
+ children: isLoading && tradeFiltered.length === 0 ? /* @__PURE__ */ jsx("div", { className: "divide-y divide-white/5", children: Array.from({ length: LEVEL_ROWS_VISIBLE }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, {}, `trade-skel-${i}`)) }) : tradeFiltered.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-10 text-center text-sm text-white/50", children: "No trades" }) : /* @__PURE__ */ jsx("div", { className: "divide-y divide-white/5", children: tradeFiltered.map((trade, i) => {
2245
2230
  const tradeKey = getTradeKey(trade, i);
2246
2231
  const explorerUrl = trade.txHash && tradeExplorerUrl ? tradeExplorerUrl(trade.txHash) : trade.txHash ? `https://sepolia.etherscan.io/tx/${trade.txHash}` : void 0;
2247
2232
  return /* @__PURE__ */ jsx(
@@ -2258,20 +2243,20 @@ function DesktopOrderbookLayout({
2258
2243
  );
2259
2244
  }) })
2260
2245
  }
2261
- ) : /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col min-h-0 overflow-hidden", fillHeight && "flex-1"), children: [
2246
+ ) : /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col min-h-0", children: [
2262
2247
  /* @__PURE__ */ jsx(
2263
2248
  "div",
2264
2249
  {
2265
- className: cn("flex flex-col justify-end overflow-hidden", !fillHeight && "flex-shrink-0"),
2266
- style: fillHeight ? { flex: 1, minHeight: 0 } : { height: `${sectionHeight}px` },
2267
- children: isLoading ? Array.from({ length: effectiveLevels }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, {}, `ask-skel-${i}`)) : askVisibleLevels.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center px-3 text-xs text-white/40", children: "No asks" }) : askVisibleLevels.map((l, i) => /* @__PURE__ */ jsx(
2250
+ className: "flex flex-col justify-end divide-y divide-white/5 overflow-hidden",
2251
+ style: { height: `${sectionHeight}px` },
2252
+ children: isLoading ? Array.from({ length: LEVEL_ROWS_VISIBLE }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, {}, `ask-skel-${i}`)) : askVisibleLevels.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center px-3 text-xs text-white/40", children: "No asks" }) : askVisibleLevels.map((l, i) => /* @__PURE__ */ jsx(
2268
2253
  DepthRow,
2269
2254
  {
2270
2255
  side: "ask",
2271
2256
  price: l.price,
2272
2257
  amount: l.amount,
2273
2258
  cumDepth: askCumDepths[i],
2274
- depthPct: askCumDepths[i] / askMaxCumDepth * 100,
2259
+ depthPct: askCumDepths[i] / combinedMaxCumDepth * 100,
2275
2260
  precision,
2276
2261
  amountPrecision,
2277
2262
  hasUserOrder: userAskPrices.has(l.price),
@@ -2285,7 +2270,7 @@ function DesktopOrderbookLayout({
2285
2270
  "div",
2286
2271
  {
2287
2272
  ref: midRef,
2288
- className: "grid grid-cols-2 items-center gap-3 bg-[#0b1a24] px-3 py-2 flex-shrink-0",
2273
+ className: "grid grid-cols-2 items-center gap-3 bg-[#0b1a24] px-3 py-2",
2289
2274
  children: [
2290
2275
  /* @__PURE__ */ jsx("div", { className: cn("text-lg font-semibold tabular-nums", midClass), children: isLoading ? /* @__PURE__ */ jsx(Skeleton, { width: 110, height: 20 }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2291
2276
  "$",
@@ -2303,16 +2288,16 @@ function DesktopOrderbookLayout({
2303
2288
  /* @__PURE__ */ jsx(
2304
2289
  "div",
2305
2290
  {
2306
- className: cn("flex flex-col overflow-hidden", !fillHeight && "flex-shrink-0"),
2307
- style: fillHeight ? { flex: 1, minHeight: 0 } : { height: `${sectionHeight}px` },
2308
- children: isLoading ? Array.from({ length: effectiveLevels }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, {}, `bid-skel-${i}`)) : bidVisibleLevels.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center px-3 text-xs text-white/40", children: "No bids" }) : bidVisibleLevels.map((l, i) => /* @__PURE__ */ jsx(
2291
+ className: "divide-y divide-white/5 overflow-hidden",
2292
+ style: { height: `${sectionHeight}px` },
2293
+ children: isLoading ? Array.from({ length: LEVEL_ROWS_VISIBLE }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, {}, `bid-skel-${i}`)) : bidVisibleLevels.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center px-3 text-xs text-white/40", children: "No bids" }) : bidVisibleLevels.map((l, i) => /* @__PURE__ */ jsx(
2309
2294
  DepthRow,
2310
2295
  {
2311
2296
  side: "bid",
2312
2297
  price: l.price,
2313
2298
  amount: l.amount,
2314
2299
  cumDepth: bidCumDepths[i],
2315
- depthPct: bidCumDepths[i] / bidMaxCumDepth * 100,
2300
+ depthPct: bidCumDepths[i] / combinedMaxCumDepth * 100,
2316
2301
  precision,
2317
2302
  amountPrecision,
2318
2303
  hasUserOrder: userBidPrices.has(l.price),
@@ -2341,8 +2326,7 @@ function MobileOrderbookLayout({
2341
2326
  bidVisibleLevels: visibleBids,
2342
2327
  askCumDepths,
2343
2328
  bidCumDepths,
2344
- askMaxCumDepth,
2345
- bidMaxCumDepth,
2329
+ combinedMaxCumDepth,
2346
2330
  midPrice,
2347
2331
  midChangePercent,
2348
2332
  midClass,
@@ -2352,9 +2336,7 @@ function MobileOrderbookLayout({
2352
2336
  isLoading,
2353
2337
  seenTradeKeysRef,
2354
2338
  tradeExplorerUrl,
2355
- onPriceClick,
2356
- levelCount: _levelCount,
2357
- compactLevelCount: effectiveCompactLevels
2339
+ onPriceClick
2358
2340
  }) {
2359
2341
  const midRef = React5.useRef(null);
2360
2342
  useMidPriceFlash(midRef, midPrice, "transparent");
@@ -2426,13 +2408,13 @@ function MobileOrderbookLayout({
2426
2408
  ]
2427
2409
  }
2428
2410
  ),
2429
- /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", height: `${effectiveCompactLevels * COMPACT_ROW_HEIGHT_PX}px`, justifyContent: "flex-end", overflow: "hidden" }, children: isLoading ? Array.from({ length: effectiveCompactLevels }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, { compact: true }, `m-ask-skel-${i}`)) : visibleAsks.length === 0 ? /* @__PURE__ */ jsx("div", { style: { padding: "0.75rem 0", textAlign: "center", color: "rgba(255,255,255,0.4)", fontSize: "0.72rem" }, children: "No asks" }) : visibleAsks.map((l, i) => /* @__PURE__ */ jsx(
2411
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column" }, children: isLoading ? Array.from({ length: COMPACT_ROWS_VISIBLE }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, { compact: true }, `m-ask-skel-${i}`)) : visibleAsks.length === 0 ? /* @__PURE__ */ jsx("div", { style: { padding: "0.75rem 0", textAlign: "center", color: "rgba(255,255,255,0.4)", fontSize: "0.72rem" }, children: "No asks" }) : visibleAsks.map((l, i) => /* @__PURE__ */ jsx(
2430
2412
  MobileDepthRow,
2431
2413
  {
2432
2414
  side: "ask",
2433
2415
  price: l.price,
2434
2416
  amount: l.amount,
2435
- depthPct: askCumDepths[i] / askMaxCumDepth * 100,
2417
+ depthPct: askCumDepths[i] / combinedMaxCumDepth * 100,
2436
2418
  precision,
2437
2419
  amountPrecision,
2438
2420
  hasUserOrder: userAskPrices.has(l.price),
@@ -2473,13 +2455,13 @@ function MobileOrderbookLayout({
2473
2455
  ]
2474
2456
  }
2475
2457
  ),
2476
- /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", height: `${effectiveCompactLevels * COMPACT_ROW_HEIGHT_PX}px`, overflow: "hidden" }, children: isLoading ? Array.from({ length: effectiveCompactLevels }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, { compact: true }, `m-bid-skel-${i}`)) : visibleBids.length === 0 ? /* @__PURE__ */ jsx("div", { style: { padding: "0.75rem 0", textAlign: "center", color: "rgba(255,255,255,0.4)", fontSize: "0.72rem" }, children: "No bids" }) : visibleBids.map((l, i) => /* @__PURE__ */ jsx(
2458
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column" }, children: isLoading ? Array.from({ length: COMPACT_ROWS_VISIBLE }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, { compact: true }, `m-bid-skel-${i}`)) : visibleBids.length === 0 ? /* @__PURE__ */ jsx("div", { style: { padding: "0.75rem 0", textAlign: "center", color: "rgba(255,255,255,0.4)", fontSize: "0.72rem" }, children: "No bids" }) : visibleBids.map((l, i) => /* @__PURE__ */ jsx(
2477
2459
  MobileDepthRow,
2478
2460
  {
2479
2461
  side: "bid",
2480
2462
  price: l.price,
2481
2463
  amount: l.amount,
2482
- depthPct: bidCumDepths[i] / bidMaxCumDepth * 100,
2464
+ depthPct: bidCumDepths[i] / combinedMaxCumDepth * 100,
2483
2465
  precision,
2484
2466
  amountPrecision,
2485
2467
  hasUserOrder: userBidPrices.has(l.price),
@@ -2499,7 +2481,7 @@ function MobileOrderbookLayout({
2499
2481
  ]
2500
2482
  }
2501
2483
  ),
2502
- /* @__PURE__ */ jsx("div", { style: { flex: 1, overflowY: "auto", minHeight: 0 }, children: isLoading && tradeFiltered.length === 0 ? Array.from({ length: effectiveCompactLevels }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, { compact: true }, `m-trade-skel-${i}`)) : tradeFiltered.length === 0 ? /* @__PURE__ */ jsx("div", { className: "py-6 text-center text-[0.7rem] text-white/50", children: "No trades" }) : tradeFiltered.map((trade, i) => {
2484
+ /* @__PURE__ */ jsx("div", { style: { flex: 1, overflowY: "auto", minHeight: 0 }, children: isLoading && tradeFiltered.length === 0 ? Array.from({ length: COMPACT_ROWS_VISIBLE }).map((_, i) => /* @__PURE__ */ jsx(SkeletonRow, { compact: true }, `m-trade-skel-${i}`)) : tradeFiltered.length === 0 ? /* @__PURE__ */ jsx("div", { className: "py-6 text-center text-[0.7rem] text-white/50", children: "No trades" }) : tradeFiltered.map((trade, i) => {
2503
2485
  const tradeKey = getTradeKey(trade, i);
2504
2486
  const explorerUrl = trade.txHash && tradeExplorerUrl ? tradeExplorerUrl(trade.txHash) : trade.txHash ? `https://sepolia.etherscan.io/tx/${trade.txHash}` : void 0;
2505
2487
  return /* @__PURE__ */ jsx(
@@ -2539,8 +2521,7 @@ function MobileDepthRow({
2539
2521
  style: {
2540
2522
  display: "grid",
2541
2523
  gridTemplateColumns: "1.2fr 0.8fr",
2542
- height: `${COMPACT_ROW_HEIGHT_PX}px`,
2543
- alignItems: "center",
2524
+ padding: "0.2rem 0",
2544
2525
  fontSize: "0.8rem",
2545
2526
  position: "relative",
2546
2527
  cursor: onPriceClick ? "pointer" : void 0
@@ -2683,7 +2664,7 @@ var PropertyTour = React5.forwardRef(
2683
2664
  }
2684
2665
  );
2685
2666
  PropertyTour.displayName = "PropertyTour";
2686
- var ITEMS_PER_PAGE = 6;
2667
+ var ITEMS_PER_PAGE = 4;
2687
2668
  var ensureAnimationsInjected = () => {
2688
2669
  if (typeof document === "undefined") return;
2689
2670
  if (document.getElementById("property-news-updates-animations")) return;
@@ -2728,22 +2709,6 @@ var formatDate = (value) => {
2728
2709
  if (!(value instanceof Date) || Number.isNaN(value.getTime())) return "";
2729
2710
  return value.toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" });
2730
2711
  };
2731
- var formatDateShort = (value) => {
2732
- const d = typeof value === "string" ? new Date(value) : value;
2733
- if (!(d instanceof Date) || Number.isNaN(d.getTime())) {
2734
- if (typeof value === "string") {
2735
- return value.replace(/\s*\d{4}\s*$/, "");
2736
- }
2737
- return "";
2738
- }
2739
- const diffMs = Date.now() - d.getTime();
2740
- const diffS = diffMs / 1e3;
2741
- if (diffS < 60) return "Just now";
2742
- if (diffS < 3600) return `${Math.floor(diffS / 60)}m ago`;
2743
- if (diffS < 86400) return `${Math.floor(diffS / 3600)}h ago`;
2744
- const time = d.toLocaleTimeString(void 0, { hour: "numeric", minute: "2-digit", hour12: true });
2745
- return `${time} \xB7 ${d.toLocaleDateString(void 0, { month: "short", day: "numeric" })}`;
2746
- };
2747
2712
  var formatTimeAgo = (timestamp) => {
2748
2713
  const diff = (Date.now() - new Date(timestamp).getTime()) / 1e3;
2749
2714
  if (diff < 60) return `${Math.floor(diff)}s ago`;
@@ -2754,7 +2719,7 @@ function getSentimentInfo(score) {
2754
2719
  if (score == null) return null;
2755
2720
  if (score > 0.15) return { arrow: "\u25B2", label: "Bullish", color: "#0ecb81" };
2756
2721
  if (score < -0.15) return { arrow: "\u25BC", label: "Bearish", color: "#f6465d" };
2757
- return { arrow: "", label: "Neutral", color: "#848e9c" };
2722
+ return { arrow: "\u2014", label: "Neutral", color: "#848e9c" };
2758
2723
  }
2759
2724
  function NewsArticleModal({ item, onClose }) {
2760
2725
  const sentimentInfo = getSentimentInfo(item.sentimentScore);
@@ -2836,7 +2801,8 @@ function NewsArticleModal({ item, onClose }) {
2836
2801
  border: `1px solid ${sentimentInfo.color}40`
2837
2802
  },
2838
2803
  children: [
2839
- sentimentInfo.arrow ? `${sentimentInfo.arrow} ` : "",
2804
+ sentimentInfo.arrow,
2805
+ " ",
2840
2806
  sentimentInfo.label
2841
2807
  ]
2842
2808
  }
@@ -2876,35 +2842,7 @@ function NewsArticleModal({ item, onClose }) {
2876
2842
  )
2877
2843
  ] }),
2878
2844
  /* @__PURE__ */ jsx("div", { style: { height: "1px", background: "rgba(255,255,255,0.08)", marginBottom: "1.25rem" } }),
2879
- item.summary ? /* @__PURE__ */ jsx("p", { style: { fontSize: "0.875rem", color: "rgba(255,255,255,0.8)", lineHeight: 1.75, margin: 0 }, children: item.summary }) : /* @__PURE__ */ jsx("p", { style: { fontSize: "0.8rem", color: "rgba(255,255,255,0.35)", fontStyle: "italic", margin: 0 }, children: "Summary not available for this article." }),
2880
- item.url && /* @__PURE__ */ jsx("div", { style: { marginTop: "1.25rem", paddingTop: "1rem", borderTop: "1px solid rgba(255,255,255,0.08)" }, children: /* @__PURE__ */ jsxs(
2881
- "a",
2882
- {
2883
- href: item.url,
2884
- target: "_blank",
2885
- rel: "noopener noreferrer",
2886
- style: {
2887
- display: "inline-flex",
2888
- alignItems: "center",
2889
- gap: "0.4rem",
2890
- fontSize: "0.8rem",
2891
- fontWeight: 600,
2892
- color: "var(--color-accent, #f0b90b)",
2893
- textDecoration: "none",
2894
- transition: "opacity 0.15s"
2895
- },
2896
- onMouseEnter: (e) => {
2897
- e.currentTarget.style.opacity = "0.8";
2898
- },
2899
- onMouseLeave: (e) => {
2900
- e.currentTarget.style.opacity = "1";
2901
- },
2902
- children: [
2903
- "Read full article",
2904
- /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M19 19H5V5h7V3H5a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z" }) })
2905
- ]
2906
- }
2907
- ) })
2845
+ item.summary ? /* @__PURE__ */ jsx("p", { style: { fontSize: "0.875rem", color: "rgba(255,255,255,0.8)", lineHeight: 1.75, margin: 0 }, children: item.summary }) : /* @__PURE__ */ jsx("p", { style: { fontSize: "0.8rem", color: "rgba(255,255,255,0.35)", fontStyle: "italic", margin: 0 }, children: "Summary not available for this article." })
2908
2846
  ]
2909
2847
  }
2910
2848
  )
@@ -2936,7 +2874,6 @@ var PropertyNewsUpdates = React5.forwardRef(
2936
2874
  const [homeTab, setHomeTab] = React5.useState("all");
2937
2875
  const [homePage, setHomePage] = React5.useState(0);
2938
2876
  const purchaseItems = purchasesProp ?? [];
2939
- const [page, setPage] = React5.useState(0);
2940
2877
  const [selectedItem, setSelectedItem] = React5.useState(null);
2941
2878
  React5.useEffect(() => {
2942
2879
  ensureAnimationsInjected();
@@ -2945,14 +2882,6 @@ var PropertyNewsUpdates = React5.forwardRef(
2945
2882
  setHomePage(0);
2946
2883
  }, [homeTab]);
2947
2884
  const hasItems = Array.isArray(items) && items.length > 0;
2948
- const totalPages = React5.useMemo(
2949
- () => hasItems ? Math.max(1, Math.ceil(items.length / ITEMS_PER_PAGE)) : 1,
2950
- [hasItems, items.length]
2951
- );
2952
- React5.useEffect(() => {
2953
- setPage((prev) => Math.min(prev, totalPages - 1));
2954
- }, [totalPages]);
2955
- const paginatedItems = hasItems ? items.slice(page * ITEMS_PER_PAGE, page * ITEMS_PER_PAGE + ITEMS_PER_PAGE) : [];
2956
2885
  const homeFilteredItems = React5.useMemo(
2957
2886
  () => hasItems ? items.filter((it) => homeTab === "all" || it.type === homeTab) : [],
2958
2887
  [hasItems, items, homeTab]
@@ -2974,10 +2903,10 @@ var PropertyNewsUpdates = React5.forwardRef(
2974
2903
  children: [
2975
2904
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2976
2905
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [
2977
- isHomeVariant && /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", style: { color: "var(--color-text, #fff)", flexShrink: 0, display: "block" }, children: /* @__PURE__ */ jsx("path", { d: "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 14H4v-4h11v4zm0-5H4V9h11v4zm5 5h-4V9h4v9z" }) }),
2906
+ isHomeVariant && /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor", style: { color: "var(--color-text, #fff)" }, children: /* @__PURE__ */ jsx("path", { d: "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 14H4v-4h11v4zm0-5H4V9h11v4zm5 5h-4V9h4v9z" }) }),
2978
2907
  isPurchaseVariant && /* @__PURE__ */ jsx("span", { style: { display: "inline-block", width: "8px", height: "8px", borderRadius: "50%", backgroundColor: "#0ecb81", boxShadow: "0 0 8px rgba(14,203,129,0.8)", animation: "propertyNewsPulse 1.5s infinite" } }),
2979
2908
  /* @__PURE__ */ jsxs("div", { children: [
2980
- /* @__PURE__ */ jsx("p", { className: isHomeVariant ? "text-base font-semibold text-white" : "text-lg font-semibold text-white", style: { margin: 0 }, children: resolvedHeading }),
2909
+ /* @__PURE__ */ jsx("p", { className: isHomeVariant ? "text-base font-semibold text-white" : "text-lg font-semibold text-white", children: resolvedHeading }),
2981
2910
  subheading ? /* @__PURE__ */ jsx("p", { className: "text-sm text-white/60", children: subheading }) : null
2982
2911
  ] })
2983
2912
  ] }),
@@ -2992,7 +2921,7 @@ var PropertyNewsUpdates = React5.forwardRef(
2992
2921
  "LIVE"
2993
2922
  ] }) : null
2994
2923
  ] }),
2995
- isHomeVariant && /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: "1.5rem", marginTop: "0.75rem", marginBottom: "0.5rem", borderBottom: "1px solid rgba(255, 255, 255, 0.08)", paddingBottom: "0.5rem" }, children: ["all", "property", "market"].map((tab) => /* @__PURE__ */ jsx(
2924
+ isHomeVariant && /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: 0, marginTop: "0.75rem", marginBottom: "0.25rem" }, children: ["all", "property", "market"].map((tab) => /* @__PURE__ */ jsx(
2996
2925
  "button",
2997
2926
  {
2998
2927
  type: "button",
@@ -3001,8 +2930,7 @@ var PropertyNewsUpdates = React5.forwardRef(
3001
2930
  background: "transparent",
3002
2931
  border: "none",
3003
2932
  borderBottom: homeTab === tab ? "2px solid var(--color-accent, #f0b90b)" : "2px solid transparent",
3004
- padding: "0 0 0.5rem 0",
3005
- marginBottom: "-1px",
2933
+ padding: "0.5rem 0.75rem",
3006
2934
  fontSize: "0.75rem",
3007
2935
  fontWeight: homeTab === tab ? 600 : 400,
3008
2936
  color: homeTab === tab ? "var(--color-text, #fff)" : "var(--color-text-secondary, #848e9c)",
@@ -3016,8 +2944,7 @@ var PropertyNewsUpdates = React5.forwardRef(
3016
2944
  /* @__PURE__ */ jsx(
3017
2945
  "div",
3018
2946
  {
3019
- className: cn("flex flex-1 flex-col overflow-hidden", isHomeVariant ? "mt-2 gap-0" : "mt-4 gap-3"),
3020
- style: !isPurchaseVariant && !isHomeVariant ? { minHeight: `${ITEMS_PER_PAGE * 86}px` } : void 0,
2947
+ className: "mt-4 flex flex-1 flex-col gap-3 overflow-hidden",
3021
2948
  children: isPurchaseVariant ? purchaseItems.length > 0 ? purchaseItems.slice(0, 7).map((purchase, index) => {
3022
2949
  const maxAmount = 6e4;
3023
2950
  const barPercent = Math.min(85, Math.max(15, purchase.amount / maxAmount * 100));
@@ -3055,7 +2982,7 @@ var PropertyNewsUpdates = React5.forwardRef(
3055
2982
  style: {
3056
2983
  width: "100%",
3057
2984
  textAlign: "left",
3058
- backgroundColor: "transparent",
2985
+ background: "transparent",
3059
2986
  border: "none",
3060
2987
  cursor: "pointer",
3061
2988
  padding: "0.75rem 0",
@@ -3064,28 +2991,18 @@ var PropertyNewsUpdates = React5.forwardRef(
3064
2991
  justifyContent: "space-between",
3065
2992
  alignItems: "flex-start",
3066
2993
  gap: "0.5rem",
3067
- color: "inherit",
3068
- transition: "background-color 0.15s"
3069
- },
3070
- onMouseEnter: (e) => {
3071
- e.currentTarget.style.backgroundColor = "rgba(255,255,255,0.04)";
3072
- const title = e.currentTarget.querySelector("h3");
3073
- if (title) title.style.color = "var(--color-accent, #E6C87E)";
3074
- },
3075
- onMouseLeave: (e) => {
3076
- e.currentTarget.style.backgroundColor = "transparent";
3077
- const title = e.currentTarget.querySelector("h3");
3078
- if (title) title.style.color = "#f8f9fa";
2994
+ color: "inherit"
3079
2995
  },
3080
2996
  children: [
3081
2997
  /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
3082
- /* @__PURE__ */ jsx("h3", { style: { fontSize: "0.95rem", fontWeight: 500, marginBottom: "0.35rem", color: "#f8f9fa", lineHeight: 1.45, transition: "color 0.15s" }, children: item.title }),
2998
+ /* @__PURE__ */ jsx("h3", { style: { fontSize: "0.85rem", fontWeight: 400, marginBottom: "0.25rem", color: "#f8f9fa", lineHeight: 1.4 }, children: item.title }),
3083
2999
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "0.5rem", alignItems: "center", flexWrap: "wrap" }, children: [
3084
- /* @__PURE__ */ jsx("span", { style: { color: "#848e9c", fontSize: "0.7rem" }, children: formatDateShort(item.date) }),
3000
+ /* @__PURE__ */ jsx("span", { style: { color: "#848e9c", fontSize: "0.7rem" }, children: typeof item.date === "string" ? item.date : formatDate(item.date) }),
3085
3001
  item.source && /* @__PURE__ */ jsx("span", { style: { padding: "0.1rem 0.4rem", borderRadius: "3px", fontSize: "0.62rem", fontWeight: 500, backgroundColor: "rgba(255,255,255,0.07)", color: "#848e9c", whiteSpace: "nowrap" }, children: item.source }),
3086
3002
  /* @__PURE__ */ jsx("span", { style: { padding: "0.15rem 0.4rem", borderRadius: "2px", fontSize: "0.65rem", fontWeight: 500, backgroundColor: isProperty ? "rgba(14,203,129,0.1)" : "rgba(240,185,11,0.1)", color: isProperty ? "#0ecb81" : "#f0b90b" }, children: isProperty ? "Property Update" : "Market News" }),
3087
3003
  sentimentInfo && /* @__PURE__ */ jsxs("span", { style: { fontSize: "0.65rem", fontWeight: 600, color: sentimentInfo.color }, children: [
3088
- sentimentInfo.arrow ? `${sentimentInfo.arrow} ` : "",
3004
+ sentimentInfo.arrow,
3005
+ " ",
3089
3006
  sentimentInfo.label
3090
3007
  ] })
3091
3008
  ] })
@@ -3095,12 +3012,11 @@ var PropertyNewsUpdates = React5.forwardRef(
3095
3012
  },
3096
3013
  key
3097
3014
  );
3098
- }) : emptyState ?? /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center justify-center py-10 text-center text-sm text-white/60", children: "No property news yet." }) : hasItems ? paginatedItems.map((item, index) => {
3099
- const absoluteIndex = page * ITEMS_PER_PAGE + index;
3100
- const key = item.displayId ?? item.id ?? `${item.title}-${absoluteIndex}`;
3015
+ }) : emptyState ?? /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center justify-center py-10 text-center text-sm text-white/60", children: "No property news yet." }) : hasItems ? /* @__PURE__ */ jsx("div", { style: { overflowY: "auto", maxHeight: "520px", display: "flex", flexDirection: "column", gap: "0" }, children: items.map((item, index) => {
3016
+ const key = item.displayId ?? item.id ?? `${item.title}-${index}`;
3101
3017
  const catStyle = categoryStyles[item.type] ?? categoryStyles.market;
3102
- const dateLabel = item.isNew ?? (highlightFirst && absoluteIndex === 0) ? "Just now" : typeof item.date === "string" && item.date.trim().length > 0 ? item.date : formatDate(item.date);
3103
- const isHighlighted = item.isNew ?? (highlightFirst && absoluteIndex === 0);
3018
+ const dateLabel = item.isNew ?? (highlightFirst && index === 0) ? "Just now" : typeof item.date === "string" && item.date.trim().length > 0 ? item.date : formatDate(item.date);
3019
+ const isHighlighted = item.isNew ?? (highlightFirst && index === 0);
3104
3020
  const sentimentInfo = getSentimentInfo(item.sentimentScore);
3105
3021
  return /* @__PURE__ */ jsx(
3106
3022
  "button",
@@ -3142,7 +3058,8 @@ var PropertyNewsUpdates = React5.forwardRef(
3142
3058
  ] }),
3143
3059
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", alignItems: "flex-end", gap: "0.3rem", flexShrink: 0 }, children: [
3144
3060
  sentimentInfo && /* @__PURE__ */ jsxs("span", { style: { fontSize: "0.65rem", fontWeight: 700, color: sentimentInfo.color, whiteSpace: "nowrap" }, children: [
3145
- sentimentInfo.arrow ? `${sentimentInfo.arrow} ` : "",
3061
+ sentimentInfo.arrow,
3062
+ " ",
3146
3063
  sentimentInfo.label
3147
3064
  ] }),
3148
3065
  /* @__PURE__ */ jsx("span", { style: { padding: "0.25rem 0.6rem", borderRadius: "4px", border: `1px solid ${catStyle.borderColor}`, backgroundColor: catStyle.backgroundColor, color: catStyle.color, fontSize: "0.68rem", fontWeight: 600, textTransform: "uppercase", whiteSpace: "nowrap" }, children: item.type === "property" ? catStyle.label : "Market News" })
@@ -3154,7 +3071,7 @@ var PropertyNewsUpdates = React5.forwardRef(
3154
3071
  },
3155
3072
  key
3156
3073
  );
3157
- }) : emptyState ?? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center rounded-2xl border border-dashed border-white/20 px-6 py-10 text-center text-sm text-white/60", children: [
3074
+ }) }) : emptyState ?? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center rounded-2xl border border-dashed border-white/20 px-6 py-10 text-center text-sm text-white/60", children: [
3158
3075
  /* @__PURE__ */ jsx(Newspaper, { className: "mb-3 h-8 w-8 text-white/40" }),
3159
3076
  "No property news yet. Updates will land here as soon as we receive new intelligence."
3160
3077
  ] })
@@ -3167,8 +3084,8 @@ var PropertyNewsUpdates = React5.forwardRef(
3167
3084
  type: "button",
3168
3085
  onClick: () => setHomePage((p) => Math.max(0, p - 1)),
3169
3086
  disabled: homePage === 0,
3170
- style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "50%", width: "28px", height: "28px", display: "flex", alignItems: "center", justifyContent: "center", padding: 0, cursor: homePage === 0 ? "not-allowed" : "pointer", opacity: homePage === 0 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3171
- children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" }) })
3087
+ style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "999px", padding: "0.2rem 0.75rem", fontSize: "0.7rem", textTransform: "uppercase", letterSpacing: "0.15em", cursor: homePage === 0 ? "not-allowed" : "pointer", opacity: homePage === 0 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3088
+ children: "Prev"
3172
3089
  }
3173
3090
  ),
3174
3091
  /* @__PURE__ */ jsxs("span", { style: { fontSize: "0.7rem", color: "rgba(255,255,255,0.5)" }, children: [
@@ -3182,38 +3099,8 @@ var PropertyNewsUpdates = React5.forwardRef(
3182
3099
  type: "button",
3183
3100
  onClick: () => setHomePage((p) => Math.min(homeTotalPages - 1, p + 1)),
3184
3101
  disabled: homePage >= homeTotalPages - 1,
3185
- style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "50%", width: "28px", height: "28px", display: "flex", alignItems: "center", justifyContent: "center", padding: 0, cursor: homePage >= homeTotalPages - 1 ? "not-allowed" : "pointer", opacity: homePage >= homeTotalPages - 1 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3186
- children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }) })
3187
- }
3188
- )
3189
- ] }),
3190
- !isPurchaseVariant && !isHomeVariant && hasItems && totalPages > 1 && /* @__PURE__ */ jsxs("div", { className: "mt-4 flex items-center justify-between text-xs text-white/60", children: [
3191
- /* @__PURE__ */ jsx(
3192
- "button",
3193
- {
3194
- type: "button",
3195
- onClick: () => setPage((p) => Math.max(0, p - 1)),
3196
- disabled: page === 0,
3197
- className: cn("rounded-full border border-white/15 flex items-center justify-center", page === 0 ? "opacity-40 cursor-not-allowed" : "hover:border-white/40"),
3198
- style: { width: "28px", height: "28px", padding: 0, background: "transparent", color: "rgba(255,255,255,0.6)" },
3199
- children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" }) })
3200
- }
3201
- ),
3202
- /* @__PURE__ */ jsxs("span", { className: "font-medium text-white/70", children: [
3203
- "Page ",
3204
- page + 1,
3205
- " / ",
3206
- totalPages
3207
- ] }),
3208
- /* @__PURE__ */ jsx(
3209
- "button",
3210
- {
3211
- type: "button",
3212
- onClick: () => setPage((p) => Math.min(totalPages - 1, p + 1)),
3213
- disabled: page >= totalPages - 1,
3214
- className: cn("rounded-full border border-white/15 flex items-center justify-center", page >= totalPages - 1 ? "opacity-40 cursor-not-allowed" : "hover:border-white/40"),
3215
- style: { width: "28px", height: "28px", padding: 0, background: "transparent", color: "rgba(255,255,255,0.6)" },
3216
- children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }) })
3102
+ style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "999px", padding: "0.2rem 0.75rem", fontSize: "0.7rem", textTransform: "uppercase", letterSpacing: "0.15em", cursor: homePage >= homeTotalPages - 1 ? "not-allowed" : "pointer", opacity: homePage >= homeTotalPages - 1 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3103
+ children: "Next"
3217
3104
  }
3218
3105
  )
3219
3106
  ] }),
@@ -4716,16 +4603,14 @@ var PropertyHeroHeader = React5.forwardRef(
4716
4603
  imageUrl,
4717
4604
  imageAlt,
4718
4605
  name,
4719
- address,
4720
4606
  location,
4721
4607
  price,
4722
4608
  currencySymbol = "$",
4723
4609
  changePercent,
4724
- priceChange,
4725
- beds: _beds,
4726
- baths: _baths,
4727
- cars: _cars,
4728
- propertyTypeLabel: _propertyTypeLabel,
4610
+ beds,
4611
+ baths,
4612
+ cars,
4613
+ propertyTypeLabel,
4729
4614
  onTrade,
4730
4615
  onMakeOffer,
4731
4616
  tradeButtonLabel = "Trade",
@@ -4741,6 +4626,7 @@ var PropertyHeroHeader = React5.forwardRef(
4741
4626
  const tradeHoverColor = "#f5dd9a";
4742
4627
  const [isTradeInteracting, setIsTradeInteracting] = React5.useState(false);
4743
4628
  const [isOfferInteracting, setIsOfferInteracting] = React5.useState(false);
4629
+ const hasAmenities = isLoading || beds != null || baths != null || cars != null || propertyTypeLabel != null;
4744
4630
  const isTradeDisabled = !onTrade;
4745
4631
  const isMakeOfferButtonDisabled = makeOfferDisabled || !onMakeOffer;
4746
4632
  const showMakeOfferButton = !hideMakeOfferButton;
@@ -4753,112 +4639,201 @@ var PropertyHeroHeader = React5.forwardRef(
4753
4639
  setIsOfferInteracting(state);
4754
4640
  };
4755
4641
  const headingStyle = {
4756
- fontSize: "clamp(1.3rem, 3vw, 1.8rem)",
4757
- marginBottom: "0",
4642
+ fontSize: "clamp(1.6rem, 4vw, 2.5rem)",
4643
+ marginBottom: "0.5rem",
4758
4644
  color: "#ffffff",
4759
4645
  textShadow: "0 2px 4px rgba(0, 0, 0, 0.3)",
4760
4646
  fontWeight: 600,
4761
4647
  lineHeight: 1.2
4762
4648
  };
4763
- return /* @__PURE__ */ jsx(OuterWrapper, { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsxs(HeroContainer, { children: [
4764
- /* @__PURE__ */ jsx(
4765
- HeroImage,
4766
- {
4767
- src: imageUrl,
4768
- alt: imageAlt ?? name
4769
- }
4770
- ),
4771
- statusBadge ? /* @__PURE__ */ jsxs(StatusBadge, { $isLive: statusBadge.variant === "live", children: [
4772
- statusBadge.variant === "live" ? /* @__PURE__ */ jsx(PulsingDot, {}) : null,
4773
- statusBadge.label
4774
- ] }) : null,
4775
- /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 left-0 right-0 z-10 flex w-full items-end justify-center", style: { background: "linear-gradient(to top, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0) 100%)" }, children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-[1800px] flex-wrap items-end justify-between gap-4 p-8 max-[768px]:flex-col max-[768px]:items-start max-[768px]:gap-4 max-[768px]:p-6 max-[480px]:p-4", children: [
4776
- /* @__PURE__ */ jsx(InfoCard, { children: /* @__PURE__ */ jsxs(CardLayout, { children: [
4777
- /* @__PURE__ */ jsx(Thumbnail, { src: imageUrl, alt: imageAlt ?? name }),
4778
- /* @__PURE__ */ jsx(CardContent2, { children: /* @__PURE__ */ jsxs(InfoRow, { children: [
4779
- /* @__PURE__ */ jsx(NameGroup, { children: /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
4780
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.75rem", flexWrap: "wrap" }, children: [
4781
- /* @__PURE__ */ jsx("h1", { style: headingStyle, className: "break-words", children: name }),
4782
- location ? /* @__PURE__ */ jsx(TypeBadge, { children: location }) : null
4649
+ return /* @__PURE__ */ jsxs(OuterWrapper, { ref, className: cn(className), ...props, children: [
4650
+ /* @__PURE__ */ jsxs(HeroContainer, { children: [
4651
+ /* @__PURE__ */ jsx(
4652
+ HeroImage,
4653
+ {
4654
+ src: imageUrl,
4655
+ alt: imageAlt ?? name
4656
+ }
4657
+ ),
4658
+ statusBadge ? /* @__PURE__ */ jsxs(StatusBadge, { $isLive: statusBadge.variant === "live", children: [
4659
+ statusBadge.variant === "live" ? /* @__PURE__ */ jsx(PulsingDot, {}) : null,
4660
+ statusBadge.label
4661
+ ] }) : null,
4662
+ /* @__PURE__ */ jsx(HeroGradient, { "aria-hidden": "true" }),
4663
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 left-0 right-0 z-10 flex w-full items-end justify-center", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-[1800px] flex-wrap items-end justify-between gap-4 p-8 max-[768px]:flex-col max-[768px]:items-start max-[768px]:gap-4 max-[768px]:p-6 max-[480px]:p-4", children: [
4664
+ /* @__PURE__ */ jsxs(InfoCard, { children: [
4665
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-2", children: [
4666
+ /* @__PURE__ */ jsx("h1", { style: headingStyle, className: "break-words", children: name }),
4667
+ /* @__PURE__ */ jsxs(InfoRow, { className: "mb-3 max-[768px]:mb-[0.6rem] max-[480px]:mb-[0.5rem]", children: [
4668
+ /* @__PURE__ */ jsx(LocationText, { children: location }),
4669
+ isLoading ? /* @__PURE__ */ jsx(PriceBlock, { children: /* @__PURE__ */ jsx(Skeleton, { width: 110, height: 18 }) }) : price == null ? null : /* @__PURE__ */ jsxs(PriceBlock, { children: [
4670
+ formatPrice3(price, currencySymbol),
4671
+ changePercent == null ? null : /* @__PURE__ */ jsxs(
4672
+ "span",
4673
+ {
4674
+ className: cn(
4675
+ "ml-2 flex items-center text-[0.875rem] font-medium",
4676
+ isPositive ? "text-[#0ecb81]" : "text-[#f6465d]"
4677
+ ),
4678
+ children: [
4679
+ /* @__PURE__ */ jsx(
4680
+ "svg",
4681
+ {
4682
+ xmlns: "http://www.w3.org/2000/svg",
4683
+ width: "12",
4684
+ height: "12",
4685
+ viewBox: "0 0 24 24",
4686
+ fill: "currentColor",
4687
+ className: "mr-[0.15rem]",
4688
+ children: /* @__PURE__ */ jsx("path", { d: isPositive ? "M7 14l5-5 5 5H7z" : "M7 10l5 5 5-5H7z" })
4689
+ }
4690
+ ),
4691
+ Math.abs(changePercent).toFixed(2),
4692
+ "%"
4693
+ ]
4694
+ }
4695
+ )
4696
+ ] })
4697
+ ] })
4698
+ ] }),
4699
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-6 text-[0.95rem] text-white/90 max-[768px]:hidden", children: isLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
4700
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
4701
+ /* @__PURE__ */ jsx(BedDouble, { className: "mr-2 h-[18px] w-[18px] opacity-60" }),
4702
+ /* @__PURE__ */ jsx(Skeleton, { width: 52, height: 14 })
4783
4703
  ] }),
4784
- address ? /* @__PURE__ */ jsx(AddressText, { children: address }) : null
4785
- ] }) }),
4786
- /* @__PURE__ */ jsxs(PriceGroup, { children: [
4787
- isLoading ? /* @__PURE__ */ jsx(Skeleton, { width: 110, height: 24 }) : price == null ? null : /* @__PURE__ */ jsxs(PriceRow, { children: [
4788
- /* @__PURE__ */ jsx(CurrencyLabel, { children: "USD" }),
4789
- changePercent != null ? /* @__PURE__ */ jsx(PriceArrow, { $isPositive: isPositive, children: isPositive ? "\u25B2" : "\u25BC" }) : null,
4790
- formatPrice3(price, "")
4704
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
4705
+ /* @__PURE__ */ jsx(Bath, { className: "mr-2 h-[18px] w-[18px] opacity-60" }),
4706
+ /* @__PURE__ */ jsx(Skeleton, { width: 56, height: 14 })
4791
4707
  ] }),
4792
- changePercent != null ? /* @__PURE__ */ jsxs(PriceChangeRow, { $isPositive: isPositive, children: [
4793
- priceChange != null ? `${isPositive ? "+" : ""}${priceChange.toFixed(2)} ` : null,
4794
- "(",
4795
- isPositive ? "+" : "",
4796
- Math.abs(changePercent).toFixed(2),
4797
- "%)"
4798
- ] }) : null
4799
- ] })
4800
- ] }) })
4801
- ] }) }),
4802
- /* @__PURE__ */ jsxs(ActionButtons, { children: [
4803
- /* @__PURE__ */ jsx(
4804
- "button",
4805
- {
4806
- type: "button",
4807
- onClick: isTradeDisabled ? void 0 : onTrade,
4808
- className: "flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]",
4809
- style: {
4810
- backgroundColor: isTradeInteracting ? tradeHoverColor : accentColor,
4811
- color: "black",
4812
- padding: "0.75rem 1.5rem",
4813
- borderColor: isTradeInteracting ? accentColor : "transparent",
4814
- boxShadow: isTradeInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : "none",
4815
- opacity: isTradeDisabled ? 0.5 : 1,
4816
- cursor: isTradeDisabled ? "not-allowed" : "pointer"
4817
- },
4818
- onMouseEnter: () => setTradeInteraction(true),
4819
- onMouseLeave: () => setTradeInteraction(false),
4820
- onMouseDown: () => setTradeInteraction(true),
4821
- onMouseUp: () => setTradeInteraction(false),
4822
- onFocus: () => setTradeInteraction(true),
4823
- onBlur: () => setTradeInteraction(false),
4824
- onTouchStart: () => setTradeInteraction(true),
4825
- onTouchEnd: () => setTradeInteraction(false),
4826
- disabled: isTradeDisabled,
4827
- "aria-disabled": isTradeDisabled,
4828
- children: tradeButtonLabel
4829
- }
4830
- ),
4831
- showMakeOfferButton ? /* @__PURE__ */ jsx(
4832
- "button",
4833
- {
4834
- type: "button",
4835
- onClick: isMakeOfferButtonDisabled ? void 0 : onMakeOffer,
4836
- className: "flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]",
4837
- style: {
4838
- backgroundColor: isOfferInteracting ? accentColor : "transparent",
4839
- borderColor: accentColor,
4840
- color: isOfferInteracting ? "black" : accentColor,
4841
- padding: "0.75rem 1.5rem",
4842
- boxShadow: isOfferInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : "none",
4843
- opacity: isMakeOfferButtonDisabled ? 0.5 : 1,
4844
- cursor: isMakeOfferButtonDisabled ? "not-allowed" : "pointer"
4845
- },
4846
- onMouseEnter: () => setOfferInteraction(true),
4847
- onMouseLeave: () => setOfferInteraction(false),
4848
- onMouseDown: () => setOfferInteraction(true),
4849
- onMouseUp: () => setOfferInteraction(false),
4850
- onFocus: () => setOfferInteraction(true),
4851
- onBlur: () => setOfferInteraction(false),
4852
- onTouchStart: () => setOfferInteraction(true),
4853
- onTouchEnd: () => setOfferInteraction(false),
4854
- disabled: isMakeOfferButtonDisabled,
4855
- "aria-disabled": isMakeOfferButtonDisabled,
4856
- children: makeOfferButtonLabel
4857
- }
4858
- ) : null
4859
- ] })
4860
- ] }) })
4861
- ] }) });
4708
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
4709
+ /* @__PURE__ */ jsx(CarFront, { className: "mr-2 h-[18px] w-[18px] opacity-60" }),
4710
+ /* @__PURE__ */ jsx(Skeleton, { width: 50, height: 14 })
4711
+ ] }),
4712
+ /* @__PURE__ */ jsx(Skeleton, { width: 60, height: 14 })
4713
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4714
+ beds == null ? null : /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
4715
+ /* @__PURE__ */ jsx(BedDouble, { className: "mr-2 h-[18px] w-[18px]" }),
4716
+ /* @__PURE__ */ jsxs("span", { children: [
4717
+ beds,
4718
+ " Beds"
4719
+ ] })
4720
+ ] }),
4721
+ baths == null ? null : /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
4722
+ /* @__PURE__ */ jsx(Bath, { className: "mr-2 h-[18px] w-[18px]" }),
4723
+ /* @__PURE__ */ jsxs("span", { children: [
4724
+ baths,
4725
+ " Baths"
4726
+ ] })
4727
+ ] }),
4728
+ cars == null ? null : /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
4729
+ /* @__PURE__ */ jsx(CarFront, { className: "mr-2 h-[18px] w-[18px]" }),
4730
+ /* @__PURE__ */ jsxs("span", { children: [
4731
+ cars,
4732
+ " Cars"
4733
+ ] })
4734
+ ] }),
4735
+ propertyTypeLabel == null ? null : /* @__PURE__ */ jsx("div", { children: propertyTypeLabel })
4736
+ ] }) })
4737
+ ] }),
4738
+ /* @__PURE__ */ jsxs(ActionButtons, { children: [
4739
+ /* @__PURE__ */ jsx(
4740
+ "button",
4741
+ {
4742
+ type: "button",
4743
+ onClick: isTradeDisabled ? void 0 : onTrade,
4744
+ className: "flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]",
4745
+ style: {
4746
+ backgroundColor: isTradeInteracting ? tradeHoverColor : accentColor,
4747
+ color: "black",
4748
+ padding: "0.75rem 1.5rem",
4749
+ borderColor: isTradeInteracting ? accentColor : "transparent",
4750
+ boxShadow: isTradeInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : "none",
4751
+ opacity: isTradeDisabled ? 0.5 : 1,
4752
+ cursor: isTradeDisabled ? "not-allowed" : "pointer"
4753
+ },
4754
+ onMouseEnter: () => setTradeInteraction(true),
4755
+ onMouseLeave: () => setTradeInteraction(false),
4756
+ onMouseDown: () => setTradeInteraction(true),
4757
+ onMouseUp: () => setTradeInteraction(false),
4758
+ onFocus: () => setTradeInteraction(true),
4759
+ onBlur: () => setTradeInteraction(false),
4760
+ onTouchStart: () => setTradeInteraction(true),
4761
+ onTouchEnd: () => setTradeInteraction(false),
4762
+ disabled: isTradeDisabled,
4763
+ "aria-disabled": isTradeDisabled,
4764
+ children: tradeButtonLabel
4765
+ }
4766
+ ),
4767
+ showMakeOfferButton ? /* @__PURE__ */ jsx(
4768
+ "button",
4769
+ {
4770
+ type: "button",
4771
+ onClick: isMakeOfferButtonDisabled ? void 0 : onMakeOffer,
4772
+ className: "flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]",
4773
+ style: {
4774
+ backgroundColor: isOfferInteracting ? accentColor : "transparent",
4775
+ borderColor: accentColor,
4776
+ color: isOfferInteracting ? "black" : accentColor,
4777
+ padding: "0.75rem 1.5rem",
4778
+ boxShadow: isOfferInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : "none",
4779
+ opacity: isMakeOfferButtonDisabled ? 0.5 : 1,
4780
+ cursor: isMakeOfferButtonDisabled ? "not-allowed" : "pointer"
4781
+ },
4782
+ onMouseEnter: () => setOfferInteraction(true),
4783
+ onMouseLeave: () => setOfferInteraction(false),
4784
+ onMouseDown: () => setOfferInteraction(true),
4785
+ onMouseUp: () => setOfferInteraction(false),
4786
+ onFocus: () => setOfferInteraction(true),
4787
+ onBlur: () => setOfferInteraction(false),
4788
+ onTouchStart: () => setOfferInteraction(true),
4789
+ onTouchEnd: () => setOfferInteraction(false),
4790
+ disabled: isMakeOfferButtonDisabled,
4791
+ "aria-disabled": isMakeOfferButtonDisabled,
4792
+ children: makeOfferButtonLabel
4793
+ }
4794
+ ) : null
4795
+ ] })
4796
+ ] }) })
4797
+ ] }),
4798
+ hasAmenities ? /* @__PURE__ */ jsx(MobileAmenities, { children: isLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
4799
+ /* @__PURE__ */ jsxs(MobileAmenity, { children: [
4800
+ /* @__PURE__ */ jsx(BedDouble, { className: "h-4 w-4 opacity-60" }),
4801
+ /* @__PURE__ */ jsx(Skeleton, { width: 40, height: 12 })
4802
+ ] }),
4803
+ /* @__PURE__ */ jsxs(MobileAmenity, { children: [
4804
+ /* @__PURE__ */ jsx(Bath, { className: "h-4 w-4 opacity-60" }),
4805
+ /* @__PURE__ */ jsx(Skeleton, { width: 44, height: 12 })
4806
+ ] }),
4807
+ /* @__PURE__ */ jsxs(MobileAmenity, { children: [
4808
+ /* @__PURE__ */ jsx(CarFront, { className: "h-4 w-4 opacity-60" }),
4809
+ /* @__PURE__ */ jsx(Skeleton, { width: 42, height: 12 })
4810
+ ] }),
4811
+ /* @__PURE__ */ jsx(MobileAmenity, { children: /* @__PURE__ */ jsx(Skeleton, { width: 52, height: 12 }) })
4812
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4813
+ beds == null ? null : /* @__PURE__ */ jsxs(MobileAmenity, { children: [
4814
+ /* @__PURE__ */ jsx(BedDouble, { className: "h-4 w-4" }),
4815
+ /* @__PURE__ */ jsxs("span", { children: [
4816
+ beds,
4817
+ " Beds"
4818
+ ] })
4819
+ ] }),
4820
+ baths == null ? null : /* @__PURE__ */ jsxs(MobileAmenity, { children: [
4821
+ /* @__PURE__ */ jsx(Bath, { className: "h-4 w-4" }),
4822
+ /* @__PURE__ */ jsxs("span", { children: [
4823
+ baths,
4824
+ " Baths"
4825
+ ] })
4826
+ ] }),
4827
+ cars == null ? null : /* @__PURE__ */ jsxs(MobileAmenity, { children: [
4828
+ /* @__PURE__ */ jsx(CarFront, { className: "h-4 w-4" }),
4829
+ /* @__PURE__ */ jsxs("span", { children: [
4830
+ cars,
4831
+ " Cars"
4832
+ ] })
4833
+ ] }),
4834
+ propertyTypeLabel == null ? null : /* @__PURE__ */ jsx(MobileAmenity, { children: propertyTypeLabel })
4835
+ ] }) }) : null
4836
+ ] });
4862
4837
  }
4863
4838
  );
4864
4839
  PropertyHeroHeader.displayName = "PropertyHeroHeader";
@@ -4901,6 +4876,32 @@ var HeroContainer = styled25.div`
4901
4876
  border-radius: 6px;
4902
4877
  }
4903
4878
  `;
4879
+ var MobileAmenities = styled25.div`
4880
+ display: none;
4881
+ align-items: center;
4882
+ justify-content: space-between;
4883
+ gap: 0.5rem;
4884
+ padding: 0.5rem 0.75rem;
4885
+ background: rgba(8, 8, 12, 0.85);
4886
+ border-radius: 12px;
4887
+ border: 1px solid rgba(255, 255, 255, 0.1);
4888
+ color: rgba(255, 255, 255, 0.85);
4889
+ font-size: 0.85rem;
4890
+
4891
+ @media (max-width: 768px) {
4892
+ display: flex;
4893
+ flex-wrap: wrap;
4894
+ }
4895
+ `;
4896
+ var MobileAmenity = styled25.span`
4897
+ display: inline-flex;
4898
+ align-items: center;
4899
+ gap: 0.35rem;
4900
+ padding: 0.35rem 0.5rem;
4901
+ border-radius: 999px;
4902
+ background: rgba(255, 255, 255, 0.08);
4903
+ font-weight: 500;
4904
+ `;
4904
4905
  var HeroImage = styled25.img`
4905
4906
  width: 100%;
4906
4907
  height: 100%;
@@ -4915,6 +4916,15 @@ var HeroImage = styled25.img`
4915
4916
  transform: scale(1.0);
4916
4917
  transform-origin: center;
4917
4918
  `;
4919
+ var HeroGradient = styled25.div`
4920
+ position: absolute;
4921
+ bottom: 0;
4922
+ left: 0;
4923
+ right: 0;
4924
+ width: 100%;
4925
+ z-index: 1;
4926
+ background: linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0) 100%);
4927
+ `;
4918
4928
  var ActionButtons = styled25.div`
4919
4929
  display: flex;
4920
4930
  flex-wrap: wrap;
@@ -4930,42 +4940,13 @@ var ActionButtons = styled25.div`
4930
4940
  display: none;
4931
4941
  }
4932
4942
  `;
4933
- var CardLayout = styled25.div`
4934
- display: flex;
4935
- align-items: center;
4936
- gap: 1rem;
4937
-
4938
- @media (max-width: 480px) {
4939
- gap: 0.75rem;
4940
- }
4941
- `;
4942
- var Thumbnail = styled25.img`
4943
- width: 72px;
4944
- height: 72px;
4945
- border-radius: 8px;
4946
- object-fit: cover;
4947
- flex-shrink: 0;
4948
- border: 1px solid rgba(255, 255, 255, 0.15);
4949
-
4950
- @media (max-width: 768px) {
4951
- width: 56px;
4952
- height: 56px;
4953
- border-radius: 6px;
4954
- }
4955
-
4956
- @media (max-width: 480px) {
4957
- width: 48px;
4958
- height: 48px;
4959
- }
4960
- `;
4961
- var CardContent2 = styled25.div`
4962
- min-width: 0;
4963
- flex: 1;
4964
- `;
4965
4943
  var InfoCard = styled25.div`
4944
+ display: inline-block;
4945
+ width: fit-content;
4946
+ max-width: 70%;
4966
4947
  border-radius: 12px;
4967
- background: rgba(0, 0, 0, 0.15);
4968
- padding: 1rem 1.5rem;
4948
+ background: rgba(0, 0, 0, 0.12);
4949
+ padding: 0.75rem 1rem;
4969
4950
  color: #fff;
4970
4951
  backdrop-filter: blur(6px);
4971
4952
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
@@ -4973,109 +4954,62 @@ var InfoCard = styled25.div`
4973
4954
  min-width: 0;
4974
4955
 
4975
4956
  @media (max-width: 768px) {
4976
- padding: 0.85rem 1.15rem;
4957
+ max-width: 85%;
4958
+ }
4959
+
4960
+ @media (max-width: 640px) {
4961
+ max-width: 92%;
4977
4962
  }
4978
4963
 
4979
4964
  @media (max-width: 480px) {
4980
- padding: 0.65rem 0.85rem;
4965
+ max-width: 95%;
4981
4966
  }
4982
4967
  `;
4983
- var NameGroup = styled25.div`
4984
- display: flex;
4968
+ var InfoRow = styled25.div`
4969
+ display: grid;
4970
+ grid-template-columns: minmax(0, 1fr) auto;
4985
4971
  align-items: center;
4986
4972
  gap: 0.75rem;
4987
- min-width: 0;
4988
- flex-wrap: wrap;
4973
+ width: 100%;
4974
+
4975
+ @media (max-width: 640px) {
4976
+ gap: 0.5rem;
4977
+ }
4989
4978
  `;
4990
- var TypeBadge = styled25.span`
4991
- display: inline-flex;
4992
- align-items: center;
4993
- padding: 0.2rem 0.5rem;
4994
- border-radius: 4px;
4995
- font-size: 0.7rem;
4996
- font-weight: 600;
4997
- letter-spacing: 0.03em;
4998
- text-transform: uppercase;
4999
- line-height: 1;
5000
- color: #E6C87E;
5001
- background: rgba(230, 200, 126, 0.12);
4979
+ var LocationText = styled25.span`
4980
+ font-size: clamp(1rem, 2.6vw, 1.25rem);
4981
+ color: rgba(255, 255, 255, 0.9);
4982
+ font-weight: 500;
4983
+ overflow: hidden;
4984
+ text-overflow: ellipsis;
5002
4985
  white-space: nowrap;
5003
- flex-shrink: 0;
5004
4986
  `;
5005
- var InfoRow = styled25.div`
4987
+ var PriceBlock = styled25.span`
5006
4988
  display: flex;
5007
- align-items: baseline;
5008
- justify-content: space-between;
5009
- gap: 1rem;
4989
+ align-items: center;
4990
+ font-size: clamp(1rem, 2.2vw, 1.25rem);
4991
+ font-weight: 600;
4992
+ color: var(--color-accent, #f0b90b);
4993
+ padding-left: 1rem;
4994
+ border-left: 1px solid rgba(255, 255, 255, 0.25);
4995
+ min-height: 1.5rem;
5010
4996
  `;
5011
- var PriceGroup = styled25.div`
4997
+ var StatusBadge = styled25.div`
4998
+ position: absolute;
4999
+ top: 1rem;
5000
+ left: 1rem;
5012
5001
  display: flex;
5013
- flex-direction: column;
5014
- align-items: flex-end;
5015
- flex-shrink: 0;
5016
- `;
5017
- var PriceRow = styled25.span`
5018
- display: inline-flex;
5019
- align-items: baseline;
5020
- font-size: clamp(1.3rem, 3vw, 1.8rem);
5002
+ align-items: center;
5003
+ gap: 0.5rem;
5004
+ background-color: ${({ $isLive }) => $isLive ? "rgba(20, 20, 20, 0.85)" : "rgba(240, 185, 11, 0.9)"};
5005
+ color: ${({ $isLive }) => $isLive ? "#f0b90b" : "#000"};
5006
+ padding: 0.5rem 1rem;
5007
+ border-radius: 6px;
5021
5008
  font-weight: 600;
5022
- color: #fff;
5023
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', 'JetBrains Mono', ui-monospace, monospace;
5024
- font-variant-numeric: tabular-nums;
5025
- white-space: nowrap;
5026
- flex-shrink: 0;
5027
- `;
5028
- var CurrencyLabel = styled25.span`
5029
- font-size: 0.55em;
5030
- font-weight: 500;
5031
- color: rgba(255, 255, 255, 0.4);
5032
- margin-right: 0.3em;
5033
- `;
5034
- var PriceArrow = styled25.span`
5035
- color: ${({ $isPositive }) => $isPositive ? "#0ecb81" : "#f6465d"};
5036
- font-size: 0.65em;
5037
- margin: 0 0.1em;
5038
- `;
5039
- var AddressText = styled25.p`
5040
- font-size: 1.1rem;
5041
- color: rgba(255, 255, 255, 0.7);
5042
- font-weight: 400;
5043
- margin: 0.1rem 0 0;
5044
-
5045
- @media (max-width: 768px) {
5046
- font-size: 1rem;
5047
- }
5048
-
5049
- @media (max-width: 480px) {
5050
- font-size: 0.9rem;
5051
- }
5052
- `;
5053
- var PriceChangeRow = styled25.span`
5054
- display: inline-flex;
5055
- align-items: center;
5056
- white-space: nowrap;
5057
- flex-shrink: 0;
5058
- font-size: 0.85rem;
5059
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', 'JetBrains Mono', ui-monospace, monospace;
5060
- font-variant-numeric: tabular-nums;
5061
- color: ${({ $isPositive }) => $isPositive ? "#0ecb81" : "#f6465d"};
5062
- `;
5063
- var StatusBadge = styled25.div`
5064
- position: absolute;
5065
- top: 1rem;
5066
- left: 1rem;
5067
- display: flex;
5068
- align-items: center;
5069
- gap: 0.5rem;
5070
- background-color: ${({ $isLive }) => $isLive ? "rgba(20, 20, 20, 0.85)" : "rgba(240, 185, 11, 0.9)"};
5071
- color: ${({ $isLive }) => $isLive ? "#f0b90b" : "#000"};
5072
- padding: 0.5rem 1rem;
5073
- border-radius: 6px;
5074
- font-weight: 600;
5075
- font-size: 0.875rem;
5076
- z-index: 10;
5077
- border: ${({ $isLive }) => $isLive ? "1px solid rgba(240, 185, 11, 0.5)" : "none"};
5078
- backdrop-filter: blur(8px);
5009
+ font-size: 0.875rem;
5010
+ z-index: 10;
5011
+ border: ${({ $isLive }) => $isLive ? "1px solid rgba(240, 185, 11, 0.5)" : "none"};
5012
+ backdrop-filter: blur(8px);
5079
5013
  `;
5080
5014
  var PulsingDot = styled25.span`
5081
5015
  display: inline-block;
@@ -5135,45 +5069,13 @@ var Header = ({
5135
5069
  onProfileNavigate: _onProfileNavigate,
5136
5070
  onOrdersNavigate: _onOrdersNavigate,
5137
5071
  onWalletNavigate: _onWalletNavigate,
5138
- showTradeTab = true,
5139
- portfolioSummary
5072
+ showTradeTab = true
5140
5073
  }) => {
5141
5074
  const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);
5142
5075
  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
5143
5076
  const [isMoreMenuOpen, setIsMoreMenuOpen] = useState(false);
5144
5077
  const [showLoginPopup, setShowLoginPopup] = useState(false);
5145
5078
  const [loginPopupInitialView, setLoginPopupInitialView] = useState(void 0);
5146
- const [isPortfolioBarVisible, setIsPortfolioBarVisible] = useState(() => {
5147
- if (typeof localStorage === "undefined") return false;
5148
- return localStorage.getItem("portfolioBarVisible") !== "false";
5149
- });
5150
- const portfolioPillRef = useRef(null);
5151
- const [portfolioArrowLeft, setPortfolioArrowLeft] = useState(null);
5152
- const togglePortfolioBar = useCallback(() => {
5153
- setIsPortfolioBarVisible((prev) => {
5154
- const next = !prev;
5155
- try {
5156
- localStorage.setItem("portfolioBarVisible", String(next));
5157
- } catch {
5158
- }
5159
- return next;
5160
- });
5161
- }, []);
5162
- const updatePortfolioArrow = useCallback(() => {
5163
- const eye = document.getElementById("portfolio-eye-toggle");
5164
- const pill = portfolioPillRef.current;
5165
- if (!eye || !pill) return;
5166
- const eyeRect = eye.getBoundingClientRect();
5167
- const pillRect = pill.getBoundingClientRect();
5168
- const offset = eyeRect.left + eyeRect.width / 2 - pillRect.left - 7;
5169
- setPortfolioArrowLeft(offset);
5170
- }, []);
5171
- useEffect(() => {
5172
- if (!isPortfolioBarVisible || !portfolioSummary) return;
5173
- updatePortfolioArrow();
5174
- window.addEventListener("resize", updatePortfolioArrow);
5175
- return () => window.removeEventListener("resize", updatePortfolioArrow);
5176
- }, [isPortfolioBarVisible, portfolioSummary, updatePortfolioArrow]);
5177
5079
  useEffect(() => {
5178
5080
  if (typeof window === "undefined") return;
5179
5081
  const ua = navigator.userAgent;
@@ -5551,17 +5453,6 @@ var Header = ({
5551
5453
  }
5552
5454
  ),
5553
5455
  isAuthenticated ? /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
5554
- portfolioSummary && /* @__PURE__ */ jsx(
5555
- PortfolioEyeButton,
5556
- {
5557
- id: "portfolio-eye-toggle",
5558
- type: "button",
5559
- onClick: togglePortfolioBar,
5560
- $active: isPortfolioBarVisible,
5561
- title: isPortfolioBarVisible ? "Hide portfolio" : "Show portfolio",
5562
- children: isPortfolioBarVisible ? /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z" }) }) : /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 001 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z" }) })
5563
- }
5564
- ),
5565
5456
  /* @__PURE__ */ jsxs(UserMenu, { children: [
5566
5457
  /* @__PURE__ */ jsxs(
5567
5458
  UserButton,
@@ -5633,51 +5524,6 @@ var Header = ({
5633
5524
  ] })
5634
5525
  ] }),
5635
5526
  /* @__PURE__ */ jsx(HeaderSpacer, {}),
5636
- isAuthenticated && portfolioSummary && isPortfolioBarVisible && (() => {
5637
- const fmt = (n) => n.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 });
5638
- const isPLPositive = portfolioSummary.pnl >= 0;
5639
- return /* @__PURE__ */ jsx(PortfolioBarContainer, { children: /* @__PURE__ */ jsxs(PortfolioBarPill, { ref: portfolioPillRef, children: [
5640
- portfolioArrowLeft !== null && /* @__PURE__ */ jsx(PortfolioBarArrow, { style: { left: `${portfolioArrowLeft}px` } }),
5641
- /* @__PURE__ */ jsxs(PBMetric, { children: [
5642
- /* @__PURE__ */ jsx(PBMetricLabel, { children: "Holdings" }),
5643
- /* @__PURE__ */ jsxs(PBMetricValue, { children: [
5644
- "$",
5645
- fmt(portfolioSummary.holdings)
5646
- ] })
5647
- ] }),
5648
- /* @__PURE__ */ jsx(PBOperator, { children: "+" }),
5649
- /* @__PURE__ */ jsxs(PBMetric, { children: [
5650
- /* @__PURE__ */ jsx(PBMetricLabel, { children: "Cash" }),
5651
- /* @__PURE__ */ jsxs(PBMetricValue, { children: [
5652
- "$",
5653
- fmt(portfolioSummary.cash)
5654
- ] })
5655
- ] }),
5656
- /* @__PURE__ */ jsx(PBOperator, { children: "=" }),
5657
- /* @__PURE__ */ jsxs(PBMetric, { children: [
5658
- /* @__PURE__ */ jsx(PBMetricLabel, { children: "Portfolio" }),
5659
- /* @__PURE__ */ jsxs(PBMetricValue, { style: { color: "#D4AF37", fontWeight: 700 }, children: [
5660
- "$",
5661
- fmt(portfolioSummary.portfolioValue)
5662
- ] })
5663
- ] }),
5664
- /* @__PURE__ */ jsx(PBDot, {}),
5665
- /* @__PURE__ */ jsxs(PBMetric, { children: [
5666
- /* @__PURE__ */ jsx(PBMetricLabel, { children: "P&L" }),
5667
- /* @__PURE__ */ jsxs(PBMetricValue, { $positive: isPLPositive, $negative: !isPLPositive, children: [
5668
- isPLPositive ? "+" : "",
5669
- "$",
5670
- fmt(Math.abs(portfolioSummary.pnl)),
5671
- /* @__PURE__ */ jsxs("span", { style: { fontSize: "0.6rem", marginLeft: "2px", opacity: 0.7 }, children: [
5672
- "(",
5673
- isPLPositive ? "+" : "",
5674
- portfolioSummary.pnlPercent.toFixed(2),
5675
- "%)"
5676
- ] })
5677
- ] })
5678
- ] })
5679
- ] }) });
5680
- })(),
5681
5527
  LoginPopupComponent && showLoginPopup && /* @__PURE__ */ jsx(
5682
5528
  LoginPopupComponent,
5683
5529
  {
@@ -5763,19 +5609,8 @@ var HeaderContainer = styled25.header`
5763
5609
  box-sizing: border-box;
5764
5610
 
5765
5611
  @media (max-width: 768px) {
5766
- top: 0.5rem;
5767
- left: 0.75rem;
5768
- right: 0.75rem;
5769
- width: calc(100% - 1.5rem);
5770
- height: 46px;
5771
- min-height: 46px;
5772
- padding: 0 0.75rem;
5773
- border-radius: 12px;
5774
- background-color: rgba(13, 17, 23, 0.92);
5775
- backdrop-filter: blur(12px);
5776
- border: 1px solid rgba(255, 255, 255, 0.08);
5777
- border-bottom: 1px solid rgba(255, 255, 255, 0.08);
5778
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
5612
+ padding: 0 1rem;
5613
+ padding-top: max(env(safe-area-inset-top, 0px), var(--telegram-safe-top, 0px));
5779
5614
  }
5780
5615
  `;
5781
5616
  var HeaderSpacer = styled25.div`
@@ -5783,10 +5618,6 @@ var HeaderSpacer = styled25.div`
5783
5618
  min-height: 56px;
5784
5619
  min-height: calc(56px + max(env(safe-area-inset-top, 0px), var(--telegram-safe-top, 0px)));
5785
5620
  flex-shrink: 0;
5786
-
5787
- @media (max-width: 768px) {
5788
- min-height: calc(46px + 0.5rem);
5789
- }
5790
5621
  `;
5791
5622
  var Logo = styled25.div`
5792
5623
  display: flex;
@@ -6120,151 +5951,6 @@ var MobileNavItem = styled25.div`
6120
5951
  padding-left: 24px;
6121
5952
  }
6122
5953
  `;
6123
- var pbShimmer = keyframes`
6124
- 0% { background-position: -200% 0; }
6125
- 100% { background-position: 200% 0; }
6126
- `;
6127
- var PortfolioEyeButton = styled25.button`
6128
- background: ${(p) => p.$active ? "rgba(212, 175, 55, 0.15)" : "transparent"};
6129
- border: none;
6130
- border-radius: 6px;
6131
- cursor: pointer;
6132
- padding: 6px;
6133
- display: flex;
6134
- align-items: center;
6135
- justify-content: center;
6136
- color: ${(p) => p.$active ? "#D4AF37" : "rgba(255,255,255,0.5)"};
6137
- transition: all 0.2s ease;
6138
- margin-right: 4px;
6139
-
6140
- &:hover {
6141
- background: rgba(212, 175, 55, 0.2);
6142
- color: #D4AF37;
6143
- }
6144
-
6145
- @media (max-width: 768px) {
6146
- padding: 4px;
6147
- margin-right: 2px;
6148
- }
6149
- `;
6150
- var PortfolioBarContainer = styled25.div`
6151
- position: fixed;
6152
- top: 56px;
6153
- top: calc(56px + max(env(safe-area-inset-top, 0px), var(--telegram-safe-top, 0px)));
6154
- left: 0;
6155
- right: 0;
6156
- z-index: 999;
6157
- display: flex;
6158
- justify-content: flex-end;
6159
- align-items: flex-start;
6160
- padding: 0 5%;
6161
- pointer-events: none;
6162
- overflow: visible;
6163
-
6164
- &::before {
6165
- content: '';
6166
- position: absolute;
6167
- top: 0;
6168
- left: 40%;
6169
- right: 0;
6170
- height: 2px;
6171
- background: linear-gradient(90deg, transparent 0%, rgba(212, 175, 55, 0.25) 100%);
6172
- pointer-events: none;
6173
- }
6174
-
6175
- @media (max-width: 768px) {
6176
- top: calc(46px + 0.5rem);
6177
- padding: 0 0.75rem;
6178
- justify-content: center;
6179
-
6180
- &::before {
6181
- left: 0;
6182
- right: 0;
6183
- background: linear-gradient(90deg, transparent 0%, rgba(212, 175, 55, 0.4) 30%, rgba(212, 175, 55, 0.4) 70%, transparent 100%);
6184
- }
6185
- }
6186
- `;
6187
- var PortfolioBarPill = styled25.div`
6188
- pointer-events: auto;
6189
- display: flex;
6190
- align-items: center;
6191
- gap: 1.25rem;
6192
- padding: 0.5rem 1.5rem;
6193
- border-radius: 0 0 20px 20px;
6194
- background: linear-gradient(135deg, rgba(24, 26, 34, 0.98) 0%, rgba(32, 34, 42, 0.97) 100%);
6195
- backdrop-filter: blur(16px);
6196
- border: 1px solid rgba(212, 175, 55, 0.25);
6197
- border-top: none;
6198
- box-shadow:
6199
- 0 4px 16px rgba(0, 0, 0, 0.3),
6200
- 0 0 0 1px rgba(255, 255, 255, 0.03) inset,
6201
- 0 1px 0 rgba(212, 175, 55, 0.06) inset;
6202
- position: relative;
6203
- overflow: visible;
6204
-
6205
- &::before {
6206
- content: '';
6207
- position: absolute;
6208
- top: 0;
6209
- left: 0;
6210
- right: 0;
6211
- height: 1px;
6212
- background: linear-gradient(90deg, transparent, rgba(212, 175, 55, 0.3), transparent);
6213
- background-size: 200% 100%;
6214
- animation: ${pbShimmer} 4s linear infinite;
6215
- }
6216
-
6217
- @media (max-width: 768px) {
6218
- gap: 0.75rem;
6219
- padding: 0.4rem 1rem;
6220
- border-radius: 0 0 16px 16px;
6221
- }
6222
- `;
6223
- var PortfolioBarArrow = styled25.div`
6224
- position: absolute;
6225
- top: -7px;
6226
- width: 14px;
6227
- height: 14px;
6228
- background: linear-gradient(135deg, rgba(26, 28, 36, 1) 0%, rgba(30, 32, 40, 1) 100%);
6229
- border-left: 1px solid rgba(212, 175, 55, 0.3);
6230
- border-top: 1px solid rgba(212, 175, 55, 0.3);
6231
- transform: rotate(45deg);
6232
- box-shadow: -2px -2px 6px rgba(0, 0, 0, 0.25);
6233
- pointer-events: none;
6234
- `;
6235
- var PBMetric = styled25.div`
6236
- display: flex;
6237
- flex-direction: column;
6238
- align-items: center;
6239
- gap: 1px;
6240
- white-space: nowrap;
6241
- `;
6242
- var PBMetricLabel = styled25.span`
6243
- font-size: 0.55rem;
6244
- color: rgba(255, 255, 255, 0.6);
6245
- text-transform: uppercase;
6246
- letter-spacing: 0.5px;
6247
- font-weight: 500;
6248
- `;
6249
- var PBMetricValue = styled25.span`
6250
- font-size: 0.75rem;
6251
- font-weight: 600;
6252
- color: ${(p) => p.$positive ? "#0ecb81" : p.$negative ? "#f6465d" : "#eaecef"};
6253
- font-variant-numeric: tabular-nums;
6254
- `;
6255
- var PBDot = styled25.div`
6256
- width: 3px;
6257
- height: 3px;
6258
- border-radius: 50%;
6259
- background: rgba(212, 175, 55, 0.25);
6260
- flex-shrink: 0;
6261
- `;
6262
- var PBOperator = styled25.span`
6263
- font-size: 0.7rem;
6264
- font-weight: 500;
6265
- color: rgba(255, 255, 255, 0.35);
6266
- flex-shrink: 0;
6267
- `;
6268
5954
  var PropertySubheader = React5.forwardRef(
6269
5955
  ({ className, tabs, activeTabId, onTabChange, actions, ...props }, ref) => {
6270
5956
  const tabsContainerRef = React5.useRef(null);
@@ -6390,6 +6076,191 @@ var PropertySubheader = React5.forwardRef(
6390
6076
  }
6391
6077
  );
6392
6078
  PropertySubheader.displayName = "PropertySubheader";
6079
+ var slideIn = keyframes`
6080
+ from { transform: translateX(110%); opacity: 0; }
6081
+ to { transform: translateX(0); opacity: 1; }
6082
+ `;
6083
+ var slideOut = keyframes`
6084
+ from { transform: translateX(0); opacity: 1; }
6085
+ to { transform: translateX(110%); opacity: 0; }
6086
+ `;
6087
+ var progressShrink = keyframes`
6088
+ from { width: 100%; }
6089
+ to { width: 0%; }
6090
+ `;
6091
+ var VARIANT_COLORS = {
6092
+ success: { accent: "#0ecb81", icon: "\u2713" },
6093
+ error: { accent: "#f6465d", icon: "\u2715" },
6094
+ info: { accent: "#E6C656", icon: "\u2139" },
6095
+ pending: { accent: "#7EB3E6", icon: "\u25CC" }
6096
+ };
6097
+ var Wrapper = styled25.div`
6098
+ position: relative;
6099
+ display: flex;
6100
+ flex-direction: column;
6101
+ gap: 0;
6102
+ width: 340px;
6103
+ background: #0d0f1a;
6104
+ border: 1px solid rgba(255, 255, 255, 0.08);
6105
+ border-radius: 10px;
6106
+ overflow: hidden;
6107
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.04);
6108
+ animation: ${({ $exiting }) => $exiting ? css`${slideOut} 0.28s cubic-bezier(0.4,0,1,1) forwards` : css`${slideIn} 0.32s cubic-bezier(0,0,0.2,1) forwards`};
6109
+ pointer-events: all;
6110
+ `;
6111
+ var Body = styled25.div`
6112
+ display: flex;
6113
+ align-items: flex-start;
6114
+ gap: 12px;
6115
+ padding: 14px 16px 12px;
6116
+ `;
6117
+ var IconDot = styled25.div`
6118
+ flex-shrink: 0;
6119
+ width: 28px;
6120
+ height: 28px;
6121
+ border-radius: 50%;
6122
+ background: ${({ $color }) => $color}1a;
6123
+ border: 1px solid ${({ $color }) => $color}55;
6124
+ display: flex;
6125
+ align-items: center;
6126
+ justify-content: center;
6127
+ font-size: 0.75rem;
6128
+ font-weight: 700;
6129
+ color: ${({ $color }) => $color};
6130
+ margin-top: 1px;
6131
+ `;
6132
+ var Content = styled25.div`
6133
+ flex: 1;
6134
+ min-width: 0;
6135
+ `;
6136
+ var Title = styled25.p`
6137
+ margin: 0 0 2px;
6138
+ font-size: 0.8rem;
6139
+ font-weight: 600;
6140
+ color: #fff;
6141
+ letter-spacing: 0.01em;
6142
+ `;
6143
+ var Amount = styled25.p`
6144
+ margin: 0 0 6px;
6145
+ font-size: 1.05rem;
6146
+ font-weight: 700;
6147
+ color: #E6C656;
6148
+ letter-spacing: -0.01em;
6149
+ `;
6150
+ var TxRow = styled25.a`
6151
+ display: inline-flex;
6152
+ align-items: center;
6153
+ gap: 5px;
6154
+ font-family: 'IBM Plex Mono', 'Space Mono', monospace;
6155
+ font-size: 0.68rem;
6156
+ color: rgba(255, 255, 255, 0.4);
6157
+ text-decoration: none;
6158
+ transition: color 0.15s;
6159
+ &:hover {
6160
+ color: #7EB3E6;
6161
+ }
6162
+ `;
6163
+ var TxArrow = styled25.span`
6164
+ font-size: 0.6rem;
6165
+ opacity: 0.6;
6166
+ `;
6167
+ var CloseBtn = styled25.button`
6168
+ flex-shrink: 0;
6169
+ background: none;
6170
+ border: none;
6171
+ padding: 2px 4px;
6172
+ cursor: pointer;
6173
+ color: rgba(255, 255, 255, 0.25);
6174
+ font-size: 0.9rem;
6175
+ line-height: 1;
6176
+ transition: color 0.15s;
6177
+ &:hover { color: rgba(255, 255, 255, 0.7); }
6178
+ `;
6179
+ var ProgressBar = styled25.div`
6180
+ height: 2px;
6181
+ background: rgba(255, 255, 255, 0.06);
6182
+ position: relative;
6183
+ &::after {
6184
+ content: '';
6185
+ position: absolute;
6186
+ left: 0;
6187
+ top: 0;
6188
+ height: 100%;
6189
+ background: ${({ $color }) => $color};
6190
+ animation: ${css`${progressShrink} ${({ $duration }) => $duration}ms linear forwards`};
6191
+ }
6192
+ `;
6193
+ var Container = styled25.div`
6194
+ position: fixed;
6195
+ bottom: 24px;
6196
+ right: 24px;
6197
+ z-index: 9999;
6198
+ display: flex;
6199
+ flex-direction: column-reverse;
6200
+ gap: 10px;
6201
+ pointer-events: none;
6202
+ `;
6203
+ var DEFAULT_EXPLORER = "https://sepolia.basescan.org/tx/";
6204
+ function truncateHash(hash) {
6205
+ return `${hash.slice(0, 6)}\u2026${hash.slice(-4)}`;
6206
+ }
6207
+ function ToastItem({ toast, onDismiss }) {
6208
+ const [exiting, setExiting] = useState(false);
6209
+ const timerRef = useRef(null);
6210
+ const dismiss = useCallback(() => {
6211
+ setExiting(true);
6212
+ setTimeout(() => onDismiss(toast.id), 280);
6213
+ }, [onDismiss, toast.id]);
6214
+ useEffect(() => {
6215
+ const duration2 = toast.duration ?? 6e3;
6216
+ if (duration2 > 0) {
6217
+ timerRef.current = setTimeout(dismiss, duration2);
6218
+ }
6219
+ return () => {
6220
+ if (timerRef.current) clearTimeout(timerRef.current);
6221
+ };
6222
+ }, [dismiss, toast.duration]);
6223
+ const { accent, icon } = VARIANT_COLORS[toast.variant];
6224
+ const duration = toast.duration ?? 6e3;
6225
+ const explorerBase = toast.explorerUrl ?? DEFAULT_EXPLORER;
6226
+ const txUrl = toast.txHash ? `${explorerBase}${toast.txHash}` : void 0;
6227
+ return /* @__PURE__ */ jsxs(Wrapper, { $exiting: exiting, children: [
6228
+ /* @__PURE__ */ jsxs(Body, { children: [
6229
+ /* @__PURE__ */ jsx(IconDot, { $color: accent, children: icon }),
6230
+ /* @__PURE__ */ jsxs(Content, { children: [
6231
+ /* @__PURE__ */ jsx(Title, { children: toast.title }),
6232
+ toast.amount && /* @__PURE__ */ jsx(Amount, { children: toast.amount }),
6233
+ toast.txHash && txUrl && /* @__PURE__ */ jsxs(TxRow, { href: txUrl, target: "_blank", rel: "noopener noreferrer", children: [
6234
+ truncateHash(toast.txHash),
6235
+ /* @__PURE__ */ jsx(TxArrow, { children: "\u2197" })
6236
+ ] })
6237
+ ] }),
6238
+ /* @__PURE__ */ jsx(CloseBtn, { type: "button", onClick: dismiss, "aria-label": "Dismiss", children: "\u2715" })
6239
+ ] }),
6240
+ duration > 0 && /* @__PURE__ */ jsx(ProgressBar, { $color: accent, $duration: duration })
6241
+ ] });
6242
+ }
6243
+ var ToastContext = createContext(null);
6244
+ function ToastProvider({ children }) {
6245
+ const [toasts, setToasts] = useState([]);
6246
+ const addToast = useCallback((data) => {
6247
+ const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
6248
+ setToasts((prev) => [...prev, { ...data, id }]);
6249
+ return id;
6250
+ }, []);
6251
+ const dismiss = useCallback((id) => {
6252
+ setToasts((prev) => prev.filter((t) => t.id !== id));
6253
+ }, []);
6254
+ return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: { toast: addToast, dismiss }, children: [
6255
+ children,
6256
+ /* @__PURE__ */ jsx(Container, { children: toasts.map((t) => /* @__PURE__ */ jsx(ToastItem, { toast: t, onDismiss: dismiss }, t.id)) })
6257
+ ] });
6258
+ }
6259
+ function useToast() {
6260
+ const ctx = useContext(ToastContext);
6261
+ if (!ctx) throw new Error("useToast must be used within a ToastProvider");
6262
+ return ctx;
6263
+ }
6393
6264
  var DEFAULT_LOGO_SRC = Loaf_logo_Banner_default;
6394
6265
  var DEFAULT_LOGO_ALT = "Loaf";
6395
6266
  var OTP_INPUT_LENGTH = 6;
@@ -6417,6 +6288,7 @@ var LoginPopup = ({
6417
6288
  const [error, setError] = useState("");
6418
6289
  const [loading, setLoading] = useState(false);
6419
6290
  const [isSignUp, setIsSignUp] = useState(false);
6291
+ const { toast } = useToast();
6420
6292
  const [fundingAmount] = useState("");
6421
6293
  const [kycLoading, setKycLoading] = useState(false);
6422
6294
  const [showKycWidget, setShowKycWidget] = useState(false);
@@ -6430,6 +6302,11 @@ var LoginPopup = ({
6430
6302
  setView(initialView);
6431
6303
  }
6432
6304
  }, [initialView]);
6305
+ useEffect(() => {
6306
+ if (view === "kyc" && renderKycWidget) {
6307
+ setShowKycWidget(true);
6308
+ }
6309
+ }, [view, renderKycWidget]);
6433
6310
  useEffect(() => {
6434
6311
  if (!transakWidgetUrl) return;
6435
6312
  const handleTransakMessage = (event) => {
@@ -6632,10 +6509,19 @@ var LoginPopup = ({
6632
6509
  };
6633
6510
  const handleKycWidgetResult = (result) => {
6634
6511
  setShowKycWidget(false);
6512
+ onClose();
6635
6513
  if (result.passed) {
6636
- setView("kyc-success");
6514
+ toast({
6515
+ variant: "success",
6516
+ title: "KYC submitted \u2014 pending review",
6517
+ amount: "Your documents are under review. Please check back in a few minutes."
6518
+ });
6637
6519
  } else {
6638
- setView("kyc-failed");
6520
+ toast({
6521
+ variant: "error",
6522
+ title: "Verification unsuccessful",
6523
+ amount: "Your identity check didn't pass. Please contact support if you believe this is an error."
6524
+ });
6639
6525
  }
6640
6526
  };
6641
6527
  const handleKycWidgetClose = () => {
@@ -6726,7 +6612,7 @@ var LoginPopup = ({
6726
6612
  if (view === "main") {
6727
6613
  return /* @__PURE__ */ jsx(Overlay2, { onClick: onClose, children: /* @__PURE__ */ jsxs(PopupContainer, { onClick: (event) => event.stopPropagation(), children: [
6728
6614
  /* @__PURE__ */ jsx(CloseButton, { onClick: onClose, "aria-label": "Close login popup", children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }) }) }),
6729
- /* @__PURE__ */ jsxs(Title, { children: [
6615
+ /* @__PURE__ */ jsxs(Title2, { children: [
6730
6616
  /* @__PURE__ */ jsx(LogoContainer3, { children: /* @__PURE__ */ jsx(LogoImage, { src: logoSrc, alt: logoAlt }) }),
6731
6617
  "Welcome to Loaf"
6732
6618
  ] }),
@@ -6787,7 +6673,7 @@ var LoginPopup = ({
6787
6673
  /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z" }) }),
6788
6674
  "Back"
6789
6675
  ] }),
6790
- /* @__PURE__ */ jsxs(Title, { children: [
6676
+ /* @__PURE__ */ jsxs(Title2, { children: [
6791
6677
  /* @__PURE__ */ jsx(LogoContainer3, { children: /* @__PURE__ */ jsx(LogoImage, { src: logoSrc, alt: logoAlt }) }),
6792
6678
  isSignUp ? "Sign up with Email" : "Sign in with Email"
6793
6679
  ] }),
@@ -6826,7 +6712,7 @@ var LoginPopup = ({
6826
6712
  /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z" }) }),
6827
6713
  "Back"
6828
6714
  ] }),
6829
- /* @__PURE__ */ jsxs(Title, { children: [
6715
+ /* @__PURE__ */ jsxs(Title2, { children: [
6830
6716
  /* @__PURE__ */ jsx(LogoContainer3, { children: /* @__PURE__ */ jsx(LogoImage, { src: logoSrc, alt: logoAlt }) }),
6831
6717
  "Enter Verification Code"
6832
6718
  ] }),
@@ -6942,7 +6828,7 @@ var LoginPopup = ({
6942
6828
  ] }) });
6943
6829
  }
6944
6830
  if (view === "funding") {
6945
- return /* @__PURE__ */ jsx(Overlay2, { children: /* @__PURE__ */ jsxs(
6831
+ return /* @__PURE__ */ jsx(Overlay2, { onClick: onClose, children: /* @__PURE__ */ jsxs(
6946
6832
  FundingPopupContainer,
6947
6833
  {
6948
6834
  onClick: (event) => event.stopPropagation(),
@@ -7012,16 +6898,6 @@ var Overlay2 = styled25.div`
7012
6898
  justify-content: center;
7013
6899
  align-items: center;
7014
6900
  z-index: 10000;
7015
- animation: fadeIn 0.2s ease-in-out;
7016
-
7017
- @keyframes fadeIn {
7018
- from {
7019
- opacity: 0;
7020
- }
7021
- to {
7022
- opacity: 1;
7023
- }
7024
- }
7025
6901
  `;
7026
6902
  var PopupContainer = styled25.div`
7027
6903
  background-color: var(--color-background, #0a0a0a);
@@ -7031,20 +6907,8 @@ var PopupContainer = styled25.div`
7031
6907
  max-width: 440px;
7032
6908
  width: 90%;
7033
6909
  position: relative;
7034
- animation: slideUp 0.3s ease-out;
7035
6910
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
7036
6911
 
7037
- @keyframes slideUp {
7038
- from {
7039
- transform: translateY(20px);
7040
- opacity: 0;
7041
- }
7042
- to {
7043
- transform: translateY(0);
7044
- opacity: 1;
7045
- }
7046
- }
7047
-
7048
6912
  @media (max-width: 768px) {
7049
6913
  padding: 2rem;
7050
6914
  max-width: 90%;
@@ -7058,21 +6922,9 @@ var KycPopupContainer = styled25.div`
7058
6922
  max-width: ${(props) => props.$expanded ? "680px" : "440px"};
7059
6923
  width: 90%;
7060
6924
  position: relative;
7061
- animation: slideUp 0.3s ease-out;
7062
6925
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
7063
6926
  transition: max-width 0.3s ease;
7064
6927
 
7065
- @keyframes slideUp {
7066
- from {
7067
- transform: translateY(20px);
7068
- opacity: 0;
7069
- }
7070
- to {
7071
- transform: translateY(0);
7072
- opacity: 1;
7073
- }
7074
- }
7075
-
7076
6928
  @media (max-width: 768px) {
7077
6929
  padding: 1.5rem;
7078
6930
  max-width: 95%;
@@ -7131,7 +6983,7 @@ var CloseButton = styled25.button`
7131
6983
  color: var(--color-accent, #e6c656);
7132
6984
  }
7133
6985
  `;
7134
- var Title = styled25.h2`
6986
+ var Title2 = styled25.h2`
7135
6987
  font-size: 1.75rem;
7136
6988
  font-weight: 600;
7137
6989
  color: var(--color-text, #eaecef);
@@ -7400,21 +7252,9 @@ var FundingPopupContainer = styled25.div`
7400
7252
  max-width: ${(props) => props.$hasWidget ? "900px" : "440px"};
7401
7253
  width: 90%;
7402
7254
  position: relative;
7403
- animation: slideUp 0.3s ease-out;
7404
7255
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
7405
7256
  overflow: hidden;
7406
7257
 
7407
- @keyframes slideUp {
7408
- from {
7409
- transform: translateY(20px);
7410
- opacity: 0;
7411
- }
7412
- to {
7413
- transform: translateY(0);
7414
- opacity: 1;
7415
- }
7416
- }
7417
-
7418
7258
  @media (max-width: 768px) {
7419
7259
  padding: ${(props) => props.$hasWidget ? "0" : "2rem"};
7420
7260
  max-width: 95%;
@@ -7703,7 +7543,7 @@ var PropertyCompareBar = React5.forwardRef(
7703
7543
  void 0,
7704
7544
  pricePercentFormat
7705
7545
  )}%`;
7706
- const priceContent = formattedPriceValue && propertyValueVariant === "pill" ? /* @__PURE__ */ jsxs(PriceBlock, { $variant: propertyValueVariant, children: [
7546
+ const priceContent = formattedPriceValue && propertyValueVariant === "pill" ? /* @__PURE__ */ jsxs(PriceBlock2, { $variant: propertyValueVariant, children: [
7707
7547
  /* @__PURE__ */ jsx(PriceAmount, { children: formattedPriceValue }),
7708
7548
  formattedPriceChange || formattedPricePercent ? /* @__PURE__ */ jsxs(
7709
7549
  PriceChange,
@@ -8016,7 +7856,7 @@ var PropertyValueChange = styled25.span`
8016
7856
  font-size: 0.65rem;
8017
7857
  }
8018
7858
  `;
8019
- var PriceBlock = styled25.div`
7859
+ var PriceBlock2 = styled25.div`
8020
7860
  display: none;
8021
7861
 
8022
7862
  ${({ $variant }) => $variant === "pill" && css`
@@ -8110,7 +7950,7 @@ function GalleryMapSection({
8110
7950
  /* @__PURE__ */ jsxs(ThumbStrip, { children: [
8111
7951
  /* @__PURE__ */ jsx(ThumbScroll, { children: images.filter((img) => img.category !== "Floorplan").map((img) => {
8112
7952
  const actualIndex = images.indexOf(img);
8113
- return /* @__PURE__ */ jsx(Thumbnail2, { "data-active": !showVideo && carouselIndex === actualIndex, onClick: () => {
7953
+ return /* @__PURE__ */ jsx(Thumbnail, { "data-active": !showVideo && carouselIndex === actualIndex, onClick: () => {
8114
7954
  stopAutoPlay();
8115
7955
  setShowVideo(false);
8116
7956
  setCarouselIndex(actualIndex);
@@ -8250,7 +8090,7 @@ var ThumbScroll = styled25.div`
8250
8090
  scrollbar-width: none;
8251
8091
  &::-webkit-scrollbar { display: none; }
8252
8092
  `;
8253
- var Thumbnail2 = styled25.div`
8093
+ var Thumbnail = styled25.div`
8254
8094
  min-width: 60px; height: 45px; border-radius: 4px; overflow: hidden;
8255
8095
  cursor: pointer; border: 2px solid transparent; opacity: 0.6;
8256
8096
  transition: all 0.2s ease; flex-shrink: 0;
@@ -8781,7 +8621,7 @@ function PropertyHistory() {
8781
8621
  /* @__PURE__ */ jsx("span", { className: "text-[0.9rem] font-normal ml-3 opacity-80", children: loafListing.date.replace(/\d+,\s|\s\d+$/, "") })
8782
8622
  ] }) }),
8783
8623
  /* @__PURE__ */ jsx(SalesTable, { children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsxs(HistoryRow, { $isOwnershipStart: true, children: [
8784
- /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(TypeBadge2, { $type: loafListing.type, children: loafListing.type === "Sale" ? "Sold" : loafListing.type }) }),
8624
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(TypeBadge, { $type: loafListing.type, children: loafListing.type === "Sale" ? "Sold" : loafListing.type }) }),
8785
8625
  /* @__PURE__ */ jsx("td", { children: loafListing.saleType ?? "-" }),
8786
8626
  /* @__PURE__ */ jsx("td", { children: loafListing.agent })
8787
8627
  ] }) }) }),
@@ -8843,7 +8683,7 @@ function PropertyHistory() {
8843
8683
  /* @__PURE__ */ jsx("span", { className: "text-[0.9rem] font-normal ml-3 opacity-80", children: ownershipSale.date.replace(/\d+,\s|\s\d+$/, "") })
8844
8684
  ] }) }),
8845
8685
  ownershipSale && (historyFilter === "all" || historyFilter === "sales") && /* @__PURE__ */ jsx(SalesTable, { children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsxs(HistoryRow, { $isOwnershipStart: true, children: [
8846
- /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(TypeBadge2, { $type: ownershipSale.type, children: ownershipSale.type === "Sale" ? "Sold" : ownershipSale.type }) }),
8686
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(TypeBadge, { $type: ownershipSale.type, children: ownershipSale.type === "Sale" ? "Sold" : ownershipSale.type }) }),
8847
8687
  /* @__PURE__ */ jsx("td", { children: ownershipSale.saleType ?? "-" }),
8848
8688
  /* @__PURE__ */ jsx("td", { children: ownershipSale.agent })
8849
8689
  ] }) }) }),
@@ -8852,7 +8692,7 @@ function PropertyHistory() {
8852
8692
  /* @__PURE__ */ jsx("div", { className: "py-2", children: events.map((event) => /* @__PURE__ */ jsx("div", { className: "mb-2", children: /* @__PURE__ */ jsx(EventDetails, { event }) }, event.id)) })
8853
8693
  ] }),
8854
8694
  otherSales.length > 0 && (historyFilter === "all" || historyFilter === "sales") && /* @__PURE__ */ jsx(SalesTable, { children: /* @__PURE__ */ jsx("tbody", { children: otherSales.map((sale) => /* @__PURE__ */ jsxs(HistoryRow, { children: [
8855
- /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(TypeBadge2, { $type: sale.type, children: sale.type === "Sale" ? "Sold" : sale.type }) }),
8695
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(TypeBadge, { $type: sale.type, children: sale.type === "Sale" ? "Sold" : sale.type }) }),
8856
8696
  /* @__PURE__ */ jsx("td", { children: sale.saleType ?? "-" }),
8857
8697
  /* @__PURE__ */ jsx("td", { children: sale.agent })
8858
8698
  ] }, sale.id)) }) })
@@ -8995,7 +8835,7 @@ function EventDetails({ event }) {
8995
8835
  onClick: toggleExpand,
8996
8836
  children: [
8997
8837
  /* @__PURE__ */ jsx("div", { className: "flex justify-between items-center flex-1 gap-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
8998
- /* @__PURE__ */ jsx(TypeBadge2, { $type: event.type, children: event.type === "Sale" ? "Sold" : event.type }),
8838
+ /* @__PURE__ */ jsx(TypeBadge, { $type: event.type, children: event.type === "Sale" ? "Sold" : event.type }),
8999
8839
  /* @__PURE__ */ jsx("span", { className: "ml-2", children: event.date })
9000
8840
  ] }) }),
9001
8841
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center text-[var(--color-text-secondary)] w-6 h-6 rounded-full transition-colors duration-200 hover:bg-white/10", children: expanded ? /* @__PURE__ */ jsx(BiChevronUp, { size: 20 }) : /* @__PURE__ */ jsx(BiChevronDown, { size: 20 }) })
@@ -9239,7 +9079,7 @@ var HistoryRow = styled25.tr`
9239
9079
  background-color: rgba(255, 255, 255, 0.08);
9240
9080
  }
9241
9081
  `;
9242
- var TypeBadge2 = styled25.span`
9082
+ var TypeBadge = styled25.span`
9243
9083
  display: inline-block;
9244
9084
  padding: 0.25rem 0.5rem;
9245
9085
  border-radius: 4px;
@@ -9649,9 +9489,7 @@ function AssetSelectorBar({
9649
9489
  metrics: metricsProp,
9650
9490
  currentTokenName,
9651
9491
  selectorItems,
9652
- onSelect,
9653
- trailing,
9654
- imageUrl
9492
+ onSelect
9655
9493
  }) {
9656
9494
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
9657
9495
  const hasItems = selectorItems && selectorItems.length > 0;
@@ -9660,7 +9498,6 @@ function AssetSelectorBar({
9660
9498
  ...offeringValuation != null ? [{ label: "Offering Valuation", value: `$${offeringValuation.toLocaleString()}` }] : []
9661
9499
  ];
9662
9500
  return /* @__PURE__ */ jsx(AssetSelectorWrapper, { children: /* @__PURE__ */ jsxs(IPOAssetSelector, { children: [
9663
- imageUrl && /* @__PURE__ */ jsx(AssetThumbnail, { src: imageUrl, alt: propertyName }),
9664
9501
  /* @__PURE__ */ jsx(AssetSelectorDropdown, { onClick: () => hasItems && setIsDropdownOpen((prev) => !prev), children: /* @__PURE__ */ jsxs(AssetName, { children: [
9665
9502
  propertyName,
9666
9503
  hasItems && /* @__PURE__ */ jsx(
@@ -9681,7 +9518,7 @@ function AssetSelectorBar({
9681
9518
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [
9682
9519
  /* @__PURE__ */ jsxs("div", { children: [
9683
9520
  /* @__PURE__ */ jsx(MetricLabel2, { children: m.label }),
9684
- /* @__PURE__ */ jsx(MetricValue, { $accent: !!m.accent, $secondary: !!m.secondary, children: m.value })
9521
+ /* @__PURE__ */ jsx(MetricValue, { $accent: !!m.accent, children: m.value })
9685
9522
  ] }),
9686
9523
  m.change != null && /* @__PURE__ */ jsxs(MetricChange, { $positive: m.change >= 0, children: [
9687
9524
  m.change >= 0 ? "\u2191" : "\u2193",
@@ -9690,7 +9527,6 @@ function AssetSelectorBar({
9690
9527
  ] })
9691
9528
  ] })
9692
9529
  ] }, m.label)) }),
9693
- trailing,
9694
9530
  isDropdownOpen && hasItems && /* @__PURE__ */ jsx(IPODropdown, { children: selectorItems.map((item) => {
9695
9531
  const isCurrent = item.tokenName === currentTokenName;
9696
9532
  const status = item.status?.toUpperCase();
@@ -9750,20 +9586,6 @@ var IPOAssetSelector = styled25.div`
9750
9586
  padding: 0.6rem 0.75rem;
9751
9587
  }
9752
9588
  `;
9753
- var AssetThumbnail = styled25.img`
9754
- width: 40px;
9755
- height: 40px;
9756
- border-radius: 8px;
9757
- object-fit: cover;
9758
- flex-shrink: 0;
9759
- border: 1px solid rgba(255, 255, 255, 0.1);
9760
-
9761
- @media (max-width: 768px) {
9762
- width: 32px;
9763
- height: 32px;
9764
- border-radius: 6px;
9765
- }
9766
- `;
9767
9589
  var AssetSelectorDropdown = styled25.div`
9768
9590
  display: flex;
9769
9591
  align-items: center;
@@ -9831,16 +9653,16 @@ var MetricLabel2 = styled25.span`
9831
9653
  }
9832
9654
  `;
9833
9655
  var MetricValue = styled25.span`
9834
- font-size: ${(p) => p.$secondary ? "0.95rem" : "1.25rem"};
9835
- font-weight: ${(p) => p.$secondary ? "600" : "700"};
9836
- color: ${(p) => p.$accent ? "#D4AF37" : p.$secondary ? "rgba(255,255,255,0.7)" : "#fff"};
9656
+ font-size: 1.25rem;
9657
+ font-weight: 700;
9658
+ color: ${(p) => p.$accent ? "#D4AF37" : "#fff"};
9837
9659
 
9838
9660
  @media (max-width: 768px) {
9839
- font-size: ${(p) => p.$secondary ? "0.85rem" : "1.05rem"};
9661
+ font-size: 1.05rem;
9840
9662
  }
9841
9663
 
9842
9664
  @media (max-width: 480px) {
9843
- font-size: ${(p) => p.$secondary ? "0.8rem" : "0.95rem"};
9665
+ font-size: 0.95rem;
9844
9666
  }
9845
9667
  `;
9846
9668
  var MetricChange = styled25.span`
@@ -9937,7 +9759,6 @@ function OfferingProgressCard({
9937
9759
  raisedAmount,
9938
9760
  targetAmount,
9939
9761
  isPrivateClient = false,
9940
- variant = "default",
9941
9762
  style,
9942
9763
  className
9943
9764
  }) {
@@ -9969,109 +9790,7 @@ function OfferingProgressCard({
9969
9790
  const interval = setInterval(() => setCountdown(calculateCountdown()), 1e3);
9970
9791
  return () => clearInterval(interval);
9971
9792
  }, [opensAt]);
9972
- if (variant === "compact") {
9973
- return /* @__PURE__ */ jsxs(CompactContainer, { style, className, children: [
9974
- /* @__PURE__ */ jsx(ProgressBarOuter, { children: /* @__PURE__ */ jsx(ProgressBarInner, { style: { width: `${Math.min(percentSold, 100)}%` } }) }),
9975
- /* @__PURE__ */ jsxs(ProgressInfo, { children: [
9976
- /* @__PURE__ */ jsxs(ProgressSubscribers, { children: [
9977
- "Subscribers: ",
9978
- subscriberCount.toLocaleString()
9979
- ] }),
9980
- /* @__PURE__ */ jsxs(ProgressAmounts, { children: [
9981
- /* @__PURE__ */ jsx("span", { className: "raised", children: formatCurrency3(computedRaised) }),
9982
- /* @__PURE__ */ jsxs("span", { className: "target", children: [
9983
- " / ",
9984
- formatCurrency3(computedTarget)
9985
- ] })
9986
- ] })
9987
- ] })
9988
- ] });
9989
- }
9990
- if (variant === "home") {
9991
- const isPreLive = !ipoStarted && ipoStatus !== "CLOSED" && ipoStatus !== "CANCELLED";
9992
- return /* @__PURE__ */ jsxs(Container, { style, className, children: [
9993
- /* @__PURE__ */ jsxs(Header2, { children: [
9994
- /* @__PURE__ */ jsxs("h3", { children: [
9995
- /* @__PURE__ */ jsx(FaChartLine, {}),
9996
- " Offering Progress"
9997
- ] }),
9998
- /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: "0.4rem" }, children: ipoStarted ? /* @__PURE__ */ jsxs(StatusSpan, { $color: "#0ecb81", children: [
9999
- /* @__PURE__ */ jsx(StatusDot, { $color: "#0ecb81", $pulse: true }),
10000
- "LIVE"
10001
- ] }) : /* @__PURE__ */ jsxs(StatusSpan, { $color: statusColor || "#D4AF37", children: [
10002
- /* @__PURE__ */ jsx(StatusDot, { $color: statusColor || "#D4AF37" }),
10003
- statusLabel || "Preparing"
10004
- ] }) })
10005
- ] }),
10006
- isPreLive ? /* @__PURE__ */ jsxs(HomePreLiveRow, { children: [
10007
- countdown ? /* @__PURE__ */ jsxs(HomeCountdownSide, { children: [
10008
- /* @__PURE__ */ jsx(CountdownLabel, { children: "Opens In" }),
10009
- /* @__PURE__ */ jsxs(CountdownDigits, { children: [
10010
- /* @__PURE__ */ jsx(CountdownNumber, { children: String(countdown.days).padStart(2, "0") }),
10011
- /* @__PURE__ */ jsx(CountdownUnitLabel, { children: "D" }),
10012
- /* @__PURE__ */ jsx(CountdownSeparator, { children: ":" }),
10013
- /* @__PURE__ */ jsx(CountdownNumber, { children: String(countdown.hours).padStart(2, "0") }),
10014
- /* @__PURE__ */ jsx(CountdownUnitLabel, { children: "H" }),
10015
- /* @__PURE__ */ jsx(CountdownSeparator, { children: ":" }),
10016
- /* @__PURE__ */ jsx(CountdownNumber, { children: String(countdown.minutes).padStart(2, "0") }),
10017
- /* @__PURE__ */ jsx(CountdownUnitLabel, { children: "M" }),
10018
- /* @__PURE__ */ jsx(CountdownSeparator, { children: ":" }),
10019
- /* @__PURE__ */ jsx(CountdownNumber, { children: String(countdown.seconds).padStart(2, "0") }),
10020
- /* @__PURE__ */ jsx(CountdownUnitLabel, { children: "S" })
10021
- ] })
10022
- ] }) : /* @__PURE__ */ jsx(HomeCountdownSide, { children: /* @__PURE__ */ jsx(PreLiveStatus, { $statusColor: statusColor, children: "Sale Not Yet Open" }) }),
10023
- /* @__PURE__ */ jsxs(HomeUnitsSide, { children: [
10024
- /* @__PURE__ */ jsx(HomeUnitsLabel, { children: "Units Subscribed" }),
10025
- /* @__PURE__ */ jsxs(HomeUnitsValue, { children: [
10026
- /* @__PURE__ */ jsx(HomeSpinner, {}),
10027
- /* @__PURE__ */ jsxs("span", { children: [
10028
- " / ",
10029
- supplyToSell.toLocaleString()
10030
- ] })
10031
- ] })
10032
- ] })
10033
- ] }) : /* @__PURE__ */ jsxs(LiveBody, { children: [
10034
- /* @__PURE__ */ jsxs(LiveTopRow, { children: [
10035
- /* @__PURE__ */ jsxs("div", { children: [
10036
- /* @__PURE__ */ jsxs(LiveLabel, { children: [
10037
- "Offering Subscribed ",
10038
- /* @__PURE__ */ jsx("span", { children: "\u24D8" })
10039
- ] }),
10040
- /* @__PURE__ */ jsxs(LivePercent, { children: [
10041
- percentSold.toFixed(1),
10042
- "%",
10043
- /* @__PURE__ */ jsx("span", { className: "arrow", children: "\u2191" })
10044
- ] })
10045
- ] }),
10046
- /* @__PURE__ */ jsxs("div", { style: { textAlign: "right" }, children: [
10047
- /* @__PURE__ */ jsx(LiveLabel, { children: "Units Subscribed" }),
10048
- /* @__PURE__ */ jsxs(UnitsValue, { children: [
10049
- /* @__PURE__ */ jsx("span", { children: totalSold.toLocaleString() }),
10050
- /* @__PURE__ */ jsxs("small", { children: [
10051
- "/ ",
10052
- supplyToSell.toLocaleString()
10053
- ] })
10054
- ] })
10055
- ] })
10056
- ] }),
10057
- /* @__PURE__ */ jsx(ProgressBarOuter, { children: /* @__PURE__ */ jsx(ProgressBarInner, { style: { width: `${Math.min(percentSold, 100)}%` } }) }),
10058
- /* @__PURE__ */ jsxs(ProgressInfo, { children: [
10059
- /* @__PURE__ */ jsxs(ProgressSubscribers, { children: [
10060
- "Subscribers: ",
10061
- subscriberCount.toLocaleString()
10062
- ] }),
10063
- /* @__PURE__ */ jsxs(ProgressAmounts, { children: [
10064
- /* @__PURE__ */ jsx("span", { className: "raised", children: formatCurrency3(computedRaised) }),
10065
- /* @__PURE__ */ jsxs("span", { className: "target", children: [
10066
- " / ",
10067
- formatCurrency3(computedTarget)
10068
- ] })
10069
- ] })
10070
- ] })
10071
- ] })
10072
- ] });
10073
- }
10074
- return /* @__PURE__ */ jsxs(Container, { style, className, children: [
9793
+ return /* @__PURE__ */ jsxs(Container2, { style, className, children: [
10075
9794
  /* @__PURE__ */ jsxs(Header2, { children: [
10076
9795
  /* @__PURE__ */ jsxs("h3", { children: [
10077
9796
  /* @__PURE__ */ jsx(FaChartLine, {}),
@@ -10139,7 +9858,7 @@ function OfferingProgressCard({
10139
9858
  /* @__PURE__ */ jsx("span", { children: "\u24D8" })
10140
9859
  ] }),
10141
9860
  /* @__PURE__ */ jsxs(LivePercent, { children: [
10142
- percentSold.toFixed(1),
9861
+ percentSold < 0.1 && percentSold > 0 ? percentSold.toFixed(3) : percentSold.toFixed(1),
10143
9862
  "%",
10144
9863
  /* @__PURE__ */ jsx("span", { className: "arrow", children: "\u2191" })
10145
9864
  ] })
@@ -10172,7 +9891,7 @@ function OfferingProgressCard({
10172
9891
  ] })
10173
9892
  ] });
10174
9893
  }
10175
- var Container = styled25.div`
9894
+ var Container2 = styled25.div`
10176
9895
  background-color: var(--color-card-darker, #111);
10177
9896
  border-radius: 8px;
10178
9897
  padding: 1.5rem;
@@ -10372,59 +10091,6 @@ var ProgressAmounts = styled25.div`
10372
10091
  .raised { color: #D4AF37; }
10373
10092
  .target { color: rgba(255,255,255,0.3); }
10374
10093
  `;
10375
- var CompactContainer = styled25.div`
10376
- width: 100%;
10377
- margin: 1.5rem 0;
10378
- display: flex;
10379
- flex-direction: column;
10380
- gap: 0.5rem;
10381
- `;
10382
- var HomePreLiveRow = styled25.div`
10383
- display: flex;
10384
- align-items: center;
10385
- justify-content: space-between;
10386
- padding-top: 1rem;
10387
- `;
10388
- var HomeCountdownSide = styled25.div`
10389
- display: flex;
10390
- flex-direction: column;
10391
- align-items: center;
10392
- flex: 1;
10393
- `;
10394
- var HomeUnitsSide = styled25.div`
10395
- text-align: center;
10396
- flex-shrink: 0;
10397
- `;
10398
- var HomeUnitsLabel = styled25.div`
10399
- font-size: 0.6rem;
10400
- color: var(--color-text-secondary);
10401
- text-transform: uppercase;
10402
- letter-spacing: 0.1em;
10403
- margin-bottom: 0.2rem;
10404
- `;
10405
- var HomeUnitsValue = styled25.div`
10406
- font-size: 1.1rem;
10407
- font-weight: 700;
10408
- font-family: monospace;
10409
- span {
10410
- color: var(--color-text-secondary);
10411
- font-weight: 400;
10412
- }
10413
- `;
10414
- var HomeSpinner = styled25.span`
10415
- display: inline-block;
10416
- width: 14px;
10417
- height: 14px;
10418
- border: 2px solid rgba(255, 255, 255, 0.1);
10419
- border-top-color: var(--color-accent, #f0b90b);
10420
- border-radius: 50%;
10421
- animation: homeSpin 1s linear infinite;
10422
- vertical-align: middle;
10423
- margin-right: 0.15rem;
10424
- @keyframes homeSpin {
10425
- to { transform: rotate(360deg); }
10426
- }
10427
- `;
10428
10094
  var MAX_DISPLAY_AMOUNT = 6e4;
10429
10095
  var formatCurrency4 = (amount) => {
10430
10096
  if (amount >= 1e6) return `$${(amount / 1e6).toFixed(2)}M`;
@@ -10708,244 +10374,59 @@ var PurchaseItem = styled25.div`
10708
10374
 
10709
10375
  &:last-child {
10710
10376
  border-bottom: none;
10711
- }
10712
-
10713
- @media (max-width: 768px) {
10714
- padding: 0.4rem 0.6rem;
10715
- }
10716
- `;
10717
- var PurchaseInfo = styled25.div`
10718
- display: flex;
10719
- flex-direction: column;
10720
- min-width: 0;
10721
- `;
10722
- var PurchaseName = styled25.div`
10723
- font-weight: 500;
10724
- font-size: 0.875rem;
10725
- color: #fff;
10726
- white-space: nowrap;
10727
- overflow: hidden;
10728
- text-overflow: ellipsis;
10729
- `;
10730
- var PurchaseTime = styled25.div`
10731
- font-size: 0.7rem;
10732
- color: var(--color-text-secondary);
10733
- margin-top: 0.125rem;
10734
- `;
10735
- var PurchaseAmount = styled25.div`
10736
- font-weight: 600;
10737
- font-size: 0.875rem;
10738
- color: #fff;
10739
- white-space: nowrap;
10740
- margin-left: 1rem;
10741
- `;
10742
- var LiveIndicatorDot = styled25.span`
10743
- display: inline-block;
10744
- width: 8px;
10745
- height: 8px;
10746
- background-color: ${(p) => p.$active ? "#0ecb81" : "#848e9c"};
10747
- border-radius: 50%;
10748
- position: relative;
10749
- &:after {
10750
- content: '';
10751
- position: absolute;
10752
- width: 100%;
10753
- height: 100%;
10754
- border-radius: 50%;
10755
- background-color: ${(p) => p.$active ? "#0ecb81" : "transparent"};
10756
- animation: ${(p) => p.$active ? "liveGlow 2s infinite" : "none"};
10757
- }
10758
- @keyframes liveGlow {
10759
- 0% { box-shadow: 0 0 0 0 rgba(14,203,129,0.4); }
10760
- 70% { box-shadow: 0 0 0 10px rgba(14,203,129,0); }
10761
- 100% { box-shadow: 0 0 0 0 rgba(14,203,129,0); }
10762
- }
10763
- `;
10764
- var slideIn = keyframes`
10765
- from { transform: translateX(110%); opacity: 0; }
10766
- to { transform: translateX(0); opacity: 1; }
10767
- `;
10768
- var slideOut = keyframes`
10769
- from { transform: translateX(0); opacity: 1; }
10770
- to { transform: translateX(110%); opacity: 0; }
10771
- `;
10772
- var progressShrink = keyframes`
10773
- from { width: 100%; }
10774
- to { width: 0%; }
10775
- `;
10776
- var VARIANT_COLORS = {
10777
- success: { accent: "#0ecb81", icon: "\u2713" },
10778
- error: { accent: "#f6465d", icon: "\u2715" },
10779
- info: { accent: "#E6C656", icon: "\u2139" },
10780
- pending: { accent: "#7EB3E6", icon: "\u25CC" }
10781
- };
10782
- var Wrapper = styled25.div`
10783
- position: relative;
10784
- display: flex;
10785
- flex-direction: column;
10786
- gap: 0;
10787
- width: 340px;
10788
- background: #0d0f1a;
10789
- border: 1px solid rgba(255, 255, 255, 0.08);
10790
- border-radius: 10px;
10791
- overflow: hidden;
10792
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.04);
10793
- animation: ${({ $exiting }) => $exiting ? css`${slideOut} 0.28s cubic-bezier(0.4,0,1,1) forwards` : css`${slideIn} 0.32s cubic-bezier(0,0,0.2,1) forwards`};
10794
- pointer-events: all;
10795
- `;
10796
- var Body = styled25.div`
10797
- display: flex;
10798
- align-items: flex-start;
10799
- gap: 12px;
10800
- padding: 14px 16px 12px;
10377
+ }
10378
+
10379
+ @media (max-width: 768px) {
10380
+ padding: 0.4rem 0.6rem;
10381
+ }
10801
10382
  `;
10802
- var IconDot = styled25.div`
10803
- flex-shrink: 0;
10804
- width: 28px;
10805
- height: 28px;
10806
- border-radius: 50%;
10807
- background: ${({ $color }) => $color}1a;
10808
- border: 1px solid ${({ $color }) => $color}55;
10383
+ var PurchaseInfo = styled25.div`
10809
10384
  display: flex;
10810
- align-items: center;
10811
- justify-content: center;
10812
- font-size: 0.75rem;
10813
- font-weight: 700;
10814
- color: ${({ $color }) => $color};
10815
- margin-top: 1px;
10816
- `;
10817
- var Content = styled25.div`
10818
- flex: 1;
10385
+ flex-direction: column;
10819
10386
  min-width: 0;
10820
10387
  `;
10821
- var Title2 = styled25.p`
10822
- margin: 0 0 2px;
10823
- font-size: 0.8rem;
10824
- font-weight: 600;
10388
+ var PurchaseName = styled25.div`
10389
+ font-weight: 500;
10390
+ font-size: 0.875rem;
10825
10391
  color: #fff;
10826
- letter-spacing: 0.01em;
10827
- `;
10828
- var Amount = styled25.p`
10829
- margin: 0 0 6px;
10830
- font-size: 1.05rem;
10831
- font-weight: 700;
10832
- color: #E6C656;
10833
- letter-spacing: -0.01em;
10834
- `;
10835
- var TxRow = styled25.a`
10836
- display: inline-flex;
10837
- align-items: center;
10838
- gap: 5px;
10839
- font-family: 'IBM Plex Mono', 'Space Mono', monospace;
10840
- font-size: 0.68rem;
10841
- color: rgba(255, 255, 255, 0.4);
10842
- text-decoration: none;
10843
- transition: color 0.15s;
10844
- &:hover {
10845
- color: #7EB3E6;
10846
- }
10392
+ white-space: nowrap;
10393
+ overflow: hidden;
10394
+ text-overflow: ellipsis;
10847
10395
  `;
10848
- var TxArrow = styled25.span`
10849
- font-size: 0.6rem;
10850
- opacity: 0.6;
10396
+ var PurchaseTime = styled25.div`
10397
+ font-size: 0.7rem;
10398
+ color: var(--color-text-secondary);
10399
+ margin-top: 0.125rem;
10851
10400
  `;
10852
- var CloseBtn = styled25.button`
10853
- flex-shrink: 0;
10854
- background: none;
10855
- border: none;
10856
- padding: 2px 4px;
10857
- cursor: pointer;
10858
- color: rgba(255, 255, 255, 0.25);
10859
- font-size: 0.9rem;
10860
- line-height: 1;
10861
- transition: color 0.15s;
10862
- &:hover { color: rgba(255, 255, 255, 0.7); }
10401
+ var PurchaseAmount = styled25.div`
10402
+ font-weight: 600;
10403
+ font-size: 0.875rem;
10404
+ color: #fff;
10405
+ white-space: nowrap;
10406
+ margin-left: 1rem;
10863
10407
  `;
10864
- var ProgressBar = styled25.div`
10865
- height: 2px;
10866
- background: rgba(255, 255, 255, 0.06);
10408
+ var LiveIndicatorDot = styled25.span`
10409
+ display: inline-block;
10410
+ width: 8px;
10411
+ height: 8px;
10412
+ background-color: ${(p) => p.$active ? "#0ecb81" : "#848e9c"};
10413
+ border-radius: 50%;
10867
10414
  position: relative;
10868
- &::after {
10415
+ &:after {
10869
10416
  content: '';
10870
10417
  position: absolute;
10871
- left: 0;
10872
- top: 0;
10418
+ width: 100%;
10873
10419
  height: 100%;
10874
- background: ${({ $color }) => $color};
10875
- animation: ${css`${progressShrink} ${({ $duration }) => $duration}ms linear forwards`};
10420
+ border-radius: 50%;
10421
+ background-color: ${(p) => p.$active ? "#0ecb81" : "transparent"};
10422
+ animation: ${(p) => p.$active ? "liveGlow 2s infinite" : "none"};
10423
+ }
10424
+ @keyframes liveGlow {
10425
+ 0% { box-shadow: 0 0 0 0 rgba(14,203,129,0.4); }
10426
+ 70% { box-shadow: 0 0 0 10px rgba(14,203,129,0); }
10427
+ 100% { box-shadow: 0 0 0 0 rgba(14,203,129,0); }
10876
10428
  }
10877
10429
  `;
10878
- var Container2 = styled25.div`
10879
- position: fixed;
10880
- bottom: 24px;
10881
- right: 24px;
10882
- z-index: 9999;
10883
- display: flex;
10884
- flex-direction: column-reverse;
10885
- gap: 10px;
10886
- pointer-events: none;
10887
- `;
10888
- var DEFAULT_EXPLORER = "https://sepolia.basescan.org/tx/";
10889
- function truncateHash(hash) {
10890
- return `${hash.slice(0, 6)}\u2026${hash.slice(-4)}`;
10891
- }
10892
- function ToastItem({ toast, onDismiss }) {
10893
- const [exiting, setExiting] = useState(false);
10894
- const timerRef = useRef(null);
10895
- const dismiss = useCallback(() => {
10896
- setExiting(true);
10897
- setTimeout(() => onDismiss(toast.id), 280);
10898
- }, [onDismiss, toast.id]);
10899
- useEffect(() => {
10900
- const duration2 = toast.duration ?? 6e3;
10901
- if (duration2 > 0) {
10902
- timerRef.current = setTimeout(dismiss, duration2);
10903
- }
10904
- return () => {
10905
- if (timerRef.current) clearTimeout(timerRef.current);
10906
- };
10907
- }, [dismiss, toast.duration]);
10908
- const { accent, icon } = VARIANT_COLORS[toast.variant];
10909
- const duration = toast.duration ?? 6e3;
10910
- const explorerBase = toast.explorerUrl ?? DEFAULT_EXPLORER;
10911
- const txUrl = toast.txHash ? `${explorerBase}${toast.txHash}` : void 0;
10912
- return /* @__PURE__ */ jsxs(Wrapper, { $exiting: exiting, children: [
10913
- /* @__PURE__ */ jsxs(Body, { children: [
10914
- /* @__PURE__ */ jsx(IconDot, { $color: accent, children: icon }),
10915
- /* @__PURE__ */ jsxs(Content, { children: [
10916
- /* @__PURE__ */ jsx(Title2, { children: toast.title }),
10917
- toast.amount && /* @__PURE__ */ jsx(Amount, { children: toast.amount }),
10918
- toast.txHash && txUrl && /* @__PURE__ */ jsxs(TxRow, { href: txUrl, target: "_blank", rel: "noopener noreferrer", children: [
10919
- truncateHash(toast.txHash),
10920
- /* @__PURE__ */ jsx(TxArrow, { children: "\u2197" })
10921
- ] })
10922
- ] }),
10923
- /* @__PURE__ */ jsx(CloseBtn, { type: "button", onClick: dismiss, "aria-label": "Dismiss", children: "\u2715" })
10924
- ] }),
10925
- duration > 0 && /* @__PURE__ */ jsx(ProgressBar, { $color: accent, $duration: duration })
10926
- ] });
10927
- }
10928
- var ToastContext = createContext(null);
10929
- function ToastProvider({ children }) {
10930
- const [toasts, setToasts] = useState([]);
10931
- const addToast = useCallback((data) => {
10932
- const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
10933
- setToasts((prev) => [...prev, { ...data, id }]);
10934
- return id;
10935
- }, []);
10936
- const dismiss = useCallback((id) => {
10937
- setToasts((prev) => prev.filter((t) => t.id !== id));
10938
- }, []);
10939
- return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: { toast: addToast, dismiss }, children: [
10940
- children,
10941
- /* @__PURE__ */ jsx(Container2, { children: toasts.map((t) => /* @__PURE__ */ jsx(ToastItem, { toast: t, onDismiss: dismiss }, t.id)) })
10942
- ] });
10943
- }
10944
- function useToast() {
10945
- const ctx = useContext(ToastContext);
10946
- if (!ctx) throw new Error("useToast must be used within a ToastProvider");
10947
- return ctx;
10948
- }
10949
10430
  function OrderPanel({
10950
10431
  statusLabel,
10951
10432
  statusColor,
@@ -11942,41 +11423,50 @@ function PortfolioActivityPanel({
11942
11423
  ] }),
11943
11424
  activeTab === "positions" && showPositionsTab && /* @__PURE__ */ jsxs(Fragment, { children: [
11944
11425
  positions.length === 0 && /* @__PURE__ */ jsx(EmptyState, { children: "No positions yet. Subscribe to an offering or buy on the secondary market." }),
11945
- positions.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
11946
- /* @__PURE__ */ jsxs(PositionsHeader, { children: [
11947
- /* @__PURE__ */ jsx(PositionsHeaderCell, { children: "Asset" }),
11948
- /* @__PURE__ */ jsx(PositionsHeaderCell, { $align: "right", children: "Size" }),
11949
- /* @__PURE__ */ jsx(PositionsHeaderCell, { $align: "right", children: "Value" }),
11950
- /* @__PURE__ */ jsx(PositionsHeaderCell, { $align: "right", children: "Entry Price" }),
11951
- /* @__PURE__ */ jsx(PositionsHeaderCell, { $align: "right", children: "Mark Price" }),
11952
- /* @__PURE__ */ jsx(PositionsHeaderCell, { $align: "right", children: "PNL (%)" })
11953
- ] }),
11954
- pageSlice(positions).map((pos) => {
11955
- const currentValue = pos.quantity * pos.marketPrice;
11956
- const costBasis = pos.quantity * pos.averageEntryPrice;
11957
- const pnl = pos.propertyPnl ?? currentValue - costBasis;
11958
- const pnlPercent = pos.propertyPnlPercent ?? pos.percentChange ?? 0;
11959
- const isPositive = pnl >= 0;
11960
- return /* @__PURE__ */ jsxs(PositionsRow, { onClick: () => onPositionClick?.(pos.tokenName, pos.isIpoAllocation), children: [
11961
- /* @__PURE__ */ jsx(PositionsCell, { children: /* @__PURE__ */ jsx(HoldingsProperty, { children: pos.tokenName }) }),
11962
- /* @__PURE__ */ jsx(PositionsCell, { $align: "right", children: /* @__PURE__ */ jsx("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: formatNumber2(pos.quantity) }) }),
11963
- /* @__PURE__ */ jsx(PositionsCell, { $align: "right", children: /* @__PURE__ */ jsx("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: formatCurrency5(currentValue) }) }),
11964
- /* @__PURE__ */ jsx(PositionsCell, { $align: "right", children: /* @__PURE__ */ jsx("span", { style: { color: "rgba(255,255,255,0.7)", fontSize: "0.8rem" }, children: formatCurrency5(pos.averageEntryPrice) }) }),
11965
- /* @__PURE__ */ jsx(PositionsCell, { $align: "right", children: /* @__PURE__ */ jsx("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: formatCurrency5(pos.marketPrice) }) }),
11966
- /* @__PURE__ */ jsxs(PositionsCell, { $align: "right", children: [
11967
- /* @__PURE__ */ jsxs(PnLAmount, { $positive: isPositive, children: [
11968
- isPositive ? "+" : "-",
11969
- formatCurrency5(Math.abs(pnl))
11970
- ] }),
11971
- /* @__PURE__ */ jsxs(PnLPercentage, { $positive: isPositive, children: [
11972
- isPositive ? "+" : "",
11973
- pnlPercent.toFixed(1),
11426
+ positions.length > 0 && /* @__PURE__ */ jsx(Fragment, { children: pageSlice(positions).map((pos) => {
11427
+ const currentValue = pos.quantity * pos.marketPrice;
11428
+ const costBasis = pos.quantity * pos.averageEntryPrice;
11429
+ const pnl = pos.propertyPnl ?? currentValue - costBasis;
11430
+ const pnlPercent = pos.propertyPnlPercent ?? pos.percentChange ?? 0;
11431
+ const totalPortfolioValue = positions.reduce((sum, p) => sum + p.quantity * p.marketPrice, 0);
11432
+ const portfolioPercent = totalPortfolioValue > 0 ? currentValue / totalPortfolioValue * 100 : 0;
11433
+ const isPositive = pnl >= 0;
11434
+ return /* @__PURE__ */ jsxs(HoldingsItem, { onClick: () => onPositionClick?.(pos.tokenName, pos.isIpoAllocation), children: [
11435
+ /* @__PURE__ */ jsxs(HoldingsLeft, { children: [
11436
+ /* @__PURE__ */ jsx(HoldingsProperty, { children: pos.tokenName }),
11437
+ /* @__PURE__ */ jsxs(HoldingsPortfolio, { children: [
11438
+ /* @__PURE__ */ jsxs("span", { children: [
11439
+ portfolioPercent.toFixed(1),
11974
11440
  "%"
11975
- ] })
11441
+ ] }),
11442
+ " of portfolio"
11976
11443
  ] })
11977
- ] }, pos.tokenName);
11978
- })
11979
- ] })
11444
+ ] }),
11445
+ /* @__PURE__ */ jsxs(HoldingsQuantity, { children: [
11446
+ /* @__PURE__ */ jsxs("span", { children: [
11447
+ pos.quantity.toFixed(2),
11448
+ " ",
11449
+ pos.tokenName
11450
+ ] }),
11451
+ /* @__PURE__ */ jsxs(HoldingsAvgEntry, { children: [
11452
+ "Avg ",
11453
+ formatCurrency5(pos.averageEntryPrice)
11454
+ ] })
11455
+ ] }),
11456
+ /* @__PURE__ */ jsxs(HoldingsPnL, { children: [
11457
+ /* @__PURE__ */ jsxs(PnLAmount, { $positive: isPositive, children: [
11458
+ isPositive ? "+" : "-",
11459
+ "$",
11460
+ Math.abs(pnl).toFixed(2)
11461
+ ] }),
11462
+ /* @__PURE__ */ jsxs(PnLPercentage, { $positive: isPositive, children: [
11463
+ isPositive ? "+" : "",
11464
+ pnlPercent.toFixed(1),
11465
+ "%"
11466
+ ] })
11467
+ ] })
11468
+ ] }, pos.tokenName);
11469
+ }) })
11980
11470
  ] }),
11981
11471
  activeTab === "subscriptions" && /* @__PURE__ */ jsxs(Fragment, { children: [
11982
11472
  offeringOrders.length === 0 && /* @__PURE__ */ jsx(EmptyState, { children: "IPO allocations will appear here once you subscribe." }),
@@ -12093,14 +11583,7 @@ function PortfolioActivityPanel({
12093
11583
  formatTimestamp(trade.executedAt)
12094
11584
  ] })
12095
11585
  ] }),
12096
- /* @__PURE__ */ jsx(
12097
- ActivityTag,
12098
- {
12099
- $color: trade.side === "SELL" ? "#f6465d" : "#0ecb81",
12100
- $bg: trade.side === "SELL" ? "rgba(246,70,93,0.12)" : "rgba(14,203,129,0.12)",
12101
- children: sideLabel(trade.side)
12102
- }
12103
- ),
11586
+ trade.status === "SETTLEMENT_FAILED" ? /* @__PURE__ */ jsx(ActivityTag, { $color: "#f6465d", $bg: "rgba(246,70,93,0.12)", children: "Failed" }) : trade.status === "SETTLED" ? /* @__PURE__ */ jsx(ActivityTag, { $color: "#0ecb81", $bg: "rgba(14,203,129,0.12)", children: "Settled" }) : /* @__PURE__ */ jsx(ActivityTag, { $color: "#f0b90b", $bg: "rgba(240,185,11,0.15)", children: "Settling" }),
12104
11587
  /* @__PURE__ */ jsx(ActivityAmount, { children: formatCurrency5(trade.price * trade.quantity) })
12105
11588
  ] }, trade.tradeId))
12106
11589
  ] }),
@@ -12278,8 +11761,8 @@ var ActivityPrimary = styled25.span`
12278
11761
  font-weight: 500;
12279
11762
  `;
12280
11763
  var ActivitySecondary = styled25.span`
12281
- font-size: 0.6rem;
12282
- color: rgba(255, 255, 255, 0.35);
11764
+ font-size: 0.7rem;
11765
+ color: rgba(255, 255, 255, 0.5);
12283
11766
  `;
12284
11767
  var ActivityTag = styled25.span`
12285
11768
  font-size: 0.58rem;
@@ -12358,42 +11841,53 @@ var PaginationLabel = styled25.span`
12358
11841
  font-size: 0.8rem;
12359
11842
  color: rgba(255, 255, 255, 0.4);
12360
11843
  `;
12361
- var PositionsHeader = styled25.div`
12362
- display: grid;
12363
- grid-template-columns: 1.2fr 0.8fr 1fr 1fr 1fr 1.2fr;
12364
- gap: 0 0.5rem;
12365
- padding: 0.4rem 0.5rem;
12366
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
12367
- `;
12368
- var PositionsHeaderCell = styled25.div`
12369
- font-size: 0.68rem;
12370
- font-weight: 500;
12371
- color: rgba(255, 255, 255, 0.4);
12372
- text-align: ${(p) => p.$align || "left"};
12373
- white-space: nowrap;
12374
- `;
12375
- var PositionsRow = styled25.div`
11844
+ var HoldingsItem = styled25.div`
12376
11845
  display: grid;
12377
- grid-template-columns: 1.2fr 0.8fr 1fr 1fr 1fr 1.2fr;
11846
+ grid-template-columns: 1fr 1fr 1fr;
12378
11847
  align-items: center;
12379
- gap: 0 0.5rem;
12380
- padding: 0.5rem 0.5rem;
11848
+ padding: 0.5rem 0;
11849
+ min-height: 50px;
12381
11850
  cursor: pointer;
12382
- border-bottom: 1px solid rgba(255, 255, 255, 0.03);
12383
- &:last-child { border-bottom: none; }
12384
- &:hover { background: rgba(255, 255, 255, 0.02); }
11851
+ &:hover { background: rgba(255, 255, 255, 0.015); }
12385
11852
  `;
12386
- var PositionsCell = styled25.div`
11853
+ var HoldingsLeft = styled25.div`
12387
11854
  display: flex;
12388
11855
  flex-direction: column;
12389
- align-items: ${(p) => p.$align === "right" ? "flex-end" : "flex-start"};
12390
- gap: 0.1rem;
11856
+ gap: 0.15rem;
12391
11857
  `;
12392
11858
  var HoldingsProperty = styled25.div`
12393
- font-size: 0.8rem;
11859
+ font-size: 0.85rem;
12394
11860
  font-weight: 600;
12395
11861
  color: #fff;
12396
11862
  `;
11863
+ var HoldingsPortfolio = styled25.div`
11864
+ font-size: 0.7rem;
11865
+ color: rgba(255, 255, 255, 0.5);
11866
+ span {
11867
+ color: var(--color-accent, #E6C87E);
11868
+ font-weight: 500;
11869
+ }
11870
+ `;
11871
+ var HoldingsQuantity = styled25.div`
11872
+ display: flex;
11873
+ flex-direction: column;
11874
+ align-items: center;
11875
+ gap: 0.15rem;
11876
+ font-size: 0.85rem;
11877
+ font-weight: 500;
11878
+ color: #fff;
11879
+ `;
11880
+ var HoldingsAvgEntry = styled25.div`
11881
+ font-size: 0.7rem;
11882
+ color: var(--color-accent, #E6C87E);
11883
+ font-weight: 500;
11884
+ `;
11885
+ var HoldingsPnL = styled25.div`
11886
+ display: flex;
11887
+ flex-direction: column;
11888
+ align-items: flex-end;
11889
+ gap: 0.15rem;
11890
+ `;
12397
11891
  var PnLAmount = styled25.div`
12398
11892
  font-size: 0.85rem;
12399
11893
  font-weight: 600;
@@ -14161,7 +13655,7 @@ function PropertyValuation({
14161
13655
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: [
14162
13656
  /* @__PURE__ */ jsxs(PricingModelDetail, { children: [
14163
13657
  /* @__PURE__ */ jsx(PropertyDetailLabel, { children: "Last Price" }),
14164
- /* @__PURE__ */ jsx(PricingDetailValue, { children: formatCurrency6(lastPrice) })
13658
+ /* @__PURE__ */ jsx(PricingDetailValue, { children: formatCompact(lastPrice) })
14165
13659
  ] }),
14166
13660
  /* @__PURE__ */ jsxs(PricingModelDetail, { children: [
14167
13661
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", width: "100%" }, children: [
@@ -14172,11 +13666,11 @@ function PropertyValuation({
14172
13666
  ] })
14173
13667
  ] }),
14174
13668
  /* @__PURE__ */ jsxs(PricingDetailValue, { style: { color: "var(--color-accent)", fontWeight: "bold" }, children: [
14175
- formatCurrency6(fairValue),
13669
+ formatCompact(fairValue),
14176
13670
  " ",
14177
13671
  /* @__PURE__ */ jsxs("span", { style: { fontSize: "0.85em", fontWeight: "normal", opacity: 0.8 }, children: [
14178
13672
  "(",
14179
- formatCurrency6(fairValue * tokensOutstanding, { maximumFractionDigits: 0 }),
13673
+ formatCompact(fairValue * tokensOutstanding),
14180
13674
  ")"
14181
13675
  ] })
14182
13676
  ] })
@@ -14193,7 +13687,7 @@ function PropertyValuation({
14193
13687
  /* @__PURE__ */ jsx(GaugeIndicator, { type: "fairValue", position: 50 }),
14194
13688
  /* @__PURE__ */ jsxs(GaugePriceTag, { position: gaugePosition, children: [
14195
13689
  /* @__PURE__ */ jsx("span", { children: "Last Price" }),
14196
- /* @__PURE__ */ jsx("span", { children: formatCurrency6(lastPrice) })
13690
+ /* @__PURE__ */ jsx("span", { children: formatCompact(lastPrice) })
14197
13691
  ] }),
14198
13692
  /* @__PURE__ */ jsx(GaugeIndicator, { type: "lastPrice", position: gaugePosition })
14199
13693
  ] }),
@@ -14201,36 +13695,36 @@ function PropertyValuation({
14201
13695
  /* @__PURE__ */ jsx(ValuationItem, { children: /* @__PURE__ */ jsxs(ValuationValue, { style: { color: "#4CAF50" }, children: [
14202
13696
  /* @__PURE__ */ jsxs("span", { children: [
14203
13697
  "< ",
14204
- formatCurrency6(undervaluedThreshold)
13698
+ formatCompact(undervaluedThreshold)
14205
13699
  ] }),
14206
13700
  /* @__PURE__ */ jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
14207
13701
  "(",
14208
- formatMillions(undervaluedThreshold * tokensOutstanding),
13702
+ formatCompact(undervaluedThreshold * tokensOutstanding),
14209
13703
  ")"
14210
13704
  ] })
14211
13705
  ] }) }),
14212
13706
  /* @__PURE__ */ jsx(ValuationItem, { children: /* @__PURE__ */ jsxs(ValuationValue, { style: { color: "var(--color-accent)" }, children: [
14213
- /* @__PURE__ */ jsx("span", { children: formatCurrency6(fairValue) }),
13707
+ /* @__PURE__ */ jsx("span", { children: formatCompact(fairValue) }),
14214
13708
  /* @__PURE__ */ jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
14215
13709
  "(",
14216
- formatMillions(fairValue * tokensOutstanding),
13710
+ formatCompact(fairValue * tokensOutstanding),
14217
13711
  ")"
14218
13712
  ] })
14219
13713
  ] }) }),
14220
13714
  /* @__PURE__ */ jsx(ValuationItem, { children: /* @__PURE__ */ jsxs(ValuationValue, { style: { color: "#F44336" }, children: [
14221
13715
  /* @__PURE__ */ jsxs("span", { children: [
14222
13716
  "> ",
14223
- formatCurrency6(overvaluedThreshold)
13717
+ formatCompact(overvaluedThreshold)
14224
13718
  ] }),
14225
13719
  /* @__PURE__ */ jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
14226
13720
  "(",
14227
- formatMillions(overvaluedThreshold * tokensOutstanding),
13721
+ formatCompact(overvaluedThreshold * tokensOutstanding),
14228
13722
  ")"
14229
13723
  ] })
14230
13724
  ] }) })
14231
13725
  ] })
14232
13726
  ] }),
14233
- /* @__PURE__ */ jsxs(HiddenMobileChart, { children: [
13727
+ /* @__PURE__ */ jsxs("div", { children: [
14234
13728
  /* @__PURE__ */ jsx("h3", { style: { marginBottom: "1rem", fontSize: "1.1rem", color: "#fff" }, children: "Historical Valuation" }),
14235
13729
  /* @__PURE__ */ jsx(ChartContainer, { children: /* @__PURE__ */ jsxs(ChartBackground, { children: [
14236
13730
  axisLabels.map((label, index) => /* @__PURE__ */ jsx(YAxisLabel, { style: { top: `${10 + index * 22}%` }, children: label }, `${label}-${index}`)),
@@ -14349,15 +13843,7 @@ function PropertyValuation({
14349
13843
  ] })
14350
13844
  ] }) })
14351
13845
  ] })
14352
- ] }),
14353
- /* @__PURE__ */ jsx("h3", { className: "desktop-only-historical-chart", style: { marginBottom: "1rem", fontSize: "1.1rem", color: "#fff" }, children: "Historical Valuation" }),
14354
- /* @__PURE__ */ jsx(ChartContainer, { className: "desktop-only-historical-chart", children: /* @__PURE__ */ jsxs(ChartBackground, { children: [
14355
- axisLabels.map((label, index) => /* @__PURE__ */ jsx(YAxisLabel, { style: { top: `${10 + index * 22}%` }, children: label }, `${label}-${index}`)),
14356
- /* @__PURE__ */ jsxs(ValuationSvg, { viewBox: `0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`, preserveAspectRatio: "none", children: [
14357
- valuationPath ? /* @__PURE__ */ jsx("path", { d: valuationPath, fill: "none", stroke: "#D4AF37", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null,
14358
- fairValuePath ? /* @__PURE__ */ jsx("path", { d: fairValuePath, fill: "none", stroke: "#FFFFFF", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null
14359
- ] })
14360
- ] }) })
13846
+ ] })
14361
13847
  ] })
14362
13848
  ] }),
14363
13849
  /* @__PURE__ */ jsxs(RecentSalesSection, { children: [
@@ -14431,6 +13917,14 @@ function formatMillions(value) {
14431
13917
  }
14432
13918
  return `$${(value / 1e6).toFixed(2)}m`;
14433
13919
  }
13920
+ function formatCompact(value) {
13921
+ if (value == null || !Number.isFinite(value)) return "\u2014";
13922
+ const abs = Math.abs(value);
13923
+ if (abs >= 1e9) return `$${(value / 1e9).toFixed(2)}B`;
13924
+ if (abs >= 1e6) return `$${(value / 1e6).toFixed(2)}M`;
13925
+ if (abs >= 1e3) return `$${(value / 1e3).toFixed(1)}K`;
13926
+ return formatCurrency6(value);
13927
+ }
14434
13928
  function formatBedroomLabel(bedrooms) {
14435
13929
  if (!Number.isFinite(bedrooms)) return "\u2014";
14436
13930
  return `${bedrooms} Bed`;
@@ -14554,12 +14048,6 @@ var GaugePriceTag = styled25.div`
14554
14048
  color: var(--color-accent);
14555
14049
  }
14556
14050
  `;
14557
- var HiddenMobileChart = styled25.div`
14558
- display: none;
14559
- @media (max-width: 480px) {
14560
- display: block;
14561
- }
14562
- `;
14563
14051
  var ValuationWrapper = styled25.div`
14564
14052
  display: flex;
14565
14053
  flex-direction: column;
@@ -14611,9 +14099,10 @@ var PricingModelCard = styled25.div`
14611
14099
  var PricingModelHeader = styled25.div`
14612
14100
  display: flex;
14613
14101
  justify-content: space-between;
14614
- align-items: center;
14102
+ align-items: flex-start;
14615
14103
  margin-bottom: 1.5rem;
14616
14104
  gap: 1rem;
14105
+ flex-wrap: wrap;
14617
14106
 
14618
14107
  .valuation-info {
14619
14108
  display: flex;
@@ -14621,6 +14110,7 @@ var PricingModelHeader = styled25.div`
14621
14110
  gap: 0.25rem;
14622
14111
  font-size: 0.85rem;
14623
14112
  color: rgba(255, 255, 255, 0.75);
14113
+ flex-shrink: 0;
14624
14114
  }
14625
14115
  `;
14626
14116
  var PricingModelTitle = styled25.h3`
@@ -14687,15 +14177,31 @@ var ValuationDetails = styled25.div`
14687
14177
  display: flex;
14688
14178
  justify-content: space-between;
14689
14179
  margin-top: 1rem;
14180
+ gap: 0.25rem;
14690
14181
  `;
14691
14182
  var ValuationItem = styled25.div`
14692
14183
  display: flex;
14693
14184
  flex-direction: column;
14185
+ min-width: 0;
14186
+ overflow: hidden;
14694
14187
  `;
14695
14188
  var ValuationValue = styled25.div`
14696
14189
  font-size: 1rem;
14697
14190
  font-weight: 600;
14698
14191
  color: #fff;
14192
+ display: flex;
14193
+ flex-direction: column;
14194
+ gap: 2px;
14195
+ overflow-wrap: break-word;
14196
+ word-break: break-word;
14197
+
14198
+ @media (max-width: 480px) {
14199
+ font-size: 0.72rem;
14200
+
14201
+ .valuation-amount-span {
14202
+ display: none;
14203
+ }
14204
+ }
14699
14205
  `;
14700
14206
  var ChartContainer = styled25.div`
14701
14207
  width: 100%;
@@ -15108,7 +14614,7 @@ var ThumbnailStrip = styled25.div`
15108
14614
  display: none;
15109
14615
  }
15110
14616
  `;
15111
- var Thumbnail3 = styled25.button`
14617
+ var Thumbnail2 = styled25.button`
15112
14618
  width: 86px;
15113
14619
  height: 64px;
15114
14620
  border-radius: 6px;
@@ -15444,7 +14950,7 @@ function GalleryContent({ galleryImages, startIndex, title, subtitle, onClose })
15444
14950
  ]
15445
14951
  }
15446
14952
  ),
15447
- /* @__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)) })
14953
+ /* @__PURE__ */ jsx(ThumbnailStrip, { onClick: (event) => event.stopPropagation(), children: galleryImages.map((image, idx) => /* @__PURE__ */ jsx(Thumbnail2, { $active: idx === currentIndex, onClick: () => setCurrentIndex(idx), "aria-label": `Preview ${image.label}`, children: /* @__PURE__ */ jsx("img", { src: image.src, alt: image.alt }) }, image.alt)) })
15448
14954
  ]
15449
14955
  }
15450
14956
  );