@loafmarkets/ui 0.1.360 → 0.1.362

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.js CHANGED
@@ -14,6 +14,8 @@ var md = require('react-icons/md');
14
14
  var bi = require('react-icons/bi');
15
15
  var fa = require('react-icons/fa');
16
16
  var fi = require('react-icons/fi');
17
+ var chart_js = require('chart.js');
18
+ var reactChartjs2 = require('react-chartjs-2');
17
19
 
18
20
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
19
21
 
@@ -183,7 +185,7 @@ var PortfolioSummary = React5__namespace.forwardRef(
183
185
  onResetAccount,
184
186
  positionsHeading = "Current Positions",
185
187
  emptyPositionsText = "No positions yet. Start trading to build your portfolio!",
186
- formatCurrency: formatCurrency6 = defaultFormatCurrency,
188
+ formatCurrency: formatCurrency5 = defaultFormatCurrency,
187
189
  formatPercent: formatPercent2 = defaultFormatPercent,
188
190
  formatSignedCurrency = defaultFormatSignedCurrency,
189
191
  className,
@@ -221,11 +223,11 @@ var PortfolioSummary = React5__namespace.forwardRef(
221
223
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
222
224
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
223
225
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs uppercase tracking-[0.5px] text-white/50", children: "Available Cash" }),
224
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency6(availableCash) })
226
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency5(availableCash) })
225
227
  ] }),
226
228
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
227
229
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs uppercase tracking-[0.5px] text-white/50", children: "Portfolio Value" }),
228
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency6(portfolioValue) })
230
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency5(portfolioValue) })
229
231
  ] }),
230
232
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
231
233
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs uppercase tracking-[0.5px] text-white/50", children: "Total Return" }),
@@ -7869,7 +7871,7 @@ var MiniLiveFeed = () => {
7869
7871
  }, 2e3 + Math.random() * 2e3);
7870
7872
  return () => clearInterval(interval);
7871
7873
  }, []);
7872
- const formatCurrency6 = (amount) => `$${amount.toLocaleString()}`;
7874
+ const formatCurrency5 = (amount) => `$${amount.toLocaleString()}`;
7873
7875
  return /* @__PURE__ */ jsxRuntime.jsxs(
7874
7876
  "div",
7875
7877
  {
@@ -7959,7 +7961,7 @@ var MiniLiveFeed = () => {
7959
7961
  ] }),
7960
7962
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem", position: "relative", zIndex: 1 }, children: [
7961
7963
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.75rem", color: "var(--color-text-secondary, #848e9c)" }, children: "bought" }),
7962
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.8rem", fontWeight: 600, color: "#fff" }, children: formatCurrency6(purchase.amount) })
7964
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.8rem", fontWeight: 600, color: "#fff" }, children: formatCurrency5(purchase.amount) })
7963
7965
  ] })
7964
7966
  ]
7965
7967
  },
@@ -8505,7 +8507,8 @@ function GalleryMapSection({
8505
8507
  autoPlayInterval = 4e3,
8506
8508
  hideMap = false,
8507
8509
  hideGallery = false,
8508
- hideSuburb = false
8510
+ hideSuburb = false,
8511
+ featuresSlot
8509
8512
  }) {
8510
8513
  const [carouselIndex, setCarouselIndex] = React5.useState(0);
8511
8514
  const [showVideo, setShowVideo] = React5.useState(false);
@@ -8598,6 +8601,7 @@ function GalleryMapSection({
8598
8601
  }, children: cat.name }, cat.name);
8599
8602
  }) })
8600
8603
  ] }),
