@loafmarkets/ui 0.1.137 → 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.js CHANGED
@@ -8248,6 +8248,29 @@ var GymIcon = /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "16", height: "16"
8248
8248
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 6h4" }),
8249
8249
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 18h4" })
8250
8250
  ] });
8251
+ var ShieldIcon = /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }) });
8252
+ var LockIcon = /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8253
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }),
8254
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
8255
+ ] });
8256
+ var FileCheckIcon = /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8257
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }),
8258
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "14 2 14 8 20 8" }),
8259
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 15l2 2 4-4" })
8260
+ ] });
8261
+ var BuildingIcon = /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8262
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", ry: "2" }),
8263
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 22v-4h6v4" }),
8264
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 6h.01" }),
8265
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 6h.01" }),
8266
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6h.01" }),
8267
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 10h.01" }),
8268
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 14h.01" }),
8269
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 10h.01" }),
8270
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 14h.01" }),
8271
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 10h.01" }),
8272
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 14h.01" })
8273
+ ] });
8251
8274
  var DEFAULT_FEATURES = [
8252
8275
  { icon: BedIcon, value: "\u2014", label: "Beds" },
8253
8276
  { icon: BathIcon, value: "\u2014", label: "Baths" },
@@ -8265,6 +8288,16 @@ var DEFAULT_PROPERTY_INFO = [
8265
8288
  { label: "Status", value: "N/A" }
8266
8289
  ];
8267
8290
  var DEFAULT_DESCRIPTION = "Property description not available.";
8291
+ var TOKENHOLDER_PROTECTIONS = [
8292
+ { icon: ShieldIcon, title: "SPV Structure", desc: "Each property is held in a dedicated Special Purpose Vehicle, isolating investor assets from platform risk." },
8293
+ { icon: LockIcon, title: "Smart Contract Audit", desc: "All token contracts are audited by independent security firms before deployment." },
8294
+ { icon: FileCheckIcon, title: "Title Insurance", desc: "Full title insurance coverage protects token holders against title defects and encumbrances." },
8295
+ { icon: BuildingIcon, title: "Regulated Exchange", desc: "Trading occurs on a regulated marketplace with KYC/AML compliance and investor protections." }
8296
+ ];
8297
+ function truncateAddress(addr) {
8298
+ if (addr.length <= 12) return addr;
8299
+ return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
8300
+ }
8268
8301
  function PropertyOverview({
8269
8302
  propertyName,
8270
8303
  location,
@@ -8273,8 +8306,6 @@ function PropertyOverview({
8273
8306
  onPhotosClick,
8274
8307
  description: descriptionProp,
8275
8308
  tradeButtonLabel = "Trade",
8276
- rightPanelTitle = "Financial Overview",
8277
- financialItems: financialItemsProp,
8278
8309
  images,
8279
8310
  galleryCategories: galleryCategories2 = [],
8280
8311
  videoUrl,
@@ -8289,7 +8320,10 @@ function PropertyOverview({
8289
8320
  carSpaces,
8290
8321
  propertyTypeLabel,
8291
8322
  tokensIssued: tokensIssuedProp,
8292
- isLoading = false
8323
+ isLoading = false,
8324
+ ticker,
8325
+ contractAddress,
8326
+ chain = "Base (Ethereum L2)"
8293
8327
  }) {
8294
8328
  const [isDescExpanded, setDescExpanded] = React5.useState(false);
8295
8329
  const description = descriptionProp ?? overviewData?.description ?? DEFAULT_DESCRIPTION;
@@ -8327,42 +8361,76 @@ function PropertyOverview({
8327
8361
  const weeklyRent = overviewData?.weeklyRent ?? 0;
8328
8362
  const annualRent = weeklyRent * 52;
8329
8363
  const dividendYield = resolvedValuation && annualRent > 0 ? (annualRent / resolvedValuation * 100).toFixed(2) : null;
8364
+ const marketCap = tokenPriceValue && resolvedTokensIssued ? tokenPriceValue * resolvedTokensIssued : null;
8330
8365
  const loadingSkeleton = /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 90, height: 18 });
8331
- const financialItems = financialItemsProp ?? [
8332
- { label: "Token Price", value: isLoading && tokenPriceValue == null ? loadingSkeleton : tokenPriceValue ? `$${tokenPriceValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : "N/A", gold: true },
8333
- { label: "Property Value", value: isLoading && resolvedValuation == null ? loadingSkeleton : resolvedValuation ? resolvedValuation >= 1e6 ? `$${(resolvedValuation / 1e6).toFixed(2)}M` : `$${resolvedValuation.toLocaleString()}` : "N/A" },
8334
- { label: "Weekly Rent", value: isLoading && !overviewData ? loadingSkeleton : weeklyRent > 0 ? `$${weeklyRent.toLocaleString()}/wk` : "N/A", badge: weeklyRent > 0 ? "Rented" : void 0 },
8335
- { label: "Dividend Yield", value: isLoading && dividendYield == null && resolvedValuation == null ? loadingSkeleton : dividendYield ? `${dividendYield}%` : "N/A" },
8336
- { label: "Total Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued ? resolvedTokensIssued.toLocaleString() : "N/A" },
8337
- { label: "Indicative Listing", value: isLoading && !overviewData ? loadingSkeleton : overviewData?.indicativeListing ?? "N/A" }
8338
- ];
8366
+ const resolvedPropertyType = overviewData?.propertyType ?? propertyTypeLabel ?? null;
8339
8367
  const galleryImages = images ?? [];
8340
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
8341
- /* @__PURE__ */ jsxRuntime.jsxs(TopGrid, { children: [
8342
- /* @__PURE__ */ jsxRuntime.jsxs(Panel, { children: [
8343
- /* @__PURE__ */ jsxRuntime.jsxs(PanelHeading, { children: [
8344
- "About ",
8345
- propertyName || "This Property"
8368
+ const tokenDetailsItems = [
8369
+ { label: "Chain", value: chain },
8370
+ { label: "Contract Address", value: contractAddress ? truncateAddress(contractAddress) : "\u2014", mono: true },
8371
+ { label: "Token Ticker", value: ticker ?? "\u2014" },
8372
+ { label: "Total Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued?.toLocaleString() ?? "\u2014" },
8373
+ { label: "Property Type", value: resolvedPropertyType ?? "\u2014" },
8374
+ { label: "Location", value: location || "\u2014" }
8375
+ ];
8376
+ const tokenStats = [
8377
+ { label: "Token Price", value: isLoading && tokenPriceValue == null ? loadingSkeleton : tokenPriceValue ? `$${tokenPriceValue.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : "\u2014", gold: true },
8378
+ { label: "Market Cap", value: isLoading && marketCap == null ? loadingSkeleton : marketCap ? marketCap >= 1e6 ? `$${(marketCap / 1e6).toFixed(1)}M` : `$${marketCap.toLocaleString()}` : "\u2014" },
8379
+ { label: "Dividend Yield", value: isLoading && dividendYield == null ? loadingSkeleton : dividendYield ? `${dividendYield}%` : "\u2014" },
8380
+ { label: "Total Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued?.toLocaleString() ?? "\u2014" }
8381
+ ];
8382
+ const propertyStats = [
8383
+ { label: "Property Value", value: isLoading && resolvedValuation == null ? loadingSkeleton : resolvedValuation ? resolvedValuation >= 1e6 ? `$${(resolvedValuation / 1e6).toFixed(2)}M` : `$${resolvedValuation.toLocaleString()}` : "\u2014" },
8384
+ { label: "Weekly Rent", value: isLoading && !overviewData ? loadingSkeleton : weeklyRent > 0 ? `$${weeklyRent.toLocaleString()}/wk` : "\u2014", badge: weeklyRent > 0 ? "Rented" : void 0 },
8385
+ { label: "Annual Rent", value: isLoading && !overviewData ? loadingSkeleton : annualRent > 0 ? `$${annualRent.toLocaleString()}/yr` : "\u2014" },
8386
+ { label: "Year Built", value: isLoading && !overviewData ? loadingSkeleton : overviewData?.yearBuilt ? String(overviewData.yearBuilt) : "\u2014" }
8387
+ ];
8388
+ return /* @__PURE__ */ jsxRuntime.jsxs(Wrapper, { children: [
8389
+ /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
8390
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "About" }),
8391
+ /* @__PURE__ */ jsxRuntime.jsxs(AboutGrid, { children: [
8392
+ /* @__PURE__ */ jsxRuntime.jsxs(AboutLeft, { children: [
8393
+ /* @__PURE__ */ jsxRuntime.jsxs(DescriptionWrap, { $expanded: isDescExpanded, children: [
8394
+ description.split("\n\n").map((p, i) => /* @__PURE__ */ jsxRuntime.jsx(DescParagraph, { $first: i === 0, children: p }, i)),
8395
+ !isDescExpanded && /* @__PURE__ */ jsxRuntime.jsx(DescFade, {})
8396
+ ] }),
8397
+ /* @__PURE__ */ jsxRuntime.jsxs(ButtonRow, { children: [
8398
+ /* @__PURE__ */ jsxRuntime.jsx(OutlineBtn, { onClick: () => setDescExpanded((p) => !p), children: isDescExpanded ? "Read less" : "Read more" }),
8399
+ /* @__PURE__ */ jsxRuntime.jsx(PrimaryBtn, { onClick: onTradeClick, children: tradeButtonLabel })
8400
+ ] })
8346
8401
  ] }),
8347
- /* @__PURE__ */ jsxRuntime.jsxs(DescriptionWrap, { $expanded: isDescExpanded, children: [
8348
- description.split("\n\n").map((p, i) => /* @__PURE__ */ jsxRuntime.jsx("p", { style: { color: "rgba(255,255,255,0.7)", lineHeight: 1.7, fontSize: "0.95rem", marginTop: i > 0 ? "1rem" : 0 }, children: p }, i)),
8349
- !isDescExpanded && /* @__PURE__ */ jsxRuntime.jsx(DescFade, {})
8402
+ /* @__PURE__ */ jsxRuntime.jsxs(TokenDetailsCard, { children: [
8403
+ /* @__PURE__ */ jsxRuntime.jsx(TokenDetailsTitle, { children: "Token Details" }),
8404
+ tokenDetailsItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(TokenDetailRow, { children: [
8405
+ /* @__PURE__ */ jsxRuntime.jsx(TokenDetailLabel, { children: item.label }),
8406
+ /* @__PURE__ */ jsxRuntime.jsx(TokenDetailValue, { $mono: !!item.mono, children: item.value })
8407
+ ] }, item.label))
8408
+ ] })
8409
+ ] })
8410
+ ] }),
8411
+ /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
8412
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Statistics" }),
8413
+ /* @__PURE__ */ jsxRuntime.jsxs(StatsGrid, { children: [
8414
+ /* @__PURE__ */ jsxRuntime.jsxs(StatsColumn, { children: [
8415
+ /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Token Performance" }),
8416
+ tokenStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { $gold: !!item.gold, children: [
8417
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: item.label }),
8418
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { $gold: !!item.gold, children: item.value })
8419
+ ] }, item.label))
8350
8420
  ] }),
8351
- /* @__PURE__ */ jsxRuntime.jsxs(ButtonRow, { children: [
8352
- /* @__PURE__ */ jsxRuntime.jsx(OutlineBtn, { onClick: () => setDescExpanded((p) => !p), children: isDescExpanded ? "Read less" : "Read more" }),
8353
- /* @__PURE__ */ jsxRuntime.jsx(PrimaryBtn, { onClick: onTradeClick, children: tradeButtonLabel })
8421
+ /* @__PURE__ */ jsxRuntime.jsxs(StatsColumn, { children: [
8422
+ /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Property Fundamentals" }),
8423
+ propertyStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8424
+ /* @__PURE__ */ jsxRuntime.jsxs(StatLabel, { children: [
8425
+ item.label,
8426
+ item.badge && /* @__PURE__ */ jsxRuntime.jsxs(StatBadge, { children: [
8427
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { width: 5, height: 5, borderRadius: "50%", backgroundColor: "#4CAF50", display: "inline-block" } }),
8428
+ item.badge
8429
+ ] })
8430
+ ] }),
8431
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: item.value })
8432
+ ] }, item.label))
8354
8433
  ] })
8355
- ] }),
8356
- /* @__PURE__ */ jsxRuntime.jsxs(Panel, { children: [
8357
- /* @__PURE__ */ jsxRuntime.jsx(PanelHeading, { children: rightPanelTitle }),
8358
- /* @__PURE__ */ jsxRuntime.jsx(FinancialGrid, { children: financialItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(FinancialCard, { $gold: !!item.gold, children: [
8359
- item.badge && /* @__PURE__ */ jsxRuntime.jsxs(BadgeSpan, { children: [
8360
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { width: 5, height: 5, borderRadius: "50%", backgroundColor: "#4CAF50", display: "inline-block" } }),
8361
- item.badge
8362
- ] }),
8363
- /* @__PURE__ */ jsxRuntime.jsx(FinancialLabel, { $gold: !!item.gold, children: item.label }),
8364
- /* @__PURE__ */ jsxRuntime.jsx(FinancialValue, { $gold: !!item.gold, children: item.value })
8365
- ] }, item.label)) })
8366
8434
  ] })
