@loafmarkets/ui 0.1.136 → 0.1.138

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -8222,6 +8222,29 @@ var GymIcon = /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox:
8222
8222
  /* @__PURE__ */ jsx("path", { d: "M10 6h4" }),
8223
8223
  /* @__PURE__ */ jsx("path", { d: "M10 18h4" })
8224
8224
  ] });
8225
+ var ShieldIcon = /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }) });
8226
+ var LockIcon = /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8227
+ /* @__PURE__ */ jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }),
8228
+ /* @__PURE__ */ jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
8229
+ ] });
8230
+ var FileCheckIcon = /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8231
+ /* @__PURE__ */ jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }),
8232
+ /* @__PURE__ */ jsx("polyline", { points: "14 2 14 8 20 8" }),
8233
+ /* @__PURE__ */ jsx("path", { d: "M9 15l2 2 4-4" })
8234
+ ] });
8235
+ var BuildingIcon = /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8236
+ /* @__PURE__ */ jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", ry: "2" }),
8237
+ /* @__PURE__ */ jsx("path", { d: "M9 22v-4h6v4" }),
8238
+ /* @__PURE__ */ jsx("path", { d: "M8 6h.01" }),
8239
+ /* @__PURE__ */ jsx("path", { d: "M16 6h.01" }),
8240
+ /* @__PURE__ */ jsx("path", { d: "M12 6h.01" }),
8241
+ /* @__PURE__ */ jsx("path", { d: "M12 10h.01" }),
8242
+ /* @__PURE__ */ jsx("path", { d: "M12 14h.01" }),
8243
+ /* @__PURE__ */ jsx("path", { d: "M16 10h.01" }),
8244
+ /* @__PURE__ */ jsx("path", { d: "M16 14h.01" }),
8245
+ /* @__PURE__ */ jsx("path", { d: "M8 10h.01" }),
8246
+ /* @__PURE__ */ jsx("path", { d: "M8 14h.01" })
8247
+ ] });
8225
8248
  var DEFAULT_FEATURES = [
8226
8249
  { icon: BedIcon, value: "\u2014", label: "Beds" },
8227
8250
  { icon: BathIcon, value: "\u2014", label: "Baths" },
@@ -8239,6 +8262,16 @@ var DEFAULT_PROPERTY_INFO = [
8239
8262
  { label: "Status", value: "N/A" }
8240
8263
  ];
8241
8264
  var DEFAULT_DESCRIPTION = "Property description not available.";
8265
+ var TOKENHOLDER_PROTECTIONS = [
8266
+ { icon: ShieldIcon, title: "SPV Structure", desc: "Each property is held in a dedicated Special Purpose Vehicle, isolating investor assets from platform risk." },
8267
+ { icon: LockIcon, title: "Smart Contract Audit", desc: "All token contracts are audited by independent security firms before deployment." },
8268
+ { icon: FileCheckIcon, title: "Title Insurance", desc: "Full title insurance coverage protects token holders against title defects and encumbrances." },
8269
+ { icon: BuildingIcon, title: "Regulated Exchange", desc: "Trading occurs on a regulated marketplace with KYC/AML compliance and investor protections." }
8270
+ ];
8271
+ function truncateAddress(addr) {
8272
+ if (addr.length <= 12) return addr;
8273
+ return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
8274
+ }
8242
8275
  function PropertyOverview({
8243
8276
  propertyName,
8244
8277
  location,
@@ -8247,8 +8280,6 @@ function PropertyOverview({
8247
8280
  onPhotosClick,
8248
8281
  description: descriptionProp,
8249
8282
  tradeButtonLabel = "Trade",
8250
- rightPanelTitle = "Financial Overview",
8251
- financialItems: financialItemsProp,
8252
8283
  images,
8253
8284
  galleryCategories: galleryCategories2 = [],
8254
8285
  videoUrl,
@@ -8263,7 +8294,10 @@ function PropertyOverview({
8263
8294
  carSpaces,
8264
8295
  propertyTypeLabel,
8265
8296
  tokensIssued: tokensIssuedProp,
8266
- isLoading = false
8297
+ isLoading = false,
8298
+ ticker,
8299
+ contractAddress,
8300
+ chain = "Base (Ethereum L2)"
8267
8301
  }) {
8268
8302
  const [isDescExpanded, setDescExpanded] = useState(false);
8269
8303
  const description = descriptionProp ?? overviewData?.description ?? DEFAULT_DESCRIPTION;
@@ -8301,42 +8335,76 @@ function PropertyOverview({
8301
8335
  const weeklyRent = overviewData?.weeklyRent ?? 0;
8302
8336
  const annualRent = weeklyRent * 52;
8303
8337
  const dividendYield = resolvedValuation && annualRent > 0 ? (annualRent / resolvedValuation * 100).toFixed(2) : null;
8338
+ const marketCap = tokenPriceValue && resolvedTokensIssued ? tokenPriceValue * resolvedTokensIssued : null;
8304
8339
  const loadingSkeleton = /* @__PURE__ */ jsx(Skeleton, { width: 90, height: 18 });
8305
- const financialItems = financialItemsProp ?? [
8306
- { label: "Token Price", value: isLoading && tokenPriceValue == null ? loadingSkeleton : tokenPriceValue ? `$${tokenPriceValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : "N/A", gold: true },
8307
- { label: "Property Value", value: isLoading && resolvedValuation == null ? loadingSkeleton : resolvedValuation ? resolvedValuation >= 1e6 ? `$${(resolvedValuation / 1e6).toFixed(2)}M` : `$${resolvedValuation.toLocaleString()}` : "N/A" },
8308
- { label: "Weekly Rent", value: isLoading && !overviewData ? loadingSkeleton : weeklyRent > 0 ? `$${weeklyRent.toLocaleString()}/wk` : "N/A", badge: weeklyRent > 0 ? "Rented" : void 0 },
8309
- { label: "Dividend Yield", value: isLoading && dividendYield == null && resolvedValuation == null ? loadingSkeleton : dividendYield ? `${dividendYield}%` : "N/A" },
8310
- { label: "Total Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued ? resolvedTokensIssued.toLocaleString() : "N/A" },
8311
- { label: "Indicative Listing", value: isLoading && !overviewData ? loadingSkeleton : overviewData?.indicativeListing ?? "N/A" }
8312
- ];
8340
+ const resolvedPropertyType = overviewData?.propertyType ?? propertyTypeLabel ?? null;
8313
8341
  const galleryImages = images ?? [];
8314
- return /* @__PURE__ */ jsxs("div", { children: [
8315
- /* @__PURE__ */ jsxs(TopGrid, { children: [
8316
- /* @__PURE__ */ jsxs(Panel, { children: [
8317
- /* @__PURE__ */ jsxs(PanelHeading, { children: [
8318
- "About ",
8319
- propertyName || "This Property"
8342
+ const tokenDetailsItems = [
8343
+ { label: "Chain", value: chain },
8344
+ { label: "Contract Address", value: contractAddress ? truncateAddress(contractAddress) : "\u2014", mono: true },
8345
+ { label: "Token Ticker", value: ticker ?? "\u2014" },
8346
+ { label: "Total Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued?.toLocaleString() ?? "\u2014" },
8347
+ { label: "Property Type", value: resolvedPropertyType ?? "\u2014" },
8348
+ { label: "Location", value: location || "\u2014" }
8349
+ ];
8350
+ const tokenStats = [
8351
+ { label: "Token Price", value: isLoading && tokenPriceValue == null ? loadingSkeleton : tokenPriceValue ? `$${tokenPriceValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : "\u2014", gold: true },
8352
+ { label: "Market Cap", value: isLoading && marketCap == null ? loadingSkeleton : marketCap ? marketCap >= 1e6 ? `$${(marketCap / 1e6).toFixed(1)}M` : `$${marketCap.toLocaleString()}` : "\u2014" },
8353
+ { label: "Dividend Yield", value: isLoading && dividendYield == null ? loadingSkeleton : dividendYield ? `${dividendYield}%` : "\u2014" },
8354
+ { label: "Total Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued?.toLocaleString() ?? "\u2014" }
8355
+ ];
8356
+ const propertyStats = [
8357
+ { label: "Property Value", value: isLoading && resolvedValuation == null ? loadingSkeleton : resolvedValuation ? resolvedValuation >= 1e6 ? `$${(resolvedValuation / 1e6).toFixed(2)}M` : `$${resolvedValuation.toLocaleString()}` : "\u2014" },
8358
+ { label: "Weekly Rent", value: isLoading && !overviewData ? loadingSkeleton : weeklyRent > 0 ? `$${weeklyRent.toLocaleString()}/wk` : "\u2014", badge: weeklyRent > 0 ? "Rented" : void 0 },
8359
+ { label: "Annual Rent", value: isLoading && !overviewData ? loadingSkeleton : annualRent > 0 ? `$${annualRent.toLocaleString()}/yr` : "\u2014" },
8360
+ { label: "Year Built", value: isLoading && !overviewData ? loadingSkeleton : overviewData?.yearBuilt ? String(overviewData.yearBuilt) : "\u2014" }
8361
+ ];
8362
+ return /* @__PURE__ */ jsxs(Wrapper, { children: [
8363
+ /* @__PURE__ */ jsxs(Section, { children: [
8364
+ /* @__PURE__ */ jsx(SectionHeader, { children: "About" }),
8365
+ /* @__PURE__ */ jsxs(AboutGrid, { children: [
8366
+ /* @__PURE__ */ jsxs(AboutLeft, { children: [
8367
+ /* @__PURE__ */ jsxs(DescriptionWrap, { $expanded: isDescExpanded, children: [
8368
+ description.split("\n\n").map((p, i) => /* @__PURE__ */ jsx(DescParagraph, { $first: i === 0, children: p }, i)),
8369
+ !isDescExpanded && /* @__PURE__ */ jsx(DescFade, {})
8370
+ ] }),
8371
+ /* @__PURE__ */ jsxs(ButtonRow, { children: [
8372
+ /* @__PURE__ */ jsx(OutlineBtn, { onClick: () => setDescExpanded((p) => !p), children: isDescExpanded ? "Read less" : "Read more" }),
8373
+ /* @__PURE__ */ jsx(PrimaryBtn, { onClick: onTradeClick, children: tradeButtonLabel })
8374
+ ] })
8320
8375
  ] }),
8321
- /* @__PURE__ */ jsxs(DescriptionWrap, { $expanded: isDescExpanded, children: [
8322
- description.split("\n\n").map((p, i) => /* @__PURE__ */ jsx("p", { style: { color: "rgba(255,255,255,0.7)", lineHeight: 1.7, fontSize: "0.95rem", marginTop: i > 0 ? "1rem" : 0 }, children: p }, i)),
8323
- !isDescExpanded && /* @__PURE__ */ jsx(DescFade, {})
8376
+ /* @__PURE__ */ jsxs(TokenDetailsCard, { children: [
8377
+ /* @__PURE__ */ jsx(TokenDetailsTitle, { children: "Token Details" }),
8378
+ tokenDetailsItems.map((item) => /* @__PURE__ */ jsxs(TokenDetailRow, { children: [
8379
+ /* @__PURE__ */ jsx(TokenDetailLabel, { children: item.label }),
8380
+ /* @__PURE__ */ jsx(TokenDetailValue, { $mono: !!item.mono, children: item.value })
8381
+ ] }, item.label))
8382
+ ] })
8383
+ ] })
8384
+ ] }),
8385
+ /* @__PURE__ */ jsxs(Section, { children: [
8386
+ /* @__PURE__ */ jsx(SectionHeader, { children: "Statistics" }),
8387
+ /* @__PURE__ */ jsxs(StatsGrid, { children: [
8388
+ /* @__PURE__ */ jsxs(StatsColumn, { children: [
8389
+ /* @__PURE__ */ jsx(StatsColumnHeader, { children: "Token Performance" }),
8390
+ tokenStats.map((item) => /* @__PURE__ */ jsxs(StatRow, { $gold: !!item.gold, children: [
8391
+ /* @__PURE__ */ jsx(StatLabel, { children: item.label }),
8392
+ /* @__PURE__ */ jsx(StatValue, { $gold: !!item.gold, children: item.value })
8393
+ ] }, item.label))
8324
8394
  ] }),
8325
- /* @__PURE__ */ jsxs(ButtonRow, { children: [
8326
- /* @__PURE__ */ jsx(OutlineBtn, { onClick: () => setDescExpanded((p) => !p), children: isDescExpanded ? "Read less" : "Read more" }),
8327
- /* @__PURE__ */ jsx(PrimaryBtn, { onClick: onTradeClick, children: tradeButtonLabel })
8395
+ /* @__PURE__ */ jsxs(StatsColumn, { children: [
8396
+ /* @__PURE__ */ jsx(StatsColumnHeader, { children: "Property Fundamentals" }),
8397
+ propertyStats.map((item) => /* @__PURE__ */ jsxs(StatRow, { children: [
8398
+ /* @__PURE__ */ jsxs(StatLabel, { children: [
8399
+ item.label,
8400
+ item.badge && /* @__PURE__ */ jsxs(StatBadge, { children: [
8401
+ /* @__PURE__ */ jsx("span", { style: { width: 5, height: 5, borderRadius: "50%", backgroundColor: "#4CAF50", display: "inline-block" } }),
8402
+ item.badge
8403
+ ] })
8404
+ ] }),
8405
+ /* @__PURE__ */ jsx(StatValue, { children: item.value })
8406
+ ] }, item.label))
8328
8407
  ] })
8329
- ] }),
8330
- /* @__PURE__ */ jsxs(Panel, { children: [
8331
- /* @__PURE__ */ jsx(PanelHeading, { children: rightPanelTitle }),
8332
- /* @__PURE__ */ jsx(FinancialGrid, { children: financialItems.map((item) => /* @__PURE__ */ jsxs(FinancialCard, { $gold: !!item.gold, children: [
8333
- item.badge && /* @__PURE__ */ jsxs(BadgeSpan, { children: [
8334
- /* @__PURE__ */ jsx("span", { style: { width: 5, height: 5, borderRadius: "50%", backgroundColor: "#4CAF50", display: "inline-block" } }),
8335
- item.badge
8336
- ] }),
8337
- /* @__PURE__ */ jsx(FinancialLabel, { $gold: !!item.gold, children: item.label }),
8338
- /* @__PURE__ */ jsx(FinancialValue, { $gold: !!item.gold, children: item.value })
8339
- ] }, item.label)) })
8340
8408
  ] })
8341
8409
  ] }),
8342
8410
  galleryImages.length > 0 && /* @__PURE__ */ jsx(
@@ -8350,8 +8418,8 @@ function PropertyOverview({
8350
8418
  onPhotoClick: onPhotosClick
8351
8419
  }
8352
8420
  ),
8353
- /* @__PURE__ */ jsxs(AssetDetailsPanel, { children: [
8354
- /* @__PURE__ */ jsx("h2", { style: { margin: 0, fontSize: "1.5rem", fontWeight: 600, color: "#fff", marginBottom: "2rem" }, children: "Asset Details" }),
8421
+ /* @__PURE__ */ jsxs(Section, { children: [
8422
+ /* @__PURE__ */ jsx(SectionHeader, { children: "Asset Details" }),
8355
8423
  /* @__PURE__ */ jsxs(AssetPanelsGrid, { children: [
8356
8424
  /* @__PURE__ */ jsxs(MetricsPanel, { children: [
8357
8425
  /* @__PURE__ */ jsx(MetricsPanelTitle, { children: "Key Metrics" }),
@@ -8359,7 +8427,7 @@ function PropertyOverview({
8359
8427
  /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
8360
8428
  /* @__PURE__ */ jsx(MetricLabel, { children: "Land" }),
8361
8429
  /* @__PURE__ */ jsxs(MetricValueRow, { children: [
8362
- /* @__PURE__ */ jsx(MetricBig, { children: landSize?.toLocaleString() ?? "-" }),
8430
+ /* @__PURE__ */ jsx(MetricBig, { children: landSize?.toLocaleString() ?? "\u2014" }),
8363
8431
  /* @__PURE__ */ jsx(MetricUnit, { children: "sqm" })
8364
8432
  ] })
8365
8433
  ] }),
@@ -8367,7 +8435,7 @@ function PropertyOverview({
8367
8435
  /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
8368
8436
  /* @__PURE__ */ jsx(MetricLabel, { children: "Floor" }),
8369
8437
  /* @__PURE__ */ jsxs(MetricValueRow, { children: [
8370
- /* @__PURE__ */ jsx(MetricBig, { children: buildingSize?.toLocaleString() ?? "-" }),
8438
+ /* @__PURE__ */ jsx(MetricBig, { children: buildingSize?.toLocaleString() ?? "\u2014" }),
8371
8439
  /* @__PURE__ */ jsx(MetricUnit, { children: "sqm" })
8372
8440
  ] })
8373
8441
  ] })
@@ -8389,26 +8457,68 @@ function PropertyOverview({
8389
8457
  ] }, i)) })
8390
8458
  ] })
8391
8459
  ] })
8460
+ ] }),
8461
+ /* @__PURE__ */ jsxs(Section, { children: [
8462
+ /* @__PURE__ */ jsx(SectionHeader, { children: "Trading Hours" }),
8463
+ /* @__PURE__ */ jsxs(TradingHoursCard, { children: [
8464
+ /* @__PURE__ */ jsxs(TradingHoursRow, { children: [
8465
+ /* @__PURE__ */ jsx(THLabel, { children: "Session" }),
8466
+ /* @__PURE__ */ jsx(THLabel, { children: "Hours (AEST)" }),
8467
+ /* @__PURE__ */ jsx(THLabel, { children: "Days" })
8468
+ ] }),
8469
+ /* @__PURE__ */ jsxs(TradingHoursRow, { children: [
8470
+ /* @__PURE__ */ jsx(THValue, { children: "Continuous Trading" }),
8471
+ /* @__PURE__ */ jsx(THValue, { children: "10:00 \u2014 16:00" }),
8472
+ /* @__PURE__ */ jsx(THValue, { children: "Mon \u2014 Fri" })
8473
+ ] }),
8474
+ /* @__PURE__ */ jsxs(TradingHoursRow, { children: [
8475
+ /* @__PURE__ */ jsx(THValue, { children: "After Hours" }),
8476
+ /* @__PURE__ */ jsx(THValue, { children: "16:00 \u2014 20:00" }),
8477
+ /* @__PURE__ */ jsx(THValue, { children: "Mon \u2014 Fri" })
8478
+ ] }),
8479
+ /* @__PURE__ */ jsxs(TradingHoursRow, { $last: true, children: [
8480
+ /* @__PURE__ */ jsx(THValue, { children: "Pre-Market" }),
8481
+ /* @__PURE__ */ jsx(THValue, { children: "07:00 \u2014 10:00" }),
8482
+ /* @__PURE__ */ jsx(THValue, { children: "Mon \u2014 Fri" })
8483
+ ] }),
8484
+ /* @__PURE__ */ jsx(TradingHoursNote, { children: "All times are Australian Eastern Standard Time (AEST/AEDT). Markets are closed on Australian public holidays." })
8485
+ ] })
8486
+ ] }),
8487
+ /* @__PURE__ */ jsxs(Section, { children: [
8488
+ /* @__PURE__ */ jsx(SectionHeader, { children: "Tokenholder Protections" }),
8489
+ /* @__PURE__ */ jsx(ProtectionsGrid, { children: TOKENHOLDER_PROTECTIONS.map((p) => /* @__PURE__ */ jsxs(ProtectionCard, { children: [
8490
+ /* @__PURE__ */ jsx(ProtectionIconWrap, { children: p.icon }),
8491
+ /* @__PURE__ */ jsx(ProtectionTitle, { children: p.title }),
8492
+ /* @__PURE__ */ jsx(ProtectionDesc, { children: p.desc })
8493
+ ] }, p.title)) })
8392
8494
  ] })
8393
8495
  ] });
8394
8496
  }
8395
- var TopGrid = styled19.div`
8396
- display: grid;
8397
- grid-template-columns: 1fr 1fr;
8398
- gap: 2rem;
8399
- margin-bottom: 2rem;
8400
- @media (max-width: 768px) { grid-template-columns: 1fr; }
8497
+ var Wrapper = styled19.div`
8498
+ display: flex;
8499
+ flex-direction: column;
8500
+ gap: 1.5rem;
8401
8501
  `;
8402
- var Panel = styled19.div`
8502
+ var Section = styled19.div`
8403
8503
  background: #111;
8404
8504
  border-radius: 12px;
8405
- padding: 1.5rem;
8505
+ padding: 1.75rem;
8406
8506
  `;
8407
- var PanelHeading = styled19.h2`
8408
- font-size: 1.25rem;
8409
- margin-bottom: 1rem;
8410
- color: #fff;
8507
+ var SectionHeader = styled19.h2`
8508
+ font-size: 1.2rem;
8411
8509
  font-weight: 600;
8510
+ color: #fff;
8511
+ margin: 0 0 1.25rem 0;
8512
+ letter-spacing: -0.01em;
8513
+ `;
8514
+ var AboutGrid = styled19.div`
8515
+ display: grid;
8516
+ grid-template-columns: 1fr 340px;
8517
+ gap: 2rem;
8518
+ @media (max-width: 900px) { grid-template-columns: 1fr; }
8519
+ `;
8520
+ var AboutLeft = styled19.div`
8521
+ min-width: 0;
8412
8522
  `;
8413
8523
  var DescriptionWrap = styled19.div`
8414
8524
  position: relative;
@@ -8416,6 +8526,13 @@ var DescriptionWrap = styled19.div`
8416
8526
  overflow: hidden;
8417
8527
  transition: max-height 0.3s ease;
8418
8528
  `;
8529
+ var DescParagraph = styled19.p`
8530
+ color: rgba(255,255,255,0.65);
8531
+ line-height: 1.7;
8532
+ font-size: 0.92rem;
8533
+ margin: 0;
8534
+ margin-top: ${(p) => p.$first ? 0 : "0.85rem"};
8535
+ `;
8419
8536
  var DescFade = styled19.div`
8420
8537
  position: absolute;
8421
8538
  bottom: 0; left: 0; right: 0;
@@ -8424,103 +8541,250 @@ var DescFade = styled19.div`
8424
8541
  pointer-events: none;
8425
8542
  `;
8426
8543
  var ButtonRow = styled19.div`
8427
- margin-top: 1.5rem;
8544
+ margin-top: 1.25rem;
8428
8545
  display: flex;
8429
8546
  gap: 0.75rem;
8430
8547
  `;
8431
8548
  var OutlineBtn = styled19.button`
8432
- padding: 0.55rem 1.35rem;
8433
- border-radius: 10px;
8434
- border: 1px solid rgba(255,255,255,0.28);
8435
- background: rgba(5,6,8,0.85);
8436
- color: rgba(255,255,255,0.95);
8437
- font-size: 0.94rem;
8438
- font-weight: 600;
8549
+ padding: 0.5rem 1.25rem;
8550
+ border-radius: 8px;
8551
+ border: 1px solid rgba(255,255,255,0.2);
8552
+ background: transparent;
8553
+ color: rgba(255,255,255,0.85);
8554
+ font-size: 0.88rem;
8555
+ font-weight: 500;
8439
8556
  cursor: pointer;
8557
+ transition: border-color 0.15s;
8558
+ &:hover { border-color: rgba(255,255,255,0.4); }
8440
8559
  `;
8441
8560
  var PrimaryBtn = styled19.button`
8442
- padding: 0.75rem 1.5rem;
8443
- border-radius: 4px;
8561
+ padding: 0.5rem 1.5rem;
8562
+ border-radius: 8px;
8444
8563
  border: none;
8445
8564
  background: #e6c87e;
8446
- color: black;
8447
- font-size: 0.95rem;
8565
+ color: #111;
8566
+ font-size: 0.88rem;
8448
8567
  font-weight: 600;
8449
8568
  cursor: pointer;
8569
+ transition: background 0.15s;
8570
+ &:hover { background: #d4b86a; }
8571
+ `;
8572
+ var TokenDetailsCard = styled19.div`
8573
+ background: rgba(255,255,255,0.025);
8574
+ border: 1px solid rgba(255,255,255,0.06);
8575
+ border-radius: 10px;
8576
+ padding: 1.25rem;
8577
+ `;
8578
+ var TokenDetailsTitle = styled19.div`
8579
+ font-size: 0.65rem;
8580
+ color: #D4AF37;
8581
+ text-transform: uppercase;
8582
+ letter-spacing: 0.12em;
8583
+ font-weight: 600;
8584
+ margin-bottom: 1rem;
8585
+ padding-bottom: 0.75rem;
8586
+ border-bottom: 1px solid rgba(255,255,255,0.06);
8587
+ `;
8588
+ var TokenDetailRow = styled19.div`
8589
+ display: flex;
8590
+ justify-content: space-between;
8591
+ align-items: center;
8592
+ padding: 0.55rem 0;
8593
+ border-bottom: 1px solid rgba(255,255,255,0.04);
8594
+ &:last-child { border-bottom: none; padding-bottom: 0; }
8595
+ &:first-of-type { padding-top: 0; }
8450
8596
  `;
8451
- var FinancialGrid = styled19.div`
8597
+ var TokenDetailLabel = styled19.span`
8598
+ font-size: 0.82rem;
8599
+ color: rgba(255,255,255,0.5);
8600
+ font-weight: 400;
8601
+ `;
8602
+ var TokenDetailValue = styled19.span`
8603
+ font-size: 0.88rem;
8604
+ color: #fff;
8605
+ font-weight: 500;
8606
+ font-family: ${(p) => p.$mono ? "'SF Mono', 'Fira Code', monospace" : "inherit"};
8607
+ `;
8608
+ var StatsGrid = styled19.div`
8452
8609
  display: grid;
8453
8610
  grid-template-columns: 1fr 1fr;
8454
- gap: 0.75rem;
8611
+ gap: 1rem;
8612
+ @media (max-width: 768px) { grid-template-columns: 1fr; }
8455
8613
  `;
8456
- var FinancialCard = styled19.div`
8457
- background: rgba(255,255,255,0.03);
8614
+ var StatsColumn = styled19.div`
8615
+ background: rgba(255,255,255,0.025);
8616
+ border: 1px solid rgba(255,255,255,0.06);
8458
8617
  border-radius: 10px;
8459
- padding: 1rem 1.25rem;
8460
- border: 1px solid ${(p) => p.$gold ? "rgba(212,175,55,0.3)" : "rgba(255,255,255,0.06)"};
8461
- position: relative;
8462
- `;
8463
- var BadgeSpan = styled19.span`
8464
- position: absolute;
8465
- top: 0.5rem; right: 0.75rem;
8466
- font-size: 0.65rem;
8467
- color: #4CAF50;
8468
- display: flex; align-items: center; gap: 4px;
8618
+ padding: 1.25rem;
8469
8619
  `;
8470
- var FinancialLabel = styled19.div`
8620
+ var StatsColumnHeader = styled19.div`
8471
8621
  font-size: 0.65rem;
8472
- color: ${(p) => p.$gold ? "#D4AF37" : "rgba(255,255,255,0.6)"};
8622
+ color: #D4AF37;
8473
8623
  text-transform: uppercase;
8474
- letter-spacing: 0.1em;
8475
- margin-bottom: 0.4rem;
8476
- font-weight: 500;
8624
+ letter-spacing: 0.12em;
8625
+ font-weight: 600;
8626
+ margin-bottom: 1rem;
8627
+ padding-bottom: 0.75rem;
8628
+ border-bottom: 1px solid rgba(255,255,255,0.06);
8477
8629
  `;
8478
- var FinancialValue = styled19.div`
8479
- font-size: 1.25rem;
8480
- font-weight: 700;
8481
- color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
8482
- line-height: 1;
8630
+ var StatRow = styled19.div`
8631
+ display: flex;
8632
+ justify-content: space-between;
8633
+ align-items: center;
8634
+ padding: 0.65rem 0;
8635
+ border-bottom: 1px solid rgba(255,255,255,0.04);
8636
+ &:last-child { border-bottom: none; padding-bottom: 0; }
8637
+ `;
8638
+ var StatLabel = styled19.span`
8639
+ font-size: 0.82rem;
8640
+ color: rgba(255,255,255,0.5);
8641
+ font-weight: 400;
8642
+ display: flex;
8643
+ align-items: center;
8644
+ gap: 0.5rem;
8645
+ `;
8646
+ var StatBadge = styled19.span`
8647
+ font-size: 0.6rem;
8648
+ color: #4CAF50;
8649
+ display: inline-flex;
8650
+ align-items: center;
8651
+ gap: 3px;
8483
8652
  `;
8484
- var AssetDetailsPanel = styled19.div`
8485
- margin-bottom: 2rem; background: #111; border-radius: 12px; padding: 1.5rem;
8653
+ var StatValue = styled19.span`
8654
+ font-size: 1rem;
8655
+ font-weight: 600;
8656
+ color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
8657
+ font-variant-numeric: tabular-nums;
8486
8658
  `;
8487
8659
  var AssetPanelsGrid = styled19.div`
8488
- display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem;
8660
+ display: grid;
8661
+ grid-template-columns: 1fr 1fr;
8662
+ gap: 1rem;
8489
8663
  @media (max-width: 768px) { grid-template-columns: 1fr; }
8490
8664
  `;
8491
8665
  var MetricsPanel = styled19.div`
8492
- background: rgba(255,255,255,0.03); border-radius: 12px;
8493
- border: 1px solid rgba(255,255,255,0.06); padding: 1.25rem 1.5rem; overflow: hidden;
8666
+ background: rgba(255,255,255,0.025);
8667
+ border-radius: 10px;
8668
+ border: 1px solid rgba(255,255,255,0.06);
8669
+ padding: 1.25rem 1.5rem;
8670
+ overflow: hidden;
8494
8671
  `;
8495
8672
  var InfoPanel = styled19(MetricsPanel)``;
8496
8673
  var MetricsPanelTitle = styled19.div`
8497
- font-size: 0.65rem; color: #D4AF37; text-transform: uppercase;
8498
- letter-spacing: 0.12em; font-weight: 600; margin-bottom: 1rem;
8499
- padding-bottom: 0.75rem; border-bottom: 1px solid rgba(255,255,255,0.06);
8674
+ font-size: 0.65rem;
8675
+ color: #D4AF37;
8676
+ text-transform: uppercase;
8677
+ letter-spacing: 0.12em;
8678
+ font-weight: 600;
8679
+ margin-bottom: 1rem;
8680
+ padding-bottom: 0.75rem;
8681
+ border-bottom: 1px solid rgba(255,255,255,0.06);
8500
8682
  `;
8501
8683
  var LandFloorCard = styled19.div`
8502
8684
  background: linear-gradient(135deg, rgba(212,175,55,0.12), rgba(184,134,11,0.06));
8503
- border-radius: 10px; padding: 0.85rem 1rem;
8685
+ border-radius: 10px;
8686
+ padding: 0.85rem 1rem;
8504
8687
  border: 1px solid rgba(212,175,55,0.25);
8505
- display: flex; gap: 1rem; margin-bottom: 0.75rem;
8688
+ display: flex;
8689
+ gap: 1rem;
8690
+ margin-bottom: 0.75rem;
8506
8691
  `;
8507
8692
  var MetricLabel = styled19.div`
8508
- font-size: 0.65rem; color: #D4AF37; text-transform: uppercase;
8509
- letter-spacing: 0.1em; margin-bottom: 0.4rem; font-weight: 500;
8693
+ font-size: 0.65rem;
8694
+ color: #D4AF37;
8695
+ text-transform: uppercase;
8696
+ letter-spacing: 0.1em;
8697
+ margin-bottom: 0.4rem;
8698
+ font-weight: 500;
8510
8699
  `;
8511
8700
  var MetricValueRow = styled19.div`
8512
- display: flex; align-items: baseline; gap: 0.25rem;
8701
+ display: flex;
8702
+ align-items: baseline;
8703
+ gap: 0.25rem;
8513
8704
  `;
8514
8705
  var MetricBig = styled19.span`
8515
- font-size: 1.5rem; font-weight: 700; color: #D4AF37; line-height: 1;
8706
+ font-size: 1.5rem;
8707
+ font-weight: 700;
8708
+ color: #D4AF37;
8709
+ line-height: 1;
8516
8710
  `;
8517
8711
  var MetricUnit = styled19.span`
8518
- font-size: 0.7rem; color: rgba(212,175,55,0.7); font-weight: 500;
8712
+ font-size: 0.7rem;
8713
+ color: rgba(212,175,55,0.7);
8714
+ font-weight: 500;
8519
8715
  `;
8520
8716
  var FeaturesGrid = styled19.div`
8521
- display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem;
8717
+ display: grid;
8718
+ grid-template-columns: repeat(3, 1fr);
8719
+ gap: 0.75rem;
8522
8720
  @media (max-width: 768px) { grid-template-columns: repeat(2, 1fr); }
8523
8721
  `;
8722
+ var TradingHoursCard = styled19.div`
8723
+ background: rgba(255,255,255,0.025);
8724
+ border: 1px solid rgba(255,255,255,0.06);
8725
+ border-radius: 10px;
8726
+ overflow: hidden;
8727
+ `;
8728
+ var TradingHoursRow = styled19.div`
8729
+ display: grid;
8730
+ grid-template-columns: 1fr 1fr 1fr;
8731
+ padding: 0.75rem 1.25rem;
8732
+ border-bottom: ${(p) => p.$last ? "none" : "1px solid rgba(255,255,255,0.04)"};
8733
+ &:first-child {
8734
+ border-bottom: 1px solid rgba(255,255,255,0.08);
8735
+ }
8736
+ `;
8737
+ var THLabel = styled19.span`
8738
+ font-size: 0.7rem;
8739
+ color: rgba(255,255,255,0.4);
8740
+ text-transform: uppercase;
8741
+ letter-spacing: 0.08em;
8742
+ font-weight: 500;
8743
+ `;
8744
+ var THValue = styled19.span`
8745
+ font-size: 0.85rem;
8746
+ color: rgba(255,255,255,0.8);
8747
+ font-weight: 400;
8748
+ `;
8749
+ var TradingHoursNote = styled19.div`
8750
+ padding: 0.75rem 1.25rem;
8751
+ font-size: 0.75rem;
8752
+ color: rgba(255,255,255,0.35);
8753
+ border-top: 1px solid rgba(255,255,255,0.04);
8754
+ `;
8755
+ var ProtectionsGrid = styled19.div`
8756
+ display: grid;
8757
+ grid-template-columns: 1fr 1fr;
8758
+ gap: 1rem;
8759
+ @media (max-width: 768px) { grid-template-columns: 1fr; }
8760
+ `;
8761
+ var ProtectionCard = styled19.div`
8762
+ background: rgba(255,255,255,0.025);
8763
+ border: 1px solid rgba(255,255,255,0.06);
8764
+ border-radius: 10px;
8765
+ padding: 1.25rem;
8766
+ `;
8767
+ var ProtectionIconWrap = styled19.div`
8768
+ width: 36px;
8769
+ height: 36px;
8770
+ border-radius: 8px;
8771
+ background: rgba(212,175,55,0.1);
8772
+ display: flex;
8773
+ align-items: center;
8774
+ justify-content: center;
8775
+ margin-bottom: 0.75rem;
8776
+ `;
8777
+ var ProtectionTitle = styled19.div`
8778
+ font-size: 0.92rem;
8779
+ font-weight: 600;
8780
+ color: #fff;
8781
+ margin-bottom: 0.4rem;
8782
+ `;
8783
+ var ProtectionDesc = styled19.div`
8784
+ font-size: 0.8rem;
8785
+ color: rgba(255,255,255,0.5);
8786
+ line-height: 1.5;
8787
+ `;
8524
8788
  var STATUS_BG = {
8525
8789
  active: "rgba(14,203,129,0.18)",
8526
8790
  rejected: "rgba(246,70,93,0.18)",
@@ -8535,7 +8799,15 @@ var STATUS_COLOR = {
8535
8799
  historical: "#3861fb",
8536
8800
  expired: "rgba(255,255,255,0.7)"
8537
8801
  };
8538
- function PropertyOffers({ offers }) {
8802
+ function parsePrice(price) {
8803
+ return Number(price.replace(/[^0-9.]/g, ""));
8804
+ }
8805
+ function formatPerShare(price, totalShares) {
8806
+ const total = parsePrice(price);
8807
+ const perShare = total / totalShares;
8808
+ return `$${perShare.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}/Share`;
8809
+ }
8810
+ function PropertyOffers({ offers, totalShares }) {
8539
8811
  return /* @__PURE__ */ jsxs("section", { className: "bg-[rgba(30,32,38,0.95)] rounded-md p-7 border border-white/[0.08]", children: [
8540
8812
  /* @__PURE__ */ jsxs("header", { className: "flex justify-between items-center gap-4 flex-wrap", children: [
8541
8813
  /* @__PURE__ */ jsx("h2", { className: "m-0 text-xl font-semibold", children: "Active & Historical Buyout Offers" }),
@@ -8566,6 +8838,11 @@ function PropertyOffers({ offers }) {
8566
8838
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-[240px]", children: [
8567
8839
  /* @__PURE__ */ jsxs("div", { className: "font-semibold text-[1.15rem] inline-flex items-center gap-2", children: [
8568
8840
  offer.price,
8841
+ totalShares && totalShares > 0 && /* @__PURE__ */ jsxs("span", { className: "text-[0.85rem] font-normal text-white/55", children: [
8842
+ "(",
8843
+ formatPerShare(offer.price, totalShares),
8844
+ ")"
8845
+ ] }),
8569
8846
  (offer.price === "$17,000,000" || offer.price === "$15,500,000") && /* @__PURE__ */ jsx(OfferPricePulse, { $variant: offer.price === "$17,000,000" ? "positive" : "alert" })
8570
8847
  ] }),
8571
8848
  /* @__PURE__ */ jsxs("div", { className: "text-[0.85rem] text-white/65 mt-[0.3rem]", children: [
@@ -9245,7 +9522,7 @@ function PropertyDocuments({ documentsData }) {
9245
9522
  title: doc.label,
9246
9523
  documentUrl: doc.href
9247
9524
  }));
9248
- return /* @__PURE__ */ jsxs(Section, { children: [
9525
+ return /* @__PURE__ */ jsxs(Section2, { children: [
9249
9526
  /* @__PURE__ */ jsx(SectionHeading, { children: "Investment Documents" }),
9250
9527
  /* @__PURE__ */ jsx(DocList, { children: documents.map(({ documentUrl, title }) => {
9251
9528
  const isAvailable = Boolean(documentUrl);
@@ -9260,7 +9537,7 @@ function PropertyDocuments({ documentsData }) {
9260
9537
  }) })
9261
9538
  ] });
9262
9539
  }
9263
- var Section = styled19.section`
9540
+ var Section2 = styled19.section`
9264
9541
  background: var(--color-card, rgba(30, 35, 41, 0.8));
9265
9542
  border-radius: 12px;
9266
9543
  padding: 1.5rem;
@@ -9346,7 +9623,7 @@ function PropertyInspectionTimes({
9346
9623
  onRetry,
9347
9624
  onSignIn
9348
9625
  }) {
9349
- return /* @__PURE__ */ jsxs(Section2, { children: [
9626
+ return /* @__PURE__ */ jsxs(Section3, { children: [
9350
9627
  /* @__PURE__ */ jsx(SectionHeading2, { children: "Inspection Times" }),
9351
9628
  /* @__PURE__ */ jsx(Intro, { children: "Book a private inspection of the property. Walk through the home in person before investing." }),
9352
9629
  isAuthenticated ? /* @__PURE__ */ jsxs(SlotList, { children: [
@@ -9395,7 +9672,7 @@ function PropertyInspectionTimes({
9395
9672
  ] })
9396
9673
  ] });
9397
9674
  }
9398
- var Section2 = styled19.section`
9675
+ var Section3 = styled19.section`
9399
9676
  background: var(--color-card, rgba(30, 35, 41, 0.8));
9400
9677
  border-radius: 12px;
9401
9678
  padding: 1.5rem;
@@ -10353,7 +10630,7 @@ function VideoActivitySection({
10353
10630
  const headerStatusText = ipoEnded ? `Sale ended${ordersAllocated > 0 ? ` \xB7 ${ordersAllocated.toLocaleString()} orders` : ""}` : ipoStarted ? isLoading && sortedOrders.length === 0 ? "Loading orders\u2026" : `Active orders: ${ordersAllocated.toLocaleString()}` : "Waiting for Offer to Open";
10354
10631
  const showSkeletonFeed = ipoStarted && isLoading && sortedOrders.length === 0;
10355
10632
  const showOrderFeed = !showSkeletonFeed && (ipoStarted || ipoEnded && sortedOrders.length > 0);
10356
- return /* @__PURE__ */ jsxs(Section3, { children: [
10633
+ return /* @__PURE__ */ jsxs(Section4, { children: [
10357
10634
  /* @__PURE__ */ jsxs(VideoPanel, { children: [
10358
10635
  /* @__PURE__ */ jsx("div", { className: "section-header", children: /* @__PURE__ */ jsx("h3", { children: "Musgrave" }) }),
10359
10636
  /* @__PURE__ */ jsx("div", { className: "video-container", children: /* @__PURE__ */ jsxs("video", { controls: true, loop: true, autoPlay: true, muted: true, playsInline: true, children: [
@@ -10404,7 +10681,7 @@ function VideoActivitySection({
10404
10681
  ] })
10405
10682
  ] });
10406
10683
  }
10407
- var Section3 = styled19.div`
10684
+ var Section4 = styled19.div`
10408
10685
  display: flex;
10409
10686
  gap: 1.5rem;
10410
10687
  align-items: stretch;
@@ -10678,7 +10955,7 @@ var VARIANT_COLORS = {
10678
10955
  info: { accent: "#E6C656", icon: "\u2139" },
10679
10956
  pending: { accent: "#7EB3E6", icon: "\u25CC" }
10680
10957
  };
10681
- var Wrapper = styled19.div`
10958
+ var Wrapper2 = styled19.div`
10682
10959
  position: relative;
10683
10960
  display: flex;
10684
10961
  flex-direction: column;
@@ -10808,7 +11085,7 @@ function ToastItem({ toast, onDismiss }) {
10808
11085
  const duration = toast.duration ?? 6e3;
10809
11086
  const explorerBase = toast.explorerUrl ?? DEFAULT_EXPLORER;
10810
11087
  const txUrl = toast.txHash ? `${explorerBase}${toast.txHash}` : void 0;
10811
- return /* @__PURE__ */ jsxs(Wrapper, { $exiting: exiting, children: [
11088
+ return /* @__PURE__ */ jsxs(Wrapper2, { $exiting: exiting, children: [
10812
11089
  /* @__PURE__ */ jsxs(Body, { children: [
10813
11090
  /* @__PURE__ */ jsx(IconDot, { $color: accent, children: icon }),
10814
11091
  /* @__PURE__ */ jsxs(Content, { children: [
@@ -10921,7 +11198,7 @@ function OrderPanel({
10921
11198
  setSliderValue(ratio);
10922
11199
  }
10923
11200
  };
10924
- return /* @__PURE__ */ jsxs(Panel2, { children: [
11201
+ return /* @__PURE__ */ jsxs(Panel, { children: [
10925
11202
  /* @__PURE__ */ jsxs(PanelHeader2, { children: [
10926
11203
  /* @__PURE__ */ jsx("span", { children: "Place Order" }),
10927
11204
  /* @__PURE__ */ jsxs(StatusBadge2, { style: { color: statusColor }, children: [
@@ -11224,7 +11501,7 @@ function OrderPanel({
11224
11501
  ] })
11225
11502
  ] });
11226
11503
  }
11227
- var Panel2 = styled19.div`
11504
+ var Panel = styled19.div`
11228
11505
  background-color: var(--color-card-darker, #111);
11229
11506
  border-radius: 8px;
11230
11507
  padding: 1.5rem;