8604
+ featuresSlot,
8601
8605
  !hideMap && /* @__PURE__ */ jsxRuntime.jsxs(MapPanel, { children: [
8602
8606
  /* @__PURE__ */ jsxRuntime.jsxs(PanelHeader, { children: [
8603
8607
  /* @__PURE__ */ jsxRuntime.jsxs("h3", { children: [
@@ -9176,25 +9180,23 @@ function PropertyOverview({
9176
9180
  /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "The Asset" }),
9177
9181
  galleryImages.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9178
9182
  /* @__PURE__ */ jsxRuntime.jsxs(GallerySpecRow, { children: [
9179
- /* @__PURE__ */ jsxRuntime.jsxs(GallerySpecLeft, { children: [
9180
- /* @__PURE__ */ jsxRuntime.jsx(
9181
- GalleryMapSection,
9182
- {
9183
- images: galleryImages.map((img) => ({ src: img.imageUrl, title: img.title, subtitle: img.subtitle })),
9184
- categories: galleryCategories,
9185
- propertyLocation: location,
9186
- videoUrl,
9187
- tokenName,
9188
- onPhotoClick: onPhotosClick,
9189
- hideSuburb: true
9190
- }
9191
- ),
9192
- /* @__PURE__ */ jsxRuntime.jsx(FeaturesPanel, { children: features.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(AssetFeatureItem, { children: [
9193
- item.icon && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureIcon, { children: item.icon }),
9194
- item.value && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureValue, { children: item.value }),
9195
- /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureLabel, { children: item.label })
9196
- ] }, i)) })
9197
- ] }),
9183
+ /* @__PURE__ */ jsxRuntime.jsx(GallerySpecLeft, { children: /* @__PURE__ */ jsxRuntime.jsx(
9184
+ GalleryMapSection,
9185
+ {
9186
+ images: galleryImages.map((img) => ({ src: img.imageUrl, title: img.title, subtitle: img.subtitle })),
9187
+ categories: galleryCategories,
9188
+ propertyLocation: location,
9189
+ videoUrl,
9190
+ tokenName,
9191
+ onPhotoClick: onPhotosClick,
9192
+ hideSuburb: true,
9193
+ featuresSlot: /* @__PURE__ */ jsxRuntime.jsx(FeaturesPanel, { children: features.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(AssetFeatureItem, { children: [
9194
+ item.icon && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureIcon, { children: item.icon }),
9195
+ item.value && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureValue, { children: item.value }),
9196
+ /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureLabel, { children: item.label })
9197
+ ] }, i)) })
9198
+ }
9199
+ ) }),
9198
9200
  /* @__PURE__ */ jsxRuntime.jsxs(StatsColumn, { children: [
9199
9201
  /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Asset Specification" }),
9200
9202
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
@@ -16326,568 +16328,413 @@ var ActionButton = styled9__default.default.button`
16326
16328
  color: ${({ $variant }) => $variant === "danger" ? "#ff8f8f" : "#f4d07f"};
16327
16329
  }
16328
16330
  `;
16329
- var CHART_WIDTH = 1200;
16330
- var CHART_HEIGHT = 200;
16331
- var CHART_PADDING = 10;
16332
- var FALLBACK_RECENT_SALES = [
16333
- {
16334
- imageUrl: "https://images.unsplash.com/photo-1464146072230-91cabc968266?auto=format&fit=crop&w=1200&q=80",
16335
- price: 165e5,
16336
- saleDate: "Nov 2024",
16337
- address: "15 Wentworth Road",
16338
- suburb: "Vaucluse",
16339
- bedrooms: 5,
16340
- bathrooms: 5,
16341
- landSize: "1,420 sqm"
16342
- },
16343
- {
16344
- imageUrl: "https://images.unsplash.com/photo-1505691938895-1758d7feb511?auto=format&fit=crop&w=1200&q=80",
16345
- price: 149e5,
16346
- saleDate: "Sep 2024",
16347
- address: "42 Vaucluse Road",
16348
- suburb: "Vaucluse",
16349
- bedrooms: 4,
16350
- bathrooms: 4,
16351
- landSize: "980 sqm"
16352
- },
16353
- {
16354
- imageUrl: "https://images.unsplash.com/photo-1505693314120-0d443867891c?auto=format&fit=crop&w=1200&q=80",
16355
- price: 1325e4,
16356
- saleDate: "Jun 2024",
16357
- address: "18 Olola Avenue",
16358
- suburb: "Vaucluse",
16359
- bedrooms: 4,
16360
- bathrooms: 3,
16361
- landSize: "860 sqm"
16362
- }
16363
- ];
16331
+ chart_js.Chart.register(chart_js.CategoryScale, chart_js.LinearScale, chart_js.PointElement, chart_js.LineElement, chart_js.Title, chart_js.Tooltip, chart_js.Legend);
16332
+ var musgraveComparisonData = {
16333
+ labels: ["2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"],
16334
+ datasets: [
16335
+ {
16336
+ name: "Musgrave",
16337
+ color: "#D4AF37",
16338
+ data: [100, 115, 125, 118, 130, 145, 155, 165, 180, 195, 210, 225, 240, 225, 235, 231, 265, 285, 300, 310, 320]
16339
+ },
16340
+ {
16341
+ name: "ASX 200",
16342
+ color: "#2196f3",
16343
+ data: [100, 113, 110, 69, 89, 93, 83, 95, 101, 109, 98, 110, 118, 114, 137, 129, 136, 146, 150, 166, 170]
16344
+ },
16345
+ {
16346
+ name: "Bank Deposits",
16347
+ color: "#e91e63",
16348
+ data: [100, 107, 114, 119, 124, 131, 137, 142, 146, 150, 154, 157, 160, 163, 164, 165, 167, 174, 182, 190, 198]
16349
+ }
16350
+ ],
16351
+ saleMarkers: [
16352
+ { year: "2006", label: "Purchase", price: "$11.25M", description: "" },
16353
+ { year: "2021", label: "Covid Flash Sale", price: "$13M", description: "Sold at ~50% discount due to Covid uncertainty" },
16354
+ { year: "2026", label: "Offering", price: "$36M", description: "Current offering valuation" }
16355
+ ]
16356
+ };
16364
16357
  function PropertyValuation({
16365
- propertyName,
16366
- tokenPrice,
16367
- totalTokens,
16368
- summary = null,
16369
- history = [],
16370
- loading = false,
16371
- error = null
16358
+ propertyTitle,
16359
+ tokenPriceValue,
16360
+ valSummary,
16361
+ offeringValuationValue,
16362
+ totalUnits
16372
16363
  }) {
16373
- const now = React5.useMemo(() => /* @__PURE__ */ new Date(), []);
16374
- const lastPrice = React5.useMemo(() => {
16375
- const fallback = Number.isFinite(tokenPrice) && tokenPrice > 0 ? tokenPrice : 0;
16376
- if (!summary?.lastPrice || summary.lastPrice <= 0) {
16377
- return fallback;
16378
- }
16379
- return summary.lastPrice;
16380
- }, [summary, tokenPrice]);
16381
- const fairValue = React5.useMemo(() => {
16382
- if (summary?.fairValue && summary.fairValue > 0) {
16383
- return summary.fairValue;
16384
- }
16385
- return lastPrice || 1;
16386
- }, [summary, lastPrice]);
16387
- const tokensOutstanding = React5.useMemo(() => {
16388
- if (summary?.totalTokens && summary.totalTokens > 0) {
16389
- return summary.totalTokens;
16390
- }
16391
- if (totalTokens && totalTokens > 0) {
16392
- return totalTokens;
16364
+ const [hoveredSaleYear, setHoveredSaleYear] = React5.useState(null);
16365
+ const gaugePosition = React5.useMemo(() => {
16366
+ const under = valSummary?.undervaluedThreshold;
16367
+ const over = valSummary?.overvaluedThreshold;
16368
+ const price = tokenPriceValue;
16369
+ if (under != null && over != null && price != null && over > under) {
16370
+ const pct = (price - under) / (over - under) * 100;
16371
+ return Math.max(5, Math.min(95, pct));
16393
16372
  }
16394
- return 5e4;
16395
- }, [summary, totalTokens]);
16396
- const undervaluedThreshold = summary?.undervaluedThreshold ?? fairValue * 0.9;
16397
- const overvaluedThreshold = summary?.overvaluedThreshold ?? fairValue * 1.1;
16398
- const gaugePosition = calculatePositionFromPrice(lastPrice, undervaluedThreshold, fairValue, overvaluedThreshold);
16399
- const valuationStatus = summary?.valuationStatus ?? (lastPrice < fairValue ? "Undervalued" : lastPrice > fairValue ? "Overvalued" : "Fair Value");
16400
- const valuationDelta = summary?.valuationDeltaPercent ?? (lastPrice - fairValue) / fairValue * 100;
16401
- const valuationDeltaFormatted = `${valuationDelta >= 0 ? "+" : ""}${valuationDelta.toFixed(1)}%`;
16402
- const { valuationPath, fairValuePath, axisLabels } = React5.useMemo(() => buildChartPaths(history, fairValue), [history, fairValue]);
16403
- const recentSales = React5.useMemo(() => {
16404
- if (summary?.recentSales?.length) {
16405
- return summary.recentSales;
16373
+ return 50;
16374
+ }, [valSummary?.undervaluedThreshold, valSummary?.overvaluedThreshold, tokenPriceValue]);
16375
+ const chartOptions = React5.useMemo(() => ({
16376
+ responsive: true,
16377
+ maintainAspectRatio: false,
16378
+ onHover: (_event, elements) => {
16379
+ if (elements.length > 0) {
16380
+ const dataIndex = elements[0].index;
16381
+ const year = musgraveComparisonData.labels[dataIndex];
16382
+ if (["2006", "2021", "2026"].includes(year)) {
16383
+ setHoveredSaleYear(year);
16384
+ return;
16385
+ }
16386
+ }
16387
+ setHoveredSaleYear(null);
16388
+ },
16389
+ plugins: {
16390
+ legend: { display: false },
16391
+ tooltip: {
16392
+ mode: "index",
16393
+ intersect: false,
16394
+ backgroundColor: "rgba(30, 32, 38, 0.9)",
16395
+ titleColor: "#f8f9fa",
16396
+ bodyColor: "#f8f9fa",
16397
+ borderColor: "rgba(255, 255, 255, 0.1)",
16398
+ borderWidth: 1,
16399
+ callbacks: {
16400
+ label(context) {
16401
+ return `${context.dataset.label}: ${(context.parsed.y ?? 0).toFixed(0)}`;
16402
+ }
16403
+ }
16404
+ }
16405
+ },
16406
+ scales: {
16407
+ x: {
16408
+ grid: { color: "rgba(255, 255, 255, 0.05)" },
16409
+ ticks: { color: "#848e9c", font: { size: 9 }, maxRotation: 45, minRotation: 45 }
16410
+ },
16411
+ y: {
16412
+ grid: { color: "rgba(255, 255, 255, 0.05)" },
16413
+ ticks: { color: "#848e9c", font: { size: 10 } },
16414
+ min: 50
16415
+ }
16406
16416
  }
16407
- return FALLBACK_RECENT_SALES;
16408
- }, [summary]);
16409
- const areaDemandLabel = summary?.areaDemand ?? "Hot";
16410
- const propertyMoatLabel = summary?.propertyMoat ?? "Wide";
16411
- return /* @__PURE__ */ jsxRuntime.jsxs(ValuationWrapper, { children: [
16412
- /* @__PURE__ */ jsxRuntime.jsx(SectionTitle, { children: "Valuation Model" }),
16417
+ }), []);
16418
+ const chartData = React5.useMemo(() => ({
16419
+ labels: musgraveComparisonData.labels,
16420
+ datasets: musgraveComparisonData.datasets.map((dataset, index) => ({
16421
+ label: dataset.name,
16422
+ data: dataset.data,
16423
+ borderColor: dataset.color,
16424
+ backgroundColor: `${dataset.color}20`,
16425
+ borderWidth: index === 0 ? 3 : 2,
16426
+ pointRadius: (ctx) => {
16427
+ if (index === 0) {
16428
+ const year = musgraveComparisonData.labels[ctx.dataIndex];
16429
+ if (["2006", "2021", "2026"].includes(year)) {
16430
+ return hoveredSaleYear === year ? 14 : 8;
16431
+ }
16432
+ }
16433
+ return 1;
16434
+ },
16435
+ pointBackgroundColor: (ctx) => {
16436
+ if (index === 0) {
16437
+ const year = musgraveComparisonData.labels[ctx.dataIndex];
16438
+ if (year === "2006") return "#4CAF50";
16439
+ if (year === "2021") return "#FF5722";
16440
+ if (year === "2026") return "#D4AF37";
16441
+ }
16442
+ return dataset.color;
16443
+ },
16444
+ pointBorderColor: (ctx) => {
16445
+ if (index === 0 && ["2006", "2021", "2026"].includes(musgraveComparisonData.labels[ctx.dataIndex])) return "#fff";
16446
+ return dataset.color;
16447
+ },
16448
+ pointBorderWidth: (ctx) => {
16449
+ if (index === 0 && ["2006", "2021", "2026"].includes(musgraveComparisonData.labels[ctx.dataIndex])) {
16450
+ return hoveredSaleYear === musgraveComparisonData.labels[ctx.dataIndex] ? 4 : 2;
16451
+ }
16452
+ return 0;
16453
+ },
16454
+ pointHoverRadius: 6,
16455
+ tension: 0.3,
16456
+ fill: false
16457
+ }))
16458
+ }), [hoveredSaleYear]);
16459
+ const handleMarkerEnter = React5.useCallback((year) => setHoveredSaleYear(year), []);
16460
+ const handleMarkerLeave = React5.useCallback(() => setHoveredSaleYear(null), []);
16461
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
16462
+ /* @__PURE__ */ jsxRuntime.jsx(ValuationHeading, { children: "Valuation Model" }),
16413
16463
  /* @__PURE__ */ jsxRuntime.jsxs(LoafPricingSection, { children: [
16414
- /* @__PURE__ */ jsxRuntime.jsx(SectionSubheading, { children: "Loaf Pricing Model" }),
16415
- /* @__PURE__ */ jsxRuntime.jsxs(PricingModelCard, { children: [
16464
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { style: { color: "#D4AF37", marginBottom: "0" }, children: "Loaf Pricing Model" }),
16465
+ /* @__PURE__ */ jsxRuntime.jsx(BlurredContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(PricingModelCard, { children: [
16416
16466
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelHeader, { children: [
16417
- /* @__PURE__ */ jsxRuntime.jsx(PricingModelTitle, { children: propertyName }),
16418
- /* @__PURE__ */ jsxRuntime.jsx(PricingModelValue, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "valuation-info", children: [
16419
- /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Valuation as of" }),
16420
- /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--color-accent)" }, children: now.toLocaleDateString("en-US", { day: "2-digit", month: "short", year: "numeric" }) }) }),
16421
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
16422
- now.toLocaleTimeString("en-AU", { hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false, timeZone: "Australia/Sydney" }),
16467
+ /* @__PURE__ */ jsxRuntime.jsx(PricingModelTitle, { children: propertyTitle }),
16468
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "right" }, children: [
16469
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.7)" }, children: "Valuation as of" }),
16470
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: "#D4AF37", fontWeight: "600" }, children: (valSummary?.valuationAsOf ? new Date(valSummary.valuationAsOf) : /* @__PURE__ */ new Date()).toLocaleDateString("en-US", { day: "2-digit", month: "short", year: "numeric" }) }),
16471
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.7)" }, children: [
16472
+ (valSummary?.valuationAsOf ? new Date(valSummary.valuationAsOf) : /* @__PURE__ */ new Date()).toLocaleTimeString("en-AU", { hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false, timeZone: "Australia/Sydney" }),
16423
16473
  " AEST"
16424
16474
  ] })
16425
- ] }) })
16475
+ ] })
16426
16476
  ] }),
16427
16477
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetails, { children: [
16428
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: [
16429
- /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16430
- /* @__PURE__ */ jsxRuntime.jsx(PropertyDetailLabel, { children: "Last Price" }),
16431
- /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: formatCurrency5(lastPrice) })
16432
- ] }),
16433
- /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16434
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", width: "100%" }, children: [
16435
- /* @__PURE__ */ jsxRuntime.jsx(PropertyDetailLabel, { children: "Fair Value" }),
16436
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.75rem", color: "#4CAF50", fontWeight: "bold" }, children: [
16437
- "Confidence: ",
16438
- summary?.confidence ?? "High"
16439
- ] })
16440
- ] }),
16441
- /* @__PURE__ */ jsxRuntime.jsxs(PricingDetailValue, { style: { color: "var(--color-accent)", fontWeight: "bold" }, children: [
16442
- formatCurrency5(fairValue),
16443
- " ",
16444
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.85em", fontWeight: "normal", opacity: 0.8 }, children: [
16445
- "(",
16446
- formatCurrency5(fairValue * tokensOutstanding, { maximumFractionDigits: 0 }),
16447
- ")"
16448
- ] })
16449
- ] })
16450
- ] })
16478
+ /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16479
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailLabel, { children: "IPO Price" }),
16480
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: tokenPriceValue != null ? `$${tokenPriceValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 90, height: 18 }) })
16451
16481
  ] }),
16452
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationIndicator, { className: "mobile-only-valuation", children: [
16453
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationHeader, { children: [
16454
- /* @__PURE__ */ jsxRuntime.jsx(ValuationTitle, { style: { color: "#4CAF50" }, children: "Undervalued" }),
16455
- /* @__PURE__ */ jsxRuntime.jsx(ValuationTitle, { style: { color: "var(--color-accent)" }, children: "Fair Value" }),
16456
- /* @__PURE__ */ jsxRuntime.jsx(ValuationTitle, { style: { color: "#F44336" }, children: "Overvalued" })
16457
- ] }),
16458
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationGauge, { children: [
16459
- /* @__PURE__ */ jsxRuntime.jsx(GaugeBackground, {}),
16460
- /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "fairValue", position: 50 }),
16461
- /* @__PURE__ */ jsxRuntime.jsxs(GaugePriceTag, { position: gaugePosition, children: [
16462
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Last Price" }),
16463
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(lastPrice) })
16464
- ] }),
16465
- /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "lastPrice", position: gaugePosition })
16482
+ /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16483
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", width: "100%" }, children: [
16484
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailLabel, { style: { marginBottom: 0 }, children: "Fair Value" }),
16485
+ valSummary?.confidence && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.75rem", color: "#4CAF50", fontWeight: "bold" }, children: [
16486
+ "Confidence: ",
16487
+ valSummary.confidence
16488
+ ] })
16466
16489
  ] }),
16467
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationDetails, { children: [
16468
- /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#4CAF50" }, children: [
16469
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16470
- "< ",
16471
- formatCurrency5(undervaluedThreshold)
16472
- ] }),
16473
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16474
- "(",
16475
- formatMillions(undervaluedThreshold * tokensOutstanding),
16476
- ")"
16477
- ] })
16478
- ] }) }),
16479
- /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "var(--color-accent)" }, children: [
16480
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(fairValue) }),
16481
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16482
- "(",
16483
- formatMillions(fairValue * tokensOutstanding),
16484
- ")"
16485
- ] })
16486
- ] }) }),
16487
- /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#F44336" }, children: [
16488
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16489
- "> ",
16490
- formatCurrency5(overvaluedThreshold)
16491
- ] }),
16492
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16493
- "(",
16494
- formatMillions(overvaluedThreshold * tokensOutstanding),
16495
- ")"
16496
- ] })
16497
- ] }) })
16498
- ] })
16499
- ] }),
16500
- /* @__PURE__ */ jsxRuntime.jsxs(HiddenMobileChart, { children: [
16501
- /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { marginBottom: "1rem", fontSize: "1.1rem", color: "#fff" }, children: "Historical Valuation" }),
16502
- /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { children: /* @__PURE__ */ jsxRuntime.jsxs(ChartBackground, { children: [
16503
- axisLabels.map((label, index) => /* @__PURE__ */ jsxRuntime.jsx(YAxisLabel, { style: { top: `${10 + index * 22}%` }, children: label }, `${label}-${index}`)),
16504
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationSvg, { viewBox: `0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`, preserveAspectRatio: "none", children: [
16505
- valuationPath ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: valuationPath, fill: "none", stroke: "#D4AF37", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null,
16506
- fairValuePath ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: fairValuePath, fill: "none", stroke: "#FFFFFF", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null
16490
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { style: { color: "#D4AF37", fontWeight: "bold" }, children: valSummary?.fairValue != null ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16491
+ `$${valSummary.fairValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`,
16492
+ totalUnits > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.85em", fontWeight: "normal", opacity: 0.8 }, children: [
16493
+ " ($",
16494
+ (valSummary.fairValue * totalUnits).toLocaleString(),
16495
+ ")"
16507
16496
  ] })
16508
- ] }) })
16497
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 140, height: 18 }) })
16509
16498
  ] }),
16510
16499
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16511
- /* @__PURE__ */ jsxRuntime.jsx(PropertyDetailLabel, { children: "Valuation" }),
16512
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationCallout, { children: [
16513
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#4CAF50", fontWeight: 600, fontSize: "16px", letterSpacing: "0.3px" }, children: valuationStatus }),
16514
- /* @__PURE__ */ jsxRuntime.jsx(ValuationBadge, { children: valuationDeltaFormatted })
16500
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailLabel, { children: "Valuation" }),
16501
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
16502
+ display: "flex",
16503
+ alignItems: "center",
16504
+ justifyContent: "space-between",
16505
+ background: "linear-gradient(90deg, rgba(212, 175, 55, 0.05) 0%, rgba(212, 175, 55, 0.1) 100%)",
16506
+ borderRadius: "8px",
16507
+ padding: "10px 16px",
16508
+ border: "1px solid rgba(212, 175, 55, 0.2)"
16509
+ }, children: [
16510
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#D4AF37", fontWeight: "600" }, children: valSummary?.valuationStatus ?? "Fair Value" }),
16511
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
16512
+ background: "linear-gradient(135deg, #D4AF37 0%, #B8960C 100%)",
16513
+ color: "white",
16514
+ padding: "5px 12px",
16515
+ borderRadius: "20px",
16516
+ fontSize: "14px",
16517
+ fontWeight: "600"
16518
+ }, children: valSummary?.valuationDeltaPercent != null ? `${valSummary.valuationDeltaPercent.toFixed(1)}%` : valSummary ? "0.0%" : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 44, height: 14 }) })
16515
16519
  ] })
16516
16520
  ] }),
16517
16521
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16518
- /* @__PURE__ */ jsxRuntime.jsx(PropertyDetailLabel, { children: "Area Demand" }),
16519
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [
16520
- /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: areaDemandLabel }),
16521
- /* @__PURE__ */ jsxRuntime.jsxs(AreaDemandChart, { children: [
16522
- /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "100%", height: "60", viewBox: "0 0 180 60", preserveAspectRatio: "none", children: [
16523
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "180", height: "20", fill: "rgba(244, 67, 54, 0.2)" }),
16524
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "20", width: "180", height: "20", fill: "rgba(255, 152, 0, 0.15)" }),
16525
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "40", width: "180", height: "20", fill: "rgba(158, 158, 158, 0.15)" }),
16526
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "20", x2: "180", y2: "20", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16527
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "40", x2: "180", y2: "40", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16528
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "45", y1: "0", x2: "45", y2: "60", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1" }),
16529
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "90", y1: "0", x2: "90", y2: "60", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1" }),
16530
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "135", y1: "0", x2: "135", y2: "60", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1" }),
16531
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0,35 C10,30 20,25 30,20 C40,15 50,25 60,15 C70,30 80,10 90,25 C100,15 110,5 120,15 C130,10 140,20 150,5 C160,10 170,5 180,5", fill: "none", stroke: "#F44336", strokeWidth: "2" })
16532
- ] }),
16533
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { top: "3px" }, children: "Hot" }),
16534
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { top: "23px" }, children: "Warm" }),
16535
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { top: "43px" }, children: "Cold" }),
16536
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: 0 }, children: "2020" }),
16537
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: "45px" }, children: "2021" }),
16538
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: "90px" }, children: "2022" }),
16539
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: "135px" }, children: "2023" }),
16540
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", right: 0 }, children: "2025" })
16541
- ] })
16522
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailLabel, { children: "Area Demand" }),
16523
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { style: { color: "#F44336", marginBottom: "0.5rem" }, children: valSummary?.areaDemand ?? (valSummary ? "Hot" : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 60, height: 16 })) }),
16524
+ /* @__PURE__ */ jsxRuntime.jsxs(MiniChartContainer, { children: [
16525
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "100%", height: "60", viewBox: "0 0 180 60", preserveAspectRatio: "none", children: [
16526
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "180", height: "20", fill: "rgba(244, 67, 54, 0.2)" }),
16527
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "20", width: "180", height: "20", fill: "rgba(255, 152, 0, 0.15)" }),
16528
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "40", width: "180", height: "20", fill: "rgba(158, 158, 158, 0.15)" }),
16529
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "20", x2: "180", y2: "20", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16530
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "40", x2: "180", y2: "40", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16531
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0,35 C10,30 20,25 30,20 C40,15 50,25 60,15 C70,30 80,10 90,25 C100,15 110,5 120,15 C130,10 140,20 150,5 C160,10 170,5 180,5", fill: "none", stroke: "#F44336", strokeWidth: "2" })
16532
+ ] }),
16533
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartLabel, { style: { top: "3px" }, children: "Hot" }),
16534
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartLabel, { style: { top: "23px" }, children: "Warm" }),
16535
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartLabel, { style: { top: "43px" }, children: "Cold" }),
16536
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "0" }, children: "2020" }),
16537
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "25%" }, children: "2021" }),
16538
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "50%" }, children: "2022" }),
16539
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "75%" }, children: "2023" }),
16540
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { right: "0", left: "auto" }, children: "2025" })
16542
16541
  ] })
16543
16542
  ] }),
16544
16543
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16545
- /* @__PURE__ */ jsxRuntime.jsx(PropertyDetailLabel, { children: "Property Moat" }),
16546
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [
16547
- /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: propertyMoatLabel }),
16548
- /* @__PURE__ */ jsxRuntime.jsxs(AreaDemandChart, { children: [
16549
- /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "100%", height: "60", viewBox: "0 0 180 60", preserveAspectRatio: "none", children: [
16550
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "180", height: "20", fill: "rgba(0, 137, 123, 0.2)" }),
16551
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "20", width: "180", height: "20", fill: "rgba(102, 187, 106, 0.15)" }),
16552
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "40", width: "180", height: "20", fill: "rgba(200, 230, 201, 0.15)" }),
16553
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "20", x2: "180", y2: "20", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16554
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "40", x2: "180", y2: "40", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16555
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "45", y1: "0", x2: "45", y2: "60", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1" }),
16556
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "90", y1: "0", x2: "90", y2: "60", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1" }),
16557
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "135", y1: "0", x2: "135", y2: "60", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1" }),
16558
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0,15 C10,12 20,8 30,10 C40,5 50,12 60,8 C70,15 80,10 90,5 C100,12 110,8 120,15 C130,10 140,5 150,12 C160,8 170,10 180,5", fill: "none", stroke: "#00897B", strokeWidth: "2" })
16559
- ] }),
16560
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { top: "3px" }, children: "Wide Moat" }),
16561
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { top: "23px" }, children: "Narrow Moat" }),
16562
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { top: "43px" }, children: "No Moat" }),
16563
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: 0 }, children: "2020" }),
16564
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: "45px" }, children: "2021" }),
16565
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: "90px" }, children: "2022" }),
16566
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", left: "135px" }, children: "2023" }),
16567
- /* @__PURE__ */ jsxRuntime.jsx(ChartLabel, { style: { bottom: "-15px", right: 0 }, children: "2025" })
16568
- ] })
16544
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailLabel, { children: "Property Moat" }),
16545
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { style: { color: "#00897B", marginBottom: "0.5rem" }, children: valSummary?.propertyMoat ?? (valSummary ? "Wide" : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 60, height: 16 })) }),
16546
+ /* @__PURE__ */ jsxRuntime.jsxs(MiniChartContainer, { children: [
16547
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "100%", height: "60", viewBox: "0 0 180 60", preserveAspectRatio: "none", children: [
16548
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "180", height: "20", fill: "rgba(0, 137, 123, 0.2)" }),
16549
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "20", width: "180", height: "20", fill: "rgba(102, 187, 106, 0.15)" }),
16550
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "40", width: "180", height: "20", fill: "rgba(200, 230, 201, 0.15)" }),
16551
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "20", x2: "180", y2: "20", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16552
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "0", y1: "40", x2: "180", y2: "40", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1" }),
16553
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0,15 C10,12 20,8 30,10 C40,5 50,12 60,8 C70,15 80,10 90,5 C100,12 110,8 120,15 C130,10 140,5 150,12 C160,8 170,10 180,5", fill: "none", stroke: "#00897B", strokeWidth: "2" })
16554
+ ] }),
16555
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartLabel, { style: { top: "3px" }, children: "Wide Moat" }),
16556
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartLabel, { style: { top: "23px" }, children: "Narrow Moat" }),
16557
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartLabel, { style: { top: "43px" }, children: "No Moat" }),
16558
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "0" }, children: "2020" }),
16559
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "25%" }, children: "2021" }),
16560
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "50%" }, children: "2022" }),
16561
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { left: "75%" }, children: "2023" }),
16562
+ /* @__PURE__ */ jsxRuntime.jsx(MiniChartYearLabel, { style: { right: "0", left: "auto" }, children: "2025" })
16569
16563
  ] })
16570
16564
  ] })
16571
16565
  ] }),
16572
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationIndicator, { className: "desktop-only-valuation", children: [
16566
+ /* @__PURE__ */ jsxRuntime.jsxs(ValuationIndicator, { children: [
16573
16567
  /* @__PURE__ */ jsxRuntime.jsxs(ValuationHeader, { children: [
16574
16568
  /* @__PURE__ */ jsxRuntime.jsx(ValuationTitle, { style: { color: "#4CAF50" }, children: "Undervalued" }),
16575
- /* @__PURE__ */ jsxRuntime.jsx(ValuationTitle, { style: { color: "var(--color-accent)" }, children: "Fair Value" }),
16569
+ /* @__PURE__ */ jsxRuntime.jsx(ValuationTitle, { style: { color: "#D4AF37" }, children: "Fair Value" }),
16576
16570
  /* @__PURE__ */ jsxRuntime.jsx(ValuationTitle, { style: { color: "#F44336" }, children: "Overvalued" })
16577
16571
  ] }),
16578
16572
  /* @__PURE__ */ jsxRuntime.jsxs(ValuationGauge, { children: [
16579
16573
  /* @__PURE__ */ jsxRuntime.jsx(GaugeBackground, {}),
16580
- /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "fairValue", position: 50 }),
16581
- /* @__PURE__ */ jsxRuntime.jsxs(GaugePriceTag, { position: gaugePosition, children: [
16582
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Last Price" }),
16583
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(lastPrice) })
16584
- ] }),
16585
- /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "lastPrice", position: gaugePosition })
16574
+ /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { $position: gaugePosition }),
16575
+ /* @__PURE__ */ jsxRuntime.jsxs(GaugePriceTag, { $position: gaugePosition, children: [
16576
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "IPO Price" }),
16577
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#D4AF37" }, children: tokenPriceValue != null ? `$${tokenPriceValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 60, height: 12 }) })
16578
+ ] })
16586
16579
  ] }),