8367
8435
  ] }),
8368
8436
  galleryImages.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
@@ -8376,8 +8444,8 @@ function PropertyOverview({
8376
8444
  onPhotoClick: onPhotosClick
8377
8445
  }
8378
8446
  ),
8379
- /* @__PURE__ */ jsxRuntime.jsxs(AssetDetailsPanel, { children: [
8380
- /* @__PURE__ */ jsxRuntime.jsx("h2", { style: { margin: 0, fontSize: "1.5rem", fontWeight: 600, color: "#fff", marginBottom: "2rem" }, children: "Asset Details" }),
8447
+ /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
8448
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Asset Details" }),
8381
8449
  /* @__PURE__ */ jsxRuntime.jsxs(AssetPanelsGrid, { children: [
8382
8450
  /* @__PURE__ */ jsxRuntime.jsxs(MetricsPanel, { children: [
8383
8451
  /* @__PURE__ */ jsxRuntime.jsx(MetricsPanelTitle, { children: "Key Metrics" }),
@@ -8385,7 +8453,7 @@ function PropertyOverview({
8385
8453
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1 }, children: [
8386
8454
  /* @__PURE__ */ jsxRuntime.jsx(MetricLabel, { children: "Land" }),
8387
8455
  /* @__PURE__ */ jsxRuntime.jsxs(MetricValueRow, { children: [
8388
- /* @__PURE__ */ jsxRuntime.jsx(MetricBig, { children: landSize?.toLocaleString() ?? "-" }),
8456
+ /* @__PURE__ */ jsxRuntime.jsx(MetricBig, { children: landSize?.toLocaleString() ?? "\u2014" }),
8389
8457
  /* @__PURE__ */ jsxRuntime.jsx(MetricUnit, { children: "sqm" })
8390
8458
  ] })
8391
8459
  ] }),
@@ -8393,7 +8461,7 @@ function PropertyOverview({
8393
8461
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1 }, children: [
8394
8462
  /* @__PURE__ */ jsxRuntime.jsx(MetricLabel, { children: "Floor" }),
8395
8463
  /* @__PURE__ */ jsxRuntime.jsxs(MetricValueRow, { children: [
8396
- /* @__PURE__ */ jsxRuntime.jsx(MetricBig, { children: buildingSize?.toLocaleString() ?? "-" }),
8464
+ /* @__PURE__ */ jsxRuntime.jsx(MetricBig, { children: buildingSize?.toLocaleString() ?? "\u2014" }),
8397
8465
  /* @__PURE__ */ jsxRuntime.jsx(MetricUnit, { children: "sqm" })
8398
8466
  ] })
8399
8467
  ] })
@@ -8415,26 +8483,68 @@ function PropertyOverview({
8415
8483
  ] }, i)) })
8416
8484
  ] })