16587
16580
  /* @__PURE__ */ jsxRuntime.jsxs(ValuationDetails, { children: [
16588
- /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#0ecb81" }, children: [
16581
+ /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ValuationValue, { style: { color: "#4CAF50" }, children: valSummary?.undervaluedThreshold != null ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16589
16582
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16590
16583
  "< ",
16591
- formatCurrency5(undervaluedThreshold)
16584
+ `$${valSummary.undervaluedThreshold.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
16592
16585
  ] }),
16593
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16594
- "(",
16595
- formatMillions(undervaluedThreshold * tokensOutstanding),
16596
- ")"
16586
+ totalUnits > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.8rem", fontWeight: "normal", color: "rgba(255,255,255,0.6)" }, children: [
16587
+ "($",
16588
+ (valSummary.undervaluedThreshold * totalUnits / 1e6).toFixed(1),
16589
+ "m)"
16597
16590
  ] })
16598
- ] }) }),
16599
- /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#f0b90b" }, children: [
16600
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(fairValue) }),
16601
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16602
- "(",
16603
- formatMillions(fairValue * tokensOutstanding),
16604
- ")"
16591
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 90, height: 16 }) }) }),
16592
+ /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ValuationValue, { style: { color: "#D4AF37" }, children: tokenPriceValue != null ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16593
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: `$${tokenPriceValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` }),
16594
+ totalUnits > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.8rem", fontWeight: "normal", color: "rgba(255,255,255,0.6)" }, children: [
16595
+ "($",
16596
+ (tokenPriceValue * totalUnits / 1e6).toFixed(1),
16597
+ "m)"
16605
16598
  ] })
16606
- ] }) }),
16607
- /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#f6465d" }, children: [
16599
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 90, height: 16 }) }) }),
16600
+ /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ValuationValue, { style: { color: "#F44336" }, children: valSummary?.overvaluedThreshold != null ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16608
16601
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16609
16602
  "> ",
16610
- formatCurrency5(overvaluedThreshold)
16603
+ `$${valSummary.overvaluedThreshold.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
16611
16604
  ] }),
16612
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16613
- "(",
16614
- formatMillions(overvaluedThreshold * tokensOutstanding),
16615
- ")"
16605
+ totalUnits > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.8rem", fontWeight: "normal", color: "rgba(255,255,255,0.6)" }, children: [
16606
+ "($",
16607
+ (valSummary.overvaluedThreshold * totalUnits / 1e6).toFixed(1),
16608
+ "m)"
16616
16609
  ] })