8417
8485
  ] })
8486
+ ] }),
8487
+ /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
8488
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Trading Hours" }),
8489
+ /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursCard, { children: [
8490
+ /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursRow, { children: [
8491
+ /* @__PURE__ */ jsxRuntime.jsx(THLabel, { children: "Session" }),
8492
+ /* @__PURE__ */ jsxRuntime.jsx(THLabel, { children: "Hours (AEST)" }),
8493
+ /* @__PURE__ */ jsxRuntime.jsx(THLabel, { children: "Days" })
8494
+ ] }),
8495
+ /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursRow, { children: [
8496
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "Continuous Trading" }),
8497
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "10:00 \u2014 16:00" }),
8498
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "Mon \u2014 Fri" })
8499
+ ] }),
8500
+ /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursRow, { children: [
8501
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "After Hours" }),
8502
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "16:00 \u2014 20:00" }),
8503
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "Mon \u2014 Fri" })
8504
+ ] }),
8505
+ /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursRow, { $last: true, children: [
8506
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "Pre-Market" }),
8507
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "07:00 \u2014 10:00" }),
8508
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "Mon \u2014 Fri" })
8509
+ ] }),
8510
+ /* @__PURE__ */ jsxRuntime.jsx(TradingHoursNote, { children: "All times are Australian Eastern Standard Time (AEST/AEDT). Markets are closed on Australian public holidays." })
8511
+ ] })
8512
+ ] }),
8513
+ /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
8514
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Tokenholder Protections" }),
8515
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionsGrid, { children: TOKENHOLDER_PROTECTIONS.map((p) => /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCard, { children: [
8516
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionIconWrap, { children: p.icon }),
8517
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionTitle, { children: p.title }),
8518
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDesc, { children: p.desc })
8519
+ ] }, p.title)) })
8418
8520
  ] })
8419
8521
  ] });
8420
8522
  }
8421
- var TopGrid = styled19__default.default.div`
8422
- display: grid;
8423
- grid-template-columns: 1fr 1fr;
8424
- gap: 2rem;
8425
- margin-bottom: 2rem;
8426
- @media (max-width: 768px) { grid-template-columns: 1fr; }
8523
+ var Wrapper = styled19__default.default.div`
8524
+ display: flex;
8525
+ flex-direction: column;
8526
+ gap: 1.5rem;
8427
8527
  `;
8428
- var Panel = styled19__default.default.div`
8528
+ var Section = styled19__default.default.div`
8429
8529
  background: #111;
8430
8530
  border-radius: 12px;
8431
- padding: 1.5rem;
8531
+ padding: 1.75rem;
8432
8532
  `;
8433
- var PanelHeading = styled19__default.default.h2`
8434
- font-size: 1.25rem;
8435
- margin-bottom: 1rem;
8436
- color: #fff;
8533
+ var SectionHeader = styled19__default.default.h2`
8534
+ font-size: 1.2rem;
8437
8535
  font-weight: 600;
8536
+ color: #fff;
8537
+ margin: 0 0 1.25rem 0;
8538
+ letter-spacing: -0.01em;
8539
+ `;
8540
+ var AboutGrid = styled19__default.default.div`
8541
+ display: grid;
8542
+ grid-template-columns: 1fr 340px;
8543
+ gap: 2rem;
8544
+ @media (max-width: 900px) { grid-template-columns: 1fr; }
8545
+ `;
8546
+ var AboutLeft = styled19__default.default.div`
8547
+ min-width: 0;
8438
8548
  `;
8439
8549
  var DescriptionWrap = styled19__default.default.div`
8440
8550
  position: relative;
@@ -8442,6 +8552,13 @@ var DescriptionWrap = styled19__default.default.div`
8442
8552
  overflow: hidden;
8443
8553
  transition: max-height 0.3s ease;
8444
8554
  `;
8555
+ var DescParagraph = styled19__default.default.p`
8556
+ color: rgba(255,255,255,0.65);
8557
+ line-height: 1.7;
8558
+ font-size: 0.92rem;
8559
+ margin: 0;
8560
+ margin-top: ${(p) => p.$first ? 0 : "0.85rem"};
8561
+ `;
8445
8562
  var DescFade = styled19__default.default.div`
8446
8563
  position: absolute;
8447
8564
  bottom: 0; left: 0; right: 0;
@@ -8450,103 +8567,250 @@ var DescFade = styled19__default.default.div`
8450
8567
  pointer-events: none;