16617
- ] }) })
16618
- ] })
16619
- ] }),
16620
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "desktop-only-historical-chart", style: { marginBottom: "1rem", fontSize: "1.1rem", color: "#fff" }, children: "Historical Valuation" }),
16621
- /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { className: "desktop-only-historical-chart", children: /* @__PURE__ */ jsxRuntime.jsxs(ChartBackground, { children: [
16622
- axisLabels.map((label, index) => /* @__PURE__ */ jsxRuntime.jsx(YAxisLabel, { style: { top: `${10 + index * 22}%` }, children: label }, `${label}-${index}`)),
16623
- /* @__PURE__ */ jsxRuntime.jsxs(ValuationSvg, { viewBox: `0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`, preserveAspectRatio: "none", children: [
16624
- valuationPath ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: valuationPath, fill: "none", stroke: "#D4AF37", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null,
16625
- fairValuePath ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: fairValuePath, fill: "none", stroke: "#FFFFFF", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null
16610
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 90, height: 16 }) }) })
16626
16611
  ] })
16627
- ] }) })
16628
- ] })
16612
+ ] })
16613
+ ] }) })
16629
16614
  ] }),
16630
- /* @__PURE__ */ jsxRuntime.jsxs(RecentSalesSection, { children: [
16631
- /* @__PURE__ */ jsxRuntime.jsx(SectionSubheading, { children: "Recent Sales in Comparable Suburbs" }),
16632
- /* @__PURE__ */ jsxRuntime.jsxs(SwipeIndicator, { children: [
16633
- "Swipe to see more",
16634
- /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z" }) })
16615
+ /* @__PURE__ */ jsxRuntime.jsx(BlurredContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationSection, { children: [
16616
+ /* @__PURE__ */ jsxRuntime.jsxs(ValuationSectionTitle, { children: [
16617
+ "Returns Comparison (Modelled for ",
16618
+ propertyTitle,
16619
+ ")"
16635
16620
  ] }),
16636
- /* @__PURE__ */ jsxRuntime.jsx(SalesGrid, { children: recentSales.map((sale, index) => /* @__PURE__ */ jsxRuntime.jsxs(SaleCard, { children: [
16637
- /* @__PURE__ */ jsxRuntime.jsxs(SaleImageContainer, { children: [
16638
- /* @__PURE__ */ jsxRuntime.jsx(
16639
- SaleImage,
16621
+ /* @__PURE__ */ jsxRuntime.jsxs(MainChartContainer, { children: [
16622
+ /* @__PURE__ */ jsxRuntime.jsx(reactChartjs2.Line, { options: chartOptions, data: chartData }),
16623
+ /* @__PURE__ */ jsxRuntime.jsx(ChartOverlayTitle, { children: "20yr Performance (2006-2026)" }),
16624
+ /* @__PURE__ */ jsxRuntime.jsx(ChartLegendColumn, { children: musgraveComparisonData.datasets.map((dataset, i) => {
16625
+ const growth = (dataset.data[dataset.data.length - 1] - 100).toFixed(0);
16626
+ return /* @__PURE__ */ jsxRuntime.jsxs(ChartLegendItem, { style: { color: dataset.color }, children: [
16627
+ /* @__PURE__ */ jsxRuntime.jsx(ChartLegendDot, { style: { backgroundColor: dataset.color } }),
16628
+ dataset.name,
16629
+ " ",
16630
+ Number(growth) >= 0 ? "+" : "",
16631
+ growth,
16632
+ "%"
16633
+ ] }, i);
16634
+ }) })
16635
+ ] }),
16636
+ /* @__PURE__ */ jsxRuntime.jsxs(SaleHistoryBox, { children: [
16637
+ /* @__PURE__ */ jsxRuntime.jsx(SaleHistoryLabel, { children: "Sale History" }),
16638
+ /* @__PURE__ */ jsxRuntime.jsx(SaleHistoryGrid, { children: musgraveComparisonData.saleMarkers.map((marker, i) => {
16639
+ const displayPrice = marker.year === "2026" && offeringValuationValue ? `$${(offeringValuationValue / 1e6).toFixed(0)}M` : marker.price;
16640
+ return /* @__PURE__ */ jsxRuntime.jsxs(
16641
+ SaleHistoryItem,
16640
16642
  {
16641
- src: sale.imageUrl ?? "https://images.unsplash.com/photo-1505693314120-0d443867891c?auto=format&fit=crop&w=1200&q=80",
16642
- alt: sale.address ?? "Recent sale"
16643
- }
16644
- ),
16645
- /* @__PURE__ */ jsxRuntime.jsxs(SoldTag, { children: [
16646
- "SOLD",
16647
- /* @__PURE__ */ jsxRuntime.jsx(SoldIcon, {})
16648
- ] })
16649
- ] }),
16650
- /* @__PURE__ */ jsxRuntime.jsxs(SalePriceBar, { children: [
16651
- /* @__PURE__ */ jsxRuntime.jsxs(SalePriceLeft, { children: [
16652
- /* @__PURE__ */ jsxRuntime.jsx(SalePriceLabel, { children: "Sale Price" }),
16653
- /* @__PURE__ */ jsxRuntime.jsx(SalePriceAmount, { children: formatCurrency5(sale.price) })
16654
- ] }),
16655
- /* @__PURE__ */ jsxRuntime.jsx(SaleDate, { children: sale.saleDate ?? "\u2014" })
16656
- ] }),
16657
- /* @__PURE__ */ jsxRuntime.jsxs(SaleContent, { children: [
16658
- /* @__PURE__ */ jsxRuntime.jsx(SaleAddress, { children: sale.address ?? "Private Sale" }),
16659
- /* @__PURE__ */ jsxRuntime.jsx(SaleSuburb, { children: sale.suburb ?? "" })
16660
- ] }),
16661
- /* @__PURE__ */ jsxRuntime.jsxs(SaleStatsBar, { children: [
16662
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.75rem" }, children: [
16663
- /* @__PURE__ */ jsxRuntime.jsxs(SaleStatItem, { children: [
16664
- /* @__PURE__ */ jsxRuntime.jsx(BedIcon, {}),
16665
- formatBedroomLabel(sale.bedrooms)
16666
- ] }),
16667
- /* @__PURE__ */ jsxRuntime.jsxs(SaleStatItem, { children: [
16668
- /* @__PURE__ */ jsxRuntime.jsx(BathIcon, {}),
16669
- formatBathroomLabel(sale.bathrooms)
16670
- ] })
16671
- ] }),
16672
- /* @__PURE__ */ jsxRuntime.jsx(SaleStatItem, { style: { color: "var(--color-text-secondary)" }, children: sale.landSize ?? "\u2014" })
16673
- ] })
16674
- ] }, `${sale.address ?? sale.suburb ?? "sale"}-${index}`)) })
16675
- ] }),
16676
- loading ? /* @__PURE__ */ jsxRuntime.jsx(LoadingOverlay, { children: "Loading valuation data\u2026" }) : null,
16677
- error ? /* @__PURE__ */ jsxRuntime.jsx(ErrorMessage, { children: error }) : null
16643
+ onMouseEnter: () => handleMarkerEnter(marker.year),
16644
+ onMouseLeave: handleMarkerLeave,
16645
+ $active: hoveredSaleYear === marker.year,
16646
+ children: [
16647
+ /* @__PURE__ */ jsxRuntime.jsx(
16648
+ SaleHistoryDot,
16649
+ {
16650
+ $active: hoveredSaleYear === marker.year,
16651
+ style: {
16652
+ backgroundColor: marker.year === "2006" ? "#4CAF50" : marker.year === "2021" ? "#FF5722" : "#D4AF37",
16653
+ boxShadow: hoveredSaleYear === marker.year ? `0 0 12px ${marker.year === "2006" ? "#4CAF50" : marker.year === "2021" ? "#FF5722" : "#D4AF37"}` : "none"
16654
+ }
16655
+ }
16656
+ ),
16657
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
16658
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: "0.8rem", fontWeight: "600", color: "var(--color-text, #f8f9fa)", marginBottom: "2px" }, children: [
16659
+ marker.year,
16660
+ ": ",
16661
+ marker.label,
16662
+ " \u2014 ",
16663
+ displayPrice
16664
+ ] }),
16665
+ marker.description && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: "0.7rem", color: "var(--color-text-secondary, #848e9c)", lineHeight: "1.3" }, children: marker.description })
16666
+ ] })
16667
+ ]
16668
+ },
16669
+ i
16670
+ );
16671
+ }) })
16672
+ ] }),
16673
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: "0.8rem", color: "var(--color-text-secondary, #848e9c)", textAlign: "center", marginBottom: "0.5rem" }, children: "Mosman Heritage properties of this calibre are beyond scarce, and have consistently outperformed broader markets with lower volatility" }),
16674
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: "0.65rem", color: "var(--color-text-secondary, #848e9c)", textAlign: "center", opacity: 0.7 }, children: "Sources: CoreLogic, Bloomberg, RBA" })
16675
+ ] }) })
16678
16676
  ] });
16679
16677
  }