8451
8568
  `;
8452
8569
  var ButtonRow = styled19__default.default.div`
8453
- margin-top: 1.5rem;
8570
+ margin-top: 1.25rem;
8454
8571
  display: flex;
8455
8572
  gap: 0.75rem;
8456
8573
  `;
8457
8574
  var OutlineBtn = styled19__default.default.button`
8458
- padding: 0.55rem 1.35rem;
8459
- border-radius: 10px;
8460
- border: 1px solid rgba(255,255,255,0.28);
8461
- background: rgba(5,6,8,0.85);
8462
- color: rgba(255,255,255,0.95);
8463
- font-size: 0.94rem;
8464
- font-weight: 600;
8575
+ padding: 0.5rem 1.25rem;
8576
+ border-radius: 8px;
8577
+ border: 1px solid rgba(255,255,255,0.2);
8578
+ background: transparent;
8579
+ color: rgba(255,255,255,0.85);
8580
+ font-size: 0.88rem;
8581
+ font-weight: 500;
8465
8582
  cursor: pointer;
8583
+ transition: border-color 0.15s;
8584
+ &:hover { border-color: rgba(255,255,255,0.4); }
8466
8585
  `;
8467
8586
  var PrimaryBtn = styled19__default.default.button`
8468
- padding: 0.75rem 1.5rem;
8469
- border-radius: 4px;
8587
+ padding: 0.5rem 1.5rem;
8588
+ border-radius: 8px;
8470
8589
  border: none;
8471
8590
  background: #e6c87e;
8472
- color: black;
8473
- font-size: 0.95rem;
8591
+ color: #111;
8592
+ font-size: 0.88rem;
8474
8593
  font-weight: 600;
8475
8594
  cursor: pointer;