16680
- function formatCurrency5(value, options) {
16681
- if (value == null || Number.isNaN(value)) {
16682
- return "\u2014";
16683
- }
16684
- const { minimumFractionDigits = 2, maximumFractionDigits = 2, ...rest } = options ?? {};
16685
- const minDigits = Math.max(0, Math.min(20, minimumFractionDigits));
16686
- const maxDigits = Math.max(minDigits, Math.min(20, maximumFractionDigits));
16687
- return value.toLocaleString("en-US", {
16688
- style: "currency",
16689
- currency: "USD",
16690
- minimumFractionDigits: minDigits,
16691
- maximumFractionDigits: maxDigits,
16692
- ...rest
16693
- });
16694
- }
16695
- function formatMillions(value) {
16696
- if (!Number.isFinite(value) || value === 0) {
16697
- return "$0m";
16698
- }
16699
- return `$${(value / 1e6).toFixed(2)}m`;
16700
- }
16701
- function formatBedroomLabel(bedrooms) {
16702
- if (!Number.isFinite(bedrooms)) return "\u2014";
16703
- return `${bedrooms} Bed`;
16704
- }
16705
- function formatBathroomLabel(bathrooms) {
16706
- if (!Number.isFinite(bathrooms)) return "\u2014";
16707
- return `${bathrooms} Bath`;
16708
- }
16709
- function buildChartPaths(history, fallbackValue) {
16710
- if (!history.length) {
16711
- return { valuationPath: null, fairValuePath: null, axisLabels: ["$0", "$0", "$0", "$0", "$0"] };
16712
- }
16713
- const values = history.map((point) => point.valuation);
16714
- const minValue = Math.min(...values);
16715
- const maxValue = Math.max(...values);
16716
- const minTime = Math.min(...history.map((point) => point.timestamp));
16717
- const maxTime = Math.max(...history.map((point) => point.timestamp));
16718
- const adjustedMinValue = minValue === maxValue ? minValue * 0.9 : minValue;
16719
- const adjustedMaxValue = minValue === maxValue ? maxValue * 1.1 : maxValue;
16720
- const valuationSegments = history.map((point, index) => {
16721
- const x = normalize(point.timestamp, minTime, maxTime, CHART_PADDING, CHART_WIDTH - CHART_PADDING);
16722
- const y = mapValueToY(point.valuation, adjustedMinValue, adjustedMaxValue);
16723
- return `${index === 0 ? "M" : "L"} ${x} ${y}`;
16724
- });
16725
- const fairValuePoints = history.filter((point) => Number.isFinite(point.fairValue));
16726
- const fairValueSegments = fairValuePoints.map((point, index) => {
16727
- const x = normalize(point.timestamp, minTime, maxTime, CHART_PADDING, CHART_WIDTH - CHART_PADDING);
16728
- const y = mapValueToY(point.fairValue ?? fallbackValue, adjustedMinValue, adjustedMaxValue);
16729
- return `${index === 0 ? "M" : "L"} ${x} ${y}`;
16730
- });
16731
- const axisLabels = buildAxisLabels(adjustedMinValue, adjustedMaxValue);
16732
- return {
16733
- valuationPath: valuationSegments.length > 1 ? valuationSegments.join(" ") : null,
16734
- fairValuePath: fairValueSegments.length > 1 ? fairValueSegments.join(" ") : null,
16735
- axisLabels
16736
- };
16737
- }
16738
- function normalize(value, min, max, targetMin, targetMax) {
16739
- if (max === min) return (targetMin + targetMax) / 2;
16740
- return targetMin + (value - min) / (max - min) * (targetMax - targetMin);
16741
- }
16742
- function mapValueToY(value, min, max) {
16743
- const normalized = normalize(value, min, max, 0, 1);
16744
- const clamped = Math.min(1, Math.max(0, normalized));
16745
- const drawableHeight = CHART_HEIGHT - CHART_PADDING * 2;
16746
- return CHART_PADDING + (1 - clamped) * drawableHeight;
16747
- }
16748
- function buildAxisLabels(min, max) {
16749
- const steps = 5;
16750
- const labels = [];
16751
- for (let i = 0; i < steps; i += 1) {
16752
- const ratio = i / (steps - 1);
16753
- const value = max - ratio * (max - min);
16754
- labels.push(formatCurrency5(value, { maximumFractionDigits: 0, minimumFractionDigits: 0 }));
16755
- }
16756
- return labels;
16757
- }
16758
- function calculatePositionFromPrice(price, undervaluedPrice, fairValue, overvaluedPrice) {
16759
- if (price <= undervaluedPrice) return 0;
16760
- if (price >= overvaluedPrice) return 100;
16761
- if (price < fairValue) {
16762
- return 50 * (price - undervaluedPrice) / (fairValue - undervaluedPrice);
16763
- }
16764
- return 50 + 50 * (price - fairValue) / (overvaluedPrice - fairValue);
16765
- }
16766
- var ValuationIndicator = styled9__default.default.div`
16767
- background-color: rgba(50, 52, 58, 0.95);
16768
- border-radius: 6px;
16769
- padding: 1rem;
16770
- margin-top: 1.5rem;
16771
- margin-bottom: 1.5rem;
16772
-
16773
- &.desktop-only-valuation {
16774
- @media (max-width: 480px) {
16775
- display: none;
16776
- }
16777
- }
16778
-
16779
- &.mobile-only-valuation {
16780
- display: none;
16781
- @media (max-width: 480px) {
16782
- display: block;
16783
- margin-top: 1rem;
16784
- margin-bottom: 1rem;
16785
- }
16786
- }
16787
- `;
16788
- var GaugeIndicator = styled9__default.default.div`
16789
- position: absolute;
16790
- left: ${(props) => props.position}%;
16791
- top: 0.35rem;
16792
- transform: translateX(-50%);
16793
- width: 3px;
16794
- height: 36px;
16795
- border-radius: 999px;
16796
- background: ${(props) => props.type === "fairValue" ? "#f0b90b" : "rgba(10, 12, 18, 0.95)"};
16797
- box-shadow: ${(props) => props.type === "lastPrice" ? "0 6px 18px rgba(0, 0, 0, 0.65)" : "0 6px 16px rgba(0, 0, 0, 0.45)"};
16678
+ var BlurredContent = styled9__default.default.div`
16679
+ filter: blur(8px);
16680
+ pointer-events: none;
16681
+ user-select: none;
16682
+ overflow: hidden;
16798
16683
  `;
16799
- var GaugePriceTag = styled9__default.default.div`
16800
- position: absolute;
16801
- left: ${(props) => props.position}%;
16802
- top: -46px;
16803
- transform: translateX(-50%);
16804
- background: rgba(7, 9, 13, 0.85);
16805
- border: 1px solid rgba(255, 255, 255, 0.1);
16806
- border-radius: 8px;
16807
- padding: 6px 10px;
16808
- font-size: 0.75rem;
16684
+ var ValuationHeading = styled9__default.default.h2`
16685
+ font-size: 1.4rem;
16686
+ font-weight: 600;
16809
16687
  color: #fff;
16810
- font-weight: 500;
16811
- display: flex;
16812
- flex-direction: column;
16813
- gap: 2px;
16814
- text-align: center;
16815
- backdrop-filter: blur(6px);
16688
+ margin: 0 0 1.5rem;
16816
16689
 
16817
- span:last-child {
16818
- font-size: 0.95em;
16819
- font-weight: 600;
16820
- letter-spacing: 0.2px;
16821
- color: var(--color-accent);
16822
- }
16823
- `;
16824
- var HiddenMobileChart = styled9__default.default.div`
16825
- display: none;
16826
16690
  @media (max-width: 480px) {
16827
- display: block;
16691
+ font-size: 1.15rem;
16692
+ margin-bottom: 1rem;
16828
16693
  }
16829
16694
  `;
16830
- var ValuationWrapper = styled9__default.default.div`
16831
- display: flex;
16832
- flex-direction: column;
16833
- gap: 2rem;
16834
- `;
16835
- var LoadingOverlay = styled9__default.default.div`
16836
- margin-top: 1rem;
16837
- padding: 0.75rem 1rem;
16838
- border-radius: 8px;
16839
- background: rgba(255, 255, 255, 0.05);
16840
- color: rgba(255, 255, 255, 0.8);
16841
- font-size: 0.9rem;
16842
- `;
16843
- var ErrorMessage = styled9__default.default.div`
16844
- margin-top: 1rem;
16845
- padding: 0.75rem 1rem;
16846
- border-radius: 8px;
16847
- background: rgba(244, 67, 54, 0.15);
16848
- color: #ff8a80;
16849
- font-size: 0.9rem;
16850
- border: 1px solid rgba(244, 67, 54, 0.4);
16851
- `;
16852
- var SectionTitle = styled9__default.default.h2`
16853
- margin: 0;
16854
- font-size: clamp(1.75rem, 2.5vw, 2.25rem);
16855
- font-weight: 600;
16856
- color: #fff;
16857
- letter-spacing: 0.01em;
16858
- `;
16859
16695
  var LoafPricingSection = styled9__default.default.div`
16860
16696
  background-color: rgba(30, 32, 38, 0.95);
16861
16697
  border-radius: 8px;
16862
16698
  padding: 1.25rem;
16863
16699
  margin-bottom: 1.5rem;
16864
- `;
16865
- var SectionSubheading = styled9__default.default.h2`
16866
- margin: 0;
16867
- font-size: 1.1rem;
16868
- font-weight: 600;
16869
- color: #fff;
16870
- letter-spacing: 0.02em;
16700
+
16701
+ @media (max-width: 768px) {
16702
+ padding: 1rem;
16703
+ overflow: hidden;
16704
+ }
16705
+
16706
+ @media (max-width: 480px) {
16707
+ padding: 0.75rem;
16708
+ border-radius: 6px;
16709
+ }
16871
16710
  `;
16872
16711
  var PricingModelCard = styled9__default.default.div`
16873
16712
  background-color: rgba(40, 42, 48, 0.95);
16874
16713
  border-radius: 8px;
16875
16714
  padding: 1.5rem;
16876
16715
  margin-top: 1rem;
16716
+
16717
+ @media (max-width: 768px) {
16718
+ padding: 1rem;
16719
+ }
16720
+
16721
+ @media (max-width: 480px) {
16722
+ padding: 0.75rem;
16723
+ }
16877
16724
  `;
16878
16725
  var PricingModelHeader = styled9__default.default.div`
16879
16726
  display: flex;
16880
16727
  justify-content: space-between;
16881
16728
  align-items: center;
16882
16729
  margin-bottom: 1.5rem;
16730
+ flex-wrap: wrap;
16883
16731
  gap: 1rem;
16884
16732
 
16885
- .valuation-info {
16886
- display: flex;
16733
+ @media (max-width: 480px) {
16887
16734
  flex-direction: column;
16888
- gap: 0.25rem;
16889
- font-size: 0.85rem;
16890
- color: rgba(255, 255, 255, 0.75);
16735
+ align-items: flex-start;
16736
+ gap: 0.5rem;
16737
+ margin-bottom: 1rem;
16891
16738
  }
16892
16739
  `;
16893
16740
  var PricingModelTitle = styled9__default.default.h3`
@@ -16895,14 +16742,9 @@ var PricingModelTitle = styled9__default.default.h3`
16895
16742
  font-size: 1.2rem;
16896
16743
  font-weight: 600;
16897
16744
  color: #fff;
16898
- `;
16899
- var PricingModelValue = styled9__default.default.div`
16900
- font-size: 1.4rem;
16901
- font-weight: 700;
16902
- color: var(--color-primary);
16903
16745
 