8595
+ transition: background 0.15s;
8596
+ &:hover { background: #d4b86a; }
8476
8597
  `;
8477
- var FinancialGrid = styled19__default.default.div`
8598
+ var TokenDetailsCard = styled19__default.default.div`
8599
+ background: rgba(255,255,255,0.025);
8600
+ border: 1px solid rgba(255,255,255,0.06);
8601
+ border-radius: 10px;
8602
+ padding: 1.25rem;
8603
+ `;
8604
+ var TokenDetailsTitle = styled19__default.default.div`
8605
+ font-size: 0.65rem;
8606
+ color: #D4AF37;
8607
+ text-transform: uppercase;
8608
+ letter-spacing: 0.12em;
8609
+ font-weight: 600;
8610
+ margin-bottom: 1rem;
8611
+ padding-bottom: 0.75rem;
8612
+ border-bottom: 1px solid rgba(255,255,255,0.06);
8613
+ `;
8614
+ var TokenDetailRow = styled19__default.default.div`
8615
+ display: flex;
8616
+ justify-content: space-between;
8617
+ align-items: center;
8618
+ padding: 0.55rem 0;
8619
+ border-bottom: 1px solid rgba(255,255,255,0.04);
8620
+ &:last-child { border-bottom: none; padding-bottom: 0; }
8621
+ &:first-of-type { padding-top: 0; }
8622
+ `;
8623
+ var TokenDetailLabel = styled19__default.default.span`
8624
+ font-size: 0.82rem;
8625
+ color: rgba(255,255,255,0.5);
8626
+ font-weight: 400;
8627
+ `;
8628
+ var TokenDetailValue = styled19__default.default.span`
8629
+ font-size: 0.88rem;
8630
+ color: #fff;
8631
+ font-weight: 500;
8632
+ font-family: ${(p) => p.$mono ? "'SF Mono', 'Fira Code', monospace" : "inherit"};
8633
+ `;
8634
+ var StatsGrid = styled19__default.default.div`
8478
8635
  display: grid;
8479
8636
  grid-template-columns: 1fr 1fr;
8480
- gap: 0.75rem;
8637
+ gap: 1rem;
8638
+ @media (max-width: 768px) { grid-template-columns: 1fr; }
8481
8639
  `;
8482
- var FinancialCard = styled19__default.default.div`
8483
- background: rgba(255,255,255,0.03);
8640
+ var StatsColumn = styled19__default.default.div`
8641
+ background: rgba(255,255,255,0.025);
8642
+ border: 1px solid rgba(255,255,255,0.06);
8484
8643
  border-radius: 10px;
8485
- padding: 1rem 1.25rem;
8486
- border: 1px solid ${(p) => p.$gold ? "rgba(212,175,55,0.3)" : "rgba(255,255,255,0.06)"};
8487
- position: relative;
8488
- `;
8489
- var BadgeSpan = styled19__default.default.span`
8490
- position: absolute;
8491
- top: 0.5rem; right: 0.75rem;
8492
- font-size: 0.65rem;
8493
- color: #4CAF50;
8494
- display: flex; align-items: center; gap: 4px;
8644
+ padding: 1.25rem;
8495
8645
  `;
8496
- var FinancialLabel = styled19__default.default.div`
8646
+ var StatsColumnHeader = styled19__default.default.div`
8497
8647
  font-size: 0.65rem;
8498
- color: ${(p) => p.$gold ? "#D4AF37" : "rgba(255,255,255,0.6)"};
8648
+ color: #D4AF37;
8499
8649
  text-transform: uppercase;
8500
- letter-spacing: 0.1em;
8501
- margin-bottom: 0.4rem;
8502
- font-weight: 500;
8650
+ letter-spacing: 0.12em;
8651
+ font-weight: 600;
8652
+ margin-bottom: 1rem;
8653
+ padding-bottom: 0.75rem;
8654
+ border-bottom: 1px solid rgba(255,255,255,0.06);
8503
8655
  `;
8504
- var FinancialValue = styled19__default.default.div`
8505
- font-size: 1.25rem;
8506
- font-weight: 700;
8507
- color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
8508
- line-height: 1;
8656
+ var StatRow = styled19__default.default.div`
8657
+ display: flex;
8658
+ justify-content: space-between;
8659
+ align-items: center;
8660
+ padding: 0.65rem 0;
8661
+ border-bottom: 1px solid rgba(255,255,255,0.04);
8662
+ &:last-child { border-bottom: none; padding-bottom: 0; }
8509
8663
  `;
8510
- var AssetDetailsPanel = styled19__default.default.div`
8511
- margin-bottom: 2rem; background: #111; border-radius: 12px; padding: 1.5rem;
8664
+ var StatLabel = styled19__default.default.span`
8665
+ font-size: 0.82rem;
8666
+ color: rgba(255,255,255,0.5);
8667
+ font-weight: 400;
8668
+ display: flex;
8669
+ align-items: center;
8670
+ gap: 0.5rem;
8671
+ `;
8672
+ var StatBadge = styled19__default.default.span`
8673
+ font-size: 0.6rem;
8674
+ color: #4CAF50;
8675
+ display: inline-flex;
8676
+ align-items: center;
8677
+ gap: 3px;
8678
+ `;
8679
+ var StatValue = styled19__default.default.span`
8680
+ font-size: 1rem;
8681
+ font-weight: 600;
8682
+ color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
8683
+ font-variant-numeric: tabular-nums;
8512
8684
  `;
8513
8685
  var AssetPanelsGrid = styled19__default.default.div`
8514
- display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem;
8686
+ display: grid;
8687
+ grid-template-columns: 1fr 1fr;
8688
+ gap: 1rem;
8515
8689
  @media (max-width: 768px) { grid-template-columns: 1fr; }
8516
8690
  `;
8517
8691
  var MetricsPanel = styled19__default.default.div`
8518
- background: rgba(255,255,255,0.03); border-radius: 12px;
8519
- border: 1px solid rgba(255,255,255,0.06); padding: 1.25rem 1.5rem; overflow: hidden;
8692
+ background: rgba(255,255,255,0.025);
8693
+ border-radius: 10px;
8694
+ border: 1px solid rgba(255,255,255,0.06);
8695
+ padding: 1.25rem 1.5rem;
8696
+ overflow: hidden;
8520
8697
  `;
8521
8698
  var InfoPanel = styled19__default.default(MetricsPanel)``;
8522
8699
  var MetricsPanelTitle = styled19__default.default.div`
8523
- font-size: 0.65rem; color: #D4AF37; text-transform: uppercase;
8524
- letter-spacing: 0.12em; font-weight: 600; margin-bottom: 1rem;
8525
- padding-bottom: 0.75rem; border-bottom: 1px solid rgba(255,255,255,0.06);
8700
+ font-size: 0.65rem;
8701
+ color: #D4AF37;
8702
+ text-transform: uppercase;
8703
+ letter-spacing: 0.12em;
8704
+ font-weight: 600;
8705
+ margin-bottom: 1rem;
8706
+ padding-bottom: 0.75rem;
8707
+ border-bottom: 1px solid rgba(255,255,255,0.06);
8526
8708
  `;
8527
8709
  var LandFloorCard = styled19__default.default.div`
8528
8710
  background: linear-gradient(135deg, rgba(212,175,55,0.12), rgba(184,134,11,0.06));
8529
- border-radius: 10px; padding: 0.85rem 1rem;
8711
+ border-radius: 10px;
8712
+ padding: 0.85rem 1rem;
8530
8713
  border: 1px solid rgba(212,175,55,0.25);
8531
- display: flex; gap: 1rem; margin-bottom: 0.75rem;
8714
+ display: flex;
8715
+ gap: 1rem;
8716
+ margin-bottom: 0.75rem;
8532
8717
  `;
8533
8718
  var MetricLabel = styled19__default.default.div`
8534
- font-size: 0.65rem; color: #D4AF37; text-transform: uppercase;
8535
- letter-spacing: 0.1em; margin-bottom: 0.4rem; font-weight: 500;
8719
+ font-size: 0.65rem;
8720
+ color: #D4AF37;
8721
+ text-transform: uppercase;
8722
+ letter-spacing: 0.1em;
8723
+ margin-bottom: 0.4rem;
8724
+ font-weight: 500;
8536
8725
  `;
8537
8726
  var MetricValueRow = styled19__default.default.div`
8538
- display: flex; align-items: baseline; gap: 0.25rem;
8727
+ display: flex;
8728
+ align-items: baseline;
8729
+ gap: 0.25rem;
8539
8730
  `;
8540
8731
  var MetricBig = styled19__default.default.span`
8541
- font-size: 1.5rem; font-weight: 700; color: #D4AF37; line-height: 1;
8732
+ font-size: 1.5rem;
8733
+ font-weight: 700;
8734
+ color: #D4AF37;
8735
+ line-height: 1;
8542
8736
  `;
8543
8737
  var MetricUnit = styled19__default.default.span`
8544
- font-size: 0.7rem; color: rgba(212,175,55,0.7); font-weight: 500;
8738
+ font-size: 0.7rem;
8739
+ color: rgba(212,175,55,0.7);
8740
+ font-weight: 500;
8545
8741
  `;
8546
8742
  var FeaturesGrid = styled19__default.default.div`
8547
- display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem;
8743
+ display: grid;
8744
+ grid-template-columns: repeat(3, 1fr);
8745
+ gap: 0.75rem;
8548
8746
  @media (max-width: 768px) { grid-template-columns: repeat(2, 1fr); }
8549
8747
  `;
8748
+ var TradingHoursCard = styled19__default.default.div`
8749
+ background: rgba(255,255,255,0.025);
8750
+ border: 1px solid rgba(255,255,255,0.06);
8751
+ border-radius: 10px;
8752
+ overflow: hidden;
8753
+ `;
8754
+ var TradingHoursRow = styled19__default.default.div`
8755
+ display: grid;
8756
+ grid-template-columns: 1fr 1fr 1fr;
8757
+ padding: 0.75rem 1.25rem;
8758
+ border-bottom: ${(p) => p.$last ? "none" : "1px solid rgba(255,255,255,0.04)"};
8759
+ &:first-child {
8760
+ border-bottom: 1px solid rgba(255,255,255,0.08);
8761
+ }
8762
+ `;
8763
+ var THLabel = styled19__default.default.span`
8764
+ font-size: 0.7rem;
8765
+ color: rgba(255,255,255,0.4);
8766
+ text-transform: uppercase;
8767
+ letter-spacing: 0.08em;
8768
+ font-weight: 500;
8769
+ `;
8770
+ var THValue = styled19__default.default.span`
8771
+ font-size: 0.85rem;
8772
+ color: rgba(255,255,255,0.8);
8773
+ font-weight: 400;
8774
+ `;
8775
+ var TradingHoursNote = styled19__default.default.div`
8776
+ padding: 0.75rem 1.25rem;
8777
+ font-size: 0.75rem;
8778
+ color: rgba(255,255,255,0.35);
8779
+ border-top: 1px solid rgba(255,255,255,0.04);
8780
+ `;
8781
+ var ProtectionsGrid = styled19__default.default.div`
8782
+ display: grid;
8783
+ grid-template-columns: 1fr 1fr;
8784
+ gap: 1rem;
8785
+ @media (max-width: 768px) { grid-template-columns: 1fr; }
8786
+ `;
8787
+ var ProtectionCard = styled19__default.default.div`
8788
+ background: rgba(255,255,255,0.025);
8789
+ border: 1px solid rgba(255,255,255,0.06);
8790
+ border-radius: 10px;
8791
+ padding: 1.25rem;
8792
+ `;
8793
+ var ProtectionIconWrap = styled19__default.default.div`
8794
+ width: 36px;
8795
+ height: 36px;
8796
+ border-radius: 8px;
8797
+ background: rgba(212,175,55,0.1);
8798
+ display: flex;
8799
+ align-items: center;
8800
+ justify-content: center;
8801
+ margin-bottom: 0.75rem;
8802
+ `;
8803
+ var ProtectionTitle = styled19__default.default.div`
8804
+ font-size: 0.92rem;
8805
+ font-weight: 600;
8806
+ color: #fff;
8807
+ margin-bottom: 0.4rem;
8808
+ `;
8809
+ var ProtectionDesc = styled19__default.default.div`
8810
+ font-size: 0.8rem;
8811
+ color: rgba(255,255,255,0.5);
8812
+ line-height: 1.5;
8813
+ `;
8550
8814
  var STATUS_BG = {
8551
8815
  active: "rgba(14,203,129,0.18)",
8552
8816
  rejected: "rgba(246,70,93,0.18)",
@@ -9284,7 +9548,7 @@ function PropertyDocuments({ documentsData }) {
9284
9548
  title: doc.label,
9285
9549
  documentUrl: doc.href
9286
9550
  }));