16904
- @media (max-width: 768px) {
16905
- font-size: 1.2rem;
16746
+ @media (max-width: 480px) {
16747
+ font-size: 1rem;
16906
16748
  }
16907
16749
  `;
16908
16750
  var PricingModelDetails = styled9__default.default.div`
@@ -16910,13 +16752,27 @@ var PricingModelDetails = styled9__default.default.div`
16910
16752
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
16911
16753
  gap: 1.5rem;
16912
16754
  margin-bottom: 1.5rem;
16755
+
16756
+ @media (max-width: 768px) {
16757
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
16758
+ gap: 1rem;
16759
+ }
16760
+
16761
+ @media (max-width: 480px) {
16762
+ grid-template-columns: 1fr;
16763
+ gap: 0.75rem;
16764
+ }
16913
16765
  `;
16914
16766
  var PricingModelDetail = styled9__default.default.div`
16915
16767
  background-color: rgba(50, 52, 58, 0.95);
16916
16768
  border-radius: 6px;
16917
16769
  padding: 1rem;
16770
+
16771
+ @media (max-width: 480px) {
16772
+ padding: 0.75rem;
16773
+ }
16918
16774
  `;
16919
- var PropertyDetailLabel = styled9__default.default.div`
16775
+ var PricingDetailLabel = styled9__default.default.div`
16920
16776
  font-size: 0.85rem;
16921
16777
  color: rgba(255, 255, 255, 0.7);
16922
16778
  margin-bottom: 0.5rem;
@@ -16926,6 +16782,35 @@ var PricingDetailValue = styled9__default.default.div`
16926
16782
  color: #fff;
16927
16783
  font-weight: 500;
16928
16784
  `;
16785
+ var MiniChartContainer = styled9__default.default.div`
16786
+ height: 60px;
16787
+ width: 100%;
16788
+ position: relative;
16789
+ margin-bottom: 15px;
16790
+ `;
16791
+ var MiniChartLabel = styled9__default.default.div`
16792
+ position: absolute;
16793
+ right: 5px;
16794
+ font-size: 9px;
16795
+ color: rgba(255, 255, 255, 0.7);
16796
+ `;
16797
+ var MiniChartYearLabel = styled9__default.default.div`
16798
+ position: absolute;
16799
+ bottom: -15px;
16800
+ font-size: 9px;
16801
+ color: rgba(255, 255, 255, 0.5);
16802
+ `;
16803
+ var ValuationIndicator = styled9__default.default.div`
16804
+ background-color: rgba(50, 52, 58, 0.95);
16805
+ border-radius: 6px;
16806
+ padding: 1rem;
16807
+ margin-top: 1.5rem;
16808
+ margin-bottom: 1.5rem;
16809
+
16810
+ @media (max-width: 480px) {
16811
+ padding: 0.75rem;
16812
+ }
16813
+ `;
16929
16814
  var ValuationHeader = styled9__default.default.div`
16930
16815
  display: flex;
16931
16816
  justify-content: space-between;
@@ -16933,277 +16818,219 @@ var ValuationHeader = styled9__default.default.div`
16933
16818
  `;
16934
16819
  var ValuationTitle = styled9__default.default.div`
16935
16820
  font-size: 0.9rem;
16936
- color: rgba(255, 255, 255, 0.7);
16821
+ font-weight: 500;
16822
+
16823
+ @media (max-width: 480px) {
16824
+ font-size: 0.75rem;
16825
+ }
16937
16826
  `;
16938
16827
  var ValuationGauge = styled9__default.default.div`
16939
16828
  position: relative;
16940
16829
  width: 100%;
16941
16830
  padding: 1.1rem 0 2rem;
16942
- margin: 0.75rem 0 1rem;
16943
16831
  `;
16944
16832
  var GaugeBackground = styled9__default.default.div`
16945
- width: 100%;
16946
- height: 18px;
16947
- border-radius: 999px;
16948
- background: linear-gradient(90deg, #0ecb81 0%, #4dd482 30%, #f8e36c 50%, #f98b6c 70%, #f6465d 100%);
16949
- position: relative;
16950
- overflow: hidden;
16951
- box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.35), 0 8px 18px rgba(0, 0, 0, 0.25);
16833
+ height: 8px;
16834
+ border-radius: 4px;
16835
+ background: linear-gradient(to right, #4CAF50 0%, #4CAF50 33%, #D4AF37 33%, #D4AF37 66%, #F44336 66%, #F44336 100%);
16836
+ `;
16837
+ var GaugeIndicator = styled9__default.default.div`
16838
+ position: absolute;
16839
+ top: 0;
16840
+ left: ${(props) => props.$position}%;
16841
+ transform: translateX(-50%);
16842
+ width: 3px;
16843
+ height: 30px;
16844
+ background: #D4AF37;
16845
+ border-radius: 2px;
16846
+ `;
16847
+ var GaugePriceTag = styled9__default.default.div`
16848
+ position: absolute;
16849
+ left: ${(props) => props.$position}%;
16850
+ top: -30px;
16851
+ transform: translateX(-50%);
16852
+ background: rgba(0, 0, 0, 0.8);
16853
+ padding: 4px 8px;
16854
+ border-radius: 4px;
16855
+ font-size: 0.75rem;
16856
+ white-space: nowrap;
16857
+ display: flex;
16858
+ flex-direction: column;
16859
+ align-items: center;
16860
+
16861
+ span:first-child {
16862
+ color: rgba(255, 255, 255, 0.5);
16863
+ font-size: 0.65rem;
16864
+ }
16865
+
16866
+ span:last-child {
16867
+ color: #fff;
16868
+ font-weight: 600;
16869
+ }
16952
16870
  `;
16953
16871
  var ValuationDetails = styled9__default.default.div`
16954
16872
  display: flex;
16955
16873
  justify-content: space-between;
16956
16874
  margin-top: 1rem;
16875
+
16876
+ @media (max-width: 480px) {
16877
+ gap: 0.25rem;
16878
+ }
16957
16879
  `;
16958
16880
  var ValuationItem = styled9__default.default.div`
16959
16881
  display: flex;
16960
16882
  flex-direction: column;
16883
+
16884
+ &:nth-child(2) {
16885
+ text-align: center;
16886
+ }
16887
+
16888
+ &:last-child {
16889
+ text-align: right;
16890
+ }
16961
16891
  `;
16962
16892
  var ValuationValue = styled9__default.default.div`
16963
16893
  font-size: 1rem;
16964
16894
  font-weight: 600;
16965
- color: #fff;
16966
- `;
16967
- var ChartContainer = styled9__default.default.div`
16968
- width: 100%;
16969
- height: 301.52px;
16970
- margin-top: 1.5rem;
16971
- background-color: rgba(50, 52, 58, 0.5);
16972
- border-radius: 6px;
16973
- padding: 1rem;
16974
- position: relative;
16975
- `;
16976
- var ChartBackground = styled9__default.default.div`
16977
- position: relative;
16978
- height: 100%;
16979
- width: 100%;
16980
- background: rgba(255, 255, 255, 0.03);
16981
- border-radius: 8px;
16982
- `;
16983
- var ValuationSvg = styled9__default.default.svg`
16984
- position: absolute;
16985
- top: 10px;
16986
- right: 0;
16987
- bottom: 25px;
16988
- left: 0;
16989
- overflow: visible;
16990
- width: 100%;
16991
- height: calc(100% - 35px);
16992
- `;
16993
- var YAxisLabel = styled9__default.default.div`
16994
- position: absolute;
16995
- left: -40px;
16996
- font-size: 10px;
16997
- color: rgba(255, 255, 255, 0.6);
16998
- text-align: right;
16999
- padding-right: 5px;
17000
- `;
17001
- var ValuationCallout = styled9__default.default.div`
17002
16895
  display: flex;
17003
- align-items: center;
17004
- justify-content: space-between;
17005
- background: linear-gradient(90deg, rgba(76, 175, 80, 0.05) 0%, rgba(76, 175, 80, 0.1) 100%);
17006
- border-radius: 8px;
17007
- padding: 10px 16px;
17008
- border: 1px solid rgba(76, 175, 80, 0.2);
17009
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
17010
- `;
17011
- var ValuationBadge = styled9__default.default.div`
17012
- background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%);
17013
- color: white;
17014
- padding: 5px 12px;
17015
- border-radius: 20px;
17016
- font-size: 14px;
17017
- font-weight: 600;
17018
- box-shadow: 0 2px 4px rgba(76, 175, 80, 0.25);
17019
- `;
17020
- var AreaDemandChart = styled9__default.default.div`
17021
- height: 60px;
17022
- width: 100%;
17023
- position: relative;
17024
- `;
17025
- var ChartLabel = styled9__default.default.div`
17026
- position: absolute;
17027
- font-size: 9px;
17028
- color: rgba(255, 255, 255, 0.7);
17029
- `;
17030
- var RecentSalesSection = styled9__default.default.div`
17031
- background-color: rgba(30, 32, 38, 0.95);
17032
- border-radius: 8px;
17033
- padding: 1.25rem;
17034
- margin-bottom: 1.5rem;
16896
+ flex-direction: column;
16897
+ gap: 0.15rem;
17035
16898
 
17036
- @media (max-width: 768px) {
17037
- position: relative;
16899
+ @media (max-width: 480px) {
16900
+ font-size: 0.85rem;
17038
16901
  }
17039
16902
  `;
17040
- var SalesGrid = styled9__default.default.div`
17041
- display: grid;
17042
- grid-template-columns: repeat(3, 1fr);
17043
- gap: 1.5rem;
17044
- margin-top: 1rem;
16903
+ var ValuationSection = styled9__default.default.section`
16904
+ background-color: var(--color-card, rgba(30, 35, 41, 0.8));
16905
+ border-radius: 12px;
16906
+ padding: 1.5rem;
16907
+ margin-bottom: 1.5rem;
17045
16908
 
17046
16909
  @media (max-width: 768px) {
17047
- display: flex;
17048
- overflow-x: auto;
17049
- scroll-snap-type: x mandatory;
17050
- scroll-behavior: smooth;
17051
- -webkit-overflow-scrolling: touch;
17052
- gap: 1rem;
17053
- padding-bottom: 1rem;
17054
-
17055
- &::-webkit-scrollbar {
17056
- display: none;
17057
- }
17058
- scrollbar-width: none;
16910
+ overflow: hidden;
16911
+ box-sizing: border-box;
16912
+ padding: 1rem;
17059
16913
  }
17060
- `;
17061
- var SaleCard = styled9__default.default.div`
17062
- background-color: var(--color-card, #1e2329);
17063
- border-radius: var(--border-radius, 8px);
17064
- overflow: hidden;
17065
- transition: transform 0.2s ease, box-shadow 0.2s ease;
17066
- border: 1px solid rgba(255, 255, 255, 0.05);
17067
16914
 
17068
- &:hover {
17069
- transform: translateY(-4px);
17070
- box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
16915
+ @media (max-width: 480px) {
16916
+ padding: 0.75rem;
16917
+ border-radius: 8px;
17071
16918
  }
16919
+ `;
16920
+ var ValuationSectionTitle = styled9__default.default.h2`
16921
+ font-size: 0.9rem;
16922
+ font-weight: 600;
16923
+ padding-bottom: 0.75rem;
16924
+ margin-bottom: 1rem;
16925
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
16926
+ color: var(--color-text, #f8f9fa);
16927
+ display: flex;
16928
+ align-items: center;
16929
+ gap: 0.5rem;
16930
+ `;
16931
+ var MainChartContainer = styled9__default.default.div`
16932
+ position: relative;
16933
+ height: 450px;
16934
+ margin-bottom: 1rem;
17072
16935
 
17073
16936
  @media (max-width: 768px) {
17074
- min-width: 280px;
17075
- width: 85%;
17076
- scroll-snap-align: start;
17077
- flex-shrink: 0;
17078
- margin-right: 0.5rem;
17079
-
17080
- &:last-child {
17081
- margin-right: 1rem;
17082
- }
16937
+ height: 350px;
17083
16938
  }
17084
- `;
17085
- var SaleImageContainer = styled9__default.default.div`
17086
- position: relative;
17087
- width: 100%;
17088
- height: 200px;
17089
- overflow: hidden;
17090
- `;
17091
- var SaleImage = styled9__default.default.img`
17092
- width: 100%;
17093
- height: 100%;
17094
- object-fit: cover;
17095
- object-position: center;
17096
- transition: transform 0.3s ease;
17097
16939
 
17098
- ${SaleCard}:hover & {
17099
- transform: scale(1.05);
16940
+ @media (max-width: 480px) {
16941
+ height: 260px;
17100
16942
  }
17101
16943
  `;
17102
- var SoldTag = styled9__default.default.div`
16944
+ var ChartOverlayTitle = styled9__default.default.div`
17103
16945
  position: absolute;
17104
- top: 1rem;
17105
- right: 1rem;
17106
- background-color: var(--color-accent, #f0b90b);
17107
- color: var(--color-background, #0b0e11);
17108
- font-weight: 600;
17109
- font-size: 0.75rem;
17110
- padding: 0.25rem 0.5rem;
16946
+ left: 10px;
16947
+ top: 10px;
16948
+ font-size: 0.9rem;
16949
+ font-weight: 500;
16950
+ color: #f8f9fa;
16951
+ background-color: rgba(30, 32, 38, 0.7);
16952
+ padding: 2px 8px;
17111
16953
  border-radius: 4px;
17112
- display: flex;
17113
- align-items: center;
17114
- gap: 4px;
17115
- `;
17116
- var SoldIcon = styled9__default.default.div`
17117
- display: none;
17118
- `;
17119
- var SalePriceBar = styled9__default.default.div`
17120
- display: flex;
17121
- justify-content: space-between;
17122
- align-items: center;
17123
- padding: 0.75rem 1rem;
17124
- background: linear-gradient(90deg, rgba(240, 185, 11, 0.1) 0%, rgba(240, 185, 11, 0.05) 100%);
17125
- border-bottom: 1px solid rgba(255, 255, 255, 0.05);
16954
+ z-index: 10;
16955
+
16956
+ @media (max-width: 480px) {
16957
+ font-size: 0.7rem;
16958
+ padding: 2px 6px;
16959
+ }
17126
16960
  `;
17127
- var SalePriceLeft = styled9__default.default.div`
16961
+ var ChartLegendColumn = styled9__default.default.div`
16962
+ position: absolute;
16963
+ right: 10px;
16964
+ top: 40px;
17128
16965
  display: flex;
17129
16966
  flex-direction: column;
16967
+ gap: 6px;
16968
+ z-index: 10;
17130
16969
  `;
17131
- var SalePriceLabel = styled9__default.default.span`
16970
+ var ChartLegendItem = styled9__default.default.div`
17132
16971
  font-size: 0.7rem;
17133
- color: rgba(255, 255, 255, 0.5);
17134
- text-transform: uppercase;
17135
- letter-spacing: 0.5px;
16972
+ font-weight: 500;
16973
+ display: flex;
16974
+ align-items: center;
16975
+ background-color: rgba(30, 32, 38, 0.7);
16976
+ padding: 2px 6px;
16977
+ border-radius: 4px;
17136
16978
  `;
17137
- var SalePriceAmount = styled9__default.default.span`
17138
- font-size: 1.1rem;
17139
- font-weight: 700;
17140
- color: var(--color-accent, #f0b90b);
16979
+ var ChartLegendDot = styled9__default.default.span`
16980
+ display: inline-block;
16981
+ width: 8px;
16982
+ height: 8px;
16983
+ border-radius: 50%;
16984
+ margin-right: 6px;
16985
+ flex-shrink: 0;
17141
16986
  `;
17142
- var SaleContent = styled9__default.default.div`
17143
- padding: 1rem;
16987
+ var SaleHistoryBox = styled9__default.default.div`
16988
+ margin-bottom: 1rem;
16989
+ padding: 0.75rem;
16990
+ background: rgba(255, 255, 255, 0.03);
16991
+ border-radius: 8px;
16992
+ border: 1px solid rgba(255, 255, 255, 0.05);
17144
16993
  `;
17145
- var SaleAddress = styled9__default.default.h3`
17146
- margin: 0;
17147
- margin-bottom: 0.25rem;
17148
- font-size: 1rem;
16994
+ var SaleHistoryLabel = styled9__default.default.div`
16995
+ font-size: 0.7rem;
17149
16996
  font-weight: 600;
17150
- color: var(--color-text, #eaecef);
17151
- `;
17152
- var SaleSuburb = styled9__default.default.div`
17153
- font-size: 0.8rem;
17154
16997
  color: var(--color-text-secondary, #848e9c);
17155
- margin-bottom: 0.5rem;
17156
- `;
17157
- var SaleStatsBar = styled9__default.default.div`
17158
- display: flex;
17159
- justify-content: space-between;
17160
- align-items: center;
17161
- padding: 0.75rem 1rem;
17162
- background-color: rgba(0, 0, 0, 0.3);
17163
- border-top: 1px solid rgba(255, 255, 255, 0.05);
16998
+ text-transform: uppercase;
16999
+ letter-spacing: 0.1em;
17000
+ margin-bottom: 0.75rem;
17164
17001
  `;
17165
- var SaleStatItem = styled9__default.default.div`
17002
+ var SaleHistoryGrid = styled9__default.default.div`
17166
17003
  display: flex;
17167
- align-items: center;
17168
- gap: 0.25rem;
17169
- font-size: 0.8rem;
17170
- color: var(--color-text-secondary, #848e9c);
17171
-
17172
- svg {
17173
- width: 14px;
17174
- height: 14px;
17175
- opacity: 0.7;
17176
- }
17177
- `;
17178
- var SaleDate = styled9__default.default.div`
17179
- font-size: 0.75rem;
17180
- color: var(--color-text-secondary, #848e9c);
17181
- `;
17182
- var SwipeIndicator = styled9__default.default.div`
17183
- display: none;
17184
-
17185
- @media (max-width: 768px) {
17186
- display: flex;
17187
- align-items: center;
17188
- justify-content: center;
17189
- margin-top: 0.75rem;
17190
- color: rgba(255, 255, 255, 0.6);
17191
- font-size: 0.8rem;
17004
+ flex-wrap: wrap;
17005
+ gap: 1rem;
17192
17006
 
17193
- svg {
17194
- margin-left: 0.25rem;
17195
- animation: swipeAnimation 1.5s infinite;
17196
- }
17007
+ @media (max-width: 480px) {
17008
+ flex-direction: column;
17009
+ gap: 0.75rem;
17010
+ }
17011
+ `;
17012
+ var SaleHistoryItem = styled9__default.default.div`
17013
+ display: flex;
17014
+ align-items: flex-start;
17015
+ gap: 0.5rem;
17016
+ flex: 1 1 200px;
17017
+ transition: transform 0.2s ease;
17018
+ transform: ${(props) => props.$active ? "scale(1.05)" : "scale(1)"};
17019
+ cursor: pointer;
17197
17020
 
17198
- @keyframes swipeAnimation {
17199
- 0% { transform: translateX(0); }
17200
- 50% { transform: translateX(5px); }
17201
- 100% { transform: translateX(0); }
17202
- }
17021
+ @media (max-width: 480px) {
17022
+ flex: 1 1 auto;
17203
17023
  }
17204
17024
  `;
17205
- var BedIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 14c1.66 0 3-1.34 3-3S8.66 8 7 8s-3 1.34-3 3 1.34 3 3 3zm0-4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm12-3h-8v8H3V5H1v15h2v-3h18v3h2v-9c0-2.21-1.79-4-4-4zm2 8h-8V9h6c1.1 0 2 .9 2 2v4z" }) });
17206
- var BathIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 7c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2zm5 14H4v-2c0-2.21 1.79-4 4-4h2c2.21 0 4 1.79 4 4v2zm6-8h-2v-2h-2v2h-2v2h2v2h2v-2h2v-2z" }) });
17025
+ var SaleHistoryDot = styled9__default.default.div`
17026
+ width: ${(props) => props.$active ? "16px" : "12px"};
17027
+ height: ${(props) => props.$active ? "16px" : "12px"};
17028
+ border-radius: 50%;
17029
+ border: ${(props) => props.$active ? "3px solid #fff" : "2px solid #fff"};
17030
+ flex-shrink: 0;
17031
+ margin-top: 2px;
17032
+ transition: all 0.2s ease;
17033
+ `;
17207
17034
  var fadeIn = styled9.keyframes`
17208
17035
  from { opacity: 0; }
17209
17036
  to { opacity: 1; }
@@ -17969,6 +17796,392 @@ function hasPendingActivity(data) {
17969
17796
  return s !== "FILLED" && s !== "ALLOCATED" && s !== "CONFIRMED" && s !== "CANCELLED" && s !== "CANCELED" && s !== "REJECTED";
17970
17797
  }) ?? false;
17971
17798
  }
17799
+ var Overlay4 = styled9__default.default.div`
17800
+ position: fixed;
17801
+ top: 0;
17802
+ left: 0;
17803
+ right: 0;
17804
+ bottom: 0;
17805
+ background-color: rgba(0, 0, 0, 0.8);
17806
+ backdrop-filter: blur(4px);
17807
+ display: flex;
17808
+ justify-content: center;
17809
+ align-items: center;
17810
+ z-index: 10000;
17811
+ animation: fadeIn 0.2s ease-in-out;
17812
+
17813
+ @keyframes fadeIn {
17814
+ from { opacity: 0; }
17815
+ to { opacity: 1; }
17816
+ }
17817
+ `;
17818
+ var PopupContainer2 = styled9__default.default.div`
17819
+ background-color: var(--color-background, #0a0a0a);
17820
+ border: 1px solid rgba(230, 198, 86, 0.3);
17821
+ border-radius: var(--border-radius, 12px);
17822
+ padding: 2.5rem;
17823
+ max-width: 440px;
17824
+ width: 90%;
17825
+ position: relative;
17826
+ animation: slideUp 0.3s ease-out;
17827
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
17828
+
17829
+ @keyframes slideUp {
17830
+ from { transform: translateY(20px); opacity: 0; }
17831
+ to { transform: translateY(0); opacity: 1; }
17832
+ }
17833
+
17834
+ @media (max-width: 768px) {
17835
+ padding: 2rem;
17836
+ max-width: 90%;
17837
+ }
17838
+ `;
17839
+ var CloseButton3 = styled9__default.default.button`
17840
+ position: absolute;
17841
+ top: 1rem;
17842
+ right: 1rem;
17843
+ background: none;
17844
+ border: none;
17845
+ color: var(--color-text-secondary, #848e9c);
17846
+ font-size: 1.5rem;
17847
+ cursor: pointer;
17848
+ padding: 0.5rem;
17849
+ display: flex;
17850
+ align-items: center;
17851
+ justify-content: center;
17852
+ transition: color 0.2s ease;
17853
+
17854
+ &:hover { color: var(--color-accent, #E6C656); }
17855
+ `;
17856
+ var Title3 = styled9__default.default.h2`
17857
+ font-size: 1.75rem;
17858
+ font-weight: 600;
17859
+ color: var(--color-text, #fff);
17860
+ margin-bottom: 0.5rem;
17861
+ `;
17862
+ var Subtitle2 = styled9__default.default.p`
17863
+ color: var(--color-text-secondary, #848e9c);
17864
+ font-size: 0.9rem;
17865
+ line-height: 1.5;
17866
+ margin-bottom: 1.5rem;
17867
+ `;
17868
+ var EmailBox = styled9__default.default.div`
17869
+ display: flex;
17870
+ align-items: center;
17871
+ gap: 0.75rem;
17872
+ background: rgba(255, 255, 255, 0.04);
17873
+ border: 1px solid rgba(255, 255, 255, 0.1);
17874
+ border-radius: 8px;
17875
+ padding: 0.875rem 1rem;
17876
+ margin-bottom: 1rem;
17877
+ `;
17878
+ var EmailText = styled9__default.default.span`
17879
+ color: var(--color-accent, #f0b90b);
17880
+ font-size: 0.95rem;
17881
+ font-weight: 500;
17882
+ flex: 1;
17883
+ user-select: all;
17884
+ `;
17885
+ var CopyButton = styled9__default.default.button`
17886
+ background: ${(props) => props.$copied ? "rgba(14, 203, 129, 0.15)" : "rgba(240, 185, 11, 0.1)"};
17887
+ border: 1px solid ${(props) => props.$copied ? "rgba(14, 203, 129, 0.3)" : "rgba(240, 185, 11, 0.2)"};
17888
+ color: ${(props) => props.$copied ? "#0ecb81" : "var(--color-accent, #f0b90b)"};
17889
+ border-radius: 6px;
17890
+ padding: 0.5rem 1rem;
17891
+ font-size: 0.8rem;
17892
+ font-weight: 600;
17893
+ cursor: pointer;
17894
+ transition: all 0.2s ease;
17895
+ white-space: nowrap;
17896
+ `;
17897
+ var OpenMailButton = styled9__default.default.a`
17898
+ display: block;
17899
+ text-align: center;
17900
+ padding: 0.875rem;
17901
+ background-color: var(--color-accent, #f0b90b);
17902
+ color: #000;
17903
+ border-radius: 8px;
17904
+ font-weight: 600;
17905
+ font-size: 0.9rem;
17906
+ text-decoration: none;
17907
+ transition: all 0.2s ease;
17908
+
17909
+ &:hover {
17910
+ transform: translateY(-1px);
17911
+ box-shadow: 0 4px 12px rgba(240, 185, 11, 0.3);
17912
+ }
17913
+ `;
17914
+ var ContactPopup = ({ onClose }) => {
17915
+ const [copied, setCopied] = React5.useState(false);
17916
+ const email = "Gavin@loafmarkets.com";
17917
+ const handleCopy = async () => {
17918
+ try {
17919
+ await navigator.clipboard.writeText(email);
17920
+ setCopied(true);
17921
+ setTimeout(() => setCopied(false), 2e3);
17922
+ } catch {
17923
+ const textArea = document.createElement("textarea");
17924
+ textArea.value = email;
17925
+ document.body.appendChild(textArea);
17926
+ textArea.select();
17927
+ document.execCommand("copy");
17928
+ document.body.removeChild(textArea);
17929
+ setCopied(true);
17930
+ setTimeout(() => setCopied(false), 2e3);
17931
+ }
17932
+ };
17933
+ return /* @__PURE__ */ jsxRuntime.jsx(Overlay4, { onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(PopupContainer2, { onClick: (e) => e.stopPropagation(), children: [
17934
+ /* @__PURE__ */ jsxRuntime.jsx(CloseButton3, { onClick: onClose, children: "\u2715" }),
17935
+ /* @__PURE__ */ jsxRuntime.jsx(Title3, { children: "Contact Us" }),
17936
+ /* @__PURE__ */ jsxRuntime.jsx(Subtitle2, { children: "Have a question or want to get in touch? Send us an email and we'll get back to you as soon as possible." }),
17937
+ /* @__PURE__ */ jsxRuntime.jsxs(EmailBox, { children: [
17938
+ /* @__PURE__ */ jsxRuntime.jsx(EmailText, { children: email }),
17939
+ /* @__PURE__ */ jsxRuntime.jsx(CopyButton, { onClick: handleCopy, $copied: copied, children: copied ? "\u2713 Copied" : "Copy" })
17940
+ ] }),
17941
+ /* @__PURE__ */ jsxRuntime.jsx(OpenMailButton, { href: `mailto:${email}`, children: "Open in Email App" })
17942
+ ] }) });
17943
+ };
17944
+ var FooterContainer = styled9__default.default.footer`
17945
+ background-color: #0d1117;
17946
+ border-top: 1px solid var(--color-border, rgba(255, 255, 255, 0.08));
17947
+ padding: 3rem 2rem 1.5rem;
17948
+ margin-top: auto;
17949
+ margin-left: calc(-50vw + 50%);
17950
+ margin-right: calc(-50vw + 50%);
17951
+ width: 100vw;
17952
+ overflow-x: hidden;
17953
+
17954
+ @media (max-width: 768px) {
17955
+ margin-left: 0;
17956
+ margin-right: 0;
17957
+ width: 100%;
17958
+ padding-left: 1.25rem;
17959
+ padding-right: 1.25rem;
17960
+ }
17961
+ `;
17962
+ var FooterContent = styled9__default.default.div`
17963
+ max-width: 1400px;
17964
+ margin: 0 auto;
17965
+ `;
17966
+ var FooterTop = styled9__default.default.div`
17967
+ display: grid;
17968
+ grid-template-columns: 1.5fr repeat(4, 1fr);
17969
+ gap: 3rem;
17970
+ padding-bottom: 2.5rem;
17971
+ border-bottom: 1px solid var(--color-border, rgba(255, 255, 255, 0.08));
17972
+
17973
+ @media (max-width: 1024px) {
17974
+ grid-template-columns: repeat(3, 1fr);
17975
+ }
17976
+
17977
+ @media (max-width: 768px) {
17978
+ grid-template-columns: repeat(2, 1fr);
17979
+ gap: 2rem;
17980
+ }
17981
+
17982
+ @media (max-width: 480px) {
17983
+ grid-template-columns: 1fr;
17984
+ }
17985
+ `;
17986
+ var BrandColumn = styled9__default.default.div`
17987
+ @media (max-width: 1024px) {
17988
+ grid-column: span 3;
17989
+ margin-bottom: 1rem;
17990
+ }
17991
+
17992
+ @media (max-width: 768px) {
17993
+ grid-column: span 2;
17994
+ }
17995
+
17996
+ @media (max-width: 480px) {
17997
+ grid-column: span 1;
17998
+ }
17999
+ `;
18000
+ var Logo2 = styled9__default.default.div`
18001
+ margin-bottom: 1.25rem;
18002
+
18003
+ img {
18004
+ height: 32px;
18005
+ }
18006
+ `;
18007
+ var BrandDescription = styled9__default.default.p`
18008
+ color: var(--color-text-secondary, #B0B0B8);
18009
+ font-size: 0.875rem;
18010
+ line-height: 1.6;
18011
+ margin-bottom: 1rem;
18012
+ max-width: 280px;
18013
+ `;
18014
+ var SocialLinks = styled9__default.default.div`
18015
+ display: flex;
18016
+ gap: 0.75rem;
18017
+ flex-wrap: wrap;
18018
+ `;
18019
+ var SocialLink = styled9__default.default.a`
18020
+ display: flex;
18021
+ align-items: center;
18022
+ justify-content: center;
18023
+ width: 36px;
18024
+ height: 36px;
18025
+ border-radius: 50%;
18026
+ background-color: rgba(255, 255, 255, 0.05);
18027
+ color: var(--color-text-secondary, #B0B0B8);
18028
+ transition: all 0.2s ease;
18029
+
18030
+ &:hover {
18031
+ background-color: var(--color-accent, #E6C87E);
18032
+ color: var(--color-background, #0A0A0C);
18033
+ }
18034
+
18035
+ svg {
18036
+ width: 18px;
18037
+ height: 18px;
18038
+ }
18039
+ `;
18040
+ var FooterColumn = styled9__default.default.div``;
18041
+ var ColumnTitle = styled9__default.default.h4`
18042
+ color: var(--color-text, #FFFFFF);
18043
+ font-size: 0.875rem;
18044
+ font-weight: 600;
18045
+ margin-bottom: 1.25rem;
18046
+ text-transform: uppercase;
18047
+ letter-spacing: 0.5px;
18048
+ `;
18049
+ var FooterLinks = styled9__default.default.ul`
18050
+ list-style: none;
18051
+ padding: 0;
18052
+ margin: 0;
18053
+ `;
18054
+ var FooterLinkItem = styled9__default.default.li`
18055
+ margin-bottom: 0.75rem;
18056
+ `;
18057
+ var FooterLink = styled9__default.default.a`
18058
+ color: var(--color-text-secondary, #B0B0B8);
18059
+ font-size: 0.875rem;
18060
+ text-decoration: none;
18061
+ transition: color 0.2s ease;
18062
+ cursor: pointer;
18063
+
18064
+ &:hover {
18065
+ color: var(--color-accent, #E6C87E);
18066
+ }
18067
+ `;
18068
+ var ComingSoonLink = styled9__default.default.span`
18069
+ color: var(--color-text-secondary, #B0B0B8);
18070
+ font-size: 0.875rem;
18071
+ opacity: 0.4;
18072
+ cursor: default;
18073
+ user-select: none;
18074
+ `;
18075
+ var FooterBottom = styled9__default.default.div`
18076
+ display: flex;
18077
+ justify-content: space-between;
18078
+ align-items: center;
18079
+ padding-top: 1.5rem;
18080
+ flex-wrap: wrap;
18081
+ gap: 1rem;
18082
+
18083
+ @media (max-width: 768px) {
18084
+ flex-direction: column;
18085
+ text-align: center;
18086
+ }
18087
+ `;
18088
+ var Copyright = styled9__default.default.p`
18089
+ color: var(--color-text-secondary, #B0B0B8);
18090
+ font-size: 0.75rem;
18091
+ `;
18092
+ var LegalLinks = styled9__default.default.div`
18093
+ display: flex;
18094
+ gap: 1.5rem;
18095
+
18096
+ @media (max-width: 480px) {
18097
+ flex-direction: column;
18098
+ gap: 0.5rem;
18099
+ }
18100
+ `;
18101
+ var LegalLink = styled9__default.default.a`
18102
+ color: var(--color-text-secondary, #B0B0B8);
18103
+ font-size: 0.75rem;
18104
+ text-decoration: none;
18105
+ transition: color 0.2s ease;
18106
+
18107
+ &:hover {
18108
+ color: var(--color-accent, #E6C87E);
18109
+ }
18110
+ `;
18111
+ var Disclaimer2 = styled9__default.default.div`
18112
+ padding: 1.5rem 0 0;
18113
+ margin-top: 1.5rem;
18114
+ border-top: 1px solid var(--color-border, rgba(255, 255, 255, 0.08));
18115
+ `;
18116
+ var DisclaimerText = styled9__default.default.p`
18117
+ color: var(--color-text-secondary, #B0B0B8);
18118
+ font-size: 0.6875rem;
18119
+ line-height: 1.6;
18120
+ opacity: 0.7;
18121
+ max-width: 100%;
18122
+ `;
18123
+ var SiteFooter = () => {
18124
+ const [showContactPopup, setShowContactPopup] = React5.useState(false);
18125
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
18126
+ /* @__PURE__ */ jsxRuntime.jsx(FooterContainer, { children: /* @__PURE__ */ jsxRuntime.jsxs(FooterContent, { children: [
18127
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterTop, { children: [
18128
+ /* @__PURE__ */ jsxRuntime.jsxs(BrandColumn, { children: [
18129
+ /* @__PURE__ */ jsxRuntime.jsx(Logo2, { children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: "/", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: "/Loaf-logo-Banner.png", alt: "Loaf" }) }) }),
18130
+ /* @__PURE__ */ jsxRuntime.jsx(BrandDescription, { children: "Trade the world's most exclusive properties. Unprecedented liquidity, heralding a new era for the worlds most desirable assets." }),
18131
+ /* @__PURE__ */ jsxRuntime.jsxs(SocialLinks, { children: [
18132
+ /* @__PURE__ */ jsxRuntime.jsx(SocialLink, { href: "https://x.com/loafmarkets", target: "_blank", rel: "noopener noreferrer", "aria-label": "X", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" }) }) }),
18133
+ /* @__PURE__ */ jsxRuntime.jsx(SocialLink, { href: "https://www.linkedin.com/company/loafmarkets", target: "_blank", rel: "noopener noreferrer", "aria-label": "LinkedIn", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" }) }) }),
18134
+ /* @__PURE__ */ jsxRuntime.jsx(SocialLink, { href: "https://www.instagram.com/loafmarkets", target: "_blank", rel: "noopener noreferrer", "aria-label": "Instagram", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.757-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44 0-.794.646-1.439 1.44-1.439.793-.001 1.44.645 1.44 1.439z" }) }) })
18135
+ ] })
18136
+ ] }),
18137
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterColumn, { children: [
18138
+ /* @__PURE__ */ jsxRuntime.jsx(ColumnTitle, { children: "Platform" }),
18139
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterLinks, { children: [
18140
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { href: "/trade", children: "Trade" }) }),
18141
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { href: "/offerings", children: "Initial Offerings" }) }),
18142
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { href: "/map", children: "Property Map" }) }),
18143
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { href: "/loaf-liquidity", children: "Loaf Liquidity" }) })
18144
+ ] })
18145
+ ] }),
18146
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterColumn, { children: [
18147
+ /* @__PURE__ */ jsxRuntime.jsx(ColumnTitle, { children: "Learn About Loaf" }),
18148
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterLinks, { children: [
18149
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { href: "/learn", children: "Learn" }) }),
18150
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { href: "/about", children: "About" }) })
18151
+ ] })
18152
+ ] }),
18153
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterColumn, { children: [
18154
+ /* @__PURE__ */ jsxRuntime.jsx(ColumnTitle, { children: "Company" }),
18155
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterLinks, { children: [
18156
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { as: "span", onClick: () => setShowContactPopup(true), children: "Contact" }) }),
18157
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ComingSoonLink, { children: "Investors" }) }),
18158
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLink, { href: "/recruitment", children: "Careers" }) })
18159
+ ] })
18160
+ ] }),
18161
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterColumn, { children: [
18162
+ /* @__PURE__ */ jsxRuntime.jsx(ColumnTitle, { children: "Support" }),
18163
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterLinks, { children: [
18164
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ComingSoonLink, { children: "Help Centre" }) }),
18165
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ComingSoonLink, { children: "FAQs" }) }),
18166
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ComingSoonLink, { children: "API Documentation" }) }),
18167
+ /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { children: /* @__PURE__ */ jsxRuntime.jsx(ComingSoonLink, { children: "Status" }) })
18168
+ ] })
18169
+ ] })
18170
+ ] }),
18171
+ /* @__PURE__ */ jsxRuntime.jsxs(FooterBottom, { children: [
18172
+ /* @__PURE__ */ jsxRuntime.jsx(Copyright, { children: "\xA9 2026 Loaf Markets. All rights reserved." }),
18173
+ /* @__PURE__ */ jsxRuntime.jsxs(LegalLinks, { children: [
18174
+ /* @__PURE__ */ jsxRuntime.jsx(LegalLink, { href: "/privacy", children: "Privacy Policy" }),
18175
+ /* @__PURE__ */ jsxRuntime.jsx(LegalLink, { href: "/terms", children: "Terms of Use" }),
18176
+ /* @__PURE__ */ jsxRuntime.jsx(LegalLink, { href: "/cookies", children: "Cookie Policy" }),
18177
+ /* @__PURE__ */ jsxRuntime.jsx(LegalLink, { href: "/risk", children: "Risk Warning" })
18178
+ ] })
18179
+ ] }),
18180
+ /* @__PURE__ */ jsxRuntime.jsx(Disclaimer2, { children: /* @__PURE__ */ jsxRuntime.jsx(DisclaimerText, { children: "Warning: Digital asset prices can be volatile. The value of your investment can go down or up and you may not get back the amount invested. Past gains are not indicative of future returns. You are solely responsible for your investment decisions and Loaf is not liable for any losses you may incur. The information here should not be regarded as financial or investment advice. For more information, see our Terms of Use and Risk Warning." }) })
18181
+ ] }) }),
18182
+ showContactPopup && /* @__PURE__ */ jsxRuntime.jsx(ContactPopup, { onClose: () => setShowContactPopup(false) })
18183
+ ] });
18184
+ };
17972
18185
 
17973
18186
  exports.AssetSelectorBar = AssetSelectorBar;
17974
18187
  exports.Badge = Badge;
@@ -17979,6 +18192,7 @@ exports.CardDescription = CardDescription;
17979
18192
  exports.CardFooter = CardFooter;
17980
18193
  exports.CardHeader = CardHeader;
17981
18194
  exports.CardTitle = CardTitle;
18195
+ exports.ContactPopup = ContactPopup;
17982
18196
  exports.Header = Header;
17983
18197
  exports.HousePositionSlider = HousePositionSlider;
17984
18198
  exports.HousePositionSliderMobile = HousePositionSliderMobile;
@@ -18007,6 +18221,7 @@ exports.PropertyPhotoGallery = PropertyPhotoGallery;
18007
18221
  exports.PropertySubheader = PropertySubheader;
18008
18222
  exports.PropertyTour = PropertyTour;
18009
18223
  exports.PropertyValuation = PropertyValuation;
18224
+ exports.SiteFooter = SiteFooter;
18010
18225
  exports.Skeleton = Skeleton;
18011
18226
  exports.SlideDigit = SlideDigit;
18012
18227
  exports.ToastProvider = ToastProvider;