9287
- return /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
9551
+ return /* @__PURE__ */ jsxRuntime.jsxs(Section2, { children: [
9288
9552
  /* @__PURE__ */ jsxRuntime.jsx(SectionHeading, { children: "Investment Documents" }),
9289
9553
  /* @__PURE__ */ jsxRuntime.jsx(DocList, { children: documents.map(({ documentUrl, title }) => {
9290
9554
  const isAvailable = Boolean(documentUrl);
@@ -9299,7 +9563,7 @@ function PropertyDocuments({ documentsData }) {
9299
9563
  }) })
9300
9564
  ] });
9301
9565
  }
9302
- var Section = styled19__default.default.section`
9566
+ var Section2 = styled19__default.default.section`
9303
9567
  background: var(--color-card, rgba(30, 35, 41, 0.8));
9304
9568
  border-radius: 12px;
9305
9569
  padding: 1.5rem;
@@ -9385,7 +9649,7 @@ function PropertyInspectionTimes({
9385
9649
  onRetry,
9386
9650
  onSignIn
9387
9651
  }) {
9388
- return /* @__PURE__ */ jsxRuntime.jsxs(Section2, { children: [
9652
+ return /* @__PURE__ */ jsxRuntime.jsxs(Section3, { children: [
9389
9653
  /* @__PURE__ */ jsxRuntime.jsx(SectionHeading2, { children: "Inspection Times" }),
9390
9654
  /* @__PURE__ */ jsxRuntime.jsx(Intro, { children: "Book a private inspection of the property. Walk through the home in person before investing." }),
9391
9655
  isAuthenticated ? /* @__PURE__ */ jsxRuntime.jsxs(SlotList, { children: [
@@ -9434,7 +9698,7 @@ function PropertyInspectionTimes({
9434
9698
  ] })
9435
9699
  ] });
9436
9700
  }
9437
- var Section2 = styled19__default.default.section`
9701
+ var Section3 = styled19__default.default.section`
9438
9702
  background: var(--color-card, rgba(30, 35, 41, 0.8));
9439
9703
  border-radius: 12px;
9440
9704
  padding: 1.5rem;
@@ -10392,7 +10656,7 @@ function VideoActivitySection({
10392
10656
  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";
10393
10657
  const showSkeletonFeed = ipoStarted && isLoading && sortedOrders.length === 0;
10394
10658
  const showOrderFeed = !showSkeletonFeed && (ipoStarted || ipoEnded && sortedOrders.length > 0);
10395
- return /* @__PURE__ */ jsxRuntime.jsxs(Section3, { children: [
10659
+ return /* @__PURE__ */ jsxRuntime.jsxs(Section4, { children: [
10396
10660
  /* @__PURE__ */ jsxRuntime.jsxs(VideoPanel, { children: [
10397
10661
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "section-header", children: /* @__PURE__ */ jsxRuntime.jsx("h3", { children: "Musgrave" }) }),
10398
10662
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "video-container", children: /* @__PURE__ */ jsxRuntime.jsxs("video", { controls: true, loop: true, autoPlay: true, muted: true, playsInline: true, children: [
@@ -10443,7 +10707,7 @@ function VideoActivitySection({
10443
10707
  ] })
10444
10708
  ] });
10445
10709
  }
10446
- var Section3 = styled19__default.default.div`
10710
+ var Section4 = styled19__default.default.div`
10447
10711
  display: flex;
10448
10712
  gap: 1.5rem;
10449
10713
  align-items: stretch;
@@ -10717,7 +10981,7 @@ var VARIANT_COLORS = {
10717
10981
  info: { accent: "#E6C656", icon: "\u2139" },
10718
10982
  pending: { accent: "#7EB3E6", icon: "\u25CC" }
10719
10983
  };
10720
- var Wrapper = styled19__default.default.div`
10984
+ var Wrapper2 = styled19__default.default.div`
10721
10985
  position: relative;
10722
10986
  display: flex;
10723
10987
  flex-direction: column;
@@ -10847,7 +11111,7 @@ function ToastItem({ toast, onDismiss }) {
10847
11111
  const duration = toast.duration ?? 6e3;
10848
11112
  const explorerBase = toast.explorerUrl ?? DEFAULT_EXPLORER;
10849
11113
  const txUrl = toast.txHash ? `${explorerBase}${toast.txHash}` : void 0;
10850
- return /* @__PURE__ */ jsxRuntime.jsxs(Wrapper, { $exiting: exiting, children: [
11114
+ return /* @__PURE__ */ jsxRuntime.jsxs(Wrapper2, { $exiting: exiting, children: [
10851
11115
  /* @__PURE__ */ jsxRuntime.jsxs(Body, { children: [
10852
11116
  /* @__PURE__ */ jsxRuntime.jsx(IconDot, { $color: accent, children: icon }),
10853
11117
  /* @__PURE__ */ jsxRuntime.jsxs(Content, { children: [
@@ -10960,7 +11224,7 @@ function OrderPanel({
10960
11224
  setSliderValue(ratio);
10961
11225
  }
10962
11226
  };
10963
- return /* @__PURE__ */ jsxRuntime.jsxs(Panel2, { children: [
11227
+ return /* @__PURE__ */ jsxRuntime.jsxs(Panel, { children: [
10964
11228
  /* @__PURE__ */ jsxRuntime.jsxs(PanelHeader2, { children: [
10965
11229
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Place Order" }),
10966
11230
  /* @__PURE__ */ jsxRuntime.jsxs(StatusBadge2, { style: { color: statusColor }, children: [
@@ -11263,7 +11527,7 @@ function OrderPanel({
11263
11527
  ] })
11264
11528
  ] });
11265
11529
  }
11266
- var Panel2 = styled19__default.default.div`
11530
+ var Panel = styled19__default.default.div`
11267
11531
  background-color: var(--color-card-darker, #111);
11268
11532
  border-radius: 8px;
11269
11533
  padding: 1.5rem;