@loafmarkets/ui 0.1.20 → 0.1.21

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cn.ts","../src/components/button.tsx","../src/components/badge.tsx","../src/components/card.tsx","../src/components/portfolio-summary.tsx","../src/components/house-position-slider.tsx","../src/components/house-position-slider-mobile.tsx","../src/components/loaf-liquidity-badge.tsx","../src/components/orderbook.tsx","../src/components/property-tour.tsx","../src/components/property-news-updates.tsx","../src/components/trading-slider.tsx","../src/components/mobile-trade-nav.tsx","../src/components/trade-confirmation-modal.tsx","../src/components/loaf-liquidity-logo.tsx","../src/components/your-orders.tsx","../src/components/price-chart.tsx","../src/components/property-hero-header.tsx","../src/components/header.tsx","../src/components/property-subheader.tsx","../src/components/login-popup.tsx","../src/components/property-compare-bar.tsx","../src/components/property-overview.tsx","../src/components/property-offers.tsx","../src/components/property-history.tsx","../src/components/property-documents.tsx","../src/components/property-inspection-times.tsx","../src/components/property-buy/constants.ts","../src/components/property-buy/asset-selector-bar.tsx","../src/components/property-buy/offering-progress-card.tsx","../src/components/property-buy/video-activity-section.tsx","../src/components/property-buy/order-panel.tsx","../src/components/property-buy/gallery-map-section.tsx","../src/components/property-buy/news-orders-section.tsx","../src/components/property-buy/order-confirmation-modal.tsx","../src/components/property-buy.tsx","../src/components/payment-popup.tsx","../src/components/owner-booking.tsx","../src/components/property-valuation.tsx","../src/components/property-photo-gallery.tsx","../src/components/toast.tsx"],"names":["React","cva","React2","jsx","React3","React4","formatCurrency","formatPercent","jsxs","clamp","fmt0","React6","styled","React7","React8","React9","React10","styles","React11","React12","Fragment","pulse","keyframes","shimmer","LogoContainer","IconWrapper","IconCircle","IconCore","LogoText","LoafLogoImage","LiquidityText","headerStyle","titleStyle","React13","formatPrice","React14","timeScale","React15","useState","useEffect","Button","React17","newOtp","Overlay","React19","PriceBlock","css","useMemo","Section","SectionHeading","StatusMessage","STATUS_COLOR","Header","MetricLabel","MetricValue","Card","Divider","PanelHeader","Row","Badge","formatDate","useRef","useCallback","BiChevronDown","ConfirmButton","BiX","CloseButton","Thumbnail","Title","ProgressBar","Container","duration"],"mappings":"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","file":"index.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary: \"bg-teal-500 text-slate-950 hover:bg-teal-400 focus-visible:ring-teal-200\",\n onboarding:\n \"rounded-lg bg-[#F2D898] text-[#0A0C15] shadow-[0_20px_60px_rgba(242,216,152,0.35)] transition will-change-transform hover:-translate-y-0.5 hover:brightness-110 focus-visible:ring-[#F2D898]/50 focus-visible:ring-offset-[#0A0C15]\",\n onboardingOutline:\n \"rounded-lg border border-[#F2D898] bg-transparent text-white hover:bg-white/5 focus-visible:ring-[#F2D898]/50 focus-visible:ring-offset-[#0A0C15]\",\n accent:\n \"bg-[var(--color-accent,#e6c87e)] text-black hover:bg-[var(--color-accent-hover,#f8d12f)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n accentOutline:\n \"border border-[var(--color-accent,#e6c87e)] bg-transparent text-[var(--color-accent,#e6c87e)] hover:bg-[rgba(230,200,126,0.10)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n media:\n \"border border-white/10 bg-transparent text-white/90 hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n outline:\n \"border border-slate-800/20 bg-white text-slate-900 hover:border-slate-800/40 focus-visible:ring-slate-200\",\n ghost:\n \"bg-transparent text-slate-900 hover:bg-slate-900/5 focus-visible:ring-slate-200\",\n danger: \"bg-rose-500 text-white hover:bg-rose-400 focus-visible:ring-rose-200\",\n },\n size: {\n sm: \"h-9 px-4 text-sm\",\n md: \"h-11 px-6 text-base\",\n lg: \"h-12 px-7 text-lg\",\n icon: \"h-10 w-10\",\n },\n radius: {\n pill: \"rounded-full\",\n md: \"rounded\",\n square: \"rounded-lg\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n radius: \"pill\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, radius, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n const coercedRadius =\n radius ?? (variant === \"onboarding\" || variant === \"onboardingOutline\" ? \"square\" : undefined);\n return (\n <Comp\n ref={ref}\n className={cn(buttonVariants({ variant, size, radius: coercedRadius }), className)}\n {...props}\n />\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-3 py-1 text-xs font-semibold uppercase tracking-wide transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-slate-900 text-white focus-visible:ring-slate-300\",\n muted:\n \"border-transparent bg-slate-100 text-slate-600 focus-visible:ring-slate-200\",\n outline: \"border-slate-200 bg-white text-slate-600 focus-visible:ring-slate-200\",\n success:\n \"border-transparent bg-teal-500/15 text-teal-600 focus-visible:ring-teal-200\",\n active:\n \"border-transparent bg-[rgba(14,203,129,0.25)] text-[#0ecb81] focus-visible:ring-[rgba(14,203,129,0.35)]\",\n pending:\n \"border-transparent bg-white/10 text-white/60 focus-visible:ring-white/20\",\n rejected:\n \"border-transparent bg-[rgba(246,70,93,0.20)] text-[#f6465d] focus-visible:ring-[rgba(246,70,93,0.30)]\",\n },\n size: {\n sm: \"px-2.5 py-0.5 text-[11px]\",\n md: \"px-3 py-1 text-xs\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props} />\n )\n);\n\nBadge.displayName = \"Badge\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:shadow-md\",\n className\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-xl font-semibold tracking-tight text-slate-900\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-slate-500\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-6 pb-6 pt-2 text-sm text-slate-600\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center border-t border-slate-100 px-6 py-4\", className)} {...props} />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"./card\";\n\nconst defaultFormatCurrency = (value: number) =>\n new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n\nconst defaultFormatPercent = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${Math.abs(value).toFixed(2)}%`;\n};\n\nconst defaultFormatSignedCurrency = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${defaultFormatCurrency(Math.abs(value))}`;\n};\n\nexport interface PortfolioSummaryProps extends React.HTMLAttributes<HTMLDivElement> {\n availableCash: number;\n portfolioValue: number;\n totalReturnPercent: number;\n unrealizedPnl: number;\n onResetAccount?: () => void;\n positionsHeading?: string;\n emptyPositionsText?: string;\n formatCurrency?: (value: number) => string;\n formatPercent?: (value: number) => string;\n formatSignedCurrency?: (value: number) => string;\n children?: React.ReactNode;\n}\n\nexport const PortfolioSummary = React.forwardRef<HTMLDivElement, PortfolioSummaryProps>(\n (\n {\n availableCash,\n portfolioValue,\n totalReturnPercent,\n unrealizedPnl,\n onResetAccount,\n positionsHeading = \"Current Positions\",\n emptyPositionsText = \"No positions yet. Start trading to build your portfolio!\",\n formatCurrency = defaultFormatCurrency,\n formatPercent = defaultFormatPercent,\n formatSignedCurrency = defaultFormatSignedCurrency,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const totalReturnClassName = totalReturnPercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n const pnlClassName = unrealizedPnl >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[560px] rounded-[12px] border border-white/10 bg-black/30 p-6 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"p-0 pb-4\">\n <div className=\"flex items-center justify-between gap-4\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">Portfolio Summary</CardTitle>\n {onResetAccount ? (\n <button\n type=\"button\"\n onClick={onResetAccount}\n className=\"cursor-pointer rounded-[6px] border border-white/20 bg-white/10 px-[0.7rem] py-[0.35rem] text-xs text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n Reset Account\n </button>\n ) : null}\n </div>\n <div className=\"mt-3 h-px w-full bg-white/10\" />\n </CardHeader>\n\n <CardContent className=\"p-0 pt-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Available Cash</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(availableCash)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Portfolio Value</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(portfolioValue)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Total Return</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", totalReturnClassName)}>\n {formatPercent(totalReturnPercent)}\n </p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Unrealized P&L</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", pnlClassName)}>\n {formatSignedCurrency(unrealizedPnl)}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <p className=\"m-0 text-[0.9rem] font-medium text-white/70\">{positionsHeading}</p>\n <div className=\"mt-3\">\n {children ? (\n children\n ) : (\n <p className=\"py-4 text-center text-[0.85rem] text-white/40\">{emptyPositionsText}</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n }\n);\n\nPortfolioSummary.displayName = \"PortfolioSummary\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { type OrderbookLevel } from \"./orderbook\";\n\nexport type HousePositionPendingOrder = {\n type: \"buy\" | \"sell\";\n tokens: number;\n value: number;\n price: number;\n};\n\nexport type HousePositionSliderOrderPayload = {\n side: \"buy\" | \"sell\";\n orderType: \"market\" | \"limit\";\n tokenId: string;\n tokenSymbol: string;\n price: number;\n deltaTokens: number;\n deltaValue: number;\n targetOwnership: number;\n targetTokens: number;\n targetValue: number;\n};\n\nexport type HousePositionOrderbook = {\n bids?: OrderbookLevel[];\n asks?: OrderbookLevel[];\n};\n\nexport interface HousePositionSliderProps extends React.HTMLAttributes<HTMLDivElement> {\n tokenId: string;\n tokenSymbol: string;\n totalTokens: number;\n currentPrice: number;\n availableCash: number;\n tokensHeld: number;\n pendingOrders?: HousePositionPendingOrder[];\n defaultOrderType?: \"market\" | \"limit\";\n orderbook?: HousePositionOrderbook;\n ownershipPercentOverride?: number;\n onConfirmOrder?: (payload: HousePositionSliderOrderPayload) => void;\n}\n\nconst clamp = (v: number, min: number, max: number) => Math.min(max, Math.max(min, v));\nconst fmt0 = (v: number) => Math.abs(v).toLocaleString(undefined, { maximumFractionDigits: 0 });\n\ntype MarketFillResult = {\n tokens: number;\n value: number;\n avgPrice: number | null;\n};\n\nconst normalizeLevels = (levels: OrderbookLevel[] = []) =>\n levels.filter((level) => Number.isFinite(level.price) && level.price > 0 && Number.isFinite(level.amount) && level.amount > 0);\n\nconst estimateMarketBuyFromUsd = (levels: OrderbookLevel[] = [], usdAmount: number): MarketFillResult => {\n if (!Number.isFinite(usdAmount) || usdAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingUsd = usdAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingUsd <= 0) break;\n const levelValueCapacity = level.amount * level.price;\n const usdToSpend = Math.min(remainingUsd, levelValueCapacity);\n const tokensFromLevel = usdToSpend / level.price;\n tokensFilled += tokensFromLevel;\n spent += usdToSpend;\n remainingUsd -= usdToSpend;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketBuyFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n spent += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketSellFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const bids = normalizeLevels(levels).sort((a, b) => b.price - a.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let received = 0;\n\n for (const level of bids) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n received += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: received,\n avgPrice: tokensFilled > 0 ? received / tokensFilled : null,\n };\n};\n\nexport function HousePositionSlider({\n tokenId,\n tokenSymbol,\n totalTokens,\n currentPrice,\n availableCash,\n tokensHeld,\n pendingOrders = [],\n defaultOrderType = \"market\",\n orderbook,\n ownershipPercentOverride,\n onConfirmOrder,\n className,\n ...props\n}: HousePositionSliderProps) {\n const [orderMode, setOrderMode] = React.useState<\"none\" | \"buy\" | \"sell\">(\"none\");\n const [buyTrackingMode, setBuyTrackingMode] = React.useState<\"dollars\" | \"tokens\">(\"dollars\");\n const [deltaDollars, setDeltaDollars] = React.useState(0);\n const [deltaTokensBuy, setDeltaTokensBuy] = React.useState(0);\n const [deltaTokensSell, setDeltaTokensSell] = React.useState(0);\n const [_isDragging, setIsDragging] = React.useState(false);\n const [visualTargetPct, setVisualTargetPct] = React.useState<number | null>(null);\n\n const [orderType, setOrderType] = React.useState<\"market\" | \"limit\">(defaultOrderType);\n const [limitPrice, setLimitPrice] = React.useState(currentPrice);\n const [limitPriceInput, setLimitPriceInput] = React.useState(currentPrice.toFixed(2));\n const [limitPriceDirty, setLimitPriceDirty] = React.useState(false);\n\n const [ownershipInput, setOwnershipInput] = React.useState(\"\");\n const [tokenAmountInput, setTokenAmountInput] = React.useState(\"\");\n\n const houseRef = React.useRef<HTMLDivElement | null>(null);\n\n const asks = orderbook?.asks ?? [];\n const bids = orderbook?.bids ?? [];\n\n React.useEffect(() => {\n if (orderType !== \"limit\") return;\n if (limitPriceDirty) return;\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n }, [currentPrice, limitPriceDirty, orderType]);\n\n const effectivePrice = orderType === \"limit\" ? limitPrice : currentPrice;\n const pendingBuyValue = pendingOrders.filter((o) => o.type === \"buy\").reduce((s, o) => s + o.value, 0);\n const pendingSellTokens = pendingOrders.filter((o) => o.type === \"sell\").reduce((s, o) => s + Math.abs(o.tokens), 0);\n\n const effectiveAvailableCash = Math.max(0, availableCash - pendingBuyValue);\n const effectiveTokensHeld = Math.max(0, tokensHeld - pendingSellTokens);\n\n const holdingsValue = tokensHeld * effectivePrice;\n const safeTotalTokens = totalTokens > 0 ? totalTokens : 1;\n const baselineOwnershipActual = clamp((effectiveTokensHeld / safeTotalTokens) * 100, 0, 100);\n\n let deltaTokens = 0;\n let deltaValue = 0;\n let marketAvgPrice: number | null = null;\n let targetTokens = tokensHeld;\n let targetValue = holdingsValue;\n\n const limitPriceSafe = limitPrice > 0 ? limitPrice : currentPrice || 1;\n\n if (orderMode === \"buy\") {\n if (orderType === \"market\") {\n if (buyTrackingMode === \"tokens\") {\n const desiredTokens = Math.max(0, deltaTokensBuy);\n const result = estimateMarketBuyFromTokens(asks, desiredTokens);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n const result = estimateMarketBuyFromUsd(asks, notional);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n }\n } else {\n if (buyTrackingMode === \"tokens\") {\n deltaTokens = deltaTokensBuy;\n deltaValue = deltaTokensBuy * limitPriceSafe;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n deltaValue = notional;\n deltaTokens = notional / limitPriceSafe;\n }\n }\n } else if (orderMode === \"sell\") {\n if (orderType === \"market\") {\n const tokensToSell = Math.abs(deltaTokensSell);\n const result = estimateMarketSellFromTokens(bids, tokensToSell);\n deltaTokens = -result.tokens;\n deltaValue = -result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n deltaTokens = deltaTokensSell;\n deltaValue = deltaTokensSell * limitPriceSafe;\n }\n }\n\n targetTokens = tokensHeld + deltaTokens;\n targetValue = targetTokens * effectivePrice;\n\n const sliderTargetTokens = clamp(effectiveTokensHeld + deltaTokens, 0, safeTotalTokens);\n const normalizedTargetPct = (sliderTargetTokens / safeTotalTokens) * 100;\n\n const isIncrease = orderMode === \"buy\";\n const hasChange = orderMode !== \"none\" && (Math.abs(deltaTokens) > 0.001 || Math.abs(deltaValue) > 0.01);\n\n const currentOwnership = totalTokens <= 0 ? 0 : clamp((tokensHeld / totalTokens) * 100, 0, 100);\n const targetOwnership = totalTokens <= 0 ? 0 : clamp((targetTokens / totalTokens) * 100, 0, 100);\n\n const ownershipOverrideValue =\n typeof ownershipPercentOverride === \"number\" && Number.isFinite(ownershipPercentOverride)\n ? clamp(ownershipPercentOverride, 0, 100)\n : null;\n const ownershipShift = ownershipOverrideValue != null ? ownershipOverrideValue - baselineOwnershipActual : 0;\n const baselinePct = clamp(ownershipOverrideValue ?? baselineOwnershipActual, 0, 100);\n const impliedTargetPct = clamp(normalizedTargetPct + ownershipShift, 0, 100);\n const displayTargetPct = visualTargetPct ?? impliedTargetPct;\n const targetPct = displayTargetPct;\n const displayCurrentOwnership = clamp(ownershipOverrideValue ?? currentOwnership, 0, 100);\n const impliedDisplayTargetOwnership = clamp(targetOwnership + ownershipShift, 0, 100);\n const displayTargetOwnership = visualTargetPct ?? impliedDisplayTargetOwnership;\n\n const estFeeTokens = (Math.abs(deltaValue) * 0.005) / (effectivePrice || 1);\n\n const resetOrder = React.useCallback(() => {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n setVisualTargetPct(null);\n }, []);\n\n const updateOrderFromTargetValue = React.useCallback(\n (newTargetValue: number) => {\n const newDeltaValue = newTargetValue - holdingsValue;\n\n if (newDeltaValue > 0) {\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(Math.min(newDeltaValue, effectiveAvailableCash));\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (newDeltaValue < 0) {\n const newDeltaTokens = newTargetValue / (effectivePrice || 1) - tokensHeld;\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(newDeltaTokens, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, holdingsValue, resetOrder, tokensHeld]\n );\n\n const updateOrderFromOwnership = React.useCallback(\n (newOwnershipPercent: number) => {\n const nextOwnership = clamp(newOwnershipPercent, 0, 100);\n const newTargetTokens = (nextOwnership / 100) * totalTokens;\n updateOrderFromTargetValue(newTargetTokens * effectivePrice);\n setVisualTargetPct(nextOwnership);\n },\n [effectivePrice, totalTokens, updateOrderFromTargetValue]\n );\n\n const updateOrderFromTokenAmount = React.useCallback(\n (tokenAmountSigned: number) => {\n if (tokenAmountSigned > 0) {\n const maxTokens = effectiveAvailableCash / (effectivePrice || 1);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"tokens\");\n setDeltaTokensBuy(Math.min(tokenAmountSigned, maxTokens));\n setDeltaDollars(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (tokenAmountSigned < 0) {\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(tokenAmountSigned, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, resetOrder]\n );\n\n const updateOrderFromSlider = React.useCallback(\n (pct: number) => {\n const normalized = (pct - 50) / 50;\n const magnitude = Math.min(Math.abs(normalized), 1);\n if (magnitude < 0.02) {\n resetOrder();\n setVisualTargetPct(null);\n return;\n }\n if (normalized > 0) {\n const notional = clamp(magnitude * effectiveAvailableCash, 0, effectiveAvailableCash);\n if (notional <= 0) {\n resetOrder();\n setVisualTargetPct(null);\n return;\n }\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(notional);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n setVisualTargetPct(clamp(pct, 0, 100));\n return;\n }\n if (normalized < 0) {\n const tokensToSell = clamp(magnitude * effectiveTokensHeld, 0, effectiveTokensHeld);\n if (tokensToSell <= 0) {\n resetOrder();\n setVisualTargetPct(null);\n return;\n }\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(-tokensToSell);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setVisualTargetPct(clamp(pct, 0, 100));\n return;\n }\n resetOrder();\n setVisualTargetPct(null);\n },\n [effectiveAvailableCash, effectiveTokensHeld, resetOrder]\n );\n\n const handleDragAtClientY = React.useCallback(\n (clientY: number) => {\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const y = clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n updateOrderFromSlider(pct);\n },\n [updateOrderFromSlider]\n );\n\n const onMouseDown = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n\n const onMove = (ev: MouseEvent) => handleDragAtClientY(ev.clientY);\n const onUp = () => {\n setIsDragging(false);\n document.removeEventListener(\"mousemove\", onMove);\n document.removeEventListener(\"mouseup\", onUp);\n };\n\n document.addEventListener(\"mousemove\", onMove);\n document.addEventListener(\"mouseup\", onUp);\n };\n\n const onTouchStart = () => {\n setIsDragging(true);\n\n const onMove = (ev: TouchEvent) => {\n const touch = ev.touches[0];\n if (!touch) return;\n handleDragAtClientY(touch.clientY);\n };\n const onEnd = () => {\n setIsDragging(false);\n document.removeEventListener(\"touchmove\", onMove);\n document.removeEventListener(\"touchend\", onEnd);\n };\n\n document.addEventListener(\"touchmove\", onMove);\n document.addEventListener(\"touchend\", onEnd);\n };\n\n const handleCancel = () => {\n resetOrder();\n };\n\n const handleOrderTypeSelection = (next: \"market\" | \"limit\") => {\n setOrderType(next);\n if (next === \"limit\") {\n setLimitPriceDirty(false);\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n } else {\n setLimitPriceDirty(false);\n }\n };\n\n const handleConfirm = () => {\n if (!hasChange) return;\n const priceToUse = orderType === \"market\" ? marketAvgPrice ?? currentPrice : limitPrice;\n onConfirmOrder?.({\n side: isIncrease ? \"buy\" : \"sell\",\n orderType,\n tokenId,\n tokenSymbol,\n price: priceToUse,\n deltaTokens,\n deltaValue,\n targetOwnership,\n targetTokens,\n targetValue,\n });\n handleCancel();\n };\n\n const rectTop = 10;\n const rectBottom = 150;\n const totalFillableHeight = rectBottom - rectTop;\n const baselineFillHeight = (baselinePct / 100) * totalFillableHeight;\n const targetFillHeight = (targetPct / 100) * totalFillableHeight;\n const baselineFillY = rectBottom - baselineFillHeight;\n const targetFillY = rectBottom - targetFillHeight;\n\n const showIncrease = targetPct > baselinePct;\n const showDecrease = targetPct < baselinePct;\n\n const valueLabel = orderType === \"limit\" ? `${tokenSymbol} Owned at Limit` : `${tokenSymbol} Owned`;\n const deltaSign = deltaValue > 0 ? \"+\" : deltaValue < 0 ? \"-\" : \"\";\n const percentMarkers = [100, 50, 25, 0];\n\n return (\n <div className={cn(\"relative flex w-full flex-col items-center gap-6 rounded-[12px] bg-black/20 px-8 pb-6 pt-12\", className)} {...props}>\n <div className=\"absolute left-4 top-4 text-[1.1rem] font-semibold tracking-[0.5px] text-white\">Place Order</div>\n\n {hasChange ? (\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"absolute right-3 top-3 rounded-[6px] border border-white/20 bg-white/10 px-2.5 py-1.5 text-[0.7rem] text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n ✕ Cancel\n </button>\n ) : null}\n\n <div className=\"text-center\">\n <div className=\"mb-2 text-xs uppercase tracking-[1px] text-[#888]\">{valueLabel}</div>\n <div className=\"flex items-baseline justify-center gap-3\">\n <span\n className={cn(\n \"text-[2.2rem] font-semibold\",\n deltaValue >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n {deltaSign}${fmt0(deltaValue)}\n </span>\n <span className=\"text-lg font-semibold text-white/60\">${fmt0(targetValue)}</span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-[200px] flex-col justify-between text-xs text-white/40\">\n {percentMarkers.map((marker) => (\n <span key={marker}>{marker}%</span>\n ))}\n </div>\n <div\n ref={houseRef}\n className=\"h-[200px] w-[160px] select-none touch-none\"\n style={{ cursor: \"ns-resize\" }}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n <svg viewBox=\"0 0 120 160\" className=\"h-full w-full overflow-visible\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"rgba(255,255,255,0.04)\" stroke=\"rgba(255,255,255,0.10)\" />\n <clipPath id=\"loaf-clip\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" />\n </clipPath>\n <g clipPath=\"url(#loaf-clip)\">\n <rect x=\"10\" y={showDecrease ? targetFillY : baselineFillY} width=\"100\" height={showDecrease ? targetFillHeight : baselineFillHeight} fill=\"rgba(220,175,120,0.7)\" />\n {showIncrease ? (\n <rect x=\"10\" y={targetFillY} width=\"100\" height={targetFillHeight - baselineFillHeight} fill=\"rgba(14,203,129,0.35)\" />\n ) : null}\n {showDecrease ? (\n <rect x=\"10\" y={baselineFillY} width=\"100\" height={baselineFillHeight - targetFillHeight} fill=\"rgba(246,70,93,0.35)\" />\n ) : null}\n <line x1=\"12\" y1={targetFillY} x2=\"108\" y2={targetFillY} stroke={showIncrease ? \"#0ecb81\" : showDecrease ? \"#f6465d\" : \"rgba(234,217,162,1)\"} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </g>\n </svg>\n </div>\n </div>\n\n <button\n type=\"button\"\n disabled={!hasChange}\n onClick={handleConfirm}\n className={cn(\n \"w-full rounded-[10px] px-4 py-4 text-base font-semibold transition\",\n !hasChange\n ? \"cursor-not-allowed bg-white/10 text-white/30\"\n : isIncrease\n ? \"bg-[#0ecb81] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(14,203,129,0.3)]\"\n : \"bg-[#f6465d] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(246,70,93,0.3)]\"\n )}\n >\n {!hasChange ? \"Adjust Position\" : isIncrease ? `Buy $${fmt0(deltaValue)}` : `Sell $${fmt0(deltaValue)}`}\n </button>\n\n <div className=\"w-full border-t border-white/10 py-4 text-[0.85rem]\">\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{tokenSymbol} Ownership</span>\n <span className=\"text-white\">\n {displayCurrentOwnership.toFixed(2)}%\n <span className=\"mx-1.5 text-white/50\">→</span>\n <input\n type=\"text\"\n value={ownershipInput || displayTargetOwnership.toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setOwnershipInput(val);\n }}\n onFocus={() => setOwnershipInput(displayTargetOwnership.toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(ownershipInput);\n if (Number.isFinite(num)) updateOrderFromOwnership(num);\n setOwnershipInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[70px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n displayTargetOwnership >= displayCurrentOwnership\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n </span>\n </div>\n\n {orderType === \"market\" ? null : (\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{isIncrease ? \"Buying\" : \"Selling\"}</span>\n <span className=\"inline-flex items-center gap-1\">\n {orderMode === \"buy\" && buyTrackingMode === \"dollars\" ? <span className=\"mr-1 text-[#0ecb81]\">~</span> : null}\n <input\n type=\"text\"\n value={tokenAmountInput || Math.abs(deltaTokens).toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setTokenAmountInput(val);\n }}\n onFocus={() => setTokenAmountInput(Math.abs(deltaTokens).toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(tokenAmountInput);\n if (Number.isFinite(num) && num >= 0) {\n const signed = isIncrease || orderMode === \"none\" ? num : -num;\n updateOrderFromTokenAmount(signed);\n }\n setTokenAmountInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[90px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n isIncrease\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n <span className={cn(\"font-semibold\", isIncrease ? \"text-[#0ecb81]\" : \"text-[#f6465d]\")}>tokens</span>\n </span>\n </div>\n )}\n\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">Est. Fee</span>\n <span className=\"text-white\">{estFeeTokens.toFixed(6)} {tokenSymbol}</span>\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"mb-4 flex w-full rounded-[8px] bg-white/5 p-[3px]\">\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"market\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"market\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Market\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"limit\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"limit\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Limit\n </button>\n </div>\n\n {orderType === \"limit\" ? (\n <div className=\"relative mb-4\">\n <input\n type=\"text\"\n value={limitPriceInput}\n onChange={(e) => {\n const input = e.target.value;\n if (input === \"\" || /^[0-9]*\\.?[0-9]*$/.test(input)) {\n setLimitPriceDirty(true);\n setLimitPriceInput(input);\n const num = Number.parseFloat(input);\n if (Number.isFinite(num) && num > 0) setLimitPrice(num);\n }\n }}\n onBlur={() => {\n const num = Number.parseFloat(limitPriceInput);\n if (Number.isFinite(num) && num > 0) {\n setLimitPriceInput(num.toFixed(2));\n setLimitPrice(num);\n } else {\n setLimitPriceInput(limitPrice.toFixed(2));\n }\n }}\n placeholder=\"Price\"\n className=\"w-full rounded-[8px] border border-white/10 bg-black/30 px-4 py-3 pr-14 text-[0.95rem] text-white outline-none focus:border-[#f0b90b]\"\n />\n <span className=\"absolute right-4 top-1/2 -translate-y-1/2 text-[0.8rem] text-white/50\">USD</span>\n </div>\n ) : null}\n\n <div className=\"flex items-center justify-between text-xs text-white/50\">\n <span>Available: ${availableCash.toLocaleString()}</span>\n <button type=\"button\" className=\"text-[#f0b90b] hover:underline\">\n Add Funds\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn as _cn } from \"../lib/cn\";\nimport { type OrderbookLevel } from \"./orderbook\";\n\nexport type HousePositionSliderMobileOrderPayload = {\n side: \"buy\" | \"sell\";\n orderType: \"market\" | \"limit\";\n tokenId: string;\n tokenSymbol: string;\n price: number;\n deltaTokens: number;\n deltaValue: number;\n targetOwnership: number;\n targetTokens: number;\n targetValue: number;\n};\n\nexport type HousePositionSliderMobileOrderbook = {\n bids?: OrderbookLevel[];\n asks?: OrderbookLevel[];\n};\n\nexport interface HousePositionSliderMobileProps extends React.HTMLAttributes<HTMLDivElement> {\n tokenId: string;\n tokenSymbol: string;\n totalTokens: number;\n currentPrice: number;\n availableCash: number;\n tokensHeld: number;\n defaultOrderType?: \"market\" | \"limit\";\n orderbook?: HousePositionSliderMobileOrderbook;\n ownershipPercentOverride?: number;\n onConfirmOrder?: (payload: HousePositionSliderMobileOrderPayload) => void;\n}\n\nconst clamp = (v: number, min: number, max: number) => Math.min(max, Math.max(min, v));\nconst fmt0 = (v: number) => Math.abs(v).toLocaleString(undefined, { maximumFractionDigits: 0 });\n\n// Styles copied exactly from loaf-demo/src/components/HousePositionSlider/HousePositionSlider.jsx\nconst styles = {\n // SliderContainer @media (max-width: 1024px)\n sliderContainer: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n padding: \"1.5rem 1rem 0.75rem\",\n background: \"#111111\",\n borderRadius: \"12px\",\n gap: \"0.4rem\",\n position: \"relative\" as const,\n border: \"1px solid rgba(255, 255, 255, 0.1)\",\n overflow: \"hidden\",\n },\n // ValueDisplay @media (max-width: 1024px)\n valueDisplay: {\n textAlign: \"center\" as const,\n marginBottom: \"0.2rem\",\n },\n // ValueLabel @media (max-width: 1024px)\n valueLabel: {\n fontSize: \"0.65rem\",\n color: \"#C9A227\",\n textTransform: \"uppercase\" as const,\n letterSpacing: \"1px\",\n marginBottom: \"0.2rem\",\n },\n // ValueAmount @media (max-width: 1024px)\n valueAmount: {\n fontSize: \"1.1rem\",\n fontWeight: 700,\n color: \"#fff\",\n display: \"inline-flex\",\n alignItems: \"baseline\",\n gap: \"0.3rem\",\n },\n // HouseWrapper @media (max-width: 1024px)\n houseWrapper: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"0.75rem\",\n margin: \"0.25rem 0\",\n width: \"100%\",\n },\n // HouseContainer @media (max-width: 1024px)\n houseContainer: {\n position: \"relative\" as const,\n width: \"100px\",\n height: \"130px\",\n cursor: \"ns-resize\",\n touchAction: \"none\" as const,\n userSelect: \"none\" as const,\n },\n // MobilePercentButtons @media (max-width: 1024px)\n mobilePercentButtons: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n justifyContent: \"space-between\",\n height: \"130px\",\n position: \"absolute\" as const,\n left: \"-38px\",\n top: 0,\n },\n // MobilePercentBtn\n mobilePercentBtn: {\n background: \"rgba(255, 255, 255, 0.05)\",\n border: \"1px solid rgba(255, 255, 255, 0.2)\",\n borderRadius: \"4px\",\n color: \"rgba(255, 255, 255, 0.6)\",\n fontSize: \"0.55rem\",\n padding: \"0.25rem 0.35rem\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n textAlign: \"center\" as const,\n minWidth: \"32px\",\n outline: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n },\n // ConfirmButton @media (max-width: 1024px)\n confirmButton: {\n width: \"100%\",\n padding: \"0.65rem\",\n fontSize: \"0.85rem\",\n fontWeight: 600,\n border: \"none\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\",\n },\n // SummarySection @media (max-width: 1024px)\n summarySection: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"0.4rem\",\n padding: \"0.6rem\",\n background: \"rgba(0, 0, 0, 0.2)\",\n borderRadius: \"8px\",\n marginTop: 0,\n },\n // BoxedSummaryRow @media (max-width: 1024px)\n boxedSummaryRow: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n background: \"transparent\",\n borderRadius: \"6px\",\n padding: \"0.35rem 0.5rem\",\n cursor: \"text\",\n flexWrap: \"nowrap\" as const,\n fontSize: \"0.75rem\",\n },\n // SummaryLabel @media (max-width: 1024px)\n summaryLabel: {\n color: \"rgba(255, 255, 255, 0.6)\",\n fontSize: \"0.7rem\",\n whiteSpace: \"nowrap\" as const,\n },\n // SummaryValue @media (max-width: 1024px)\n summaryValue: {\n color: \"#fff\",\n fontWeight: 500,\n fontSize: \"0.8rem\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.25rem\",\n overflow: \"hidden\",\n flexShrink: 1,\n minWidth: 0,\n },\n // BoxedInput @media (max-width: 1024px)\n boxedInput: {\n background: \"transparent\",\n border: \"none\",\n fontWeight: 600,\n fontSize: \"0.8rem\",\n width: \"50px\",\n textAlign: \"right\" as const,\n outline: \"none\",\n padding: 0,\n flexShrink: 0,\n },\n // InputSuffix @media (max-width: 1024px)\n inputSuffix: {\n fontWeight: 600,\n fontSize: \"0.65rem\",\n marginLeft: \"0.2rem\",\n display: \"inline-flex\",\n alignItems: \"center\",\n lineHeight: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\" as const,\n whiteSpace: \"nowrap\" as const,\n maxWidth: \"80px\",\n },\n // SummaryRow @media (max-width: 1024px)\n summaryRow: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.8rem\",\n },\n // OrderTypeToggle @media (max-width: 1024px)\n orderTypeToggle: {\n display: \"flex\",\n backgroundColor: \"rgba(255, 255, 255, 0.05)\",\n borderRadius: \"6px\",\n padding: \"2px\",\n marginBottom: 0,\n width: \"100%\",\n },\n // OrderTypeButton @media (max-width: 1024px)\n orderTypeButton: {\n flex: 1,\n padding: \"0.35rem\",\n fontSize: \"0.7rem\",\n fontWeight: 500,\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n // AvailableFunds\n availableFunds: {\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"rgba(255, 255, 255, 0.5)\",\n },\n // AddFundsButton\n addFundsButton: {\n background: \"none\",\n border: \"none\",\n color: \"#f0b90b\",\n fontSize: \"0.75rem\",\n cursor: \"pointer\",\n padding: 0,\n },\n};\n\nexport function HousePositionSliderMobile({\n tokenId,\n tokenSymbol,\n totalTokens,\n currentPrice,\n availableCash,\n tokensHeld,\n defaultOrderType = \"market\",\n orderbook,\n ownershipPercentOverride,\n onConfirmOrder,\n className,\n ...props\n}: HousePositionSliderMobileProps) {\n const [orderMode, setOrderMode] = React.useState<\"none\" | \"buy\" | \"sell\">(\"none\");\n const [deltaDollars, setDeltaDollars] = React.useState(0);\n const [deltaTokensSell, setDeltaTokensSell] = React.useState(0);\n const [deltaTokensBuy, setDeltaTokensBuy] = React.useState(0);\n const [buyTrackingMode, setBuyTrackingMode] = React.useState<\"dollars\" | \"tokens\">(\"dollars\");\n\n const [orderType, setOrderType] = React.useState<\"market\" | \"limit\">(defaultOrderType);\n const [limitPrice, setLimitPrice] = React.useState(currentPrice);\n const [limitPriceInput, setLimitPriceInput] = React.useState(currentPrice.toFixed(2));\n const [limitPriceDirty, setLimitPriceDirty] = React.useState(false);\n\n const [tokenAmountInput, setTokenAmountInput] = React.useState(\"\");\n\n const houseRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (orderType !== \"limit\") return;\n if (limitPriceDirty) return;\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n }, [orderType, currentPrice, limitPriceDirty]);\n\n const effectivePrice = orderType === \"limit\" ? limitPrice : currentPrice;\n const holdingsValue = tokensHeld * effectivePrice;\n const totalCapacity = holdingsValue + availableCash;\n const baselinePct = totalCapacity > 0 ? (holdingsValue / totalCapacity) * 100 : 0;\n\n let deltaTokens: number;\n let deltaValue: number;\n let targetTokens: number;\n let targetValue: number;\n\n if (orderMode === \"buy\") {\n if (buyTrackingMode === \"tokens\") {\n deltaTokens = deltaTokensBuy;\n deltaValue = deltaTokensBuy * effectivePrice;\n targetTokens = tokensHeld + deltaTokensBuy;\n targetValue = targetTokens * effectivePrice;\n } else {\n deltaValue = deltaDollars;\n deltaTokens = effectivePrice > 0 ? deltaDollars / effectivePrice : 0;\n targetTokens = tokensHeld + deltaTokens;\n targetValue = targetTokens * effectivePrice;\n }\n } else if (orderMode === \"sell\") {\n deltaTokens = deltaTokensSell;\n deltaValue = deltaTokensSell * effectivePrice;\n targetTokens = tokensHeld + deltaTokensSell;\n targetValue = targetTokens * effectivePrice;\n } else {\n deltaTokens = 0;\n deltaValue = 0;\n targetTokens = tokensHeld;\n targetValue = holdingsValue;\n }\n\n const targetPct = totalCapacity > 0 ? (targetValue / totalCapacity) * 100 : 0;\n const isIncrease = orderMode === \"buy\";\n const hasChange = orderMode !== \"none\" && (Math.abs(deltaTokens) > 0.001 || Math.abs(deltaValue) > 0.01);\n const targetOwnership = totalTokens > 0 ? (targetTokens / totalTokens) * 100 : 0;\n const estFeeTokens = effectivePrice > 0 ? (Math.abs(deltaValue) * 0.005) / effectivePrice : 0;\n\n const updateOrderFromTargetValue = React.useCallback(\n (newTargetValue: number) => {\n const newDeltaValue = newTargetValue - holdingsValue;\n if (newDeltaValue > 0.01) {\n const capped = Math.min(newDeltaValue, availableCash);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(capped);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n } else if (newDeltaValue < -0.01) {\n const newDeltaTokens = effectivePrice > 0 ? newTargetValue / effectivePrice - tokensHeld : 0;\n const capped = Math.max(newDeltaTokens, -tokensHeld);\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(capped);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n } else {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n }\n },\n [holdingsValue, availableCash, effectivePrice, tokensHeld]\n );\n\n const updateOrderFromTokenAmount = React.useCallback(\n (tokenAmount: number) => {\n if (tokenAmount > 0) {\n const maxTokens = effectivePrice > 0 ? availableCash / effectivePrice : 0;\n const capped = Math.min(tokenAmount, maxTokens);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"tokens\");\n setDeltaTokensBuy(capped);\n setDeltaDollars(0);\n setDeltaTokensSell(0);\n } else if (tokenAmount < 0) {\n const capped = Math.max(tokenAmount, -tokensHeld);\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(capped);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n } else {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n }\n },\n [effectivePrice, availableCash, tokensHeld]\n );\n\n const handleMarkerClick = React.useCallback(\n (pct: number) => {\n const newTargetValue = (pct / 100) * totalCapacity;\n updateOrderFromTargetValue(newTargetValue);\n },\n [totalCapacity, updateOrderFromTargetValue]\n );\n\n const onMouseDown = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n const move = (ev: MouseEvent) => {\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const y = ev.clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n const newTargetValue = (pct / 100) * totalCapacity;\n updateOrderFromTargetValue(newTargetValue);\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n },\n [totalCapacity, updateOrderFromTargetValue]\n );\n\n const onTouchStart = React.useCallback(\n (e: React.TouchEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const move = (ev: TouchEvent) => {\n ev.preventDefault();\n ev.stopPropagation();\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const touch = ev.touches[0];\n const y = touch.clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n const newTargetValue = (pct / 100) * totalCapacity;\n updateOrderFromTargetValue(newTargetValue);\n };\n const up = () => {\n document.removeEventListener(\"touchmove\", move);\n document.removeEventListener(\"touchend\", up);\n };\n document.addEventListener(\"touchmove\", move, { passive: false });\n document.addEventListener(\"touchend\", up);\n },\n [totalCapacity, updateOrderFromTargetValue]\n );\n\n const handleConfirm = () => {\n if (!hasChange || !onConfirmOrder) return;\n onConfirmOrder({\n side: isIncrease ? \"buy\" : \"sell\",\n orderType,\n tokenId,\n tokenSymbol,\n price: effectivePrice,\n deltaTokens: Math.abs(deltaTokens),\n deltaValue: Math.abs(deltaValue),\n targetOwnership,\n targetTokens,\n targetValue,\n });\n setOrderMode(\"none\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n };\n\n // SVG fill calculations\n const rectTop = 10;\n const rectBottom = 150;\n const totalFillableHeight = rectBottom - rectTop;\n const baselineFillHeight = (baselinePct / 100) * totalFillableHeight;\n const targetFillHeight = (targetPct / 100) * totalFillableHeight;\n const baselineFillY = rectBottom - baselineFillHeight;\n const targetFillY = rectBottom - targetFillHeight;\n\n const showIncrease = targetPct > baselinePct;\n const showDecrease = targetPct < baselinePct;\n\n const valueLabel = `${tokenSymbol} OWNED`;\n\n // Border color for boxed rows\n const getBorderColor = () => {\n if (!hasChange) return \"rgba(201, 162, 39, 0.5)\";\n return isIncrease ? \"rgba(14, 203, 129, 0.3)\" : \"rgba(246, 70, 93, 0.3)\";\n };\n\n // Text color for values\n const getValueColor = () => {\n if (!hasChange) return \"#fff\";\n return isIncrease ? \"#0ecb81\" : \"#f6465d\";\n };\n\n return (\n <div\n style={styles.sliderContainer}\n className={className}\n {...props}\n >\n {/* Value Display */}\n <div style={styles.valueDisplay}>\n <div style={styles.valueLabel}>{valueLabel}</div>\n <div style={styles.valueAmount}>\n ${fmt0(targetValue)}\n </div>\n </div>\n\n {/* House Wrapper */}\n <div style={styles.houseWrapper}>\n {/* House Container with Mobile Percent Buttons inside */}\n <div\n ref={houseRef}\n style={styles.houseContainer}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n {/* SVG House */}\n <svg viewBox=\"0 0 120 160\" style={{ width: \"100%\", height: \"100%\", overflow: \"visible\" }}>\n <defs>\n <clipPath id=\"mobile-clip\">\n <rect x=\"12\" y=\"12\" width=\"96\" height=\"136\" rx=\"6\" />\n </clipPath>\n <linearGradient id=\"mobileGoldFill\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"rgba(220, 175, 120, 0.7)\" />\n <stop offset=\"100%\" stopColor=\"rgba(220, 175, 120, 0.7)\" />\n </linearGradient>\n <linearGradient id=\"mobileGreenFill\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"rgba(14, 203, 129, 0.5)\" />\n <stop offset=\"100%\" stopColor=\"rgba(14, 203, 129, 0.2)\" />\n </linearGradient>\n <linearGradient id=\"mobileRedFill\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"rgba(246, 70, 93, 0.15)\" />\n <stop offset=\"100%\" stopColor=\"rgba(246, 70, 93, 0.5)\" />\n </linearGradient>\n <filter id=\"mobileGoldGlow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur stdDeviation=\"6\" result=\"blur\" />\n <feFlood floodColor=\"rgba(234, 217, 162, 0.6)\" result=\"color\" />\n <feComposite in=\"color\" in2=\"blur\" operator=\"in\" result=\"glow\" />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <filter id=\"mobileGreenGlow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur stdDeviation=\"6\" result=\"blur\" />\n <feFlood floodColor=\"rgba(14, 203, 129, 0.6)\" result=\"color\" />\n <feComposite in=\"color\" in2=\"blur\" operator=\"in\" result=\"glow\" />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <filter id=\"mobileRedGlow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur stdDeviation=\"6\" result=\"blur\" />\n <feFlood floodColor=\"rgba(246, 70, 93, 0.6)\" result=\"color\" />\n <feComposite in=\"color\" in2=\"blur\" operator=\"in\" result=\"glow\" />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n </defs>\n\n {/* Glass background */}\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"rgba(255,255,255,0.04)\" />\n\n {/* Fills */}\n <g clipPath=\"url(#mobile-clip)\">\n <rect\n x=\"10\"\n y={showDecrease ? targetFillY : baselineFillY}\n width=\"100\"\n height={showDecrease ? targetFillHeight : baselineFillHeight}\n fill=\"url(#mobileGoldFill)\"\n />\n {showIncrease && (\n <rect\n x=\"10\"\n y={targetFillY}\n width=\"100\"\n height={targetFillHeight - baselineFillHeight}\n fill=\"url(#mobileGreenFill)\"\n />\n )}\n {showDecrease && (\n <rect\n x=\"10\"\n y={baselineFillY}\n width=\"100\"\n height={baselineFillHeight - targetFillHeight}\n fill=\"url(#mobileRedFill)\"\n />\n )}\n <line\n x1=\"12\"\n y1={targetFillY}\n x2=\"108\"\n y2={targetFillY}\n stroke={showIncrease ? \"rgba(14, 203, 129, 1)\" : showDecrease ? \"rgba(246, 70, 93, 1)\" : \"rgba(234, 217, 162, 1)\"}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n filter={showIncrease ? \"url(#mobileGreenGlow)\" : showDecrease ? \"url(#mobileRedGlow)\" : \"url(#mobileGoldGlow)\"}\n />\n </g>\n\n {/* Border with glow */}\n <rect\n x=\"10\"\n y=\"10\"\n width=\"100\"\n height=\"140\"\n rx=\"8\"\n fill=\"none\"\n stroke={showIncrease ? \"rgba(14, 203, 129, 0.6)\" : showDecrease ? \"rgba(246, 70, 93, 0.6)\" : \"rgba(234, 217, 162, 0.6)\"}\n strokeWidth=\"2\"\n filter={showIncrease ? \"url(#mobileGreenGlow)\" : showDecrease ? \"url(#mobileRedGlow)\" : \"url(#mobileGoldGlow)\"}\n />\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"none\" stroke=\"rgba(255, 255, 255, 0.1)\" strokeWidth=\"1\" />\n </svg>\n\n {/* Mobile percentage buttons - positioned absolutely inside HouseContainer */}\n <div\n style={styles.mobilePercentButtons}\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {[100, 50, 25, 0].map((pct) => (\n <button\n key={pct}\n type=\"button\"\n style={styles.mobilePercentBtn}\n onClick={(e) => {\n e.stopPropagation();\n handleMarkerClick(pct);\n }}\n >\n {pct}%\n </button>\n ))}\n </div>\n </div>\n </div>\n\n {/* Confirm Button */}\n <button\n type=\"button\"\n disabled={!hasChange}\n onClick={handleConfirm}\n style={{\n ...styles.confirmButton,\n backgroundColor: !hasChange\n ? \"rgba(255, 255, 255, 0.1)\"\n : isIncrease\n ? \"#0ecb81\"\n : \"#f6465d\",\n color: !hasChange ? \"rgba(255, 255, 255, 0.3)\" : \"#fff\",\n cursor: !hasChange ? \"not-allowed\" : \"pointer\",\n }}\n >\n {!hasChange ? \"Adjust Position\" : isIncrease ? `Buy $${fmt0(deltaValue)}` : `Sell $${fmt0(deltaValue)}`}\n </button>\n\n {/* Summary Section */}\n <div style={styles.summarySection}>\n {/* Est. Buy/Sell row */}\n <div\n style={{\n ...styles.boxedSummaryRow,\n border: `1px solid ${getBorderColor()}`,\n }}\n onClick={(e) => {\n const input = (e.currentTarget as HTMLElement).querySelector(\"input\");\n if (input && e.target !== input) {\n input.focus();\n const len = input.value.length;\n input.setSelectionRange(len, len);\n }\n }}\n >\n <span style={styles.summaryLabel}>{isIncrease ? \"Est. Buy\" : \"Est. Sell\"}</span>\n <span style={styles.summaryValue}>\n <input\n type=\"text\"\n value={tokenAmountInput || Math.abs(deltaTokens).toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setTokenAmountInput(val);\n }}\n onFocus={() => setTokenAmountInput(Math.abs(deltaTokens).toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(tokenAmountInput);\n if (Number.isFinite(num) && num >= 0) {\n const signed = isIncrease || orderMode === \"none\" ? num : -num;\n updateOrderFromTokenAmount(signed);\n }\n setTokenAmountInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n style={{\n ...styles.boxedInput,\n color: getValueColor(),\n }}\n />\n <span style={{ ...styles.inputSuffix, color: getValueColor() }}>{tokenSymbol}</span>\n </span>\n </div>\n\n {/* Price row */}\n <div\n style={{\n ...styles.boxedSummaryRow,\n border: `1px solid ${getBorderColor()}`,\n }}\n onClick={(e) => {\n if (orderType === \"limit\") {\n const input = (e.currentTarget as HTMLElement).querySelector(\"input\");\n if (input && e.target !== input) {\n input.focus();\n const len = input.value.length;\n input.setSelectionRange(len, len);\n }\n }\n }}\n >\n <span style={styles.summaryLabel}>{orderType === \"market\" ? \"Price\" : \"Limit Price\"}</span>\n {orderType === \"market\" ? (\n <span style={{ fontWeight: 600, color: \"rgba(255, 255, 255, 0.6)\", fontSize: \"0.8rem\" }}>Market</span>\n ) : (\n <span style={styles.summaryValue}>\n <input\n type=\"text\"\n value={limitPriceInput}\n onChange={(e) => {\n const input = e.target.value;\n if (input === \"\" || /^[0-9]*\\.?[0-9]*$/.test(input)) {\n setLimitPriceDirty(true);\n setLimitPriceInput(input);\n const num = Number.parseFloat(input);\n if (Number.isFinite(num) && num > 0) setLimitPrice(num);\n }\n }}\n onBlur={() => {\n const num = Number.parseFloat(limitPriceInput);\n if (Number.isFinite(num) && num > 0) {\n setLimitPriceInput(num.toFixed(2));\n setLimitPrice(num);\n } else {\n setLimitPriceInput(limitPrice.toFixed(2));\n }\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n style={{\n ...styles.boxedInput,\n color: getValueColor(),\n }}\n />\n <span style={{ ...styles.inputSuffix, color: getValueColor() }}>USD</span>\n </span>\n )}\n </div>\n\n {/* Est. Fee row */}\n <div style={styles.summaryRow}>\n <span style={styles.summaryLabel}>Est. Fee</span>\n <span style={{ color: \"#fff\", fontWeight: 500, fontSize: \"0.8rem\" }}>\n {estFeeTokens.toFixed(6)} {tokenSymbol}\n </span>\n </div>\n </div>\n\n {/* Order Type Toggle */}\n <div style={styles.orderTypeToggle}>\n <button\n type=\"button\"\n onClick={() => setOrderType(\"market\")}\n style={{\n ...styles.orderTypeButton,\n backgroundColor: orderType === \"market\" ? \"rgba(201, 162, 39, 0.2)\" : \"transparent\",\n color: orderType === \"market\" ? \"#C9A227\" : \"rgba(255, 255, 255, 0.5)\",\n }}\n >\n Market\n </button>\n <button\n type=\"button\"\n onClick={() => setOrderType(\"limit\")}\n style={{\n ...styles.orderTypeButton,\n backgroundColor: orderType === \"limit\" ? \"rgba(201, 162, 39, 0.2)\" : \"transparent\",\n color: orderType === \"limit\" ? \"#C9A227\" : \"rgba(255, 255, 255, 0.5)\",\n }}\n >\n Limit\n </button>\n </div>\n\n {/* Available Funds */}\n <div style={styles.availableFunds}>\n <span>Cash: ${availableCash.toLocaleString()}</span>\n <button type=\"button\" style={styles.addFundsButton}>\n Add Funds\n </button>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport styled, { keyframes, css } from \"styled-components\";\n\nimport loafLogoBanner from \"../assets/Loaf-logo-Banner.png\";\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.45;\n transform: scale(1);\n }\n 50% {\n opacity: 0.7;\n transform: scale(1.08);\n }\n`;\n\nconst shimmer = keyframes`\n 0% {\n background-position: -100% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`;\n\nconst LogoContainer = styled.span<{ $isGlowing?: boolean }>`\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.35rem 0.6rem;\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.05) 0%,\n rgba(240, 185, 11, 0.1) 50%,\n rgba(240, 185, 11, 0.05) 100%\n );\n border: 1px solid rgba(240, 185, 11, 0.3);\n border-radius: 5px;\n position: relative;\n overflow: visible;\n cursor: pointer;\n transition: all 0.3s ease;\n line-height: 1.4;\n\n ${({ $isGlowing }) =>\n $isGlowing\n ? css`\n border-color: rgba(240, 185, 11, 1);\n box-shadow:\n 0 0 25px rgba(240, 185, 11, 0.8),\n 0 0 40px rgba(240, 185, 11, 0.5),\n inset 0 0 20px rgba(240, 185, 11, 0.3);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.2) 0%,\n rgba(240, 185, 11, 0.3) 50%,\n rgba(240, 185, 11, 0.2) 100%\n );\n animation: quickPulse 0.35s ease-out;\n\n @keyframes quickPulse {\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n }\n `\n : null}\n\n @media (max-width: 768px) {\n padding: 0.3rem 0.4rem 0.3rem 0.25rem;\n gap: 0.25rem;\n border-radius: 4px;\n transition: none;\n }\n\n @media (max-width: 480px) {\n padding: 0.2rem 0.3rem 0.2rem 0.2rem;\n gap: 0.2rem;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border-color: rgba(240, 185, 11, 0.6);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.1) 0%,\n rgba(240, 185, 11, 0.15) 50%,\n rgba(240, 185, 11, 0.1) 100%\n );\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 185, 11, 0.2);\n }\n }\n\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent, rgba(240, 185, 11, 0.1), transparent);\n background-size: 200% 100%;\n animation: ${shimmer} 3s infinite;\n pointer-events: none;\n }\n`;\n\nconst IconWrapper = styled.span`\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: 16px;\n height: 16px;\n\n @media (max-width: 480px) {\n width: 14px;\n height: 14px;\n }\n`;\n\nconst IconCircle = styled.span<{ size: number; color: string; duration: number; delay: number }>`\n position: absolute;\n width: ${({ size }) => size}px;\n height: ${({ size }) => size}px;\n border: 2px solid ${({ color }) => color};\n border-radius: 50%;\n animation: ${pulse} ${({ duration }) => duration}s infinite cubic-bezier(0.4, 0, 0.6, 1);\n animation-delay: ${({ delay }) => delay}s;\n transform-origin: center;\n will-change: transform, opacity;\n`;\n\nconst IconCore = styled.span`\n width: 5px;\n height: 5px;\n background: linear-gradient(135deg, #0ecb81 0%, #2ecc71 100%);\n border-radius: 50%;\n box-shadow: 0 0 6px rgba(14, 203, 129, 0.6);\n position: relative;\n z-index: 1;\n`;\n\nconst LogoText = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 0.2rem;\n position: relative;\n z-index: 1;\n`;\n\nconst LoafLogoImage = styled.img`\n height: 20px;\n position: relative;\n z-index: 1;\n\n @media (max-width: 480px) {\n height: 18px;\n }\n`;\n\nconst LiquidityText = styled.span`\n font-size: 0.65rem;\n font-weight: 400;\n background: linear-gradient(135deg, #f0b90b 0%, #ffd700 50%, #f0b90b 100%);\n background-size: 200% auto;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n letter-spacing: 0.3px;\n opacity: 0.75;\n line-height: 1;\n\n @media (max-width: 480px) {\n font-size: 0.55rem;\n letter-spacing: 0.1px;\n }\n`;\n\nexport interface LoafLiquidityBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n isGlowing?: boolean;\n}\n\nexport const LoafLiquidityBadge = React.forwardRef<HTMLSpanElement, LoafLiquidityBadgeProps>(\n ({ className, isGlowing, onClick, children, ...props }, ref) => {\n return (\n <LogoContainer\n ref={ref}\n onClick={onClick}\n $isGlowing={isGlowing}\n className={className}\n role={onClick ? \"button\" : undefined}\n {...props}\n >\n <LogoText>\n <LoafLogoImage src={loafLogoBanner} alt=\"Loaf\" />\n <LiquidityText>{children ?? \"Liquidity\"}</LiquidityText>\n </LogoText>\n <IconWrapper>\n <IconCore />\n <IconCircle size={10} color=\"rgba(14, 203, 129, 0.5)\" duration={4} delay={0} />\n <IconCircle size={13} color=\"rgba(14, 203, 129, 0.35)\" duration={5.2} delay={0.7} />\n <IconCircle size={16} color=\"rgba(14, 203, 129, 0.25)\" duration={6.3} delay={1.3} />\n </IconWrapper>\n </LogoContainer>\n );\n }\n);\n\nLoafLiquidityBadge.displayName = \"LoafLiquidityBadge\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { LoafLiquidityBadge } from \"./loaf-liquidity-badge\";\n\nexport type OrderbookSide = \"ask\" | \"bid\";\n\nexport type OrderbookLevel = {\n price: number;\n amount: number;\n depth?: number;\n};\n\nexport type OrderbookTrade = {\n type: \"buy\" | \"sell\";\n price: number;\n amount: number;\n time?: string;\n tradeId?: number;\n};\n\nexport interface OrderbookProps extends React.HTMLAttributes<HTMLDivElement> {\n asks: OrderbookLevel[];\n bids: OrderbookLevel[];\n midPrice: number;\n midChangePercent?: number;\n trades?: OrderbookTrade[];\n priceLabel?: string;\n amountLabel?: string;\n precision?: number;\n amountPrecision?: number;\n defaultTab?: \"orderbook\" | \"trades\";\n onTabChange?: (tab: \"orderbook\" | \"trades\") => void;\n rightHeader?: React.ReactNode;\n variant?: \"auto\" | \"default\" | \"compact\";\n}\n\nfunction useViewportCompact(breakpoint: number) {\n const [isCompact, setIsCompact] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === \"undefined\") return;\n const check = () => setIsCompact(window.innerWidth <= breakpoint);\n check();\n window.addEventListener(\"resize\", check);\n return () => window.removeEventListener(\"resize\", check);\n }, [breakpoint]);\n\n return isCompact;\n}\n\nconst formatNumber = (value: number, precision: number) => value.toFixed(precision);\n\nfunction DepthRow({\n side,\n price,\n amount,\n depthPct,\n precision,\n amountPrecision,\n}: {\n side: OrderbookSide;\n price: number;\n amount: number;\n depthPct: number;\n precision: number;\n amountPrecision: number;\n}) {\n const isAsk = side === \"ask\";\n\n return (\n <div className=\"relative grid grid-cols-2 items-center gap-3 px-3 py-1.5\">\n <div\n className={cn(\n \"absolute inset-y-0 right-0\",\n isAsk ? \"bg-rose-900/30\" : \"bg-emerald-900/30\"\n )}\n style={{ width: `${clamp(depthPct, 0, 100)}%` }}\n />\n\n <div className={cn(\"relative z-[1] tabular-nums\", isAsk ? \"text-[#f6465d]\" : \"text-[#0ecb81]\")}\n >\n ${formatNumber(price, precision)}\n </div>\n <div className=\"relative z-[1] text-right tabular-nums text-white/90\">{formatNumber(amount, amountPrecision)}</div>\n </div>\n );\n}\n\nconst clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\nconst LEVEL_ROWS_VISIBLE = 6;\nconst DEPTH_ROW_HEIGHT_PX = 34;\nconst COMPACT_ROWS_VISIBLE = 5;\nconst COMPACT_ROW_HEIGHT_PX = 30;\nconst COMPACT_BREAKPOINT_PX = 1024;\n\nexport const Orderbook = React.forwardRef<HTMLDivElement, OrderbookProps>(\n (\n {\n asks,\n bids,\n midPrice,\n midChangePercent,\n trades = [],\n priceLabel = \"Price (USD)\",\n amountLabel = \"Amount\",\n precision = 2,\n amountPrecision = 2,\n defaultTab = \"orderbook\",\n onTabChange,\n rightHeader = <LoafLiquidityBadge className=\"text-[0.6rem]\" />,\n variant = \"auto\",\n className,\n ...props\n },\n ref\n ) => {\n const [tab, setTab] = React.useState<\"orderbook\" | \"trades\">(defaultTab);\n const [tradeFilter, setTradeFilter] = React.useState<\"all\" | \"buy\" | \"sell\">(\"all\");\n const viewportCompact = useViewportCompact(COMPACT_BREAKPOINT_PX);\n\n React.useEffect(() => {\n setTab(defaultTab);\n }, [defaultTab]);\n\n const handleTab = (next: \"orderbook\" | \"trades\") => {\n setTab(next);\n onTabChange?.(next);\n };\n\n const isCompact = variant === \"compact\" || (variant === \"auto\" && viewportCompact);\n const sectionHeight = isCompact\n ? COMPACT_ROWS_VISIBLE * COMPACT_ROW_HEIGHT_PX\n : LEVEL_ROWS_VISIBLE * DEPTH_ROW_HEIGHT_PX;\n\n const maxAskDepth = Math.max(1, ...asks.map((l) => l.depth ?? l.amount));\n const maxBidDepth = Math.max(1, ...bids.map((l) => l.depth ?? l.amount));\n\n const midClass =\n midChangePercent == null\n ? \"text-white\"\n : midChangePercent >= 0\n ? \"text-[#0ecb81]\"\n : \"text-[#f6465d]\";\n\n const tradeFiltered = trades.filter((t) => tradeFilter === \"all\" || t.type === tradeFilter);\n\n const layoutProps: OrderbookLayoutProps = {\n tab,\n handleTab,\n tradeFilter,\n setTradeFilter,\n rightHeader,\n priceLabel,\n amountLabel,\n tradeFiltered,\n precision,\n amountPrecision,\n asks,\n bids,\n maxAskDepth,\n maxBidDepth,\n midPrice,\n midChangePercent,\n midClass,\n sectionHeight,\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[520px] overflow-hidden rounded-[12px] border border-white/10 bg-[#111111] text-white shadow-md\",\n isCompact && \"max-w-none\",\n className\n )}\n {...props}\n >\n {isCompact ? (\n <MobileOrderbookLayout {...layoutProps} />\n ) : (\n <DesktopOrderbookLayout {...layoutProps} />\n )}\n </Card>\n );\n }\n);\n\nOrderbook.displayName = \"Orderbook\";\n\ntype OrderbookLayoutProps = {\n tab: \"orderbook\" | \"trades\";\n handleTab: (tab: \"orderbook\" | \"trades\") => void;\n tradeFilter: \"all\" | \"buy\" | \"sell\";\n setTradeFilter: React.Dispatch<React.SetStateAction<\"all\" | \"buy\" | \"sell\">>;\n rightHeader: React.ReactNode;\n priceLabel: string;\n amountLabel: string;\n tradeFiltered: OrderbookTrade[];\n precision: number;\n amountPrecision: number;\n asks: OrderbookLevel[];\n bids: OrderbookLevel[];\n maxAskDepth: number;\n maxBidDepth: number;\n midPrice: number;\n midChangePercent?: number;\n midClass: string;\n sectionHeight: number;\n};\n\nfunction DesktopOrderbookLayout({\n tab,\n handleTab,\n tradeFilter,\n setTradeFilter,\n rightHeader,\n priceLabel,\n amountLabel,\n tradeFiltered,\n precision,\n amountPrecision,\n asks,\n bids,\n maxAskDepth,\n maxBidDepth,\n midPrice,\n midChangePercent,\n midClass,\n sectionHeight,\n}: OrderbookLayoutProps) {\n return (\n <>\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={() => handleTab(\"orderbook\")}\n className={cn(\n \"relative pb-2 text-sm font-semibold\",\n tab === \"orderbook\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Orderbook\n {tab === \"orderbook\" ? (\n <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" />\n ) : null}\n </button>\n <button\n type=\"button\"\n onClick={() => handleTab(\"trades\")}\n className={cn(\n \"relative pb-2 text-sm font-medium\",\n tab === \"trades\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Trades\n {tab === \"trades\" ? (\n <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" />\n ) : null}\n </button>\n </div>\n\n {tab === \"trades\" ? (\n <div className=\"flex items-center gap-1 text-xs\">\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"all\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"all\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n All\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"buy\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"buy\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Buy\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"sell\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"sell\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Sell\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-3\">{rightHeader}</div>\n )}\n </div>\n\n <div className=\"px-4 pt-2\">\n <div className=\"grid grid-cols-2 gap-3 px-3 py-2 text-xs text-white/60\">\n <div>{priceLabel}</div>\n <div className=\"text-right\">{amountLabel}</div>\n </div>\n\n {tab === \"trades\" ? (\n <div\n className=\"max-h-[380px] overflow-y-auto overflow-x-hidden\"\n style={{ scrollbarGutter: \"stable\" }}\n >\n {tradeFiltered.length === 0 ? (\n <div className=\"px-3 py-10 text-center text-sm text-white/50\">No trades</div>\n ) : (\n <div className=\"divide-y divide-white/5\">\n {tradeFiltered.map((trade, i) => (\n <div\n key={`${trade.type}-${trade.price}-${trade.amount}-${trade.time ?? i}`}\n className=\"grid grid-cols-2 items-center gap-3 px-3 py-1.5\"\n >\n <div\n className={cn(\n \"tabular-nums\",\n trade.type === \"buy\" ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n ${formatNumber(trade.price, precision)}\n </div>\n <div className=\"text-right tabular-nums text-white/90\">\n {formatNumber(trade.amount, amountPrecision)}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <>\n <div\n className=\"divide-y divide-white/5 overflow-y-auto\"\n style={{ height: `${sectionHeight}px`, scrollbarGutter: \"stable\" }}\n >\n {asks.map((l, idx) => (\n <DepthRow\n key={`ask-${idx}-${l.price}-${l.amount}`}\n side=\"ask\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxAskDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n\n <div className=\"grid grid-cols-2 items-center gap-3 bg-[#0b1a24] px-3 py-2\">\n <div className={cn(\"text-lg font-semibold tabular-nums\", midClass)}>\n ${formatNumber(midPrice, precision)}\n {midChangePercent == null ? null : (\n <span className={cn(\"ml-2 text-sm font-semibold tabular-nums\", midClass)}>\n {midChangePercent >= 0 ? \"+\" : \"\"}\n {midChangePercent.toFixed(2)}%\n </span>\n )}\n </div>\n <div />\n </div>\n\n <div\n className=\"divide-y divide-white/5 overflow-y-auto\"\n style={{ height: `${sectionHeight}px`, scrollbarGutter: \"stable\" }}\n >\n {bids.map((l, idx) => (\n <DepthRow\n key={`bid-${idx}-${l.price}-${l.amount}`}\n side=\"bid\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxBidDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n );\n}\n\nfunction MobileOrderbookLayout({\n tab,\n handleTab,\n tradeFilter,\n setTradeFilter,\n rightHeader,\n priceLabel,\n amountLabel,\n tradeFiltered,\n precision,\n amountPrecision,\n asks,\n bids,\n maxAskDepth,\n maxBidDepth,\n midPrice,\n midChangePercent,\n midClass,\n sectionHeight: _sectionHeight,\n}: OrderbookLayoutProps) {\n const visibleAsks = React.useMemo(() => asks.slice(0, COMPACT_ROWS_VISIBLE), [asks]);\n const visibleBids = React.useMemo(() => bids.slice(0, COMPACT_ROWS_VISIBLE), [bids]);\n\n return (\n <>\n <div className=\"px-3 pt-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span\n onClick={() => handleTab(\"orderbook\")}\n style={{\n cursor: \"pointer\",\n fontSize: \"0.72rem\",\n fontWeight: tab === \"orderbook\" ? 600 : 400,\n color: tab === \"orderbook\" ? \"#fff\" : \"rgba(255,255,255,0.6)\",\n borderBottom: tab === \"orderbook\" ? \"2px solid #C9A227\" : \"none\",\n paddingBottom: \"0.2rem\",\n }}\n >\n Orderbook\n </span>\n <span\n onClick={() => handleTab(\"trades\")}\n style={{\n cursor: \"pointer\",\n fontSize: \"0.72rem\",\n fontWeight: tab === \"trades\" ? 600 : 400,\n color: tab === \"trades\" ? \"#fff\" : \"rgba(255,255,255,0.6)\",\n borderBottom: tab === \"trades\" ? \"2px solid #C9A227\" : \"none\",\n paddingBottom: \"0.2rem\",\n }}\n >\n Trades\n </span>\n </div>\n\n {tab === \"trades\" ? (\n <div className=\"flex items-center gap-1 text-[0.6rem] text-white/70\">\n {([\"all\", \"buy\", \"sell\"] as const).map((filter) => (\n <button\n key={filter}\n type=\"button\"\n onClick={() => setTradeFilter(filter)}\n className={cn(\n \"rounded-md border border-white/15 px-2 py-1\",\n tradeFilter === filter ? \"bg-white/15 text-white\" : \"hover:bg-white/10\"\n )}\n >\n {filter === \"all\" ? \"All\" : filter === \"buy\" ? \"Buy\" : \"Sell\"}\n </button>\n ))}\n </div>\n ) : (\n <div className=\"hidden text-xs text-white/70 sm:flex\">{rightHeader}</div>\n )}\n </div>\n </div>\n\n {tab === \"orderbook\" ? (\n <div className=\"flex flex-1 flex-col overflow-hidden px-3 pb-2\">\n <div\n className=\"inline-flex sm:hidden\"\n style={{ padding: \"0.5rem 0\", marginBottom: \"0.5rem\", transform: \"scale(0.85)\", transformOrigin: \"left center\" }}\n >\n {rightHeader}\n </div>\n\n <div\n className=\"grid text-white/60\"\n style={{ gridTemplateColumns: \"1.2fr 0.8fr\", padding: \"0.3rem 0 0.2rem 0\", fontSize: \"0.75rem\", fontWeight: 500 }}\n >\n <div>{priceLabel}</div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\" }}>{amountLabel}</div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {visibleAsks.map((l, idx) => (\n <MobileDepthRow\n key={`mobile-ask-${idx}-${l.price}-${l.amount}`}\n side=\"ask\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxAskDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n\n <div\n className=\"grid\"\n style={{\n gridTemplateColumns: \"1.2fr 0.8fr\",\n padding: \"0.3rem 0\",\n fontSize: \"0.8rem\",\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n }}\n >\n <div\n style={{ fontWeight: \"bold\", display: \"flex\", alignItems: \"center\", gap: \"8px\" }}\n className={midClass}\n >\n ${formatNumber(midPrice, precision)}\n {midChangePercent != null && (\n <span className={cn(\"text-[0.75rem] font-semibold tabular-nums\", midClass)}>\n {midChangePercent >= 0 ? \"+\" : \"\"}{midChangePercent.toFixed(2)}%\n </span>\n )}\n </div>\n <div />\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {visibleBids.map((l, idx) => (\n <MobileDepthRow\n key={`mobile-bid-${idx}-${l.price}-${l.amount}`}\n side=\"bid\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxBidDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n </div>\n ) : (\n <div className=\"flex flex-1 flex-col overflow-hidden px-3 pb-2\">\n <div\n className=\"grid text-white/60\"\n style={{ gridTemplateColumns: \"1.2fr 0.8fr\", padding: \"0.3rem 0 0.2rem 0\", fontSize: \"0.75rem\", fontWeight: 500 }}\n >\n <div>{priceLabel}</div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\" }}>{amountLabel}</div>\n </div>\n\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {tradeFiltered.length === 0 ? (\n <div className=\"py-6 text-center text-[0.7rem] text-white/50\">No trades</div>\n ) : (\n tradeFiltered.map((trade, i) => (\n <div\n key={`${trade.type}-${trade.price}-${trade.amount}-${trade.time ?? i}`}\n className=\"grid\"\n style={{ gridTemplateColumns: \"1.2fr 0.8fr\", padding: \"0.2rem 0\", fontSize: \"0.8rem\" }}\n >\n <div\n style={{ color: trade.type === \"buy\" ? \"#0ecb81\" : \"#f6465d\", fontWeight: 500 }}\n >\n ${formatNumber(trade.price, precision)}\n </div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\" }}>\n {formatNumber(trade.amount, amountPrecision)}\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction MobileDepthRow({\n side,\n price,\n amount,\n depthPct,\n precision,\n amountPrecision,\n}: {\n side: OrderbookSide;\n price: number;\n amount: number;\n depthPct: number;\n precision: number;\n amountPrecision: number;\n}) {\n const isAsk = side === \"ask\";\n\n return (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"1.2fr 0.8fr\",\n padding: \"0.2rem 0\",\n fontSize: \"0.8rem\",\n position: \"relative\",\n }}\n >\n <div style={{ position: \"relative\", zIndex: 1, color: isAsk ? \"#f6465d\" : \"#0ecb81\" }}>\n ${formatNumber(price, precision)}\n </div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\", position: \"relative\", zIndex: 1 }}>\n {formatNumber(amount, amountPrecision)}\n </div>\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n width: `${clamp(depthPct, 0, 100)}%`,\n backgroundColor: isAsk ? \"#f6465d\" : \"#0ecb81\",\n opacity: 0.1,\n zIndex: 0,\n }}\n />\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PropertyTourProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title: string;\n src: string;\n poster?: string;\n autoPlay?: boolean;\n muted?: boolean;\n loop?: boolean;\n controls?: boolean;\n playsInline?: boolean;\n};\n\ntype FullscreenDocument = Document & {\n webkitFullscreenElement?: Element | null;\n mozFullScreenElement?: Element | null;\n msFullscreenElement?: Element | null;\n};\n\nexport const PropertyTour = React.forwardRef<HTMLDivElement, PropertyTourProps>(\n (\n {\n className,\n title,\n src,\n poster,\n autoPlay = true,\n muted = true,\n loop = true,\n controls = true,\n playsInline = true,\n ...props\n },\n ref\n ) => {\n const videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n React.useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleFullscreenChange = () => {\n const d = document as FullscreenDocument;\n const isFullscreen = !!(\n d.fullscreenElement ||\n d.webkitFullscreenElement ||\n d.mozFullScreenElement ||\n d.msFullscreenElement\n );\n\n if (isFullscreen) {\n video.style.objectFit = \"contain\";\n video.style.width = \"100vw\";\n video.style.height = \"100vh\";\n video.style.position = \"fixed\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"9999\";\n } else {\n video.style.objectFit = \"cover\";\n video.style.width = \"100%\";\n video.style.height = \"100%\";\n video.style.position = \"absolute\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"auto\";\n }\n };\n\n video.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n return () => {\n video.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n };\n }, []);\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[820px] rounded-[12px] border border-white/10 bg-[#111111] text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"px-6 pb-0 pt-6\">\n <CardTitle className=\"m-0 text-lg font-semibold text-white\">{title}</CardTitle>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-5\">\n <div className=\"relative aspect-video w-full overflow-hidden rounded-lg bg-black\">\n <video\n ref={videoRef}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n controls={controls}\n loop={loop}\n autoPlay={autoPlay}\n muted={muted}\n playsInline={playsInline}\n poster={poster}\n >\n <source src={src} />\n Your browser does not support the video tag.\n </video>\n </div>\n </div>\n </Card>\n );\n }\n);\n\nPropertyTour.displayName = \"PropertyTour\";\n","import * as React from \"react\";\n\nimport { Newspaper } from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyNewsType = \"property\" | \"market\" | (string & {});\n\nexport type PropertyNewsItem = {\n id?: string;\n title: string;\n date: string | Date;\n type?: PropertyNewsType;\n displayId?: string;\n isNew?: boolean;\n};\n\nexport interface PropertyNewsUpdatesProps extends React.HTMLAttributes<HTMLDivElement> {\n items: PropertyNewsItem[];\n heading?: string;\n subheading?: string;\n emptyState?: React.ReactNode;\n highlightFirst?: boolean;\n}\n\nconst ITEMS_PER_PAGE = 4;\nconst ROW_HEIGHT_PX = 86;\n\nconst ensureAnimationsInjected = () => {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(\"property-news-updates-animations\")) return;\n const style = document.createElement(\"style\");\n style.id = \"property-news-updates-animations\";\n style.textContent = `\n @keyframes propertyNewsPulse {\n 0% { opacity: 0.6; transform: scale(0.9); }\n 50% { opacity: 1; transform: scale(1); }\n 100% { opacity: 0.6; transform: scale(0.9); }\n }\n\n @keyframes propertyNewsSlideIn {\n from { transform: translateY(-6px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n};\n\nconst categoryStyles = {\n property: {\n label: \"Property Update\",\n backgroundColor: \"rgba(14, 203, 129, 0.15)\",\n borderColor: \"rgba(14, 203, 129, 0.45)\",\n color: \"#0ecb81\",\n },\n market: {\n label: \"Market News\",\n backgroundColor: \"rgba(248, 209, 47, 0.15)\",\n borderColor: \"rgba(248, 209, 47, 0.45)\",\n color: \"#f8d12f\",\n },\n} as const;\n\nconst formatDate = (value: string | Date) => {\n if (typeof value === \"string\") return value;\n if (!(value instanceof Date) || Number.isNaN(value.getTime())) return \"\";\n return value.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n};\n\nexport const PropertyNewsUpdates = React.forwardRef<HTMLDivElement, PropertyNewsUpdatesProps>(\n (\n {\n className,\n heading = \"Property News & Headlines\",\n subheading,\n items,\n emptyState,\n highlightFirst = true,\n ...props\n },\n ref\n ) => {\n const [page, setPage] = React.useState(0);\n\n React.useEffect(() => {\n ensureAnimationsInjected();\n }, []);\n\n const hasItems = Array.isArray(items) && items.length > 0;\n const totalPages = React.useMemo(() => (hasItems ? Math.max(1, Math.ceil(items.length / ITEMS_PER_PAGE)) : 1), [hasItems, items.length]);\n\n React.useEffect(() => {\n setPage((prev) => Math.min(prev, totalPages - 1));\n }, [totalPages]);\n\n const paginatedItems = hasItems\n ? items.slice(page * ITEMS_PER_PAGE, page * ITEMS_PER_PAGE + ITEMS_PER_PAGE)\n : [];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full max-w-[840px] rounded-2xl border border-white/10 bg-[#0b0e10] p-5 text-white shadow-[0_20px_40px_rgba(0,0,0,0.35)]\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-lg font-semibold text-white\">{heading}</p>\n {subheading ? <p className=\"text-sm text-white/60\">{subheading}</p> : null}\n </div>\n <div\n className=\"inline-flex items-center font-semibold uppercase text-emerald-300\"\n style={{ gap: \"0.35rem\", fontSize: \"0.8rem\", letterSpacing: \"0.15em\" }}\n >\n <span\n style={{\n display: \"inline-block\",\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n backgroundColor: \"#34d399\",\n animation: \"propertyNewsPulse 2s infinite\",\n }}\n />\n LIVE\n </div>\n </div>\n\n <div\n className=\"mt-4 flex flex-col gap-3\"\n style={{ minHeight: `${ITEMS_PER_PAGE * ROW_HEIGHT_PX}px` }}\n >\n {hasItems\n ? paginatedItems.map((item, index) => {\n const absoluteIndex = page * ITEMS_PER_PAGE + index;\n const key = item.displayId ?? item.id ?? `${item.title}-${absoluteIndex}`;\n const styles =\n categoryStyles[item.type as keyof typeof categoryStyles] ?? categoryStyles.market;\n const dateLabel =\n (item.isNew ?? (highlightFirst && absoluteIndex === 0))\n ? \"Just now\"\n : typeof item.date === \"string\" && item.date.trim().length > 0\n ? item.date\n : formatDate(item.date);\n const isHighlighted = item.isNew ?? (highlightFirst && absoluteIndex === 0);\n\n return (\n <div\n key={key}\n style={{\n padding: \"0.75rem\",\n borderRadius: \"6px\",\n backgroundColor: isHighlighted ? \"rgba(14, 203, 129, 0.1)\" : \"transparent\",\n border: \"1px solid transparent\",\n transition: \"background-color 0.2s\",\n animation: item.isNew ? \"propertyNewsSlideIn 0.5s ease-out\" : undefined,\n }}\n >\n <p style={{ fontSize: \"0.9375rem\", fontWeight: 500, marginBottom: \"0.35rem\" }}>\n {item.title}\n </p>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"#b5b8c5\",\n }}\n >\n <span style={{ color: isHighlighted ? \"#0ecb81\" : \"inherit\" }}>{dateLabel}</span>\n <span\n style={{\n padding: \"0.25rem 0.6rem\",\n borderRadius: \"4px\",\n border: `1px solid ${styles.borderColor}`,\n backgroundColor: styles.backgroundColor,\n color: styles.color,\n fontSize: \"0.68rem\",\n fontWeight: 600,\n textTransform: \"uppercase\",\n }}\n >\n {item.type === \"property\" ? styles.label : \"Market News\"}\n </span>\n </div>\n </div>\n );\n })\n : emptyState ?? (\n <div className=\"flex flex-col items-center justify-center rounded-2xl border border-dashed border-white/20 px-6 py-10 text-center text-sm text-white/60\">\n <Newspaper className=\"mb-3 h-8 w-8 text-white/40\" />\n No property news yet. Updates will land here as soon as we receive new intelligence.\n </div>\n )}\n </div>\n\n {hasItems && totalPages > 1 ? (\n <div className=\"mt-4 flex items-center justify-between text-xs text-white/60\">\n <button\n type=\"button\"\n onClick={() => setPage((prev) => Math.max(0, prev - 1))}\n disabled={page === 0}\n className={cn(\n \"rounded-full border border-white/15 px-3 py-1 uppercase tracking-[0.2em]\",\n page === 0 ? \"opacity-40 cursor-not-allowed\" : \"hover:border-white/40\"\n )}\n >\n Prev\n </button>\n <span className=\"font-medium text-white/70\">\n Page {page + 1} / {totalPages}\n </span>\n <button\n type=\"button\"\n onClick={() => setPage((prev) => Math.min(totalPages - 1, prev + 1))}\n disabled={page >= totalPages - 1}\n className={cn(\n \"rounded-full border border-white/15 px-3 py-1 uppercase tracking-[0.2em]\",\n page >= totalPages - 1 ? \"opacity-40 cursor-not-allowed\" : \"hover:border-white/40\"\n )}\n >\n Next\n </button>\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nPropertyNewsUpdates.displayName = \"PropertyNewsUpdates\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\ntype RangeInputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n>;\n\nexport interface TradingSliderProps extends RangeInputProps {\n /**\n * Controlled slider value\n */\n value?: number;\n /**\n * Initial value for the uncontrolled mode\n */\n defaultValue?: number;\n /**\n * Fires whenever the thumb value changes\n */\n onValueChange?: (value: number, event: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Label displayed on top of the slider card\n */\n label?: string;\n /**\n * Small helper copy rendered under the label\n */\n helperText?: string;\n /**\n * Custom formatter for the highlighted value on the right\n */\n formatValue?: (value: number) => React.ReactNode;\n /**\n * Text shown next to the minimum tick\n */\n minLabel?: string;\n /**\n * Text shown next to the maximum tick\n */\n maxLabel?: string;\n /**\n * Accent color used for the filled portion of the track\n */\n accentColor?: string;\n}\n\nconst defaultFormat = (value: number) =>\n new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n notation: value >= 100000 ? \"compact\" : \"standard\",\n maximumFractionDigits: value >= 1000 ? 0 : 2,\n }).format(value);\n\nexport const TradingSlider = React.forwardRef<HTMLInputElement, TradingSliderProps>(\n (\n {\n label = \"Trade size\",\n helperText = \"Drag to pick the desired notional.\",\n min = 0,\n max = 100000,\n step = 1000,\n minLabel,\n maxLabel,\n formatValue = defaultFormat,\n accentColor = \"#14b8a6\",\n value,\n defaultValue,\n onValueChange,\n className,\n ...rest\n },\n ref\n ) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState(\n defaultValue ?? (typeof min === \"number\" ? min : 0)\n );\n\n const currentValue = isControlled ? Number(value) : internalValue;\n const parsedMin = Number(min ?? 0);\n const parsedMax = Number(max ?? 100);\n const percent =\n ((currentValue - parsedMin) / (parsedMax - parsedMin || 1)) * 100;\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(event.target.value);\n if (!isControlled) {\n setInternalValue(next);\n }\n onValueChange?.(next, event);\n };\n\n return (\n <div className={cn(\"rounded-3xl border border-slate-200 bg-white p-6 shadow-sm\", className)}>\n <div className=\"flex items-end justify-between gap-4\">\n <div>\n <p className=\"text-sm font-medium uppercase tracking-wide text-slate-500\">{label}</p>\n <p className=\"text-sm text-slate-500\">{helperText}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs uppercase tracking-wide text-slate-500\">Selected</p>\n <p className=\"text-2xl font-semibold text-slate-900\">\n {formatValue(currentValue)}\n </p>\n </div>\n </div>\n <div className=\"mt-6 space-y-3\">\n <div className=\"relative\">\n <input\n type=\"range\"\n min={parsedMin}\n max={parsedMax}\n step={step}\n value={currentValue}\n onChange={handleChange}\n ref={ref}\n className=\"h-3 w-full appearance-none rounded-full bg-slate-200 accent-teal-500\"\n style={{\n background: `linear-gradient(90deg, ${accentColor} ${percent}%, #e2e8f0 ${percent}%)`,\n }}\n {...rest}\n />\n <div\n className=\"pointer-events-none absolute -top-7 translate-x-1/2 rounded-full border border-slate-200 bg-white px-3 py-1 text-xs font-medium text-slate-700 shadow\"\n style={{ right: `calc(${100 - percent}% - 12px)` }}\n >\n {formatValue(currentValue)}\n </div>\n </div>\n <div className=\"flex justify-between text-xs font-semibold text-slate-500\">\n <span>{minLabel ?? formatValue(parsedMin)}</span>\n <span>{maxLabel ?? formatValue(parsedMax)}</span>\n </div>\n </div>\n </div>\n );\n }\n);\n\nTradingSlider.displayName = \"TradingSlider\";\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type MobileTradeNavItem = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n};\n\nexport type MobileTradeNavProps = React.HTMLAttributes<HTMLDivElement> & {\n items: MobileTradeNavItem[];\n activeId: string;\n onChange?: (itemId: string) => void;\n};\n\nconst MobileToggleContainer = styled.div`\n display: none;\n \n @media (max-width: 1024px) {\n display: flex;\n gap: 0.5rem;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: var(--color-card-darker, #111);\n padding: 0.75rem 1rem;\n padding-bottom: calc(0.75rem + env(safe-area-inset-bottom, 0px));\n border-top: 1px solid var(--color-border);\n z-index: 100;\n box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.3);\n }\n`;\n\nconst MobileToggleButton = styled.button<{ active: boolean }>`\n flex: 1;\n padding: 0.75rem;\n background-color: ${(props) => (props.active ? \"var(--color-accent)\" : \"transparent\")};\n color: ${(props) => (props.active ? \"#000\" : \"var(--color-text-secondary)\")};\n border: ${(props) =>\n props.active ? \"1px solid var(--color-accent)\" : \"1px solid rgba(255, 255, 255, 0.2)\"};\n border-radius: 6px;\n font-size: 0.9rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n \n &:hover {\n background-color: ${(props) =>\n props.active ? \"var(--color-accent-hover)\" : \"rgba(255, 255, 255, 0.05)\"};\n border-color: ${(props) =>\n props.active ? \"var(--color-accent)\" : \"rgba(255, 255, 255, 0.3)\"};\n }\n \n @media (max-width: 480px) {\n font-size: 0.85rem;\n padding: 0.6rem 0.5rem;\n }\n`;\n\nexport const MobileTradeNav = React.forwardRef<HTMLDivElement, MobileTradeNavProps>(\n ({ className, items, activeId, onChange, ...props }, ref) => {\n return (\n <MobileToggleContainer ref={ref} className={cn(className)} {...props}>\n {items.map((item) => (\n <MobileToggleButton\n key={item.id}\n type=\"button\"\n active={item.id === activeId}\n onClick={() => onChange?.(item.id)}\n >\n {item.icon}\n {item.label}\n </MobileToggleButton>\n ))}\n </MobileToggleContainer>\n );\n }\n);\n\nMobileTradeNav.displayName = \"MobileTradeNav\";\n","import * as React from 'react'\n\nexport type TradeConfirmationModalDetails = {\n type: 'buy' | 'sell'\n orderType: 'market' | 'limit'\n quantity: number\n price?: number | null\n totalValue?: number | null\n tokenSymbol: string\n willExecuteImmediately?: boolean\n}\n\nexport type TradeConfirmationModalProps = {\n isOpen: boolean\n onClose: () => void\n onConfirm: () => void\n orderDetails?: TradeConfirmationModalDetails | null\n className?: string\n estimatedFeeUsd?: number | null\n estimatedFeeBps?: number | null\n totalWithFeesUsd?: number | null\n confirmDisabled?: boolean\n confirmLoading?: boolean\n rememberChoiceChecked?: boolean\n rememberChoiceLabel?: string\n onRememberChoiceChange?: (checked: boolean) => void\n}\n\nfunction formatPrice(value: number | null | undefined): string {\n if (value == null || Number.isNaN(value)) {\n return '0.00'\n }\n return value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n}\n\nfunction formatQuantity(value: number | null | undefined): string {\n if (value == null || Number.isNaN(value)) {\n return '0'\n }\n return value.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })\n}\n\nfunction formatCurrency(value?: number | null): string {\n if (value == null || Number.isNaN(value)) return '—'\n return `$${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`\n}\n\nconst overlayStyle: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n backdropFilter: 'blur(4px)',\n padding: '1rem',\n}\n\nconst modalBaseStyle: React.CSSProperties = {\n background: 'linear-gradient(135deg, rgba(26, 29, 35, 0.95) 0%, rgba(26, 29, 35, 0.98) 100%)',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n borderRadius: '16px',\n padding: '2rem',\n width: '100%',\n maxWidth: '480px',\n boxShadow: '0 20px 60px rgba(0, 0, 0, 0.5)',\n color: '#fff',\n}\n\nconst headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '1.5rem',\n paddingBottom: '1rem',\n borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n}\n\nconst titleStyle: React.CSSProperties = {\n margin: 0,\n fontSize: '1.25rem',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n}\n\nconst badgeBaseStyle: React.CSSProperties = {\n display: 'inline-block',\n padding: '0.25rem 0.75rem',\n borderRadius: '6px',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n}\n\nconst detailRowBase: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.75rem 0',\n borderBottom: '1px solid rgba(255, 255, 255, 0.08)',\n}\n\nconst detailLabelStyle: React.CSSProperties = {\n color: 'rgba(255, 255, 255, 0.6)',\n fontSize: '0.9rem',\n}\n\nconst detailValueStyle: React.CSSProperties = {\n color: '#fff',\n fontWeight: 500,\n fontSize: '0.95rem',\n}\n\nconst summaryBoxStyle: React.CSSProperties = {\n background: 'rgba(255, 255, 255, 0.03)',\n border: '1px solid rgba(255, 255, 255, 0.08)',\n borderRadius: '8px',\n padding: '1rem',\n marginBottom: '1.5rem',\n}\n\nconst summaryTextStyle: React.CSSProperties = {\n margin: 0,\n color: 'rgba(255, 255, 255, 0.8)',\n fontSize: '0.9rem',\n lineHeight: 1.5,\n}\n\nconst rememberChoiceRowStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '1.25rem',\n color: 'rgba(255, 255, 255, 0.8)',\n fontSize: '0.85rem',\n}\n\nconst rememberChoiceCheckboxBoxStyle: React.CSSProperties = {\n width: '18px',\n height: '18px',\n borderRadius: '4px',\n border: '1px solid rgba(255, 255, 255, 0.4)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.85rem',\n fontWeight: 700,\n transition: 'all 0.2s ease',\n lineHeight: 1,\n}\n\nconst rememberChoiceHiddenInputStyle: React.CSSProperties = {\n position: 'absolute',\n opacity: 0,\n pointerEvents: 'none',\n width: 0,\n height: 0,\n}\n\nconst buttonGroupStyle: React.CSSProperties = {\n display: 'flex',\n gap: '1rem',\n justifyContent: 'flex-end',\n}\n\nconst buttonBaseStyle: React.CSSProperties = {\n padding: '0.75rem 1.5rem',\n borderRadius: '8px',\n fontWeight: 600,\n fontSize: '0.95rem',\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n border: 'none',\n}\n\nexport function TradeConfirmationModal({\n isOpen,\n onClose,\n onConfirm,\n orderDetails,\n className,\n estimatedFeeUsd: _estimatedFeeUsd,\n estimatedFeeBps: _estimatedFeeBps,\n totalWithFeesUsd,\n confirmDisabled,\n confirmLoading,\n rememberChoiceChecked = false,\n rememberChoiceLabel = 'Remember this choice and auto-confirm next time',\n onRememberChoiceChange,\n}: TradeConfirmationModalProps): React.ReactElement | null {\n if (!isOpen || !orderDetails) return null\n\n const { type, orderType, quantity, price, totalValue, tokenSymbol, willExecuteImmediately } = orderDetails\n const isBuy = type === 'buy'\n const isLimit = orderType === 'limit'\n const netLabel = `Est. Total ${isBuy ? 'Cost' : 'Proceeds'}`\n const grossFallback = totalValue != null ? `$${formatPrice(totalValue)}` : '—'\n const netValue = totalWithFeesUsd != null ? formatCurrency(totalWithFeesUsd) : grossFallback\n\n const detailRows: Array<{ label: string; value: React.ReactNode; highlight?: boolean }> = [\n { label: 'Order Type', value: isLimit ? 'Limit Order' : 'Market Order' },\n { label: 'Token', value: tokenSymbol },\n { label: 'Quantity', value: `${formatQuantity(quantity)} tokens`, highlight: true },\n { label: 'Price', value: isLimit ? `$${formatPrice(price)}` : 'Market' },\n ]\n\n detailRows.push({ label: netLabel, value: netValue, highlight: true })\n\n const accentColor = isBuy ? '#0ecb81' : '#f6465d'\n const badgeStyle = {\n ...badgeBaseStyle,\n color: accentColor,\n border: `1px solid ${isBuy ? 'rgba(14, 203, 129, 0.3)' : 'rgba(246, 70, 93, 0.3)'}`,\n background: isBuy\n ? 'linear-gradient(135deg, rgba(14, 203, 129, 0.2) 0%, rgba(14, 203, 129, 0.1) 100%)'\n : 'linear-gradient(135deg, rgba(246, 70, 93, 0.2) 0%, rgba(246, 70, 93, 0.1) 100%)',\n } satisfies React.CSSProperties\n\n const cancelButtonStyle: React.CSSProperties = {\n ...buttonBaseStyle,\n background: 'rgba(255, 255, 255, 0.1)',\n color: 'rgba(255, 255, 255, 0.8)',\n border: '1px solid rgba(255, 255, 255, 0.2)',\n }\n\n const confirmButtonStyle: React.CSSProperties = {\n ...buttonBaseStyle,\n color: '#fff',\n background: isBuy\n ? 'linear-gradient(135deg, #0ecb81 0%, #0ba968 100%)'\n : 'linear-gradient(135deg, #f6465d 0%, #d93850 100%)',\n boxShadow: isBuy\n ? '0 4px 12px rgba(14, 203, 129, 0.3)'\n : '0 4px 12px rgba(246, 70, 93, 0.3)',\n opacity: confirmDisabled || confirmLoading ? 0.6 : 1,\n cursor: confirmDisabled || confirmLoading ? 'not-allowed' : 'pointer',\n }\n\n const showRememberChoice = typeof onRememberChoiceChange === 'function'\n\n return (\n <div style={overlayStyle} onClick={onClose} role=\"dialog\" aria-modal=\"true\">\n <div style={modalBaseStyle} className={className} onClick={(event) => event.stopPropagation()}>\n <header style={headerStyle}>\n <h3 style={titleStyle}>\n Confirm Order\n <span style={badgeStyle}>{isBuy ? 'BUY' : 'SELL'}</span>\n </h3>\n </header>\n\n <div style={{ marginBottom: '1.5rem' }}>\n {detailRows.map((row, index) => (\n <div\n key={`${row.label}-${index}`}\n style={{\n ...detailRowBase,\n borderBottom: index === detailRows.length - 1 ? 'none' : detailRowBase.borderBottom,\n }}\n >\n <span style={detailLabelStyle}>{row.label}</span>\n <span\n style={{\n ...detailValueStyle,\n color: row.highlight ? accentColor : detailValueStyle.color,\n fontWeight: row.highlight ? 600 : detailValueStyle.fontWeight,\n }}\n >\n {row.value}\n </span>\n </div>\n ))}\n </div>\n\n <section style={summaryBoxStyle}>\n <p style={summaryTextStyle}>\n {isLimit ? (\n willExecuteImmediately ? (\n <>\n Your limit {isBuy ? 'buy' : 'sell'} order will <strong style={{ color: '#fff' }}>execute immediately</strong> at market\n price because your limit price of <strong style={{ color: '#fff' }}>${formatPrice(price)}</strong> is\n {isBuy ? ' above' : ' below'} the current market.\n </>\n ) : (\n <>\n Your limit {isBuy ? 'buy' : 'sell'} order for{' '}\n <strong style={{ color: '#fff' }}>{formatQuantity(quantity)} tokens</strong> at{' '}\n <strong style={{ color: '#fff' }}>${formatPrice(price)}</strong> will be placed.\n </>\n )\n ) : (\n <>\n Your market {isBuy ? 'buy' : 'sell'} order for{' '}\n <strong style={{ color: '#fff' }}>{formatQuantity(quantity)} tokens</strong> will execute immediately at the best available\n market price.\n </>\n )}\n </p>\n </section>\n\n {showRememberChoice ? (\n <label style={{ ...rememberChoiceRowStyle, position: 'relative' }}>\n <input\n type=\"checkbox\"\n checked={rememberChoiceChecked}\n onChange={(event) => onRememberChoiceChange?.(event.target.checked)}\n style={rememberChoiceHiddenInputStyle}\n />\n <span\n aria-hidden=\"true\"\n style={{\n ...rememberChoiceCheckboxBoxStyle,\n borderColor: rememberChoiceChecked ? accentColor : rememberChoiceCheckboxBoxStyle.border as string,\n background: rememberChoiceChecked\n ? `linear-gradient(135deg, ${accentColor}33, ${accentColor}22)`\n : 'transparent',\n color: rememberChoiceChecked ? accentColor : 'transparent',\n }}\n >\n ✓\n </span>\n <span>{rememberChoiceLabel}</span>\n </label>\n ) : null}\n\n <div style={buttonGroupStyle}>\n <button type=\"button\" onClick={onClose} style={cancelButtonStyle}>\n Cancel\n </button>\n <button type=\"button\" onClick={confirmDisabled ? undefined : onConfirm} disabled={confirmDisabled || confirmLoading} style={confirmButtonStyle}>\n {confirmLoading ? 'Submitting…' : `Confirm ${isBuy ? 'Buy' : 'Sell'}`}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","import * as React from \"react\";\nimport styled, { keyframes } from \"styled-components\";\n\nimport loafLogoBanner from \"../assets/Loaf-logo-Banner.png\";\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.45;\n transform: scale(1);\n }\n 50% {\n opacity: 0.7;\n transform: scale(1.08);\n }\n`;\n\nconst shimmer = keyframes`\n 0% {\n background-position: -100% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`;\n\nconst LogoContainer = styled.span<{ $isGlowing?: boolean }>`\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.35rem 0.6rem;\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.05) 0%,\n rgba(240, 185, 11, 0.1) 50%,\n rgba(240, 185, 11, 0.05) 100%\n );\n border: 1px solid rgba(240, 185, 11, 0.3);\n border-radius: 5px;\n position: relative;\n overflow: visible;\n cursor: pointer;\n transition: all 0.3s ease;\n line-height: 1.4;\n\n ${(props) =>\n props.$isGlowing &&\n `\n border-color: rgba(240, 185, 11, 1);\n box-shadow: 0 0 25px rgba(240, 185, 11, 0.8),\n 0 0 40px rgba(240, 185, 11, 0.5),\n inset 0 0 20px rgba(240, 185, 11, 0.3);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.2) 0%,\n rgba(240, 185, 11, 0.3) 50%,\n rgba(240, 185, 11, 0.2) 100%\n );\n animation: quickPulse 0.35s ease-out;\n\n @keyframes quickPulse {\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n }\n `}\n\n @media (max-width: 768px) {\n padding: 0.3rem 0.4rem 0.3rem 0.25rem;\n gap: 0.25rem;\n border-radius: 4px;\n transform: none !important;\n transition: none;\n\n &:active {\n transform: none !important;\n }\n }\n\n @media (max-width: 480px) {\n padding: 0.2rem 0.3rem 0.2rem 0.2rem;\n gap: 0.2rem;\n transform: none !important;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border-color: rgba(240, 185, 11, 0.6);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.1) 0%,\n rgba(240, 185, 11, 0.15) 50%,\n rgba(240, 185, 11, 0.1) 100%\n );\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 185, 11, 0.2);\n }\n }\n\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(\n 90deg,\n transparent,\n rgba(240, 185, 11, 0.1),\n transparent\n );\n background-size: 200% 100%;\n animation: ${shimmer} 3s infinite;\n pointer-events: none;\n }\n`;\n\nconst IconWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: 16px;\n height: 16px;\n\n @media (max-width: 768px) {\n width: 16px;\n height: 16px;\n }\n\n @media (max-width: 480px) {\n width: 14px;\n height: 14px;\n }\n`;\n\nconst IconCircle = styled.div<{ $size: number; $color: string; $duration: number; $delay: number }>`\n position: absolute;\n width: ${(props) => props.$size}px;\n height: ${(props) => props.$size}px;\n border: 2px solid ${(props) => props.$color};\n border-radius: 50%;\n animation: ${pulse} ${(props) => props.$duration}s infinite cubic-bezier(0.4, 0, 0.6, 1);\n animation-delay: ${(props) => props.$delay}s;\n transform-origin: center;\n will-change: transform, opacity;\n`;\n\nconst IconCore = styled.div`\n width: 5px;\n height: 5px;\n background: linear-gradient(135deg, #0ecb81 0%, #2ecc71 100%);\n border-radius: 50%;\n box-shadow: 0 0 6px rgba(14, 203, 129, 0.6);\n position: relative;\n z-index: 1;\n`;\n\nconst LogoText = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 0.2rem;\n position: relative;\n z-index: 1;\n vertical-align: middle;\n`;\n\nconst LoafLogoImage = styled.img`\n height: 20px;\n position: relative;\n z-index: 1;\n\n @media (max-width: 768px) {\n height: 20px;\n }\n\n @media (max-width: 480px) {\n height: 18px;\n }\n`;\n\nconst LiquidityText = styled.span`\n font-size: 0.65rem;\n font-weight: 400;\n background: linear-gradient(135deg, #f0b90b 0%, #ffd700 50%, #f0b90b 100%);\n background-size: 200% auto;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n letter-spacing: 0.3px;\n font-family: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n opacity: 0.75;\n align-self: center;\n line-height: 1;\n display: flex;\n align-items: center;\n position: relative;\n top: 1px;\n\n @media (max-width: 768px) {\n font-size: 0.6rem;\n letter-spacing: 0.2px;\n }\n\n @media (max-width: 480px) {\n font-size: 0.55rem;\n letter-spacing: 0.1px;\n }\n`;\n\nexport type LoafLiquidityLogoProps = {\n onClick?: () => void;\n isGlowing?: boolean;\n className?: string;\n};\n\nexport const LoafLiquidityLogo: React.FC<LoafLiquidityLogoProps> = ({\n onClick,\n isGlowing,\n className,\n}) => {\n return (\n <LogoContainer onClick={onClick} $isGlowing={isGlowing} className={className}>\n <LogoText>\n <LoafLogoImage src={loafLogoBanner} alt=\"Loaf\" />\n <LiquidityText>Liquidity</LiquidityText>\n </LogoText>\n <IconWrapper>\n <IconCore />\n <IconCircle $size={10} $color=\"rgba(14, 203, 129, 0.5)\" $duration={4} $delay={0} />\n <IconCircle $size={13} $color=\"rgba(14, 203, 129, 0.35)\" $duration={5.2} $delay={0.7} />\n <IconCircle $size={16} $color=\"rgba(14, 203, 129, 0.25)\" $duration={6.3} $delay={1.3} />\n </IconWrapper>\n </LogoContainer>\n );\n};\n\nLoafLiquidityLogo.displayName = \"LoafLiquidityLogo\";\n","import * as React from \"react\";\n\nexport type YourOrderSide = \"buy\" | \"sell\";\n\nexport type YourOrder = {\n id: string;\n asset: string;\n side?: YourOrderSide;\n date?: string;\n price: number;\n amount: number;\n total: number;\n filledPercent?: number;\n status?: string;\n propertyPercent?: number;\n portfolioSharePercent?: number;\n avgEntryPrice?: number;\n pnlValue?: number;\n pnlPercent?: number;\n holdingLabel?: string;\n value?: number;\n currentPrice?: number;\n priceChangePercent?: number;\n priceChangePositive?: boolean;\n};\n\nexport type YourOrdersTab = {\n id: string;\n label: string;\n title?: string;\n orders: YourOrder[];\n emptyState?: string;\n enableCancel?: boolean;\n columnVisibility?: {\n propertyPercent?: boolean;\n pnl?: boolean;\n };\n};\n\nexport type RenderTabContentArgs = {\n tab: YourOrdersTab;\n orders: YourOrder[];\n page: number;\n totalPages: number;\n totalOrders: number;\n pageSize: number;\n onPageChange: (page: number) => void;\n};\n\nexport type YourOrdersProps = React.HTMLAttributes<HTMLDivElement> & {\n title?: string;\n orders?: YourOrder[];\n tabs?: YourOrdersTab[];\n activeTabId?: string;\n onTabChange?: (tabId: string) => void;\n renderOrderActions?: (order: YourOrder) => React.ReactNode;\n renderTabContent?: (args: RenderTabContentArgs) => React.ReactNode | null;\n pageSize?: number;\n};\n\nconst DEFAULT_TABS = [\n { id: \"portfolio\", label: \"Portfolio\" },\n { id: \"openOrders\", label: \"Open Orders\" },\n { id: \"tradeHistory\", label: \"Trade History\" },\n { id: \"orderHistory\", label: \"Order History\" },\n] as const;\n\nconst panelStyle: React.CSSProperties = {\n width: \"100%\",\n borderRadius: \"16px\",\n backgroundColor: \"#0b0e10\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n color: \"#ffffff\",\n display: \"flex\",\n flexDirection: \"column\",\n};\n\nconst headerStyle: React.CSSProperties = {\n padding: \"1.25rem 1.5rem 0.5rem\",\n};\n\nconst titleStyle: React.CSSProperties = {\n margin: 0,\n fontSize: \"1.1rem\",\n fontWeight: 600,\n};\n\nconst tabsRowStyle: React.CSSProperties = {\n display: \"flex\",\n gap: \"0.5rem\",\n padding: \"0 1.5rem\",\n borderBottom: \"1px solid rgba(255,255,255,0.08)\",\n};\n\nconst tabButtonBase: React.CSSProperties = {\n background: \"none\",\n border: \"none\",\n color: \"rgba(255,255,255,0.5)\",\n fontSize: \"0.9rem\",\n fontWeight: 400,\n padding: \"0.75rem 1rem\",\n cursor: \"pointer\",\n position: \"relative\",\n transition: \"color 0.2s ease\",\n};\n\nconst tabContentWrapper: React.CSSProperties = {\n padding: \"1.25rem 1.5rem 1.5rem\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.75rem\",\n flex: 1,\n};\n\nconst paginationContainerStyle: React.CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginTop: \"0.75rem\",\n paddingTop: \"0.75rem\",\n borderTop: \"1px solid rgba(255,255,255,0.08)\",\n fontSize: \"0.85rem\",\n color: \"rgba(255,255,255,0.7)\",\n};\n\nconst paginationButtonsStyle: React.CSSProperties = {\n display: \"flex\",\n gap: \"0.5rem\",\n};\n\nconst paginationButtonStyle: React.CSSProperties = {\n border: \"1px solid rgba(255,255,255,0.2)\",\n background: \"rgba(255,255,255,0.05)\",\n color: \"#fff\",\n borderRadius: \"6px\",\n padding: \"0.35rem 0.9rem\",\n fontSize: \"0.8rem\",\n cursor: \"pointer\",\n transition: \"opacity 0.2s ease\",\n};\n\nconst tableHeaderStyle: React.CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"1.8fr 0.9fr 0.7fr 0.8fr 0.8fr 1fr\",\n gap: \"0.5rem\",\n paddingBottom: \"0.75rem\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n minWidth: \"700px\",\n};\n\nconst tableHeaderCell: React.CSSProperties = {\n fontSize: \"0.7rem\",\n fontWeight: 700,\n color: \"#ffffff\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.3px\",\n};\n\nconst emptyStateStyle: React.CSSProperties = {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n color: \"rgba(255,255,255,0.6)\",\n fontSize: \"0.95rem\",\n border: \"1px dashed rgba(255,255,255,0.12)\",\n borderRadius: \"8px\",\n minHeight: \"220px\",\n};\n\nconst rowStyle: React.CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"1.8fr 0.9fr 0.7fr 0.8fr 0.8fr 1fr\",\n gap: \"0.5rem\",\n alignItems: \"center\",\n minWidth: \"700px\",\n padding: \"0.75rem 0\",\n borderBottom: \"1px solid rgba(255,255,255,0.08)\",\n};\n\nconst formatCurrency = (value?: number) => {\n if (value == null || Number.isNaN(value)) return \"—\";\n return `$${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n};\n\nconst formatPercent = (value?: number, fractionDigits = 2) => {\n if (value == null || Number.isNaN(value)) return \"—\";\n return `${value.toFixed(fractionDigits)}%`;\n};\n\nexport const YourOrders = React.forwardRef<HTMLDivElement, YourOrdersProps>(\n ({\n className,\n title,\n orders,\n tabs,\n activeTabId,\n onTabChange,\n renderOrderActions,\n renderTabContent,\n pageSize: pageSizeOverride,\n ...props\n }, ref) => {\n const [internalActiveTab, setInternalActiveTab] = React.useState<string>(tabs?.[0]?.id ?? \"portfolio\");\n const [page, setPage] = React.useState(0);\n \n const effectiveActiveTabId = activeTabId ?? internalActiveTab;\n React.useEffect(() => {\n setPage(0);\n }, [effectiveActiveTabId]);\n\n const handleTabChange = (tabId: string) => {\n if (onTabChange) {\n onTabChange(tabId);\n } else {\n setInternalActiveTab(tabId);\n }\n };\n \n const resolvedTabs: YourOrdersTab[] = tabs ?? DEFAULT_TABS.map(t => ({ ...t, orders: orders ?? [], emptyState: `No ${t.label.toLowerCase()} data available.` }));\n const activeTab = resolvedTabs.find(t => t.id === effectiveActiveTabId) ?? resolvedTabs[0];\n const activeOrders = activeTab?.orders ?? orders ?? [];\n const DEFAULT_PAGE_SIZE = 5;\n const HISTORY_PAGE_SIZE = 3;\n const resolvedPageSize = pageSizeOverride ?? ((activeTab?.id === \"order-history\" || activeTab?.id === \"trade-history\")\n ? HISTORY_PAGE_SIZE\n : DEFAULT_PAGE_SIZE);\n const pageSize = Math.max(1, resolvedPageSize);\n const totalOrders = activeOrders.length;\n const totalPages = Math.max(1, Math.ceil(totalOrders / pageSize));\n const safePage = Math.min(page, totalPages - 1);\n const pageStart = safePage * pageSize;\n const paginatedOrders = activeOrders.slice(pageStart, pageStart + pageSize);\n const tabSupportsActions = activeTab?.enableCancel ?? true;\n const showActionsColumn = Boolean(renderOrderActions && tabSupportsActions);\n const columnVisibility = activeTab?.columnVisibility ?? {};\n const showPropertyPercentColumn = columnVisibility.propertyPercent !== false;\n const showPnlColumn = columnVisibility.pnl !== false;\n const columnTemplateParts = [\"1.8fr\", \"0.9fr\", \"0.7fr\", ...(showPropertyPercentColumn ? [\"0.8fr\"] : []), \"0.8fr\", ...(showPnlColumn ? [\"1fr\"] : [])];\n if (showActionsColumn) {\n columnTemplateParts.push(\"0.8fr\");\n }\n const gridTemplateColumns = columnTemplateParts.join(\" \");\n const displayTitle = title ?? activeTab?.title ?? activeTab?.label ?? \"Portfolio Holdings\";\n\n console.log('[YourOrders] tabs:', tabs?.map(t => ({ id: t.id, ordersCount: t.orders?.length })));\n console.log('[YourOrders] activeTabId prop:', activeTabId);\n console.log('[YourOrders] effectiveActiveTabId:', effectiveActiveTabId);\n console.log('[YourOrders] activeTab:', activeTab?.id, 'orders count:', activeOrders?.length);\n\n const hasOrders = Array.isArray(activeOrders) && activeOrders.length > 0;\n const emptyMessage = activeTab?.emptyState ?? \"No holdings yet. Start trading to build your portfolio.\";\n\n const renderOrders = () => {\n if (!hasOrders) {\n return <div style={emptyStateStyle}>{emptyMessage}</div>;\n }\n\n return (\n <>\n <div style={{ ...tableHeaderStyle, gridTemplateColumns }}>\n <div style={tableHeaderCell}>Property</div>\n <div style={tableHeaderCell}>Value</div>\n <div style={tableHeaderCell}>Holding</div>\n {showPropertyPercentColumn ? <div style={tableHeaderCell}>% of Property</div> : null}\n <div style={tableHeaderCell}>Avg Price</div>\n {showPnlColumn ? <div style={tableHeaderCell}>P&amp;L</div> : null}\n {showActionsColumn ? (\n <div style={{ ...tableHeaderCell, textAlign: \"right\" }}>Actions</div>\n ) : null}\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.65rem\" }}>\n {paginatedOrders.map((order) => {\n const propertyName = order.asset;\n const holding =\n order.holdingLabel ??\n `${order.amount.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n })} ${propertyName}`;\n const value = order.value ?? order.total;\n const portfolioShare =\n order.portfolioSharePercent != null\n ? `${order.portfolioSharePercent.toFixed(1)}% of portfolio`\n : undefined;\n const propertyPercent = order.propertyPercent;\n const avgPrice = order.avgEntryPrice ?? order.price;\n const pnlValue = order.pnlValue;\n const pnlPercent = order.pnlPercent;\n const pnlPositive = pnlValue != null ? pnlValue >= 0 : (pnlPercent ?? 0) >= 0;\n const currentPrice = order.currentPrice ?? order.price;\n const priceChangePercent = order.priceChangePercent ?? order.pnlPercent;\n const priceChangePositive =\n order.priceChangePositive ?? (priceChangePercent != null ? priceChangePercent >= 0 : undefined);\n\n return (\n <div key={order.id} style={{ ...rowStyle, gridTemplateColumns }}>\n <div style={{ display: \"flex\", gap: \"1rem\", alignItems: \"center\" }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.15rem\" }}>\n <div style={{ fontSize: \"0.9rem\", fontWeight: 500 }}>{propertyName}</div>\n {portfolioShare ? (\n <div style={{ fontSize: \"0.72rem\", color: \"rgba(255,255,255,0.5)\" }}>{portfolioShare}</div>\n ) : null}\n </div>\n {currentPrice != null ? (\n <div>\n <div\n style={{\n fontSize: \"0.9rem\",\n color: \"var(--color-text, #ffffff)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.25rem\",\n }}\n >\n {priceChangePositive != null ? (\n <span\n style={{\n color: priceChangePositive ? \"#0ecb81\" : \"#f6465d\",\n fontSize: \"0.7em\",\n }}\n >\n {priceChangePositive ? \"▲\" : \"▼\"}\n </span>\n ) : null}\n {formatCurrency(currentPrice)}\n </div>\n {priceChangePercent != null ? (\n <div\n style={{\n fontSize: \"0.7rem\",\n color: priceChangePositive ? \"#0ecb81\" : \"#f6465d\",\n }}\n >\n ({priceChangePositive ? \"+\" : \"\"}\n {priceChangePercent.toFixed(2)}%)\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n <div style={{ fontSize: \"0.9rem\", fontWeight: 500, color: \"#D4AF37\" }}>{formatCurrency(value)}</div>\n <div style={{ fontSize: \"0.9rem\", color: \"rgba(255,255,255,0.92)\" }}>{holding}</div>\n {showPropertyPercentColumn ? (\n <div style={{ fontSize: \"0.9rem\", color: \"rgba(255,255,255,0.8)\" }}>{formatPercent(propertyPercent, 3)}</div>\n ) : null}\n <div style={{ fontSize: \"0.9rem\", color: \"rgba(255,255,255,0.9)\" }}>{formatCurrency(avgPrice)}</div>\n {showPnlColumn ? (\n <div\n style={{\n fontSize: \"0.9rem\",\n fontWeight: 500,\n color: pnlPositive ? \"#0ecb81\" : \"#f6465d\",\n }}\n >\n {pnlValue != null ? `${pnlPositive ? \"+\" : \"-\"}${formatCurrency(Math.abs(pnlValue))}` : formatCurrency(pnlValue)}\n {pnlPercent != null ? (\n <span style={{ marginLeft: \"0.35rem\", fontSize: \"0.75rem\", color: \"rgba(255,255,255,0.6)\" }}>\n ({pnlPositive ? \"+\" : \"\"}\n {pnlPercent.toFixed(1)}%)\n </span>\n ) : null}\n </div>\n ) : null}\n {showActionsColumn ? (\n <div style={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n {renderOrderActions?.(order)}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n </>\n );\n };\n\n const handlePageChange = (nextPage: number) => {\n if (nextPage < 0 || nextPage >= totalPages) return;\n setPage(nextPage);\n };\n\n const customTabContent = renderTabContent?.({\n tab: activeTab,\n orders: paginatedOrders,\n page: safePage,\n totalPages,\n totalOrders,\n pageSize,\n onPageChange: handlePageChange,\n });\n const tabContent = customTabContent ?? renderOrders();\n\n const renderPagination = () => {\n if (!hasOrders || totalPages <= 1) return null;\n const rangeStart = pageStart + 1;\n const rangeEnd = Math.min(pageStart + pageSize, totalOrders);\n return (\n <div style={paginationContainerStyle}>\n <span>\n Showing {rangeStart}-{rangeEnd} of {totalOrders}\n </span>\n <div style={paginationButtonsStyle}>\n <button\n type=\"button\"\n onClick={() => handlePageChange(safePage - 1)}\n disabled={safePage === 0}\n style={{\n ...paginationButtonStyle,\n opacity: safePage === 0 ? 0.4 : 1,\n cursor: safePage === 0 ? \"not-allowed\" : \"pointer\",\n }}\n >\n Prev\n </button>\n <button\n type=\"button\"\n onClick={() => handlePageChange(safePage + 1)}\n disabled={safePage >= totalPages - 1}\n style={{\n ...paginationButtonStyle,\n opacity: safePage >= totalPages - 1 ? 0.4 : 1,\n cursor: safePage >= totalPages - 1 ? \"not-allowed\" : \"pointer\",\n }}\n >\n Next\n </button>\n </div>\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n style={{ ...panelStyle, ...(props.style ?? {}) }}\n className={className}\n {...props}\n >\n <div style={headerStyle}>\n <h3 style={titleStyle}>{displayTitle}</h3>\n </div>\n\n {resolvedTabs.length > 1 && (\n <div style={tabsRowStyle}>\n {resolvedTabs.map((tab) => {\n const isActive = effectiveActiveTabId === tab.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => handleTabChange(tab.id)}\n style={{\n ...tabButtonBase,\n color: isActive ? \"#ffffff\" : \"rgba(255,255,255,0.55)\",\n fontWeight: isActive ? 600 : 400,\n }}\n >\n {tab.label}\n {isActive ? (\n <div\n style={{\n position: \"absolute\",\n bottom: \"-1px\",\n left: 0,\n right: 0,\n height: \"2px\",\n background: \"#f0b90b\",\n }}\n />\n ) : null}\n </button>\n );\n })}\n </div>\n )}\n\n <div style={tabContentWrapper}>\n {tabContent}\n {renderPagination()}\n </div>\n </div>\n );\n }\n);\n\nYourOrders.displayName = \"YourOrders\";\n","import * as React from \"react\";\nimport * as LightweightCharts from \"lightweight-charts\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PriceChartRange = \"30s\" | \"1m\" | \"5m\" | \"15m\" | \"1h\" | \"4h\" | \"24h\" | \"1W\" | \"1M\";\n\nexport type PriceChartCandle = {\n time: LightweightCharts.Time;\n open: number;\n high: number;\n low: number;\n close: number;\n};\n\nexport type PriceChartProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title?: string;\n ranges?: PriceChartRange[];\n selectedRange?: PriceChartRange;\n onRangeChange?: (range: PriceChartRange) => void;\n data: PriceChartCandle[];\n price?: number;\n changePercent?: number;\n currencySymbol?: string;\n height?: number;\n};\n\nconst timeToDate = (time: LightweightCharts.Time): Date | null => {\n if (typeof time === \"number\") {\n return new Date(time * 1000);\n }\n if (typeof time === \"object\" && time !== null && \"year\" in time && \"month\" in time && \"day\" in time) {\n const { year, month, day } = time as { year: number; month: number; day: number };\n return new Date(Date.UTC(year, month - 1, day));\n }\n return null;\n};\n\nconst createTickFormatter = (formatOptions: Intl.DateTimeFormatOptions) => {\n return (time: LightweightCharts.Time, _tickMarkType?: LightweightCharts.TickMarkType, locale?: string) => {\n const date = timeToDate(time);\n if (!date) return \"\";\n return date.toLocaleString(locale || undefined, formatOptions);\n };\n};\n\nconst getTimeScaleOptions = (\n range: PriceChartRange,\n): LightweightCharts.DeepPartial<LightweightCharts.TimeScaleOptions> => {\n switch (range) {\n case \"30s\":\n return {\n timeVisible: true,\n secondsVisible: true,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" }),\n };\n case \"1m\":\n return {\n timeVisible: true,\n secondsVisible: true,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" }),\n };\n case \"5m\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\" }),\n };\n case \"15m\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\" }),\n };\n case \"1h\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\" }),\n };\n case \"4h\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ weekday: \"short\", hour: \"2-digit\" }),\n };\n case \"24h\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ month: \"short\", day: \"numeric\" }),\n };\n case \"1W\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ month: \"short\", day: \"numeric\" }),\n };\n case \"1M\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ month: \"short\", year: \"2-digit\" }),\n };\n default:\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n };\n }\n};\n\nconst getPriceScaleOptions = (data: PriceChartCandle[]): LightweightCharts.DeepPartial<LightweightCharts.PriceScaleOptions> => {\n if (!data.length) return {\n borderColor: \"rgba(230, 200, 126, 0.25)\",\n textColor: \"rgba(230, 200, 126, 0.7)\",\n };\n \n const prices = data.flatMap(d => [d.open, d.high, d.low, d.close]);\n const minPrice = Math.min(...prices);\n const maxPrice = Math.max(...prices);\n const priceRange = maxPrice - minPrice;\n \n // Adjust scale formatting based on price range\n let scaleMargins = { top: 0.1, bottom: 0.1 };\n \n if (priceRange < 1) {\n // For small price ranges, give more margin\n scaleMargins = { top: 0.2, bottom: 0.2 };\n } else if (priceRange > 1000) {\n // For large price ranges, reduce margin\n scaleMargins = { top: 0.05, bottom: 0.05 };\n }\n \n return {\n borderColor: \"rgba(230, 200, 126, 0.25)\",\n textColor: \"rgba(230, 200, 126, 0.7)\",\n scaleMargins,\n };\n};\n\nconst defaultRanges: PriceChartRange[] = [\"30s\", \"1m\", \"5m\", \"15m\", \"1h\", \"4h\", \"24h\", \"1W\", \"1M\"];\nconst VISIBLE_RANGE_COUNT = 4;\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n};\n\ntype ChartApiWithSeries = LightweightCharts.IChartApi & {\n addSeries?: (\n seriesCtor: unknown,\n options?: LightweightCharts.DeepPartial<LightweightCharts.SeriesOptionsMap[\"Candlestick\"]>,\n ) => LightweightCharts.ISeriesApi<\"Candlestick\">;\n};\n\nfunction createCandlestickSeries(\n chart: LightweightCharts.IChartApi,\n options: LightweightCharts.DeepPartial<LightweightCharts.SeriesOptionsMap[\"Candlestick\"]>,\n): LightweightCharts.ISeriesApi<\"Candlestick\"> {\n const chartWithSeries = chart as ChartApiWithSeries;\n if (typeof chartWithSeries.addCandlestickSeries === \"function\") {\n return chartWithSeries.addCandlestickSeries(options);\n }\n\n const candlestickCtor = (LightweightCharts as unknown as { CandlestickSeries?: unknown }).CandlestickSeries;\n if (typeof chartWithSeries.addSeries === \"function\" && candlestickCtor) {\n return chartWithSeries.addSeries(candlestickCtor, options);\n }\n\n throw new Error(\"Candlestick series API is not available in the current lightweight-charts version.\");\n}\n\nexport const PriceChart = React.forwardRef<HTMLDivElement, PriceChartProps>(\n (\n {\n className,\n title = \"Price Chart\",\n ranges = defaultRanges,\n selectedRange,\n onRangeChange,\n data,\n price,\n changePercent,\n currencySymbol = \"$\",\n height = 301.52,\n ...props\n },\n ref\n ) => {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const chartRef = React.useRef<LightweightCharts.IChartApi | null>(null);\n const seriesRef = React.useRef<LightweightCharts.ISeriesApi<\"Candlestick\"> | null>(null);\n const priceLineRef = React.useRef<LightweightCharts.IPriceLine | null>(null);\n const [hoveredRange, setHoveredRange] = React.useState<PriceChartRange | null>(null);\n const [dropdownOpen, setDropdownOpen] = React.useState(false);\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n const isAutoScrollRef = React.useRef(true);\n\n const visibleRanges = ranges.slice(0, VISIBLE_RANGE_COUNT);\n const dropdownRanges = ranges.slice(VISIBLE_RANGE_COUNT);\n const selectedInDropdown = dropdownRanges.includes(selectedRange as PriceChartRange);\n\n React.useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const resolvedPrice = React.useMemo(() => {\n if (price != null) return price;\n const last = data.at(-1);\n return last?.close;\n }, [data, price]);\n\n const inferredChangePercent = React.useMemo(() => {\n if (changePercent != null) return changePercent;\n const first = data[0]?.open;\n const last = data.at(-1)?.close;\n if (first == null || last == null || first === 0) return undefined;\n return ((last - first) / first) * 100;\n }, [changePercent, data]);\n\n const dollarChange = React.useMemo(() => {\n const first = data[0]?.open;\n const last = data.at(-1)?.close;\n if (first == null || last == null) return undefined;\n return last - first;\n }, [data]);\n\n React.useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = LightweightCharts.createChart(el, {\n autoSize: true,\n layout: {\n background: { color: \"transparent\" },\n textColor: \"rgba(255,255,255,0.55)\",\n fontFamily: \"inherit\",\n },\n grid: {\n vertLines: { color: \"rgba(255,255,255,0.06)\" },\n horzLines: { color: \"rgba(255,255,255,0.06)\" },\n },\n rightPriceScale: getPriceScaleOptions(data),\n timeScale: getTimeScaleOptions(selectedRange || defaultRanges[0]),\n crosshair: {\n vertLine: { color: \"rgba(255,255,255,0.12)\" },\n horzLine: { color: \"rgba(255,255,255,0.12)\" },\n },\n });\n\n const series = createCandlestickSeries(chart, {\n upColor: \"#0ecb81\",\n downColor: \"#f6465d\",\n borderVisible: false,\n wickUpColor: \"#0ecb81\",\n wickDownColor: \"#f6465d\",\n });\n\n chartRef.current = chart;\n seriesRef.current = series;\n\n const handleVisibleRangeChange = () => {\n const timeScale = chart.timeScale();\n const position = timeScale.scrollPosition();\n const atRightEdge = position <= 0.01;\n isAutoScrollRef.current = atRightEdge;\n };\n const timeScale = chart.timeScale();\n timeScale.subscribeVisibleLogicalRangeChange(handleVisibleRangeChange);\n\n return () => {\n chartRef.current = null;\n seriesRef.current = null;\n timeScale.unsubscribeVisibleLogicalRangeChange(handleVisibleRangeChange);\n chart.remove();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n const chart = chartRef.current;\n if (!chart) return;\n const effectiveRange = selectedRange ?? ranges?.[0] ?? \"1D\";\n chart.applyOptions({\n timeScale: getTimeScaleOptions(effectiveRange),\n });\n }, [selectedRange, ranges]);\n\n React.useEffect(() => {\n const chart = chartRef.current;\n const series = seriesRef.current;\n if (!chart || !series) return;\n\n series.setData(data);\n\n chart.applyOptions({\n rightPriceScale: getPriceScaleOptions(data),\n });\n\n if (priceLineRef.current) {\n series.removePriceLine(priceLineRef.current);\n priceLineRef.current = null;\n }\n\n if (resolvedPrice != null) {\n const priceLineColor = \"rgba(230, 200, 126, 0.9)\";\n\n priceLineRef.current = series.createPriceLine({\n price: resolvedPrice,\n color: priceLineColor,\n lineWidth: 1,\n lineStyle: 2,\n axisLabelVisible: true,\n title: resolvedPrice.toFixed(2),\n });\n }\n\n if (isAutoScrollRef.current) {\n chart.timeScale().scrollToPosition(0, true);\n }\n }, [data, resolvedPrice]);\n\n const sign = inferredChangePercent == null ? null : inferredChangePercent >= 0 ? \"+\" : \"\";\n const changeClass =\n inferredChangePercent == null ? \"\" : inferredChangePercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n const badgeClass =\n inferredChangePercent == null\n ? \"\"\n : inferredChangePercent >= 0\n ? \"bg-[#0ecb81]/15 text-[#0ecb81]\"\n : \"bg-[#f6465d]/15 text-[#f6465d]\";\n\n const btnBaseStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-card-dark, rgba(255, 255, 255, 0.05))\",\n borderColor: \"var(--color-border, rgba(255, 255, 255, 0.12))\",\n color: \"var(--color-text-secondary, rgba(255, 255, 255, 0.7))\",\n };\n\n const btnHoverStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent-dark, rgba(230, 200, 126, 0.15))\",\n color: \"var(--color-text, #ffffff)\",\n };\n\n const btnActiveStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent, #e6c87e)\",\n borderColor: \"var(--color-accent, #e6c87e)\",\n color: \"#000000\",\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full min-h-[360px] rounded-lg border border-white/10 bg-black/30 text-white backdrop-blur-md sm:min-h-[450px]\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"flex flex-col gap-4 px-4 pb-2 pt-5 md:flex-row md:items-start md:justify-between md:px-6 md:pt-6\">\n <div className=\"flex w-full flex-col gap-3 md:w-auto\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">{title}</CardTitle>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {visibleRanges.map((r) => {\n const active = r === selectedRange;\n const hovered = hoveredRange === r;\n const style: React.CSSProperties = {\n ...btnBaseStyle,\n ...(hovered ? btnHoverStyle : null),\n ...(active ? btnActiveStyle : null),\n };\n return (\n <button\n key={r}\n type=\"button\"\n onClick={() => onRangeChange?.(r)}\n onMouseEnter={() => setHoveredRange(r)}\n onMouseLeave={() => setHoveredRange((prev) => (prev === r ? null : prev))}\n style={style}\n className={cn(\n \"rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n >\n {r}\n </button>\n );\n })}\n {selectedInDropdown && selectedRange ? (\n <button\n type=\"button\"\n style={{\n ...btnBaseStyle,\n ...btnActiveStyle,\n }}\n className={cn(\n \"rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n disabled\n >\n {selectedRange}\n </button>\n ) : null}\n\n {dropdownRanges.length > 0 && (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => setDropdownOpen((prev) => !prev)}\n onMouseEnter={() => setHoveredRange(\"__dropdown__\" as PriceChartRange)}\n onMouseLeave={() => setHoveredRange((prev) => (prev === (\"__dropdown__\" as PriceChartRange) ? null : prev))}\n style={{\n ...btnBaseStyle,\n ...(hoveredRange === (\"__dropdown__\" as PriceChartRange) ? btnHoverStyle : null),\n }}\n className={cn(\n \"flex items-center gap-1 rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n >\n {\"More\"}\n <svg\n className={cn(\"h-3 w-3 transition-transform\", dropdownOpen && \"rotate-180\")}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {dropdownOpen && (\n <div className=\"absolute left-0 top-full z-50 mt-1 min-w-[80px] rounded border border-white/10 bg-black/90 py-1 backdrop-blur-md\">\n {dropdownRanges.map((r) => {\n const active = r === selectedRange;\n return (\n <button\n key={r}\n type=\"button\"\n onClick={() => {\n onRangeChange?.(r);\n setDropdownOpen(false);\n }}\n className={cn(\n \"block w-full px-3 py-1.5 text-left text-[0.85rem] font-medium transition-colors hover:bg-white/10\",\n active ? \"bg-[#e6c87e]/20 text-[#e6c87e]\" : \"text-white/70\"\n )}\n >\n {r}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n\n {resolvedPrice == null && inferredChangePercent == null ? null : (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {resolvedPrice == null ? null : (\n <div \n className={cn(\"text-xl font-semibold tabular-nums\", changeClass)}\n style={{ marginRight: '1rem' }}\n >\n {formatPrice(resolvedPrice, currencySymbol)}\n </div>\n )}\n {dollarChange != null ? (\n <span \n className={cn(\"text-base font-medium tabular-nums\", changeClass)}\n style={{ marginRight: '0.5rem' }}\n >\n {dollarChange >= 0 ? \"+\" : \"\"}{dollarChange.toFixed(2)}\n </span>\n ) : null}\n {inferredChangePercent == null ? null : (\n <div\n className={cn(\n \"rounded-md px-2 py-1 text-xs font-semibold tabular-nums\",\n badgeClass\n )}\n >\n {sign}\n {inferredChangePercent?.toFixed(2)}%\n </div>\n )}\n </div>\n )}\n </CardHeader>\n\n <div className=\"px-4 pb-5 pt-2 md:px-6 md:pb-6\">\n <div\n ref={containerRef}\n className=\"w-full overflow-hidden rounded-lg\"\n style={{ height }}\n />\n </div>\n </Card>\n );\n }\n);\n\nPriceChart.displayName = \"PriceChart\";\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nimport { BedDouble, Bath, CarFront } from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyHeroHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n imageUrl: string;\n imageAlt?: string;\n name: string;\n location: string;\n price?: number;\n currencySymbol?: string;\n changePercent?: number;\n beds?: number;\n baths?: number;\n cars?: number;\n propertyTypeLabel?: string;\n onTrade?: () => void;\n onMakeOffer?: () => void;\n tradeButtonLabel?: string;\n makeOfferButtonLabel?: string;\n makeOfferDisabled?: boolean;\n hideMakeOfferButton?: boolean;\n};\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 3,\n maximumFractionDigits: 3,\n })}`;\n};\n\nexport const PropertyHeroHeader = React.forwardRef<HTMLDivElement, PropertyHeroHeaderProps>(\n (\n {\n className,\n imageUrl,\n imageAlt,\n name,\n location,\n price,\n currencySymbol = \"$\",\n changePercent,\n beds,\n baths,\n cars,\n propertyTypeLabel,\n onTrade,\n onMakeOffer,\n tradeButtonLabel = \"Trade\",\n makeOfferButtonLabel = \"Make Offer\",\n makeOfferDisabled = false,\n hideMakeOfferButton = false,\n ...props\n },\n ref\n ) => {\n const isPositive = changePercent == null ? undefined : changePercent >= 0;\n const accentColor = \"#e6c87e\";\n const tradeHoverColor = \"#f5dd9a\";\n const [isTradeInteracting, setIsTradeInteracting] = React.useState(false);\n const [isOfferInteracting, setIsOfferInteracting] = React.useState(false);\n const hasAmenities = beds != null || baths != null || cars != null || propertyTypeLabel != null;\n const isTradeDisabled = !onTrade;\n const isMakeOfferButtonDisabled = makeOfferDisabled || !onMakeOffer;\n const showMakeOfferButton = !hideMakeOfferButton;\n\n const setTradeInteraction = (state: boolean) => {\n if (isTradeDisabled) return;\n setIsTradeInteracting(state);\n };\n\n const setOfferInteraction = (state: boolean) => {\n if (isMakeOfferButtonDisabled) return;\n setIsOfferInteracting(state);\n };\n\n const headingStyle: React.CSSProperties = {\n fontSize: \"clamp(1.6rem, 4vw, 2.5rem)\",\n marginBottom: \"0.5rem\",\n color: \"#ffffff\",\n textShadow: \"0 2px 4px rgba(0, 0, 0, 0.3)\",\n fontWeight: 600,\n lineHeight: 1.2,\n };\n return (\n <OuterWrapper ref={ref} className={cn(className)} {...props}>\n <HeroContainer>\n <HeroImage\n src={imageUrl}\n alt={imageAlt ?? name}\n />\n\n <HeroGradient aria-hidden=\"true\" />\n\n <div className=\"absolute bottom-0 left-0 right-0 z-10 flex w-full flex-wrap items-end justify-between gap-4 p-8 max-[768px]:gap-4 max-[640px]:gap-3 max-[768px]:p-6 max-[480px]:p-4\">\n <InfoCard>\n <div className=\"min-w-0 space-y-2\">\n <h1 style={headingStyle} className=\"break-words\">\n {name}\n </h1>\n\n <InfoRow className=\"mb-3 max-[768px]:mb-[0.6rem] max-[480px]:mb-[0.5rem]\">\n <LocationText>{location}</LocationText>\n {price == null ? null : (\n <PriceBlock>\n {formatPrice(price, currencySymbol)}\n {changePercent == null ? null : (\n <span\n className={cn(\n \"ml-2 flex items-center text-[0.875rem] font-medium\",\n isPositive ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"mr-[0.15rem]\"\n >\n <path d={isPositive ? \"M7 14l5-5 5 5H7z\" : \"M7 10l5 5 5-5H7z\"} />\n </svg>\n {Math.abs(changePercent).toFixed(2)}%\n </span>\n )}\n </PriceBlock>\n )}\n </InfoRow>\n </div>\n <div className=\"flex items-center gap-6 text-[0.95rem] text-white/90 max-[768px]:hidden\">\n {beds == null ? null : (\n <div className=\"flex items-center\">\n <BedDouble className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{beds} Beds</span>\n </div>\n )}\n {baths == null ? null : (\n <div className=\"flex items-center\">\n <Bath className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{baths} Baths</span>\n </div>\n )}\n {cars == null ? null : (\n <div className=\"flex items-center\">\n <CarFront className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{cars} Cars</span>\n </div>\n )}\n {propertyTypeLabel == null ? null : <div>{propertyTypeLabel}</div>}\n </div>\n </InfoCard>\n\n <ActionButtons>\n <button\n type=\"button\"\n onClick={isTradeDisabled ? undefined : onTrade}\n className=\"flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]\"\n style={{\n backgroundColor: isTradeInteracting ? tradeHoverColor : accentColor,\n color: \"black\",\n minWidth: \"140px\",\n padding: \"0.65rem 1.5rem\",\n borderColor: isTradeInteracting ? accentColor : \"transparent\",\n boxShadow: isTradeInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : \"none\",\n opacity: isTradeDisabled ? 0.5 : 1,\n cursor: isTradeDisabled ? \"not-allowed\" : \"pointer\",\n }}\n onMouseEnter={() => setTradeInteraction(true)}\n onMouseLeave={() => setTradeInteraction(false)}\n onMouseDown={() => setTradeInteraction(true)}\n onMouseUp={() => setTradeInteraction(false)}\n onFocus={() => setTradeInteraction(true)}\n onBlur={() => setTradeInteraction(false)}\n onTouchStart={() => setTradeInteraction(true)}\n onTouchEnd={() => setTradeInteraction(false)}\n disabled={isTradeDisabled}\n aria-disabled={isTradeDisabled}\n >\n {tradeButtonLabel}\n </button>\n\n {showMakeOfferButton ? (\n <button\n type=\"button\"\n onClick={isMakeOfferButtonDisabled ? undefined : onMakeOffer}\n className=\"flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]\"\n style={{\n backgroundColor: isOfferInteracting ? accentColor : \"transparent\",\n borderColor: accentColor,\n color: isOfferInteracting ? \"black\" : accentColor,\n minWidth: \"140px\",\n padding: \"0.65rem 1.5rem\",\n boxShadow: isOfferInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : \"none\",\n opacity: isMakeOfferButtonDisabled ? 0.5 : 1,\n cursor: isMakeOfferButtonDisabled ? \"not-allowed\" : \"pointer\",\n }}\n onMouseEnter={() => setOfferInteraction(true)}\n onMouseLeave={() => setOfferInteraction(false)}\n onMouseDown={() => setOfferInteraction(true)}\n onMouseUp={() => setOfferInteraction(false)}\n onFocus={() => setOfferInteraction(true)}\n onBlur={() => setOfferInteraction(false)}\n onTouchStart={() => setOfferInteraction(true)}\n onTouchEnd={() => setOfferInteraction(false)}\n disabled={isMakeOfferButtonDisabled}\n aria-disabled={isMakeOfferButtonDisabled}\n >\n {makeOfferButtonLabel}\n </button>\n ) : null}\n </ActionButtons>\n </div>\n </HeroContainer>\n\n {hasAmenities ? (\n <MobileAmenities>\n {beds == null ? null : (\n <MobileAmenity>\n <BedDouble className=\"h-4 w-4\" />\n <span>{beds} Beds</span>\n </MobileAmenity>\n )}\n {baths == null ? null : (\n <MobileAmenity>\n <Bath className=\"h-4 w-4\" />\n <span>{baths} Baths</span>\n </MobileAmenity>\n )}\n {cars == null ? null : (\n <MobileAmenity>\n <CarFront className=\"h-4 w-4\" />\n <span>{cars} Cars</span>\n </MobileAmenity>\n )}\n {propertyTypeLabel == null ? null : <MobileAmenity>{propertyTypeLabel}</MobileAmenity>}\n </MobileAmenities>\n ) : null}\n </OuterWrapper>\n );\n }\n);\n\nPropertyHeroHeader.displayName = \"PropertyHeroHeader\";\n\nconst OuterWrapper = styled.div`\n width: 100%;\n max-width: 1200px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n`;\n\nconst HeroContainer = styled.div`\n position: relative;\n width: 100%;\n height: 500px;\n border-radius: 12px;\n overflow: hidden;\n background-color: #000;\n\n @media (max-width: 1024px) {\n height: 420px;\n }\n\n @media (max-width: 768px) {\n height: 320px;\n }\n\n @media (max-width: 640px) {\n height: 280px;\n }\n\n @media (max-width: 540px) {\n height: 250px;\n }\n\n @media (max-width: 420px) {\n height: 220px;\n }\n\n @media (max-width: 360px) {\n height: 200px;\n }\n`;\n\nconst MobileAmenities = styled.div`\n display: none;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n background: rgba(8, 8, 12, 0.85);\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.85);\n font-size: 0.85rem;\n\n @media (max-width: 768px) {\n display: flex;\n flex-wrap: wrap;\n }\n`;\n\nconst MobileAmenity = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.35rem 0.5rem;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.08);\n font-weight: 500;\n`;\n\nconst HeroImage = styled.img`\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n transform: scale(1.15);\n transform-origin: center;\n min-width: 110%;\n transition: transform 0.5s ease-out;\n`;\n\nconst HeroGradient = styled.div`\n position: absolute;\n inset: 0;\n z-index: 1;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.25) 45%, rgba(0, 0, 0, 0.75) 100%);\n`;\n\nconst ActionButtons = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.75rem;\n justify-content: flex-start;\n\n @media (max-width: 768px) {\n gap: 0.5rem;\n }\n\n @media (max-width: 640px) {\n display: none;\n }\n`;\n\nconst InfoCard = styled.div`\n display: inline-block;\n width: fit-content;\n max-width: 70%;\n border-radius: 12px;\n background: rgba(0, 0, 0, 0.12);\n padding: 0.75rem 1rem;\n color: #fff;\n backdrop-filter: blur(6px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);\n border: 1px solid rgba(255, 255, 255, 0.12);\n min-width: 0;\n\n @media (max-width: 768px) {\n max-width: 85%;\n }\n\n @media (max-width: 640px) {\n max-width: 92%;\n }\n\n @media (max-width: 480px) {\n max-width: 95%;\n }\n`;\n\nconst InfoRow = styled.div`\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 0.75rem;\n width: 100%;\n\n @media (max-width: 640px) {\n gap: 0.5rem;\n }\n`;\n\nconst LocationText = styled.span`\n font-size: clamp(1rem, 2.6vw, 1.25rem);\n color: rgba(255, 255, 255, 0.9);\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst PriceBlock = styled.span`\n display: flex;\n align-items: center;\n font-size: clamp(1rem, 2.2vw, 1.25rem);\n font-weight: 600;\n color: var(--color-accent, #f0b90b);\n padding-left: 1rem;\n border-left: 1px solid rgba(255, 255, 255, 0.25);\n min-height: 1.5rem;\n`;\n\n\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport loafLogoBanner from \"../assets/Loaf-logo-Banner.png\";\nimport { LoafLiquidityLogo } from \"./loaf-liquidity-logo\";\nimport type { LoginPopupView } from \"./login-popup\";\n\nconst DEFAULT_TRADE_PATH = \"/trade\";\nconst DEFAULT_HOME_PATH = \"/\";\nconst DEFAULT_ABOUT_PATH = \"/about\";\nconst DEFAULT_LEARN_PATH = \"/learn\";\nconst DEFAULT_PROPERTY_MAP_PATH = \"/map\";\nconst DEFAULT_PORTFOLIO_PATH = \"/portfolio\";\nconst DEFAULT_LOAF_LIQUIDITY_PATH = \"/loaf-liquidity\";\nconst DEFAULT_AUTH_RETURN_PARAM = \"returnTo\";\nconst LOGIN_POPUP_EVENT = \"loaf:open-login-popup\";\n\ntype HeaderUser = {\n displayName?: string | null;\n email?: string | null;\n walletAddress?: string | null;\n};\n\ntype HeaderActiveTab =\n | \"home\"\n | \"trade\"\n | \"offerings\"\n | \"propertyMap\"\n | \"about\"\n | \"portfolio\"\n | \"learn\";\n\nexport type HeaderLoginPopupComponentProps = {\n onClose: () => void;\n initialView?: LoginPopupView;\n};\n\nexport type HeaderProps = {\n currentUser?: HeaderUser | null;\n isAuthenticated?: boolean;\n locationPath?: string;\n activeTab?: HeaderActiveTab;\n onNavigate?: (path: string) => void;\n onLogout?: () => Promise<void> | void;\n onSignInClick?: () => void;\n loginPopupComponent?: React.ComponentType<HeaderLoginPopupComponentProps>;\n tradePath?: string;\n homePath?: string;\n aboutPath?: string;\n learnPath?: string;\n offeringsPath?: string;\n propertyMapPath?: string;\n portfolioPath?: string;\n loafLiquidityPath?: string;\n /** Absolute URL for the auth/login surface (e.g. https://auth.loafmarkets.com/login). */\n authLoginUrl?: string | null;\n /** Query parameter added to authLoginUrl for redirecting back to the originating SPA. */\n authReturnParam?: string | null;\n /**\n * Custom resolver for the \"return to\" URL. Defaults to window.location.href, but you can\n * inject your own implementation (e.g. saved pathname for native apps or React Router state).\n */\n getAuthReturnUrl?: () => string | null | undefined;\n logoHref?: string;\n onLogoClick?: () => void;\n onLoafLiquidityClick?: () => void;\n onTradeClick?: () => void;\n onProfileNavigate?: () => void;\n onOrdersNavigate?: () => void;\n onWalletNavigate?: () => void;\n};\n\nexport const Header: React.FC<HeaderProps> = ({\n currentUser,\n isAuthenticated = false,\n locationPath = DEFAULT_HOME_PATH,\n activeTab,\n onNavigate,\n onLogout,\n onSignInClick,\n loginPopupComponent: LoginPopupComponent,\n tradePath = DEFAULT_TRADE_PATH,\n homePath = DEFAULT_HOME_PATH,\n aboutPath = DEFAULT_ABOUT_PATH,\n learnPath = DEFAULT_LEARN_PATH,\n offeringsPath,\n propertyMapPath = DEFAULT_PROPERTY_MAP_PATH,\n portfolioPath = DEFAULT_PORTFOLIO_PATH,\n loafLiquidityPath = DEFAULT_LOAF_LIQUIDITY_PATH,\n authLoginUrl,\n authReturnParam = DEFAULT_AUTH_RETURN_PARAM,\n getAuthReturnUrl,\n logoHref,\n onLogoClick,\n onLoafLiquidityClick,\n onTradeClick,\n onProfileNavigate: _onProfileNavigate,\n onOrdersNavigate: _onOrdersNavigate,\n onWalletNavigate: _onWalletNavigate,\n}) => {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const [isMoreMenuOpen, setIsMoreMenuOpen] = useState(false);\n const [showLoginPopup, setShowLoginPopup] = useState(false);\n const [loginPopupInitialView, setLoginPopupInitialView] = useState<LoginPopupView | undefined>(undefined);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Header] mounted\");\n return () => console.log(\"[LoginTrace][Header] unmounted\");\n }, []);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Header] showLoginPopup changed\", { showLoginPopup, loginPopupInitialView });\n }, [showLoginPopup, loginPopupInitialView]);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Header] loginPopupComponent updated\", { hasComponent: Boolean(LoginPopupComponent) });\n }, [LoginPopupComponent]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n\n const clickedInsideUserMenu = target.closest(\".user-menu\") || target.closest(\".user-menu-dropdown\");\n\n if (isUserMenuOpen && !clickedInsideUserMenu) {\n console.log(\"[LoginTrace][Header] Closing user menu due to outside click\");\n setIsUserMenuOpen(false);\n }\n if (\n isMobileMenuOpen &&\n !target.closest(\".mobile-menu\") &&\n !target.closest(\".mobile-menu-button\")\n ) {\n setIsMobileMenuOpen(false);\n }\n if (isMoreMenuOpen && !target.closest(\".more-menu\")) {\n setIsMoreMenuOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isUserMenuOpen, isMobileMenuOpen, isMoreMenuOpen]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const handleExternalLoginPopup = (event: Event) => {\n const customEvent = event as CustomEvent<{ initialView?: LoginPopupView }>;\n setLoginPopupInitialView(customEvent.detail?.initialView);\n console.log(\"[LoginTrace][Header] Received LOGIN_POPUP_EVENT\", customEvent.detail);\n setShowLoginPopup(true);\n };\n\n window.addEventListener(LOGIN_POPUP_EVENT, handleExternalLoginPopup as EventListener);\n return () => {\n window.removeEventListener(LOGIN_POPUP_EVENT, handleExternalLoginPopup as EventListener);\n };\n }, []);\n\n const closeMenus = () => {\n setIsMobileMenuOpen(false);\n setIsUserMenuOpen(false);\n setIsMoreMenuOpen(false);\n };\n\n const handleUserMenuToggle = () => {\n const nextState = !isUserMenuOpen;\n console.log(\"[LoginTrace][Header] User dropdown toggle clicked\", { nextState });\n setIsUserMenuOpen(nextState);\n };\n\n const performNavigation = (path: string) => {\n if (onNavigate) {\n onNavigate(path);\n } else if (typeof window !== \"undefined\") {\n window.location.href = path;\n }\n };\n\n const handleNavigation = (path: string) => {\n closeMenus();\n performNavigation(path);\n };\n\n const handleLogoNavigation = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n closeMenus();\n\n if (onLogoClick) {\n onLogoClick();\n return;\n }\n\n performNavigation(logoHref ?? homePath);\n };\n\n const handleLoafLiquidityNavigation = () => {\n closeMenus();\n if (onLoafLiquidityClick) {\n onLoafLiquidityClick();\n return;\n }\n performNavigation(resolvedLoafLiquidityPath);\n };\n\n const handleTradeNavigation = () => {\n closeMenus();\n if (onTradeClick) {\n onTradeClick();\n return;\n }\n performNavigation(resolvedTradePath);\n };\n\n const handleLogoutClick = async (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[LoginTrace][Header] Logout option selected, invoking onLogout handler\");\n await onLogout?.();\n };\n\n const handleAddFundingClick = (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[LoginTrace][Header] Add funding selected\");\n if (LoginPopupComponent) {\n setLoginPopupInitialView(\"funding\");\n setShowLoginPopup(true);\n }\n };\n\n const handlePortfolioNavigate = (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[LoginTrace][Header] Portfolio selected\");\n if (_onOrdersNavigate) {\n _onOrdersNavigate();\n return;\n }\n if (onNavigate) {\n onNavigate(\"/portfolio\");\n }\n };\n\n const rawDisplayName = currentUser?.displayName;\n const normalizedDisplayName =\n typeof rawDisplayName === \"string\" ? rawDisplayName.trim() : undefined;\n const userPrimaryLabel =\n normalizedDisplayName || currentUser?.email || currentUser?.walletAddress || \"User\";\n\n\n const resolveAuthReturnUrl = () => {\n if (getAuthReturnUrl) {\n return getAuthReturnUrl();\n }\n\n if (typeof window !== \"undefined\") {\n return window.location.href;\n }\n\n return null;\n };\n\n const redirectToAuthLogin = () => {\n if (!authLoginUrl) {\n return false;\n }\n\n const nextUrl = resolveAuthReturnUrl();\n let finalUrl = authLoginUrl;\n\n if (authReturnParam && nextUrl) {\n try {\n const parsed = new URL(authLoginUrl, typeof window !== \"undefined\" ? window.location.origin : undefined);\n parsed.searchParams.set(authReturnParam, nextUrl);\n finalUrl = parsed.toString();\n } catch {\n const delimiter = authLoginUrl.includes(\"?\") ? \"&\" : \"?\";\n finalUrl = `${authLoginUrl}${delimiter}${encodeURIComponent(authReturnParam)}=${encodeURIComponent(nextUrl)}`;\n }\n }\n\n if (typeof window !== \"undefined\") {\n window.location.href = finalUrl;\n return true;\n }\n\n return false;\n };\n\n const handleSignIn = () => {\n console.log(\"[LoginTrace][Header] handleSignIn invoked\", { hasCustomHandler: Boolean(onSignInClick) });\n if (onSignInClick) {\n onSignInClick();\n return;\n }\n\n if (redirectToAuthLogin()) {\n return;\n }\n\n if (LoginPopupComponent) {\n console.log(\"[LoginTrace][Header] Opening login popup via handleSignIn\");\n setShowLoginPopup(true);\n }\n };\n\n const handleLoginPopupClose = React.useCallback(() => {\n console.log(\"[LoginTrace][Header] Closing login popup via onClose handler\");\n setShowLoginPopup(false);\n setLoginPopupInitialView(undefined);\n }, []);\n\n const resolvedTradePath = tradePath ?? DEFAULT_TRADE_PATH;\n const resolvedHomePath = homePath ?? DEFAULT_HOME_PATH;\n const resolvedAboutPath = aboutPath ?? DEFAULT_ABOUT_PATH;\n const resolvedLearnPath = learnPath ?? DEFAULT_LEARN_PATH;\n const resolvedOfferingsPath = offeringsPath ?? undefined;\n const offeringsHref = resolvedOfferingsPath ?? resolvedHomePath;\n const resolvedPropertyMapPath = propertyMapPath ?? DEFAULT_PROPERTY_MAP_PATH;\n const resolvedPortfolioPath = portfolioPath ?? DEFAULT_PORTFOLIO_PATH;\n const resolvedLoafLiquidityPath = loafLiquidityPath ?? DEFAULT_LOAF_LIQUIDITY_PATH;\n\n const inferredActiveTab: HeaderActiveTab | null = (() => {\n if (locationPath === resolvedTradePath) return \"trade\";\n if (locationPath === resolvedHomePath) return \"home\";\n if (locationPath === resolvedAboutPath) return \"about\";\n if (locationPath === resolvedLearnPath) return \"learn\";\n if (resolvedOfferingsPath && locationPath.startsWith(resolvedOfferingsPath)) return \"offerings\";\n if (locationPath === resolvedPropertyMapPath) return \"propertyMap\";\n if (locationPath === resolvedPortfolioPath) return \"portfolio\";\n return null;\n })();\n\n const resolvedActiveTab = activeTab ?? inferredActiveTab;\n\n const tradeActive = resolvedActiveTab === \"trade\";\n const homeActive = resolvedActiveTab === \"home\";\n const offeringsActive = resolvedActiveTab === \"offerings\";\n const propertyMapActive = resolvedActiveTab === \"propertyMap\";\n const aboutActive = resolvedActiveTab === \"about\";\n const portfolioActive = resolvedActiveTab === \"portfolio\";\n const learnActive = resolvedActiveTab === \"learn\";\n\n return (\n <>\n <Overlay $isOpen={isMobileMenuOpen} onClick={() => setIsMobileMenuOpen(false)} />\n <HeaderContainer>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <Logo>\n <LogoLink href={logoHref ?? resolvedHomePath} onClick={handleLogoNavigation}>\n <img src={loafLogoBanner} alt=\"LOAF Logo\" />\n </LogoLink>\n <h1>LOAF</h1>\n </Logo>\n\n <Nav $isOpen={isMobileMenuOpen} className=\"mobile-menu\">\n {!isMobileMenuOpen && (\n <div\n style={{ display: \"flex\", flexDirection: \"row\", alignItems: \"center\", height: \"56px\" }}\n className=\"desktop-nav\"\n >\n <NavLink\n href={resolvedHomePath}\n className={homeActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedHomePath);\n }}\n >\n Home\n </NavLink>\n <NavLink\n href={resolvedPortfolioPath}\n className={portfolioActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedPortfolioPath);\n }}\n >\n Portfolio\n </NavLink>\n <NavLink\n href={resolvedTradePath}\n className={tradeActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleTradeNavigation();\n }}\n >\n Trade\n </NavLink>\n <NavLink\n href={offeringsHref}\n className={offeringsActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(offeringsHref);\n }}\n >\n Initial Offerings\n </NavLink>\n <NavLink\n href={resolvedPropertyMapPath}\n className={propertyMapActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedPropertyMapPath);\n }}\n >\n Property Map\n </NavLink>\n <NavLink\n href={resolvedLearnPath}\n className={learnActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedLearnPath);\n }}\n >\n Learn\n </NavLink>\n <NavLink\n href={resolvedAboutPath}\n className={aboutActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedAboutPath);\n }}\n >\n About\n </NavLink>\n <div style={{ marginLeft: \"auto\", display: \"flex\", alignItems: \"center\" }}>\n <div\n style={{ cursor: \"pointer\", marginLeft: \"12px\" }}\n onClick={handleLoafLiquidityNavigation}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleLoafLiquidityNavigation();\n }\n }}\n >\n <LoafLiquidityLogo />\n </div>\n </div>\n </div>\n )}\n\n <div className=\"mobile-menu-content\">\n <MobileMenuHeader>\n <MobileMenuClose onClick={() => setIsMobileMenuOpen(false)} aria-label=\"Close menu\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </MobileMenuClose>\n </MobileMenuHeader>\n\n <SearchBar>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zM5 9.5C5 7.01 7.01 5 9.5 5S14 7.01 14 9.5 11.99 14 9.5 14 5 11.99 5 9.5z\" />\n </svg>\n <input type=\"text\" placeholder=\"Search...\" />\n </SearchBar>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedHomePath)}>Home</MobileNavItem>\n\n <MobileNavItem\n onClick={() => handleNavigation(resolvedPortfolioPath)}\n >\n Portfolio\n </MobileNavItem>\n\n <MobileNavItem\n onClick={() => {\n handleTradeNavigation();\n }}\n >\n Trade\n </MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(offeringsHref)}>Initial Offerings</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedPropertyMapPath)}>Property Map</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedLearnPath)}>Learn</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedAboutPath)}>About</MobileNavItem>\n\n <div style={{ borderTop: \"1px solid #2b3139\", margin: \"8px 0\" }} />\n\n <MobileNavItem\n onClick={handleLoafLiquidityNavigation}\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"16px 24px\" }}\n >\n <LoafLiquidityLogo />\n </MobileNavItem>\n\n <div style={{ borderTop: \"1px solid #2b3139\", margin: \"8px 0\" }} />\n\n {isAuthenticated && (\n <MobileNavItem onClick={handleLogoutClick} style={{ color: \"#f6465d\" }}>\n Logout\n </MobileNavItem>\n )}\n </div>\n </Nav>\n </div>\n\n {isMobileMenuOpen && (\n <MobileOnlyButton\n onClick={() => setIsMobileMenuOpen(false)}\n $isOpen\n style={{ position: \"fixed\", right: \"1rem\", top: \"4rem\" }}\n aria-label=\"Close menu\"\n >\n ✕\n </MobileOnlyButton>\n )}\n\n {isAuthenticated ? (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <UserMenu>\n <UserButton\n onClick={handleUserMenuToggle}\n $isOpen={isUserMenuOpen}\n className=\"user-menu\"\n >\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\" }}>\n <span style={{ fontWeight: 600, fontSize: \"0.95rem\" }}>{userPrimaryLabel}</span>\n </div>\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>\n </UserButton>\n\n {isUserMenuOpen && (\n <DropdownMenu className=\"user-menu-dropdown\">\n <button\n type=\"button\"\n onClick={(event) => {\n handlePortfolioNavigate(event);\n }}\n >\n <MenuItem>Portfolio</MenuItem>\n </button>\n <button\n type=\"button\"\n onClick={(event) => {\n console.log(\"[LoginTrace][Header] Add funding menu item clicked\");\n handleAddFundingClick(event);\n }}\n >\n <MenuItem>Add funding</MenuItem>\n </button>\n <button\n type=\"button\"\n onClick={(event) => {\n console.log(\"[LoginTrace][Header] Logout menu item clicked\");\n void handleLogoutClick(event);\n }}\n >\n <MenuItem className=\"logout\">Logout</MenuItem>\n </button>\n </DropdownMenu>\n )}\n </UserMenu>\n {!isMobileMenuOpen && (\n <MobileOnlyButton\n onClick={() => setIsMobileMenuOpen(true)}\n $isOpen={false}\n className=\"mobile-menu-button\"\n aria-label=\"Open menu\"\n >\n ☰\n </MobileOnlyButton>\n )}\n </div>\n ) : (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <Button className=\"signup\" onClick={handleSignIn}>\n Sign in / Connect\n </Button>\n {!isMobileMenuOpen && (\n <MobileOnlyButton\n onClick={() => setIsMobileMenuOpen(true)}\n $isOpen={false}\n className=\"mobile-menu-button\"\n aria-label=\"Open menu\"\n >\n ☰\n </MobileOnlyButton>\n )}\n </div>\n )}\n </HeaderContainer>\n\n {LoginPopupComponent && showLoginPopup && (\n <LoginPopupComponent\n onClose={handleLoginPopupClose}\n initialView={loginPopupInitialView}\n />\n )}\n </>\n );\n};\n\nHeader.displayName = \"Header\";\n\nconst Overlay = styled.div<{ $isOpen: boolean }>`\n display: ${(props) => (props.$isOpen ? \"block\" : \"none\")};\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.7);\n backdrop-filter: blur(3px);\n z-index: 999;\n`;\n\nconst MobileOnlyButton = styled.button.attrs({ type: \"button\" })<{ $isOpen: boolean }>`\n display: none;\n background-color: ${(props) => (props.$isOpen ? \"rgba(240, 185, 11, 0.2)\" : \"#f0b90b\")};\n color: ${(props) => (props.$isOpen ? \"#ffffff\" : \"#0b0e11\")};\n font-size: 24px;\n font-weight: bold;\n width: 44px;\n height: 44px;\n justify-content: center;\n align-items: center;\n margin-left: 0.75rem;\n z-index: 1100;\n border-radius: 8px;\n border: ${(props) => (props.$isOpen ? \"1px solid #f0b90b\" : \"none\")};\n line-height: 1;\n padding: 0;\n cursor: pointer;\n box-shadow: ${(props) => (props.$isOpen ? \"0 2px 8px rgba(0, 0, 0, 0.3)\" : \"none\")};\n\n &:hover {\n background-color: ${(props) => (props.$isOpen ? \"rgba(240, 185, 11, 0.3)\" : \"#e0aa0b\")};\n }\n\n &:active {\n background-color: ${(props) => (props.$isOpen ? \"rgba(240, 185, 11, 0.4)\" : \"#d19f0a\")};\n }\n\n @media (max-width: 1300px) {\n display: flex;\n }\n`;\n\nconst HeaderContainer = styled.header`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 2rem;\n background-color: #0d1117;\n border-bottom: 1px solid #232a32;\n position: sticky;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n width: 100%;\n height: 56px;\n box-sizing: border-box;\n\n @media (max-width: 768px) {\n padding: 0 1rem;\n }\n`;\n\nconst Logo = styled.div`\n display: flex;\n align-items: center;\n margin-right: 24px;\n height: 56px;\n\n img {\n height: 28px;\n display: block;\n }\n\n h1 {\n display: none;\n }\n\n @media (max-width: 768px) {\n img {\n height: 30px;\n }\n }\n`;\n\nconst LogoLink = styled.a`\n display: inline-flex;\n align-items: center;\n`;\n\nconst Nav = styled.nav<{ $isOpen: boolean }>`\n display: flex;\n flex-direction: column;\n\n .desktop-nav {\n display: flex;\n }\n\n .mobile-menu-content {\n display: none;\n }\n\n .mobile-loaf-logo {\n display: none;\n }\n\n @media (max-width: 1300px) {\n .mobile-loaf-logo {\n display: flex !important;\n align-items: center;\n height: 56px;\n }\n }\n\n @media (max-width: 1300px) {\n position: fixed;\n top: 56px;\n right: ${(props) => (props.$isOpen ? \"0\" : \"-100%\")} ;\n width: 280px;\n max-width: 280px;\n height: calc(100vh - 56px);\n background: linear-gradient(180deg, #0f1419 0%, #0a0e13 100%);\n z-index: 1000;\n transition: right 0.3s ease;\n box-shadow: ${(props) => (props.$isOpen ? \"-10px 0 30px rgba(0, 0, 0, 0.5)\" : \"none\")};\n overflow-y: auto;\n border-left: 1px solid rgba(255, 255, 255, 0.05);\n\n .desktop-nav {\n display: none;\n }\n\n .mobile-menu-content {\n display: flex;\n flex-direction: column;\n padding-top: 0;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n }\n }\n`;\n\nconst NavLink = styled.a`\n margin: 0 12px;\n color: #eaecef;\n font-weight: 500;\n font-size: 14px;\n padding: 0 4px;\n height: 56px;\n display: flex;\n align-items: center;\n position: relative;\n transition: color 0.2s ease;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif;\n letter-spacing: 0.2px;\n\n &:first-child {\n margin-left: 0;\n }\n\n &:hover,\n &.active {\n color: #f0b90b;\n }\n\n &.active::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 3px;\n background-color: #f0b90b;\n }\n\n @media (max-width: 768px) {\n margin: 0;\n padding: 16px 24px;\n width: 100%;\n height: auto;\n text-align: left;\n font-size: 16px;\n color: #eaecef;\n display: flex;\n align-items: center;\n\n &:hover {\n background-color: #2b3139;\n }\n\n &.active::after {\n display: none;\n }\n\n svg {\n margin-right: 12px;\n width: 20px;\n height: 20px;\n }\n }\n`;\n\nconst Button = styled.button.attrs({ type: \"button\" })`\n padding: 0.5rem 1rem;\n border-radius: 6px;\n font-weight: 500;\n font-size: 13px;\n margin-left: 0.75rem;\n transition: all 0.2s ease;\n\n &.login {\n background-color: transparent;\n border: 1px solid #f0b90b;\n color: #f0b90b;\n\n &:hover {\n background-color: rgba(240, 185, 11, 0.1);\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n\n &.signup {\n background-color: #f0b90b;\n color: #0b0e11;\n border: none;\n\n &:hover {\n background-color: #f8d12f;\n }\n }\n\n @media (max-width: 768px) {\n padding: 0.65rem 1.25rem;\n font-size: 0.9rem;\n margin-left: 0.5rem;\n }\n`;\n\nconst UserMenu = styled.div`\n position: relative;\n margin-left: 0.75rem;\n height: 56px;\n display: flex;\n align-items: center;\n\n @media (max-width: 768px) {\n margin-left: auto;\n }\n`;\n\nconst UserButton = styled.button.attrs({ type: \"button\" })<{ $isOpen: boolean }>`\n display: flex;\n align-items: center;\n background: transparent;\n color: #eaecef;\n font-size: 13px;\n padding: 0 6px;\n height: 32px;\n border-radius: 4px;\n\n &:hover {\n background-color: #2b3139;\n }\n\n span {\n margin-right: 0.5rem;\n }\n\n svg {\n width: 12px;\n height: 12px;\n transition: transform 0.2s ease;\n transform: ${(props) => (props.$isOpen ? \"rotate(180deg)\" : \"rotate(0)\")};\n }\n`;\n\nconst DropdownMenu = styled.div`\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 0.25rem;\n background-color: #0d1117;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\n border: 1px solid rgba(255, 255, 255, 0.1);\n min-width: 180px;\n overflow: hidden;\n z-index: 10;\n padding: 0.5rem 0;\n\n button {\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n width: 100%;\n text-align: left;\n cursor: pointer;\n color: inherit;\n display: block;\n }\n`;\n\nconst MenuItem = styled.div`\n padding: 0.75rem 1.25rem;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #eaecef;\n font-size: 14px;\n font-weight: 400;\n display: block;\n width: 100%;\n border-bottom: none;\n\n &:hover {\n color: #f0b90b;\n background-color: rgba(240, 185, 11, 0.08);\n }\n\n &.logout {\n color: #f6465d;\n }\n`;\n\nconst MobileMenuHeader = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding: 16px 20px;\n margin-top: 60px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n background: rgba(0, 0, 0, 0.2);\n`;\n\nconst MobileMenuClose = styled.button.attrs({ type: \"button\" })`\n background: none;\n border: none;\n color: #eaecef;\n cursor: pointer;\n padding: 8px;\n font-size: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst SearchBar = styled.div`\n display: flex;\n align-items: center;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 6px;\n padding: 10px 14px;\n margin: 16px 20px 12px;\n border: 1px solid rgba(255, 255, 255, 0.08);\n transition: all 0.2s ease;\n\n &:focus-within {\n background: rgba(255, 255, 255, 0.05);\n border-color: rgba(240, 185, 11, 0.3);\n }\n\n svg {\n color: rgba(240, 185, 11, 0.5);\n margin-right: 10px;\n width: 16px;\n height: 16px;\n }\n\n input {\n background: none;\n border: none;\n color: #ffffff;\n font-size: 14px;\n width: 100%;\n outline: none;\n height: 20px;\n\n &::placeholder {\n color: rgba(255, 255, 255, 0.4);\n }\n }\n`;\n\nconst MobileNavItem = styled.div`\n display: flex;\n align-items: center;\n padding: 14px 20px;\n color: rgba(255, 255, 255, 0.85);\n font-size: 15px;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.03);\n font-weight: 400;\n transition: all 0.2s ease;\n letter-spacing: 0.2px;\n\n &:hover {\n background: rgba(255, 255, 255, 0.05);\n color: #ffffff;\n padding-left: 24px;\n }\n`;\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertySubheaderTab = {\n id: string;\n label: string;\n hasNotification?: boolean;\n notificationColor?: string;\n};\n\nexport type PropertySubheaderAction = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n};\n\nexport type PropertySubheaderProps = React.HTMLAttributes<HTMLDivElement> & {\n tabs: PropertySubheaderTab[];\n activeTabId: string;\n onTabChange?: (tabId: string) => void;\n actions?: PropertySubheaderAction[];\n};\n\nexport const PropertySubheader = React.forwardRef<HTMLDivElement, PropertySubheaderProps>(\n ({ className, tabs, activeTabId, onTabChange, actions, ...props }, ref) => {\n const tabsContainerRef = React.useRef<HTMLDivElement>(null);\n\n // Force scrollbar to be always visible on mobile\n React.useEffect(() => {\n const container = tabsContainerRef.current;\n if (!container) return;\n\n // Only apply on mobile where scrollbar is hidden by default\n const isMobile = window.innerWidth <= 768;\n if (!isMobile) return;\n\n // Force scrollbar to appear by slightly scrolling and resetting\n const forceScrollbar = () => {\n if (container.scrollWidth > container.clientWidth) {\n // Element is scrollable, force scrollbar visibility\n container.scrollTop = 1; // Triggers scrollbar in some browsers\n container.scrollTop = 0;\n container.scrollLeft = 1;\n container.scrollLeft = 0;\n }\n };\n\n // Initial check\n setTimeout(forceScrollbar, 100);\n\n // Also check on resize in case orientation changes\n window.addEventListener('resize', forceScrollbar);\n return () => window.removeEventListener('resize', forceScrollbar);\n }, [tabs]);\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full font-normal\",\n \"flex flex-col-reverse gap-3\",\n \"md:flex-row md:items-center md:justify-between\",\n className\n )}\n {...props}\n >\n <div\n ref={tabsContainerRef}\n className={cn(\n \"flex items-center border-b border-white/10\",\n \"overflow-x-auto md:overflow-visible\",\n \"[-webkit-overflow-scrolling:touch]\",\n \"[scroll-behavior:smooth]\",\n \"[touch-action:pan-x]\",\n \"md:border-b-0\"\n )}\n style={{ WebkitTapHighlightColor: \"transparent\" }}\n >\n <div className=\"flex min-w-max\">\n {tabs.map((tab) => {\n const active = tab.id === activeTabId;\n\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange?.(tab.id)}\n className={cn(\n \"relative whitespace-nowrap\",\n \"px-6 py-4\",\n \"font-normal\",\n \"transition-colors\",\n \"max-[768px]:px-[1.2rem] max-[768px]:py-[0.8rem]\",\n \"max-[480px]:px-4 max-[480px]:py-[0.7rem] max-[480px]:text-[0.9rem]\",\n active\n ? \"font-semibold text-[var(--color-accent,#e6c87e)]\"\n : \"text-white/60 hover:text-white\"\n )}\n style={{\n borderBottom: active ? \"2px solid var(--color-accent, #e6c87e)\" : \"2px solid transparent\",\n minWidth: \"80px\",\n touchAction: \"manipulation\",\n }}\n >\n {tab.label}\n\n {tab.hasNotification ? (\n <span\n className=\"absolute right-[10px] top-[10px] h-2 w-2 rounded-full animate-pulse\"\n style={{\n backgroundColor: tab.notificationColor ?? \"#f6465d\",\n boxShadow: \"0 0 0 0 rgba(246, 70, 93, 0.7)\",\n }}\n />\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n\n {actions != null && actions.length > 0 ? (\n <div\n className={cn(\n \"flex items-center gap-[10px]\",\n \"overflow-x-auto md:overflow-visible\",\n \"[scrollbar-width:none]\",\n \"md:justify-end\",\n \"max-[768px]:w-full max-[768px]:justify-center max-[768px]:pb-2 max-[768px]:mb-4\"\n )}\n >\n {actions.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n \"flex shrink-0 items-center gap-[5px] whitespace-nowrap\",\n \"rounded\",\n \"border border-white/10\",\n \"bg-transparent\",\n \"px-3 py-1.5 text-[14px] font-normal\",\n \"transition-all\",\n \"max-[768px]:px-2.5 max-[768px]:py-[5px] max-[768px]:text-[13px]\",\n \"hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)]\"\n )}\n >\n {action.icon}\n {action.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nPropertySubheader.displayName = \"PropertySubheader\";\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\ntype EmailCodeParams = {\n email: string;\n isSignUp: boolean;\n handle?: string | null;\n};\n\ntype VerifyCodeParams = {\n code: string;\n email: string;\n};\n\ntype DemoLoginResult = {\n success: boolean;\n};\n\ntype DemoLoginHandler = (\n email: string,\n handle?: string | null\n) => Promise<DemoLoginResult | void> | DemoLoginResult | void;\n\nexport type LoginPopupView = \"main\" | \"email\" | \"otp\" | \"kyc\" | \"kyc-success\" | \"kyc-failed\" | \"funding\";\n\nexport type FundWalletParams = {\n amount: string;\n};\n\nexport type LoginPopupProps = {\n onClose: () => void;\n onOpenEarlyAccess?: () => void;\n /**\n * Optional flag that indicates an authenticated session exists. When true (and autoCloseOnAuth is enabled)\n * the popup will close automatically, mirroring the loaf-demo behaviour that watched Privy + demo auth state.\n */\n isAuthenticated?: boolean;\n /** Optional user payload that, when truthy, also triggers the auto close effect. */\n currentUser?: unknown;\n /**\n * Handler that should kick off an email OTP flow (e.g. Privy's sendCode). When omitted, the component will\n * display an inline error explaining that email auth is unavailable.\n */\n onSendEmailCode?: (params: EmailCodeParams) => Promise<void> | void;\n /** Handler invoked when the user submits the 6-digit OTP code. */\n onVerifyEmailCode?: (params: VerifyCodeParams) => Promise<void> | void;\n /** Optional handler used for demo / local login flows before falling back to email OTP. */\n onDemoLogin?: DemoLoginHandler;\n /** Override for the logo shown in the popup header. */\n logoSrc?: string;\n logoAlt?: string;\n /** Disable auto-closing behaviour tied to isAuthenticated/currentUser flags. */\n autoCloseOnAuth?: boolean;\n /**\n * Handler called when the user clicks \"KYC me now\". Should trigger the KYC verification flow\n * and resolve with { passed: boolean } when complete.\n */\n onKycStart?: () => Promise<{ passed: boolean }> | void;\n /**\n * Render prop for embedding an inline KYC widget (e.g. Sumsub). When provided, clicking\n * \"KYC me now\" will display this widget inside the popup. The callback should be invoked\n * when the verification flow completes.\n */\n renderKycWidget?: (onResult: (result: { passed: boolean }) => void) => React.ReactNode;\n /**\n * Handler called when the user clicks \"Fund my account\". Should open the funding UI (e.g. Coinbase onramp)\n * and resolve with { funded: boolean } when the user exits.\n */\n onFundWallet?: (params: FundWalletParams) => Promise<{ funded: boolean }> | void;\n /** Optional view to show immediately when the popup opens. */\n initialView?: LoginPopupView;\n /** Handler invoked when the user selects \"Sign in with Wallet\". */\n onWalletLogin?: () => Promise<void> | void;\n};\n\nconst DEFAULT_LOGO_SRC = \"/loaf-logo.png\";\nconst DEFAULT_LOGO_ALT = \"Loaf\";\n\nconst OTP_INPUT_LENGTH = 6;\n\ntype StatusMessageProps = {\n $error?: boolean;\n};\n\ntype MiniLiveFeedPurchase = {\n id: string;\n name: string;\n amount: number;\n timestamp: string;\n};\n\nexport const LoginPopup: React.FC<LoginPopupProps> = ({\n onClose,\n onOpenEarlyAccess,\n onWalletLogin,\n isAuthenticated,\n currentUser,\n onSendEmailCode,\n onVerifyEmailCode,\n onDemoLogin,\n logoSrc = DEFAULT_LOGO_SRC,\n logoAlt = DEFAULT_LOGO_ALT,\n autoCloseOnAuth = true,\n onKycStart,\n renderKycWidget,\n onFundWallet,\n initialView,\n}) => {\n const [view, setView] = useState<LoginPopupView>(() => initialView ?? \"main\");\n const [email, setEmail] = useState(\"\");\n const [handle, setHandle] = useState(\"\");\n const [otp, setOtp] = useState<string[]>(Array(OTP_INPUT_LENGTH).fill(\"\"));\n const [error, setError] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [isSignUp, setIsSignUp] = useState(false);\n\n const [fundingAmount, setFundingAmount] = useState(\"\");\n const [kycLoading, setKycLoading] = useState(false);\n const [showKycWidget, setShowKycWidget] = useState(false);\n const [fundingLoading, setFundingLoading] = useState(false);\n const [fundingError, setFundingError] = useState(\"\");\n\n // Ref-based flag to suppress auto-close during signup verification.\n // Set synchronously BEFORE the async verify call so the effect sees it\n // even if isAuthenticated flips true before setView(\"kyc\") renders.\n const suppressAutoCloseRef = React.useRef(false);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Popup] mounted\");\n return () => console.log(\"[LoginTrace][Popup] unmounted\");\n }, []);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Popup] view updated\", { view });\n }, [view]);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Popup] auth props updated\", { isAuthenticated, hasUser: Boolean(currentUser) });\n }, [isAuthenticated, currentUser]);\n\n useEffect(() => {\n if (typeof initialView === \"string\") {\n console.log(\"[LoginTrace][Popup] initialView prop changed\", { initialView });\n setView(initialView);\n }\n }, [initialView]);\n\n useEffect(() => {\n if (!autoCloseOnAuth) {\n console.log(\"[LoginTrace][Popup] autoClose disabled\", { autoCloseOnAuth, view });\n return;\n }\n\n // Don't auto-close if we're in the post-signup onboarding flow\n if (suppressAutoCloseRef.current) {\n console.log(\"[LoginTrace][Popup] autoClose suppressed\", { view });\n return;\n }\n if (view === \"kyc\" || view === \"kyc-success\" || view === \"kyc-failed\" || view === \"funding\") {\n console.log(\"[LoginTrace][Popup] autoClose skipped due to onboarding view\", { view });\n return;\n }\n\n console.log(\"[LoginTrace][Popup] autoClose effect evaluating\", {\n autoCloseOnAuth,\n isAuthenticated,\n hasUser: Boolean(currentUser),\n view,\n });\n\n if (isAuthenticated || currentUser) {\n console.log(\"[LoginTrace][Popup] autoClose triggered\", { isAuthenticated, hasUser: Boolean(currentUser), view });\n onClose();\n }\n }, [autoCloseOnAuth, currentUser, isAuthenticated, onClose, view]);\n\n const handleWalletLogin = async () => {\n console.log('[LoginTrace][Popup] Wallet login clicked, onWalletLogin:', !!onWalletLogin);\n if (onWalletLogin) {\n try {\n console.log('[LoginTrace][Popup] Calling onWalletLogin...');\n await onWalletLogin();\n console.log('[LoginTrace][Popup] onWalletLogin completed, closing popup');\n onClose();\n return;\n } catch (err) {\n console.error('[LoginTrace][Popup] Wallet login failed', err);\n }\n }\n console.log('[LoginTrace][Popup] No onWalletLogin handler, closing popup');\n onClose();\n if (onOpenEarlyAccess) {\n onOpenEarlyAccess();\n }\n };\n\n const handleEmailClick = (signUp = false) => {\n console.log(\"[LoginTrace][Popup] handleEmailClick\", { signUp });\n setIsSignUp(signUp);\n setView(\"email\");\n setError(\"\");\n };\n\n const handleSendCode = async (event?: React.SyntheticEvent) => {\n event?.preventDefault();\n\n console.log(\"[LoginTrace][Popup] handleSendCode invoked\", { email, isSignUp, handle, eventType: event?.type });\n\n if (!email || !email.includes(\"@\")) {\n setError(\"Please enter a valid email address\");\n return;\n }\n\n if (isSignUp && !handle.trim()) {\n setError(\"Please claim a handle to continue\");\n return;\n }\n\n setLoading(true);\n setError(\"\");\n\n const normalizedHandle = isSignUp ? handle.trim() : undefined;\n\n try {\n console.log(\"[LoginTrace][Popup] Attempting demo login fallback\", { hasDemoHandler: Boolean(onDemoLogin) });\n const demoResult = await onDemoLogin?.(email, normalizedHandle ?? null);\n if (demoResult && (demoResult as DemoLoginResult).success) {\n console.log(\"[LoginTrace][Popup] Demo login succeeded, skipping OTP flow\");\n setLoading(false);\n return;\n }\n } catch (err) {\n // If demo login fails, fall back to email auth.\n console.warn(\"[LoginTrace][Popup] Demo login failed, attempting email OTP\", err);\n }\n\n if (!onSendEmailCode) {\n setError(\"Email authentication is not configured for this popup.\");\n setLoading(false);\n return;\n }\n\n try {\n console.log(\"[LoginTrace][Popup] Calling onSendEmailCode\", { email, isSignUp, normalizedHandle });\n await onSendEmailCode({ email, isSignUp, handle: normalizedHandle ?? null });\n console.log(\"[LoginTrace][Popup] onSendEmailCode resolved, switching to OTP view\");\n setView(\"otp\");\n setOtp(Array(OTP_INPUT_LENGTH).fill(\"\"));\n } catch (err) {\n console.error(\"[LoginTrace][Popup] onSendEmailCode threw\", err);\n setError(err instanceof Error ? err.message : \"Failed to send verification code\");\n } finally {\n setLoading(false);\n }\n };\n\n const handleOTPChange = (index: number, value: string) => {\n const sanitizedValue = value.replace(/\\D/g, \"\");\n\n if (sanitizedValue.length > 1) {\n const digits = sanitizedValue.slice(0, OTP_INPUT_LENGTH).split(\"\");\n const newOtp = [...otp];\n digits.forEach((digit, i) => {\n if (index + i < OTP_INPUT_LENGTH) {\n newOtp[index + i] = digit;\n }\n });\n setOtp(newOtp);\n\n const nextIndex = Math.min(index + digits.length, OTP_INPUT_LENGTH - 1);\n document.getElementById(`otp-${nextIndex}`)?.focus();\n return;\n }\n\n const newOtp = [...otp];\n newOtp[index] = sanitizedValue;\n setOtp(newOtp);\n\n if (sanitizedValue && index < OTP_INPUT_LENGTH - 1) {\n document.getElementById(`otp-${index + 1}`)?.focus();\n }\n };\n\n const handleOTPKeyDown = (index: number, event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Backspace\" && !otp[index] && index > 0) {\n document.getElementById(`otp-${index - 1}`)?.focus();\n }\n };\n\n const handleOTPInput = (index: number, event: React.FormEvent<HTMLInputElement>) => {\n const rawValue = event.currentTarget.value ?? \"\";\n const nativeEvent = event.nativeEvent as InputEvent | undefined;\n const isPasteLike = nativeEvent?.inputType === \"insertFromPaste\" || rawValue.length > 1;\n if (isPasteLike) {\n handleOTPChange(index, rawValue);\n }\n };\n\n const handleOTPPaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault();\n const pasted = event.clipboardData?.getData(\"text\") ?? \"\";\n const digits = pasted.replace(/\\D/g, \"\").slice(0, OTP_INPUT_LENGTH).split(\"\");\n if (digits.length === 0) return;\n\n const next = Array.from({ length: OTP_INPUT_LENGTH }, (_, i) => digits[i] ?? \"\");\n setOtp(next);\n\n const lastIndex = Math.min(digits.length, OTP_INPUT_LENGTH) - 1;\n if (lastIndex >= 0) {\n requestAnimationFrame(() => {\n document.getElementById(`otp-${lastIndex}`)?.focus();\n });\n }\n };\n\n const handleVerifyCode = async (event: React.FormEvent) => {\n event.preventDefault();\n\n const code = otp.join(\"\");\n console.log(\"[LoginTrace][Popup] handleVerifyCode\", { codeLength: code.length, isSignUp });\n if (code.length !== OTP_INPUT_LENGTH) {\n setError(\"Please enter the 6-digit code\");\n return;\n }\n\n if (!onVerifyEmailCode) {\n setError(\"Verification handler missing. Cannot verify code.\");\n return;\n }\n\n setLoading(true);\n setError(\"\");\n\n // If this is a signup flow, suppress auto-close BEFORE the verify call.\n // Privy will set isAuthenticated=true during verify, which would trigger\n // the auto-close effect before our setView(\"kyc\") renders.\n if (isSignUp) {\n suppressAutoCloseRef.current = true;\n }\n\n try {\n console.log(\"[LoginTrace][Popup] Calling onVerifyEmailCode\");\n await onVerifyEmailCode({ code, email });\n // After successful signup verification, go to KYC step\n if (isSignUp) {\n console.log(\"[LoginTrace][Popup] Signup OTP verified, moving to KYC view\");\n setView(\"kyc\");\n setLoading(false);\n return;\n }\n } catch (err) {\n console.error(\"[LoginTrace][Popup] onVerifyEmailCode threw\", err);\n suppressAutoCloseRef.current = false;\n setError(err instanceof Error ? err.message : \"Invalid verification code\");\n } finally {\n setLoading(false);\n }\n };\n\n const handleKycWidgetResult = (result: { passed: boolean }) => {\n setShowKycWidget(false);\n if (result.passed) {\n setView(\"kyc-success\");\n } else {\n setView(\"kyc-failed\");\n }\n };\n\n const handleKycStart = async () => {\n if (renderKycWidget) {\n setShowKycWidget(true);\n return;\n }\n if (!onKycStart) {\n // If no KYC handler provided, skip to success\n setView(\"kyc-success\");\n return;\n }\n setKycLoading(true);\n setError(\"\");\n try {\n const result = await onKycStart();\n if (result && result.passed) {\n setView(\"kyc-success\");\n } else {\n setView(\"kyc-failed\");\n }\n } catch (err) {\n setView(\"kyc-failed\");\n } finally {\n setKycLoading(false);\n }\n };\n\n const handleKycSkip = () => {\n onClose();\n };\n\n const handleFundWallet = async () => {\n if (!onFundWallet) {\n onClose();\n return;\n }\n setFundingLoading(true);\n setFundingError(\"\");\n try {\n const result = await onFundWallet({ amount: fundingAmount || \"100\" });\n if (result && result.funded) {\n onClose();\n } else {\n setFundingLoading(false);\n }\n } catch (err) {\n setFundingError(err instanceof Error ? err.message : \"Unable to launch funding. Please try again.\");\n setFundingLoading(false);\n }\n };\n\n const handleFundingSkip = () => {\n onClose();\n };\n\n const handleFundingAmountChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value.replace(/[^0-9.]/g, \"\");\n setFundingAmount(next);\n };\n\n const handleBack = () => {\n setView(\"main\");\n setEmail(\"\");\n setHandle(\"\");\n setOtp(Array(OTP_INPUT_LENGTH).fill(\"\"));\n setError(\"\");\n };\n\n if (view === \"main\") {\n return (\n <Overlay onClick={onClose}>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <Title>\n <LogoContainer>\n <LogoImage src={logoSrc} alt={logoAlt} />\n </LogoContainer>\n Welcome to Loaf\n </Title>\n\n <ButtonsContainer>\n <LoginButton onClick={() => handleEmailClick(false)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n Sign in with Email\n </LoginButton>\n\n <div style={{ textAlign: \"center\", color: \"var(--color-text-secondary, #848e9c)\", fontSize: \"0.875rem\" }}>\n or\n </div>\n\n <LoginButton onClick={handleWalletLogin}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\" />\n </svg>\n Sign in with Wallet\n </LoginButton>\n </ButtonsContainer>\n\n <div style={{ textAlign: \"center\", marginTop: \"0.5rem\", marginBottom: \"1rem\" }}>\n <span\n onClick={() => handleEmailClick(true)}\n style={{\n color: \"var(--color-text-secondary, #848e9c)\",\n fontSize: \"0.8rem\",\n cursor: \"pointer\",\n textDecoration: \"underline\",\n }}\n >\n Sign Up\n </span>\n </div>\n\n <Divider />\n\n <AnnotationContainer>\n <Annotation>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\" />\n </svg>\n <AnnotationText>\n <AnnotationLabel>← Digital Asset users</AnnotationLabel>\n Connect your Web3 wallet to access your assets\n </AnnotationText>\n </Annotation>\n\n <Annotation>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n <AnnotationText>\n <AnnotationLabel>← Traditional Finance users</AnnotationLabel>\n Sign in with email, no web3 experience needed\n </AnnotationText>\n </Annotation>\n\n <Annotation>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n <AnnotationText>\n <AnnotationLabel>← Self-custodied</AnnotationLabel>\n We never have ownership of your assets. All units are self-custodied\n </AnnotationText>\n </Annotation>\n </AnnotationContainer>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"email\") {\n return (\n <Overlay onClick={onClose}>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <BackButton onClick={handleBack}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n </svg>\n Back\n </BackButton>\n\n <Title>\n <LogoContainer>\n <LogoImage src={logoSrc} alt={logoAlt} />\n </LogoContainer>\n {isSignUp ? \"Sign up with Email\" : \"Sign in with Email\"}\n </Title>\n\n <form onSubmit={handleSendCode}>\n <EmailFormContainer>\n <EmailInput\n type=\"email\"\n placeholder=\"Enter your email address\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n autoFocus\n />\n\n {isSignUp && (\n <EmailInput\n type=\"text\"\n placeholder=\"Claim your handle (e.g. Landlord)\"\n value={handle}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setHandle(event.target.value)}\n style={{ marginTop: \"0.5rem\" }}\n />\n )}\n\n <SubmitButton type=\"submit\" disabled={loading || !email || (isSignUp && !handle)}>\n {loading ? \"Sending...\" : \"Continue\"}\n </SubmitButton>\n\n {error && <StatusMessage $error>{error}</StatusMessage>}\n </EmailFormContainer>\n </form>\n\n <InfoText>We'll send you a verification code to sign in securely.</InfoText>\n\n {isSignUp && <MiniLiveFeed />}\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"otp\") {\n return (\n <Overlay onClick={onClose}>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <BackButton onClick={() => setView(\"email\")}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n </svg>\n Back\n </BackButton>\n\n <Title>\n <LogoContainer>\n <LogoImage src={logoSrc} alt={logoAlt} />\n </LogoContainer>\n Enter Verification Code\n </Title>\n\n <InfoText style={{ marginBottom: \"1.5rem\" }}>\n We sent a code to <strong style={{ color: \"#eaecef\" }}>{email}</strong>\n </InfoText>\n\n <form onSubmit={handleVerifyCode}>\n <EmailFormContainer>\n <OTPContainer>\n {otp.map((digit, index) => (\n <OTPInput\n key={index}\n id={`otp-${index}`}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n handleOTPChange(index, event.target.value)\n }\n onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) =>\n handleOTPKeyDown(index, event)\n }\n onInput={(event: React.FormEvent<HTMLInputElement>) => handleOTPInput(index, event)}\n onPaste={handleOTPPaste}\n autoComplete={index === 0 ? \"one-time-code\" : \"off\"}\n autoFocus={index === 0}\n />\n ))}\n </OTPContainer>\n\n <SubmitButton type=\"submit\" disabled={loading || otp.join(\"\").length !== OTP_INPUT_LENGTH}>\n {loading ? \"Verifying...\" : \"Verify\"}\n </SubmitButton>\n\n {error && <StatusMessage $error>{error}</StatusMessage>}\n </EmailFormContainer>\n </form>\n\n <InfoText>\n Didn't receive a code?{' '}\n <button\n type=\"button\"\n onClick={(event) => {\n event.preventDefault();\n void handleSendCode(event);\n }}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#f0b90b\",\n cursor: \"pointer\",\n textDecoration: \"underline\",\n }}\n >\n Resend\n </button>\n </InfoText>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"kyc\") {\n return (\n <Overlay>\n <KycPopupContainer\n onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}\n $expanded={showKycWidget}\n >\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n {showKycWidget && renderKycWidget ? (\n <KycWidgetContainer>\n {renderKycWidget(handleKycWidgetResult)}\n </KycWidgetContainer>\n ) : (\n <OnboardingStepContainer>\n <OnboardingHeading>KYC to Continue</OnboardingHeading>\n <OnboardingSubtext>\n Loaf requires all users to KYC before they can start purchasing properties.\n </OnboardingSubtext>\n\n <OnboardingButtonGroup>\n <SubmitButton onClick={handleKycStart} disabled={kycLoading}>\n {kycLoading ? \"Verifying\\u2026\" : \"KYC me now\"}\n </SubmitButton>\n <OnboardingSkipButton onClick={handleKycSkip}>\n I'll do this later, I want to see the properties first\n </OnboardingSkipButton>\n </OnboardingButtonGroup>\n\n {error && <StatusMessage $error>{error}</StatusMessage>}\n </OnboardingStepContainer>\n )}\n </KycPopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"kyc-success\") {\n return (\n <Overlay>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <OnboardingStepContainer>\n <KycSuccessIcon>\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 34.5L28.5 43 44 25\" stroke=\"var(--color-accent, #e6c656)\" strokeWidth=\"4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </KycSuccessIcon>\n\n <OnboardingHeading>Success!</OnboardingHeading>\n <OnboardingSubtext>\n Your KYC check has passed!<br />\n You can start purchasing properties.\n </OnboardingSubtext>\n\n <OnboardingButtonGroup>\n <SubmitButton onClick={() => setView(\"funding\")}>\n Fund your account\n </SubmitButton>\n <OnboardingSkipButton onClick={onClose}>\n Go to my account\n </OnboardingSkipButton>\n </OnboardingButtonGroup>\n </OnboardingStepContainer>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"kyc-failed\") {\n return (\n <Overlay>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <OnboardingStepContainer>\n <KycFailedIcon>\n <svg width=\"84\" height=\"84\" viewBox=\"0 0 84 84\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"28\" cy=\"34\" r=\"5.5\" fill=\"var(--color-accent, #e6c656)\" />\n <circle cx=\"56\" cy=\"34\" r=\"5.5\" fill=\"var(--color-accent, #e6c656)\" />\n <path d=\"M24 58c5.5-5.5 12.5-8 18-8s12.5 2.5 18 8\" stroke=\"var(--color-accent, #e6c656)\" strokeWidth=\"5\" strokeLinecap=\"round\" />\n </svg>\n </KycFailedIcon>\n\n <OnboardingHeading>KYC Check Failed</OnboardingHeading>\n <OnboardingSubtext>\n Unfortunately your KYC check hasn't passed.<br />\n If you think this is an error please contact us at help@loafmarkets.com\n </OnboardingSubtext>\n\n <OnboardingButtonGroup>\n <SubmitButton\n onClick={() => {\n window.open(\"mailto:help@loafmarkets.com\", \"_blank\");\n }}\n >\n Contact us\n </SubmitButton>\n <OnboardingSkipButton onClick={onClose}>\n Go home\n </OnboardingSkipButton>\n </OnboardingButtonGroup>\n </OnboardingStepContainer>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"funding\") {\n return (\n <Overlay>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <OnboardingStepContainer>\n <OnboardingHeading>Fund your account</OnboardingHeading>\n <OnboardingSubtext>\n How much would you like to fund your account with?\n </OnboardingSubtext>\n\n <FundingCard>\n <FundingCardLabel>How much would you like to transfer?</FundingCardLabel>\n <FundingInputWrapper>\n <FundingCurrencyLabel>AUD</FundingCurrencyLabel>\n <FundingAmountInput\n type=\"text\"\n inputMode=\"decimal\"\n value={fundingAmount}\n onChange={handleFundingAmountChange}\n placeholder=\"0\"\n />\n </FundingInputWrapper>\n\n <SubmitButton onClick={handleFundWallet} disabled={fundingLoading} style={{ marginTop: \"1.25rem\" }}>\n {fundingLoading ? \"Opening Coinbase…\" : \"Fund my account\"}\n </SubmitButton>\n\n <OnboardingSkipButton onClick={handleFundingSkip} style={{ marginTop: \"0.75rem\" }}>\n Skip for now\n </OnboardingSkipButton>\n\n {fundingError && <StatusMessage $error>{fundingError}</StatusMessage>}\n </FundingCard>\n </OnboardingStepContainer>\n </PopupContainer>\n </Overlay>\n );\n }\n\n return null;\n};\n\nconst Overlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 10000;\n animation: fadeIn 0.2s ease-in-out;\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`;\n\nconst PopupContainer = styled.div`\n background-color: var(--color-background, #0a0a0a);\n border: 1px solid rgba(230, 198, 86, 0.3);\n border-radius: var(--border-radius, 12px);\n padding: 2.5rem;\n max-width: 440px;\n width: 90%;\n position: relative;\n animation: slideUp 0.3s ease-out;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n\n @keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @media (max-width: 768px) {\n padding: 2rem;\n max-width: 90%;\n }\n`;\n\ntype KycPopupContainerProps = {\n $expanded?: boolean;\n};\n\nconst KycPopupContainer = styled.div<KycPopupContainerProps>`\n background-color: var(--color-background, #0a0a0a);\n border: 1px solid rgba(230, 198, 86, 0.3);\n border-radius: var(--border-radius, 12px);\n padding: 2.5rem;\n max-width: ${(props) => (props.$expanded ? \"680px\" : \"440px\")};\n width: 90%;\n position: relative;\n animation: slideUp 0.3s ease-out;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n transition: max-width 0.3s ease;\n\n @keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @media (max-width: 768px) {\n padding: 1.5rem;\n max-width: 95%;\n }\n`;\n\nconst KycWidgetContainer = styled.div`\n min-height: 500px;\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nconst CloseButton = styled.button`\n position: absolute;\n top: 1rem;\n right: 1rem;\n background: none;\n border: none;\n color: var(--color-text-secondary, #848e9c);\n font-size: 1.5rem;\n cursor: pointer;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s ease;\n\n &:hover {\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst Title = styled.h2`\n font-size: 1.75rem;\n font-weight: 600;\n color: var(--color-text, #eaecef);\n margin-bottom: 2rem;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n`;\n\nconst LogoContainer = styled.div`\n display: flex;\n justify-content: center;\n margin-bottom: 0.5rem;\n`;\n\nconst LogoImage = styled.img`\n height: 60px;\n`;\n\nconst ButtonsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n margin-bottom: 1.5rem;\n`;\n\nconst LoginButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 1rem 1.5rem;\n background-color: var(--color-background-light, #1a1a1a);\n border: 1px solid rgba(230, 198, 86, 0.2);\n border-radius: var(--border-radius, 8px);\n color: var(--color-text, #eaecef);\n font-size: 1rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: rgba(230, 198, 86, 0.1);\n border-color: var(--color-accent, #e6c656);\n }\n\n svg {\n width: 20px;\n height: 20px;\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst Divider = styled.div`\n display: flex;\n align-items: center;\n margin: 1.5rem 0;\n\n &::before,\n &::after {\n content: \"\";\n flex: 1;\n height: 1px;\n background-color: rgba(230, 198, 86, 0.2);\n }\n`;\n\nconst InfoText = styled.p`\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.875rem;\n text-align: center;\n line-height: 1.5;\n`;\n\nconst AnnotationContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin-top: 1.5rem;\n padding-top: 1.5rem;\n border-top: 1px solid rgba(230, 198, 86, 0.2);\n`;\n\nconst Annotation = styled.div`\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.8rem;\n\n svg {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n margin-top: 2px;\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst AnnotationText = styled.span`\n flex: 1;\n line-height: 1.4;\n`;\n\nconst AnnotationLabel = styled.span`\n color: var(--color-text, #eaecef);\n font-weight: 500;\n margin-right: 0.25rem;\n`;\n\nconst EmailFormContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n margin-bottom: 1.5rem;\n`;\n\nconst EmailInput = styled.input`\n width: 100%;\n padding: 1rem 1.25rem;\n background-color: var(--color-background-light, #1a1a1a);\n border: 1px solid rgba(230, 198, 86, 0.2);\n border-radius: var(--border-radius, 8px);\n color: var(--color-text, #eaecef);\n font-size: 1rem;\n transition: all 0.2s ease;\n\n &:focus {\n outline: none;\n border-color: var(--color-accent, #e6c656);\n }\n\n &::placeholder {\n color: var(--color-text-secondary, #848e9c);\n }\n`;\n\nconst OTPContainer = styled.div`\n display: flex;\n gap: 0.5rem;\n justify-content: center;\n`;\n\nconst OTPInput = styled.input`\n width: 48px;\n height: 56px;\n text-align: center;\n font-size: 1.5rem;\n font-weight: 600;\n background-color: var(--color-background-light, #1a1a1a);\n border: 1px solid rgba(230, 198, 86, 0.2);\n border-radius: var(--border-radius, 8px);\n color: var(--color-accent, #e6c656);\n transition: all 0.2s ease;\n\n &:focus {\n outline: none;\n border-color: var(--color-accent, #e6c656);\n box-shadow: 0 0 0 2px rgba(230, 198, 86, 0.2);\n }\n`;\n\nconst SubmitButton = styled.button`\n width: 100%;\n padding: 1rem;\n background-color: var(--color-accent, #e6c656);\n border: none;\n border-radius: var(--border-radius, 8px);\n color: var(--color-background, #0a0a0a);\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: var(--color-accent-hover, #d4a50a);\n transform: translateY(-1px);\n }\n\n &:disabled {\n background-color: var(--color-background-light, #1a1a1a);\n color: var(--color-text-secondary, #848e9c);\n cursor: not-allowed;\n }\n`;\n\nconst BackButton = styled.button`\n background: none;\n border: none;\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.875rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 1rem;\n\n &:hover {\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst StatusMessage = styled.p<StatusMessageProps>`\n color: ${(props) => (props.$error ? \"#f6465d\" : \"#0ecb81\")};\n font-size: 0.875rem;\n text-align: center;\n margin-top: 0.5rem;\n`;\n\nconst OnboardingStepContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n padding: 1rem 0;\n`;\n\nconst OnboardingHeading = styled.h2`\n font-size: 1.75rem;\n font-weight: 600;\n color: var(--color-text, #eaecef);\n margin-bottom: 0.75rem;\n`;\n\nconst OnboardingSubtext = styled.p`\n font-size: 0.95rem;\n color: var(--color-text-secondary, #848e9c);\n line-height: 1.6;\n margin-bottom: 2rem;\n`;\n\nconst OnboardingButtonGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n width: 100%;\n`;\n\nconst OnboardingSkipButton = styled.button`\n width: 100%;\n padding: 0.875rem 1rem;\n background-color: rgba(255, 255, 255, 0.05);\n border: none;\n border-radius: var(--border-radius, 8px);\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.9rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n color: var(--color-text, #eaecef);\n }\n`;\n\nconst KycSuccessIcon = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 120px;\n height: 120px;\n border-radius: 50%;\n border: 8px solid var(--color-accent, #e6c656);\n margin-bottom: 1.5rem;\n`;\n\nconst KycFailedIcon = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 120px;\n height: 120px;\n border-radius: 50%;\n border: 6px solid var(--color-accent, #e6c656);\n margin-bottom: 1.5rem;\n`;\n\nconst FundingCard = styled.div`\n width: 100%;\n border-radius: 24px;\n background-color: var(--color-background-light, #14151e);\n padding: 1.75rem;\n text-align: left;\n box-shadow: 0 35px 120px rgba(0, 0, 0, 0.65);\n`;\n\nconst FundingCardLabel = styled.p`\n font-size: 1.05rem;\n color: var(--color-text, #eaecef);\n margin-bottom: 1rem;\n`;\n\nconst FundingInputWrapper = styled.div`\n border-radius: 16px;\n border: 1px solid rgba(255, 255, 255, 0.05);\n background-color: var(--color-background, #0d0e14);\n padding: 1rem 1.25rem;\n`;\n\nconst FundingCurrencyLabel = styled.label`\n display: block;\n font-size: 0.65rem;\n text-transform: uppercase;\n letter-spacing: 0.4em;\n color: rgba(255, 255, 255, 0.45);\n`;\n\nconst FundingAmountInput = styled.input`\n width: 100%;\n background: transparent;\n border: none;\n outline: none;\n font-size: 2.25rem;\n font-weight: 400;\n color: var(--color-text, #eaecef);\n margin-top: 0.75rem;\n font-family: \"Geist Mono\", \"Space Grotesk\", monospace;\n font-variant-numeric: slashed-zero;\n\n &::placeholder {\n color: rgba(255, 255, 255, 0.4);\n }\n`;\n\nconst MiniLiveFeed: React.FC = () => {\n const [purchases, setPurchases] = useState<MiniLiveFeedPurchase[]>([]);\n\n useEffect(() => {\n const handles = [\n \"Landlord\",\n \"PropertyKing\",\n \"RealEstateGuru\",\n \"InvestorPro\",\n \"WealthBuilder\",\n \"AssetHunter\",\n \"PortfolioMax\",\n \"CapitalGains\",\n \"DividendKing\",\n \"YieldSeeker\",\n \"BrickNMortar\",\n \"EquityBoss\",\n \"CashFlowKing\",\n \"PropMogul\",\n \"RentCollector\",\n \"LandBaron\",\n \"EstateBuilder\",\n \"ValueInvestor\",\n \"GrowthSeeker\",\n \"PassiveIncome\",\n \"WealthyOwl\",\n \"SmartMoney\",\n \"AlphaInvestor\",\n \"DiamondHands\",\n \"GoldenGoose\",\n \"EliteHolder\",\n \"TopTierInvestor\",\n \"PlatinumPro\",\n \"AussieInvestor\",\n \"HarbourHero\",\n \"James W.\",\n \"Sarah M.\",\n \"Michael T.\",\n \"Emma L.\",\n \"David K.\",\n \"Sophie R.\",\n \"Chris B.\",\n \"Jessica H.\",\n \"Andrew P.\",\n \"Rachel S.\",\n \"Daniel C.\",\n \"Olivia N.\",\n ];\n\n const generatePurchase = (): MiniLiveFeedPurchase => {\n const tokenPrice = 250;\n const tokenCount = Math.floor(Math.random() * 150) + 10;\n const amount = tokenPrice * tokenCount;\n const randomHandle = handles[Math.floor(Math.random() * handles.length)];\n return {\n id: `p-${Date.now()}-${Math.random()}`,\n name: randomHandle,\n amount,\n timestamp: new Date().toISOString(),\n };\n };\n\n const initial = Array.from({ length: 5 }, generatePurchase);\n setPurchases(initial);\n\n const interval = setInterval(() => {\n setPurchases((prev) => [generatePurchase(), ...prev.slice(0, 5)]);\n }, 2000 + Math.random() * 2000);\n\n return () => clearInterval(interval);\n }, []);\n\n const formatCurrency = (amount: number) => `$${amount.toLocaleString()}`;\n\n return (\n <div\n style={{\n marginTop: \"1rem\",\n maxHeight: \"180px\",\n overflow: \"hidden\",\n borderRadius: \"8px\",\n background: \"rgba(0, 0, 0, 0.3)\",\n }}\n >\n <div\n style={{\n fontSize: \"0.7rem\",\n color: \"var(--color-text-secondary, #848e9c)\",\n padding: \"0.5rem 0.75rem\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.05)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.4rem\",\n }}\n >\n <span\n style={{\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n background: \"#0ecb81\",\n animation: \"pulse 1.5s infinite\",\n }}\n ></span>\n Handles will Appear:\n </div>\n {purchases.map((purchase, index) => {\n const maxAmount = 40000;\n const barPercent = Math.min(80, Math.max(15, (purchase.amount / maxAmount) * 100));\n return (\n <div\n key={purchase.id}\n style={{\n padding: \"0.4rem 0.75rem\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.03)\",\n position: \"relative\",\n animation: index === 0 ? \"slideIn 0.3s ease-out\" : \"none\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n width: `${barPercent}%`,\n background: \"linear-gradient(90deg, transparent 0%, rgba(14, 203, 129, 0.12) 100%)\",\n pointerEvents: \"none\",\n }}\n ></div>\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n bottom: 0,\n width: \"2px\",\n background: index === 0 ? \"rgba(14, 203, 129, 0.5)\" : \"transparent\",\n }}\n ></div>\n <div style={{ position: \"relative\", zIndex: 1 }}>\n <div style={{ fontSize: \"0.8rem\", fontWeight: 500, color: \"#fff\" }}>{purchase.name}</div>\n <div style={{ fontSize: \"0.65rem\", color: \"var(--color-text-secondary, #848e9c)\" }}>\n less than a minute ago\n </div>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\", position: \"relative\", zIndex: 1 }}>\n <span style={{ fontSize: \"0.75rem\", color: \"var(--color-text-secondary, #848e9c)\" }}>bought</span>\n <span style={{ fontSize: \"0.8rem\", fontWeight: 600, color: \"#fff\" }}>{formatCurrency(purchase.amount)}</span>\n </div>\n </div>\n );\n })}\n <style>\n {`\n @keyframes slideIn {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `}\n </style>\n </div>\n );\n};\n\nLoginPopup.displayName = \"LoginPopup\";\n\n","import * as React from \"react\";\nimport styled, { css } from \"styled-components\";\n\nexport type PropertyAddressOption = {\n id: string;\n label: string;\n};\n\nexport type PropertyValueSummary = {\n value: number;\n change?: number;\n label?: string;\n currencySymbol?: string;\n formatOptions?: Intl.NumberFormatOptions;\n};\n\nexport type PropertyPriceSummary = {\n value: number;\n change?: number;\n changePercent?: number;\n currencySymbol?: string;\n formatOptions?: Intl.NumberFormatOptions;\n percentFormatOptions?: Intl.NumberFormatOptions;\n};\n\nexport type PropertyCompareBarProps = React.HTMLAttributes<HTMLDivElement> & {\n addresses: (PropertyAddressOption | string)[];\n selectedAddressId?: string;\n onSelectAddress?: (addressId: string) => void;\n propertyValue?: PropertyValueSummary;\n propertyValueVariant?: \"classic\" | \"card\" | \"pill\";\n price?: PropertyPriceSummary;\n};\n\nexport const PropertyCompareBar = React.forwardRef<HTMLDivElement, PropertyCompareBarProps>(\n (\n {\n className,\n addresses,\n selectedAddressId,\n onSelectAddress,\n propertyValue,\n propertyValueVariant = \"classic\",\n price,\n ...props\n },\n ref\n ) => {\n const normalizedAddresses = React.useMemo<PropertyAddressOption[]>(() => {\n return addresses.map((option) =>\n typeof option === \"string\" ? { id: option, label: option } : option\n );\n }, [addresses]);\n\n const hasAddresses = normalizedAddresses.length > 0;\n const firstAddressId = normalizedAddresses[0]?.id;\n\n const isControlled = selectedAddressId !== undefined;\n\n const [internalSelectedId, setInternalSelectedId] = React.useState<string | undefined>(() =>\n isControlled ? undefined : firstAddressId\n );\n\n const resolvedSelectedId = isControlled ? selectedAddressId : internalSelectedId;\n\n React.useEffect(() => {\n if (!isControlled) {\n setInternalSelectedId((current) => {\n if (current != null && normalizedAddresses.some((option) => option.id === current)) {\n return current;\n }\n\n return firstAddressId;\n });\n }\n }, [firstAddressId, isControlled, normalizedAddresses]);\n\n const selectedOption =\n normalizedAddresses.find((option) => option.id === resolvedSelectedId) ?? normalizedAddresses[0];\n\n const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);\n\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!isDropdownOpen) return;\n\n const handleClick = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsDropdownOpen(false);\n }\n };\n\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsDropdownOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [isDropdownOpen]);\n\n const handleAddressSelect = (addressId: string) => {\n if (!isControlled) {\n setInternalSelectedId(addressId);\n }\n onSelectAddress?.(addressId);\n setIsDropdownOpen(false);\n };\n\n const propertyValueLabel = propertyValue?.label ?? \"Property Value\";\n const propertyValueCurrency = propertyValue?.currencySymbol ?? \"$\";\n const propertyValueFormat =\n propertyValue?.formatOptions ?? ({\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n } satisfies Intl.NumberFormatOptions);\n const formattedPropertyValue =\n propertyValue == null\n ? null\n : `${propertyValueCurrency}${propertyValue.value.toLocaleString(\n undefined,\n propertyValueFormat\n )}`;\n const formattedPropertyChange =\n propertyValue?.change == null\n ? null\n : `${propertyValue.change >= 0 ? \"+\" : \"-\"}${propertyValueCurrency}${Math.abs(\n propertyValue.change\n ).toLocaleString(undefined, propertyValueFormat)}`;\n const priceCurrency = price?.currencySymbol ?? \"$\";\n const priceFormat =\n price?.formatOptions ?? ({ minimumFractionDigits: 2, maximumFractionDigits: 2 } satisfies Intl.NumberFormatOptions);\n const pricePercentFormat =\n price?.percentFormatOptions ?? ({ minimumFractionDigits: 2, maximumFractionDigits: 2 } satisfies Intl.NumberFormatOptions);\n const formattedPriceValue =\n price == null\n ? null\n : `${priceCurrency}${price.value.toLocaleString(undefined, priceFormat)}`;\n const formattedPriceChange =\n price?.change == null\n ? null\n : `${price.change >= 0 ? \"+\" : \"-\"}${priceCurrency}${Math.abs(price.change).toLocaleString(\n undefined,\n priceFormat\n )}`;\n const formattedPricePercent =\n price?.changePercent == null\n ? null\n : `${price.changePercent >= 0 ? \"+\" : \"-\"}${Math.abs(price.changePercent).toLocaleString(\n undefined,\n pricePercentFormat\n )}%`;\n const priceContent =\n formattedPriceValue && propertyValueVariant === \"pill\" ? (\n <PriceBlock $variant={propertyValueVariant}>\n <PriceAmount>{formattedPriceValue}</PriceAmount>\n {formattedPriceChange || formattedPricePercent ? (\n <PriceChange\n $isPositive={\n price?.change != null\n ? price.change >= 0\n : price?.changePercent != null\n ? price.changePercent >= 0\n : undefined\n }\n >\n {formattedPriceChange ? <span>{formattedPriceChange}</span> : null}\n {formattedPricePercent ? <span>{formattedPricePercent}</span> : null}\n </PriceChange>\n ) : null}\n </PriceBlock>\n ) : null;\n\n const propertyValueContent = formattedPropertyValue ? (\n <PropertyValueBlock $variant={propertyValueVariant}>\n <PropertyValueLabel>{propertyValueLabel}</PropertyValueLabel>\n <PropertyValueAmount>{formattedPropertyValue}</PropertyValueAmount>\n {formattedPropertyChange ? (\n <PropertyValueChange $isPositive={propertyValue?.change != null ? propertyValue.change >= 0 : undefined}>\n {formattedPropertyChange}\n </PropertyValueChange>\n ) : null}\n </PropertyValueBlock>\n ) : null;\n\n return (\n <PropertySelectorContainer ref={ref} className={className} $variant={propertyValueVariant} {...props}>\n <PropertySelector ref={dropdownRef} onClick={() => hasAddresses && setIsDropdownOpen((prev) => !prev)}>\n <PropertyAddress>\n {selectedOption ? selectedOption.label : hasAddresses ? \"Select address\" : \"No addresses available\"}\n <svg\n className=\"dropdown-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n style={{ transform: isDropdownOpen ? \"rotate(180deg)\" : undefined }}\n >\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>\n </PropertyAddress>\n\n <PropertySelectorDropdown $isOpen={isDropdownOpen && hasAddresses}>\n {normalizedAddresses.map((option) => (\n <PropertySelectorOption\n key={option.id}\n onClick={(event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n handleAddressSelect(option.id);\n }}\n >\n <PropertySelectorName>{option.label}</PropertySelectorName>\n </PropertySelectorOption>\n ))}\n </PropertySelectorDropdown>\n </PropertySelector>\n\n {propertyValueVariant === \"pill\" ? (\n <>\n {priceContent}\n {propertyValueContent}\n </>\n ) : (\n propertyValueContent\n )}\n </PropertySelectorContainer>\n );\n }\n);\n\nPropertyCompareBar.displayName = \"PropertyCompareBar\";\n\nconst PropertySelectorContainer = styled.div<{ $variant: \"classic\" | \"card\" | \"pill\" }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1.5rem;\n background-color: ${({ $variant }) => ($variant === \"pill\" ? \"#0f0f0f\" : \"rgba(30, 32, 38, 0.95)\")};\n border: ${({ $variant }) => ($variant === \"pill\" ? \"1px solid rgba(255, 255, 255, 0.15)\" : \"none\")};\n border-radius: 8px;\n margin-bottom: 1.5rem;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n color: var(--color-text, #f8f9fa);\n font-family: var(--font-family, \"Inter\", sans-serif);\n\n @media (max-width: 1024px) {\n padding: 0.75rem 1rem;\n margin-bottom: 0.75rem;\n }\n\n @media (max-width: 768px) {\n border-radius: 0;\n margin-top: 0;\n padding-top: 0.5rem;\n }\n\n @media (max-width: 600px) {\n width: 100%;\n\n ${({ $variant }) =>\n $variant === \"pill\"\n ? css`\n display: grid;\n grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr) minmax(0, 1fr);\n gap: 0.35rem;\n align-items: center;\n\n > *:nth-child(1) {\n width: 100%;\n }\n\n > *:nth-child(2) {\n justify-self: center;\n width: 100%;\n }\n\n > *:nth-child(3) {\n justify-self: end;\n text-align: right;\n }\n `\n : css`\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n `};\n }\n`;\n\nconst PropertySelector = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 0.5rem 0;\n flex: 1;\n\n &:hover {\n .dropdown-icon {\n transform: translateY(2px);\n }\n }\n`;\n\nconst PropertyAddress = styled.div`\n font-size: 1.125rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n color: inherit;\n\n svg {\n transition: transform 0.2s;\n }\n\n @media (max-width: 600px) {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.2rem;\n font-size: 1rem;\n line-height: 1.2;\n white-space: normal;\n }\n`;\n\nconst PropertySelectorDropdown = styled.div<{ $isOpen: boolean }>`\n position: absolute;\n top: 100%;\n left: 0;\n width: 100%;\n max-width: 400px;\n background-color: var(--color-card, #1f232b);\n border-radius: 8px;\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);\n z-index: 100;\n overflow: hidden;\n display: ${(props) => (props.$isOpen ? \"block\" : \"none\")};\n`;\n\nconst PropertySelectorOption = styled.div`\n padding: 0.75rem 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n cursor: pointer;\n transition: background-color 0.2s;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nconst PropertySelectorName = styled.div`\n font-weight: 600;\n`;\n\nconst PropertyValueBlock = styled.div<{ $variant: \"classic\" | \"card\" | \"pill\" }>`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-left: 1rem;\n white-space: nowrap;\n\n ${({ $variant }) =>\n $variant === \"card\" &&\n css`\n margin-left: auto;\n flex-direction: row;\n align-items: center;\n min-width: 220px;\n border: none;\n background: rgba(30, 32, 38, 0.95);\n border-radius: 14px;\n padding: 0.9rem 1.25rem;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);\n gap: 0.85rem;\n justify-content: flex-end;\n\n @media (max-width: 600px) {\n margin: 0;\n width: auto;\n min-width: 0;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.125rem;\n padding: 0;\n background: transparent;\n border-radius: 0;\n box-shadow: none;\n }\n `}\n\n ${({ $variant }) =>\n $variant === \"pill\" &&\n css`\n margin-left: auto;\n margin-right: 1rem;\n background: #191919;\n border-radius: 8px;\n border: 1px solid rgba(255, 255, 255, 0.05);\n padding: 0.5rem 1rem;\n gap: 1rem;\n align-items: center;\n\n @media (max-width: 600px) {\n margin: 0;\n width: 100%;\n min-width: 0;\n flex-direction: column;\n align-items: flex-end;\n text-align: right;\n gap: 0.2rem;\n padding: 0;\n background: transparent;\n border-radius: 0;\n border: none;\n white-space: normal;\n }\n `}\n\n @media (max-width: 600px) {\n margin: 0;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.2rem;\n white-space: normal;\n }\n`;\n\nconst PropertyValueLabel = styled.span`\n font-size: 0.7rem;\n color: var(--color-text-secondary, rgba(255, 255, 255, 0.6));\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n @media (max-width: 600px) {\n font-size: 0.6rem;\n letter-spacing: 0.4px;\n }\n`;\n\nconst PropertyValueAmount = styled.span`\n font-size: 1.1rem;\n font-weight: 600;\n color: #fff;\n\n @media (max-width: 600px) {\n font-size: 0.95rem;\n }\n`;\n\nconst PropertyValueChange = styled.span<{ $isPositive?: boolean }>`\n font-size: 0.75rem;\n font-weight: 500;\n color: ${(props) =>\n props.$isPositive == null\n ? \"var(--color-text-secondary, rgba(255, 255, 255, 0.6))\"\n : props.$isPositive\n ? \"var(--color-positive, #0ecb81)\"\n : \"var(--color-negative, #f6465d)\"};\n\n @media (max-width: 600px) {\n font-size: 0.65rem;\n }\n`;\n\nconst PriceBlock = styled.div<{ $variant: \"classic\" | \"card\" | \"pill\" }>`\n display: none;\n\n ${({ $variant }) =>\n $variant === \"pill\" &&\n css`\n @media (max-width: 600px) {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.15rem;\n width: 100%;\n }\n `}\n`;\n\nconst PriceAmount = styled.span`\n font-size: 1.6rem;\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.2px;\n`;\n\nconst PriceChange = styled.span<{ $isPositive?: boolean }>`\n font-size: 0.85rem;\n font-weight: 500;\n display: inline-flex;\n gap: 0.35rem;\n color: ${(props) =>\n props.$isPositive == null\n ? \"var(--color-text-secondary, rgba(255, 255, 255, 0.6))\"\n : props.$isPositive\n ? \"var(--color-positive, #0ecb81)\"\n : \"var(--color-negative, #f6465d)\"};\n`;\n","import styled from 'styled-components'\n\nexport interface OverviewResponse {\n readonly description: string;\n readonly tokensIssued: number;\n readonly offeringValuation: number;\n readonly weeklyRent: number;\n readonly indicativeListing: string;\n readonly minimumParticipation?: number;\n readonly landSizeSqm: number;\n readonly buildingSizeSqm: number;\n readonly swimmingPool: boolean;\n readonly tennisCourt: boolean;\n readonly garden: boolean;\n readonly gym: boolean;\n readonly propertyType?: string;\n readonly yearBuilt: number;\n readonly ownership: string;\n readonly zoning: string;\n readonly levels: number;\n readonly daStatus: string;\n}\n\nexport type PropertyOverviewProps = {\n propertyName: string\n location: string\n midPrice: number\n onTradeClick?: () => void\n overviewData?: OverviewResponse | null\n minimumParticipation?: number | null\n bedrooms?: number | null\n bathrooms?: number | null\n carSpaces?: number | null\n propertyTypeLabel?: string | null\n}\n\nexport function PropertyOverview({\n propertyName: _propertyName,\n location: _location,\n midPrice: _midPrice,\n onTradeClick: _onTradeClick,\n overviewData,\n minimumParticipation,\n bedrooms,\n bathrooms,\n carSpaces,\n propertyTypeLabel,\n}: PropertyOverviewProps) {\n // Use backend data or show N/A when not available\n const description = overviewData?.description ?? \"N/A\"\n const tokensIssued = overviewData?.tokensIssued ?? null\n const offeringValuation = overviewData?.offeringValuation ?? null\n const weeklyRent = overviewData?.weeklyRent ?? null\n const indicativeListing = overviewData?.indicativeListing ?? \"N/A\"\n const minParticipationValue =\n minimumParticipation ?? overviewData?.minimumParticipation ?? null\n\n const landSize = overviewData?.landSizeSqm ?? null\n const buildingSize = overviewData?.buildingSizeSqm ?? null\n const propertyType = propertyTypeLabel ?? overviewData?.propertyType ?? \"N/A\"\n const yearBuilt = overviewData?.yearBuilt ?? null\n const ownership = overviewData?.ownership ?? \"N/A\"\n const zoning = overviewData?.zoning ?? \"N/A\"\n const levels = overviewData?.levels ?? null\n const daStatus = overviewData?.daStatus ?? \"N/A\"\n\n const unitPrice = tokensIssued && offeringValuation ? offeringValuation / tokensIssued : null\n const formattedPropertyType = propertyType !== 'N/A'\n ? propertyType.charAt(0).toUpperCase() + propertyType.slice(1).toLowerCase()\n : 'N/A'\n\n return (\n <>\n <TwoColGrid>\n <Section>\n <SectionHeading>About This Property</SectionHeading>\n <BodyText>\n {description === \"N/A\" ? (\n description\n ) : (\n description.split('\\n\\n').map((paragraph: string, i: number) => (\n <span key={i}>\n {paragraph}\n {i < description.split('\\n\\n').length - 1 && <><br /><br /></>}\n </span>\n ))\n )}\n </BodyText>\n </Section>\n\n <Section>\n <SectionHeading>The Offering</SectionHeading>\n <OfferingGrid>\n {[\n { label: 'Units Issued', value: tokensIssued?.toLocaleString() ?? '-', gold: false },\n { label: 'Issue Price', value: unitPrice ? `$${unitPrice.toFixed(2)} / Unit` : '-', gold: true },\n { label: 'Implied Value', value: offeringValuation ? `$${offeringValuation.toLocaleString()}` : '-', gold: false },\n { label: 'Minimum Participation', value: minParticipationValue != null ? `$${minParticipationValue.toLocaleString()}` : '-', gold: false },\n { label: 'Est. Cash Flow', value: weeklyRent ? `$${weeklyRent.toLocaleString()}/wk` : '-', gold: true },\n { label: 'Indicative Listing Date', value: indicativeListing, gold: false },\n ].map(({ label, value, gold }) => (\n <OfferingItem key={label}>\n <OfferingLabel>{label}</OfferingLabel>\n <OfferingValue $gold={gold}>{value}</OfferingValue>\n </OfferingItem>\n ))}\n </OfferingGrid>\n </Section>\n </TwoColGrid>\n\n <Section>\n <AssetDetailsHeader>\n <GoldBar />\n <AssetDetailsTitle>Asset Details</AssetDetailsTitle>\n </AssetDetailsHeader>\n\n <StatGrid>\n {[\n { label: 'Bedrooms', value: bedrooms != null ? bedrooms.toString() : '-', icon: '🛏️' },\n { label: 'Bathrooms', value: bathrooms != null ? bathrooms.toString() : '-', icon: '🚿' },\n { type: 'dual' as const, label1: 'Land', value1: landSize?.toString() ?? '-', label2: 'Floor', value2: buildingSize?.toString() ?? '-', unit: 'sqm', highlight: true },\n { label: 'Car Spaces', value: carSpaces != null ? carSpaces.toString() : '-', icon: '🚗' }\n ].map((stat, i) => (\n <StatCard key={i} $highlight={!!stat.highlight}>\n {stat.type === 'dual' ? (\n <DualStatInner>\n <DualStatCol>\n <StatLabel $gold>{stat.label1}</StatLabel>\n <StatValueRow>\n <StatBigValue $gold>{stat.value1}</StatBigValue>\n <StatUnit $gold>{stat.unit}</StatUnit>\n </StatValueRow>\n </DualStatCol>\n <DualDivider />\n <DualStatCol>\n <StatLabel $gold>{stat.label2}</StatLabel>\n <StatValueRow>\n <StatBigValue $gold>{stat.value2}</StatBigValue>\n <StatUnit $gold>{stat.unit}</StatUnit>\n </StatValueRow>\n </DualStatCol>\n </DualStatInner>\n ) : (\n <>\n <StatLabel $gold={!!stat.highlight}>{stat.label}</StatLabel>\n <StatBigValue $gold={!!stat.highlight}>{stat.value}</StatBigValue>\n </>\n )}\n </StatCard>\n ))}\n </StatGrid>\n\n <DetailTable>\n <DetailTableGrid>\n {[\n { label: 'Last Sale', value: '-' },\n { label: 'Suburb Median', value: '-' },\n { label: 'Replication Cost of Architecture', value: '-' },\n { label: 'DA Status', value: daStatus, status: daStatus.toLowerCase() === 'approved' ? 'success' : 'progress' },\n { label: 'Property Type', value: formattedPropertyType },\n { label: 'Ownership', value: ownership ?? 'N/A' },\n { label: 'Zoning', value: zoning ?? 'N/A' },\n { label: 'Levels', value: levels?.toString() ?? 'N/A' }\n ].map((item, i) => (\n <DetailCell key={i} $borderBottom={i < 4} $borderRight={(i + 1) % 4 !== 0}>\n <DetailCellLabel>{item.label}</DetailCellLabel>\n <DetailCellValue $status={item.status}>\n {(item.status === 'success' || item.status === 'progress') && (\n <StatusDot $status={item.status} />\n )}\n {item.value}\n </DetailCellValue>\n </DetailCell>\n ))}\n </DetailTableGrid>\n </DetailTable>\n </Section>\n </>\n )\n}\n\nconst TwoColGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n margin-bottom: 2rem;\n\n @media (max-width: 768px) {\n grid-template-columns: 1fr;\n }\n`\n\nconst Section = styled.section`\n background: var(--color-card, rgba(30, 35, 41, 0.8));\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionHeading = styled.h2`\n font-size: 0.9rem;\n font-weight: 600;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n`\n\nconst BodyText = styled.p`\n color: var(--color-text);\n line-height: 1.7;\n font-size: 1rem;\n`\n\nconst OfferingGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n gap: 1.5rem;\n`\n\nconst OfferingItem = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst OfferingLabel = styled.span`\n color: var(--color-text-secondary);\n font-size: 0.75rem;\n margin-bottom: 0.25rem;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n`\n\nconst OfferingValue = styled.span<{ $gold: boolean }>`\n font-weight: 600;\n font-size: 1.125rem;\n color: ${({ $gold }) => ($gold ? 'var(--color-accent, #f0b90b)' : 'var(--color-text)')};\n`\n\nconst AssetDetailsHeader = styled.div`\n display: flex;\n align-items: center;\n gap: 1rem;\n margin-bottom: 2rem;\n`\n\nconst GoldBar = styled.div`\n width: 4px;\n height: 1.75rem;\n border-radius: 2px;\n background: linear-gradient(180deg, #D4AF37 0%, #B8860B 100%);\n`\n\nconst AssetDetailsTitle = styled.h2`\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--color-text);\n`\n\nconst StatGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 1rem;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n }\n`\n\nconst StatCard = styled.div<{ $highlight: boolean }>`\n border-radius: 1rem;\n padding: 1.25rem;\n border: 1px solid ${({ $highlight }) => ($highlight ? 'rgba(212,175,55,0.3)' : 'rgba(255,255,255,0.06)')};\n background: ${({ $highlight }) =>\n $highlight\n ? 'linear-gradient(135deg, rgba(212,175,55,0.15) 0%, rgba(184,134,11,0.08) 100%)'\n : 'linear-gradient(135deg, rgba(255,255,255,0.04) 0%, rgba(255,255,255,0.02) 100%)'};\n transition: all 0.3s;\n cursor: default;\n`\n\nconst DualStatInner = styled.div`\n display: flex;\n gap: 1rem;\n`\n\nconst DualStatCol = styled.div`\n flex: 1;\n`\n\nconst DualDivider = styled.div`\n width: 1px;\n background: rgba(212, 175, 55, 0.3);\n`\n\nconst StatLabel = styled.div<{ $gold?: boolean }>`\n font-size: 0.7rem;\n color: ${({ $gold }) => ($gold ? '#D4AF37' : 'var(--color-text-secondary)')};\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-bottom: 0.5rem;\n font-weight: 500;\n`\n\nconst StatValueRow = styled.div`\n display: flex;\n align-items: baseline;\n gap: 0.25rem;\n`\n\nconst StatBigValue = styled.span<{ $gold?: boolean }>`\n font-size: ${({ $gold }) => ($gold ? '1.75rem' : '2rem')};\n font-weight: 700;\n color: ${({ $gold }) => ($gold ? '#D4AF37' : 'var(--color-text)')};\n line-height: 1;\n`\n\nconst StatUnit = styled.span<{ $gold?: boolean }>`\n font-size: 0.75rem;\n color: ${({ $gold }) => ($gold ? 'rgba(212,175,55,0.7)' : 'var(--color-text-secondary)')};\n font-weight: 500;\n`\n\nconst DetailTable = styled.div`\n border-radius: 1rem;\n padding: 1.5rem;\n border: 1px solid rgba(255, 255, 255, 0.06);\n background: linear-gradient(135deg, rgba(255,255,255,0.03) 0%, rgba(255,255,255,0.01) 100%);\n`\n\nconst DetailTableGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n }\n`\n\nconst DetailCell = styled.div<{ $borderBottom: boolean; $borderRight: boolean }>`\n padding: 1rem 1.25rem;\n border-bottom: ${({ $borderBottom }) => ($borderBottom ? '1px solid rgba(255,255,255,0.06)' : 'none')};\n border-right: ${({ $borderRight }) => ($borderRight ? '1px solid rgba(255,255,255,0.06)' : 'none')};\n`\n\nconst DetailCellLabel = styled.div`\n font-size: 0.65rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-bottom: 0.5rem;\n font-weight: 500;\n`\n\nconst DetailCellValue = styled.div<{ $status?: string }>`\n font-size: 1rem;\n font-weight: 600;\n color: ${({ $status }) =>\n $status === 'success' ? '#10B981' : $status === 'progress' ? '#D4AF37' : 'var(--color-text)'};\n display: flex;\n align-items: center;\n`\n\nconst StatusDot = styled.span<{ $status: string }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 0.5rem;\n background: ${({ $status }) => ($status === 'success' ? '#10B981' : '#D4AF37')};\n box-shadow: ${({ $status }) =>\n $status === 'success' ? '0 0 8px rgba(16,185,129,0.5)' : '0 0 8px rgba(212,175,55,0.5)'};\n`\n","import styled from 'styled-components'\n\nexport type OfferStatus = 'active' | 'rejected' | 'expired' | 'historical' | 'pending'\n\nconst STATUS_BG: Record<OfferStatus, string> = {\n active: 'rgba(14,203,129,0.18)',\n rejected: 'rgba(246,70,93,0.18)',\n pending: 'rgba(242,201,76,0.2)',\n historical: 'rgba(56,97,251,0.18)',\n expired: 'rgba(255,255,255,0.12)',\n}\nconst STATUS_COLOR: Record<OfferStatus, string> = {\n active: '#0ecb81',\n rejected: '#f6465d',\n pending: '#f2c94c',\n historical: '#3861fb',\n expired: 'rgba(255,255,255,0.7)',\n}\n\nexport type PropertyOffer = {\n id: number\n price: string\n buyer: string\n date: string\n expiry: string\n status: OfferStatus\n conditions: string\n}\n\nexport type PropertyOffersProps = {\n offers: PropertyOffer[]\n}\n\nexport function PropertyOffers({ offers }: PropertyOffersProps) {\n return (\n <section className=\"bg-[rgba(30,32,38,0.95)] rounded-md p-7 border border-white/[0.08]\">\n <header className=\"flex justify-between items-center gap-4 flex-wrap\">\n <h2 className=\"m-0 text-xl font-semibold\">Active &amp; Historical Buyout Offers</h2>\n <div className=\"flex gap-3 flex-wrap\">\n <button\n onClick={() => alert('Coming soon...')}\n className=\"rounded-md px-6 py-[0.65rem] font-semibold text-[0.9rem] cursor-pointer transition-all duration-200 bg-[var(--color-accent,#f0b90b)] border-none text-black hover:bg-[var(--color-accent-hover,#f8d12f)] hover:-translate-y-px\"\n >Make Offer</button>\n <button\n onClick={() => alert('Coming soon...')}\n className=\"rounded-md px-6 py-[0.65rem] font-semibold text-[0.9rem] cursor-pointer transition-all duration-200 bg-transparent border border-[var(--color-accent,#f0b90b)] text-[var(--color-accent,#f0b90b)] hover:bg-[rgba(240,185,11,0.12)] hover:-translate-y-px\"\n >Enquire</button>\n </div>\n </header>\n\n <div className=\"flex flex-col gap-4 mt-6\">\n {offers.map((offer) => (\n <div\n key={offer.id}\n className=\"flex justify-between items-center gap-4 p-5 rounded-md bg-white/[0.03] border border-white/[0.06] flex-wrap transition-all duration-200 hover:border-white/[0.12] hover:bg-white/[0.05]\"\n >\n <div className=\"flex-1 min-w-[240px]\">\n <div className=\"font-semibold text-[1.15rem] inline-flex items-center gap-2\">\n {offer.price}\n {(offer.price === '$17,000,000' || offer.price === '$15,500,000') && (\n <OfferPricePulse $variant={offer.price === '$17,000,000' ? 'positive' : 'alert'} />\n )}\n </div>\n <div className=\"text-[0.85rem] text-white/65 mt-[0.3rem]\">\n by {offer.buyer} • {offer.date} • Expires: {offer.expiry}\n </div>\n <div className=\"text-[0.82rem] mt-[0.45rem] text-white/75\">{offer.conditions}</div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"px-[0.85rem] py-[0.4rem] rounded-md text-[0.78rem] font-semibold uppercase tracking-[0.08em]\"\n style={{ background: STATUS_BG[offer.status], color: STATUS_COLOR[offer.status] }}\n >{offer.status}</span>\n {offer.status === 'active' && (\n <button\n onClick={() => alert(`Voted for offer: ${offer.price} by ${offer.buyer}`)}\n className=\"bg-[var(--color-accent,#f0b90b)] text-black border-none rounded-md px-5 py-[0.45rem] font-semibold text-[0.78rem] uppercase cursor-pointer transition-all duration-200 hover:bg-[var(--color-accent-hover,#f8d12f)] hover:-translate-y-px\"\n >Vote</button>\n )}\n </div>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\nconst OfferPricePulse = styled.span<{ $variant: 'positive' | 'alert' }>`\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: ${({ $variant }) => ($variant === 'positive' ? '#4caf50' : '#f6465d')};\n box-shadow: 0 0 6px\n ${({ $variant }) => ($variant === 'positive' ? 'rgba(76, 175, 80, 0.7)' : 'rgba(246, 70, 93, 0.7)')};\n`\n\n","import { useMemo, useState } from 'react'\nimport styled, { css } from 'styled-components'\nimport { BiChevronDown, BiChevronUp } from 'react-icons/bi'\n\n// styled-components kept for: FilterButton ($active), HistoryContainer (::before), HistoryPanel (::before/::after + $isLoafListing), LeaseSection (::before), HistoryRow ($isOwnershipStart), TypeBadge (dynamic colors)\n\nconst eventTypes = ['Leased', 'Renovated', 'Extended', 'Rebuilt', 'Rezoned', 'DA Approval'] as const\n\ntype HistoryFilter = 'all' | 'sales' | 'events' | 'loaf' | 'lease'\n\ntype PastSale = {\n id: string\n type: (typeof eventTypes)[number] | 'Listed' | 'Sale' | string\n saleType?: string\n date: string\n price: string\n buyer: string\n seller: string\n agent: string\n ownershipPeriod: string\n sortOrder: number\n isOwnershipStart?: boolean\n isOwnershipEnd?: boolean\n percentGain?: number\n leaseTerm?: string\n weeklyRate?: string\n description?: string\n}\n\nexport function PropertyHistory() {\n const [historyFilter, setHistoryFilter] = useState<HistoryFilter>('all')\n\n const pastSales = useMemo(() => generateMockPastSales(), [])\n\n const loafListing = pastSales.find((sale) => sale.type === 'Listed')\n const loafEvents = pastSales.filter(\n (sale) =>\n sale.ownershipPeriod === 'current' &&\n sale.type !== 'Listed' &&\n (sale.id === 'leased-current' || sale.id === 'da-approval'),\n )\n\n return (\n <PastSalesSection>\n <div className=\"flex justify-between items-center mb-4 gap-4 flex-wrap\">\n <h2>Property History</h2>\n <FilterButtonsContainer>\n <FilterButton type=\"button\" $active={historyFilter === 'all'} onClick={() => setHistoryFilter('all')}>\n All\n </FilterButton>\n <FilterButton\n type=\"button\"\n $active={historyFilter === 'sales'}\n onClick={() => setHistoryFilter('sales')}\n >\n Sales\n </FilterButton>\n <FilterButton\n type=\"button\"\n $active={historyFilter === 'events'}\n onClick={() => setHistoryFilter('events')}\n >\n Events\n </FilterButton>\n <FilterButton\n type=\"button\"\n $active={historyFilter === 'loaf'}\n onClick={() => setHistoryFilter('loaf')}\n >\n Listed\n </FilterButton>\n </FilterButtonsContainer>\n </div>\n\n <HistoryContainer>\n <table className=\"w-full border-collapse mb-2\">\n <thead>\n <tr>\n <th className=\"text-left px-4 py-3 text-white/70 font-medium text-[0.9rem] border-b border-white/10 w-[20%]\">Type</th>\n <th className=\"text-left px-4 py-3 text-white/70 font-medium text-[0.9rem] border-b border-white/10 w-[30%]\">Sale Type</th>\n <th className=\"text-left px-4 py-3 text-white/70 font-medium text-[0.9rem] border-b border-white/10 w-[50%]\">Agent</th>\n </tr>\n </thead>\n </table>\n\n {(() => {\n if (!loafListing || (historyFilter !== 'all' && historyFilter !== 'loaf')) {\n return null\n }\n\n return (\n <HistoryPanel key={loafListing.id} $isLoafListing>\n <div className=\"bg-[rgba(30,32,38,0.7)] border-b border-[rgba(240,185,11,0.15)] px-4 py-3 flex justify-between items-center\">\n <div className=\"font-semibold text-[var(--color-accent)] flex items-center text-xl tracking-[0.5px]\">\n {loafListing.price.includes('18,750,000') ? '18.75M' : loafListing.price}\n <span className=\"text-[0.9rem] font-normal ml-3 opacity-80\">\n {loafListing.date.replace(/\\d+,\\s|\\s\\d+$/, '')}\n </span>\n </div>\n </div>\n\n <SalesTable>\n <tbody>\n <HistoryRow $isOwnershipStart>\n <td>\n <TypeBadge $type={loafListing.type}>\n {loafListing.type === 'Sale' ? 'Sold' : loafListing.type}\n </TypeBadge>\n </td>\n <td>{loafListing.saleType ?? '-'}</td>\n <td>{loafListing.agent}</td>\n </HistoryRow>\n </tbody>\n </SalesTable>\n\n {loafEvents.length > 0 && (\n <LeaseSection>\n <div className=\"h-1 w-10 bg-white/15 mb-3 rounded-sm\" />\n <div className=\"py-2\">\n {loafEvents.map((event) => (\n <div key={event.id} className=\"mb-2\">\n <EventDetails event={event} />\n </div>\n ))}\n </div>\n </LeaseSection>\n )}\n </HistoryPanel>\n )\n })()}\n\n {(() => {\n const filteredSales = pastSales.filter((sale) => {\n if (sale.type === 'Listed') return false\n if (historyFilter === 'all') return true\n if (historyFilter === 'sales') return sale.type === 'Sale'\n if (historyFilter === 'lease') return sale.type === 'Lease'\n if (historyFilter === 'loaf') return false\n return true\n })\n\n filteredSales.sort((a, b) => {\n const dateA = new Date(a.date)\n const dateB = new Date(b.date)\n return dateB.getTime() - dateA.getTime()\n })\n\n const groupedByPeriod: Record<string, PastSale[]> = {}\n filteredSales.forEach((sale) => {\n if (!groupedByPeriod[sale.ownershipPeriod]) {\n groupedByPeriod[sale.ownershipPeriod] = []\n }\n groupedByPeriod[sale.ownershipPeriod].push(sale)\n })\n\n const sortedPeriods = Object.keys(groupedByPeriod).sort((a, b) => {\n const aDates = groupedByPeriod[a].map((s) => new Date(s.date).getTime())\n const bDates = groupedByPeriod[b].map((s) => new Date(s.date).getTime())\n const aLatest = Math.max(...aDates)\n const bLatest = Math.max(...bDates)\n return bLatest - aLatest\n })\n\n return sortedPeriods.map((period) => {\n const periodSales = groupedByPeriod[period]\n const ownershipSale = periodSales.find((s) => s.isOwnershipStart)\n\n if (historyFilter === 'sales' && !ownershipSale && !periodSales.some((s) => s.type === 'Sale')) {\n return null\n }\n if (\n historyFilter === 'events' &&\n !periodSales.some((s) => ['Leased', 'Renovated', 'Extended', 'Rebuilt', 'Rezoned'].includes(s.type))\n ) {\n return null\n }\n if (historyFilter === 'loaf' && !periodSales.some((s) => s.type === 'Listed')) {\n return null\n }\n\n const events = periodSales.filter(\n (sale) =>\n eventTypes.includes(sale.type as (typeof eventTypes)[number]) &&\n sale.id !== 'leased-current' &&\n sale.id !== 'da-approval' &&\n (period !== 'current' || sale.type !== 'Leased'),\n )\n\n const otherSales = periodSales.filter((sale) => sale.type === 'Sale' && !sale.isOwnershipStart)\n\n events.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())\n otherSales.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())\n\n return (\n <HistoryPanel key={period}>\n {ownershipSale && (historyFilter === 'all' || historyFilter === 'sales') && (\n <div className=\"bg-[rgba(30,32,38,0.7)] border-b border-[rgba(240,185,11,0.15)] px-4 py-3 flex justify-between items-center\">\n <div className=\"font-semibold text-[var(--color-accent)] flex items-center text-xl tracking-[0.5px]\">\n {ownershipSale.price.includes('18,750,000')\n ? '18.75M'\n : ownershipSale.price.includes('15,200,000')\n ? '15.20M'\n : ownershipSale.price}\n <span className=\"text-[0.9rem] font-normal ml-3 opacity-80\">\n {ownershipSale.date.replace(/\\d+,\\s|\\s\\d+$/, '')}\n </span>\n </div>\n </div>\n )}\n\n {ownershipSale && (historyFilter === 'all' || historyFilter === 'sales') && (\n <SalesTable>\n <tbody>\n <HistoryRow $isOwnershipStart>\n <td>\n <TypeBadge $type={ownershipSale.type}>\n {ownershipSale.type === 'Sale' ? 'Sold' : ownershipSale.type}\n </TypeBadge>\n </td>\n <td>{ownershipSale.saleType ?? '-'}</td>\n <td>{ownershipSale.agent}</td>\n </HistoryRow>\n </tbody>\n </SalesTable>\n )}\n\n {events.length > 0 && (historyFilter === 'all' || historyFilter === 'events') && (\n <LeaseSection>\n <div className=\"h-1 w-10 bg-white/15 mb-3 rounded-sm\" />\n <div className=\"py-2\">\n {events.map((event) => (\n <div key={event.id} className=\"mb-2\">\n <EventDetails event={event} />\n </div>\n ))}\n </div>\n </LeaseSection>\n )}\n\n {otherSales.length > 0 && (historyFilter === 'all' || historyFilter === 'sales') && (\n <SalesTable>\n <tbody>\n {otherSales.map((sale) => (\n <HistoryRow key={sale.id}>\n <td>\n <TypeBadge $type={sale.type}>{sale.type === 'Sale' ? 'Sold' : sale.type}</TypeBadge>\n </td>\n <td>{sale.saleType ?? '-'}</td>\n <td>{sale.agent}</td>\n </HistoryRow>\n ))}\n </tbody>\n </SalesTable>\n )}\n </HistoryPanel>\n )\n })\n })()}\n </HistoryContainer>\n </PastSalesSection>\n )\n}\n\ntype EventDetailsProps = {\n event: PastSale\n}\n\nfunction EventDetails({ event }: EventDetailsProps) {\n const [expanded, setExpanded] = useState(false)\n\n const toggleExpand = () => {\n setExpanded((prev) => !prev)\n }\n\n const renderEventDetails = () => {\n switch (event.type) {\n case 'Leased':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Lease Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Lease Term:</span><span className=\"text-[0.9rem] flex-1\">{event.leaseTerm ?? '12 months'}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Weekly Rate:</span><span className=\"text-[0.9rem] flex-1\">{event.weeklyRate ?? event.price}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Tenant:</span><span className=\"text-[0.9rem] flex-1\">{event.buyer}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Agent:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <button onClick={() => alert('View lease agreement')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Lease Agreement</button>\n </>\n )\n case 'Extended':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Completion Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Construction Time:</span><span className=\"text-[0.9rem] flex-1\">6 months</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Cost:</span><span className=\"text-[0.9rem] flex-1\">{event.price}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Contractor:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <div className=\"flex items-start gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Description:</span><span className=\"text-[0.9rem] flex-1\">Extension to the eastern wing of the property, adding 120sqm of living space including a new master suite and expanded kitchen.</span></div>\n <button onClick={() => alert('View design plans')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Design Plans</button>\n </>\n )\n case 'Rebuilt':\n case 'Renovated':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Completion Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Construction Time:</span><span className=\"text-[0.9rem] flex-1\">14 months</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Cost:</span><span className=\"text-[0.9rem] flex-1\">{event.price}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Builder:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <div className=\"flex items-start gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Description:</span><span className=\"text-[0.9rem] flex-1\">Complete rebuild of the property, maintaining the heritage facade while modernizing all internal spaces and systems.</span></div>\n <button onClick={() => alert('View renovation details')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Design Plans</button>\n </>\n )\n case 'DA Approval':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Approval Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Council:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Application Fee:</span><span className=\"text-[0.9rem] flex-1\">{event.price}</span></div>\n <button onClick={() => alert('View approval documents')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Approval</button>\n </>\n )\n case 'Rezoned':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Rezoning Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">New Zoning:</span><span className=\"text-[0.9rem] flex-1\">R4 High Density Residential</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Authority:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <button onClick={() => alert('View zoning documents')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Zoning Documents</button>\n </>\n )\n default:\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Details:</span><span className=\"text-[0.9rem] flex-1\">{event.saleType ?? ''}</span></div>\n </>\n )\n }\n }\n\n return (\n <div>\n <div\n className=\"flex justify-between items-center p-2 cursor-pointer rounded transition-colors duration-200 hover:bg-white/[0.05]\"\n onClick={toggleExpand}\n >\n <div className=\"flex justify-between items-center flex-1 gap-4\">\n <div className=\"flex items-center\">\n <TypeBadge $type={event.type}>{event.type === 'Sale' ? 'Sold' : event.type}</TypeBadge>\n <span className=\"ml-2\">{event.date}</span>\n </div>\n </div>\n <div className=\"flex items-center justify-center text-[var(--color-text-secondary)] w-6 h-6 rounded-full transition-colors duration-200 hover:bg-white/10\">\n {expanded ? <BiChevronUp size={20} /> : <BiChevronDown size={20} />}\n </div>\n </div>\n {expanded && (\n <div className=\"flex flex-col gap-2 py-2\">\n {renderEventDetails()}\n </div>\n )}\n </div>\n )\n}\n\nfunction generateMockPastSales(): PastSale[] {\n return [\n {\n id: 'loaf-listing',\n type: 'Listed',\n saleType: 'Loaf Auction',\n date: 'January 15, 2025',\n price: '$14,000,000',\n buyer: '-',\n seller: 'Current Owner',\n agent: 'Loaf Platform',\n ownershipPeriod: 'current',\n sortOrder: 1,\n },\n {\n id: 'da-approval',\n type: 'DA Approval',\n saleType: 'Planning Change',\n date: 'February 5, 2025',\n price: '$500,000',\n buyer: '-',\n seller: 'Current Owner',\n agent: 'City Planning Consultants',\n ownershipPeriod: 'current',\n sortOrder: 2,\n description: 'Extension from 4 to 6 bathrooms, installation of elevator and rooftop terrace',\n },\n {\n id: 'leased-current',\n type: 'Leased',\n saleType: 'Rental',\n date: 'February 10, 2025',\n price: '$4,500/week',\n buyer: 'Executive Tenants Ltd',\n seller: 'Current Owner',\n agent: 'Sydney Luxury Rentals',\n ownershipPeriod: 'current',\n sortOrder: 3,\n leaseTerm: '12 months',\n weeklyRate: '$4,500',\n },\n {\n id: 'leased-2',\n type: 'Leased',\n saleType: 'Rental',\n date: 'March 5, 2022',\n price: '$4,000/week',\n buyer: 'Premium Tenants LLC',\n seller: 'Current Owner',\n agent: 'Sydney Prestige Real Estate',\n ownershipPeriod: 'period-1',\n sortOrder: 10,\n leaseTerm: '24 months',\n weeklyRate: '$4,000',\n },\n {\n id: 'leased-1',\n type: 'Leased',\n saleType: 'Rental',\n date: 'November 15, 2020',\n price: '$4,000/week',\n buyer: 'Executive Rentals LLC',\n seller: 'Current Owner',\n agent: 'Sydney Prestige Real Estate',\n ownershipPeriod: 'period-1',\n sortOrder: 15,\n leaseTerm: '24 months',\n weeklyRate: '$4,000',\n },\n {\n id: 'ownership-1',\n type: 'Sale',\n saleType: 'Private Sale',\n date: 'October 20, 2020',\n price: '$8,000,000',\n buyer: 'Current Owner',\n seller: 'Previous Owner',\n agent: 'Ray White Double Bay',\n ownershipPeriod: 'period-1',\n isOwnershipStart: true,\n isOwnershipEnd: false,\n sortOrder: 100,\n percentGain: 166.7,\n },\n {\n id: 'rebuilt-1',\n type: 'Rebuilt',\n saleType: 'Major Renovation',\n date: 'December 10, 2010',\n price: '$1,200,000',\n buyer: '-',\n seller: 'Previous Owner',\n agent: 'Premium Builders',\n ownershipPeriod: 'period-2',\n sortOrder: 8,\n },\n {\n id: 'ownership-2',\n type: 'Sale',\n saleType: 'Auction',\n date: 'March 5, 2010',\n price: '$3,000,000',\n buyer: 'Previous Owner',\n seller: 'Original Developer',\n agent: 'LJ Hooker Double Bay',\n ownershipPeriod: 'period-2',\n isOwnershipStart: true,\n isOwnershipEnd: true,\n sortOrder: 100,\n },\n ]\n}\n\nconst FilterButtonsContainer = styled.div`\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n\n @media (max-width: 768px) {\n gap: 0.25rem;\n }\n`\n\nconst FilterButton = styled.button<{ $active: boolean }>`\n background-color: ${(props) => (props.$active ? 'var(--color-accent, #f0b90b)' : 'transparent')};\n color: ${(props) => (props.$active ? '#000' : '#fff')};\n border: 1px solid var(--color-accent, #f0b90b);\n border-radius: 4px;\n padding: 0.4rem 0.8rem;\n font-size: 0.9rem;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background-color: ${(props) =>\n props.$active ? 'var(--color-accent, #f0b90b)' : 'rgba(240, 185, 11, 0.1)'};\n }\n\n @media (max-width: 768px) {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n }\n`\n\nconst HistoryContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 1rem;\n width: 1px;\n background-color: rgba(240, 185, 11, 0.15);\n z-index: 0;\n }\n`\n\nconst HistoryPanel = styled.div<{ $isLoafListing?: boolean }>`\n margin-bottom: 1.5rem;\n margin-left: 2rem;\n border: 1px solid rgba(240, 185, 11, 0.15);\n border-radius: 8px;\n background-color: rgba(30, 32, 38, 0.3);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n top: 50%;\n left: -2rem;\n width: 1.5rem;\n height: 2px;\n background-color: rgba(240, 185, 11, 0.3);\n }\n\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: -2rem;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: rgba(240, 185, 11, 0.8);\n transform: translateY(-50%);\n box-shadow: 0 0 0 4px rgba(30, 32, 38, 0.6);\n }\n\n ${({ $isLoafListing }) =>\n $isLoafListing &&\n css`\n background-color: rgba(30, 32, 38, 0.1);\n border-color: rgba(240, 185, 11, 0.05);\n\n &::after {\n background-color: rgba(240, 185, 11, 0.4);\n }\n `}\n`\n\nconst LeaseSection = styled.div`\n margin: 0.3rem 1rem;\n padding: 0.3rem 1rem 0.3rem;\n background-color: rgba(30, 32, 38, 0.2);\n border-radius: 6px;\n border-left: 2px solid rgba(255, 255, 255, 0.15);\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n top: -0.3rem;\n left: 1rem;\n width: 1px;\n height: 0.3rem;\n background-color: rgba(255, 255, 255, 0.15);\n }\n`\n\n\nconst HistoryRow = styled.tr<{ $isOwnershipStart?: boolean }>`\n background-color: ${(props) => (props.$isOwnershipStart ? 'rgba(240, 185, 11, 0.05)' : 'transparent')};\n\n td {\n padding: 0.75rem 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n font-size: 0.9rem;\n }\n\n &:last-child td {\n border-bottom: none;\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.08);\n }\n`\n\nconst TypeBadge = styled.span<{ $type?: string }>`\n display: inline-block;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n font-size: 0.75rem;\n font-weight: ${(props) => (props.$type === 'Listed' ? '600' : '500')};\n background-color: ${(props) => {\n switch (props.$type) {\n case 'Listed':\n return 'var(--color-accent, #f0b90b)'\n case 'Sale':\n return 'rgba(14, 203, 129, 0.15)'\n case 'Leased':\n return 'rgba(79, 117, 235, 0.15)'\n case 'Renovated':\n case 'Extended':\n case 'Rebuilt':\n return 'rgba(255, 152, 0, 0.15)'\n case 'Rezoned':\n case 'DA Approval':\n return 'rgba(33, 150, 243, 0.15)'\n default:\n return 'rgba(240, 185, 11, 0.15)'\n }\n }};\n color: ${(props) => {\n switch (props.$type) {\n case 'Listed':\n return '#000'\n case 'Sale':\n return '#0ecb81'\n case 'Leased':\n return '#4f75eb'\n case 'Renovated':\n case 'Extended':\n case 'Rebuilt':\n return '#ff9800'\n case 'Rezoned':\n case 'DA Approval':\n return '#2196f3'\n default:\n return 'var(--color-accent)'\n }\n }};\n\n @media (max-width: 768px) {\n padding: 0.15rem 0.3rem;\n font-size: 0.65rem;\n }\n`\n\nconst PastSalesSection = styled.div`\n background-color: rgba(30, 32, 38, 0.95);\n border-radius: 8px;\n padding: 1.25rem;\n margin-bottom: 1.5rem;\n`\n\nconst SalesTable = styled.table`\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n\n td {\n padding: 0.75rem 1rem;\n color: #fff;\n font-size: 0.9rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n\n td:nth-child(1),\n th:nth-child(1) {\n width: 20%;\n }\n td:nth-child(2),\n th:nth-child(2) {\n width: 30%;\n }\n td:nth-child(3),\n th:nth-child(3) {\n width: 50%;\n }\n\n @media (max-width: 768px) {\n td {\n padding: 0.5rem 0.5rem;\n font-size: 0.75rem;\n }\n }\n\n tr:hover {\n background-color: rgba(255, 255, 255, 0.03);\n }\n`\n","import styled from 'styled-components'\nexport interface DocumentItem {\n readonly title: string;\n readonly documentUrl: string;\n}\n\nexport interface DocumentsResponse {\n readonly documents: readonly DocumentItem[];\n}\n\nconst DocIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n)\n\nconst fallbackDocs = [\n { href: '/documents/musgrave-valuation-report.pdf', label: 'Valuation Report' },\n { href: '/documents/musgrave-offering-material.pdf', label: 'Offering Material' },\n { href: '/documents/musgrave-mortgage-agreement.pdf', label: 'Mortgage Agreement' },\n { href: '/documents/musgrave-investment-memo.pdf', label: 'Investment Memo' },\n { href: '/documents/musgrave-term-sheet.pdf', label: 'Investment Term Sheet' },\n { href: '/documents/musgrave-risk-disclosure.pdf', label: 'Risk Disclosure Statement' },\n { href: '/documents/musgrave-building-inspection.pdf', label: 'Building & Pest Inspection Report' },\n]\n\nexport type PropertyDocumentsProps = {\n documentsData?: DocumentsResponse | null\n}\n\nexport function PropertyDocuments({ documentsData }: PropertyDocumentsProps) {\n const backendDocuments = Array.isArray(documentsData?.documents) ? documentsData!.documents : null\n const hasBackendDocuments = !!backendDocuments?.length\n\n // Use backend data only when documents exist; otherwise fall back to disabled placeholders\n const documents = hasBackendDocuments\n ? backendDocuments\n : fallbackDocs.map((doc) => ({\n title: doc.label,\n documentUrl: doc.href,\n }))\n\n return (\n <Section>\n <SectionHeading>Investment Documents</SectionHeading>\n <DocList>\n {documents.map(({ documentUrl, title }: { documentUrl: string; title: string }) => {\n const isAvailable = Boolean(documentUrl)\n return (\n <DocItem key={`${title}-${documentUrl ?? 'pending'}`}>\n {hasBackendDocuments && isAvailable ? (\n <DocLink href={documentUrl!} target=\"_blank\" rel=\"noopener noreferrer\">\n <DocIconWrapper>\n <DocIcon />\n </DocIconWrapper>\n {title}\n </DocLink>\n ) : (\n <DocItemDisabled>\n <DocIconWrapper>\n <DocIcon />\n </DocIconWrapper>\n {title}\n <ComingSoonBadge>Coming Soon</ComingSoonBadge>\n </DocItemDisabled>\n )}\n </DocItem>\n )\n })}\n </DocList>\n </Section>\n )\n}\n\nconst Section = styled.section`\n background: var(--color-card, rgba(30, 35, 41, 0.8));\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionHeading = styled.h2`\n font-size: 0.9rem;\n font-weight: 600;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n`\n\nconst DocList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`\n\nconst DocItem = styled.li`\n padding: 0.75rem 0;\n border-bottom: 1px solid var(--color-border, rgba(255, 255, 255, 0.1));\n\n &:last-child {\n border-bottom: none;\n }\n`\n\nconst DocLink = styled.a`\n display: flex;\n align-items: center;\n color: var(--color-text);\n text-decoration: none;\n transition: color 0.2s;\n\n &:hover {\n color: var(--color-accent);\n }\n`\n\nconst DocItemDisabled = styled.div`\n display: flex;\n align-items: center;\n color: var(--color-text-secondary);\n cursor: not-allowed;\n opacity: 0.6;\n`\n\nconst DocIconWrapper = styled.span`\n margin-right: 0.75rem;\n flex-shrink: 0;\n color: var(--color-text-secondary);\n`\n\nconst ComingSoonBadge = styled.span`\n margin-left: auto;\n padding: 0.25rem 0.5rem;\n background: rgba(212, 175, 55, 0.1);\n color: #D4AF37;\n border-radius: 0.25rem;\n font-size: 0.7rem;\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n`\n","import styled from 'styled-components'\n\nexport type InspectionSlot = {\n slotId: string\n label: string\n date: string\n startTime: string\n endTime: string\n totalCapacity: number\n spotsRemaining: number\n}\n\ntype PropertyInspectionTimesProps = {\n isAuthenticated: boolean\n slots: InspectionSlot[]\n loading?: boolean\n error?: string | null\n bookingSlotId?: string | null\n bookingStatus?: string | null\n bookingError?: string | null\n onBook: (slot: InspectionSlot) => void\n onRetry?: () => void\n onSignIn?: () => void\n}\n\nconst formatIsoDate = (value: string) => {\n const parsed = new Date(value)\n if (Number.isNaN(parsed.getTime())) return value\n return parsed.toLocaleDateString(undefined, { weekday: 'long', day: 'numeric', month: 'short', year: 'numeric' })\n}\n\nconst formatIsoTime = (value: string) => {\n const parsed = new Date(value)\n if (Number.isNaN(parsed.getTime())) return value\n return parsed.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' })\n}\n\nexport function PropertyInspectionTimes({\n isAuthenticated,\n slots,\n loading = false,\n error = null,\n bookingSlotId = null,\n bookingStatus = null,\n bookingError = null,\n onBook,\n onRetry,\n onSignIn,\n}: PropertyInspectionTimesProps) {\n return (\n <Section>\n <SectionHeading>Inspection Times</SectionHeading>\n <Intro>Book a private inspection of the property. Walk through the home in person before investing.</Intro>\n {isAuthenticated ? (\n <SlotList>\n {loading && <StatusMessage>Loading inspection times…</StatusMessage>}\n {error && (\n <StatusMessage $error>\n {error}{' '}\n {onRetry && (\n <RetryButton type=\"button\" onClick={onRetry}>Retry</RetryButton>\n )}\n </StatusMessage>\n )}\n {!loading && !error && slots.length === 0 && (\n <StatusMessage>No inspection slots are currently available. Please check back later.</StatusMessage>\n )}\n {slots.map((slot) => (\n <SlotRow key={slot.slotId}>\n <SlotInfo>\n <SlotDate>{formatIsoDate(slot.label || slot.date)}</SlotDate>\n <SlotTime>{formatIsoTime(slot.startTime)} - {formatIsoTime(slot.endTime)}</SlotTime>\n </SlotInfo>\n <SlotActions>\n <SpotsLeft $low={slot.spotsRemaining <= 2}>\n {slot.spotsRemaining} {slot.spotsRemaining === 1 ? 'spot' : 'spots'} left\n </SpotsLeft>\n <BookButton\n disabled={slot.spotsRemaining === 0 || bookingSlotId === slot.slotId}\n onClick={() => onBook(slot)}\n >\n {bookingSlotId === slot.slotId ? 'Booking…' : 'Book'}\n </BookButton>\n </SlotActions>\n </SlotRow>\n ))}\n {bookingStatus && <StatusMessage>{bookingStatus}</StatusMessage>}\n {bookingError && <StatusMessage $error>{bookingError}</StatusMessage>}\n {slots.length > 0 && (\n <Disclaimer>All inspections are by appointment only. A confirmation email will be sent upon booking.</Disclaimer>\n )}\n </SlotList>\n ) : (\n <SignInPrompt>\n <SignInText>\n <SignInTitle>Sign in to see inspection times</SignInTitle>\n <SignInSub>View available dates and book a private walkthrough.</SignInSub>\n </SignInText>\n <SignInButton onClick={() => onSignIn?.()}>Sign In</SignInButton>\n </SignInPrompt>\n )}\n </Section>\n )\n}\n\nconst Section = styled.section`\n background: var(--color-card, rgba(30, 35, 41, 0.8));\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionHeading = styled.h2`\n font-size: 0.9rem;\n font-weight: 600;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n`\n\nconst Intro = styled.p`\n font-size: 0.9rem;\n color: var(--color-text-secondary);\n margin-bottom: 1.5rem;\n`\n\nconst SlotList = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n`\n\nconst SlotRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 8px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n`\n\nconst SlotInfo = styled.div``\n\nconst SlotDate = styled.div`\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n margin-bottom: 0.25rem;\n`\n\nconst SlotTime = styled.div`\n font-size: 0.8rem;\n color: var(--color-text-secondary);\n`\n\nconst SlotActions = styled.div`\n display: flex;\n align-items: center;\n gap: 1rem;\n`\n\nconst SpotsLeft = styled.span<{ $low: boolean }>`\n font-size: 0.75rem;\n color: ${({ $low }) => ($low ? '#f6465d' : 'var(--color-text-secondary)')};\n`\n\nconst BookButton = styled.button`\n padding: 0.4rem 1rem;\n background: transparent;\n border: 1px solid var(--color-accent, #f0b90b);\n color: var(--color-accent, #f0b90b);\n border-radius: 4px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(240, 185, 11, 0.1);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`\n\nconst StatusMessage = styled.div<{ $error?: boolean }>`\n font-size: 0.85rem;\n padding: 0.75rem 1rem;\n border-radius: 6px;\n color: ${({ $error }) => ($error ? '#f6465d' : 'var(--color-text-secondary)')};\n background: ${({ $error }) => ($error ? 'rgba(246,70,93,0.08)' : 'rgba(255,255,255,0.03)')};\n border: 1px solid ${({ $error }) => ($error ? 'rgba(246,70,93,0.2)' : 'rgba(255,255,255,0.06)')};\n`\n\nconst RetryButton = styled.button`\n margin-left: 0.5rem;\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n color: inherit;\n`\n\nconst Disclaimer = styled.p`\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n margin-top: 0.5rem;\n text-align: center;\n`\n\nconst SignInPrompt = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1.25rem 1.5rem;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 8px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n`\n\nconst SignInText = styled.div``\n\nconst SignInTitle = styled.div`\n font-size: 0.95rem;\n font-weight: 600;\n color: var(--color-text);\n margin-bottom: 0.25rem;\n`\n\nconst SignInSub = styled.div`\n font-size: 0.8rem;\n color: var(--color-text-secondary);\n`\n\nconst SignInButton = styled.button`\n padding: 0.5rem 1.25rem;\n background: transparent;\n border: 1px solid var(--color-accent, #f0b90b);\n color: var(--color-accent, #f0b90b);\n border-radius: 4px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n white-space: nowrap;\n\n &:hover {\n background: rgba(240, 185, 11, 0.1);\n }\n`\n","import type { GalleryCategory, GalleryImage, NewsItem, RecentOrder, StatusColorMap } from './types'\n\nexport const mockIPOList = [\n { id: 'musgrave', name: '8C Mcleod Street (Musgrave)', location: 'Mosman, Sydney', status: 'live' },\n { id: 'ipo-002', name: '15 Ocean View Drive', location: 'Bondi, Sydney', status: 'coming_soon' },\n { id: 'ipo-003', name: '42 Harbour Lane', location: 'Mosman, Sydney', status: 'coming_soon' },\n]\n\nexport const allNewsItems: NewsItem[] = [\n { id: 1, title: 'RBA signals potential rate cut in Q1 2026 - property stocks rally', type: 'market' },\n { id: 2, title: 'Sydney unemployment drops to 3.1% - Eastern suburbs lead recovery', type: 'market' },\n { id: 3, title: 'Musgrave heritage listing confirmed - protects architectural value', type: 'property' },\n { id: 4, title: 'Mosman Council approves DA for Musgrave restoration works', type: 'property' },\n { id: 5, title: 'Nearby 12 Mcleod St sells for $18.5M - sets new street record', type: 'market' },\n { id: 6, title: 'Eastern suburbs rental yields reach 3.8% - highest in 5 years', type: 'market' },\n { id: 7, title: 'Musgrave pool resurfacing completed - heritage sandstone preserved', type: 'property' },\n { id: 8, title: 'Mosman median house price hits $7.2M - up 9% YoY', type: 'market' },\n { id: 9, title: 'Musgrave gardens featured in Heritage NSW annual report', type: 'property' },\n { id: 10, title: 'Lower North Shore vacancy rates drop to 1.2% - rental demand surges', type: 'market' },\n { id: 11, title: 'Musgrave structural inspection complete - excellent condition confirmed', type: 'property' },\n { id: 12, title: 'Sydney harbour views premium reaches 35% - Mosman leads growth', type: 'market' },\n { id: 13, title: 'New security system installed at Musgrave - smart home integration', type: 'property' },\n { id: 14, title: 'Heritage property demand up 22% - pre-Federation homes most sought', type: 'market' },\n]\n\nexport const musgraveGalleryImages: GalleryImage[] = [\n { src: '/properties/Musgrave/ExteriorFront_Musgrave_Loafmarkets.jpg', title: 'Exterior Front', subtitle: 'Grand entrance' },\n { src: '/properties/Musgrave/ExteriorDusk_Musgrave_Loafmarkets.jpg', title: 'Exterior Dusk', subtitle: 'Evening ambiance' },\n { src: '/properties/Musgrave/LivingRoom_Musgrave_Loafmarkets.jpg', title: 'Living Room', subtitle: 'Spacious living' },\n { src: '/properties/Musgrave/Kitchen_Musgrave_Loafmarkets.jpg', title: 'Kitchen', subtitle: 'Modern design' },\n { src: '/properties/Musgrave/DiningRoom_Musgrave_Loafmarkets.jpg', title: 'Dining Room', subtitle: 'Elegant dining' },\n { src: '/properties/Musgrave/BreakfastRoom_Musgrave_Loafmarkets.jpg', title: 'Breakfast Room', subtitle: 'Morning light' },\n { src: '/properties/Musgrave/MainBedroom_Musgrave_Loafmarkets.jpg', title: 'Main Bedroom', subtitle: 'Master suite' },\n { src: '/properties/Musgrave/GuestBedroom_Musgrave_Loafmarkets.jpg', title: 'Guest Bedroom', subtitle: 'Comfortable stay' },\n { src: '/properties/Musgrave/Bathroom_Musgrave_Loafmarkets.jpg', title: 'Bathroom', subtitle: 'Luxury finishes' },\n { src: '/properties/Musgrave/PoolArea_Musgrave_Loafmarkets.jpg', title: 'Pool Area', subtitle: 'Resort living' },\n { src: '/properties/Musgrave/GardenView_Musgrave_Loafmarkets.jpg', title: 'Garden View', subtitle: 'Lush gardens' },\n { src: '/properties/Musgrave/SideGarden_Musgrave_Loafmarkets.jpg', title: 'Side Garden', subtitle: 'Private retreat' },\n { src: '/properties/Musgrave/AerialView_Musgrave_Loafmarkets.jpg', title: 'Aerial View', subtitle: 'Property overview' },\n { src: '/properties/Musgrave/AerialLocation_Musgrave_Loafmarkets.jpg', title: 'Aerial Location', subtitle: 'Neighborhood' },\n { src: '/properties/Musgrave/Floorplan_Musgrave_Loafmarkets.jpg', title: 'Floorplan', subtitle: 'Layout' },\n]\n\nexport const galleryCategories: GalleryCategory[] = [\n { name: 'Exterior', startIndex: 0 },\n { name: 'Living', startIndex: 2 },\n { name: 'Bedrooms', startIndex: 6 },\n { name: 'Outdoor', startIndex: 9 },\n { name: 'Aerial', startIndex: 12 },\n { name: 'Floorplan', startIndex: 14 },\n]\n\nexport const STATUS_COLOR: StatusColorMap = {\n 0: '#D4AF37',\n 1: '#0ecb81',\n 2: '#848e9c',\n 3: '#f6465d',\n}\n\nexport const recentOrderPurchases: RecentOrder[] = [\n { name: 'investor_au', amount: 12500 },\n { name: 'sydney_prop', amount: 25000 },\n { name: 'heritage_inv', amount: 50000 },\n { name: 'mosman_buyer', amount: 7500 },\n]\n","import { useState } from 'react'\nimport styled from 'styled-components'\n\nimport { mockIPOList } from './constants'\n\nexport type AssetSelectorBarProps = {\n propertyName: string\n tokenPrice: number\n offeringValuation: number\n}\n\nexport function AssetSelectorBar({ propertyName, tokenPrice, offeringValuation }: AssetSelectorBarProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false)\n\n return (\n <AssetSelectorWrapper>\n <IPOAssetSelector>\n <AssetSelectorDropdown onClick={() => setIsDropdownOpen((prev) => !prev)}>\n <AssetName>\n {propertyName}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n style={{ transform: isDropdownOpen ? 'rotate(180deg)' : 'none' }}\n >\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>\n </AssetName>\n </AssetSelectorDropdown>\n\n <SelectorMetrics>\n <div>\n <MetricLabel>Unit Price</MetricLabel>\n <MetricValue $accent>\n ${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </MetricValue>\n </div>\n <Separator>|</Separator>\n <div>\n <MetricLabel>Offering Valuation</MetricLabel>\n <MetricValue>\n ${offeringValuation.toLocaleString()}\n </MetricValue>\n </div>\n </SelectorMetrics>\n\n {isDropdownOpen && (\n <IPODropdown>\n {mockIPOList.map((ipo) => {\n const isDisabled = ipo.status === 'coming_soon'\n return (\n <IPOOption\n key={ipo.id}\n onClick={() => {\n if (!isDisabled) setIsDropdownOpen(false)\n }}\n $selected={ipo.id === 'musgrave'}\n style={{ opacity: isDisabled ? 0.4 : 1, cursor: isDisabled ? 'not-allowed' : 'pointer' }}\n >\n <IPOOptionName>{ipo.name}</IPOOptionName>\n <IPOOptionLocation>\n {ipo.location}\n {isDisabled && <span>Coming Soon</span>}\n </IPOOptionLocation>\n </IPOOption>\n )\n })}\n </IPODropdown>\n )}\n </IPOAssetSelector>\n </AssetSelectorWrapper>\n )\n}\n\nconst AssetSelectorWrapper = styled.div`\n width: 100%;\n`\n\nconst IPOAssetSelector = styled.div`\n position: relative;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: linear-gradient(135deg, var(--color-card-darker, #111) 0%, rgba(17,17,17,0.95) 100%);\n border-radius: 12px;\n border: 1px solid rgba(255,255,255,0.1);\n box-shadow: 0 8px 24px rgba(0,0,0,0.3);\n backdrop-filter: blur(10px);\n z-index: 10;\n transition: all 0.3s ease;\n &:hover { box-shadow: 0 12px 32px rgba(0,0,0,0.4); border-color: rgba(255,255,255,0.15); }\n`\n\nconst AssetSelectorDropdown = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 0.5rem 0.75rem;\n border-radius: 8px;\n transition: all 0.2s ease;\n &:hover { background-color: rgba(255,255,255,0.05); }\n`\n\nconst AssetName = styled.div`\n display: flex;\n align-items: center;\n font-weight: 600;\n font-size: 1.15rem;\n color: var(--color-text);\n letter-spacing: -0.02em;\n svg { margin-left: 0.75rem; transition: transform 0.3s cubic-bezier(0.4,0,0.2,1); opacity: 0.7; }\n &:hover svg { opacity: 1; }\n`\n\nconst SelectorMetrics = styled.div`\n display: flex;\n align-items: center;\n gap: 1rem;\n margin-left: auto;\n margin-right: 1rem;\n padding: 0.5rem 1rem;\n background: rgba(255,255,255,0.03);\n border-radius: 8px;\n border: 1px solid rgba(255,255,255,0.05);\n`\n\nconst MetricLabel = styled.span`\n font-size: 0.65rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 500;\n`\n\nconst MetricValue = styled.span<{ $accent?: boolean }>`\n font-size: 1.1rem;\n font-weight: 700;\n color: ${(p) => (p.$accent ? '#D4AF37' : '#fff')};\n`\n\nconst Separator = styled.span`\n font-size: 1rem;\n color: rgba(255,255,255,0.2);\n font-weight: 300;\n`\n\nconst IPODropdown = styled.div`\n position: absolute;\n top: calc(100% + 12px);\n left: 0;\n right: 0;\n background: #0a0a0a;\n border-radius: 16px;\n box-shadow: 0 20px 40px rgba(0,0,0,0.8), 0 4px 12px rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.1);\n z-index: 1000;\n max-height: 360px;\n overflow-y: auto;\n border: 1px solid rgba(255,255,255,0.08);\n animation: slideDown 0.3s cubic-bezier(0.4,0,0.2,1);\n @keyframes slideDown {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n`\n\nconst IPOOption = styled.div<{ $selected?: boolean }>`\n padding: 1.25rem 1.5rem;\n transition: all 0.2s ease;\n border-bottom: 1px solid rgba(255,255,255,0.03);\n position: relative;\n &:last-child { border-bottom: none; }\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: ${(p) => (p.$selected ? 'var(--color-accent)' : 'transparent')};\n transition: all 0.2s ease;\n }\n &:hover { background: linear-gradient(90deg, rgba(255,255,255,0.06) 0%, transparent 100%); }\n ${(p) => p.$selected && `background: linear-gradient(90deg, rgba(56,97,251,0.15) 0%, transparent 100%);`}\n`\n\nconst IPOOptionName = styled.div`\n font-weight: 600;\n font-size: 1rem;\n color: #ffffff;\n margin-bottom: 0.35rem;\n`\n\nconst IPOOptionLocation = styled.div`\n font-size: 0.875rem;\n color: rgba(255,255,255,0.5);\n span {\n margin-left: 0.5rem;\n color: var(--color-accent);\n font-size: 0.75rem;\n }\n`\n","import { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { FaChartLine } from 'react-icons/fa'\n\nexport type OfferingProgressCardProps = {\n ipoStarted: boolean\n statusLabel: string\n statusColor: string\n scStatus: number\n tokenPrice: number\n offeringValuation: number\n percentSold: number\n totalSold: number\n supplyToSell: number\n}\n\nexport function OfferingProgressCard({\n ipoStarted,\n statusLabel,\n statusColor,\n scStatus,\n tokenPrice,\n offeringValuation,\n percentSold,\n totalSold,\n supplyToSell,\n}: OfferingProgressCardProps) {\n const [currentTime, setCurrentTime] = useState(new Date())\n\n useEffect(() => {\n const timer = setInterval(() => setCurrentTime(new Date()), 1000)\n return () => clearInterval(timer)\n }, [])\n\n return (\n <Container>\n <Header>\n <h3>\n <FaChartLine /> Offering Progress\n </h3>\n <span>\n <span className=\"pulse\" />\n {statusLabel}\n {ipoStarted && (\n <time>\n {currentTime.toLocaleTimeString('en-AU', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n })}{' '}\n AEST\n </time>\n )}\n </span>\n </Header>\n\n {!ipoStarted ? (\n <PreLive>\n <div>\n <MetricLabel>Token Price</MetricLabel>\n <MetricValue accent>\n ${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </MetricValue>\n </div>\n <PreLiveStatus $statusColor={statusColor}>\n {scStatus === 2 ? 'Sale Completed' : scStatus === 3 ? 'Sale Paused' : 'Sale Not Yet Open'}\n </PreLiveStatus>\n <div style={{ textAlign: 'right' }}>\n <MetricLabel>Offering Valuation</MetricLabel>\n <MetricValue>\n ${offeringValuation.toLocaleString()}\n </MetricValue>\n </div>\n </PreLive>\n ) : (\n <LiveStats>\n <div>\n <LiveLabel>\n Offering Subscribed <span>ⓘ</span>\n </LiveLabel>\n <LivePercent>\n {percentSold < 0.1 && percentSold > 0 ? percentSold.toFixed(3) : percentSold.toFixed(1)}%\n <span>↑</span>\n </LivePercent>\n </div>\n <UnitsSubscribed>\n <MetricLabel>Units Subscribed</MetricLabel>\n <UnitsValue>\n <span>{totalSold.toLocaleString()}</span>\n <small>/ {supplyToSell.toLocaleString()}</small>\n </UnitsValue>\n </UnitsSubscribed>\n <ProgressBar>\n <div style={{ width: `${Math.min(percentSold, 100)}%` }} />\n </ProgressBar>\n </LiveStats>\n )}\n </Container>\n )\n}\n\nconst Container = styled.div`\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n width: 100%;\n display: flex;\n flex-direction: column;\n`\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 0;\n }\n span {\n display: flex;\n align-items: center;\n gap: 0.35rem;\n font-size: 0.75rem;\n color: var(--color-text);\n font-weight: 500;\n }\n .pulse {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: currentColor;\n animation: pulse 2s infinite;\n }\n time {\n margin-left: 1rem;\n color: #fff;\n font-weight: 600;\n font-size: 0.9rem;\n font-family: monospace;\n letter-spacing: 0.05em;\n }\n @keyframes pulse {\n 0% { opacity: 0.4; }\n 50% { opacity: 1; }\n 100% { opacity: 0.4; }\n }\n`\n\nconst MetricLabel = styled.div`\n font-size: 0.65rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-bottom: 0.25rem;\n`\n\nconst MetricValue = styled.div<{ accent?: boolean }>`\n font-size: 1.75rem;\n font-weight: 700;\n color: ${(p) => (p.accent ? '#D4AF37' : '#fff')};\n`\n\nconst PreLive = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.25rem 0;\n`\n\nconst PreLiveStatus = styled.div<{ $statusColor: string }>`\n font-size: 0.7rem;\n color: ${(p) => p.$statusColor};\n text-transform: uppercase;\n letter-spacing: 0.15em;\n font-weight: 600;\n`\n\nconst LiveStats = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n`\n\nconst LiveLabel = styled.div`\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin-bottom: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.35rem;\n span {\n font-size: 0.75rem;\n cursor: help;\n opacity: 0.7;\n }\n`\n\nconst LivePercent = styled.div`\n font-size: 2rem;\n font-weight: 600;\n color: #D4AF37;\n display: flex;\n align-items: center;\n span {\n margin-left: 0.5rem;\n color: #0ecb81;\n font-size: 1rem;\n opacity: 0.8;\n }\n`\n\nconst UnitsSubscribed = styled.div`\n text-align: right;\n`\n\nconst UnitsValue = styled.div`\n font-size: 1.75rem;\n font-weight: 700;\n span { color: #D4AF37; }\n small { color: rgba(255,255,255,0.3); margin-left: 0.35rem; }\n`\n\nconst ProgressBar = styled.div`\n width: 100%;\n height: 8px;\n background: rgba(255,255,255,0.1);\n border-radius: 4px;\n overflow: hidden;\n div {\n height: 100%;\n background: linear-gradient(90deg, #D4AF37, #f0b90b);\n border-radius: 4px;\n transition: width 0.5s ease;\n }\n`\n","import styled from 'styled-components'\n\nimport { recentOrderPurchases } from './constants'\n\nexport type VideoActivitySectionProps = {\n ipoStarted: boolean\n}\n\nexport function VideoActivitySection({ ipoStarted }: VideoActivitySectionProps) {\n return (\n <Section>\n <VideoPanel>\n <div className=\"section-header\">\n <h3>Musgrave</h3>\n </div>\n <div className=\"video-container\">\n <video controls loop autoPlay muted playsInline>\n <source src=\"/properties/Musgrave/musgrave.mp4\" type=\"video/mp4\" />\n Your browser does not support the video tag.\n </video>\n </div>\n </VideoPanel>\n\n <ActivityPanel>\n <div className=\"section-header\">\n <h3>\n <LiveIndicatorDot $active={ipoStarted} />\n Recent Order Activity\n </h3>\n <span>{ipoStarted ? 'Active orders: 1,247' : 'Waiting for Offer to Open'}</span>\n </div>\n <div className=\"activity-content\">\n {ipoStarted ? (\n <div className=\"activity-list\">\n {recentOrderPurchases.map((purchase, i) => (\n <div key={i} className=\"purchase-row\">\n <span>{purchase.name}</span>\n <strong>${purchase.amount.toLocaleString()}</strong>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"activity-empty\">\n <div className=\"spinner\" />\n <p>Activity will appear once the Offering opens</p>\n </div>\n )}\n </div>\n </ActivityPanel>\n </Section>\n )\n}\n\nconst Section = styled.div`\n display: flex;\n gap: 1.5rem;\n align-items: stretch;\n @media (max-width: 1024px) {\n flex-direction: column;\n gap: 1rem;\n }\n`\n\nconst VideoPanel = styled.div`\n flex: 1;\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n .section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n margin: 0;\n }\n }\n .video-container {\n flex: 1;\n position: relative;\n background: #000;\n border-radius: 8px;\n overflow: hidden;\n min-height: 300px;\n video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n`\n\nconst ActivityPanel = styled.div`\n flex: 0 0 auto;\n min-width: 450px;\n max-width: 520px;\n display: flex;\n flex-direction: column;\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n @media (max-width: 1024px) {\n min-width: 0;\n max-width: none;\n width: 100%;\n }\n .section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n margin: 0;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n span {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n font-weight: 500;\n }\n }\n .activity-content {\n flex: 1;\n overflow-y: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n .activity-content::-webkit-scrollbar {\n display: none;\n }\n .activity-list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n .purchase-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.5rem 0.75rem;\n background: rgba(255,255,255,0.03);\n border-radius: 6px;\n span {\n font-size: 0.8rem;\n color: var(--color-text);\n }\n strong {\n font-size: 0.8rem;\n color: #0ecb81;\n font-weight: 500;\n }\n }\n .activity-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: var(--color-text-secondary);\n text-align: center;\n gap: 0.75rem;\n .spinner {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: 2px solid rgba(212,175,55,0.3);\n border-top-color: #D4AF37;\n animation: spin 1s linear infinite;\n }\n p {\n font-size: 0.85rem;\n margin: 0;\n }\n }\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n`\n\nconst LiveIndicatorDot = styled.span<{ $active?: boolean }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n background-color: ${(p) => (p.$active ? '#0ecb81' : '#848e9c')};\n border-radius: 50%;\n position: relative;\n &:after {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n animation: ${(p) => (p.$active ? 'liveGlow 2s infinite' : 'none')};\n }\n @keyframes liveGlow {\n 0% { box-shadow: 0 0 0 0 rgba(14,203,129,0.4); }\n 70% { box-shadow: 0 0 0 10px rgba(14,203,129,0); }\n 100% { box-shadow: 0 0 0 0 rgba(14,203,129,0); }\n }\n`\n","import { useState } from 'react'\nimport styled from 'styled-components'\n\nimport type { OrderDetails } from './types'\n\nexport type OrderPanelProps = {\n statusLabel: string\n statusColor: string\n ipoStarted: boolean\n isAuthenticated: boolean\n tokenPrice: number\n feeRate: number\n supplyToSell: number\n availableBalance: number\n displayedOwnedTokens: number\n ownedTokensJustUpdated: boolean\n lastOrderQuantity: number\n orderPlacedSuccess: boolean\n lastOrderDetails: OrderDetails | null\n tokenQuantity: number\n feeInTokens: number\n orderTotal: number\n sliderValue: number\n manualOrderAmount: number | null\n setSliderValue: (value: number) => void\n setManualOrderAmount: (value: number | null) => void\n onSignInClick: () => void\n onOrderButtonClick: () => void\n orderButtonText: string\n isOrderButtonDisabled: boolean\n hasInsufficientFunds: boolean\n onPlaceAnotherOrder: () => void\n onDeposit?: () => void\n tokenDisplayName: string\n tokenSymbol: string\n}\n\nexport function OrderPanel({\n statusLabel,\n statusColor,\n ipoStarted,\n isAuthenticated,\n tokenPrice,\n feeRate,\n supplyToSell,\n availableBalance,\n displayedOwnedTokens,\n ownedTokensJustUpdated,\n lastOrderQuantity,\n orderPlacedSuccess,\n lastOrderDetails,\n tokenQuantity,\n feeInTokens,\n orderTotal,\n sliderValue,\n manualOrderAmount,\n setSliderValue,\n setManualOrderAmount,\n onOrderButtonClick,\n onSignInClick,\n orderButtonText,\n isOrderButtonDisabled,\n hasInsufficientFunds,\n onPlaceAnotherOrder,\n onDeposit,\n tokenDisplayName,\n tokenSymbol,\n}: OrderPanelProps) {\n const [payInputValue, setPayInputValue] = useState('')\n const [receiveInputValue, setReceiveInputValue] = useState('')\n const [isPayInputFocused, setIsPayInputFocused] = useState(false)\n const [isReceiveInputFocused, setIsReceiveInputFocused] = useState(false)\n\n const handlePayBlur = () => {\n setIsPayInputFocused(false)\n const parsed = parseInt(payInputValue.replace(/[^0-9]/g, ''), 10) || 0\n if (parsed <= 0) {\n setManualOrderAmount(null)\n setSliderValue(0)\n } else if (parsed >= availableBalance) {\n setManualOrderAmount(null)\n setSliderValue(100)\n } else {\n // Store exact amount — avoid lossy slider rounding\n setManualOrderAmount(parsed)\n const ratio = availableBalance === 0 ? 0 : Math.round(Math.max(0, (parsed / availableBalance) * 100))\n setSliderValue(ratio)\n }\n }\n\n const handleReceiveBlur = () => {\n setIsReceiveInputFocused(false)\n const parsed = parseFloat(receiveInputValue) || 0\n const newOrderTotal = Math.round(parsed * tokenPrice)\n if (newOrderTotal <= 0) {\n setManualOrderAmount(null)\n setSliderValue(0)\n } else if (newOrderTotal >= availableBalance) {\n setManualOrderAmount(null)\n setSliderValue(100)\n } else {\n // Store exact amount — avoid lossy slider rounding\n setManualOrderAmount(newOrderTotal)\n const ratio = availableBalance === 0 ? 0 : Math.round(Math.max(0, (newOrderTotal / availableBalance) * 100))\n setSliderValue(ratio)\n }\n }\n\n return (\n <Panel>\n <PanelHeader>\n <span>Place Order</span>\n <StatusBadge style={{ color: statusColor }}>\n <span style={{ backgroundColor: statusColor }} />\n {statusLabel}\n </StatusBadge>\n </PanelHeader>\n\n {orderPlacedSuccess ? (\n <OrderSuccessCard>\n <div className=\"success-header\">\n <div className=\"icon\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#D4AF37\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n <div>\n <p>Order Complete</p>\n <small>Order #{lastOrderDetails?.orderNumber || ''}</small>\n </div>\n </div>\n <div className=\"success-body\">\n {[\n { label: 'Units Acquired', value: `${lastOrderDetails?.tokens?.toFixed(2) || '0.00'} ${tokenSymbol}` },\n { label: 'Price Per Unit', value: `$${tokenPrice.toFixed(2)}` },\n {\n label: `${tokenDisplayName} Exposure`,\n value: `${(((lastOrderDetails?.tokens ?? 0) / supplyToSell) * 100).toFixed(3)}%`,\n },\n ].map((row) => (\n <div key={row.label} className=\"success-row\">\n <span>{row.label}</span>\n <strong>{row.value}</strong>\n </div>\n ))}\n <div className=\"success-total\">\n <span>Total Investment</span>\n <strong>${lastOrderDetails?.total?.toLocaleString() || '0'}</strong>\n </div>\n </div>\n <div className=\"success-footnote\">\n Your units will be available for secondary market trading once the offering period concludes.\n </div>\n <button type=\"button\" onClick={onPlaceAnotherOrder}>\n Place Another Order\n </button>\n </OrderSuccessCard>\n ) : (\n <FormBody>\n <Card>\n <CardLabel>You Invest</CardLabel>\n <CardInputRow>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={isPayInputFocused ? payInputValue : orderTotal.toLocaleString()}\n onFocus={(e) => {\n setIsPayInputFocused(true)\n setPayInputValue((manualOrderAmount ?? orderTotal).toString())\n e.target.select()\n }}\n onBlur={handlePayBlur}\n onChange={(e) => setPayInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n ;(e.target as HTMLInputElement).blur()\n }\n }}\n />\n <span>USDC</span>\n </CardInputRow>\n <QuickSelectRow>\n {[25, 50, 75, 100].map((pct) => (\n <button\n key={pct}\n type=\"button\"\n onClick={() => {\n setManualOrderAmount(null)\n setSliderValue(pct)\n }}\n className={sliderValue === pct ? 'active' : ''}\n >\n {pct}%\n </button>\n ))}\n </QuickSelectRow>\n </Card>\n\n <FundsRow>\n <span>\n Available Funds:{' '}\n <strong>{isAuthenticated ? `$${availableBalance.toLocaleString()}` : '—'}</strong>\n </span>\n <DepositButton\n type=\"button\"\n onClick={isAuthenticated ? onDeposit : undefined}\n disabled={!isAuthenticated}\n >\n + Deposit\n </DepositButton>\n </FundsRow>\n\n <Divider>↓</Divider>\n\n <Card>\n <CardTopRow>\n <CardLabel>{ipoStarted ? 'You Receive' : \"You'll Receive\"}</CardLabel>\n <CardHint>{((tokenQuantity / supplyToSell) * 100).toFixed(3)}% Exposure</CardHint>\n </CardTopRow>\n <CardInputRow>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={isReceiveInputFocused ? receiveInputValue : tokenQuantity.toFixed(2)}\n onFocus={(e) => {\n setIsReceiveInputFocused(true)\n setReceiveInputValue(tokenQuantity.toFixed(2))\n e.target.select()\n }}\n onBlur={handleReceiveBlur}\n onChange={(e) => setReceiveInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n ;(e.target as HTMLInputElement).blur()\n }\n }}\n />\n <span>{tokenDisplayName}</span>\n </CardInputRow>\n </Card>\n\n <OrderSummary>\n <SummaryRow>\n <span>Price</span>\n <strong>${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} / unit</strong>\n </SummaryRow>\n <SummaryRow>\n <span>Buying</span>\n <strong>{tokenQuantity.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {tokenSymbol}</strong>\n </SummaryRow>\n <SummaryRow>\n <span>Fee ({(feeRate * 100).toFixed(1)}%)</span>\n <strong>{feeInTokens.toFixed(2)} {tokenSymbol}</strong>\n </SummaryRow>\n <SummaryTotal>\n <span>Total</span>\n <strong>${orderTotal.toLocaleString()} USDC</strong>\n </SummaryTotal>\n </OrderSummary>\n </FormBody>\n )}\n\n {!orderPlacedSuccess && (\n <SubscribeButton\n type=\"button\"\n disabled={isOrderButtonDisabled}\n data-green={orderButtonText === 'Place Order'}\n onClick={() => {\n if (!isAuthenticated) {\n onSignInClick()\n return\n }\n onOrderButtonClick()\n }}\n >\n {orderButtonText}\n </SubscribeButton>\n )}\n\n {isAuthenticated && (\n <BalanceCards>\n <BalanceCard>\n <BalanceLabel>Available to Invest</BalanceLabel>\n <BalanceValue>${availableBalance.toLocaleString()}</BalanceValue>\n <BalanceAction onClick={onDeposit} style={{ cursor: onDeposit ? 'pointer' : 'default' }}>+ Deposit</BalanceAction>\n </BalanceCard>\n <BalanceCard>\n <BalanceLabel>{`${tokenDisplayName} Owned`}</BalanceLabel>\n <BalanceValue>\n {displayedOwnedTokens.toFixed(2)} {tokenSymbol}\n {ownedTokensJustUpdated && <span>+{lastOrderQuantity.toFixed(2)} {tokenSymbol}</span>}\n </BalanceValue>\n <BalanceSub>\n ${\n (displayedOwnedTokens * tokenPrice).toLocaleString('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })\n }{' '}\n • {((displayedOwnedTokens / supplyToSell) * 100).toFixed(3)}%\n </BalanceSub>\n </BalanceCard>\n </BalanceCards>\n )}\n\n {hasInsufficientFunds && (\n <InsufficientFunds>\n You need ${orderTotal.toLocaleString()} but only have ${availableBalance.toLocaleString()} available.\n </InsufficientFunds>\n )}\n </Panel>\n )\n}\n\nconst Panel = styled.div`\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n height: 100%;\n display: flex;\n flex-direction: column;\n min-width: 450px;\n max-width: 520px;\n width: 520px;\n overflow: hidden;\n @media (max-width: 1024px) {\n min-width: 0;\n max-width: none;\n width: 100%;\n }\n`\n\nconst PanelHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n padding-bottom: 0.75rem;\n border-bottom: 1px solid var(--color-border);\n span:first-child {\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text);\n }\n`\n\nconst StatusBadge = styled.span`\n font-size: 0.7rem;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 0.3rem;\n span {\n width: 5px;\n height: 5px;\n border-radius: 50%;\n display: inline-block;\n }\n`\n\nconst Card = styled.div`\n background: rgba(0,0,0,0.4);\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 12px;\n padding: 1rem 1.25rem;\n`\n\nconst CardLabel = styled.div`\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n margin-bottom: 0.5rem;\n`\n\nconst CardInputRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n input {\n background: transparent;\n border: none;\n outline: none;\n font-size: 1.75rem;\n font-weight: 600;\n color: #fff;\n width: 100%;\n }\n span {\n font-size: 1rem;\n color: var(--color-text-secondary);\n font-weight: 500;\n margin-left: 0.75rem;\n white-space: nowrap;\n }\n`\n\nconst QuickSelectRow = styled.div`\n display: flex;\n gap: 0.5rem;\n margin-top: 0.75rem;\n button {\n flex: 1;\n padding: 0.4rem 0;\n font-size: 0.75rem;\n font-weight: 500;\n background: rgba(255,255,255,0.05);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 6px;\n color: var(--color-text-secondary);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n button.active {\n background: rgba(212,175,55,0.2);\n border-color: rgba(212,175,55,0.5);\n color: #D4AF37;\n }\n`\n\nconst FundsRow = styled.div`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 0.5rem 0 0.5rem 0.5rem;\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n strong {\n color: #fff;\n }\n`\n\nconst DepositButton = styled.button`\n background: transparent;\n border: 1px solid rgba(212,175,55,0.4);\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n font-size: 0.65rem;\n color: #D4AF37;\n cursor: pointer;\n font-weight: 500;\n`\n\nconst Divider = styled.div`\n text-align: center;\n margin: 0.5rem 0;\n color: var(--color-text-secondary);\n`\n\nconst CardTopRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.5rem;\n`\n\nconst CardHint = styled.span`\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n opacity: 0.7;\n`\n\nconst OrderSummary = styled.div`\n border-top: 1px solid rgba(255,255,255,0.08);\n padding-top: 1rem;\n margin-top: 0.5rem;\n font-size: 0.8rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n`\n\nconst SummaryRow = styled.div`\n display: flex;\n justify-content: space-between;\n color: var(--color-text-secondary);\n strong { color: #fff; }\n`\n\nconst SummaryTotal = styled(SummaryRow)`\n padding-top: 0.5rem;\n border-top: 1px solid rgba(255,255,255,0.08);\n color: #fff;\n strong {\n font-weight: 600;\n }\n`\n\nconst FormBody = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n`\n\nconst SubscribeButton = styled.button`\n width: 100%;\n margin-top: 1rem;\n padding: 0.875rem;\n border-radius: 6px;\n font-weight: 600;\n font-size: 0.9rem;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n background-color: rgba(255,255,255,0.1);\n color: var(--color-text-secondary);\n &[disabled] {\n pointer-events: none;\n cursor: not-allowed;\n }\n &:not([disabled])[data-green='true'] {\n background-color: #0ecb81;\n color: #fff;\n }\n &:not([disabled])[data-green='false'] {\n background-color: #D4AF37;\n color: #0a0a0a;\n }\n`\n\nconst BalanceCards = styled.div`\n display: flex;\n gap: 1rem;\n margin-top: 1rem;\n flex-wrap: wrap;\n`\n\nconst BalanceCard = styled.div`\n flex: 1;\n background: rgba(255,255,255,0.03);\n border-radius: 12px;\n padding: 1rem;\n text-align: center;\n position: relative;\n`\n\nconst BalanceLabel = styled.div`\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 0.5rem;\n`\n\nconst BalanceValue = styled.div`\n font-size: 1.5rem;\n font-weight: 700;\n color: #fff;\n span {\n position: absolute;\n left: calc(50% + 1rem);\n font-size: 0.8rem;\n color: #0ecb81;\n font-weight: 600;\n }\n`\n\nconst BalanceAction = styled.div`\n font-size: 0.75rem;\n color: #D4AF37;\n cursor: pointer;\n font-weight: 500;\n margin-top: 0.5rem;\n`\n\nconst BalanceSub = styled.div`\n font-size: 0.85rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n margin-top: 0.25rem;\n`\n\nconst OrderSuccessCard = styled.div`\n margin-bottom: 1.5rem;\n background: linear-gradient(180deg, rgba(25,27,31,0.95) 0%, rgba(18,20,24,0.98) 100%);\n border: 1px solid rgba(212,175,55,0.12);\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 4px 20px rgba(0,0,0,0.3);\n .success-header {\n border-bottom: 1px solid rgba(255,255,255,0.06);\n padding: 1.25rem 1.5rem;\n display: flex;\n align-items: center;\n gap: 0.875rem;\n background: linear-gradient(135deg, rgba(212,175,55,0.06) 0%, transparent 100%);\n .icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(135deg, rgba(212,175,55,0.2) 0%, rgba(212,175,55,0.1) 100%);\n border: 1px solid rgba(212,175,55,0.25);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n p {\n font-size: 0.95rem;\n font-weight: 600;\n color: #fff;\n margin: 0;\n }\n small {\n font-size: 0.7rem;\n color: rgba(255,255,255,0.4);\n }\n }\n .success-body {\n padding: 1.25rem 1.5rem;\n }\n .success-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.875rem;\n margin-bottom: 0.875rem;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n span {\n font-size: 0.75rem;\n color: rgba(255,255,255,0.4);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 500;\n }\n strong {\n font-size: 0.95rem;\n font-weight: 500;\n color: rgba(255,255,255,0.7);\n font-family: monospace;\n }\n }\n .success-total {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.875rem;\n background: rgba(212,175,55,0.05);\n border-radius: 8px;\n border: 1px solid rgba(212,175,55,0.1);\n span {\n font-size: 0.75rem;\n color: rgba(255,255,255,0.5);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 500;\n }\n strong {\n font-size: 1.05rem;\n font-weight: 700;\n color: #D4AF37;\n font-family: monospace;\n }\n }\n .success-footnote {\n padding: 1rem 1.5rem;\n border-top: 1px solid rgba(255,255,255,0.06);\n background: rgba(0,0,0,0.2);\n font-size: 0.75rem;\n color: rgba(255,255,255,0.5);\n line-height: 1.6;\n }\n button {\n width: 100%;\n padding: 0.875rem;\n border-radius: 8px;\n font-weight: 600;\n font-size: 0.9rem;\n cursor: pointer;\n background: linear-gradient(135deg, #D4AF37 0%, #b8962e 100%);\n color: #0a0a0a;\n border: none;\n box-shadow: 0 2px 8px rgba(212,175,55,0.25);\n transition: all 0.2s ease;\n }\n`\nconst InsufficientFunds = styled.div`\n margin-top: 1rem;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n background: rgba(246,70,93,0.1);\n border: 1px solid rgba(246,70,93,0.3);\n color: #f6465d;\n font-size: 0.85rem;\n font-weight: 600;\n`\n","import { useState } from 'react'\nimport styled from 'styled-components'\nimport { BiImages, BiMap } from 'react-icons/bi'\n\nimport { galleryCategories, musgraveGalleryImages } from './constants'\n\nexport type GalleryMapSectionProps = {\n propertyLocation: string\n}\n\nexport function GalleryMapSection({ propertyLocation }: GalleryMapSectionProps) {\n const [carouselIndex, setCarouselIndex] = useState(0)\n\n const goPrev = () => {\n setCarouselIndex((prev) => (prev > 0 ? prev - 1 : musgraveGalleryImages.length - 1))\n }\n\n const goNext = () => {\n setCarouselIndex((prev) => (prev < musgraveGalleryImages.length - 1 ? prev + 1 : 0))\n }\n\n return (\n <Row>\n <GalleryPanel>\n <PanelHeader>\n <h3>\n <BiImages /> Property Gallery\n </h3>\n <button type=\"button\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M8 3H5a2 2 0 00-2 2v3m18 0V5a2 2 0 00-2-2h-3m0 18h3a2 2 0 002-2v-3M3 16v3a2 2 0 002 2h3\" />\n </svg>\n Full View\n </button>\n </PanelHeader>\n\n <Carousel>\n <Track style={{ transform: `translateX(-${carouselIndex * 100}%)` }}>\n {musgraveGalleryImages.map((img) => (\n <Slide key={img.src}>\n <img src={img.src} alt={img.title} />\n <SlideCaption>\n <h4>{img.title}</h4>\n <p>{img.subtitle}</p>\n </SlideCaption>\n </Slide>\n ))}\n </Track>\n <CarouselButton className=\"prev\" onClick={goPrev}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </CarouselButton>\n <CarouselButton className=\"next\" onClick={goNext}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </CarouselButton>\n </Carousel>\n\n <ThumbnailRow>\n {musgraveGalleryImages.map((img, index) => (\n <Thumbnail\n key={img.src}\n onClick={() => setCarouselIndex(index)}\n data-active={carouselIndex === index}\n >\n <img src={img.src} alt={img.title} />\n </Thumbnail>\n ))}\n </ThumbnailRow>\n\n <CategoryRow>\n {galleryCategories.map((cat, index) => {\n const isActive =\n carouselIndex >= cat.startIndex &&\n (index === galleryCategories.length - 1 || carouselIndex < galleryCategories[index + 1].startIndex)\n return (\n <button key={cat.name} type=\"button\" data-active={isActive} onClick={() => setCarouselIndex(cat.startIndex)}>\n {cat.name}\n </button>\n )\n })}\n </CategoryRow>\n </GalleryPanel>\n\n <MapPanel>\n <PanelHeader>\n <h3>\n <BiMap /> Location\n </h3>\n <span>{propertyLocation}</span>\n </PanelHeader>\n <MapFrame>\n <IframeShield onClick={(e) => ((e.currentTarget as HTMLDivElement).style.display = 'none')} />\n <iframe\n src=\"https://demo.loafmarkets.com/map/musgrave?embed=true&zoom=14&hideOthers=true\"\n width=\"100%\"\n height=\"100%\"\n style={{ border: 0, minHeight: '400px', pointerEvents: 'auto' }}\n allow=\"autoplay; fullscreen; web-share; xr-spatial-tracking;\"\n title=\"Explore Musgrave Property in 3D\"\n referrerPolicy=\"unsafe-url\"\n tabIndex={-1}\n />\n </MapFrame>\n </MapPanel>\n </Row>\n )\n}\n\nconst Row = styled.div`\n display: grid;\n grid-template-columns: 2fr 1fr;\n gap: 1.5rem;\n margin-top: 1.5rem;\n max-width: 1800px;\n margin-left: auto;\n margin-right: auto;\n @media (max-width: 1024px) {\n grid-template-columns: 1fr;\n }\n`\n\nconst PanelBase = styled.div`\n background: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n`\n\nconst PanelHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n padding-bottom: 0.75rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n button {\n background: transparent;\n border: 1px solid #D4AF37;\n color: #D4AF37;\n padding: 0.35rem 0.75rem;\n border-radius: 4px;\n font-size: 0.75rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 0.35rem;\n }\n span {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n }\n`\n\nconst GalleryPanel = styled(PanelBase)``\n\nconst Carousel = styled.div`\n position: relative;\n width: 100%;\n overflow: hidden;\n border-radius: 8px;\n`\n\nconst Track = styled.div`\n display: flex;\n transition: transform 0.4s ease;\n`\n\nconst Slide = styled.div`\n min-width: 100%;\n position: relative;\n img {\n width: 100%;\n height: 450px;\n object-fit: cover;\n border-radius: 8px;\n }\n`\n\nconst SlideCaption = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem;\n background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);\n border-radius: 0 0 8px 8px;\n h4 {\n margin: 0;\n font-size: 0.95rem;\n font-weight: 600;\n }\n p {\n margin: 0.25rem 0 0;\n font-size: 0.75rem;\n color: rgba(255,255,255,0.7);\n }\n`\n\nconst CarouselButton = styled.button`\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n background: rgba(0,0,0,0.8);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 2;\n &.prev { left: 1.5rem; }\n &.next { right: 1.5rem; }\n svg {\n width: 28px;\n height: 28px;\n stroke: #fff;\n }\n`\n\nconst ThumbnailRow = styled.div`\n display: flex;\n gap: 0.5rem;\n margin-top: 1rem;\n overflow-x: auto;\n padding-bottom: 0.5rem;\n`\n\nconst Thumbnail = styled.div`\n min-width: 60px;\n height: 45px;\n border-radius: 4px;\n overflow: hidden;\n cursor: pointer;\n border: 2px solid transparent;\n opacity: 0.6;\n transition: all 0.2s ease;\n &[data-active='true'] {\n border-color: #D4AF37;\n opacity: 1;\n }\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`\n\nconst CategoryRow = styled.div`\n display: flex;\n justify-content: center;\n gap: 0.5rem;\n margin-top: 0.75rem;\n flex-wrap: wrap;\n button {\n background: transparent;\n border: 1px solid rgba(255,255,255,0.2);\n color: var(--color-text-secondary);\n padding: 0.5rem 1rem;\n border-radius: 6px;\n font-size: 0.8rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n button[data-active='true'] {\n background: rgba(212,175,55,0.2);\n border-color: #D4AF37;\n color: #D4AF37;\n }\n`\n\nconst MapPanel = styled(PanelBase)`\n min-height: 400px;\n`\n\nconst MapFrame = styled.div`\n flex: 1;\n border-radius: 6px;\n overflow: hidden;\n min-height: 400px;\n position: relative;\n`\n\nconst IframeShield = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1;\n cursor: pointer;\n`\n","import { useMemo, useState, useEffect } from 'react'\nimport styled from 'styled-components'\n\nimport type { NewsFeedItem, PropertySubscription } from './types'\n\nexport type NewsOrdersSectionProps = {\n newsItems: NewsFeedItem[]\n userSubscriptions: PropertySubscription[]\n tokenPrice: number\n}\n\nconst SUBSCRIPTIONS_PAGE_SIZE = 6\n\nexport function NewsOrdersSection({ newsItems, userSubscriptions, tokenPrice }: NewsOrdersSectionProps) {\n const [page, setPage] = useState(0)\n\n const totalPages = Math.max(1, Math.ceil(userSubscriptions.length / SUBSCRIPTIONS_PAGE_SIZE))\n\n useEffect(() => {\n if (page > totalPages - 1) {\n setPage(totalPages - 1)\n }\n }, [page, totalPages])\n\n useEffect(() => {\n setPage(0)\n }, [userSubscriptions])\n\n const paginatedSubscriptions = useMemo(() => {\n const start = page * SUBSCRIPTIONS_PAGE_SIZE\n return userSubscriptions.slice(start, start + SUBSCRIPTIONS_PAGE_SIZE)\n }, [page, userSubscriptions])\n\n const hasPagination = userSubscriptions.length > SUBSCRIPTIONS_PAGE_SIZE\n\n return (\n <Row>\n <TradeNewsPanel>\n <TradeNewsHeader>\n <h3>Property News &amp; Headlines</h3>\n <span>\n <span className=\"dot\" /> LIVE\n </span>\n </TradeNewsHeader>\n <TradeNewsList>\n {newsItems.map((newsItem) => (\n <TradeNewsItem\n key={newsItem.displayId || `${newsItem.id}-fallback`}\n data-new={newsItem.isNew}\n >\n <TradeNewsTitle>{newsItem.title}</TradeNewsTitle>\n <TradeNewsInfo>\n <TradeNewsDate data-new={newsItem.isNew}>{newsItem.date}</TradeNewsDate>\n <TradeNewsCategory data-type={newsItem.type}>\n {newsItem.type === 'property' ? 'Property Update' : 'Market News'}\n </TradeNewsCategory>\n </TradeNewsInfo>\n </TradeNewsItem>\n ))}\n </TradeNewsList>\n </TradeNewsPanel>\n\n <TradeNewsPanel>\n <TradeNewsHeader>\n <div>\n <h3>Your Orders</h3>\n <span>Offering Subscriptions</span>\n </div>\n {hasPagination ? (\n <Pagination>\n <button type=\"button\" onClick={() => setPage((prev) => Math.max(prev - 1, 0))} disabled={page === 0}>\n Prev\n </button>\n <span>\n Page {page + 1}/{totalPages}\n </span>\n <button\n type=\"button\"\n onClick={() => setPage((prev) => Math.min(prev + 1, totalPages - 1))}\n disabled={page >= totalPages - 1}\n >\n Next\n </button>\n </Pagination>\n ) : null}\n </TradeNewsHeader>\n <OrdersTable>\n <OrdersHead>\n {['Date', 'Units', 'Price', 'Total', 'Status'].map((h) => (\n <div key={h}>{h}</div>\n ))}\n </OrdersHead>\n {paginatedSubscriptions.length ? (\n paginatedSubscriptions.map((subscription) => {\n const subscriptionDate = new Date(subscription.timestamp)\n return (\n <OrdersRow key={`${subscription.timestamp}-${subscription.tokens}`}>\n <div>\n {subscriptionDate.toLocaleDateString('en-AU', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}\n <span>\n {subscriptionDate.toLocaleTimeString('en-AU', {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </span>\n </div>\n <div className=\"units\">{subscription.tokens.toFixed(2)}</div>\n <div>${tokenPrice.toFixed(2)}</div>\n <div className=\"total\">${subscription.value.toLocaleString()}</div>\n <div className=\"status\">{subscription.status ?? 'Confirmed'}</div>\n </OrdersRow>\n )\n })\n ) : (\n <OrdersEmpty>\n <div>📋</div>\n <p>No orders yet</p>\n <small>Subscribe to the IPO above to place your first order</small>\n </OrdersEmpty>\n )}\n </OrdersTable>\n </TradeNewsPanel>\n </Row>\n )\n}\n\nconst Row = styled.div`\n display: grid;\n grid-template-columns: 1fr 2fr;\n gap: 1.5rem;\n margin-top: 1.5rem;\n max-width: 1800px;\n margin-left: auto;\n margin-right: auto;\n @media (max-width: 1024px) {\n grid-template-columns: 1fr;\n }\n`\n\nconst TradeNewsPanel = styled.div`\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n display: flex;\n flex-direction: column;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n min-height: 280px;\n overflow: visible !important;\n`\n\nconst TradeNewsHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n }\n span {\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.25rem;\n font-weight: 500;\n }\n .dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #0ecb81;\n animation: pulse 2s infinite;\n }\n @keyframes pulse {\n 0% { opacity: 0.4; }\n 50% { opacity: 1; }\n 100% { opacity: 0.4; }\n }\n`\n\nconst TradeNewsList = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n flex: 1;\n overflow: visible;\n max-width: 100%;\n`\n\nconst TradeNewsItem = styled.div`\n display: flex;\n flex-direction: column;\n padding: 0.75rem;\n background-color: rgba(255,255,255,0.05);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n &[data-new='true'] {\n background-color: rgba(14,203,129,0.1);\n }\n &:hover {\n background-color: rgba(255,255,255,0.08);\n transform: translateY(-2px);\n }\n`\n\nconst TradeNewsTitle = styled.h4`\n font-size: 0.9375rem;\n font-weight: 500;\n margin: 0 0 0.5rem 0;\n color: var(--color-text);\n`\n\nconst TradeNewsInfo = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n`\n\nconst TradeNewsDate = styled.span`\n &[data-new='true'] {\n color: #0ecb81;\n }\n`\n\nconst TradeNewsCategory = styled.span`\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n background-color: rgba(240,185,11,0.1);\n color: var(--color-accent, #f0b90b);\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100px;\n &[data-type='property'] {\n background-color: rgba(14,203,129,0.1);\n color: #0ecb81;\n }\n`\n\nconst OrdersTable = styled.div`\n flex: 1;\n overflow: auto;\n`\n\nconst Pagination = styled.div`\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n\n button {\n border: 1px solid rgba(255,255,255,0.2);\n background: rgba(255,255,255,0.05);\n color: #fff;\n border-radius: 9999px;\n padding: 0.25rem 0.9rem;\n font-size: 0.7rem;\n cursor: pointer;\n transition: opacity 0.2s;\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n }\n`\n\nconst OrdersHead = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr 1fr 1fr 1.2fr;\n gap: 0.5rem;\n padding-bottom: 0.75rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n margin-bottom: 0.5rem;\n div {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n }\n`\n\nconst OrdersRow = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr 1fr 1fr 1.2fr;\n gap: 0.5rem;\n padding: 0.6rem 0;\n border-bottom: 1px solid rgba(255,255,255,0.05);\n align-items: center;\n div {\n font-size: 0.85rem;\n color: #fff;\n }\n div > span {\n display: block;\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n }\n .units {\n color: #0ecb81;\n }\n .total {\n color: #D4AF37;\n font-weight: 500;\n }\n .status {\n font-size: 0.75rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n background: rgba(14,203,129,0.15);\n color: #0ecb81;\n display: inline-block;\n width: fit-content;\n }\n`\n\nconst OrdersEmpty = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n color: var(--color-text-secondary);\n text-align: center;\n div {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n p {\n font-size: 0.9rem;\n margin-bottom: 0.25rem;\n }\n small {\n font-size: 0.75rem;\n }\n`\n","import styled from 'styled-components'\n\nexport type OrderConfirmationModalProps = {\n open: boolean\n onClose: () => void\n hasInsufficientFunds: boolean\n tokenQuantity: number\n tokenPrice: number\n propertyName: string\n estExposure: string\n orderTotal: number\n availableBalance: number\n onConfirm: () => void\n}\n\nexport function OrderConfirmationModal({\n open,\n onClose,\n hasInsufficientFunds,\n tokenQuantity,\n tokenPrice,\n propertyName,\n estExposure,\n orderTotal,\n availableBalance,\n onConfirm,\n}: OrderConfirmationModalProps) {\n if (!open) return null\n\n return (\n <Overlay onClick={onClose}>\n <Modal onClick={(e) => e.stopPropagation()}>\n <ModalHeader>\n <h3>\n Confirm Order\n <Badge>Subscribe</Badge>\n </h3>\n </ModalHeader>\n\n <ModalBody>\n {[\n { label: 'Order Type', value: 'Primary Offering' },\n { label: 'Property', value: propertyName },\n { label: 'Units', value: `${tokenQuantity.toLocaleString()} MUS`, highlight: true },\n {\n label: 'Unit Price',\n value: `$${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`,\n },\n { label: 'Property Exposure', value: `${estExposure}%` },\n { label: 'Total Investment', value: `$${orderTotal.toLocaleString()}`, highlight: true },\n ].map((row, index, arr) => (\n <ModalRow key={row.label} data-divider={index < arr.length - 1}>\n <span>{row.label}</span>\n <strong data-highlight={row.highlight}>{row.value}</strong>\n </ModalRow>\n ))}\n </ModalBody>\n\n {hasInsufficientFunds ? (\n <Warning>\n <p>⚠ Insufficient Balance</p>\n <small>\n You need <strong>${orderTotal.toLocaleString()}</strong> but only have{' '}\n <strong>${availableBalance.toLocaleString()}</strong> available.\n </small>\n </Warning>\n ) : (\n <Summary>\n Your order for <strong>{tokenQuantity.toLocaleString()} MUS units</strong> in the{' '}\n <strong>{propertyName}</strong> Primary Offering will be placed for <strong>${tokenPrice.toFixed(2)}/unit</strong>.\n </Summary>\n )}\n\n <ButtonRow>\n <button type=\"button\" onClick={onClose} className=\"secondary\">\n Cancel\n </button>\n {!hasInsufficientFunds && (\n <button type=\"button\" onClick={onConfirm} className=\"primary\">\n Place Order\n </button>\n )}\n </ButtonRow>\n </Modal>\n </Overlay>\n )\n}\n\nconst Overlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0,0,0,0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n backdrop-filter: blur(4px);\n`\n\nconst Modal = styled.div`\n background: linear-gradient(135deg, rgba(26,29,35,0.95) 0%, rgba(26,29,35,0.98) 100%);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 16px;\n padding: 2rem;\n max-width: 480px;\n width: 90%;\n box-shadow: 0 20px 60px rgba(0,0,0,0.5);\n`\n\nconst ModalHeader = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 1.5rem;\n padding-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: #fff;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n`\n\nconst Badge = styled.span`\n padding: 0.25rem 0.75rem;\n border-radius: 6px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: linear-gradient(135deg, rgba(212,175,55,0.2) 0%, rgba(212,175,55,0.1) 100%);\n color: #D4AF37;\n border: 1px solid rgba(212,175,55,0.3);\n`\n\nconst ModalBody = styled.div`\n margin-bottom: 1.5rem;\n display: flex;\n flex-direction: column;\n`\n\nconst ModalRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 0;\n border-bottom: 1px solid rgba(255,255,255,0.05);\n &[data-divider='false'] {\n border-bottom: none;\n }\n span {\n color: rgba(255,255,255,0.6);\n font-size: 0.9rem;\n }\n strong {\n color: #fff;\n font-weight: 500;\n font-size: 0.95rem;\n }\n strong[data-highlight='true'] {\n color: #D4AF37;\n font-weight: 600;\n }\n`\n\nconst Warning = styled.div`\n background: rgba(246,70,93,0.1);\n border: 1px solid rgba(246,70,93,0.3);\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1.5rem;\n p {\n margin: 0;\n color: #f6465d;\n font-size: 0.9rem;\n font-weight: 600;\n }\n small {\n display: block;\n margin-top: 0.5rem;\n color: rgba(255,255,255,0.7);\n font-size: 0.85rem;\n line-height: 1.5;\n }\n`\n\nconst Summary = styled.div`\n background: rgba(255,255,255,0.03);\n border: 1px solid rgba(255,255,255,0.08);\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1.5rem;\n color: rgba(255,255,255,0.8);\n font-size: 0.9rem;\n line-height: 1.5;\n`\n\nconst ButtonRow = styled.div`\n display: flex;\n gap: 1rem;\n justify-content: flex-end;\n button {\n padding: 0.75rem 1.5rem;\n border-radius: 8px;\n font-weight: 600;\n font-size: 0.95rem;\n cursor: pointer;\n }\n .secondary {\n background: rgba(255,255,255,0.1);\n color: rgba(255,255,255,0.8);\n border: 1px solid rgba(255,255,255,0.2);\n }\n .primary {\n background: linear-gradient(135deg, #0ecb81 0%, #0ba968 100%);\n color: #fff;\n border: none;\n box-shadow: 0 4px 12px rgba(14,203,129,0.3);\n }\n`\n","import { useEffect, useState } from 'react'\nimport styled from 'styled-components'\n\nimport { AssetSelectorBar } from './property-buy/asset-selector-bar'\nimport { OfferingProgressCard } from './property-buy/offering-progress-card'\nimport { VideoActivitySection } from './property-buy/video-activity-section'\nimport { OrderPanel } from './property-buy/order-panel'\nimport { GalleryMapSection } from './property-buy/gallery-map-section'\nimport { NewsOrdersSection } from './property-buy/news-orders-section'\nimport { OrderConfirmationModal } from './property-buy/order-confirmation-modal'\nimport { allNewsItems, STATUS_COLOR } from './property-buy/constants'\nimport type { OrderDetails, PropertySubscription, SaleData, NewsFeedItem } from './property-buy/types'\n\ntype PropertyBuyProps = {\n propertyName?: string\n propertyLocation?: string\n tokenDisplayName?: string\n tokenSymbol?: string\n isAuthenticated: boolean\n onSignIn: () => void\n saleData?: SaleData | null\n walletUsdcBalance?: number | null\n walletPropertyTokenBalance?: number | null\n onPurchase?: (tokenAmount: number) => Promise<void>\n purchaseStatus?: 'idle' | 'checking-allowance' | 'approving' | 'purchasing' | 'success' | 'error'\n purchaseError?: string | null\n onDeposit?: () => void\n initialUserSubscriptions?: PropertySubscription[]\n}\n\nexport function PropertyBuy({\n propertyName = 'Loaf Property',\n propertyLocation: propertyLocationLabel = 'Sydney, NSW',\n tokenDisplayName = 'Property Token',\n tokenSymbol = 'LOAF',\n isAuthenticated,\n onSignIn,\n saleData,\n walletUsdcBalance,\n walletPropertyTokenBalance,\n onPurchase,\n purchaseStatus = 'idle',\n purchaseError,\n onDeposit,\n initialUserSubscriptions = [],\n}: PropertyBuyProps) {\n const [sliderValue, setSliderValue] = useState(0)\n const [availableBalance, setAvailableBalance] = useState(walletUsdcBalance ?? 125000)\n const [optimisticUserSubscriptions, setOptimisticUserSubscriptions] = useState<PropertySubscription[]>([])\n const [manualOrderAmount, setManualOrderAmount] = useState<number | null>(null)\n const [ownedTokens, setOwnedTokens] = useState(0)\n const [displayedOwnedTokens, setDisplayedOwnedTokens] = useState(0)\n const [ownedTokensJustUpdated, setOwnedTokensJustUpdated] = useState(false)\n const [lastOrderQuantity, setLastOrderQuantity] = useState(0)\n const [orderPlacedSuccess, setOrderPlacedSuccess] = useState(false)\n const [lastOrderDetails, setLastOrderDetails] = useState<OrderDetails | null>(null)\n const [showOrderConfirmModal, setShowOrderConfirmModal] = useState(false)\n const [, setLiveNewsIndex] = useState(0)\n const [newsItems, setNewsItems] = useState<NewsFeedItem[]>(() =>\n allNewsItems.slice(0, 4).map((item, index) => ({\n ...item,\n displayId: `${item.id}-initial-${index}`,\n date: index === 0 ? 'Just now' : `${(index + 1) * 3} minutes ago`,\n isNew: false,\n }))\n )\n const resolvedUserSubscriptions =\n initialUserSubscriptions && initialUserSubscriptions.length > 0\n ? initialUserSubscriptions\n : optimisticUserSubscriptions\n\n useEffect(() => {\n if (initialUserSubscriptions?.length) {\n setOptimisticUserSubscriptions([])\n }\n }, [initialUserSubscriptions])\n\n const tokenPrice = saleData?.tokenPrice ?? 250\n const feeRate = (saleData?.feePercent ?? 0.5) / 100\n const totalSold = saleData?.totalSold ?? 0\n const supplyToSell = saleData?.supplyToSell ?? 50_000\n const percentSold = saleData?.percentSold ?? 0\n const offeringValuation = saleData?.offeringValuation ?? tokenPrice * supplyToSell\n const scStatus = saleData?.state?.status ?? 0\n const ipoStarted = scStatus === 1\n const statusLabel = saleData?.statusLabel ?? 'PREPARING'\n const statusColor = STATUS_COLOR[scStatus] ?? '#D4AF37'\n\n const totalSpend =\n manualOrderAmount !== null ? manualOrderAmount : Math.round((sliderValue / 100) * availableBalance)\n const grossTokens = totalSpend / tokenPrice\n const feeInTokens = grossTokens * feeRate\n const tokenQuantity = grossTokens - feeInTokens\n const orderTotal = totalSpend\n const estExposure = ((tokenQuantity / supplyToSell) * 100).toFixed(4)\n const hasInsufficientFunds = orderTotal > availableBalance\n\n // Sync availableBalance from wallet when it changes\n useEffect(() => {\n if (walletUsdcBalance != null) {\n setAvailableBalance(walletUsdcBalance)\n }\n }, [walletUsdcBalance])\n\n // Sync owned tokens from on-chain balance on load and when it changes\n useEffect(() => {\n if (walletPropertyTokenBalance != null) {\n setOwnedTokens(walletPropertyTokenBalance)\n setDisplayedOwnedTokens(walletPropertyTokenBalance)\n }\n }, [walletPropertyTokenBalance])\n\n const handleOrderButtonClick = () => {\n if (!ipoStarted || tokenQuantity === 0) {\n return\n }\n setShowOrderConfirmModal(true)\n }\n\n const isPurchaseInFlight = purchaseStatus === 'checking-allowance' || purchaseStatus === 'approving' || purchaseStatus === 'purchasing'\n\n const getOrderButtonText = () => {\n if (!isAuthenticated) return 'Sign In to Invest'\n if (purchaseStatus === 'checking-allowance') return 'Checking allowance…'\n if (purchaseStatus === 'approving') return 'Approving USDC…'\n if (purchaseStatus === 'purchasing') return 'Confirming purchase…'\n if (scStatus === 0) return 'Sale Not Open Yet'\n if (scStatus === 2) return 'Sale Completed'\n if (scStatus === 3) return 'Sale Paused'\n if (tokenQuantity === 0) return 'Enter Amount'\n return 'Place Order'\n }\n\n const isOrderButtonDisabled = () => {\n if (!isAuthenticated) return false\n if (isPurchaseInFlight) return true\n if (scStatus !== 1) return true\n if (tokenQuantity === 0) return true\n return false\n }\n\n const confirmOrder = async () => {\n setShowOrderConfirmModal(false)\n\n const tokenAmountInt = Math.floor(tokenQuantity)\n if (tokenAmountInt <= 0) return\n\n if (onPurchase) {\n try {\n await onPurchase(tokenAmountInt)\n } catch {\n return\n }\n }\n\n // Optimistic UI update (wallet balance will sync via walletUsdcBalance prop)\n if (walletUsdcBalance == null) {\n setAvailableBalance((prev) => prev - orderTotal)\n }\n\n const newTokens = ownedTokens + tokenAmountInt\n setOwnedTokens(newTokens)\n setDisplayedOwnedTokens(newTokens)\n setOwnedTokensJustUpdated(true)\n setLastOrderQuantity(tokenAmountInt)\n setTimeout(() => setOwnedTokensJustUpdated(false), 2000)\n\n const optimisticEntry: PropertySubscription = {\n propertyName,\n tokenSymbol,\n tokens: tokenAmountInt,\n value: orderTotal,\n avgPrice: tokenPrice,\n percentOfProperty: estExposure,\n timestamp: new Date().toISOString(),\n status: 'pending',\n }\n\n setOptimisticUserSubscriptions((prev) => [optimisticEntry, ...prev])\n\n setLastOrderDetails({\n tokens: tokenAmountInt,\n total: orderTotal,\n price: tokenPrice,\n orderNumber: Math.floor(10000000 + Math.random() * 90000000),\n })\n\n setOrderPlacedSuccess(true)\n setSliderValue(0)\n setManualOrderAmount(null)\n }\n\n useEffect(() => {\n const newsInterval = setInterval(() => {\n setLiveNewsIndex((prev) => {\n const nextIndex = (prev + 1) % allNewsItems.length\n setNewsItems((current) => {\n const incoming = allNewsItems[nextIndex]\n if (current.some((item) => item.id === incoming.id)) {\n return current\n }\n return [\n { ...incoming, displayId: `${incoming.id}-${Date.now()}`, date: 'Just now', isNew: true },\n ...current.slice(0, 3).map((item) => ({\n ...item,\n isNew: false,\n date: item.date === 'Just now' ? '8 seconds ago' : item.date,\n })),\n ]\n })\n return nextIndex\n })\n }, 8000)\n\n return () => clearInterval(newsInterval)\n }, [])\n\n if (saleData?.loading) {\n return <div className=\"py-16 px-8 text-[var(--color-text-secondary)] text-center text-[0.9rem]\">Loading sale data...</div>\n }\n\n return (\n <div className=\"flex flex-col gap-6 w-full\">\n <HeroGrid>\n <div className=\"asset-selector-wrapper\">\n <AssetSelectorBar\n propertyName={propertyName}\n tokenPrice={tokenPrice}\n offeringValuation={offeringValuation}\n />\n </div>\n <OfferingProgressCard\n ipoStarted={ipoStarted}\n statusLabel={statusLabel}\n statusColor={statusColor}\n scStatus={scStatus}\n tokenPrice={tokenPrice}\n offeringValuation={offeringValuation}\n percentSold={percentSold}\n totalSold={totalSold}\n supplyToSell={supplyToSell}\n />\n <VideoActivitySection ipoStarted={ipoStarted} />\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <OrderPanel\n statusLabel={statusLabel}\n statusColor={statusColor}\n ipoStarted={ipoStarted}\n tokenDisplayName={tokenDisplayName}\n tokenSymbol={tokenSymbol}\n isAuthenticated={isAuthenticated}\n tokenPrice={tokenPrice}\n feeRate={feeRate}\n supplyToSell={supplyToSell}\n availableBalance={availableBalance}\n displayedOwnedTokens={displayedOwnedTokens}\n ownedTokensJustUpdated={ownedTokensJustUpdated}\n lastOrderQuantity={lastOrderQuantity}\n orderPlacedSuccess={orderPlacedSuccess}\n lastOrderDetails={lastOrderDetails}\n tokenQuantity={tokenQuantity}\n feeInTokens={feeInTokens}\n orderTotal={orderTotal}\n sliderValue={sliderValue}\n manualOrderAmount={manualOrderAmount}\n setSliderValue={setSliderValue}\n setManualOrderAmount={setManualOrderAmount}\n onSignInClick={onSignIn}\n onOrderButtonClick={handleOrderButtonClick}\n orderButtonText={getOrderButtonText()}\n isOrderButtonDisabled={isOrderButtonDisabled()}\n hasInsufficientFunds={hasInsufficientFunds}\n onPlaceAnotherOrder={() => setOrderPlacedSuccess(false)}\n onDeposit={onDeposit}\n />\n {purchaseError && (\n <div style={{ marginTop: '0.75rem', padding: '0.75rem 1rem', borderRadius: '8px', background: 'rgba(246,70,93,0.1)', border: '1px solid rgba(246,70,93,0.3)', color: '#f6465d', fontSize: '0.8rem', fontWeight: 500 }}>\n {purchaseError}\n </div>\n )}\n </div>\n </HeroGrid>\n\n <div className=\"flex flex-col gap-6\">\n <GalleryMapSection propertyLocation={propertyLocationLabel} />\n <NewsOrdersSection\n newsItems={newsItems}\n userSubscriptions={resolvedUserSubscriptions}\n tokenPrice={tokenPrice}\n />\n </div>\n\n <OrderConfirmationModal\n open={showOrderConfirmModal}\n onClose={() => setShowOrderConfirmModal(false)}\n hasInsufficientFunds={hasInsufficientFunds}\n tokenQuantity={tokenQuantity}\n tokenPrice={tokenPrice}\n propertyName={propertyName}\n estExposure={estExposure}\n orderTotal={orderTotal}\n availableBalance={availableBalance}\n onConfirm={confirmOrder}\n />\n </div>\n )\n}\n\nconst HeroGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr auto;\n grid-template-rows: auto auto minmax(450px, 520px);\n gap: 1.5rem;\n width: 100%;\n max-width: 1800px;\n margin: 0 auto;\n\n & > div:nth-child(1) {\n grid-column: 1 / 2;\n grid-row: 1 / 2;\n }\n\n & > div:nth-child(2) {\n grid-column: 1 / 2;\n grid-row: 2 / 3;\n }\n\n & > div:nth-child(3) {\n grid-column: 1 / 2;\n grid-row: 3 / 4;\n }\n\n & > div:nth-child(4) {\n grid-column: 2 / 3;\n grid-row: 1 / 4;\n display: flex;\n flex-direction: column;\n }\n\n @media (max-width: 1024px) {\n grid-template-columns: 1fr;\n grid-template-rows: auto;\n gap: 1rem;\n\n & > div:nth-child(1) {\n display: none;\n }\n\n & > div:nth-child(2) {\n grid-column: 1 / -1;\n order: 1;\n }\n\n & > div:nth-child(4) {\n grid-column: 1 / -1;\n order: 2;\n }\n\n & > div:nth-child(3) {\n grid-column: 1 / -1;\n order: 3;\n }\n }\n`\n\n","import { useState } from 'react'\nimport styled from 'styled-components'\nimport { BiCoin, BiWallet, BiCreditCard, BiX } from 'react-icons/bi'\nimport { FaBitcoin } from 'react-icons/fa'\n\nconst PaymentOption = styled.div<{ $isSelected: boolean }>`\n display: flex;\n align-items: center;\n padding: 1rem;\n margin: 0.5rem 0;\n border-radius: 8px;\n background: ${(props) => (props.$isSelected ? 'rgba(0, 123, 255, 0.1)' : 'transparent')};\n border: 1px solid\n ${(props) => (props.$isSelected ? '#007bff' : 'rgba(255, 255, 255, 0.2)')};\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: rgba(0, 123, 255, 0.05);\n border-color: rgba(0, 123, 255, 0.5);\n }\n`\n\nconst RadioIndicator = styled.div<{ $isSelected: boolean }>`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 2px solid ${(props) => (props.$isSelected ? '#007bff' : 'rgba(255, 255, 255, 0.5)')};\n margin-left: 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &::after {\n content: '';\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: #007bff;\n opacity: ${(props) => (props.$isSelected ? 1 : 0)};\n transition: opacity 0.2s;\n }\n`\n\nconst PaymentMethodDetails = styled.div`\n background: rgba(0, 0, 0, 0.2);\n border-radius: 8px;\n padding: 1rem;\n margin-top: 0.5rem;\n margin-bottom: 1rem;\n animation: expandIn 0.3s ease-out;\n\n @keyframes expandIn {\n from {\n max-height: 0;\n opacity: 0;\n }\n to {\n max-height: 500px;\n opacity: 1;\n }\n }\n`\n\nconst ConfirmButton = styled.button<{ disabled?: boolean }>`\n background: ${(props) =>\n props.disabled ? 'rgba(255, 255, 255, 0.1)' : 'linear-gradient(to right, #d4af37, #f2d35b)'};\n border: none;\n border-radius: 8px;\n padding: 0.75rem 1.5rem;\n color: ${(props) => (props.disabled ? 'rgba(255, 255, 255, 0.5)' : '#000')};\n font-size: 1rem;\n font-weight: 600;\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n transition: all 0.2s;\n\n &:hover {\n background: ${(props) =>\n props.disabled ? 'rgba(255, 255, 255, 0.1)' : 'linear-gradient(to right, #f2d35b, #d4af37)'};\n transform: ${(props) => (props.disabled ? 'none' : 'translateY(-2px)')};\n }\n`\n\nexport type PaymentPopupProps = {\n isOpen: boolean\n onClose: () => void\n onConfirm: (method: string) => void\n selectedDates: Date[]\n totalCost: number\n isOwnerRate: boolean\n tokenPrice: number\n ownerRate: number\n marketRate: number\n userTokenHoldings: number\n propertyName: string\n}\n\nexport function PaymentPopup({\n isOpen,\n onClose,\n onConfirm,\n selectedDates,\n totalCost,\n isOwnerRate,\n tokenPrice,\n ownerRate,\n marketRate,\n userTokenHoldings,\n propertyName,\n}: PaymentPopupProps) {\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<'tokens' | 'deposit' | 'fiat' | 'crypto'>(\n 'tokens',\n )\n\n if (!isOpen) return null\n\n const startDate = selectedDates[0] ? new Date(selectedDates[0]) : new Date()\n const endDate = selectedDates[1] ? new Date(selectedDates[1]) : new Date()\n const nights = Math.max(1, Math.round((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)))\n\n const formatDate = (date: Date) =>\n new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n\n return (\n <div className=\"fixed inset-0 bg-black/70 flex justify-center items-center z-[1000]\">\n <div\n className=\"rounded-xl p-8 w-[90%] max-w-[500px] max-h-[90vh] overflow-y-auto border border-[rgba(212,175,55,0.3)] text-white\"\n style={{ background: 'linear-gradient(to right, #111, #1a1a1a)', animation: 'slideIn 0.3s ease-out' }}\n >\n <style>{`@keyframes slideIn { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }`}</style>\n <div className=\"flex justify-between items-center mb-6\">\n <h3 className=\"text-2xl m-0 text-white\">Complete Your Reservation</h3>\n <button onClick={onClose} className=\"bg-transparent border-none text-white/70 text-2xl cursor-pointer flex items-center justify-center p-1 transition-colors duration-200 hover:text-white\">\n <BiX />\n </button>\n </div>\n\n <div className=\"bg-black/20 rounded-lg p-4 mb-6\">\n <div className=\"flex justify-between mb-3\"><span>Property</span><span>{propertyName}</span></div>\n <div className=\"flex justify-between mb-3\"><span>Dates</span><span>{formatDate(startDate)} - {formatDate(endDate)}</span></div>\n <div className=\"flex justify-between mb-3\"><span>Nights</span><span>{nights}</span></div>\n <div className=\"flex justify-between mb-3\">\n <span>Rate per night</span>\n <span>{isOwnerRate ? `${ownerRate.toFixed(4)} tokens (~$${(ownerRate * tokenPrice).toFixed(2)})` : `${marketRate.toFixed(4)} tokens (~$${(marketRate * tokenPrice).toFixed(2)})`}</span>\n </div>\n <div className=\"flex justify-between pt-3 border-t border-white/10 font-semibold\">\n <span>Total</span>\n <span>{totalCost.toFixed(4)} tokens (~${(totalCost * tokenPrice).toFixed(2)})</span>\n </div>\n </div>\n\n <h4 className=\"text-[1.2rem] m-0 mb-4 text-white\">Select Payment Method</h4>\n\n <PaymentOption $isSelected={selectedPaymentMethod === 'tokens'} onClick={() => setSelectedPaymentMethod('tokens')}>\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#d4af37' }}><BiCoin size={24} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Loaf Tokens</div><div className=\"text-[0.85rem] text-white/70\">Pay with your Loaf token balance</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'tokens'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'tokens' && (\n <PaymentMethodDetails>\n <div>Available balance: {userTokenHoldings.toFixed(4)} tokens</div>\n {userTokenHoldings < totalCost && (\n <div className=\"text-[#ff4d4d] mt-2\">Insufficient balance. Please select another payment method.</div>\n )}\n </PaymentMethodDetails>\n )}\n\n <PaymentOption\n $isSelected={selectedPaymentMethod === 'deposit'}\n onClick={() => setSelectedPaymentMethod('deposit')}\n >\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#4dabf7' }}><BiWallet size={24} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Platform Deposit</div><div className=\"text-[0.85rem] text-white/70\">Use your available platform balance</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'deposit'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'deposit' && (\n <PaymentMethodDetails>\n <div>Available balance: $1,500.00</div>\n </PaymentMethodDetails>\n )}\n\n <PaymentOption $isSelected={selectedPaymentMethod === 'fiat'} onClick={() => setSelectedPaymentMethod('fiat')}>\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#82c91e' }}><BiCreditCard size={24} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Credit/Debit Card</div><div className=\"text-[0.85rem] text-white/70\">Pay with your credit or debit card</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'fiat'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'fiat' && (\n <PaymentMethodDetails>\n <div>Select a saved card or enter new card details</div>\n <div style={{ marginTop: '0.5rem' }}>\n <select\n style={{\n background: 'rgba(0, 0, 0, 0.3)',\n color: '#fff',\n padding: '0.5rem',\n borderRadius: '4px',\n border: '1px solid rgba(255, 255, 255, 0.2)',\n width: '100%',\n }}\n >\n <option value=\"\">Select a card</option>\n <option value=\"visa\">Visa ending in 4242</option>\n <option value=\"mastercard\">Mastercard ending in 5555</option>\n <option value=\"new\">+ Add new card</option>\n </select>\n </div>\n </PaymentMethodDetails>\n )}\n\n <PaymentOption\n $isSelected={selectedPaymentMethod === 'crypto'}\n onClick={() => setSelectedPaymentMethod('crypto')}\n >\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#f08c00' }}><FaBitcoin size={20} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Cryptocurrency</div><div className=\"text-[0.85rem] text-white/70\">Pay with Bitcoin, Ethereum, or other cryptocurrencies</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'crypto'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'crypto' && (\n <PaymentMethodDetails>\n <div>Select cryptocurrency:</div>\n <div style={{ marginTop: '0.5rem' }}>\n <select\n style={{\n background: 'rgba(0, 0, 0, 0.3)',\n color: '#fff',\n padding: '0.5rem',\n borderRadius: '4px',\n border: '1px solid rgba(255, 255, 255, 0.2)',\n width: '100%',\n }}\n >\n <option value=\"btc\">Bitcoin (BTC)</option>\n <option value=\"eth\">Ethereum (ETH)</option>\n <option value=\"usdc\">USD Coin (USDC)</option>\n <option value=\"usdt\">Tether (USDT)</option>\n </select>\n </div>\n </PaymentMethodDetails>\n )}\n\n <div className=\"flex justify-between mt-8\">\n <button\n onClick={onClose}\n className=\"bg-transparent text-white/80 border border-white/30 rounded-lg px-6 py-3 text-base cursor-pointer transition-all duration-200 hover:bg-white/[0.05] hover:text-white\"\n >Back to Booking</button>\n <ConfirmButton\n onClick={() => onConfirm(selectedPaymentMethod)}\n disabled={selectedPaymentMethod === 'tokens' && userTokenHoldings < totalCost}\n >\n Confirm Payment\n </ConfirmButton>\n </div>\n </div>\n </div>\n )\n}\n\nexport default PaymentPopup\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport styled from 'styled-components'\nimport {\n BiCalendar,\n BiChevronDown,\n BiInfoCircle,\n BiPencil,\n BiX,\n} from 'react-icons/bi'\nimport PaymentPopup from './payment-popup'\n\ntype ReservationColor = { bg: string; border: string };\nconst SUMMER_MONTHS = new Set([11, 0, 1]); // Dec, Jan, Feb\n\ntype ReservationRange = {\n arrival: Date;\n departure: Date;\n nights: number;\n tokens: number;\n tokensPerDay: number;\n dailyRate: number;\n totalCost: number;\n tokenPriceAtBooking: number;\n color: ReservationColor;\n};\n\ntype CalendarDay = {\n date: Date;\n isCurrentMonth: boolean;\n isAvailable: boolean;\n isToday?: boolean;\n};\n\nexport type OwnerBookingProps = {\n propertyName?: string | null\n token: { price?: number | null }\n}\n\nconst OwnerBooking = ({ propertyName, token }: OwnerBookingProps) => {\n const today = useMemo(() => {\n const base = new Date();\n base.setHours(0, 0, 0, 0);\n return base;\n }, []);\n\n const [currentYear, setCurrentYear] = useState(today.getFullYear());\n const [currentMonth, setCurrentMonth] = useState(today.getMonth());\n const [dateRanges, setDateRanges] = useState<ReservationRange[]>([]);\n const [selectedDates, setSelectedDates] = useState<Date[]>([]);\n const [hoverDate, setHoverDate] = useState<Date | null>(null);\n const [isDateSelectorOpen, setIsDateSelectorOpen] = useState(false);\n const [selectorYear, setSelectorYear] = useState(today.getFullYear());\n const [isPaymentPopupOpen, setIsPaymentPopupOpen] = useState(false);\n const dateSelectorRef = useRef<HTMLDivElement | null>(null);\n\n const tokenPrice = token.price ?? 700;\n const userTokenHoldings = 2.2;\n\n const MIN_NIGHTS = 3;\n\n const reservationColors: ReservationColor[] = [\n { bg: 'rgba(212, 175, 55, 0.25)', border: 'rgba(212, 175, 55, 0.6)' },\n { bg: 'rgba(86, 180, 235, 0.25)', border: 'rgba(86, 180, 235, 0.6)' },\n { bg: 'rgba(230, 126, 34, 0.25)', border: 'rgba(230, 126, 34, 0.6)' },\n { bg: 'rgba(46, 204, 113, 0.25)', border: 'rgba(46, 204, 113, 0.6)' },\n ];\n\n // ─── Rate Helpers ────────────────────────────────────────────────\n const calculateTokensPerDayOwner = useCallback(() => {\n if (tokenPrice <= 0) return 0;\n const target = 650;\n const raw = target / tokenPrice;\n return Math.ceil(raw * 10000) / 10000;\n }, [tokenPrice]);\n\n const calculateTokensPerDayMarket = useCallback(() => {\n if (tokenPrice <= 0) return 0;\n const target = 900;\n const raw = target / tokenPrice;\n return Math.ceil(raw * 10000) / 10000;\n }, [tokenPrice]);\n\n const qualifiesForOwnerRate = userTokenHoldings >= 0.1;\n const getTokensPerDay = useCallback(\n () => (qualifiesForOwnerRate ? calculateTokensPerDayOwner() : calculateTokensPerDayMarket()),\n [qualifiesForOwnerRate, calculateTokensPerDayOwner, calculateTokensPerDayMarket],\n );\n\n const getRateLabel = () => (qualifiesForOwnerRate ? \"Owner's Rate\" : 'Market Rate');\n\n // ─── Selection Stats ─────────────────────────────────────────────\n const selectionStats = useMemo(() => {\n if (selectedDates.length !== 2) return null;\n\n const [a, b] = selectedDates;\n const start = a < b ? a : b;\n const end = a < b ? b : a;\n const nights = Math.ceil((end.getTime() - start.getTime()) / 86400000);\n const tokensPerDay = getTokensPerDay();\n const tokens = nights * tokensPerDay;\n const usd = tokens * tokenPrice;\n\n return { nights, tokensPerDay, tokens, usd, start, end };\n }, [selectedDates, getTokensPerDay, tokenPrice]);\n\n const totalNights = useMemo(() => dateRanges.reduce((sum, r) => sum + r.nights, 0), [dateRanges]);\n const totalTokens = useMemo(() => dateRanges.reduce((sum, r) => sum + r.tokens, 0), [dateRanges]);\n const totalUSD = totalTokens * tokenPrice;\n\n // ─── Calendar Days ───────────────────────────────────────────────\n const generateCalendarDays = useCallback(\n (year: number, month: number): CalendarDay[] => {\n const first = new Date(year, month, 1);\n const last = new Date(year, month + 1, 0);\n const startDOW = first.getDay();\n\n const days: CalendarDay[] = [];\n\n // Prev month filler\n const prevLast = new Date(year, month, 0).getDate();\n for (let i = startDOW - 1; i >= 0; i--) {\n const d = new Date(year, month - 1, prevLast - i);\n days.push({ date: d, isCurrentMonth: false, isAvailable: false });\n }\n\n // Current month\n for (let d = 1; d <= last.getDate(); d++) {\n const date = new Date(year, month, d);\n const isAvailable = SUMMER_MONTHS.has(month) || date >= today;\n days.push({\n date,\n isCurrentMonth: true,\n isAvailable,\n isToday: date.toDateString() === today.toDateString(),\n });\n }\n\n // Next month filler → fill up to 6 weeks\n while (days.length < 42) {\n const next = new Date(year, month + 1, days.length - (last.getDate() + startDOW) + 1);\n days.push({ date: next, isCurrentMonth: false, isAvailable: false });\n }\n\n return days;\n },\n [today],\n );\n\n const calendarDays = useMemo(\n () => generateCalendarDays(currentYear, currentMonth),\n [currentYear, currentMonth, generateCalendarDays],\n );\n\n const isDateReserved = useCallback(\n (date: Date) => dateRanges.some((r) => date >= r.arrival && date <= r.departure),\n [dateRanges],\n );\n\n const handleDateClick = (day: CalendarDay) => {\n if (!day.isCurrentMonth || !day.isAvailable || isDateReserved(day.date)) return;\n\n if (selectedDates.length === 0 || selectedDates.length === 2) {\n setSelectedDates([day.date]);\n return;\n }\n\n const [first] = selectedDates;\n const start = new Date(Math.min(first.getTime(), day.date.getTime()));\n const end = new Date(Math.max(first.getTime(), day.date.getTime()));\n\n const cur = new Date(start);\n while (cur <= end) {\n if (isDateReserved(cur)) return;\n cur.setDate(cur.getDate() + 1);\n }\n\n setSelectedDates([start, end]);\n setHoverDate(null);\n };\n\n const handleDayHover = (day: CalendarDay) => {\n if (selectedDates.length === 1 && day.isCurrentMonth && day.isAvailable && !isDateReserved(day.date)) {\n setHoverDate(day.date);\n }\n };\n\n const handleMouseLeave = () => setHoverDate(null);\n\n const isInHoverRange = (date: Date) => {\n if (selectedDates.length !== 1 || !hoverDate) return false;\n const [anchor] = selectedDates;\n const left = anchor < hoverDate ? anchor : hoverDate;\n const right = anchor < hoverDate ? hoverDate : anchor;\n return date >= left && date <= right;\n };\n\n const isInSelectedRange = (date: Date) => {\n if (selectedDates.length !== 2) return false;\n const [a, b] = selectedDates;\n const left = a < b ? a : b;\n const right = a < b ? b : a;\n return date >= left && date <= right;\n };\n\n const getSavedRangeInfo = (date: Date) => {\n for (let i = 0; i < dateRanges.length; i++) {\n const r = dateRanges[i];\n if (date >= r.arrival && date <= r.departure) {\n return { found: true, color: r.color, index: i + 1 };\n }\n }\n return { found: false } as const;\n };\n\n const addDateRange = () => {\n if (!selectionStats) return;\n if (selectionStats.nights < MIN_NIGHTS) {\n alert(`Minimum stay is ${MIN_NIGHTS} nights`);\n return;\n }\n\n const color = reservationColors[dateRanges.length % reservationColors.length];\n\n const newRange: ReservationRange = {\n arrival: selectionStats.start,\n departure: selectionStats.end,\n nights: selectionStats.nights,\n tokens: selectionStats.tokens,\n tokensPerDay: selectionStats.tokensPerDay,\n dailyRate: selectionStats.tokensPerDay * tokenPrice,\n totalCost: selectionStats.usd,\n tokenPriceAtBooking: tokenPrice,\n color,\n };\n\n setDateRanges((prev) => [...prev, newRange].sort((a, b) => a.arrival.getTime() - b.arrival.getTime()));\n setSelectedDates([]);\n };\n\n const removeDateRange = (index: number) => {\n setDateRanges((prev) => prev.filter((_, i) => i !== index));\n };\n\n const editDateRange = (index: number) => {\n const range = dateRanges[index];\n setSelectedDates([range.arrival, range.departure]);\n removeDateRange(index);\n };\n\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ] as const;\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const;\n\n const setMonthYear = useCallback(\n (month: number, year: number) => {\n setCurrentMonth(month);\n setCurrentYear(year);\n },\n [setCurrentMonth, setCurrentYear],\n );\n\n const shiftMonth = useCallback(\n (direction: 'prev' | 'next') => {\n const delta = direction === 'prev' ? -1 : 1;\n let newMonth = currentMonth + delta;\n let newYear = currentYear;\n\n if (newMonth < 0) {\n newMonth = 11;\n newYear -= 1;\n } else if (newMonth > 11) {\n newMonth = 0;\n newYear += 1;\n }\n\n setMonthYear(newMonth, newYear);\n setSelectorYear(newYear);\n },\n [currentMonth, currentYear, setMonthYear],\n );\n\n const jumpToNextAvailable = useCallback(() => {\n for (let offset = 1; offset <= 12; offset++) {\n const candidateMonth = (currentMonth + offset) % 12;\n if (!SUMMER_MONTHS.has(candidateMonth)) continue;\n\n const yearIncrement = Math.floor((currentMonth + offset) / 12);\n const targetYear = currentYear + yearIncrement;\n setMonthYear(candidateMonth, targetYear);\n setSelectorYear(targetYear);\n return;\n }\n }, [currentMonth, currentYear, setMonthYear]);\n\n const toggleDateSelector = () => setIsDateSelectorOpen((prev) => !prev);\n const changeYear = (increment: number) => setSelectorYear((year) => year + increment);\n const handleMonthYearSelect = (month: number) => {\n setMonthYear(month, selectorYear);\n setIsDateSelectorOpen(false);\n };\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dateSelectorRef.current && !dateSelectorRef.current.contains(event.target as Node)) {\n setIsDateSelectorOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const primaryReservation = dateRanges[0];\n\n return (\n <div className=\"flex flex-col gap-8 text-white max-w-[1200px] mx-auto px-4 py-8 pb-12\">\n <section className=\"bg-[#050505] border border-[rgba(212,175,55,0.35)] rounded-3xl p-10 shadow-[0_25px_60px_rgba(0,0,0,0.45)] md:p-7\">\n <h1 className=\"text-[clamp(2rem,4vw,2.75rem)] font-semibold text-white mb-8\">Reserve Your Stay</h1>\n\n <div className=\"grid gap-8\" style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))' }}>\n <div className=\"bg-white/[0.04] border border-[rgba(212,175,55,0.2)] rounded-[18px] p-7\">\n <h2 className=\"text-base tracking-[0.08em] uppercase text-[rgba(212,175,55,0.9)] text-center mb-5\">Residence Calendar</h2>\n <div className=\"flex justify-between items-center gap-4 mb-5 flex-wrap\">\n <h3 className=\"text-[1.35rem] font-medium flex items-center gap-1\">\n <BiCalendar size={20} />\n <div className=\"relative inline-block\" ref={dateSelectorRef}>\n <button\n onClick={toggleDateSelector}\n className=\"bg-none border-none text-white text-[1.15rem] flex items-center gap-[0.35rem] cursor-pointer px-2 py-1 rounded-md transition-all duration-200 hover:text-[#f2d35b] hover:bg-white/[0.05]\"\n >\n {monthNames[currentMonth]} {currentYear}\n <BiChevronDown size={16} />\n </button>\n\n <DateSelectorDropdown $isOpen={isDateSelectorOpen}>\n <div className=\"p-3\">\n <div className=\"flex justify-between items-center mb-[0.6rem]\">\n <button onClick={() => changeYear(-1)} className=\"bg-none border-none text-[#d4af37] text-[1.1rem] cursor-pointer px-2 py-1 transition-colors duration-200 hover:text-[#f2d35b]\">&lt;</button>\n <span className=\"text-white text-base\">{selectorYear}</span>\n <button onClick={() => changeYear(1)} className=\"bg-none border-none text-[#d4af37] text-[1.1rem] cursor-pointer px-2 py-1 transition-colors duration-200 hover:text-[#f2d35b]\">&gt;</button>\n </div>\n\n <h4 className=\"m-0 mt-[0.65rem] mb-[0.4rem] text-[0.85rem] uppercase tracking-[0.08em] text-[rgba(212,175,55,0.9)]\">Select Month</h4>\n <div className=\"grid grid-cols-3 gap-2\">\n {monthNames.map((month, index) => (\n <MonthButton\n key={month}\n $isSelected={currentMonth === index && currentYear === selectorYear}\n onClick={() => handleMonthYearSelect(index)}\n >\n {month.substring(0, 3)}\n </MonthButton>\n ))}\n </div>\n </div>\n </DateSelectorDropdown>\n </div>\n </h3>\n <div className=\"flex gap-2 items-center flex-wrap\">\n <button onClick={() => shiftMonth('prev')} className=\"bg-[rgba(212,175,55,0.15)] border-none rounded-md text-[#d4af37] w-8 h-8 flex items-center justify-center cursor-pointer transition-colors duration-200 hover:bg-[rgba(212,175,55,0.3)]\">&lt;</button>\n <button onClick={() => shiftMonth('next')} className=\"bg-[rgba(212,175,55,0.15)] border-none rounded-md text-[#d4af37] w-8 h-8 flex items-center justify-center cursor-pointer transition-colors duration-200 hover:bg-[rgba(212,175,55,0.3)]\">&gt;</button>\n <button onClick={jumpToNextAvailable} className=\"bg-[rgba(212,175,55,0.18)] border border-[rgba(212,175,55,0.4)] rounded-md text-[#f2d35b] px-3 py-[0.35rem] text-[0.85rem] cursor-pointer whitespace-nowrap transition-all duration-200 hover:bg-[rgba(212,175,55,0.3)]\">Next Available Date</button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-7 gap-[0.45rem]\" onMouseLeave={handleMouseLeave}>\n {dayNames.map((day) => (\n <div key={day} className=\"text-center text-[0.8rem] text-white/55 py-[0.35rem]\">{day}</div>\n ))}\n\n {calendarDays.map((day, index) => {\n const savedRangeInfo = day.isAvailable && day.isCurrentMonth ? getSavedRangeInfo(day.date) : { found: false as const };\n const isSelected = selectedDates.some((date) => date.toDateString() === day.date.toDateString());\n const inSelectedRange = day.isAvailable && day.isCurrentMonth && isInSelectedRange(day.date);\n const inHoverRange = day.isAvailable && day.isCurrentMonth && isInHoverRange(day.date);\n\n return (\n <DayCell\n key={index}\n $isAvailable={day.isAvailable}\n $isCurrentMonth={day.isCurrentMonth}\n $isToday={day.isToday}\n $isSelected={isSelected}\n $isInSelectedRange={inSelectedRange}\n $savedRangeColor={savedRangeInfo.found ? savedRangeInfo.color : null}\n $isInHoverRange={inHoverRange}\n onClick={() => handleDateClick(day)}\n onMouseEnter={() => handleDayHover(day)}\n >\n {day.date.getDate()}\n {savedRangeInfo.found && (\n <span className=\"absolute top-[2px] right-1 text-[0.55rem] font-bold text-[#f4d07f]\">{savedRangeInfo.index}</span>\n )}\n </DayCell>\n );\n })}\n </div>\n\n {selectedDates.length > 0 && (\n <div className=\"flex items-center gap-4 bg-white/[0.03] border border-white/[0.08] rounded-[10px] p-4 mt-5 mb-2\">\n <div className=\"flex-1 text-center\">\n <div className=\"text-[0.75rem] tracking-[0.08em] uppercase text-white/55 mb-1\">Arrival</div>\n <div className=\"text-[1.1rem] font-semibold\">{selectedDates[0].toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}</div>\n </div>\n <span>→</span>\n <div className=\"flex-1 text-center\">\n <div className=\"text-[0.75rem] tracking-[0.08em] uppercase text-white/55 mb-1\">Departure</div>\n <div className=\"text-[1.1rem] font-semibold\">{selectedDates[selectedDates.length - 1].toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}</div>\n </div>\n </div>\n )}\n\n <div className=\"flex gap-3 mt-6 flex-wrap\">\n {(selectedDates.length === 2 || dateRanges.length > 0) && (\n <AddDateRangeButton\n onClick={addDateRange}\n disabled={!selectionStats || selectionStats.nights < MIN_NIGHTS}\n >\n {dateRanges.length === 0 ? 'Add Date Range' : 'Add Another Date Range'}\n </AddDateRangeButton>\n )}\n\n {selectedDates.length === 2 && (\n <ConfirmButton\n onClick={addDateRange}\n disabled={!selectionStats || selectionStats.nights < MIN_NIGHTS}\n >\n Confirm\n </ConfirmButton>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-6\">\n <div className=\"bg-black/35 rounded-2xl p-6 border border-[rgba(212,175,55,0.2)]\">\n <h3 className=\"text-[1.3rem] font-semibold mb-4\">Reservation Summary</h3>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Property</div>\n <div className=\"text-[0.95rem] font-medium text-right\">{propertyName ?? '—'}</div>\n </div>\n\n {selectionStats && (\n <>\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Current Selection</div>\n <div className=\"text-[0.95rem] font-medium text-right\">\n {selectionStats.start.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })} - {selectionStats.end.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })}\n </div>\n </div>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Nights</div>\n <div className=\"text-[0.95rem] font-medium text-right\">{selectionStats.nights}</div>\n </div>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Market Rate per Night</div>\n <div className=\"text-[0.95rem] font-medium text-right\">\n {calculateTokensPerDayMarket().toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${(calculateTokensPerDayMarket() * tokenPrice).toFixed(2)}</div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 flex flex-col gap-1\">\n <span className=\"flex items-center\">\n Owner&apos;s Rate per Night\n <span className=\"relative inline-flex items-center ml-[0.35rem] cursor-help group\">\n <BiInfoCircle size={16} color=\"rgba(212,175,55,0.8)\" />\n <div className=\"absolute bottom-[120%] left-1/2 -translate-x-1/2 bg-black/92 border border-[rgba(212,175,55,0.4)] rounded-[10px] px-4 py-3 text-[0.8rem] leading-[1.4] w-[240px] opacity-0 invisible transition-all duration-200 text-white/90 z-[15] group-hover:opacity-100 group-hover:visible group-hover:-translate-y-[6px] group-hover:-translate-x-1/2\">\n Owners hold ≥0.1 Elara in the property and qualify for discounted nightly rates.\n </div>\n </span>\n </span>\n <span className=\"text-[0.75rem] text-[rgba(212,175,55,0.9)]\">Your Holdings: {userTokenHoldings.toFixed(2)} Elara</span>\n </div>\n <div className=\"text-[0.95rem] font-medium text-right\">\n {selectionStats.tokensPerDay.toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${(selectionStats.tokensPerDay * tokenPrice).toFixed(2)}</div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-start border-t border-white/15 mt-3 pt-4 gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 font-semibold\">Selection Total ({getRateLabel()})</div>\n <div className=\"text-[1.05rem] font-semibold text-right\">\n {selectionStats.tokens.toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${selectionStats.usd.toFixed(2)}</div>\n </div>\n </div>\n </>\n )}\n\n {dateRanges.length > 0 && (\n <>\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Reservations</div>\n <div className=\"text-[0.95rem] font-medium text-right\">{dateRanges.length}</div>\n </div>\n\n {dateRanges.map((range, index) => (\n <ReservationCard key={`${range.arrival.toISOString()}-${index}`} $accent={range.color.border}>\n <div className=\"flex justify-between items-center mb-3\">\n <div className=\"font-semibold text-[0.95rem]\">Reservation {index + 1}</div>\n <div className=\"flex gap-[0.35rem]\">\n <ActionButton onClick={() => editDateRange(index)}>\n <BiPencil size={16} />\n </ActionButton>\n <ActionButton $variant=\"danger\" onClick={() => removeDateRange(index)}>\n <BiX size={18} />\n </ActionButton>\n </div>\n </div>\n\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex-1\">\n <div className=\"text-[0.75rem] text-white/60 mb-[0.15rem]\">Arrival</div>\n <div className=\"font-medium\">{range.arrival.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })}</div>\n </div>\n <div className=\"text-white/40\">→</div>\n <div className=\"flex-1\">\n <div className=\"text-[0.75rem] text-white/60 mb-[0.15rem]\">Departure</div>\n <div className=\"font-medium\">{range.departure.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })}</div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-center border-t border-white/[0.08] pt-[0.65rem]\">\n <div className=\"text-[0.85rem] text-white/70\">{range.nights} nights</div>\n <div className=\"text-right\">\n <div className=\"text-[0.95rem] font-semibold text-[#d4af37]\">{range.tokens.toFixed(4)} Elara</div>\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${range.totalCost.toFixed(2)}</div>\n </div>\n </div>\n </ReservationCard>\n ))}\n\n <div className=\"flex justify-between items-start border-t border-white/15 mt-3 pt-4 gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 font-semibold\">Total Stay</div>\n <div className=\"text-[1.05rem] font-semibold text-right\">{totalNights} {totalNights === 1 ? 'night' : 'nights'}</div>\n </div>\n\n <div className=\"flex justify-between items-start border-t border-white/15 mt-3 pt-4 gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 font-semibold\">Total Cost ({getRateLabel()})</div>\n <div className=\"text-[1.05rem] font-semibold text-right\">\n {totalTokens.toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${totalUSD.toFixed(2)}</div>\n </div>\n </div>\n </>\n )}\n </div>\n\n {dateRanges.length > 0 && (\n <button\n onClick={() => setIsPaymentPopupOpen(true)}\n className=\"mt-2 w-full border-none rounded-xl p-4 text-base font-semibold text-black cursor-pointer transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_12px_30px_rgba(212,175,55,0.3)]\"\n style={{ background: 'linear-gradient(90deg, #d4af37, #f2d35b)' }}\n >Confirm Reservation</button>\n )}\n </div>\n </div>\n </section>\n\n {isPaymentPopupOpen && primaryReservation && (\n <PaymentPopup\n isOpen={isPaymentPopupOpen}\n onClose={() => setIsPaymentPopupOpen(false)}\n onConfirm={() => setIsPaymentPopupOpen(false)}\n selectedDates={[primaryReservation.arrival, primaryReservation.departure]}\n totalCost={primaryReservation.tokens}\n isOwnerRate={qualifiesForOwnerRate}\n tokenPrice={tokenPrice}\n ownerRate={calculateTokensPerDayOwner()}\n marketRate={calculateTokensPerDayMarket()}\n userTokenHoldings={userTokenHoldings}\n propertyName={propertyName ?? 'Property'}\n />\n )}\n </div>\n );\n};\n\nexport default OwnerBooking;\n\n// ─── Styled Components (kept for dynamic/complex styling) ────────────────────────────────────────────────\n\nconst DateSelectorDropdown = styled.div<{ $isOpen: boolean }>`\n position: absolute;\n top: calc(100% + 0.5rem);\n left: 0;\n background: #111;\n border: 1px solid rgba(212, 175, 55, 0.4);\n border-radius: 10px;\n width: 240px;\n max-height: 320px;\n overflow: hidden;\n box-shadow: 0 20px 35px rgba(0, 0, 0, 0.45);\n display: ${({ $isOpen }) => ($isOpen ? 'block' : 'none')};\n z-index: 10;\n`;\n\nconst MonthButton = styled.button<{ $isSelected?: boolean }>`\n background: ${({ $isSelected }) => ($isSelected ? 'rgba(212, 175, 55, 0.2)' : 'transparent')};\n border: 1px solid\n ${({ $isSelected }) => ($isSelected ? '#d4af37' : 'rgba(255, 255, 255, 0.12)')};\n color: ${({ $isSelected }) => ($isSelected ? '#d4af37' : '#fff')};\n border-radius: 6px;\n padding: 0.4rem 0;\n cursor: pointer;\n font-size: 0.9rem;\n transition: all 0.2s;\n\n &:hover {\n background: rgba(212, 175, 55, 0.15);\n border-color: rgba(212, 175, 55, 0.5);\n }\n`;\n\nconst DayCell = styled.div<{\n $isAvailable: boolean;\n $isCurrentMonth: boolean;\n $isSelected: boolean;\n $isInSelectedRange: boolean;\n $isToday?: boolean;\n $savedRangeColor: ReservationColor | null;\n $isInHoverRange: boolean;\n}>`\n aspect-ratio: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n border: 1px solid transparent;\n cursor: ${({ $isAvailable, $savedRangeColor }) =>\n $isAvailable && !$savedRangeColor ? 'pointer' : 'default'};\n opacity: ${({ $isCurrentMonth }) => ($isCurrentMonth ? 1 : 0.35)};\n color: ${({ $isAvailable }) => ($isAvailable ? '#fff' : 'rgba(255, 255, 255, 0.35)')};\n font-weight: ${({ $isSelected, $isInSelectedRange, $savedRangeColor, $isInHoverRange }) =>\n $isSelected || $isInSelectedRange || $savedRangeColor || $isInHoverRange ? 600 : 400};\n position: relative;\n transition: background 0.15s ease, border-color 0.15s ease;\n\n background: ${({ $isSelected, $isInSelectedRange, $savedRangeColor, $isInHoverRange }) => {\n if ($savedRangeColor) return $savedRangeColor.bg;\n if ($isSelected) return 'rgba(212, 175, 55, 0.45)';\n if ($isInSelectedRange) return 'rgba(212, 175, 55, 0.25)';\n if ($isInHoverRange) return 'rgba(212, 175, 55, 0.18)';\n return 'transparent';\n }};\n\n border-color: ${({ $isSelected, $isInSelectedRange, $savedRangeColor, $isToday, $isAvailable }) => {\n if ($savedRangeColor) return $savedRangeColor.border;\n if ($isSelected || $isInSelectedRange) return 'rgba(212, 175, 55, 0.6)';\n if ($isToday) return 'rgba(212, 175, 55, 0.5)';\n if ($isAvailable) return 'rgba(212, 175, 55, 0.25)';\n return 'transparent';\n }};\n\n &:hover {\n opacity: ${({ $isCurrentMonth, $savedRangeColor }) =>\n $isCurrentMonth ? ($savedRangeColor ? 0.85 : 1) : 0.35};\n }\n`;\n\nconst AddDateRangeButton = styled.button`\n flex: 1;\n min-width: 180px;\n background: rgba(212, 175, 55, 0.18);\n border: 1px solid rgba(212, 175, 55, 0.34);\n border-radius: 10px;\n color: #f2d35b;\n padding: 0.85rem 1rem;\n font-size: 0.95rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover:enabled {\n background: rgba(212, 175, 55, 0.3);\n }\n\n &:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n`;\n\nconst ConfirmButton = styled(AddDateRangeButton)`\n flex: 0 0 auto;\n min-width: 140px;\n background: rgba(212, 175, 55, 0.35);\n border-color: rgba(212, 175, 55, 0.6);\n font-weight: 600;\n`;\n\nconst ReservationCard = styled.div<{ $accent: string }>`\n background: rgba(0, 0, 0, 0.4);\n border-radius: 12px;\n padding: 1rem;\n margin-top: 1rem;\n border-left: 4px solid ${({ $accent }) => $accent};\n`;\n\nconst ActionButton = styled.button<{ $variant?: 'default' | 'danger' }>`\n background: none;\n border: none;\n color: ${({ $variant }) => ($variant === 'danger' ? '#ff7676' : '#d4af37')};\n cursor: pointer;\n padding: 0.25rem;\n display: inline-flex;\n transition: color 0.2s;\n\n &:hover {\n color: ${({ $variant }) => ($variant === 'danger' ? '#ff8f8f' : '#f4d07f')};\n }\n`;","import { useMemo } from 'react'\nimport styled from 'styled-components'\n\nexport type ValuationRecentSale = {\n readonly imageUrl?: string\n readonly price?: number | null\n readonly currency?: string | null\n readonly saleDate?: string | null\n readonly address?: string | null\n readonly suburb?: string | null\n readonly bedrooms?: number | null\n readonly bathrooms?: number | null\n readonly landSize?: string | null\n}\n\nexport type ValuationSummary = {\n readonly propertyId?: number\n readonly lastPrice?: number | null\n readonly fairValue?: number | null\n readonly totalTokens?: number | null\n readonly confidence?: string | null\n readonly undervaluedThreshold?: number | null\n readonly overvaluedThreshold?: number | null\n readonly valuationDeltaPercent?: number | null\n readonly valuationStatus?: string | null\n readonly areaDemand?: string | null\n readonly propertyMoat?: string | null\n readonly recentSales?: ValuationRecentSale[]\n}\n\nexport type ValuationHistoryPoint = {\n readonly timestamp: number\n readonly valuation: number\n readonly fairValue?: number | null\n}\n\nexport type PropertyValuationProps = {\n propertyName: string\n tokenPrice: number\n totalTokens?: number | null\n summary?: ValuationSummary | null\n history?: ValuationHistoryPoint[]\n loading?: boolean\n error?: string | null\n}\n\nconst CHART_WIDTH = 1200\nconst CHART_HEIGHT = 200\nconst CHART_PADDING = 10\n\nconst FALLBACK_RECENT_SALES: ValuationRecentSale[] = [\n {\n imageUrl: 'https://images.unsplash.com/photo-1464146072230-91cabc968266?auto=format&fit=crop&w=1200&q=80',\n price: 16500000,\n saleDate: 'Nov 2024',\n address: '15 Wentworth Road',\n suburb: 'Vaucluse',\n bedrooms: 5,\n bathrooms: 5,\n landSize: '1,420 sqm',\n },\n {\n imageUrl: 'https://images.unsplash.com/photo-1505691938895-1758d7feb511?auto=format&fit=crop&w=1200&q=80',\n price: 14900000,\n saleDate: 'Sep 2024',\n address: '42 Vaucluse Road',\n suburb: 'Vaucluse',\n bedrooms: 4,\n bathrooms: 4,\n landSize: '980 sqm',\n },\n {\n imageUrl: 'https://images.unsplash.com/photo-1505693314120-0d443867891c?auto=format&fit=crop&w=1200&q=80',\n price: 13250000,\n saleDate: 'Jun 2024',\n address: '18 Olola Avenue',\n suburb: 'Vaucluse',\n bedrooms: 4,\n bathrooms: 3,\n landSize: '860 sqm',\n },\n]\n\nexport function PropertyValuation({\n propertyName,\n tokenPrice,\n totalTokens,\n summary = null,\n history = [],\n loading = false,\n error = null,\n}: PropertyValuationProps) {\n const now = useMemo(() => new Date(), [])\n\n const lastPrice = useMemo(() => {\n const fallback = Number.isFinite(tokenPrice) && tokenPrice > 0 ? tokenPrice : 0\n if (!summary?.lastPrice || summary.lastPrice <= 0) {\n return fallback\n }\n return summary.lastPrice\n }, [summary, tokenPrice])\n\n const fairValue = useMemo(() => {\n if (summary?.fairValue && summary.fairValue > 0) {\n return summary.fairValue\n }\n return lastPrice || 1\n }, [summary, lastPrice])\n\n const tokensOutstanding = useMemo(() => {\n if (summary?.totalTokens && summary.totalTokens > 0) {\n return summary.totalTokens\n }\n if (totalTokens && totalTokens > 0) {\n return totalTokens\n }\n return 50_000\n }, [summary, totalTokens])\n\n const undervaluedThreshold = summary?.undervaluedThreshold ?? fairValue * 0.9\n const overvaluedThreshold = summary?.overvaluedThreshold ?? fairValue * 1.1\n const gaugePosition = calculatePositionFromPrice(lastPrice, undervaluedThreshold, fairValue, overvaluedThreshold)\n\n const valuationStatus = summary?.valuationStatus\n ?? (lastPrice < fairValue ? 'Undervalued' : lastPrice > fairValue ? 'Overvalued' : 'Fair Value')\n\n const valuationDelta = summary?.valuationDeltaPercent ?? ((lastPrice - fairValue) / fairValue) * 100\n const valuationDeltaFormatted = `${valuationDelta >= 0 ? '+' : ''}${valuationDelta.toFixed(1)}%`\n\n const { valuationPath, fairValuePath, axisLabels } = useMemo(() => buildChartPaths(history, fairValue), [history, fairValue])\n\n const recentSales = useMemo(() => {\n if (summary?.recentSales?.length) {\n return summary.recentSales\n }\n return FALLBACK_RECENT_SALES\n }, [summary])\n\n const areaDemandLabel = summary?.areaDemand ?? 'Hot'\n const propertyMoatLabel = summary?.propertyMoat ?? 'Wide'\n\n return (\n <ValuationWrapper>\n <SectionTitle>Valuation Model</SectionTitle>\n <LoafPricingSection>\n <SectionSubheading>Loaf Pricing Model</SectionSubheading>\n <PricingModelCard>\n <PricingModelHeader>\n <PricingModelTitle>{propertyName}</PricingModelTitle>\n <PricingModelValue>\n <div className=\"valuation-info\">\n <div>Valuation as of</div>\n <div><span style={{ color: 'var(--color-accent)' }}>{now.toLocaleDateString('en-US', { day: '2-digit', month: 'short', year: 'numeric' })}</span></div>\n <div>{now.toLocaleTimeString('en-AU', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false, timeZone: 'Australia/Sydney' })} AEST</div>\n </div>\n </PricingModelValue>\n </PricingModelHeader>\n\n <PricingModelDetails>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n <PricingModelDetail>\n <PropertyDetailLabel>Last Price</PropertyDetailLabel>\n <PricingDetailValue>{formatCurrency(lastPrice)}</PricingDetailValue>\n </PricingModelDetail>\n\n <PricingModelDetail>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', width: '100%' }}>\n <PropertyDetailLabel>Fair Value</PropertyDetailLabel>\n <span style={{ fontSize: '0.75rem', color: '#4CAF50', fontWeight: 'bold' }}>\n Confidence: {summary?.confidence ?? 'High'}\n </span>\n </div>\n <PricingDetailValue style={{ color: 'var(--color-accent)', fontWeight: 'bold' }}>\n {formatCurrency(fairValue)}{' '}\n <span style={{ fontSize: '0.85em', fontWeight: 'normal', opacity: 0.8 }}>\n ({formatCurrency(fairValue * tokensOutstanding, { maximumFractionDigits: 0 })})\n </span>\n </PricingDetailValue>\n </PricingModelDetail>\n </div>\n\n <ValuationIndicator className=\"mobile-only-valuation\">\n <ValuationHeader>\n <ValuationTitle style={{ color: '#4CAF50' }}>Undervalued</ValuationTitle>\n <ValuationTitle style={{ color: 'var(--color-accent)' }}>Fair Value</ValuationTitle>\n <ValuationTitle style={{ color: '#F44336' }}>Overvalued</ValuationTitle>\n </ValuationHeader>\n\n <ValuationGauge>\n <GaugeBackground />\n <GaugeIndicator type=\"fairValue\" position={50} />\n <GaugePriceTag position={gaugePosition}>\n <span>Last Price</span>\n <span>{formatCurrency(lastPrice)}</span>\n </GaugePriceTag>\n <GaugeIndicator type=\"lastPrice\" position={gaugePosition} />\n </ValuationGauge>\n\n <ValuationDetails>\n <ValuationItem>\n <ValuationValue style={{ color: '#4CAF50' }}>\n <span>&lt; {formatCurrency(undervaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(undervaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: 'var(--color-accent)' }}>\n <span>{formatCurrency(fairValue)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(fairValue * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: '#F44336' }}>\n <span>&gt; {formatCurrency(overvaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(overvaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n </ValuationDetails>\n </ValuationIndicator>\n\n <HiddenMobileChart>\n <h3 style={{ marginBottom: '1rem', fontSize: '1.1rem', color: '#fff' }}>Historical Valuation</h3>\n <ChartContainer>\n <ChartBackground>\n {axisLabels.map((label, index) => (\n <YAxisLabel key={`${label}-${index}`} style={{ top: `${10 + index * 22}%` }}>\n {label}\n </YAxisLabel>\n ))}\n <ValuationSvg viewBox={`0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`} preserveAspectRatio=\"none\">\n {valuationPath ? (\n <path d={valuationPath} fill=\"none\" stroke=\"#D4AF37\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n {fairValuePath ? (\n <path d={fairValuePath} fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n </ValuationSvg>\n </ChartBackground>\n </ChartContainer>\n </HiddenMobileChart>\n\n <PricingModelDetail>\n <PropertyDetailLabel>Valuation</PropertyDetailLabel>\n <ValuationCallout>\n <span style={{ color: '#4CAF50', fontWeight: 600, fontSize: '16px', letterSpacing: '0.3px' }}>{valuationStatus}</span>\n <ValuationBadge>{valuationDeltaFormatted}</ValuationBadge>\n </ValuationCallout>\n </PricingModelDetail>\n\n <PricingModelDetail>\n <PropertyDetailLabel>Area Demand</PropertyDetailLabel>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <PricingDetailValue>{areaDemandLabel}</PricingDetailValue>\n <AreaDemandChart>\n <svg width=\"100%\" height=\"60\" viewBox=\"0 0 180 60\" preserveAspectRatio=\"none\">\n <rect x=\"0\" y=\"0\" width=\"180\" height=\"20\" fill=\"rgba(244, 67, 54, 0.2)\" />\n <rect x=\"0\" y=\"20\" width=\"180\" height=\"20\" fill=\"rgba(255, 152, 0, 0.15)\" />\n <rect x=\"0\" y=\"40\" width=\"180\" height=\"20\" fill=\"rgba(158, 158, 158, 0.15)\" />\n <line x1=\"0\" y1=\"20\" x2=\"180\" y2=\"20\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"0\" y1=\"40\" x2=\"180\" y2=\"40\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"45\" y1=\"0\" x2=\"45\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"90\" y1=\"0\" x2=\"90\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"135\" y1=\"0\" x2=\"135\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <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\" />\n </svg>\n <ChartLabel style={{ top: '3px' }}>Hot</ChartLabel>\n <ChartLabel style={{ top: '23px' }}>Warm</ChartLabel>\n <ChartLabel style={{ top: '43px' }}>Cold</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: 0 }}>2020</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '45px' }}>2021</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '90px' }}>2022</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '135px' }}>2023</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', right: 0 }}>2025</ChartLabel>\n </AreaDemandChart>\n </div>\n </PricingModelDetail>\n\n <PricingModelDetail>\n <PropertyDetailLabel>Property Moat</PropertyDetailLabel>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <PricingDetailValue>{propertyMoatLabel}</PricingDetailValue>\n <AreaDemandChart>\n <svg width=\"100%\" height=\"60\" viewBox=\"0 0 180 60\" preserveAspectRatio=\"none\">\n <rect x=\"0\" y=\"0\" width=\"180\" height=\"20\" fill=\"rgba(0, 137, 123, 0.2)\" />\n <rect x=\"0\" y=\"20\" width=\"180\" height=\"20\" fill=\"rgba(102, 187, 106, 0.15)\" />\n <rect x=\"0\" y=\"40\" width=\"180\" height=\"20\" fill=\"rgba(200, 230, 201, 0.15)\" />\n <line x1=\"0\" y1=\"20\" x2=\"180\" y2=\"20\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"0\" y1=\"40\" x2=\"180\" y2=\"40\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"45\" y1=\"0\" x2=\"45\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"90\" y1=\"0\" x2=\"90\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"135\" y1=\"0\" x2=\"135\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <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\" />\n </svg>\n <ChartLabel style={{ top: '3px' }}>Wide Moat</ChartLabel>\n <ChartLabel style={{ top: '23px' }}>Narrow Moat</ChartLabel>\n <ChartLabel style={{ top: '43px' }}>No Moat</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: 0 }}>2020</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '45px' }}>2021</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '90px' }}>2022</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '135px' }}>2023</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', right: 0 }}>2025</ChartLabel>\n </AreaDemandChart>\n </div>\n </PricingModelDetail>\n </PricingModelDetails>\n\n <ValuationIndicator className=\"desktop-only-valuation\">\n <ValuationHeader>\n <ValuationTitle style={{ color: '#4CAF50' }}>Undervalued</ValuationTitle>\n <ValuationTitle style={{ color: 'var(--color-accent)' }}>Fair Value</ValuationTitle>\n <ValuationTitle style={{ color: '#F44336' }}>Overvalued</ValuationTitle>\n </ValuationHeader>\n <ValuationGauge>\n <GaugeBackground />\n <GaugeIndicator type=\"fairValue\" position={50} />\n <GaugePriceTag position={gaugePosition}>\n <span>Last Price</span>\n <span>{formatCurrency(lastPrice)}</span>\n </GaugePriceTag>\n <GaugeIndicator type=\"lastPrice\" position={gaugePosition} />\n </ValuationGauge>\n <ValuationDetails>\n <ValuationItem>\n <ValuationValue style={{ color: '#0ecb81' }}>\n <span>&lt; {formatCurrency(undervaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(undervaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: '#f0b90b' }}>\n <span>{formatCurrency(fairValue)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(fairValue * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: '#f6465d' }}>\n <span>&gt; {formatCurrency(overvaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(overvaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n </ValuationDetails>\n </ValuationIndicator>\n\n <h3 className=\"desktop-only-historical-chart\" style={{ marginBottom: '1rem', fontSize: '1.1rem', color: '#fff' }}>\n Historical Valuation\n </h3>\n\n <ChartContainer className=\"desktop-only-historical-chart\">\n <ChartBackground>\n {axisLabels.map((label, index) => (\n <YAxisLabel key={`${label}-${index}`} style={{ top: `${10 + index * 22}%` }}>\n {label}\n </YAxisLabel>\n ))}\n <ValuationSvg viewBox={`0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`} preserveAspectRatio=\"none\">\n {valuationPath ? (\n <path d={valuationPath} fill=\"none\" stroke=\"#D4AF37\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n {fairValuePath ? (\n <path d={fairValuePath} fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n </ValuationSvg>\n </ChartBackground>\n </ChartContainer>\n </PricingModelCard>\n </LoafPricingSection>\n\n <RecentSalesSection>\n <SectionSubheading>Recent Sales in Comparable Suburbs</SectionSubheading>\n <SwipeIndicator>\n Swipe to see more\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" />\n </svg>\n </SwipeIndicator>\n <SalesGrid>\n {recentSales.map((sale, index) => (\n <SaleCard key={`${sale.address ?? sale.suburb ?? 'sale'}-${index}`}>\n <SaleImageContainer>\n <SaleImage\n src={sale.imageUrl ?? 'https://images.unsplash.com/photo-1505693314120-0d443867891c?auto=format&fit=crop&w=1200&q=80'}\n alt={sale.address ?? 'Recent sale'}\n />\n <SoldTag>\n SOLD\n <SoldIcon />\n </SoldTag>\n </SaleImageContainer>\n <SalePriceBar>\n <SalePriceLeft>\n <SalePriceLabel>Sale Price</SalePriceLabel>\n <SalePriceAmount>{formatCurrency(sale.price)}</SalePriceAmount>\n </SalePriceLeft>\n <SaleDate>{sale.saleDate ?? '—'}</SaleDate>\n </SalePriceBar>\n <SaleContent>\n <SaleAddress>{sale.address ?? 'Private Sale'}</SaleAddress>\n <SaleSuburb>{sale.suburb ?? ''}</SaleSuburb>\n </SaleContent>\n <SaleStatsBar>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <SaleStatItem>\n <BedIcon />\n {formatBedroomLabel(sale.bedrooms)}\n </SaleStatItem>\n <SaleStatItem>\n <BathIcon />\n {formatBathroomLabel(sale.bathrooms)}\n </SaleStatItem>\n </div>\n <SaleStatItem style={{ color: 'var(--color-text-secondary)' }}>\n {sale.landSize ?? '—'}\n </SaleStatItem>\n </SaleStatsBar>\n </SaleCard>\n ))}\n </SalesGrid>\n </RecentSalesSection>\n {loading ? <LoadingOverlay>Loading valuation data…</LoadingOverlay> : null}\n {error ? <ErrorMessage>{error}</ErrorMessage> : null}\n </ValuationWrapper>\n )\n}\n\nfunction formatCurrency(value?: number | null, options?: Intl.NumberFormatOptions) {\n if (value == null || Number.isNaN(value)) {\n return '—'\n }\n\n const { minimumFractionDigits = 2, maximumFractionDigits = 2, ...rest } = options ?? {}\n const minDigits = Math.max(0, Math.min(20, minimumFractionDigits))\n const maxDigits = Math.max(minDigits, Math.min(20, maximumFractionDigits))\n\n return value.toLocaleString('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: minDigits,\n maximumFractionDigits: maxDigits,\n ...rest,\n })\n}\n\nfunction formatMillions(value: number) {\n if (!Number.isFinite(value) || value === 0) {\n return '$0m'\n }\n return `$${(value / 1_000_000).toFixed(2)}m`\n}\n\nfunction formatBedroomLabel(bedrooms?: number | null) {\n if (!Number.isFinite(bedrooms)) return '—'\n return `${bedrooms} Bed`\n}\n\nfunction formatBathroomLabel(bathrooms?: number | null) {\n if (!Number.isFinite(bathrooms)) return '—'\n return `${bathrooms} Bath`\n}\n\nfunction buildChartPaths(history: ValuationHistoryPoint[], fallbackValue: number) {\n if (!history.length) {\n return { valuationPath: null, fairValuePath: null, axisLabels: ['$0', '$0', '$0', '$0', '$0'] }\n }\n\n const values = history.map((point) => point.valuation)\n const minValue = Math.min(...values)\n const maxValue = Math.max(...values)\n const minTime = Math.min(...history.map((point) => point.timestamp))\n const maxTime = Math.max(...history.map((point) => point.timestamp))\n\n const adjustedMinValue = minValue === maxValue ? minValue * 0.9 : minValue\n const adjustedMaxValue = minValue === maxValue ? maxValue * 1.1 : maxValue\n\n const valuationSegments = history.map((point, index) => {\n const x = normalize(point.timestamp, minTime, maxTime, CHART_PADDING, CHART_WIDTH - CHART_PADDING)\n const y = mapValueToY(point.valuation, adjustedMinValue, adjustedMaxValue)\n return `${index === 0 ? 'M' : 'L'} ${x} ${y}`\n })\n\n const fairValuePoints = history.filter((point) => Number.isFinite(point.fairValue))\n const fairValueSegments = fairValuePoints.map((point, index) => {\n const x = normalize(point.timestamp, minTime, maxTime, CHART_PADDING, CHART_WIDTH - CHART_PADDING)\n const y = mapValueToY(point.fairValue ?? fallbackValue, adjustedMinValue, adjustedMaxValue)\n return `${index === 0 ? 'M' : 'L'} ${x} ${y}`\n })\n\n const axisLabels = buildAxisLabels(adjustedMinValue, adjustedMaxValue)\n\n return {\n valuationPath: valuationSegments.length > 1 ? valuationSegments.join(' ') : null,\n fairValuePath: fairValueSegments.length > 1 ? fairValueSegments.join(' ') : null,\n axisLabels,\n }\n}\n\nfunction normalize(value: number, min: number, max: number, targetMin: number, targetMax: number) {\n if (max === min) return (targetMin + targetMax) / 2\n return targetMin + ((value - min) / (max - min)) * (targetMax - targetMin)\n}\n\nfunction mapValueToY(value: number, min: number, max: number) {\n const normalized = normalize(value, min, max, 0, 1)\n const clamped = Math.min(1, Math.max(0, normalized))\n const drawableHeight = CHART_HEIGHT - CHART_PADDING * 2\n return CHART_PADDING + (1 - clamped) * drawableHeight\n}\n\nfunction buildAxisLabels(min: number, max: number) {\n const steps = 5\n const labels: string[] = []\n for (let i = 0; i < steps; i += 1) {\n const ratio = i / (steps - 1)\n const value = max - ratio * (max - min)\n labels.push(formatCurrency(value, { maximumFractionDigits: 0, minimumFractionDigits: 0 }))\n }\n return labels\n}\n\nfunction calculatePositionFromPrice(price: number, undervaluedPrice: number, fairValue: number, overvaluedPrice: number) {\n if (price <= undervaluedPrice) return 0\n if (price >= overvaluedPrice) return 100\n if (price < fairValue) {\n return (50 * (price - undervaluedPrice)) / (fairValue - undervaluedPrice)\n }\n return 50 + (50 * (price - fairValue)) / (overvaluedPrice - fairValue)\n}\n\nconst ValuationIndicator = styled.div`\n background-color: rgba(50, 52, 58, 0.95);\n border-radius: 6px;\n padding: 1rem;\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n\n &.desktop-only-valuation {\n @media (max-width: 480px) {\n display: none;\n }\n }\n\n &.mobile-only-valuation {\n display: none;\n @media (max-width: 480px) {\n display: block;\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n }\n`\n\nconst GaugeIndicator = styled.div<{ type: 'fairValue' | 'lastPrice'; position: number }>`\n position: absolute;\n left: ${(props) => props.position}%;\n top: 0.35rem;\n transform: translateX(-50%);\n width: 3px;\n height: 36px;\n border-radius: 999px;\n background: ${(props) => (props.type === 'fairValue' ? '#f0b90b' : 'rgba(10, 12, 18, 0.95)')};\n box-shadow: ${(props) => (props.type === 'lastPrice' ? '0 6px 18px rgba(0, 0, 0, 0.65)' : '0 6px 16px rgba(0, 0, 0, 0.45)')};\n`\n\nconst GaugePriceTag = styled.div<{ position: number }>`\n position: absolute;\n left: ${(props) => props.position}%;\n top: -46px;\n transform: translateX(-50%);\n background: rgba(7, 9, 13, 0.85);\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 8px;\n padding: 6px 10px;\n font-size: 0.75rem;\n color: #fff;\n font-weight: 500;\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n backdrop-filter: blur(6px);\n\n span:last-child {\n font-size: 0.95em;\n font-weight: 600;\n letter-spacing: 0.2px;\n color: var(--color-accent);\n }\n`\n\nconst HiddenMobileChart = styled.div`\n display: none;\n @media (max-width: 480px) {\n display: block;\n }\n`\n\nconst ValuationWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2rem;\n`\n\nconst LoadingOverlay = styled.div`\n margin-top: 1rem;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.05);\n color: rgba(255, 255, 255, 0.8);\n font-size: 0.9rem;\n`\n\nconst ErrorMessage = styled.div`\n margin-top: 1rem;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n background: rgba(244, 67, 54, 0.15);\n color: #ff8a80;\n font-size: 0.9rem;\n border: 1px solid rgba(244, 67, 54, 0.4);\n`\n\nconst SectionTitle = styled.h2`\n margin: 0;\n font-size: clamp(1.75rem, 2.5vw, 2.25rem);\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.01em;\n`\n\nconst LoafPricingSection = styled.div`\n background-color: rgba(30, 32, 38, 0.95);\n border-radius: 8px;\n padding: 1.25rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionSubheading = styled.h2`\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.02em;\n`\n\nconst PricingModelCard = styled.div`\n background-color: rgba(40, 42, 48, 0.95);\n border-radius: 8px;\n padding: 1.5rem;\n margin-top: 1rem;\n`\n\nconst PricingModelHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1.5rem;\n gap: 1rem;\n\n .valuation-info {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n font-size: 0.85rem;\n color: rgba(255, 255, 255, 0.75);\n }\n`\n\nconst PricingModelTitle = styled.h3`\n margin: 0;\n font-size: 1.2rem;\n font-weight: 600;\n color: #fff;\n`\n\nconst PricingModelValue = styled.div`\n font-size: 1.4rem;\n font-weight: 700;\n color: var(--color-primary);\n\n @media (max-width: 768px) {\n font-size: 1.2rem;\n }\n`\n\nconst PricingModelDetails = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst PricingModelDetail = styled.div`\n background-color: rgba(50, 52, 58, 0.95);\n border-radius: 6px;\n padding: 1rem;\n`\n\nconst PropertyDetailLabel = styled.div`\n font-size: 0.85rem;\n color: rgba(255, 255, 255, 0.7);\n margin-bottom: 0.5rem;\n`\n\nconst PricingDetailValue = styled.div`\n font-size: 1rem;\n color: #fff;\n font-weight: 500;\n`\n\nconst ValuationHeader = styled.div`\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.75rem;\n`\n\nconst ValuationTitle = styled.div`\n font-size: 0.9rem;\n color: rgba(255, 255, 255, 0.7);\n`\n\nconst ValuationGauge = styled.div`\n position: relative;\n width: 100%;\n padding: 1.1rem 0 2rem;\n margin: 0.75rem 0 1rem;\n`\n\nconst GaugeBackground = styled.div`\n width: 100%;\n height: 18px;\n border-radius: 999px;\n background: linear-gradient(90deg, #0ecb81 0%, #4dd482 30%, #f8e36c 50%, #f98b6c 70%, #f6465d 100%);\n position: relative;\n overflow: hidden;\n box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.35), 0 8px 18px rgba(0, 0, 0, 0.25);\n`\n\nconst ValuationDetails = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 1rem;\n`\n\nconst ValuationItem = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst ValuationValue = styled.div`\n font-size: 1rem;\n font-weight: 600;\n color: #fff;\n`\n\nconst ChartContainer = styled.div`\n width: 100%;\n height: 301.52px;\n margin-top: 1.5rem;\n background-color: rgba(50, 52, 58, 0.5);\n border-radius: 6px;\n padding: 1rem;\n position: relative;\n`\n\nconst ChartBackground = styled.div`\n position: relative;\n height: 100%;\n width: 100%;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 8px;\n`\n\nconst ValuationSvg = styled.svg`\n position: absolute;\n top: 10px;\n right: 0;\n bottom: 25px;\n left: 0;\n overflow: visible;\n width: 100%;\n height: calc(100% - 35px);\n`\n\nconst YAxisLabel = styled.div`\n position: absolute;\n left: -40px;\n font-size: 10px;\n color: rgba(255, 255, 255, 0.6);\n text-align: right;\n padding-right: 5px;\n`\n\nconst ValuationCallout = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: linear-gradient(90deg, rgba(76, 175, 80, 0.05) 0%, rgba(76, 175, 80, 0.1) 100%);\n border-radius: 8px;\n padding: 10px 16px;\n border: 1px solid rgba(76, 175, 80, 0.2);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n`\n\nconst ValuationBadge = styled.div`\n background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%);\n color: white;\n padding: 5px 12px;\n border-radius: 20px;\n font-size: 14px;\n font-weight: 600;\n box-shadow: 0 2px 4px rgba(76, 175, 80, 0.25);\n`\n\nconst AreaDemandChart = styled.div`\n height: 60px;\n width: 100%;\n position: relative;\n`\n\nconst ChartLabel = styled.div`\n position: absolute;\n font-size: 9px;\n color: rgba(255, 255, 255, 0.7);\n`\n\nconst RecentSalesSection = styled.div`\n background-color: rgba(30, 32, 38, 0.95);\n border-radius: 8px;\n padding: 1.25rem;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n position: relative;\n }\n`\n\nconst SalesGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 1.5rem;\n margin-top: 1rem;\n\n @media (max-width: 768px) {\n display: flex;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n scroll-behavior: smooth;\n -webkit-overflow-scrolling: touch;\n gap: 1rem;\n padding-bottom: 1rem;\n\n &::-webkit-scrollbar {\n display: none;\n }\n scrollbar-width: none;\n }\n`\n\nconst SaleCard = styled.div`\n background-color: var(--color-card, #1e2329);\n border-radius: var(--border-radius, 8px);\n overflow: hidden;\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n border: 1px solid rgba(255, 255, 255, 0.05);\n\n &:hover {\n transform: translateY(-4px);\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);\n }\n\n @media (max-width: 768px) {\n min-width: 280px;\n width: 85%;\n scroll-snap-align: start;\n flex-shrink: 0;\n margin-right: 0.5rem;\n\n &:last-child {\n margin-right: 1rem;\n }\n }\n`\n\nconst SaleImageContainer = styled.div`\n position: relative;\n width: 100%;\n height: 200px;\n overflow: hidden;\n`\n\nconst SaleImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n transition: transform 0.3s ease;\n\n ${SaleCard}:hover & {\n transform: scale(1.05);\n }\n`\n\nconst SoldTag = styled.div`\n position: absolute;\n top: 1rem;\n right: 1rem;\n background-color: var(--color-accent, #f0b90b);\n color: var(--color-background, #0b0e11);\n font-weight: 600;\n font-size: 0.75rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n`\n\nconst SoldIcon = styled.div`\n display: none;\n`\n\nconst SalePriceBar = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n background: linear-gradient(90deg, rgba(240, 185, 11, 0.1) 0%, rgba(240, 185, 11, 0.05) 100%);\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n`\n\nconst SalePriceLeft = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst SalePriceLabel = styled.span`\n font-size: 0.7rem;\n color: rgba(255, 255, 255, 0.5);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n`\n\nconst SalePriceAmount = styled.span`\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--color-accent, #f0b90b);\n`\n\nconst SaleContent = styled.div`\n padding: 1rem;\n`\n\nconst SaleAddress = styled.h3`\n margin: 0;\n margin-bottom: 0.25rem;\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text, #eaecef);\n`\n\nconst SaleSuburb = styled.div`\n font-size: 0.8rem;\n color: var(--color-text-secondary, #848e9c);\n margin-bottom: 0.5rem;\n`\n\nconst SaleStatsBar = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n background-color: rgba(0, 0, 0, 0.3);\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n`\n\nconst SaleStatItem = styled.div`\n display: flex;\n align-items: center;\n gap: 0.25rem;\n font-size: 0.8rem;\n color: var(--color-text-secondary, #848e9c);\n\n svg {\n width: 14px;\n height: 14px;\n opacity: 0.7;\n }\n`\n\nconst SaleDate = styled.div`\n font-size: 0.75rem;\n color: var(--color-text-secondary, #848e9c);\n`\n\nconst SwipeIndicator = styled.div`\n display: none;\n\n @media (max-width: 768px) {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 0.75rem;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.8rem;\n\n svg {\n margin-left: 0.25rem;\n animation: swipeAnimation 1.5s infinite;\n }\n\n @keyframes swipeAnimation {\n 0% { transform: translateX(0); }\n 50% { transform: translateX(5px); }\n 100% { transform: translateX(0); }\n }\n }\n`\n\nconst BedIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\" />\n </svg>\n)\n\nconst BathIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\" />\n </svg>\n)\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport styled, { css, keyframes } from 'styled-components'\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`\n\nconst pulse = keyframes`\n 0%, 100% { transform: scale(1); opacity: 0.8; }\n 50% { transform: scale(1.2); opacity: 1; }\n`\n\nconst FeatureTooltip = styled.div<{ $visible: boolean }>`\n position: absolute;\n transform: translate(-50%, calc(-100% - 24px));\n min-width: 180px;\n max-width: 220px;\n padding: 0.65rem 0.85rem;\n border-radius: 10px;\n border: 1px solid var(--color-accent, #f0b90b);\n background: rgba(20, 23, 29, 0.95);\n color: white;\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.35);\n opacity: ${(p) => (p.$visible ? 1 : 0)};\n visibility: ${(p) => (p.$visible ? 'visible' : 'hidden')};\n transition: opacity 0.2s ease, transform 0.2s ease;\n pointer-events: none;\n z-index: 20;\n\n h4 {\n margin: 0 0 0.2rem;\n font-size: 0.9rem;\n color: var(--color-accent, #f0b90b);\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.78rem;\n color: rgba(255, 255, 255, 0.85);\n }\n\n &::after {\n content: '';\n position: absolute;\n bottom: -8px;\n left: 50%;\n transform: translateX(-50%);\n border-width: 8px 7px 0;\n border-style: solid;\n border-color: rgba(20, 23, 29, 0.95) transparent transparent transparent;\n filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.35));\n }\n`\n\nconst GalleryOverlay = styled.div`\n position: fixed;\n inset: 0;\n z-index: 1000;\n background: rgba(0, 0, 0, 0.92);\n display: flex;\n flex-direction: column;\n animation: ${fadeIn} 0.3s ease;\n`\n\nconst GalleryHeader = styled.div`\n position: relative;\n padding: 1.5rem 2rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0.85) 0%, transparent 100%);\n z-index: 10;\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 1rem;\n }\n`\n\nconst PropertyInfo = styled.div`\n color: white;\n\n h2 {\n font-size: 1.25rem;\n font-weight: 600;\n margin: 0;\n }\n\n p {\n margin: 0.2rem 0 0;\n opacity: 0.8;\n font-size: 0.95rem;\n }\n`\n\nconst CloseButton = styled.button`\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: rgba(255, 255, 255, 0.25);\n transform: rotate(90deg);\n }\n`\n\nconst MainImageContainer = styled.div`\n position: relative;\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 80px 20px 140px;\n\n @media (max-width: 768px) {\n padding: 60px 0 110px;\n }\n`\n\nconst MainImage = styled.img<{ $visible: boolean }>`\n max-width: 90%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 12px;\n box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55);\n opacity: ${(p) => (p.$visible ? 1 : 0)};\n pointer-events: ${(p) => (p.$visible ? 'auto' : 'none')};\n transition: opacity 300ms ease;\n position: absolute;\n inset: 0;\n margin: auto;\n\n @media (max-width: 768px) {\n max-width: 100%;\n }\n`\n\nconst Hotspot = styled.button<{ $visible: boolean }>`\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n background: var(--color-accent, #f0b90b);\n color: #0b0e13;\n transform: translate(-50%, -50%);\n opacity: ${(p) => (p.$visible ? 1 : 0)};\n pointer-events: ${(p) => (p.$visible ? 'auto' : 'none')};\n animation: ${(p) => (p.$visible ? pulse : 'none')} 2s infinite;\n transition: transform 200ms ease;\n\n &:hover {\n transform: translate(-50%, -50%) scale(1.2);\n }\n`\n\nconst ThumbnailStrip = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem 2rem;\n display: flex;\n gap: 0.75rem;\n overflow-x: auto;\n background: linear-gradient(0deg, rgba(0, 0, 0, 0.9) 0%, transparent 100%);\n\n @media (max-width: 768px) {\n display: none;\n }\n`\n\nconst Thumbnail = styled.button<{ $active: boolean }>`\n width: 86px;\n height: 64px;\n border-radius: 6px;\n overflow: hidden;\n border: 2px solid ${(p) => (p.$active ? 'var(--color-accent, #f0b90b)' : 'transparent')};\n opacity: ${(p) => (p.$active ? 1 : 0.45)};\n transition: all 0.2s ease;\n background: transparent;\n padding: 0;\n\n &:hover {\n opacity: 1;\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`\n\nconst NavigationButton = styled.button<{ $dir: 'prev' | 'next' }>`\n position: absolute;\n top: 50%;\n ${(p) => (p.$dir === 'prev' ? 'left: 2rem;' : 'right: 2rem;')}\n transform: translateY(-50%);\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 1px solid rgba(255, 255, 255, 0.2);\n background: rgba(255, 255, 255, 0.12);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n @media (max-width: 768px) {\n display: none;\n }\n`\n\nconst SliderContainer = styled.div`\n position: absolute;\n bottom: 110px;\n left: 50%;\n transform: translateX(-50%);\n width: min(860px, 90%);\n background: rgba(0, 0, 0, 0.8);\n border-radius: 16px;\n padding: 0.75rem 1.5rem;\n backdrop-filter: blur(12px);\n user-select: none;\n\n @media (max-width: 768px) {\n bottom: 70px;\n width: 85%;\n }\n`\n\nconst SliderTrack = styled.div`\n position: relative;\n height: 4px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 999px;\n cursor: pointer;\n`\n\nconst SliderProgress = styled.div<{ $progress: number }>`\n position: absolute;\n inset: 0;\n width: ${(p) => p.$progress}%;\n background: linear-gradient(90deg, var(--color-accent, #f0b90b), rgba(240, 185, 11, 0.5));\n border-radius: inherit;\n`\n\nconst SliderThumb = styled.div<{ $position: number }>`\n position: absolute;\n top: 50%;\n left: ${(p) => p.$position}%;\n transform: translate(-50%, -50%);\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--color-accent, #f0b90b);\n border: 3px solid white;\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3);\n`\n\nconst SliderLabels = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 0.75rem;\n font-size: 0.75rem;\n color: rgba(255, 255, 255, 0.7);\n\n span {\n cursor: pointer;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n`\n\nconst MobileDots = styled.div`\n position: absolute;\n bottom: 1.5rem;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n gap: 0.35rem;\n\n @media (min-width: 769px) {\n display: none;\n }\n`\n\nconst MobileDot = styled.button<{ $active: boolean }>`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: none;\n background: ${(p) => (p.$active ? 'var(--color-accent, #f0b90b)' : 'rgba(255,255,255,0.3)')};\n ${(p) =>\n p.$active &&\n css`\n transform: scale(1.2);\n `}\n`\n\nexport type PropertyGalleryHotspot = {\n id: number\n x: number\n y: number\n title: string\n description: string\n}\n\nexport type PropertyGalleryImage = {\n src: string\n alt: string\n label: string\n hotspots?: PropertyGalleryHotspot[]\n}\n\ntype PropertyPhotoGalleryProps = {\n isOpen: boolean\n onClose: () => void\n startIndex?: number\n images?: PropertyGalleryImage[]\n title?: string\n subtitle?: string\n}\n\nconst DEFAULT_IMAGES: PropertyGalleryImage[] = [\n {\n src: '/properties/elara/28-derby-street-elara-vaucluse-front-view.jpg',\n alt: 'Front view',\n label: 'Entrance',\n hotspots: [\n { id: 1, x: 50, y: 38, title: 'Sydney Harbour Vista', description: 'Iconic skyline views' },\n { id: 2, x: 40, y: 55, title: 'Architectural Lines', description: 'Tiered sculptural facade' },\n ],\n },\n {\n src: '/properties/elara/28-derby-street-elara-vaucluse-sydney-living-room.jpg',\n alt: 'Living room',\n label: 'Living',\n hotspots: [\n { id: 3, x: 32, y: 42, title: 'Floor-to-ceiling glass', description: 'Walls of light + harbour' },\n { id: 4, x: 68, y: 64, title: 'Marble floors', description: 'Imported Italian slab work' },\n ],\n },\n {\n src: '/properties/elara/28-derby-street-elara-vaucluse-sydney-harbour-view.jpg',\n alt: 'Harbour view',\n label: 'Views',\n hotspots: [\n { id: 5, x: 48, y: 32, title: 'Opera House', description: 'Framed iconic outlook' },\n { id: 6, x: 70, y: 44, title: 'Harbour Bridge', description: 'Harbour bridge axis' },\n ],\n },\n]\n\nconst clampIndex = (index: number, length: number) => {\n if (length <= 0) return 0\n return Math.min(Math.max(index, 0), length - 1)\n}\n\nexport default function PropertyPhotoGallery({\n isOpen,\n onClose,\n startIndex = 0,\n title = '28 Derby Street, Vaucluse',\n subtitle = 'Elara — Luxury Harbour Residence',\n images,\n}: PropertyPhotoGalleryProps) {\n const galleryImages = images?.length ? images : DEFAULT_IMAGES\n\n if (!isOpen) return null\n\n return (\n <GalleryContent\n key={`${startIndex}-${galleryImages.length}`}\n galleryImages={galleryImages}\n startIndex={startIndex}\n title={title}\n subtitle={subtitle}\n onClose={onClose}\n />\n )\n}\n\ntype GalleryContentProps = {\n galleryImages: PropertyGalleryImage[]\n startIndex: number\n title: string\n subtitle: string\n onClose: () => void\n}\n\nfunction GalleryContent({ galleryImages, startIndex, title, subtitle, onClose }: GalleryContentProps) {\n const [currentIndex, setCurrentIndex] = useState(() => clampIndex(startIndex, galleryImages.length))\n const [activeHotspotId, setActiveHotspotId] = useState<number | null>(null)\n const sliderRef = useRef<HTMLDivElement | null>(null)\n const [isDragging, setIsDragging] = useState(false)\n const wasDraggingRef = useRef(false)\n const touchStartX = useRef<number | null>(null)\n const touchStartY = useRef<number | null>(null)\n const isSwiping = useRef(false)\n\n const progress = useMemo(() => {\n if (galleryImages.length <= 1) return 0\n return (currentIndex / (galleryImages.length - 1)) * 100\n }, [currentIndex, galleryImages.length])\n\n useEffect(() => {\n document.body.style.overflow = 'hidden'\n document.body.style.touchAction = 'none'\n return () => {\n document.body.style.overflow = ''\n document.body.style.touchAction = ''\n }\n }, [])\n\n useEffect(() => {\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose()\n if (event.key === 'ArrowLeft') setCurrentIndex((i) => (i === 0 ? galleryImages.length - 1 : i - 1))\n if (event.key === 'ArrowRight') setCurrentIndex((i) => (i === galleryImages.length - 1 ? 0 : i + 1))\n }\n window.addEventListener('keydown', handleKey)\n return () => window.removeEventListener('keydown', handleKey)\n }, [galleryImages.length, onClose])\n\n const handleSliderPointer = (clientX: number) => {\n if (!sliderRef.current) return\n const rect = sliderRef.current.getBoundingClientRect()\n const x = clientX - rect.left\n const pct = Math.min(1, Math.max(0, x / rect.width))\n const idx = Math.round(pct * (galleryImages.length - 1))\n setCurrentIndex(idx)\n }\n\n return (\n <GalleryOverlay\n onClick={(event) => {\n if (event.target === event.currentTarget && !wasDraggingRef.current) onClose()\n }}\n >\n <GalleryHeader onClick={(event) => event.stopPropagation()}>\n <PropertyInfo>\n <h2>{title}</h2>\n <p>{subtitle}</p>\n </PropertyInfo>\n <CloseButton onClick={onClose} aria-label=\"Close gallery\">\n <svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M6 6l12 12M6 18L18 6\" />\n </svg>\n </CloseButton>\n </GalleryHeader>\n\n <SliderContainer onClick={(event) => event.stopPropagation()}>\n <SliderTrack\n ref={sliderRef}\n onMouseDown={(event) => {\n setIsDragging(true)\n wasDraggingRef.current = true\n handleSliderPointer(event.clientX)\n }}\n onMouseUp={() => setIsDragging(false)}\n onMouseMove={(event) => isDragging && handleSliderPointer(event.clientX)}\n onTouchStart={(event) => handleSliderPointer(event.touches[0].clientX)}\n onTouchMove={(event) => handleSliderPointer(event.touches[0].clientX)}\n >\n <SliderProgress $progress={progress} />\n <SliderThumb $position={progress} />\n </SliderTrack>\n <SliderLabels>\n {galleryImages.map((image, idx) => (\n <span key={image.label} onClick={() => setCurrentIndex(idx)} style={{ fontWeight: idx === currentIndex ? 600 : 400 }}>\n {image.label}\n </span>\n ))}\n </SliderLabels>\n </SliderContainer>\n\n <MainImageContainer\n onTouchStart={(event) => {\n touchStartX.current = event.touches[0].clientX\n touchStartY.current = event.touches[0].clientY\n }}\n onTouchMove={(event) => {\n if (touchStartX.current === null || touchStartY.current === null) return\n const deltaX = event.touches[0].clientX - touchStartX.current\n const deltaY = event.touches[0].clientY - touchStartY.current\n if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 12) {\n isSwiping.current = true\n event.preventDefault()\n }\n }}\n onTouchEnd={(event) => {\n if (!isSwiping.current || touchStartX.current === null) return\n const deltaX = event.changedTouches[0].clientX - touchStartX.current\n if (deltaX > 40) {\n setCurrentIndex((idx) => (idx === 0 ? galleryImages.length - 1 : idx - 1))\n } else if (deltaX < -40) {\n setCurrentIndex((idx) => (idx === galleryImages.length - 1 ? 0 : idx + 1))\n }\n touchStartX.current = null\n touchStartY.current = null\n isSwiping.current = false\n }}\n >\n <NavigationButton\n $dir=\"prev\"\n onClick={(event) => {\n event.stopPropagation()\n setCurrentIndex((idx) => (idx === 0 ? galleryImages.length - 1 : idx - 1))\n }}\n aria-label=\"Previous\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </NavigationButton>\n\n {galleryImages.map((image, idx) => (\n <MainImage key={image.alt} src={image.src} alt={image.alt} $visible={idx === currentIndex} />\n ))}\n\n {galleryImages[currentIndex]?.hotspots?.map((hotspot) => (\n <Hotspot\n key={hotspot.id}\n $visible\n style={{ left: `${hotspot.x}%`, top: `${hotspot.y}%` }}\n onMouseEnter={() => setActiveHotspotId(hotspot.id)}\n onMouseLeave={() => setActiveHotspotId(null)}\n onClick={(event) => {\n event.stopPropagation()\n setActiveHotspotId((prev) => (prev === hotspot.id ? null : hotspot.id))\n }}\n aria-label={hotspot.title}\n >\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 22 12 18.77 5.82 22 7 14.14 2 9.27l6.91-1.01z\" />\n </svg>\n </Hotspot>\n ))}\n {galleryImages[currentIndex]?.hotspots?.map((hotspot) => (\n <FeatureTooltip\n key={`tooltip-${hotspot.id}`}\n $visible={activeHotspotId === hotspot.id}\n style={{ left: `${hotspot.x}%`, top: `${hotspot.y}%` }}\n >\n <h4>{hotspot.title}</h4>\n <p>{hotspot.description}</p>\n </FeatureTooltip>\n ))}\n\n <NavigationButton\n $dir=\"next\"\n onClick={(event) => {\n event.stopPropagation()\n setCurrentIndex((idx) => (idx === galleryImages.length - 1 ? 0 : idx + 1))\n }}\n aria-label=\"Next\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </NavigationButton>\n\n <MobileDots>\n {galleryImages.map((_, idx) => (\n <MobileDot key={idx} $active={idx === currentIndex} onClick={() => setCurrentIndex(idx)} aria-label={`Go to ${idx + 1}`} />\n ))}\n </MobileDots>\n </MainImageContainer>\n\n <ThumbnailStrip onClick={(event) => event.stopPropagation()}>\n {galleryImages.map((image, idx) => (\n <Thumbnail key={image.alt} $active={idx === currentIndex} onClick={() => setCurrentIndex(idx)} aria-label={`Preview ${image.label}`}>\n <img src={image.src} alt={image.alt} />\n </Thumbnail>\n ))}\n </ThumbnailStrip>\n </GalleryOverlay>\n )\n}\n","import React, { useEffect, useRef, useState, useCallback, createContext, useContext } from 'react'\nimport styled, { keyframes, css } from 'styled-components'\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type ToastVariant = 'success' | 'error' | 'info' | 'pending'\n\nexport type ToastData = {\n id: string\n variant: ToastVariant\n title: string\n /** Human-readable amount e.g. \"20,000 USDC\" */\n amount?: string\n /** On-chain tx hash — shown truncated with a block explorer link */\n txHash?: string\n /** Explorer base URL, defaults to Base Sepolia */\n explorerUrl?: string\n /** Auto-dismiss after ms. 0 = never. Default 6000 */\n duration?: number\n}\n\n// ─── Animations ───────────────────────────────────────────────────────────────\n\nconst slideIn = keyframes`\n from { transform: translateX(110%); opacity: 0; }\n to { transform: translateX(0); opacity: 1; }\n`\n\nconst slideOut = keyframes`\n from { transform: translateX(0); opacity: 1; }\n to { transform: translateX(110%); opacity: 0; }\n`\n\nconst progressShrink = keyframes`\n from { width: 100%; }\n to { width: 0%; }\n`\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst VARIANT_COLORS: Record<ToastVariant, { accent: string; icon: string }> = {\n success: { accent: '#0ecb81', icon: '✓' },\n error: { accent: '#f6465d', icon: '✕' },\n info: { accent: '#E6C656', icon: 'ℹ' },\n pending: { accent: '#7EB3E6', icon: '◌' },\n}\n\nconst Wrapper = styled.div<{ $exiting: boolean }>`\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 340px;\n background: #0d0f1a;\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.04);\n animation: ${({ $exiting }) =>\n $exiting\n ? css`${slideOut} 0.28s cubic-bezier(0.4,0,1,1) forwards`\n : css`${slideIn} 0.32s cubic-bezier(0,0,0.2,1) forwards`};\n pointer-events: all;\n`\n\nconst Body = styled.div`\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 14px 16px 12px;\n`\n\nconst IconDot = styled.div<{ $color: string }>`\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: ${({ $color }) => $color}1a;\n border: 1px solid ${({ $color }) => $color}55;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.75rem;\n font-weight: 700;\n color: ${({ $color }) => $color};\n margin-top: 1px;\n`\n\nconst Content = styled.div`\n flex: 1;\n min-width: 0;\n`\n\nconst Title = styled.p`\n margin: 0 0 2px;\n font-size: 0.8rem;\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.01em;\n`\n\nconst Amount = styled.p`\n margin: 0 0 6px;\n font-size: 1.05rem;\n font-weight: 700;\n color: #E6C656;\n letter-spacing: -0.01em;\n`\n\nconst TxRow = styled.a`\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-family: 'IBM Plex Mono', 'Space Mono', monospace;\n font-size: 0.68rem;\n color: rgba(255, 255, 255, 0.4);\n text-decoration: none;\n transition: color 0.15s;\n &:hover {\n color: #7EB3E6;\n }\n`\n\nconst TxArrow = styled.span`\n font-size: 0.6rem;\n opacity: 0.6;\n`\n\nconst CloseBtn = styled.button`\n flex-shrink: 0;\n background: none;\n border: none;\n padding: 2px 4px;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.25);\n font-size: 0.9rem;\n line-height: 1;\n transition: color 0.15s;\n &:hover { color: rgba(255, 255, 255, 0.7); }\n`\n\nconst ProgressBar = styled.div<{ $color: string; $duration: number }>`\n height: 2px;\n background: rgba(255, 255, 255, 0.06);\n position: relative;\n &::after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n background: ${({ $color }) => $color};\n animation: ${css<{ $duration: number }>`${progressShrink} ${({ $duration }) => $duration}ms linear forwards`};\n }\n`\n\nconst Container = styled.div`\n position: fixed;\n bottom: 24px;\n right: 24px;\n z-index: 9999;\n display: flex;\n flex-direction: column-reverse;\n gap: 10px;\n pointer-events: none;\n`\n\n// ─── Single Toast ─────────────────────────────────────────────────────────────\n\ntype ToastItemProps = {\n toast: ToastData\n onDismiss: (id: string) => void\n}\n\nconst DEFAULT_EXPLORER = 'https://sepolia.basescan.org/tx/'\n\nfunction truncateHash(hash: string): string {\n return `${hash.slice(0, 6)}…${hash.slice(-4)}`\n}\n\nfunction ToastItem({ toast, onDismiss }: ToastItemProps) {\n const [exiting, setExiting] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const dismiss = useCallback(() => {\n setExiting(true)\n setTimeout(() => onDismiss(toast.id), 280)\n }, [onDismiss, toast.id])\n\n useEffect(() => {\n const duration = toast.duration ?? 6000\n if (duration > 0) {\n timerRef.current = setTimeout(dismiss, duration)\n }\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [dismiss, toast.duration])\n\n const { accent, icon } = VARIANT_COLORS[toast.variant]\n const duration = toast.duration ?? 6000\n const explorerBase = toast.explorerUrl ?? DEFAULT_EXPLORER\n const txUrl = toast.txHash ? `${explorerBase}${toast.txHash}` : undefined\n\n return (\n <Wrapper $exiting={exiting}>\n <Body>\n <IconDot $color={accent}>{icon}</IconDot>\n <Content>\n <Title>{toast.title}</Title>\n {toast.amount && <Amount>{toast.amount}</Amount>}\n {toast.txHash && txUrl && (\n <TxRow href={txUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {truncateHash(toast.txHash)}\n <TxArrow>↗</TxArrow>\n </TxRow>\n )}\n </Content>\n <CloseBtn type=\"button\" onClick={dismiss} aria-label=\"Dismiss\">✕</CloseBtn>\n </Body>\n {duration > 0 && <ProgressBar $color={accent} $duration={duration} />}\n </Wrapper>\n )\n}\n\n// ─── Context & Provider ───────────────────────────────────────────────────────\n\ntype ToastContextValue = {\n toast: (data: Omit<ToastData, 'id'>) => string\n dismiss: (id: string) => void\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = useState<ToastData[]>([])\n\n const addToast = useCallback((data: Omit<ToastData, 'id'>): string => {\n const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`\n setToasts((prev) => [...prev, { ...data, id }])\n return id\n }, [])\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n return (\n <ToastContext.Provider value={{ toast: addToast, dismiss }}>\n {children}\n <Container>\n {toasts.map((t) => (\n <ToastItem key={t.id} toast={t} onDismiss={dismiss} />\n ))}\n </Container>\n </ToastContext.Provider>\n )\n}\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within a ToastProvider')\n return ctx\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/cn.ts","../src/components/button.tsx","../src/components/badge.tsx","../src/components/card.tsx","../src/components/portfolio-summary.tsx","../src/components/house-position-slider.tsx","../src/components/house-position-slider-mobile.tsx","../src/components/loaf-liquidity-badge.tsx","../src/components/orderbook.tsx","../src/components/property-tour.tsx","../src/components/property-news-updates.tsx","../src/components/trading-slider.tsx","../src/components/mobile-trade-nav.tsx","../src/components/trade-confirmation-modal.tsx","../src/components/loaf-liquidity-logo.tsx","../src/components/your-orders.tsx","../src/components/price-chart.tsx","../src/components/property-hero-header.tsx","../src/components/header.tsx","../src/components/property-subheader.tsx","../src/components/login-popup.tsx","../src/components/property-compare-bar.tsx","../src/components/property-overview.tsx","../src/components/property-offers.tsx","../src/components/property-history.tsx","../src/components/property-documents.tsx","../src/components/property-inspection-times.tsx","../src/components/property-buy/constants.ts","../src/components/property-buy/asset-selector-bar.tsx","../src/components/property-buy/offering-progress-card.tsx","../src/components/property-buy/video-activity-section.tsx","../src/components/property-buy/order-panel.tsx","../src/components/property-buy/gallery-map-section.tsx","../src/components/property-buy/news-orders-section.tsx","../src/components/property-buy/order-confirmation-modal.tsx","../src/components/property-buy.tsx","../src/components/payment-popup.tsx","../src/components/owner-booking.tsx","../src/components/property-valuation.tsx","../src/components/property-photo-gallery.tsx","../src/components/toast.tsx"],"names":["React","cva","React2","jsx","React3","React4","formatCurrency","formatPercent","jsxs","clamp","fmt0","React6","styled","React7","React8","React9","React10","styles","React11","React12","Fragment","pulse","keyframes","shimmer","LogoContainer","IconWrapper","IconCircle","IconCore","LogoText","LoafLogoImage","LiquidityText","headerStyle","titleStyle","React13","formatPrice","React14","timeScale","React15","useState","useEffect","Button","React17","newOtp","Overlay","React19","PriceBlock","css","useMemo","Section","SectionHeading","StatusMessage","STATUS_COLOR","Header","MetricLabel","MetricValue","Card","Divider","PanelHeader","Row","Badge","formatDate","useRef","useCallback","BiChevronDown","ConfirmButton","BiX","CloseButton","Thumbnail","Title","ProgressBar","Container","duration"],"mappings":"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","file":"index.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary: \"bg-teal-500 text-slate-950 hover:bg-teal-400 focus-visible:ring-teal-200\",\n onboarding:\n \"rounded-lg bg-[#F2D898] text-[#0A0C15] shadow-[0_20px_60px_rgba(242,216,152,0.35)] transition will-change-transform hover:-translate-y-0.5 hover:brightness-110 focus-visible:ring-[#F2D898]/50 focus-visible:ring-offset-[#0A0C15]\",\n onboardingOutline:\n \"rounded-lg border border-[#F2D898] bg-transparent text-white hover:bg-white/5 focus-visible:ring-[#F2D898]/50 focus-visible:ring-offset-[#0A0C15]\",\n accent:\n \"bg-[var(--color-accent,#e6c87e)] text-black hover:bg-[var(--color-accent-hover,#f8d12f)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n accentOutline:\n \"border border-[var(--color-accent,#e6c87e)] bg-transparent text-[var(--color-accent,#e6c87e)] hover:bg-[rgba(230,200,126,0.10)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n media:\n \"border border-white/10 bg-transparent text-white/90 hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n outline:\n \"border border-slate-800/20 bg-white text-slate-900 hover:border-slate-800/40 focus-visible:ring-slate-200\",\n ghost:\n \"bg-transparent text-slate-900 hover:bg-slate-900/5 focus-visible:ring-slate-200\",\n danger: \"bg-rose-500 text-white hover:bg-rose-400 focus-visible:ring-rose-200\",\n },\n size: {\n sm: \"h-9 px-4 text-sm\",\n md: \"h-11 px-6 text-base\",\n lg: \"h-12 px-7 text-lg\",\n icon: \"h-10 w-10\",\n },\n radius: {\n pill: \"rounded-full\",\n md: \"rounded\",\n square: \"rounded-lg\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n radius: \"pill\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, radius, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n const coercedRadius =\n radius ?? (variant === \"onboarding\" || variant === \"onboardingOutline\" ? \"square\" : undefined);\n return (\n <Comp\n ref={ref}\n className={cn(buttonVariants({ variant, size, radius: coercedRadius }), className)}\n {...props}\n />\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-3 py-1 text-xs font-semibold uppercase tracking-wide transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-slate-900 text-white focus-visible:ring-slate-300\",\n muted:\n \"border-transparent bg-slate-100 text-slate-600 focus-visible:ring-slate-200\",\n outline: \"border-slate-200 bg-white text-slate-600 focus-visible:ring-slate-200\",\n success:\n \"border-transparent bg-teal-500/15 text-teal-600 focus-visible:ring-teal-200\",\n active:\n \"border-transparent bg-[rgba(14,203,129,0.25)] text-[#0ecb81] focus-visible:ring-[rgba(14,203,129,0.35)]\",\n pending:\n \"border-transparent bg-white/10 text-white/60 focus-visible:ring-white/20\",\n rejected:\n \"border-transparent bg-[rgba(246,70,93,0.20)] text-[#f6465d] focus-visible:ring-[rgba(246,70,93,0.30)]\",\n },\n size: {\n sm: \"px-2.5 py-0.5 text-[11px]\",\n md: \"px-3 py-1 text-xs\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props} />\n )\n);\n\nBadge.displayName = \"Badge\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:shadow-md\",\n className\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-xl font-semibold tracking-tight text-slate-900\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-slate-500\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-6 pb-6 pt-2 text-sm text-slate-600\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center border-t border-slate-100 px-6 py-4\", className)} {...props} />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"./card\";\n\nconst defaultFormatCurrency = (value: number) =>\n new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n\nconst defaultFormatPercent = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${Math.abs(value).toFixed(2)}%`;\n};\n\nconst defaultFormatSignedCurrency = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${defaultFormatCurrency(Math.abs(value))}`;\n};\n\nexport interface PortfolioSummaryProps extends React.HTMLAttributes<HTMLDivElement> {\n availableCash: number;\n portfolioValue: number;\n totalReturnPercent: number;\n unrealizedPnl: number;\n onResetAccount?: () => void;\n positionsHeading?: string;\n emptyPositionsText?: string;\n formatCurrency?: (value: number) => string;\n formatPercent?: (value: number) => string;\n formatSignedCurrency?: (value: number) => string;\n children?: React.ReactNode;\n}\n\nexport const PortfolioSummary = React.forwardRef<HTMLDivElement, PortfolioSummaryProps>(\n (\n {\n availableCash,\n portfolioValue,\n totalReturnPercent,\n unrealizedPnl,\n onResetAccount,\n positionsHeading = \"Current Positions\",\n emptyPositionsText = \"No positions yet. Start trading to build your portfolio!\",\n formatCurrency = defaultFormatCurrency,\n formatPercent = defaultFormatPercent,\n formatSignedCurrency = defaultFormatSignedCurrency,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const totalReturnClassName = totalReturnPercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n const pnlClassName = unrealizedPnl >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[560px] rounded-[12px] border border-white/10 bg-black/30 p-6 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"p-0 pb-4\">\n <div className=\"flex items-center justify-between gap-4\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">Portfolio Summary</CardTitle>\n {onResetAccount ? (\n <button\n type=\"button\"\n onClick={onResetAccount}\n className=\"cursor-pointer rounded-[6px] border border-white/20 bg-white/10 px-[0.7rem] py-[0.35rem] text-xs text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n Reset Account\n </button>\n ) : null}\n </div>\n <div className=\"mt-3 h-px w-full bg-white/10\" />\n </CardHeader>\n\n <CardContent className=\"p-0 pt-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Available Cash</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(availableCash)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Portfolio Value</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(portfolioValue)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Total Return</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", totalReturnClassName)}>\n {formatPercent(totalReturnPercent)}\n </p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Unrealized P&L</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", pnlClassName)}>\n {formatSignedCurrency(unrealizedPnl)}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <p className=\"m-0 text-[0.9rem] font-medium text-white/70\">{positionsHeading}</p>\n <div className=\"mt-3\">\n {children ? (\n children\n ) : (\n <p className=\"py-4 text-center text-[0.85rem] text-white/40\">{emptyPositionsText}</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n }\n);\n\nPortfolioSummary.displayName = \"PortfolioSummary\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { type OrderbookLevel } from \"./orderbook\";\n\nexport type HousePositionPendingOrder = {\n type: \"buy\" | \"sell\";\n tokens: number;\n value: number;\n price: number;\n};\n\nexport type HousePositionSliderOrderPayload = {\n side: \"buy\" | \"sell\";\n orderType: \"market\" | \"limit\";\n tokenId: string;\n tokenSymbol: string;\n price: number;\n deltaTokens: number;\n deltaValue: number;\n targetOwnership: number;\n targetTokens: number;\n targetValue: number;\n};\n\nexport type HousePositionOrderbook = {\n bids?: OrderbookLevel[];\n asks?: OrderbookLevel[];\n};\n\nexport interface HousePositionSliderProps extends React.HTMLAttributes<HTMLDivElement> {\n tokenId: string;\n tokenSymbol: string;\n totalTokens: number;\n currentPrice: number;\n availableCash: number;\n tokensHeld: number;\n pendingOrders?: HousePositionPendingOrder[];\n defaultOrderType?: \"market\" | \"limit\";\n orderbook?: HousePositionOrderbook;\n ownershipPercentOverride?: number;\n onConfirmOrder?: (payload: HousePositionSliderOrderPayload) => void;\n}\n\nconst clamp = (v: number, min: number, max: number) => Math.min(max, Math.max(min, v));\nconst fmt0 = (v: number) => Math.abs(v).toLocaleString(undefined, { maximumFractionDigits: 0 });\n\ntype MarketFillResult = {\n tokens: number;\n value: number;\n avgPrice: number | null;\n};\n\nconst normalizeLevels = (levels: OrderbookLevel[] = []) =>\n levels.filter((level) => Number.isFinite(level.price) && level.price > 0 && Number.isFinite(level.amount) && level.amount > 0);\n\nconst estimateMarketBuyFromUsd = (levels: OrderbookLevel[] = [], usdAmount: number): MarketFillResult => {\n if (!Number.isFinite(usdAmount) || usdAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingUsd = usdAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingUsd <= 0) break;\n const levelValueCapacity = level.amount * level.price;\n const usdToSpend = Math.min(remainingUsd, levelValueCapacity);\n const tokensFromLevel = usdToSpend / level.price;\n tokensFilled += tokensFromLevel;\n spent += usdToSpend;\n remainingUsd -= usdToSpend;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketBuyFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n spent += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketSellFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const bids = normalizeLevels(levels).sort((a, b) => b.price - a.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let received = 0;\n\n for (const level of bids) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n received += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: received,\n avgPrice: tokensFilled > 0 ? received / tokensFilled : null,\n };\n};\n\nexport function HousePositionSlider({\n tokenId,\n tokenSymbol,\n totalTokens,\n currentPrice,\n availableCash,\n tokensHeld,\n pendingOrders = [],\n defaultOrderType = \"market\",\n orderbook,\n ownershipPercentOverride,\n onConfirmOrder,\n className,\n ...props\n}: HousePositionSliderProps) {\n const [orderMode, setOrderMode] = React.useState<\"none\" | \"buy\" | \"sell\">(\"none\");\n const [buyTrackingMode, setBuyTrackingMode] = React.useState<\"dollars\" | \"tokens\">(\"dollars\");\n const [deltaDollars, setDeltaDollars] = React.useState(0);\n const [deltaTokensBuy, setDeltaTokensBuy] = React.useState(0);\n const [deltaTokensSell, setDeltaTokensSell] = React.useState(0);\n const [_isDragging, setIsDragging] = React.useState(false);\n const [visualTargetPct, setVisualTargetPct] = React.useState<number | null>(null);\n\n const [orderType, setOrderType] = React.useState<\"market\" | \"limit\">(defaultOrderType);\n const [limitPrice, setLimitPrice] = React.useState(currentPrice);\n const [limitPriceInput, setLimitPriceInput] = React.useState(currentPrice.toFixed(2));\n const [limitPriceDirty, setLimitPriceDirty] = React.useState(false);\n\n const [ownershipInput, setOwnershipInput] = React.useState(\"\");\n const [tokenAmountInput, setTokenAmountInput] = React.useState(\"\");\n\n const houseRef = React.useRef<HTMLDivElement | null>(null);\n\n const asks = orderbook?.asks ?? [];\n const bids = orderbook?.bids ?? [];\n\n React.useEffect(() => {\n if (orderType !== \"limit\") return;\n if (limitPriceDirty) return;\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n }, [currentPrice, limitPriceDirty, orderType]);\n\n const effectivePrice = orderType === \"limit\" ? limitPrice : currentPrice;\n const pendingBuyValue = pendingOrders.filter((o) => o.type === \"buy\").reduce((s, o) => s + o.value, 0);\n const pendingSellTokens = pendingOrders.filter((o) => o.type === \"sell\").reduce((s, o) => s + Math.abs(o.tokens), 0);\n\n const effectiveAvailableCash = Math.max(0, availableCash - pendingBuyValue);\n const effectiveTokensHeld = Math.max(0, tokensHeld - pendingSellTokens);\n\n const holdingsValue = tokensHeld * effectivePrice;\n const safeTotalTokens = totalTokens > 0 ? totalTokens : 1;\n const baselineOwnershipActual = clamp((effectiveTokensHeld / safeTotalTokens) * 100, 0, 100);\n\n let deltaTokens = 0;\n let deltaValue = 0;\n let marketAvgPrice: number | null = null;\n let targetTokens = tokensHeld;\n let targetValue = holdingsValue;\n\n const limitPriceSafe = limitPrice > 0 ? limitPrice : currentPrice || 1;\n\n if (orderMode === \"buy\") {\n if (orderType === \"market\") {\n if (buyTrackingMode === \"tokens\") {\n const desiredTokens = Math.max(0, deltaTokensBuy);\n const result = estimateMarketBuyFromTokens(asks, desiredTokens);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n const result = estimateMarketBuyFromUsd(asks, notional);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n }\n } else {\n if (buyTrackingMode === \"tokens\") {\n deltaTokens = deltaTokensBuy;\n deltaValue = deltaTokensBuy * limitPriceSafe;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n deltaValue = notional;\n deltaTokens = notional / limitPriceSafe;\n }\n }\n } else if (orderMode === \"sell\") {\n if (orderType === \"market\") {\n const tokensToSell = Math.abs(deltaTokensSell);\n const result = estimateMarketSellFromTokens(bids, tokensToSell);\n deltaTokens = -result.tokens;\n deltaValue = -result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n deltaTokens = deltaTokensSell;\n deltaValue = deltaTokensSell * limitPriceSafe;\n }\n }\n\n targetTokens = tokensHeld + deltaTokens;\n targetValue = targetTokens * effectivePrice;\n\n const sliderTargetTokens = clamp(effectiveTokensHeld + deltaTokens, 0, safeTotalTokens);\n const normalizedTargetPct = (sliderTargetTokens / safeTotalTokens) * 100;\n\n const isIncrease = orderMode === \"buy\";\n const hasChange = orderMode !== \"none\" && (Math.abs(deltaTokens) > 0.001 || Math.abs(deltaValue) > 0.01);\n\n const currentOwnership = totalTokens <= 0 ? 0 : clamp((tokensHeld / totalTokens) * 100, 0, 100);\n const targetOwnership = totalTokens <= 0 ? 0 : clamp((targetTokens / totalTokens) * 100, 0, 100);\n\n const ownershipOverrideValue =\n typeof ownershipPercentOverride === \"number\" && Number.isFinite(ownershipPercentOverride)\n ? clamp(ownershipPercentOverride, 0, 100)\n : null;\n const ownershipShift = ownershipOverrideValue != null ? ownershipOverrideValue - baselineOwnershipActual : 0;\n const baselinePct = clamp(ownershipOverrideValue ?? baselineOwnershipActual, 0, 100);\n const impliedTargetPct = clamp(normalizedTargetPct + ownershipShift, 0, 100);\n const displayTargetPct = visualTargetPct ?? impliedTargetPct;\n const targetPct = displayTargetPct;\n const displayCurrentOwnership = clamp(ownershipOverrideValue ?? currentOwnership, 0, 100);\n const impliedDisplayTargetOwnership = clamp(targetOwnership + ownershipShift, 0, 100);\n const displayTargetOwnership = visualTargetPct ?? impliedDisplayTargetOwnership;\n\n const estFeeTokens = (Math.abs(deltaValue) * 0.005) / (effectivePrice || 1);\n\n const resetOrder = React.useCallback(() => {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n setVisualTargetPct(null);\n }, []);\n\n const updateOrderFromTargetValue = React.useCallback(\n (newTargetValue: number) => {\n const newDeltaValue = newTargetValue - holdingsValue;\n\n if (newDeltaValue > 0) {\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(Math.min(newDeltaValue, effectiveAvailableCash));\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (newDeltaValue < 0) {\n const newDeltaTokens = newTargetValue / (effectivePrice || 1) - tokensHeld;\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(newDeltaTokens, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, holdingsValue, resetOrder, tokensHeld]\n );\n\n const updateOrderFromOwnership = React.useCallback(\n (newOwnershipPercent: number) => {\n const nextOwnership = clamp(newOwnershipPercent, 0, 100);\n const newTargetTokens = (nextOwnership / 100) * totalTokens;\n updateOrderFromTargetValue(newTargetTokens * effectivePrice);\n setVisualTargetPct(nextOwnership);\n },\n [effectivePrice, totalTokens, updateOrderFromTargetValue]\n );\n\n const updateOrderFromTokenAmount = React.useCallback(\n (tokenAmountSigned: number) => {\n if (tokenAmountSigned > 0) {\n const maxTokens = effectiveAvailableCash / (effectivePrice || 1);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"tokens\");\n setDeltaTokensBuy(Math.min(tokenAmountSigned, maxTokens));\n setDeltaDollars(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (tokenAmountSigned < 0) {\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(tokenAmountSigned, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, resetOrder]\n );\n\n const updateOrderFromSlider = React.useCallback(\n (pct: number) => {\n const normalized = (pct - 50) / 50;\n const magnitude = Math.min(Math.abs(normalized), 1);\n if (magnitude < 0.02) {\n resetOrder();\n setVisualTargetPct(null);\n return;\n }\n if (normalized > 0) {\n const notional = clamp(magnitude * effectiveAvailableCash, 0, effectiveAvailableCash);\n if (notional <= 0) {\n resetOrder();\n setVisualTargetPct(null);\n return;\n }\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(notional);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n setVisualTargetPct(clamp(pct, 0, 100));\n return;\n }\n if (normalized < 0) {\n const tokensToSell = clamp(magnitude * effectiveTokensHeld, 0, effectiveTokensHeld);\n if (tokensToSell <= 0) {\n resetOrder();\n setVisualTargetPct(null);\n return;\n }\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(-tokensToSell);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setVisualTargetPct(clamp(pct, 0, 100));\n return;\n }\n resetOrder();\n setVisualTargetPct(null);\n },\n [effectiveAvailableCash, effectiveTokensHeld, resetOrder]\n );\n\n const handleDragAtClientY = React.useCallback(\n (clientY: number) => {\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const y = clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n updateOrderFromSlider(pct);\n },\n [updateOrderFromSlider]\n );\n\n const onMouseDown = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n\n const onMove = (ev: MouseEvent) => handleDragAtClientY(ev.clientY);\n const onUp = () => {\n setIsDragging(false);\n document.removeEventListener(\"mousemove\", onMove);\n document.removeEventListener(\"mouseup\", onUp);\n };\n\n document.addEventListener(\"mousemove\", onMove);\n document.addEventListener(\"mouseup\", onUp);\n };\n\n const onTouchStart = () => {\n setIsDragging(true);\n\n const onMove = (ev: TouchEvent) => {\n const touch = ev.touches[0];\n if (!touch) return;\n handleDragAtClientY(touch.clientY);\n };\n const onEnd = () => {\n setIsDragging(false);\n document.removeEventListener(\"touchmove\", onMove);\n document.removeEventListener(\"touchend\", onEnd);\n };\n\n document.addEventListener(\"touchmove\", onMove);\n document.addEventListener(\"touchend\", onEnd);\n };\n\n const handleCancel = () => {\n resetOrder();\n };\n\n const handleOrderTypeSelection = (next: \"market\" | \"limit\") => {\n setOrderType(next);\n if (next === \"limit\") {\n setLimitPriceDirty(false);\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n } else {\n setLimitPriceDirty(false);\n }\n };\n\n const handleConfirm = () => {\n if (!hasChange) return;\n const priceToUse = orderType === \"market\" ? marketAvgPrice ?? currentPrice : limitPrice;\n onConfirmOrder?.({\n side: isIncrease ? \"buy\" : \"sell\",\n orderType,\n tokenId,\n tokenSymbol,\n price: priceToUse,\n deltaTokens,\n deltaValue,\n targetOwnership,\n targetTokens,\n targetValue,\n });\n handleCancel();\n };\n\n const rectTop = 10;\n const rectBottom = 150;\n const totalFillableHeight = rectBottom - rectTop;\n const baselineFillHeight = (baselinePct / 100) * totalFillableHeight;\n const targetFillHeight = (targetPct / 100) * totalFillableHeight;\n const baselineFillY = rectBottom - baselineFillHeight;\n const targetFillY = rectBottom - targetFillHeight;\n\n const showIncrease = targetPct > baselinePct;\n const showDecrease = targetPct < baselinePct;\n\n const valueLabel = orderType === \"limit\" ? `${tokenSymbol} Owned at Limit` : `${tokenSymbol} Owned`;\n const deltaSign = deltaValue > 0 ? \"+\" : deltaValue < 0 ? \"-\" : \"\";\n const percentMarkers = [100, 50, 25, 0];\n\n return (\n <div className={cn(\"relative flex w-full flex-col items-center gap-6 rounded-[12px] bg-black/20 px-8 pb-6 pt-12\", className)} {...props}>\n <div className=\"absolute left-4 top-4 text-[1.1rem] font-semibold tracking-[0.5px] text-white\">Place Order</div>\n\n {hasChange ? (\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"absolute right-3 top-3 rounded-[6px] border border-white/20 bg-white/10 px-2.5 py-1.5 text-[0.7rem] text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n ✕ Cancel\n </button>\n ) : null}\n\n <div className=\"text-center\">\n <div className=\"mb-2 text-xs uppercase tracking-[1px] text-[#888]\">{valueLabel}</div>\n <div className=\"flex items-baseline justify-center gap-3\">\n <span\n className={cn(\n \"text-[2.2rem] font-semibold\",\n deltaValue >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n {deltaSign}${fmt0(deltaValue)}\n </span>\n <span className=\"text-lg font-semibold text-white/60\">${fmt0(targetValue)}</span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-[200px] flex-col justify-between text-xs text-white/40\">\n {percentMarkers.map((marker) => (\n <span key={marker}>{marker}%</span>\n ))}\n </div>\n <div\n ref={houseRef}\n className=\"h-[200px] w-[160px] select-none touch-none\"\n style={{ cursor: \"ns-resize\" }}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n <svg viewBox=\"0 0 120 160\" className=\"h-full w-full overflow-visible\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"rgba(255,255,255,0.04)\" stroke=\"rgba(255,255,255,0.10)\" />\n <clipPath id=\"loaf-clip\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" />\n </clipPath>\n <g clipPath=\"url(#loaf-clip)\">\n <rect x=\"10\" y={showDecrease ? targetFillY : baselineFillY} width=\"100\" height={showDecrease ? targetFillHeight : baselineFillHeight} fill=\"rgba(220,175,120,0.7)\" />\n {showIncrease ? (\n <rect x=\"10\" y={targetFillY} width=\"100\" height={targetFillHeight - baselineFillHeight} fill=\"rgba(14,203,129,0.35)\" />\n ) : null}\n {showDecrease ? (\n <rect x=\"10\" y={baselineFillY} width=\"100\" height={baselineFillHeight - targetFillHeight} fill=\"rgba(246,70,93,0.35)\" />\n ) : null}\n <line x1=\"12\" y1={targetFillY} x2=\"108\" y2={targetFillY} stroke={showIncrease ? \"#0ecb81\" : showDecrease ? \"#f6465d\" : \"rgba(234,217,162,1)\"} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </g>\n </svg>\n </div>\n </div>\n\n <button\n type=\"button\"\n disabled={!hasChange}\n onClick={handleConfirm}\n className={cn(\n \"w-full rounded-[10px] px-4 py-4 text-base font-semibold transition\",\n !hasChange\n ? \"cursor-not-allowed bg-white/10 text-white/30\"\n : isIncrease\n ? \"bg-[#0ecb81] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(14,203,129,0.3)]\"\n : \"bg-[#f6465d] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(246,70,93,0.3)]\"\n )}\n >\n {!hasChange ? \"Adjust Position\" : isIncrease ? `Buy $${fmt0(deltaValue)}` : `Sell $${fmt0(deltaValue)}`}\n </button>\n\n <div className=\"w-full border-t border-white/10 py-4 text-[0.85rem]\">\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{tokenSymbol} Ownership</span>\n <span className=\"text-white\">\n {displayCurrentOwnership.toFixed(2)}%\n <span className=\"mx-1.5 text-white/50\">→</span>\n <input\n type=\"text\"\n value={ownershipInput || displayTargetOwnership.toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setOwnershipInput(val);\n }}\n onFocus={() => setOwnershipInput(displayTargetOwnership.toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(ownershipInput);\n if (Number.isFinite(num)) updateOrderFromOwnership(num);\n setOwnershipInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[70px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n displayTargetOwnership >= displayCurrentOwnership\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n </span>\n </div>\n\n {orderType === \"market\" ? null : (\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{isIncrease ? \"Buying\" : \"Selling\"}</span>\n <span className=\"inline-flex items-center gap-1\">\n {orderMode === \"buy\" && buyTrackingMode === \"dollars\" ? <span className=\"mr-1 text-[#0ecb81]\">~</span> : null}\n <input\n type=\"text\"\n value={tokenAmountInput || Math.abs(deltaTokens).toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setTokenAmountInput(val);\n }}\n onFocus={() => setTokenAmountInput(Math.abs(deltaTokens).toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(tokenAmountInput);\n if (Number.isFinite(num) && num >= 0) {\n const signed = isIncrease || orderMode === \"none\" ? num : -num;\n updateOrderFromTokenAmount(signed);\n }\n setTokenAmountInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[90px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n isIncrease\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n <span className={cn(\"font-semibold\", isIncrease ? \"text-[#0ecb81]\" : \"text-[#f6465d]\")}>tokens</span>\n </span>\n </div>\n )}\n\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">Est. Fee</span>\n <span className=\"text-white\">{estFeeTokens.toFixed(6)} {tokenSymbol}</span>\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"mb-4 flex w-full rounded-[8px] bg-white/5 p-[3px]\">\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"market\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"market\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Market\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"limit\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"limit\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Limit\n </button>\n </div>\n\n {orderType === \"limit\" ? (\n <div className=\"relative mb-4\">\n <input\n type=\"text\"\n value={limitPriceInput}\n onChange={(e) => {\n const input = e.target.value;\n if (input === \"\" || /^[0-9]*\\.?[0-9]*$/.test(input)) {\n setLimitPriceDirty(true);\n setLimitPriceInput(input);\n const num = Number.parseFloat(input);\n if (Number.isFinite(num) && num > 0) setLimitPrice(num);\n }\n }}\n onBlur={() => {\n const num = Number.parseFloat(limitPriceInput);\n if (Number.isFinite(num) && num > 0) {\n setLimitPriceInput(num.toFixed(2));\n setLimitPrice(num);\n } else {\n setLimitPriceInput(limitPrice.toFixed(2));\n }\n }}\n placeholder=\"Price\"\n className=\"w-full rounded-[8px] border border-white/10 bg-black/30 px-4 py-3 pr-14 text-[0.95rem] text-white outline-none focus:border-[#f0b90b]\"\n />\n <span className=\"absolute right-4 top-1/2 -translate-y-1/2 text-[0.8rem] text-white/50\">USD</span>\n </div>\n ) : null}\n\n <div className=\"flex items-center justify-between text-xs text-white/50\">\n <span>Available: ${availableCash.toLocaleString()}</span>\n <button type=\"button\" className=\"text-[#f0b90b] hover:underline\">\n Add Funds\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn as _cn } from \"../lib/cn\";\nimport { type OrderbookLevel } from \"./orderbook\";\n\nexport type HousePositionSliderMobileOrderPayload = {\n side: \"buy\" | \"sell\";\n orderType: \"market\" | \"limit\";\n tokenId: string;\n tokenSymbol: string;\n price: number;\n deltaTokens: number;\n deltaValue: number;\n targetOwnership: number;\n targetTokens: number;\n targetValue: number;\n};\n\nexport type HousePositionSliderMobileOrderbook = {\n bids?: OrderbookLevel[];\n asks?: OrderbookLevel[];\n};\n\nexport interface HousePositionSliderMobileProps extends React.HTMLAttributes<HTMLDivElement> {\n tokenId: string;\n tokenSymbol: string;\n totalTokens: number;\n currentPrice: number;\n availableCash: number;\n tokensHeld: number;\n defaultOrderType?: \"market\" | \"limit\";\n orderbook?: HousePositionSliderMobileOrderbook;\n ownershipPercentOverride?: number;\n onConfirmOrder?: (payload: HousePositionSliderMobileOrderPayload) => void;\n}\n\nconst clamp = (v: number, min: number, max: number) => Math.min(max, Math.max(min, v));\nconst fmt0 = (v: number) => Math.abs(v).toLocaleString(undefined, { maximumFractionDigits: 0 });\n\n// Styles copied exactly from loaf-demo/src/components/HousePositionSlider/HousePositionSlider.jsx\nconst styles = {\n // SliderContainer @media (max-width: 1024px)\n sliderContainer: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n padding: \"1.5rem 1rem 0.75rem\",\n background: \"#111111\",\n borderRadius: \"12px\",\n gap: \"0.4rem\",\n position: \"relative\" as const,\n border: \"1px solid rgba(255, 255, 255, 0.1)\",\n overflow: \"hidden\",\n },\n // ValueDisplay @media (max-width: 1024px)\n valueDisplay: {\n textAlign: \"center\" as const,\n marginBottom: \"0.2rem\",\n },\n // ValueLabel @media (max-width: 1024px)\n valueLabel: {\n fontSize: \"0.65rem\",\n color: \"#C9A227\",\n textTransform: \"uppercase\" as const,\n letterSpacing: \"1px\",\n marginBottom: \"0.2rem\",\n },\n // ValueAmount @media (max-width: 1024px)\n valueAmount: {\n fontSize: \"1.1rem\",\n fontWeight: 700,\n color: \"#fff\",\n display: \"inline-flex\",\n alignItems: \"baseline\",\n gap: \"0.3rem\",\n },\n // HouseWrapper @media (max-width: 1024px)\n houseWrapper: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"0.75rem\",\n margin: \"0.25rem 0\",\n width: \"100%\",\n },\n // HouseContainer @media (max-width: 1024px)\n houseContainer: {\n position: \"relative\" as const,\n width: \"100px\",\n height: \"130px\",\n cursor: \"ns-resize\",\n touchAction: \"none\" as const,\n userSelect: \"none\" as const,\n },\n // MobilePercentButtons @media (max-width: 1024px)\n mobilePercentButtons: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n justifyContent: \"space-between\",\n height: \"130px\",\n position: \"absolute\" as const,\n left: \"-38px\",\n top: 0,\n },\n // MobilePercentBtn\n mobilePercentBtn: {\n background: \"rgba(255, 255, 255, 0.05)\",\n border: \"1px solid rgba(255, 255, 255, 0.2)\",\n borderRadius: \"4px\",\n color: \"rgba(255, 255, 255, 0.6)\",\n fontSize: \"0.55rem\",\n padding: \"0.25rem 0.35rem\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n textAlign: \"center\" as const,\n minWidth: \"32px\",\n outline: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n },\n // ConfirmButton @media (max-width: 1024px)\n confirmButton: {\n width: \"100%\",\n padding: \"0.65rem\",\n fontSize: \"0.85rem\",\n fontWeight: 600,\n border: \"none\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\",\n },\n // SummarySection @media (max-width: 1024px)\n summarySection: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"0.4rem\",\n padding: \"0.6rem\",\n background: \"rgba(0, 0, 0, 0.2)\",\n borderRadius: \"8px\",\n marginTop: 0,\n },\n // BoxedSummaryRow @media (max-width: 1024px)\n boxedSummaryRow: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n background: \"transparent\",\n borderRadius: \"6px\",\n padding: \"0.35rem 0.5rem\",\n cursor: \"text\",\n flexWrap: \"nowrap\" as const,\n fontSize: \"0.75rem\",\n },\n // SummaryLabel @media (max-width: 1024px)\n summaryLabel: {\n color: \"rgba(255, 255, 255, 0.6)\",\n fontSize: \"0.7rem\",\n whiteSpace: \"nowrap\" as const,\n },\n // SummaryValue @media (max-width: 1024px)\n summaryValue: {\n color: \"#fff\",\n fontWeight: 500,\n fontSize: \"0.8rem\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.25rem\",\n overflow: \"hidden\",\n flexShrink: 1,\n minWidth: 0,\n },\n // BoxedInput @media (max-width: 1024px)\n boxedInput: {\n background: \"transparent\",\n border: \"none\",\n fontWeight: 600,\n fontSize: \"0.8rem\",\n width: \"50px\",\n textAlign: \"right\" as const,\n outline: \"none\",\n padding: 0,\n flexShrink: 0,\n },\n // InputSuffix @media (max-width: 1024px)\n inputSuffix: {\n fontWeight: 600,\n fontSize: \"0.65rem\",\n marginLeft: \"0.2rem\",\n display: \"inline-flex\",\n alignItems: \"center\",\n lineHeight: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\" as const,\n whiteSpace: \"nowrap\" as const,\n maxWidth: \"80px\",\n },\n // SummaryRow @media (max-width: 1024px)\n summaryRow: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.8rem\",\n },\n // OrderTypeToggle @media (max-width: 1024px)\n orderTypeToggle: {\n display: \"flex\",\n backgroundColor: \"rgba(255, 255, 255, 0.05)\",\n borderRadius: \"6px\",\n padding: \"2px\",\n marginBottom: 0,\n width: \"100%\",\n },\n // OrderTypeButton @media (max-width: 1024px)\n orderTypeButton: {\n flex: 1,\n padding: \"0.35rem\",\n fontSize: \"0.7rem\",\n fontWeight: 500,\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n // AvailableFunds\n availableFunds: {\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"rgba(255, 255, 255, 0.5)\",\n },\n // AddFundsButton\n addFundsButton: {\n background: \"none\",\n border: \"none\",\n color: \"#f0b90b\",\n fontSize: \"0.75rem\",\n cursor: \"pointer\",\n padding: 0,\n },\n};\n\nexport function HousePositionSliderMobile({\n tokenId,\n tokenSymbol,\n totalTokens,\n currentPrice,\n availableCash,\n tokensHeld,\n defaultOrderType = \"market\",\n orderbook,\n ownershipPercentOverride,\n onConfirmOrder,\n className,\n ...props\n}: HousePositionSliderMobileProps) {\n const [orderMode, setOrderMode] = React.useState<\"none\" | \"buy\" | \"sell\">(\"none\");\n const [deltaDollars, setDeltaDollars] = React.useState(0);\n const [deltaTokensSell, setDeltaTokensSell] = React.useState(0);\n const [deltaTokensBuy, setDeltaTokensBuy] = React.useState(0);\n const [buyTrackingMode, setBuyTrackingMode] = React.useState<\"dollars\" | \"tokens\">(\"dollars\");\n\n const [orderType, setOrderType] = React.useState<\"market\" | \"limit\">(defaultOrderType);\n const [limitPrice, setLimitPrice] = React.useState(currentPrice);\n const [limitPriceInput, setLimitPriceInput] = React.useState(currentPrice.toFixed(2));\n const [limitPriceDirty, setLimitPriceDirty] = React.useState(false);\n\n const [tokenAmountInput, setTokenAmountInput] = React.useState(\"\");\n\n const houseRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (orderType !== \"limit\") return;\n if (limitPriceDirty) return;\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n }, [orderType, currentPrice, limitPriceDirty]);\n\n const effectivePrice = orderType === \"limit\" ? limitPrice : currentPrice;\n const holdingsValue = tokensHeld * effectivePrice;\n const totalCapacity = holdingsValue + availableCash;\n const baselinePct = totalCapacity > 0 ? (holdingsValue / totalCapacity) * 100 : 0;\n\n let deltaTokens: number;\n let deltaValue: number;\n let targetTokens: number;\n let targetValue: number;\n\n if (orderMode === \"buy\") {\n if (buyTrackingMode === \"tokens\") {\n deltaTokens = deltaTokensBuy;\n deltaValue = deltaTokensBuy * effectivePrice;\n targetTokens = tokensHeld + deltaTokensBuy;\n targetValue = targetTokens * effectivePrice;\n } else {\n deltaValue = deltaDollars;\n deltaTokens = effectivePrice > 0 ? deltaDollars / effectivePrice : 0;\n targetTokens = tokensHeld + deltaTokens;\n targetValue = targetTokens * effectivePrice;\n }\n } else if (orderMode === \"sell\") {\n deltaTokens = deltaTokensSell;\n deltaValue = deltaTokensSell * effectivePrice;\n targetTokens = tokensHeld + deltaTokensSell;\n targetValue = targetTokens * effectivePrice;\n } else {\n deltaTokens = 0;\n deltaValue = 0;\n targetTokens = tokensHeld;\n targetValue = holdingsValue;\n }\n\n const targetPct = totalCapacity > 0 ? (targetValue / totalCapacity) * 100 : 0;\n const isIncrease = orderMode === \"buy\";\n const hasChange = orderMode !== \"none\" && (Math.abs(deltaTokens) > 0.001 || Math.abs(deltaValue) > 0.01);\n const targetOwnership = totalTokens > 0 ? (targetTokens / totalTokens) * 100 : 0;\n const estFeeTokens = effectivePrice > 0 ? (Math.abs(deltaValue) * 0.005) / effectivePrice : 0;\n\n const updateOrderFromTargetValue = React.useCallback(\n (newTargetValue: number) => {\n const newDeltaValue = newTargetValue - holdingsValue;\n if (newDeltaValue > 0.01) {\n const capped = Math.min(newDeltaValue, availableCash);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(capped);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n } else if (newDeltaValue < -0.01) {\n const newDeltaTokens = effectivePrice > 0 ? newTargetValue / effectivePrice - tokensHeld : 0;\n const capped = Math.max(newDeltaTokens, -tokensHeld);\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(capped);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n } else {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n }\n },\n [holdingsValue, availableCash, effectivePrice, tokensHeld]\n );\n\n const updateOrderFromTokenAmount = React.useCallback(\n (tokenAmount: number) => {\n if (tokenAmount > 0) {\n const maxTokens = effectivePrice > 0 ? availableCash / effectivePrice : 0;\n const capped = Math.min(tokenAmount, maxTokens);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"tokens\");\n setDeltaTokensBuy(capped);\n setDeltaDollars(0);\n setDeltaTokensSell(0);\n } else if (tokenAmount < 0) {\n const capped = Math.max(tokenAmount, -tokensHeld);\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(capped);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n } else {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n }\n },\n [effectivePrice, availableCash, tokensHeld]\n );\n\n const handleMarkerClick = React.useCallback(\n (pct: number) => {\n const newTargetValue = (pct / 100) * totalCapacity;\n updateOrderFromTargetValue(newTargetValue);\n },\n [totalCapacity, updateOrderFromTargetValue]\n );\n\n const onMouseDown = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n const move = (ev: MouseEvent) => {\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const y = ev.clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n const newTargetValue = (pct / 100) * totalCapacity;\n updateOrderFromTargetValue(newTargetValue);\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n },\n [totalCapacity, updateOrderFromTargetValue]\n );\n\n const onTouchStart = React.useCallback(\n (e: React.TouchEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const move = (ev: TouchEvent) => {\n ev.preventDefault();\n ev.stopPropagation();\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const touch = ev.touches[0];\n const y = touch.clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n const newTargetValue = (pct / 100) * totalCapacity;\n updateOrderFromTargetValue(newTargetValue);\n };\n const up = () => {\n document.removeEventListener(\"touchmove\", move);\n document.removeEventListener(\"touchend\", up);\n };\n document.addEventListener(\"touchmove\", move, { passive: false });\n document.addEventListener(\"touchend\", up);\n },\n [totalCapacity, updateOrderFromTargetValue]\n );\n\n const handleConfirm = () => {\n if (!hasChange || !onConfirmOrder) return;\n onConfirmOrder({\n side: isIncrease ? \"buy\" : \"sell\",\n orderType,\n tokenId,\n tokenSymbol,\n price: effectivePrice,\n deltaTokens: Math.abs(deltaTokens),\n deltaValue: Math.abs(deltaValue),\n targetOwnership,\n targetTokens,\n targetValue,\n });\n setOrderMode(\"none\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n };\n\n // SVG fill calculations\n const rectTop = 10;\n const rectBottom = 150;\n const totalFillableHeight = rectBottom - rectTop;\n const baselineFillHeight = (baselinePct / 100) * totalFillableHeight;\n const targetFillHeight = (targetPct / 100) * totalFillableHeight;\n const baselineFillY = rectBottom - baselineFillHeight;\n const targetFillY = rectBottom - targetFillHeight;\n\n const showIncrease = targetPct > baselinePct;\n const showDecrease = targetPct < baselinePct;\n\n const valueLabel = `${tokenSymbol} OWNED`;\n\n // Border color for boxed rows\n const getBorderColor = () => {\n if (!hasChange) return \"rgba(201, 162, 39, 0.5)\";\n return isIncrease ? \"rgba(14, 203, 129, 0.3)\" : \"rgba(246, 70, 93, 0.3)\";\n };\n\n // Text color for values\n const getValueColor = () => {\n if (!hasChange) return \"#fff\";\n return isIncrease ? \"#0ecb81\" : \"#f6465d\";\n };\n\n return (\n <div\n style={styles.sliderContainer}\n className={className}\n {...props}\n >\n {/* Value Display */}\n <div style={styles.valueDisplay}>\n <div style={styles.valueLabel}>{valueLabel}</div>\n <div style={styles.valueAmount}>\n ${fmt0(targetValue)}\n </div>\n </div>\n\n {/* House Wrapper */}\n <div style={styles.houseWrapper}>\n {/* House Container with Mobile Percent Buttons inside */}\n <div\n ref={houseRef}\n style={styles.houseContainer}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n {/* SVG House */}\n <svg viewBox=\"0 0 120 160\" style={{ width: \"100%\", height: \"100%\", overflow: \"visible\" }}>\n <defs>\n <clipPath id=\"mobile-clip\">\n <rect x=\"12\" y=\"12\" width=\"96\" height=\"136\" rx=\"6\" />\n </clipPath>\n <linearGradient id=\"mobileGoldFill\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"rgba(220, 175, 120, 0.7)\" />\n <stop offset=\"100%\" stopColor=\"rgba(220, 175, 120, 0.7)\" />\n </linearGradient>\n <linearGradient id=\"mobileGreenFill\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"rgba(14, 203, 129, 0.5)\" />\n <stop offset=\"100%\" stopColor=\"rgba(14, 203, 129, 0.2)\" />\n </linearGradient>\n <linearGradient id=\"mobileRedFill\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"rgba(246, 70, 93, 0.15)\" />\n <stop offset=\"100%\" stopColor=\"rgba(246, 70, 93, 0.5)\" />\n </linearGradient>\n <filter id=\"mobileGoldGlow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur stdDeviation=\"6\" result=\"blur\" />\n <feFlood floodColor=\"rgba(234, 217, 162, 0.6)\" result=\"color\" />\n <feComposite in=\"color\" in2=\"blur\" operator=\"in\" result=\"glow\" />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <filter id=\"mobileGreenGlow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur stdDeviation=\"6\" result=\"blur\" />\n <feFlood floodColor=\"rgba(14, 203, 129, 0.6)\" result=\"color\" />\n <feComposite in=\"color\" in2=\"blur\" operator=\"in\" result=\"glow\" />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <filter id=\"mobileRedGlow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur stdDeviation=\"6\" result=\"blur\" />\n <feFlood floodColor=\"rgba(246, 70, 93, 0.6)\" result=\"color\" />\n <feComposite in=\"color\" in2=\"blur\" operator=\"in\" result=\"glow\" />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n </defs>\n\n {/* Glass background */}\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"rgba(255,255,255,0.04)\" />\n\n {/* Fills */}\n <g clipPath=\"url(#mobile-clip)\">\n <rect\n x=\"10\"\n y={showDecrease ? targetFillY : baselineFillY}\n width=\"100\"\n height={showDecrease ? targetFillHeight : baselineFillHeight}\n fill=\"url(#mobileGoldFill)\"\n />\n {showIncrease && (\n <rect\n x=\"10\"\n y={targetFillY}\n width=\"100\"\n height={targetFillHeight - baselineFillHeight}\n fill=\"url(#mobileGreenFill)\"\n />\n )}\n {showDecrease && (\n <rect\n x=\"10\"\n y={baselineFillY}\n width=\"100\"\n height={baselineFillHeight - targetFillHeight}\n fill=\"url(#mobileRedFill)\"\n />\n )}\n <line\n x1=\"12\"\n y1={targetFillY}\n x2=\"108\"\n y2={targetFillY}\n stroke={showIncrease ? \"rgba(14, 203, 129, 1)\" : showDecrease ? \"rgba(246, 70, 93, 1)\" : \"rgba(234, 217, 162, 1)\"}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n filter={showIncrease ? \"url(#mobileGreenGlow)\" : showDecrease ? \"url(#mobileRedGlow)\" : \"url(#mobileGoldGlow)\"}\n />\n </g>\n\n {/* Border with glow */}\n <rect\n x=\"10\"\n y=\"10\"\n width=\"100\"\n height=\"140\"\n rx=\"8\"\n fill=\"none\"\n stroke={showIncrease ? \"rgba(14, 203, 129, 0.6)\" : showDecrease ? \"rgba(246, 70, 93, 0.6)\" : \"rgba(234, 217, 162, 0.6)\"}\n strokeWidth=\"2\"\n filter={showIncrease ? \"url(#mobileGreenGlow)\" : showDecrease ? \"url(#mobileRedGlow)\" : \"url(#mobileGoldGlow)\"}\n />\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"none\" stroke=\"rgba(255, 255, 255, 0.1)\" strokeWidth=\"1\" />\n </svg>\n\n {/* Mobile percentage buttons - positioned absolutely inside HouseContainer */}\n <div\n style={styles.mobilePercentButtons}\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {[100, 50, 25, 0].map((pct) => (\n <button\n key={pct}\n type=\"button\"\n style={styles.mobilePercentBtn}\n onClick={(e) => {\n e.stopPropagation();\n handleMarkerClick(pct);\n }}\n >\n {pct}%\n </button>\n ))}\n </div>\n </div>\n </div>\n\n {/* Confirm Button */}\n <button\n type=\"button\"\n disabled={!hasChange}\n onClick={handleConfirm}\n style={{\n ...styles.confirmButton,\n backgroundColor: !hasChange\n ? \"rgba(255, 255, 255, 0.1)\"\n : isIncrease\n ? \"#0ecb81\"\n : \"#f6465d\",\n color: !hasChange ? \"rgba(255, 255, 255, 0.3)\" : \"#fff\",\n cursor: !hasChange ? \"not-allowed\" : \"pointer\",\n }}\n >\n {!hasChange ? \"Adjust Position\" : isIncrease ? `Buy $${fmt0(deltaValue)}` : `Sell $${fmt0(deltaValue)}`}\n </button>\n\n {/* Summary Section */}\n <div style={styles.summarySection}>\n {/* Est. Buy/Sell row */}\n <div\n style={{\n ...styles.boxedSummaryRow,\n border: `1px solid ${getBorderColor()}`,\n }}\n onClick={(e) => {\n const input = (e.currentTarget as HTMLElement).querySelector(\"input\");\n if (input && e.target !== input) {\n input.focus();\n const len = input.value.length;\n input.setSelectionRange(len, len);\n }\n }}\n >\n <span style={styles.summaryLabel}>{isIncrease ? \"Est. Buy\" : \"Est. Sell\"}</span>\n <span style={styles.summaryValue}>\n <input\n type=\"text\"\n value={tokenAmountInput || Math.abs(deltaTokens).toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setTokenAmountInput(val);\n }}\n onFocus={() => setTokenAmountInput(Math.abs(deltaTokens).toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(tokenAmountInput);\n if (Number.isFinite(num) && num >= 0) {\n const signed = isIncrease || orderMode === \"none\" ? num : -num;\n updateOrderFromTokenAmount(signed);\n }\n setTokenAmountInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n style={{\n ...styles.boxedInput,\n color: getValueColor(),\n }}\n />\n <span style={{ ...styles.inputSuffix, color: getValueColor() }}>{tokenSymbol}</span>\n </span>\n </div>\n\n {/* Price row */}\n <div\n style={{\n ...styles.boxedSummaryRow,\n border: `1px solid ${getBorderColor()}`,\n }}\n onClick={(e) => {\n if (orderType === \"limit\") {\n const input = (e.currentTarget as HTMLElement).querySelector(\"input\");\n if (input && e.target !== input) {\n input.focus();\n const len = input.value.length;\n input.setSelectionRange(len, len);\n }\n }\n }}\n >\n <span style={styles.summaryLabel}>{orderType === \"market\" ? \"Price\" : \"Limit Price\"}</span>\n {orderType === \"market\" ? (\n <span style={{ fontWeight: 600, color: \"rgba(255, 255, 255, 0.6)\", fontSize: \"0.8rem\" }}>Market</span>\n ) : (\n <span style={styles.summaryValue}>\n <input\n type=\"text\"\n value={limitPriceInput}\n onChange={(e) => {\n const input = e.target.value;\n if (input === \"\" || /^[0-9]*\\.?[0-9]*$/.test(input)) {\n setLimitPriceDirty(true);\n setLimitPriceInput(input);\n const num = Number.parseFloat(input);\n if (Number.isFinite(num) && num > 0) setLimitPrice(num);\n }\n }}\n onBlur={() => {\n const num = Number.parseFloat(limitPriceInput);\n if (Number.isFinite(num) && num > 0) {\n setLimitPriceInput(num.toFixed(2));\n setLimitPrice(num);\n } else {\n setLimitPriceInput(limitPrice.toFixed(2));\n }\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n style={{\n ...styles.boxedInput,\n color: getValueColor(),\n }}\n />\n <span style={{ ...styles.inputSuffix, color: getValueColor() }}>USD</span>\n </span>\n )}\n </div>\n\n {/* Est. Fee row */}\n <div style={styles.summaryRow}>\n <span style={styles.summaryLabel}>Est. Fee</span>\n <span style={{ color: \"#fff\", fontWeight: 500, fontSize: \"0.8rem\" }}>\n {estFeeTokens.toFixed(6)} {tokenSymbol}\n </span>\n </div>\n </div>\n\n {/* Order Type Toggle */}\n <div style={styles.orderTypeToggle}>\n <button\n type=\"button\"\n onClick={() => setOrderType(\"market\")}\n style={{\n ...styles.orderTypeButton,\n backgroundColor: orderType === \"market\" ? \"rgba(201, 162, 39, 0.2)\" : \"transparent\",\n color: orderType === \"market\" ? \"#C9A227\" : \"rgba(255, 255, 255, 0.5)\",\n }}\n >\n Market\n </button>\n <button\n type=\"button\"\n onClick={() => setOrderType(\"limit\")}\n style={{\n ...styles.orderTypeButton,\n backgroundColor: orderType === \"limit\" ? \"rgba(201, 162, 39, 0.2)\" : \"transparent\",\n color: orderType === \"limit\" ? \"#C9A227\" : \"rgba(255, 255, 255, 0.5)\",\n }}\n >\n Limit\n </button>\n </div>\n\n {/* Available Funds */}\n <div style={styles.availableFunds}>\n <span>Cash: ${availableCash.toLocaleString()}</span>\n <button type=\"button\" style={styles.addFundsButton}>\n Add Funds\n </button>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport styled, { keyframes, css } from \"styled-components\";\n\nimport loafLogoBanner from \"../assets/Loaf-logo-Banner.png\";\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.45;\n transform: scale(1);\n }\n 50% {\n opacity: 0.7;\n transform: scale(1.08);\n }\n`;\n\nconst shimmer = keyframes`\n 0% {\n background-position: -100% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`;\n\nconst LogoContainer = styled.span<{ $isGlowing?: boolean }>`\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.35rem 0.6rem;\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.05) 0%,\n rgba(240, 185, 11, 0.1) 50%,\n rgba(240, 185, 11, 0.05) 100%\n );\n border: 1px solid rgba(240, 185, 11, 0.3);\n border-radius: 5px;\n position: relative;\n overflow: visible;\n cursor: pointer;\n transition: all 0.3s ease;\n line-height: 1.4;\n\n ${({ $isGlowing }) =>\n $isGlowing\n ? css`\n border-color: rgba(240, 185, 11, 1);\n box-shadow:\n 0 0 25px rgba(240, 185, 11, 0.8),\n 0 0 40px rgba(240, 185, 11, 0.5),\n inset 0 0 20px rgba(240, 185, 11, 0.3);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.2) 0%,\n rgba(240, 185, 11, 0.3) 50%,\n rgba(240, 185, 11, 0.2) 100%\n );\n animation: quickPulse 0.35s ease-out;\n\n @keyframes quickPulse {\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n }\n `\n : null}\n\n @media (max-width: 768px) {\n padding: 0.3rem 0.4rem 0.3rem 0.25rem;\n gap: 0.25rem;\n border-radius: 4px;\n transition: none;\n }\n\n @media (max-width: 480px) {\n padding: 0.2rem 0.3rem 0.2rem 0.2rem;\n gap: 0.2rem;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border-color: rgba(240, 185, 11, 0.6);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.1) 0%,\n rgba(240, 185, 11, 0.15) 50%,\n rgba(240, 185, 11, 0.1) 100%\n );\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 185, 11, 0.2);\n }\n }\n\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent, rgba(240, 185, 11, 0.1), transparent);\n background-size: 200% 100%;\n animation: ${shimmer} 3s infinite;\n pointer-events: none;\n }\n`;\n\nconst IconWrapper = styled.span`\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: 16px;\n height: 16px;\n\n @media (max-width: 480px) {\n width: 14px;\n height: 14px;\n }\n`;\n\nconst IconCircle = styled.span<{ size: number; color: string; duration: number; delay: number }>`\n position: absolute;\n width: ${({ size }) => size}px;\n height: ${({ size }) => size}px;\n border: 2px solid ${({ color }) => color};\n border-radius: 50%;\n animation: ${pulse} ${({ duration }) => duration}s infinite cubic-bezier(0.4, 0, 0.6, 1);\n animation-delay: ${({ delay }) => delay}s;\n transform-origin: center;\n will-change: transform, opacity;\n`;\n\nconst IconCore = styled.span`\n width: 5px;\n height: 5px;\n background: linear-gradient(135deg, #0ecb81 0%, #2ecc71 100%);\n border-radius: 50%;\n box-shadow: 0 0 6px rgba(14, 203, 129, 0.6);\n position: relative;\n z-index: 1;\n`;\n\nconst LogoText = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 0.2rem;\n position: relative;\n z-index: 1;\n`;\n\nconst LoafLogoImage = styled.img`\n height: 20px;\n position: relative;\n z-index: 1;\n\n @media (max-width: 480px) {\n height: 18px;\n }\n`;\n\nconst LiquidityText = styled.span`\n font-size: 0.65rem;\n font-weight: 400;\n background: linear-gradient(135deg, #f0b90b 0%, #ffd700 50%, #f0b90b 100%);\n background-size: 200% auto;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n letter-spacing: 0.3px;\n opacity: 0.75;\n line-height: 1;\n\n @media (max-width: 480px) {\n font-size: 0.55rem;\n letter-spacing: 0.1px;\n }\n`;\n\nexport interface LoafLiquidityBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n isGlowing?: boolean;\n}\n\nexport const LoafLiquidityBadge = React.forwardRef<HTMLSpanElement, LoafLiquidityBadgeProps>(\n ({ className, isGlowing, onClick, children, ...props }, ref) => {\n return (\n <LogoContainer\n ref={ref}\n onClick={onClick}\n $isGlowing={isGlowing}\n className={className}\n role={onClick ? \"button\" : undefined}\n {...props}\n >\n <LogoText>\n <LoafLogoImage src={loafLogoBanner} alt=\"Loaf\" />\n <LiquidityText>{children ?? \"Liquidity\"}</LiquidityText>\n </LogoText>\n <IconWrapper>\n <IconCore />\n <IconCircle size={10} color=\"rgba(14, 203, 129, 0.5)\" duration={4} delay={0} />\n <IconCircle size={13} color=\"rgba(14, 203, 129, 0.35)\" duration={5.2} delay={0.7} />\n <IconCircle size={16} color=\"rgba(14, 203, 129, 0.25)\" duration={6.3} delay={1.3} />\n </IconWrapper>\n </LogoContainer>\n );\n }\n);\n\nLoafLiquidityBadge.displayName = \"LoafLiquidityBadge\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { LoafLiquidityBadge } from \"./loaf-liquidity-badge\";\n\nexport type OrderbookSide = \"ask\" | \"bid\";\n\nexport type OrderbookLevel = {\n price: number;\n amount: number;\n depth?: number;\n};\n\nexport type OrderbookTrade = {\n type: \"buy\" | \"sell\";\n price: number;\n amount: number;\n time?: string;\n tradeId?: number;\n};\n\nexport interface OrderbookProps extends React.HTMLAttributes<HTMLDivElement> {\n asks: OrderbookLevel[];\n bids: OrderbookLevel[];\n midPrice: number;\n midChangePercent?: number;\n trades?: OrderbookTrade[];\n priceLabel?: string;\n amountLabel?: string;\n precision?: number;\n amountPrecision?: number;\n defaultTab?: \"orderbook\" | \"trades\";\n onTabChange?: (tab: \"orderbook\" | \"trades\") => void;\n rightHeader?: React.ReactNode;\n variant?: \"auto\" | \"default\" | \"compact\";\n}\n\nfunction useViewportCompact(breakpoint: number) {\n const [isCompact, setIsCompact] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === \"undefined\") return;\n const check = () => setIsCompact(window.innerWidth <= breakpoint);\n check();\n window.addEventListener(\"resize\", check);\n return () => window.removeEventListener(\"resize\", check);\n }, [breakpoint]);\n\n return isCompact;\n}\n\nconst formatNumber = (value: number, precision: number) => value.toFixed(precision);\n\nfunction DepthRow({\n side,\n price,\n amount,\n depthPct,\n precision,\n amountPrecision,\n}: {\n side: OrderbookSide;\n price: number;\n amount: number;\n depthPct: number;\n precision: number;\n amountPrecision: number;\n}) {\n const isAsk = side === \"ask\";\n\n return (\n <div className=\"relative grid grid-cols-2 items-center gap-3 px-3 py-1.5\">\n <div\n className={cn(\n \"absolute inset-y-0 right-0\",\n isAsk ? \"bg-rose-900/30\" : \"bg-emerald-900/30\"\n )}\n style={{ width: `${clamp(depthPct, 0, 100)}%` }}\n />\n\n <div className={cn(\"relative z-[1] tabular-nums\", isAsk ? \"text-[#f6465d]\" : \"text-[#0ecb81]\")}\n >\n ${formatNumber(price, precision)}\n </div>\n <div className=\"relative z-[1] text-right tabular-nums text-white/90\">{formatNumber(amount, amountPrecision)}</div>\n </div>\n );\n}\n\nconst clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\nconst LEVEL_ROWS_VISIBLE = 6;\nconst DEPTH_ROW_HEIGHT_PX = 34;\nconst COMPACT_ROWS_VISIBLE = 5;\nconst COMPACT_ROW_HEIGHT_PX = 30;\nconst COMPACT_BREAKPOINT_PX = 1024;\n\nexport const Orderbook = React.forwardRef<HTMLDivElement, OrderbookProps>(\n (\n {\n asks,\n bids,\n midPrice,\n midChangePercent,\n trades = [],\n priceLabel = \"Price (USD)\",\n amountLabel = \"Amount\",\n precision = 2,\n amountPrecision = 2,\n defaultTab = \"orderbook\",\n onTabChange,\n rightHeader = <LoafLiquidityBadge className=\"text-[0.6rem]\" />,\n variant = \"auto\",\n className,\n ...props\n },\n ref\n ) => {\n const [tab, setTab] = React.useState<\"orderbook\" | \"trades\">(defaultTab);\n const [tradeFilter, setTradeFilter] = React.useState<\"all\" | \"buy\" | \"sell\">(\"all\");\n const viewportCompact = useViewportCompact(COMPACT_BREAKPOINT_PX);\n\n React.useEffect(() => {\n setTab(defaultTab);\n }, [defaultTab]);\n\n const handleTab = (next: \"orderbook\" | \"trades\") => {\n setTab(next);\n onTabChange?.(next);\n };\n\n const isCompact = variant === \"compact\" || (variant === \"auto\" && viewportCompact);\n const sectionHeight = isCompact\n ? COMPACT_ROWS_VISIBLE * COMPACT_ROW_HEIGHT_PX\n : LEVEL_ROWS_VISIBLE * DEPTH_ROW_HEIGHT_PX;\n\n const maxAskDepth = Math.max(1, ...asks.map((l) => l.depth ?? l.amount));\n const maxBidDepth = Math.max(1, ...bids.map((l) => l.depth ?? l.amount));\n\n const midClass =\n midChangePercent == null\n ? \"text-white\"\n : midChangePercent >= 0\n ? \"text-[#0ecb81]\"\n : \"text-[#f6465d]\";\n\n const tradeFiltered = trades.filter((t) => tradeFilter === \"all\" || t.type === tradeFilter);\n\n const layoutProps: OrderbookLayoutProps = {\n tab,\n handleTab,\n tradeFilter,\n setTradeFilter,\n rightHeader,\n priceLabel,\n amountLabel,\n tradeFiltered,\n precision,\n amountPrecision,\n asks,\n bids,\n maxAskDepth,\n maxBidDepth,\n midPrice,\n midChangePercent,\n midClass,\n sectionHeight,\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[520px] overflow-hidden rounded-[12px] border border-white/10 bg-[#111111] text-white shadow-md\",\n isCompact && \"max-w-none\",\n className\n )}\n {...props}\n >\n {isCompact ? (\n <MobileOrderbookLayout {...layoutProps} />\n ) : (\n <DesktopOrderbookLayout {...layoutProps} />\n )}\n </Card>\n );\n }\n);\n\nOrderbook.displayName = \"Orderbook\";\n\ntype OrderbookLayoutProps = {\n tab: \"orderbook\" | \"trades\";\n handleTab: (tab: \"orderbook\" | \"trades\") => void;\n tradeFilter: \"all\" | \"buy\" | \"sell\";\n setTradeFilter: React.Dispatch<React.SetStateAction<\"all\" | \"buy\" | \"sell\">>;\n rightHeader: React.ReactNode;\n priceLabel: string;\n amountLabel: string;\n tradeFiltered: OrderbookTrade[];\n precision: number;\n amountPrecision: number;\n asks: OrderbookLevel[];\n bids: OrderbookLevel[];\n maxAskDepth: number;\n maxBidDepth: number;\n midPrice: number;\n midChangePercent?: number;\n midClass: string;\n sectionHeight: number;\n};\n\nfunction DesktopOrderbookLayout({\n tab,\n handleTab,\n tradeFilter,\n setTradeFilter,\n rightHeader,\n priceLabel,\n amountLabel,\n tradeFiltered,\n precision,\n amountPrecision,\n asks,\n bids,\n maxAskDepth,\n maxBidDepth,\n midPrice,\n midChangePercent,\n midClass,\n sectionHeight,\n}: OrderbookLayoutProps) {\n return (\n <>\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={() => handleTab(\"orderbook\")}\n className={cn(\n \"relative pb-2 text-sm font-semibold\",\n tab === \"orderbook\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Orderbook\n {tab === \"orderbook\" ? (\n <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" />\n ) : null}\n </button>\n <button\n type=\"button\"\n onClick={() => handleTab(\"trades\")}\n className={cn(\n \"relative pb-2 text-sm font-medium\",\n tab === \"trades\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Trades\n {tab === \"trades\" ? (\n <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" />\n ) : null}\n </button>\n </div>\n\n {tab === \"trades\" ? (\n <div className=\"flex items-center gap-1 text-xs\">\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"all\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"all\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n All\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"buy\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"buy\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Buy\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"sell\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"sell\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Sell\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-3\">{rightHeader}</div>\n )}\n </div>\n\n <div className=\"px-4 pt-2\">\n <div className=\"grid grid-cols-2 gap-3 px-3 py-2 text-xs text-white/60\">\n <div>{priceLabel}</div>\n <div className=\"text-right\">{amountLabel}</div>\n </div>\n\n {tab === \"trades\" ? (\n <div\n className=\"max-h-[380px] overflow-y-auto overflow-x-hidden\"\n style={{ scrollbarGutter: \"stable\" }}\n >\n {tradeFiltered.length === 0 ? (\n <div className=\"px-3 py-10 text-center text-sm text-white/50\">No trades</div>\n ) : (\n <div className=\"divide-y divide-white/5\">\n {tradeFiltered.map((trade, i) => (\n <div\n key={`${trade.type}-${trade.price}-${trade.amount}-${trade.time ?? i}`}\n className=\"grid grid-cols-2 items-center gap-3 px-3 py-1.5\"\n >\n <div\n className={cn(\n \"tabular-nums\",\n trade.type === \"buy\" ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n ${formatNumber(trade.price, precision)}\n </div>\n <div className=\"text-right tabular-nums text-white/90\">\n {formatNumber(trade.amount, amountPrecision)}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <>\n <div\n className=\"divide-y divide-white/5 overflow-y-auto\"\n style={{ height: `${sectionHeight}px`, scrollbarGutter: \"stable\" }}\n >\n {asks.map((l, idx) => (\n <DepthRow\n key={`ask-${idx}-${l.price}-${l.amount}`}\n side=\"ask\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxAskDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n\n <div className=\"grid grid-cols-2 items-center gap-3 bg-[#0b1a24] px-3 py-2\">\n <div className={cn(\"text-lg font-semibold tabular-nums\", midClass)}>\n ${formatNumber(midPrice, precision)}\n {midChangePercent == null ? null : (\n <span className={cn(\"ml-2 text-sm font-semibold tabular-nums\", midClass)}>\n {midChangePercent >= 0 ? \"+\" : \"\"}\n {midChangePercent.toFixed(2)}%\n </span>\n )}\n </div>\n <div />\n </div>\n\n <div\n className=\"divide-y divide-white/5 overflow-y-auto\"\n style={{ height: `${sectionHeight}px`, scrollbarGutter: \"stable\" }}\n >\n {bids.map((l, idx) => (\n <DepthRow\n key={`bid-${idx}-${l.price}-${l.amount}`}\n side=\"bid\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxBidDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n );\n}\n\nfunction MobileOrderbookLayout({\n tab,\n handleTab,\n tradeFilter,\n setTradeFilter,\n rightHeader,\n priceLabel,\n amountLabel,\n tradeFiltered,\n precision,\n amountPrecision,\n asks,\n bids,\n maxAskDepth,\n maxBidDepth,\n midPrice,\n midChangePercent,\n midClass,\n sectionHeight: _sectionHeight,\n}: OrderbookLayoutProps) {\n const visibleAsks = React.useMemo(() => asks.slice(0, COMPACT_ROWS_VISIBLE), [asks]);\n const visibleBids = React.useMemo(() => bids.slice(0, COMPACT_ROWS_VISIBLE), [bids]);\n\n return (\n <>\n <div className=\"px-3 pt-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span\n onClick={() => handleTab(\"orderbook\")}\n style={{\n cursor: \"pointer\",\n fontSize: \"0.72rem\",\n fontWeight: tab === \"orderbook\" ? 600 : 400,\n color: tab === \"orderbook\" ? \"#fff\" : \"rgba(255,255,255,0.6)\",\n borderBottom: tab === \"orderbook\" ? \"2px solid #C9A227\" : \"none\",\n paddingBottom: \"0.2rem\",\n }}\n >\n Orderbook\n </span>\n <span\n onClick={() => handleTab(\"trades\")}\n style={{\n cursor: \"pointer\",\n fontSize: \"0.72rem\",\n fontWeight: tab === \"trades\" ? 600 : 400,\n color: tab === \"trades\" ? \"#fff\" : \"rgba(255,255,255,0.6)\",\n borderBottom: tab === \"trades\" ? \"2px solid #C9A227\" : \"none\",\n paddingBottom: \"0.2rem\",\n }}\n >\n Trades\n </span>\n </div>\n\n {tab === \"trades\" ? (\n <div className=\"flex items-center gap-1 text-[0.6rem] text-white/70\">\n {([\"all\", \"buy\", \"sell\"] as const).map((filter) => (\n <button\n key={filter}\n type=\"button\"\n onClick={() => setTradeFilter(filter)}\n className={cn(\n \"rounded-md border border-white/15 px-2 py-1\",\n tradeFilter === filter ? \"bg-white/15 text-white\" : \"hover:bg-white/10\"\n )}\n >\n {filter === \"all\" ? \"All\" : filter === \"buy\" ? \"Buy\" : \"Sell\"}\n </button>\n ))}\n </div>\n ) : (\n <div className=\"hidden text-xs text-white/70 sm:flex\">{rightHeader}</div>\n )}\n </div>\n </div>\n\n {tab === \"orderbook\" ? (\n <div className=\"flex flex-1 flex-col overflow-hidden px-3 pb-2\">\n <div\n className=\"inline-flex sm:hidden\"\n style={{ padding: \"0.5rem 0\", marginBottom: \"0.5rem\", transform: \"scale(0.85)\", transformOrigin: \"left center\" }}\n >\n {rightHeader}\n </div>\n\n <div\n className=\"grid text-white/60\"\n style={{ gridTemplateColumns: \"1.2fr 0.8fr\", padding: \"0.3rem 0 0.2rem 0\", fontSize: \"0.75rem\", fontWeight: 500 }}\n >\n <div>{priceLabel}</div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\" }}>{amountLabel}</div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {visibleAsks.map((l, idx) => (\n <MobileDepthRow\n key={`mobile-ask-${idx}-${l.price}-${l.amount}`}\n side=\"ask\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxAskDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n\n <div\n className=\"grid\"\n style={{\n gridTemplateColumns: \"1.2fr 0.8fr\",\n padding: \"0.3rem 0\",\n fontSize: \"0.8rem\",\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n }}\n >\n <div\n style={{ fontWeight: \"bold\", display: \"flex\", alignItems: \"center\", gap: \"8px\" }}\n className={midClass}\n >\n ${formatNumber(midPrice, precision)}\n {midChangePercent != null && (\n <span className={cn(\"text-[0.75rem] font-semibold tabular-nums\", midClass)}>\n {midChangePercent >= 0 ? \"+\" : \"\"}{midChangePercent.toFixed(2)}%\n </span>\n )}\n </div>\n <div />\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {visibleBids.map((l, idx) => (\n <MobileDepthRow\n key={`mobile-bid-${idx}-${l.price}-${l.amount}`}\n side=\"bid\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxBidDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n </div>\n ) : (\n <div className=\"flex flex-1 flex-col overflow-hidden px-3 pb-2\">\n <div\n className=\"grid text-white/60\"\n style={{ gridTemplateColumns: \"1.2fr 0.8fr\", padding: \"0.3rem 0 0.2rem 0\", fontSize: \"0.75rem\", fontWeight: 500 }}\n >\n <div>{priceLabel}</div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\" }}>{amountLabel}</div>\n </div>\n\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {tradeFiltered.length === 0 ? (\n <div className=\"py-6 text-center text-[0.7rem] text-white/50\">No trades</div>\n ) : (\n tradeFiltered.map((trade, i) => (\n <div\n key={`${trade.type}-${trade.price}-${trade.amount}-${trade.time ?? i}`}\n className=\"grid\"\n style={{ gridTemplateColumns: \"1.2fr 0.8fr\", padding: \"0.2rem 0\", fontSize: \"0.8rem\" }}\n >\n <div\n style={{ color: trade.type === \"buy\" ? \"#0ecb81\" : \"#f6465d\", fontWeight: 500 }}\n >\n ${formatNumber(trade.price, precision)}\n </div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\" }}>\n {formatNumber(trade.amount, amountPrecision)}\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction MobileDepthRow({\n side,\n price,\n amount,\n depthPct,\n precision,\n amountPrecision,\n}: {\n side: OrderbookSide;\n price: number;\n amount: number;\n depthPct: number;\n precision: number;\n amountPrecision: number;\n}) {\n const isAsk = side === \"ask\";\n\n return (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"1.2fr 0.8fr\",\n padding: \"0.2rem 0\",\n fontSize: \"0.8rem\",\n position: \"relative\",\n }}\n >\n <div style={{ position: \"relative\", zIndex: 1, color: isAsk ? \"#f6465d\" : \"#0ecb81\" }}>\n ${formatNumber(price, precision)}\n </div>\n <div style={{ textAlign: \"right\", paddingRight: \"0.5rem\", position: \"relative\", zIndex: 1 }}>\n {formatNumber(amount, amountPrecision)}\n </div>\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n width: `${clamp(depthPct, 0, 100)}%`,\n backgroundColor: isAsk ? \"#f6465d\" : \"#0ecb81\",\n opacity: 0.1,\n zIndex: 0,\n }}\n />\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PropertyTourProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title: string;\n src: string;\n poster?: string;\n autoPlay?: boolean;\n muted?: boolean;\n loop?: boolean;\n controls?: boolean;\n playsInline?: boolean;\n};\n\ntype FullscreenDocument = Document & {\n webkitFullscreenElement?: Element | null;\n mozFullScreenElement?: Element | null;\n msFullscreenElement?: Element | null;\n};\n\nexport const PropertyTour = React.forwardRef<HTMLDivElement, PropertyTourProps>(\n (\n {\n className,\n title,\n src,\n poster,\n autoPlay = true,\n muted = true,\n loop = true,\n controls = true,\n playsInline = true,\n ...props\n },\n ref\n ) => {\n const videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n React.useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleFullscreenChange = () => {\n const d = document as FullscreenDocument;\n const isFullscreen = !!(\n d.fullscreenElement ||\n d.webkitFullscreenElement ||\n d.mozFullScreenElement ||\n d.msFullscreenElement\n );\n\n if (isFullscreen) {\n video.style.objectFit = \"contain\";\n video.style.width = \"100vw\";\n video.style.height = \"100vh\";\n video.style.position = \"fixed\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"9999\";\n } else {\n video.style.objectFit = \"cover\";\n video.style.width = \"100%\";\n video.style.height = \"100%\";\n video.style.position = \"absolute\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"auto\";\n }\n };\n\n video.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n return () => {\n video.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n };\n }, []);\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[820px] rounded-[12px] border border-white/10 bg-[#111111] text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"px-6 pb-0 pt-6\">\n <CardTitle className=\"m-0 text-lg font-semibold text-white\">{title}</CardTitle>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-5\">\n <div className=\"relative aspect-video w-full overflow-hidden rounded-lg bg-black\">\n <video\n ref={videoRef}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n controls={controls}\n loop={loop}\n autoPlay={autoPlay}\n muted={muted}\n playsInline={playsInline}\n poster={poster}\n >\n <source src={src} />\n Your browser does not support the video tag.\n </video>\n </div>\n </div>\n </Card>\n );\n }\n);\n\nPropertyTour.displayName = \"PropertyTour\";\n","import * as React from \"react\";\n\nimport { Newspaper } from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyNewsType = \"property\" | \"market\" | (string & {});\n\nexport type PropertyNewsItem = {\n id?: string;\n title: string;\n date: string | Date;\n type?: PropertyNewsType;\n displayId?: string;\n isNew?: boolean;\n};\n\nexport interface PropertyNewsUpdatesProps extends React.HTMLAttributes<HTMLDivElement> {\n items: PropertyNewsItem[];\n heading?: string;\n subheading?: string;\n emptyState?: React.ReactNode;\n highlightFirst?: boolean;\n}\n\nconst ITEMS_PER_PAGE = 4;\nconst ROW_HEIGHT_PX = 86;\n\nconst ensureAnimationsInjected = () => {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(\"property-news-updates-animations\")) return;\n const style = document.createElement(\"style\");\n style.id = \"property-news-updates-animations\";\n style.textContent = `\n @keyframes propertyNewsPulse {\n 0% { opacity: 0.6; transform: scale(0.9); }\n 50% { opacity: 1; transform: scale(1); }\n 100% { opacity: 0.6; transform: scale(0.9); }\n }\n\n @keyframes propertyNewsSlideIn {\n from { transform: translateY(-6px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n};\n\nconst categoryStyles = {\n property: {\n label: \"Property Update\",\n backgroundColor: \"rgba(14, 203, 129, 0.15)\",\n borderColor: \"rgba(14, 203, 129, 0.45)\",\n color: \"#0ecb81\",\n },\n market: {\n label: \"Market News\",\n backgroundColor: \"rgba(248, 209, 47, 0.15)\",\n borderColor: \"rgba(248, 209, 47, 0.45)\",\n color: \"#f8d12f\",\n },\n} as const;\n\nconst formatDate = (value: string | Date) => {\n if (typeof value === \"string\") return value;\n if (!(value instanceof Date) || Number.isNaN(value.getTime())) return \"\";\n return value.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n};\n\nexport const PropertyNewsUpdates = React.forwardRef<HTMLDivElement, PropertyNewsUpdatesProps>(\n (\n {\n className,\n heading = \"Property News & Headlines\",\n subheading,\n items,\n emptyState,\n highlightFirst = true,\n ...props\n },\n ref\n ) => {\n const [page, setPage] = React.useState(0);\n\n React.useEffect(() => {\n ensureAnimationsInjected();\n }, []);\n\n const hasItems = Array.isArray(items) && items.length > 0;\n const totalPages = React.useMemo(() => (hasItems ? Math.max(1, Math.ceil(items.length / ITEMS_PER_PAGE)) : 1), [hasItems, items.length]);\n\n React.useEffect(() => {\n setPage((prev) => Math.min(prev, totalPages - 1));\n }, [totalPages]);\n\n const paginatedItems = hasItems\n ? items.slice(page * ITEMS_PER_PAGE, page * ITEMS_PER_PAGE + ITEMS_PER_PAGE)\n : [];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full max-w-[840px] rounded-2xl border border-white/10 bg-[#0b0e10] p-5 text-white shadow-[0_20px_40px_rgba(0,0,0,0.35)]\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-lg font-semibold text-white\">{heading}</p>\n {subheading ? <p className=\"text-sm text-white/60\">{subheading}</p> : null}\n </div>\n <div\n className=\"inline-flex items-center font-semibold uppercase text-emerald-300\"\n style={{ gap: \"0.35rem\", fontSize: \"0.8rem\", letterSpacing: \"0.15em\" }}\n >\n <span\n style={{\n display: \"inline-block\",\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n backgroundColor: \"#34d399\",\n animation: \"propertyNewsPulse 2s infinite\",\n }}\n />\n LIVE\n </div>\n </div>\n\n <div\n className=\"mt-4 flex flex-col gap-3\"\n style={{ minHeight: `${ITEMS_PER_PAGE * ROW_HEIGHT_PX}px` }}\n >\n {hasItems\n ? paginatedItems.map((item, index) => {\n const absoluteIndex = page * ITEMS_PER_PAGE + index;\n const key = item.displayId ?? item.id ?? `${item.title}-${absoluteIndex}`;\n const styles =\n categoryStyles[item.type as keyof typeof categoryStyles] ?? categoryStyles.market;\n const dateLabel =\n (item.isNew ?? (highlightFirst && absoluteIndex === 0))\n ? \"Just now\"\n : typeof item.date === \"string\" && item.date.trim().length > 0\n ? item.date\n : formatDate(item.date);\n const isHighlighted = item.isNew ?? (highlightFirst && absoluteIndex === 0);\n\n return (\n <div\n key={key}\n style={{\n padding: \"0.75rem\",\n borderRadius: \"6px\",\n backgroundColor: isHighlighted ? \"rgba(14, 203, 129, 0.1)\" : \"transparent\",\n border: \"1px solid transparent\",\n transition: \"background-color 0.2s\",\n animation: item.isNew ? \"propertyNewsSlideIn 0.5s ease-out\" : undefined,\n }}\n >\n <p style={{ fontSize: \"0.9375rem\", fontWeight: 500, marginBottom: \"0.35rem\" }}>\n {item.title}\n </p>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"#b5b8c5\",\n }}\n >\n <span style={{ color: isHighlighted ? \"#0ecb81\" : \"inherit\" }}>{dateLabel}</span>\n <span\n style={{\n padding: \"0.25rem 0.6rem\",\n borderRadius: \"4px\",\n border: `1px solid ${styles.borderColor}`,\n backgroundColor: styles.backgroundColor,\n color: styles.color,\n fontSize: \"0.68rem\",\n fontWeight: 600,\n textTransform: \"uppercase\",\n }}\n >\n {item.type === \"property\" ? styles.label : \"Market News\"}\n </span>\n </div>\n </div>\n );\n })\n : emptyState ?? (\n <div className=\"flex flex-col items-center justify-center rounded-2xl border border-dashed border-white/20 px-6 py-10 text-center text-sm text-white/60\">\n <Newspaper className=\"mb-3 h-8 w-8 text-white/40\" />\n No property news yet. Updates will land here as soon as we receive new intelligence.\n </div>\n )}\n </div>\n\n {hasItems && totalPages > 1 ? (\n <div className=\"mt-4 flex items-center justify-between text-xs text-white/60\">\n <button\n type=\"button\"\n onClick={() => setPage((prev) => Math.max(0, prev - 1))}\n disabled={page === 0}\n className={cn(\n \"rounded-full border border-white/15 px-3 py-1 uppercase tracking-[0.2em]\",\n page === 0 ? \"opacity-40 cursor-not-allowed\" : \"hover:border-white/40\"\n )}\n >\n Prev\n </button>\n <span className=\"font-medium text-white/70\">\n Page {page + 1} / {totalPages}\n </span>\n <button\n type=\"button\"\n onClick={() => setPage((prev) => Math.min(totalPages - 1, prev + 1))}\n disabled={page >= totalPages - 1}\n className={cn(\n \"rounded-full border border-white/15 px-3 py-1 uppercase tracking-[0.2em]\",\n page >= totalPages - 1 ? \"opacity-40 cursor-not-allowed\" : \"hover:border-white/40\"\n )}\n >\n Next\n </button>\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nPropertyNewsUpdates.displayName = \"PropertyNewsUpdates\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\ntype RangeInputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n>;\n\nexport interface TradingSliderProps extends RangeInputProps {\n /**\n * Controlled slider value\n */\n value?: number;\n /**\n * Initial value for the uncontrolled mode\n */\n defaultValue?: number;\n /**\n * Fires whenever the thumb value changes\n */\n onValueChange?: (value: number, event: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Label displayed on top of the slider card\n */\n label?: string;\n /**\n * Small helper copy rendered under the label\n */\n helperText?: string;\n /**\n * Custom formatter for the highlighted value on the right\n */\n formatValue?: (value: number) => React.ReactNode;\n /**\n * Text shown next to the minimum tick\n */\n minLabel?: string;\n /**\n * Text shown next to the maximum tick\n */\n maxLabel?: string;\n /**\n * Accent color used for the filled portion of the track\n */\n accentColor?: string;\n}\n\nconst defaultFormat = (value: number) =>\n new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n notation: value >= 100000 ? \"compact\" : \"standard\",\n maximumFractionDigits: value >= 1000 ? 0 : 2,\n }).format(value);\n\nexport const TradingSlider = React.forwardRef<HTMLInputElement, TradingSliderProps>(\n (\n {\n label = \"Trade size\",\n helperText = \"Drag to pick the desired notional.\",\n min = 0,\n max = 100000,\n step = 1000,\n minLabel,\n maxLabel,\n formatValue = defaultFormat,\n accentColor = \"#14b8a6\",\n value,\n defaultValue,\n onValueChange,\n className,\n ...rest\n },\n ref\n ) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState(\n defaultValue ?? (typeof min === \"number\" ? min : 0)\n );\n\n const currentValue = isControlled ? Number(value) : internalValue;\n const parsedMin = Number(min ?? 0);\n const parsedMax = Number(max ?? 100);\n const percent =\n ((currentValue - parsedMin) / (parsedMax - parsedMin || 1)) * 100;\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(event.target.value);\n if (!isControlled) {\n setInternalValue(next);\n }\n onValueChange?.(next, event);\n };\n\n return (\n <div className={cn(\"rounded-3xl border border-slate-200 bg-white p-6 shadow-sm\", className)}>\n <div className=\"flex items-end justify-between gap-4\">\n <div>\n <p className=\"text-sm font-medium uppercase tracking-wide text-slate-500\">{label}</p>\n <p className=\"text-sm text-slate-500\">{helperText}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs uppercase tracking-wide text-slate-500\">Selected</p>\n <p className=\"text-2xl font-semibold text-slate-900\">\n {formatValue(currentValue)}\n </p>\n </div>\n </div>\n <div className=\"mt-6 space-y-3\">\n <div className=\"relative\">\n <input\n type=\"range\"\n min={parsedMin}\n max={parsedMax}\n step={step}\n value={currentValue}\n onChange={handleChange}\n ref={ref}\n className=\"h-3 w-full appearance-none rounded-full bg-slate-200 accent-teal-500\"\n style={{\n background: `linear-gradient(90deg, ${accentColor} ${percent}%, #e2e8f0 ${percent}%)`,\n }}\n {...rest}\n />\n <div\n className=\"pointer-events-none absolute -top-7 translate-x-1/2 rounded-full border border-slate-200 bg-white px-3 py-1 text-xs font-medium text-slate-700 shadow\"\n style={{ right: `calc(${100 - percent}% - 12px)` }}\n >\n {formatValue(currentValue)}\n </div>\n </div>\n <div className=\"flex justify-between text-xs font-semibold text-slate-500\">\n <span>{minLabel ?? formatValue(parsedMin)}</span>\n <span>{maxLabel ?? formatValue(parsedMax)}</span>\n </div>\n </div>\n </div>\n );\n }\n);\n\nTradingSlider.displayName = \"TradingSlider\";\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type MobileTradeNavItem = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n};\n\nexport type MobileTradeNavProps = React.HTMLAttributes<HTMLDivElement> & {\n items: MobileTradeNavItem[];\n activeId: string;\n onChange?: (itemId: string) => void;\n};\n\nconst MobileToggleContainer = styled.div`\n display: none;\n \n @media (max-width: 1024px) {\n display: flex;\n gap: 0.5rem;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: var(--color-card-darker, #111);\n padding: 0.75rem 1rem;\n padding-bottom: calc(0.75rem + env(safe-area-inset-bottom, 0px));\n border-top: 1px solid var(--color-border);\n z-index: 100;\n box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.3);\n }\n`;\n\nconst MobileToggleButton = styled.button<{ active: boolean }>`\n flex: 1;\n padding: 0.75rem;\n background-color: ${(props) => (props.active ? \"var(--color-accent)\" : \"transparent\")};\n color: ${(props) => (props.active ? \"#000\" : \"var(--color-text-secondary)\")};\n border: ${(props) =>\n props.active ? \"1px solid var(--color-accent)\" : \"1px solid rgba(255, 255, 255, 0.2)\"};\n border-radius: 6px;\n font-size: 0.9rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n \n &:hover {\n background-color: ${(props) =>\n props.active ? \"var(--color-accent-hover)\" : \"rgba(255, 255, 255, 0.05)\"};\n border-color: ${(props) =>\n props.active ? \"var(--color-accent)\" : \"rgba(255, 255, 255, 0.3)\"};\n }\n \n @media (max-width: 480px) {\n font-size: 0.85rem;\n padding: 0.6rem 0.5rem;\n }\n`;\n\nexport const MobileTradeNav = React.forwardRef<HTMLDivElement, MobileTradeNavProps>(\n ({ className, items, activeId, onChange, ...props }, ref) => {\n return (\n <MobileToggleContainer ref={ref} className={cn(className)} {...props}>\n {items.map((item) => (\n <MobileToggleButton\n key={item.id}\n type=\"button\"\n active={item.id === activeId}\n onClick={() => onChange?.(item.id)}\n >\n {item.icon}\n {item.label}\n </MobileToggleButton>\n ))}\n </MobileToggleContainer>\n );\n }\n);\n\nMobileTradeNav.displayName = \"MobileTradeNav\";\n","import * as React from 'react'\n\nexport type TradeConfirmationModalDetails = {\n type: 'buy' | 'sell'\n orderType: 'market' | 'limit'\n quantity: number\n price?: number | null\n totalValue?: number | null\n tokenSymbol: string\n willExecuteImmediately?: boolean\n}\n\nexport type TradeConfirmationModalProps = {\n isOpen: boolean\n onClose: () => void\n onConfirm: () => void\n orderDetails?: TradeConfirmationModalDetails | null\n className?: string\n estimatedFeeUsd?: number | null\n estimatedFeeBps?: number | null\n totalWithFeesUsd?: number | null\n confirmDisabled?: boolean\n confirmLoading?: boolean\n rememberChoiceChecked?: boolean\n rememberChoiceLabel?: string\n onRememberChoiceChange?: (checked: boolean) => void\n}\n\nfunction formatPrice(value: number | null | undefined): string {\n if (value == null || Number.isNaN(value)) {\n return '0.00'\n }\n return value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n}\n\nfunction formatQuantity(value: number | null | undefined): string {\n if (value == null || Number.isNaN(value)) {\n return '0'\n }\n return value.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })\n}\n\nfunction formatCurrency(value?: number | null): string {\n if (value == null || Number.isNaN(value)) return '—'\n return `$${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`\n}\n\nconst overlayStyle: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n backdropFilter: 'blur(4px)',\n padding: '1rem',\n}\n\nconst modalBaseStyle: React.CSSProperties = {\n background: 'linear-gradient(135deg, rgba(26, 29, 35, 0.95) 0%, rgba(26, 29, 35, 0.98) 100%)',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n borderRadius: '16px',\n padding: '2rem',\n width: '100%',\n maxWidth: '480px',\n boxShadow: '0 20px 60px rgba(0, 0, 0, 0.5)',\n color: '#fff',\n}\n\nconst headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '1.5rem',\n paddingBottom: '1rem',\n borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n}\n\nconst titleStyle: React.CSSProperties = {\n margin: 0,\n fontSize: '1.25rem',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n}\n\nconst badgeBaseStyle: React.CSSProperties = {\n display: 'inline-block',\n padding: '0.25rem 0.75rem',\n borderRadius: '6px',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n}\n\nconst detailRowBase: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.75rem 0',\n borderBottom: '1px solid rgba(255, 255, 255, 0.08)',\n}\n\nconst detailLabelStyle: React.CSSProperties = {\n color: 'rgba(255, 255, 255, 0.6)',\n fontSize: '0.9rem',\n}\n\nconst detailValueStyle: React.CSSProperties = {\n color: '#fff',\n fontWeight: 500,\n fontSize: '0.95rem',\n}\n\nconst summaryBoxStyle: React.CSSProperties = {\n background: 'rgba(255, 255, 255, 0.03)',\n border: '1px solid rgba(255, 255, 255, 0.08)',\n borderRadius: '8px',\n padding: '1rem',\n marginBottom: '1.5rem',\n}\n\nconst summaryTextStyle: React.CSSProperties = {\n margin: 0,\n color: 'rgba(255, 255, 255, 0.8)',\n fontSize: '0.9rem',\n lineHeight: 1.5,\n}\n\nconst rememberChoiceRowStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '1.25rem',\n color: 'rgba(255, 255, 255, 0.8)',\n fontSize: '0.85rem',\n}\n\nconst rememberChoiceCheckboxBoxStyle: React.CSSProperties = {\n width: '18px',\n height: '18px',\n borderRadius: '4px',\n border: '1px solid rgba(255, 255, 255, 0.4)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.85rem',\n fontWeight: 700,\n transition: 'all 0.2s ease',\n lineHeight: 1,\n}\n\nconst rememberChoiceHiddenInputStyle: React.CSSProperties = {\n position: 'absolute',\n opacity: 0,\n pointerEvents: 'none',\n width: 0,\n height: 0,\n}\n\nconst buttonGroupStyle: React.CSSProperties = {\n display: 'flex',\n gap: '1rem',\n justifyContent: 'flex-end',\n}\n\nconst buttonBaseStyle: React.CSSProperties = {\n padding: '0.75rem 1.5rem',\n borderRadius: '8px',\n fontWeight: 600,\n fontSize: '0.95rem',\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n border: 'none',\n}\n\nexport function TradeConfirmationModal({\n isOpen,\n onClose,\n onConfirm,\n orderDetails,\n className,\n estimatedFeeUsd: _estimatedFeeUsd,\n estimatedFeeBps: _estimatedFeeBps,\n totalWithFeesUsd,\n confirmDisabled,\n confirmLoading,\n rememberChoiceChecked = false,\n rememberChoiceLabel = 'Remember this choice and auto-confirm next time',\n onRememberChoiceChange,\n}: TradeConfirmationModalProps): React.ReactElement | null {\n if (!isOpen || !orderDetails) return null\n\n const { type, orderType, quantity, price, totalValue, tokenSymbol, willExecuteImmediately } = orderDetails\n const isBuy = type === 'buy'\n const isLimit = orderType === 'limit'\n const netLabel = `Est. Total ${isBuy ? 'Cost' : 'Proceeds'}`\n const grossFallback = totalValue != null ? `$${formatPrice(totalValue)}` : '—'\n const netValue = totalWithFeesUsd != null ? formatCurrency(totalWithFeesUsd) : grossFallback\n\n const detailRows: Array<{ label: string; value: React.ReactNode; highlight?: boolean }> = [\n { label: 'Order Type', value: isLimit ? 'Limit Order' : 'Market Order' },\n { label: 'Token', value: tokenSymbol },\n { label: 'Quantity', value: `${formatQuantity(quantity)} tokens`, highlight: true },\n { label: 'Price', value: isLimit ? `$${formatPrice(price)}` : 'Market' },\n ]\n\n detailRows.push({ label: netLabel, value: netValue, highlight: true })\n\n const accentColor = isBuy ? '#0ecb81' : '#f6465d'\n const badgeStyle = {\n ...badgeBaseStyle,\n color: accentColor,\n border: `1px solid ${isBuy ? 'rgba(14, 203, 129, 0.3)' : 'rgba(246, 70, 93, 0.3)'}`,\n background: isBuy\n ? 'linear-gradient(135deg, rgba(14, 203, 129, 0.2) 0%, rgba(14, 203, 129, 0.1) 100%)'\n : 'linear-gradient(135deg, rgba(246, 70, 93, 0.2) 0%, rgba(246, 70, 93, 0.1) 100%)',\n } satisfies React.CSSProperties\n\n const cancelButtonStyle: React.CSSProperties = {\n ...buttonBaseStyle,\n background: 'rgba(255, 255, 255, 0.1)',\n color: 'rgba(255, 255, 255, 0.8)',\n border: '1px solid rgba(255, 255, 255, 0.2)',\n }\n\n const confirmButtonStyle: React.CSSProperties = {\n ...buttonBaseStyle,\n color: '#fff',\n background: isBuy\n ? 'linear-gradient(135deg, #0ecb81 0%, #0ba968 100%)'\n : 'linear-gradient(135deg, #f6465d 0%, #d93850 100%)',\n boxShadow: isBuy\n ? '0 4px 12px rgba(14, 203, 129, 0.3)'\n : '0 4px 12px rgba(246, 70, 93, 0.3)',\n opacity: confirmDisabled || confirmLoading ? 0.6 : 1,\n cursor: confirmDisabled || confirmLoading ? 'not-allowed' : 'pointer',\n }\n\n const showRememberChoice = typeof onRememberChoiceChange === 'function'\n\n return (\n <div style={overlayStyle} onClick={onClose} role=\"dialog\" aria-modal=\"true\">\n <div style={modalBaseStyle} className={className} onClick={(event) => event.stopPropagation()}>\n <header style={headerStyle}>\n <h3 style={titleStyle}>\n Confirm Order\n <span style={badgeStyle}>{isBuy ? 'BUY' : 'SELL'}</span>\n </h3>\n </header>\n\n <div style={{ marginBottom: '1.5rem' }}>\n {detailRows.map((row, index) => (\n <div\n key={`${row.label}-${index}`}\n style={{\n ...detailRowBase,\n borderBottom: index === detailRows.length - 1 ? 'none' : detailRowBase.borderBottom,\n }}\n >\n <span style={detailLabelStyle}>{row.label}</span>\n <span\n style={{\n ...detailValueStyle,\n color: row.highlight ? accentColor : detailValueStyle.color,\n fontWeight: row.highlight ? 600 : detailValueStyle.fontWeight,\n }}\n >\n {row.value}\n </span>\n </div>\n ))}\n </div>\n\n <section style={summaryBoxStyle}>\n <p style={summaryTextStyle}>\n {isLimit ? (\n willExecuteImmediately ? (\n <>\n Your limit {isBuy ? 'buy' : 'sell'} order will <strong style={{ color: '#fff' }}>execute immediately</strong> at market\n price because your limit price of <strong style={{ color: '#fff' }}>${formatPrice(price)}</strong> is\n {isBuy ? ' above' : ' below'} the current market.\n </>\n ) : (\n <>\n Your limit {isBuy ? 'buy' : 'sell'} order for{' '}\n <strong style={{ color: '#fff' }}>{formatQuantity(quantity)} tokens</strong> at{' '}\n <strong style={{ color: '#fff' }}>${formatPrice(price)}</strong> will be placed.\n </>\n )\n ) : (\n <>\n Your market {isBuy ? 'buy' : 'sell'} order for{' '}\n <strong style={{ color: '#fff' }}>{formatQuantity(quantity)} tokens</strong> will execute immediately at the best available\n market price.\n </>\n )}\n </p>\n </section>\n\n {showRememberChoice ? (\n <label style={{ ...rememberChoiceRowStyle, position: 'relative' }}>\n <input\n type=\"checkbox\"\n checked={rememberChoiceChecked}\n onChange={(event) => onRememberChoiceChange?.(event.target.checked)}\n style={rememberChoiceHiddenInputStyle}\n />\n <span\n aria-hidden=\"true\"\n style={{\n ...rememberChoiceCheckboxBoxStyle,\n borderColor: rememberChoiceChecked ? accentColor : rememberChoiceCheckboxBoxStyle.border as string,\n background: rememberChoiceChecked\n ? `linear-gradient(135deg, ${accentColor}33, ${accentColor}22)`\n : 'transparent',\n color: rememberChoiceChecked ? accentColor : 'transparent',\n }}\n >\n ✓\n </span>\n <span>{rememberChoiceLabel}</span>\n </label>\n ) : null}\n\n <div style={buttonGroupStyle}>\n <button type=\"button\" onClick={onClose} style={cancelButtonStyle}>\n Cancel\n </button>\n <button type=\"button\" onClick={confirmDisabled ? undefined : onConfirm} disabled={confirmDisabled || confirmLoading} style={confirmButtonStyle}>\n {confirmLoading ? 'Submitting…' : `Confirm ${isBuy ? 'Buy' : 'Sell'}`}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","import * as React from \"react\";\nimport styled, { keyframes } from \"styled-components\";\n\nimport loafLogoBanner from \"../assets/Loaf-logo-Banner.png\";\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.45;\n transform: scale(1);\n }\n 50% {\n opacity: 0.7;\n transform: scale(1.08);\n }\n`;\n\nconst shimmer = keyframes`\n 0% {\n background-position: -100% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`;\n\nconst LogoContainer = styled.span<{ $isGlowing?: boolean }>`\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.35rem 0.6rem;\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.05) 0%,\n rgba(240, 185, 11, 0.1) 50%,\n rgba(240, 185, 11, 0.05) 100%\n );\n border: 1px solid rgba(240, 185, 11, 0.3);\n border-radius: 5px;\n position: relative;\n overflow: visible;\n cursor: pointer;\n transition: all 0.3s ease;\n line-height: 1.4;\n\n ${(props) =>\n props.$isGlowing &&\n `\n border-color: rgba(240, 185, 11, 1);\n box-shadow: 0 0 25px rgba(240, 185, 11, 0.8),\n 0 0 40px rgba(240, 185, 11, 0.5),\n inset 0 0 20px rgba(240, 185, 11, 0.3);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.2) 0%,\n rgba(240, 185, 11, 0.3) 50%,\n rgba(240, 185, 11, 0.2) 100%\n );\n animation: quickPulse 0.35s ease-out;\n\n @keyframes quickPulse {\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n }\n `}\n\n @media (max-width: 768px) {\n padding: 0.3rem 0.4rem 0.3rem 0.25rem;\n gap: 0.25rem;\n border-radius: 4px;\n transform: none !important;\n transition: none;\n\n &:active {\n transform: none !important;\n }\n }\n\n @media (max-width: 480px) {\n padding: 0.2rem 0.3rem 0.2rem 0.2rem;\n gap: 0.2rem;\n transform: none !important;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border-color: rgba(240, 185, 11, 0.6);\n background: linear-gradient(\n 135deg,\n rgba(240, 185, 11, 0.1) 0%,\n rgba(240, 185, 11, 0.15) 50%,\n rgba(240, 185, 11, 0.1) 100%\n );\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 185, 11, 0.2);\n }\n }\n\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(\n 90deg,\n transparent,\n rgba(240, 185, 11, 0.1),\n transparent\n );\n background-size: 200% 100%;\n animation: ${shimmer} 3s infinite;\n pointer-events: none;\n }\n`;\n\nconst IconWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: 16px;\n height: 16px;\n\n @media (max-width: 768px) {\n width: 16px;\n height: 16px;\n }\n\n @media (max-width: 480px) {\n width: 14px;\n height: 14px;\n }\n`;\n\nconst IconCircle = styled.div<{ $size: number; $color: string; $duration: number; $delay: number }>`\n position: absolute;\n width: ${(props) => props.$size}px;\n height: ${(props) => props.$size}px;\n border: 2px solid ${(props) => props.$color};\n border-radius: 50%;\n animation: ${pulse} ${(props) => props.$duration}s infinite cubic-bezier(0.4, 0, 0.6, 1);\n animation-delay: ${(props) => props.$delay}s;\n transform-origin: center;\n will-change: transform, opacity;\n`;\n\nconst IconCore = styled.div`\n width: 5px;\n height: 5px;\n background: linear-gradient(135deg, #0ecb81 0%, #2ecc71 100%);\n border-radius: 50%;\n box-shadow: 0 0 6px rgba(14, 203, 129, 0.6);\n position: relative;\n z-index: 1;\n`;\n\nconst LogoText = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 0.2rem;\n position: relative;\n z-index: 1;\n vertical-align: middle;\n`;\n\nconst LoafLogoImage = styled.img`\n height: 20px;\n position: relative;\n z-index: 1;\n\n @media (max-width: 768px) {\n height: 20px;\n }\n\n @media (max-width: 480px) {\n height: 18px;\n }\n`;\n\nconst LiquidityText = styled.span`\n font-size: 0.65rem;\n font-weight: 400;\n background: linear-gradient(135deg, #f0b90b 0%, #ffd700 50%, #f0b90b 100%);\n background-size: 200% auto;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n letter-spacing: 0.3px;\n font-family: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n opacity: 0.75;\n align-self: center;\n line-height: 1;\n display: flex;\n align-items: center;\n position: relative;\n top: 1px;\n\n @media (max-width: 768px) {\n font-size: 0.6rem;\n letter-spacing: 0.2px;\n }\n\n @media (max-width: 480px) {\n font-size: 0.55rem;\n letter-spacing: 0.1px;\n }\n`;\n\nexport type LoafLiquidityLogoProps = {\n onClick?: () => void;\n isGlowing?: boolean;\n className?: string;\n};\n\nexport const LoafLiquidityLogo: React.FC<LoafLiquidityLogoProps> = ({\n onClick,\n isGlowing,\n className,\n}) => {\n return (\n <LogoContainer onClick={onClick} $isGlowing={isGlowing} className={className}>\n <LogoText>\n <LoafLogoImage src={loafLogoBanner} alt=\"Loaf\" />\n <LiquidityText>Liquidity</LiquidityText>\n </LogoText>\n <IconWrapper>\n <IconCore />\n <IconCircle $size={10} $color=\"rgba(14, 203, 129, 0.5)\" $duration={4} $delay={0} />\n <IconCircle $size={13} $color=\"rgba(14, 203, 129, 0.35)\" $duration={5.2} $delay={0.7} />\n <IconCircle $size={16} $color=\"rgba(14, 203, 129, 0.25)\" $duration={6.3} $delay={1.3} />\n </IconWrapper>\n </LogoContainer>\n );\n};\n\nLoafLiquidityLogo.displayName = \"LoafLiquidityLogo\";\n","import * as React from \"react\";\n\nexport type YourOrderSide = \"buy\" | \"sell\";\n\nexport type YourOrder = {\n id: string;\n asset: string;\n side?: YourOrderSide;\n date?: string;\n price: number;\n amount: number;\n total: number;\n filledPercent?: number;\n status?: string;\n propertyPercent?: number;\n portfolioSharePercent?: number;\n avgEntryPrice?: number;\n pnlValue?: number;\n pnlPercent?: number;\n holdingLabel?: string;\n value?: number;\n currentPrice?: number;\n priceChangePercent?: number;\n priceChangePositive?: boolean;\n};\n\nexport type YourOrdersTab = {\n id: string;\n label: string;\n title?: string;\n orders: YourOrder[];\n emptyState?: string;\n enableCancel?: boolean;\n columnVisibility?: {\n propertyPercent?: boolean;\n pnl?: boolean;\n };\n};\n\nexport type RenderTabContentArgs = {\n tab: YourOrdersTab;\n orders: YourOrder[];\n page: number;\n totalPages: number;\n totalOrders: number;\n pageSize: number;\n onPageChange: (page: number) => void;\n};\n\nexport type YourOrdersProps = React.HTMLAttributes<HTMLDivElement> & {\n title?: string;\n orders?: YourOrder[];\n tabs?: YourOrdersTab[];\n activeTabId?: string;\n onTabChange?: (tabId: string) => void;\n renderOrderActions?: (order: YourOrder) => React.ReactNode;\n renderTabContent?: (args: RenderTabContentArgs) => React.ReactNode | null;\n pageSize?: number;\n};\n\nconst DEFAULT_TABS = [\n { id: \"portfolio\", label: \"Portfolio\" },\n { id: \"openOrders\", label: \"Open Orders\" },\n { id: \"tradeHistory\", label: \"Trade History\" },\n { id: \"orderHistory\", label: \"Order History\" },\n] as const;\n\nconst panelStyle: React.CSSProperties = {\n width: \"100%\",\n borderRadius: \"16px\",\n backgroundColor: \"#0b0e10\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n color: \"#ffffff\",\n display: \"flex\",\n flexDirection: \"column\",\n};\n\nconst headerStyle: React.CSSProperties = {\n padding: \"1.25rem 1.5rem 0.5rem\",\n};\n\nconst titleStyle: React.CSSProperties = {\n margin: 0,\n fontSize: \"1.1rem\",\n fontWeight: 600,\n};\n\nconst tabsRowStyle: React.CSSProperties = {\n display: \"flex\",\n gap: \"0.5rem\",\n padding: \"0 1.5rem\",\n borderBottom: \"1px solid rgba(255,255,255,0.08)\",\n};\n\nconst tabButtonBase: React.CSSProperties = {\n background: \"none\",\n border: \"none\",\n color: \"rgba(255,255,255,0.5)\",\n fontSize: \"0.9rem\",\n fontWeight: 400,\n padding: \"0.75rem 1rem\",\n cursor: \"pointer\",\n position: \"relative\",\n transition: \"color 0.2s ease\",\n};\n\nconst tabContentWrapper: React.CSSProperties = {\n padding: \"1.25rem 1.5rem 1.5rem\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.75rem\",\n flex: 1,\n};\n\nconst paginationContainerStyle: React.CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginTop: \"0.75rem\",\n paddingTop: \"0.75rem\",\n borderTop: \"1px solid rgba(255,255,255,0.08)\",\n fontSize: \"0.85rem\",\n color: \"rgba(255,255,255,0.7)\",\n};\n\nconst paginationButtonsStyle: React.CSSProperties = {\n display: \"flex\",\n gap: \"0.5rem\",\n};\n\nconst paginationButtonStyle: React.CSSProperties = {\n border: \"1px solid rgba(255,255,255,0.2)\",\n background: \"rgba(255,255,255,0.05)\",\n color: \"#fff\",\n borderRadius: \"6px\",\n padding: \"0.35rem 0.9rem\",\n fontSize: \"0.8rem\",\n cursor: \"pointer\",\n transition: \"opacity 0.2s ease\",\n};\n\nconst tableHeaderStyle: React.CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"1.8fr 0.9fr 0.7fr 0.8fr 0.8fr 1fr\",\n gap: \"0.5rem\",\n paddingBottom: \"0.75rem\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n minWidth: \"700px\",\n};\n\nconst tableHeaderCell: React.CSSProperties = {\n fontSize: \"0.7rem\",\n fontWeight: 700,\n color: \"#ffffff\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.3px\",\n};\n\nconst emptyStateStyle: React.CSSProperties = {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n color: \"rgba(255,255,255,0.6)\",\n fontSize: \"0.95rem\",\n border: \"1px dashed rgba(255,255,255,0.12)\",\n borderRadius: \"8px\",\n minHeight: \"220px\",\n};\n\nconst rowStyle: React.CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"1.8fr 0.9fr 0.7fr 0.8fr 0.8fr 1fr\",\n gap: \"0.5rem\",\n alignItems: \"center\",\n minWidth: \"700px\",\n padding: \"0.75rem 0\",\n borderBottom: \"1px solid rgba(255,255,255,0.08)\",\n};\n\nconst formatCurrency = (value?: number) => {\n if (value == null || Number.isNaN(value)) return \"—\";\n return `$${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n};\n\nconst formatPercent = (value?: number, fractionDigits = 2) => {\n if (value == null || Number.isNaN(value)) return \"—\";\n return `${value.toFixed(fractionDigits)}%`;\n};\n\nexport const YourOrders = React.forwardRef<HTMLDivElement, YourOrdersProps>(\n ({\n className,\n title,\n orders,\n tabs,\n activeTabId,\n onTabChange,\n renderOrderActions,\n renderTabContent,\n pageSize: pageSizeOverride,\n ...props\n }, ref) => {\n const [internalActiveTab, setInternalActiveTab] = React.useState<string>(tabs?.[0]?.id ?? \"portfolio\");\n const [page, setPage] = React.useState(0);\n \n const effectiveActiveTabId = activeTabId ?? internalActiveTab;\n React.useEffect(() => {\n setPage(0);\n }, [effectiveActiveTabId]);\n\n const handleTabChange = (tabId: string) => {\n if (onTabChange) {\n onTabChange(tabId);\n } else {\n setInternalActiveTab(tabId);\n }\n };\n \n const resolvedTabs: YourOrdersTab[] = tabs ?? DEFAULT_TABS.map(t => ({ ...t, orders: orders ?? [], emptyState: `No ${t.label.toLowerCase()} data available.` }));\n const activeTab = resolvedTabs.find(t => t.id === effectiveActiveTabId) ?? resolvedTabs[0];\n const activeOrders = activeTab?.orders ?? orders ?? [];\n const DEFAULT_PAGE_SIZE = 5;\n const HISTORY_PAGE_SIZE = 3;\n const resolvedPageSize = pageSizeOverride ?? ((activeTab?.id === \"order-history\" || activeTab?.id === \"trade-history\")\n ? HISTORY_PAGE_SIZE\n : DEFAULT_PAGE_SIZE);\n const pageSize = Math.max(1, resolvedPageSize);\n const totalOrders = activeOrders.length;\n const totalPages = Math.max(1, Math.ceil(totalOrders / pageSize));\n const safePage = Math.min(page, totalPages - 1);\n const pageStart = safePage * pageSize;\n const paginatedOrders = activeOrders.slice(pageStart, pageStart + pageSize);\n const tabSupportsActions = activeTab?.enableCancel ?? true;\n const showActionsColumn = Boolean(renderOrderActions && tabSupportsActions);\n const columnVisibility = activeTab?.columnVisibility ?? {};\n const showPropertyPercentColumn = columnVisibility.propertyPercent !== false;\n const showPnlColumn = columnVisibility.pnl !== false;\n const columnTemplateParts = [\"1.8fr\", \"0.9fr\", \"0.7fr\", ...(showPropertyPercentColumn ? [\"0.8fr\"] : []), \"0.8fr\", ...(showPnlColumn ? [\"1fr\"] : [])];\n if (showActionsColumn) {\n columnTemplateParts.push(\"0.8fr\");\n }\n const gridTemplateColumns = columnTemplateParts.join(\" \");\n const displayTitle = title ?? activeTab?.title ?? activeTab?.label ?? \"Portfolio Holdings\";\n\n console.log('[YourOrders] tabs:', tabs?.map(t => ({ id: t.id, ordersCount: t.orders?.length })));\n console.log('[YourOrders] activeTabId prop:', activeTabId);\n console.log('[YourOrders] effectiveActiveTabId:', effectiveActiveTabId);\n console.log('[YourOrders] activeTab:', activeTab?.id, 'orders count:', activeOrders?.length);\n\n const hasOrders = Array.isArray(activeOrders) && activeOrders.length > 0;\n const emptyMessage = activeTab?.emptyState ?? \"No holdings yet. Start trading to build your portfolio.\";\n\n const renderOrders = () => {\n if (!hasOrders) {\n return <div style={emptyStateStyle}>{emptyMessage}</div>;\n }\n\n return (\n <>\n <div style={{ ...tableHeaderStyle, gridTemplateColumns }}>\n <div style={tableHeaderCell}>Property</div>\n <div style={tableHeaderCell}>Value</div>\n <div style={tableHeaderCell}>Holding</div>\n {showPropertyPercentColumn ? <div style={tableHeaderCell}>% of Property</div> : null}\n <div style={tableHeaderCell}>Avg Price</div>\n {showPnlColumn ? <div style={tableHeaderCell}>P&amp;L</div> : null}\n {showActionsColumn ? (\n <div style={{ ...tableHeaderCell, textAlign: \"right\" }}>Actions</div>\n ) : null}\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.65rem\" }}>\n {paginatedOrders.map((order) => {\n const propertyName = order.asset;\n const holding =\n order.holdingLabel ??\n `${order.amount.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n })} ${propertyName}`;\n const value = order.value ?? order.total;\n const portfolioShare =\n order.portfolioSharePercent != null\n ? `${order.portfolioSharePercent.toFixed(1)}% of portfolio`\n : undefined;\n const propertyPercent = order.propertyPercent;\n const avgPrice = order.avgEntryPrice ?? order.price;\n const pnlValue = order.pnlValue;\n const pnlPercent = order.pnlPercent;\n const pnlPositive = pnlValue != null ? pnlValue >= 0 : (pnlPercent ?? 0) >= 0;\n const currentPrice = order.currentPrice ?? order.price;\n const priceChangePercent = order.priceChangePercent ?? order.pnlPercent;\n const priceChangePositive =\n order.priceChangePositive ?? (priceChangePercent != null ? priceChangePercent >= 0 : undefined);\n\n return (\n <div key={order.id} style={{ ...rowStyle, gridTemplateColumns }}>\n <div style={{ display: \"flex\", gap: \"1rem\", alignItems: \"center\" }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.15rem\" }}>\n <div style={{ fontSize: \"0.9rem\", fontWeight: 500 }}>{propertyName}</div>\n {portfolioShare ? (\n <div style={{ fontSize: \"0.72rem\", color: \"rgba(255,255,255,0.5)\" }}>{portfolioShare}</div>\n ) : null}\n </div>\n {currentPrice != null ? (\n <div>\n <div\n style={{\n fontSize: \"0.9rem\",\n color: \"var(--color-text, #ffffff)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.25rem\",\n }}\n >\n {priceChangePositive != null ? (\n <span\n style={{\n color: priceChangePositive ? \"#0ecb81\" : \"#f6465d\",\n fontSize: \"0.7em\",\n }}\n >\n {priceChangePositive ? \"▲\" : \"▼\"}\n </span>\n ) : null}\n {formatCurrency(currentPrice)}\n </div>\n {priceChangePercent != null ? (\n <div\n style={{\n fontSize: \"0.7rem\",\n color: priceChangePositive ? \"#0ecb81\" : \"#f6465d\",\n }}\n >\n ({priceChangePositive ? \"+\" : \"\"}\n {priceChangePercent.toFixed(2)}%)\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n <div style={{ fontSize: \"0.9rem\", fontWeight: 500, color: \"#D4AF37\" }}>{formatCurrency(value)}</div>\n <div style={{ fontSize: \"0.9rem\", color: \"rgba(255,255,255,0.92)\" }}>{holding}</div>\n {showPropertyPercentColumn ? (\n <div style={{ fontSize: \"0.9rem\", color: \"rgba(255,255,255,0.8)\" }}>{formatPercent(propertyPercent, 3)}</div>\n ) : null}\n <div style={{ fontSize: \"0.9rem\", color: \"rgba(255,255,255,0.9)\" }}>{formatCurrency(avgPrice)}</div>\n {showPnlColumn ? (\n <div\n style={{\n fontSize: \"0.9rem\",\n fontWeight: 500,\n color: pnlPositive ? \"#0ecb81\" : \"#f6465d\",\n }}\n >\n {pnlValue != null ? `${pnlPositive ? \"+\" : \"-\"}${formatCurrency(Math.abs(pnlValue))}` : formatCurrency(pnlValue)}\n {pnlPercent != null ? (\n <span style={{ marginLeft: \"0.35rem\", fontSize: \"0.75rem\", color: \"rgba(255,255,255,0.6)\" }}>\n ({pnlPositive ? \"+\" : \"\"}\n {pnlPercent.toFixed(1)}%)\n </span>\n ) : null}\n </div>\n ) : null}\n {showActionsColumn ? (\n <div style={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n {renderOrderActions?.(order)}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n </>\n );\n };\n\n const handlePageChange = (nextPage: number) => {\n if (nextPage < 0 || nextPage >= totalPages) return;\n setPage(nextPage);\n };\n\n const customTabContent = renderTabContent?.({\n tab: activeTab,\n orders: paginatedOrders,\n page: safePage,\n totalPages,\n totalOrders,\n pageSize,\n onPageChange: handlePageChange,\n });\n const tabContent = customTabContent ?? renderOrders();\n\n const renderPagination = () => {\n if (!hasOrders || totalPages <= 1) return null;\n const rangeStart = pageStart + 1;\n const rangeEnd = Math.min(pageStart + pageSize, totalOrders);\n return (\n <div style={paginationContainerStyle}>\n <span>\n Showing {rangeStart}-{rangeEnd} of {totalOrders}\n </span>\n <div style={paginationButtonsStyle}>\n <button\n type=\"button\"\n onClick={() => handlePageChange(safePage - 1)}\n disabled={safePage === 0}\n style={{\n ...paginationButtonStyle,\n opacity: safePage === 0 ? 0.4 : 1,\n cursor: safePage === 0 ? \"not-allowed\" : \"pointer\",\n }}\n >\n Prev\n </button>\n <button\n type=\"button\"\n onClick={() => handlePageChange(safePage + 1)}\n disabled={safePage >= totalPages - 1}\n style={{\n ...paginationButtonStyle,\n opacity: safePage >= totalPages - 1 ? 0.4 : 1,\n cursor: safePage >= totalPages - 1 ? \"not-allowed\" : \"pointer\",\n }}\n >\n Next\n </button>\n </div>\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n style={{ ...panelStyle, ...(props.style ?? {}) }}\n className={className}\n {...props}\n >\n <div style={headerStyle}>\n <h3 style={titleStyle}>{displayTitle}</h3>\n </div>\n\n {resolvedTabs.length > 1 && (\n <div style={tabsRowStyle}>\n {resolvedTabs.map((tab) => {\n const isActive = effectiveActiveTabId === tab.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => handleTabChange(tab.id)}\n style={{\n ...tabButtonBase,\n color: isActive ? \"#ffffff\" : \"rgba(255,255,255,0.55)\",\n fontWeight: isActive ? 600 : 400,\n }}\n >\n {tab.label}\n {isActive ? (\n <div\n style={{\n position: \"absolute\",\n bottom: \"-1px\",\n left: 0,\n right: 0,\n height: \"2px\",\n background: \"#f0b90b\",\n }}\n />\n ) : null}\n </button>\n );\n })}\n </div>\n )}\n\n <div style={tabContentWrapper}>\n {tabContent}\n {renderPagination()}\n </div>\n </div>\n );\n }\n);\n\nYourOrders.displayName = \"YourOrders\";\n","import * as React from \"react\";\nimport * as LightweightCharts from \"lightweight-charts\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PriceChartRange = \"30s\" | \"1m\" | \"5m\" | \"15m\" | \"1h\" | \"4h\" | \"24h\" | \"1W\" | \"1M\";\n\nexport type PriceChartCandle = {\n time: LightweightCharts.Time;\n open: number;\n high: number;\n low: number;\n close: number;\n};\n\nexport type PriceChartProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title?: string;\n ranges?: PriceChartRange[];\n selectedRange?: PriceChartRange;\n onRangeChange?: (range: PriceChartRange) => void;\n data: PriceChartCandle[];\n price?: number;\n changePercent?: number;\n currencySymbol?: string;\n height?: number;\n};\n\nconst timeToDate = (time: LightweightCharts.Time): Date | null => {\n if (typeof time === \"number\") {\n return new Date(time * 1000);\n }\n if (typeof time === \"object\" && time !== null && \"year\" in time && \"month\" in time && \"day\" in time) {\n const { year, month, day } = time as { year: number; month: number; day: number };\n return new Date(Date.UTC(year, month - 1, day));\n }\n return null;\n};\n\nconst createTickFormatter = (formatOptions: Intl.DateTimeFormatOptions) => {\n return (time: LightweightCharts.Time, _tickMarkType?: LightweightCharts.TickMarkType, locale?: string) => {\n const date = timeToDate(time);\n if (!date) return \"\";\n return date.toLocaleString(locale || undefined, formatOptions);\n };\n};\n\nconst getTimeScaleOptions = (\n range: PriceChartRange,\n): LightweightCharts.DeepPartial<LightweightCharts.TimeScaleOptions> => {\n switch (range) {\n case \"30s\":\n return {\n timeVisible: true,\n secondsVisible: true,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" }),\n };\n case \"1m\":\n return {\n timeVisible: true,\n secondsVisible: true,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" }),\n };\n case \"5m\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\" }),\n };\n case \"15m\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\" }),\n };\n case \"1h\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ hour: \"2-digit\", minute: \"2-digit\" }),\n };\n case \"4h\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ weekday: \"short\", hour: \"2-digit\" }),\n };\n case \"24h\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ month: \"short\", day: \"numeric\" }),\n };\n case \"1W\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ month: \"short\", day: \"numeric\" }),\n };\n case \"1M\":\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n tickMarkFormatter: createTickFormatter({ month: \"short\", year: \"2-digit\" }),\n };\n default:\n return {\n timeVisible: true,\n secondsVisible: false,\n borderColor: \"rgba(255,255,255,0.06)\",\n };\n }\n};\n\nconst getPriceScaleOptions = (data: PriceChartCandle[]): LightweightCharts.DeepPartial<LightweightCharts.PriceScaleOptions> => {\n if (!data.length) return {\n borderColor: \"rgba(230, 200, 126, 0.25)\",\n textColor: \"rgba(230, 200, 126, 0.7)\",\n };\n \n const prices = data.flatMap(d => [d.open, d.high, d.low, d.close]);\n const minPrice = Math.min(...prices);\n const maxPrice = Math.max(...prices);\n const priceRange = maxPrice - minPrice;\n \n // Adjust scale formatting based on price range\n let scaleMargins = { top: 0.1, bottom: 0.1 };\n \n if (priceRange < 1) {\n // For small price ranges, give more margin\n scaleMargins = { top: 0.2, bottom: 0.2 };\n } else if (priceRange > 1000) {\n // For large price ranges, reduce margin\n scaleMargins = { top: 0.05, bottom: 0.05 };\n }\n \n return {\n borderColor: \"rgba(230, 200, 126, 0.25)\",\n textColor: \"rgba(230, 200, 126, 0.7)\",\n scaleMargins,\n };\n};\n\nconst defaultRanges: PriceChartRange[] = [\"30s\", \"1m\", \"5m\", \"15m\", \"1h\", \"4h\", \"24h\", \"1W\", \"1M\"];\nconst VISIBLE_RANGE_COUNT = 4;\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n};\n\ntype ChartApiWithSeries = LightweightCharts.IChartApi & {\n addSeries?: (\n seriesCtor: unknown,\n options?: LightweightCharts.DeepPartial<LightweightCharts.SeriesOptionsMap[\"Candlestick\"]>,\n ) => LightweightCharts.ISeriesApi<\"Candlestick\">;\n};\n\nfunction createCandlestickSeries(\n chart: LightweightCharts.IChartApi,\n options: LightweightCharts.DeepPartial<LightweightCharts.SeriesOptionsMap[\"Candlestick\"]>,\n): LightweightCharts.ISeriesApi<\"Candlestick\"> {\n const chartWithSeries = chart as ChartApiWithSeries;\n if (typeof chartWithSeries.addCandlestickSeries === \"function\") {\n return chartWithSeries.addCandlestickSeries(options);\n }\n\n const candlestickCtor = (LightweightCharts as unknown as { CandlestickSeries?: unknown }).CandlestickSeries;\n if (typeof chartWithSeries.addSeries === \"function\" && candlestickCtor) {\n return chartWithSeries.addSeries(candlestickCtor, options);\n }\n\n throw new Error(\"Candlestick series API is not available in the current lightweight-charts version.\");\n}\n\nexport const PriceChart = React.forwardRef<HTMLDivElement, PriceChartProps>(\n (\n {\n className,\n title = \"Price Chart\",\n ranges = defaultRanges,\n selectedRange,\n onRangeChange,\n data,\n price,\n changePercent,\n currencySymbol = \"$\",\n height = 301.52,\n ...props\n },\n ref\n ) => {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const chartRef = React.useRef<LightweightCharts.IChartApi | null>(null);\n const seriesRef = React.useRef<LightweightCharts.ISeriesApi<\"Candlestick\"> | null>(null);\n const priceLineRef = React.useRef<LightweightCharts.IPriceLine | null>(null);\n const [hoveredRange, setHoveredRange] = React.useState<PriceChartRange | null>(null);\n const [dropdownOpen, setDropdownOpen] = React.useState(false);\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n const isAutoScrollRef = React.useRef(true);\n\n const visibleRanges = ranges.slice(0, VISIBLE_RANGE_COUNT);\n const dropdownRanges = ranges.slice(VISIBLE_RANGE_COUNT);\n const selectedInDropdown = dropdownRanges.includes(selectedRange as PriceChartRange);\n\n React.useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const resolvedPrice = React.useMemo(() => {\n if (price != null) return price;\n const last = data.at(-1);\n return last?.close;\n }, [data, price]);\n\n const inferredChangePercent = React.useMemo(() => {\n if (changePercent != null) return changePercent;\n const first = data[0]?.open;\n const last = data.at(-1)?.close;\n if (first == null || last == null || first === 0) return undefined;\n return ((last - first) / first) * 100;\n }, [changePercent, data]);\n\n const dollarChange = React.useMemo(() => {\n const first = data[0]?.open;\n const last = data.at(-1)?.close;\n if (first == null || last == null) return undefined;\n return last - first;\n }, [data]);\n\n React.useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = LightweightCharts.createChart(el, {\n autoSize: true,\n layout: {\n background: { color: \"transparent\" },\n textColor: \"rgba(255,255,255,0.55)\",\n fontFamily: \"inherit\",\n },\n grid: {\n vertLines: { color: \"rgba(255,255,255,0.06)\" },\n horzLines: { color: \"rgba(255,255,255,0.06)\" },\n },\n rightPriceScale: getPriceScaleOptions(data),\n timeScale: getTimeScaleOptions(selectedRange || defaultRanges[0]),\n crosshair: {\n vertLine: { color: \"rgba(255,255,255,0.12)\" },\n horzLine: { color: \"rgba(255,255,255,0.12)\" },\n },\n });\n\n const series = createCandlestickSeries(chart, {\n upColor: \"#0ecb81\",\n downColor: \"#f6465d\",\n borderVisible: false,\n wickUpColor: \"#0ecb81\",\n wickDownColor: \"#f6465d\",\n });\n\n chartRef.current = chart;\n seriesRef.current = series;\n\n const handleVisibleRangeChange = () => {\n const timeScale = chart.timeScale();\n const position = timeScale.scrollPosition();\n const atRightEdge = position <= 0.01;\n isAutoScrollRef.current = atRightEdge;\n };\n const timeScale = chart.timeScale();\n timeScale.subscribeVisibleLogicalRangeChange(handleVisibleRangeChange);\n\n return () => {\n chartRef.current = null;\n seriesRef.current = null;\n timeScale.unsubscribeVisibleLogicalRangeChange(handleVisibleRangeChange);\n chart.remove();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n const chart = chartRef.current;\n if (!chart) return;\n const effectiveRange = selectedRange ?? ranges?.[0] ?? \"1D\";\n chart.applyOptions({\n timeScale: getTimeScaleOptions(effectiveRange),\n });\n }, [selectedRange, ranges]);\n\n React.useEffect(() => {\n const chart = chartRef.current;\n const series = seriesRef.current;\n if (!chart || !series) return;\n\n series.setData(data);\n\n chart.applyOptions({\n rightPriceScale: getPriceScaleOptions(data),\n });\n\n if (priceLineRef.current) {\n series.removePriceLine(priceLineRef.current);\n priceLineRef.current = null;\n }\n\n if (resolvedPrice != null) {\n const priceLineColor = \"rgba(230, 200, 126, 0.9)\";\n\n priceLineRef.current = series.createPriceLine({\n price: resolvedPrice,\n color: priceLineColor,\n lineWidth: 1,\n lineStyle: 2,\n axisLabelVisible: true,\n title: resolvedPrice.toFixed(2),\n });\n }\n\n if (isAutoScrollRef.current) {\n chart.timeScale().scrollToPosition(0, true);\n }\n }, [data, resolvedPrice]);\n\n const sign = inferredChangePercent == null ? null : inferredChangePercent >= 0 ? \"+\" : \"\";\n const changeClass =\n inferredChangePercent == null ? \"\" : inferredChangePercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n const badgeClass =\n inferredChangePercent == null\n ? \"\"\n : inferredChangePercent >= 0\n ? \"bg-[#0ecb81]/15 text-[#0ecb81]\"\n : \"bg-[#f6465d]/15 text-[#f6465d]\";\n\n const btnBaseStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-card-dark, rgba(255, 255, 255, 0.05))\",\n borderColor: \"var(--color-border, rgba(255, 255, 255, 0.12))\",\n color: \"var(--color-text-secondary, rgba(255, 255, 255, 0.7))\",\n };\n\n const btnHoverStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent-dark, rgba(230, 200, 126, 0.15))\",\n color: \"var(--color-text, #ffffff)\",\n };\n\n const btnActiveStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent, #e6c87e)\",\n borderColor: \"var(--color-accent, #e6c87e)\",\n color: \"#000000\",\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full min-h-[360px] rounded-lg border border-white/10 bg-black/30 text-white backdrop-blur-md sm:min-h-[450px]\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"flex flex-col gap-4 px-4 pb-2 pt-5 md:flex-row md:items-start md:justify-between md:px-6 md:pt-6\">\n <div className=\"flex w-full flex-col gap-3 md:w-auto\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">{title}</CardTitle>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {visibleRanges.map((r) => {\n const active = r === selectedRange;\n const hovered = hoveredRange === r;\n const style: React.CSSProperties = {\n ...btnBaseStyle,\n ...(hovered ? btnHoverStyle : null),\n ...(active ? btnActiveStyle : null),\n };\n return (\n <button\n key={r}\n type=\"button\"\n onClick={() => onRangeChange?.(r)}\n onMouseEnter={() => setHoveredRange(r)}\n onMouseLeave={() => setHoveredRange((prev) => (prev === r ? null : prev))}\n style={style}\n className={cn(\n \"rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n >\n {r}\n </button>\n );\n })}\n {selectedInDropdown && selectedRange ? (\n <button\n type=\"button\"\n style={{\n ...btnBaseStyle,\n ...btnActiveStyle,\n }}\n className={cn(\n \"rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n disabled\n >\n {selectedRange}\n </button>\n ) : null}\n\n {dropdownRanges.length > 0 && (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => setDropdownOpen((prev) => !prev)}\n onMouseEnter={() => setHoveredRange(\"__dropdown__\" as PriceChartRange)}\n onMouseLeave={() => setHoveredRange((prev) => (prev === (\"__dropdown__\" as PriceChartRange) ? null : prev))}\n style={{\n ...btnBaseStyle,\n ...(hoveredRange === (\"__dropdown__\" as PriceChartRange) ? btnHoverStyle : null),\n }}\n className={cn(\n \"flex items-center gap-1 rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n >\n {\"More\"}\n <svg\n className={cn(\"h-3 w-3 transition-transform\", dropdownOpen && \"rotate-180\")}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {dropdownOpen && (\n <div className=\"absolute left-0 top-full z-50 mt-1 min-w-[80px] rounded border border-white/10 bg-black/90 py-1 backdrop-blur-md\">\n {dropdownRanges.map((r) => {\n const active = r === selectedRange;\n return (\n <button\n key={r}\n type=\"button\"\n onClick={() => {\n onRangeChange?.(r);\n setDropdownOpen(false);\n }}\n className={cn(\n \"block w-full px-3 py-1.5 text-left text-[0.85rem] font-medium transition-colors hover:bg-white/10\",\n active ? \"bg-[#e6c87e]/20 text-[#e6c87e]\" : \"text-white/70\"\n )}\n >\n {r}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n\n {resolvedPrice == null && inferredChangePercent == null ? null : (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {resolvedPrice == null ? null : (\n <div \n className={cn(\"text-xl font-semibold tabular-nums\", changeClass)}\n style={{ marginRight: '1rem' }}\n >\n {formatPrice(resolvedPrice, currencySymbol)}\n </div>\n )}\n {dollarChange != null ? (\n <span \n className={cn(\"text-base font-medium tabular-nums\", changeClass)}\n style={{ marginRight: '0.5rem' }}\n >\n {dollarChange >= 0 ? \"+\" : \"\"}{dollarChange.toFixed(2)}\n </span>\n ) : null}\n {inferredChangePercent == null ? null : (\n <div\n className={cn(\n \"rounded-md px-2 py-1 text-xs font-semibold tabular-nums\",\n badgeClass\n )}\n >\n {sign}\n {inferredChangePercent?.toFixed(2)}%\n </div>\n )}\n </div>\n )}\n </CardHeader>\n\n <div className=\"px-4 pb-5 pt-2 md:px-6 md:pb-6\">\n <div\n ref={containerRef}\n className=\"w-full overflow-hidden rounded-lg\"\n style={{ height }}\n />\n </div>\n </Card>\n );\n }\n);\n\nPriceChart.displayName = \"PriceChart\";\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nimport { BedDouble, Bath, CarFront } from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyHeroHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n imageUrl: string;\n imageAlt?: string;\n name: string;\n location: string;\n price?: number;\n currencySymbol?: string;\n changePercent?: number;\n beds?: number;\n baths?: number;\n cars?: number;\n propertyTypeLabel?: string;\n onTrade?: () => void;\n onMakeOffer?: () => void;\n tradeButtonLabel?: string;\n makeOfferButtonLabel?: string;\n makeOfferDisabled?: boolean;\n hideMakeOfferButton?: boolean;\n};\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 3,\n maximumFractionDigits: 3,\n })}`;\n};\n\nexport const PropertyHeroHeader = React.forwardRef<HTMLDivElement, PropertyHeroHeaderProps>(\n (\n {\n className,\n imageUrl,\n imageAlt,\n name,\n location,\n price,\n currencySymbol = \"$\",\n changePercent,\n beds,\n baths,\n cars,\n propertyTypeLabel,\n onTrade,\n onMakeOffer,\n tradeButtonLabel = \"Trade\",\n makeOfferButtonLabel = \"Make Offer\",\n makeOfferDisabled = false,\n hideMakeOfferButton = false,\n ...props\n },\n ref\n ) => {\n const isPositive = changePercent == null ? undefined : changePercent >= 0;\n const accentColor = \"#e6c87e\";\n const tradeHoverColor = \"#f5dd9a\";\n const [isTradeInteracting, setIsTradeInteracting] = React.useState(false);\n const [isOfferInteracting, setIsOfferInteracting] = React.useState(false);\n const hasAmenities = beds != null || baths != null || cars != null || propertyTypeLabel != null;\n const isTradeDisabled = !onTrade;\n const isMakeOfferButtonDisabled = makeOfferDisabled || !onMakeOffer;\n const showMakeOfferButton = !hideMakeOfferButton;\n\n const setTradeInteraction = (state: boolean) => {\n if (isTradeDisabled) return;\n setIsTradeInteracting(state);\n };\n\n const setOfferInteraction = (state: boolean) => {\n if (isMakeOfferButtonDisabled) return;\n setIsOfferInteracting(state);\n };\n\n const headingStyle: React.CSSProperties = {\n fontSize: \"clamp(1.6rem, 4vw, 2.5rem)\",\n marginBottom: \"0.5rem\",\n color: \"#ffffff\",\n textShadow: \"0 2px 4px rgba(0, 0, 0, 0.3)\",\n fontWeight: 600,\n lineHeight: 1.2,\n };\n return (\n <OuterWrapper ref={ref} className={cn(className)} {...props}>\n <HeroContainer>\n <HeroImage\n src={imageUrl}\n alt={imageAlt ?? name}\n />\n\n <HeroGradient aria-hidden=\"true\" />\n\n <div className=\"absolute bottom-0 left-0 right-0 z-10 flex w-full flex-wrap items-end justify-between gap-4 p-8 max-[768px]:gap-4 max-[640px]:gap-3 max-[768px]:p-6 max-[480px]:p-4\">\n <InfoCard>\n <div className=\"min-w-0 space-y-2\">\n <h1 style={headingStyle} className=\"break-words\">\n {name}\n </h1>\n\n <InfoRow className=\"mb-3 max-[768px]:mb-[0.6rem] max-[480px]:mb-[0.5rem]\">\n <LocationText>{location}</LocationText>\n {price == null ? null : (\n <PriceBlock>\n {formatPrice(price, currencySymbol)}\n {changePercent == null ? null : (\n <span\n className={cn(\n \"ml-2 flex items-center text-[0.875rem] font-medium\",\n isPositive ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"mr-[0.15rem]\"\n >\n <path d={isPositive ? \"M7 14l5-5 5 5H7z\" : \"M7 10l5 5 5-5H7z\"} />\n </svg>\n {Math.abs(changePercent).toFixed(2)}%\n </span>\n )}\n </PriceBlock>\n )}\n </InfoRow>\n </div>\n <div className=\"flex items-center gap-6 text-[0.95rem] text-white/90 max-[768px]:hidden\">\n {beds == null ? null : (\n <div className=\"flex items-center\">\n <BedDouble className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{beds} Beds</span>\n </div>\n )}\n {baths == null ? null : (\n <div className=\"flex items-center\">\n <Bath className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{baths} Baths</span>\n </div>\n )}\n {cars == null ? null : (\n <div className=\"flex items-center\">\n <CarFront className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{cars} Cars</span>\n </div>\n )}\n {propertyTypeLabel == null ? null : <div>{propertyTypeLabel}</div>}\n </div>\n </InfoCard>\n\n <ActionButtons>\n <button\n type=\"button\"\n onClick={isTradeDisabled ? undefined : onTrade}\n className=\"flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]\"\n style={{\n backgroundColor: isTradeInteracting ? tradeHoverColor : accentColor,\n color: \"black\",\n minWidth: \"140px\",\n padding: \"0.65rem 1.5rem\",\n borderColor: isTradeInteracting ? accentColor : \"transparent\",\n boxShadow: isTradeInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : \"none\",\n opacity: isTradeDisabled ? 0.5 : 1,\n cursor: isTradeDisabled ? \"not-allowed\" : \"pointer\",\n }}\n onMouseEnter={() => setTradeInteraction(true)}\n onMouseLeave={() => setTradeInteraction(false)}\n onMouseDown={() => setTradeInteraction(true)}\n onMouseUp={() => setTradeInteraction(false)}\n onFocus={() => setTradeInteraction(true)}\n onBlur={() => setTradeInteraction(false)}\n onTouchStart={() => setTradeInteraction(true)}\n onTouchEnd={() => setTradeInteraction(false)}\n disabled={isTradeDisabled}\n aria-disabled={isTradeDisabled}\n >\n {tradeButtonLabel}\n </button>\n\n {showMakeOfferButton ? (\n <button\n type=\"button\"\n onClick={isMakeOfferButtonDisabled ? undefined : onMakeOffer}\n className=\"flex items-center justify-center rounded border font-semibold transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] text-[0.95rem] max-[480px]:text-[0.9rem]\"\n style={{\n backgroundColor: isOfferInteracting ? accentColor : \"transparent\",\n borderColor: accentColor,\n color: isOfferInteracting ? \"black\" : accentColor,\n minWidth: \"140px\",\n padding: \"0.65rem 1.5rem\",\n boxShadow: isOfferInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : \"none\",\n opacity: isMakeOfferButtonDisabled ? 0.5 : 1,\n cursor: isMakeOfferButtonDisabled ? \"not-allowed\" : \"pointer\",\n }}\n onMouseEnter={() => setOfferInteraction(true)}\n onMouseLeave={() => setOfferInteraction(false)}\n onMouseDown={() => setOfferInteraction(true)}\n onMouseUp={() => setOfferInteraction(false)}\n onFocus={() => setOfferInteraction(true)}\n onBlur={() => setOfferInteraction(false)}\n onTouchStart={() => setOfferInteraction(true)}\n onTouchEnd={() => setOfferInteraction(false)}\n disabled={isMakeOfferButtonDisabled}\n aria-disabled={isMakeOfferButtonDisabled}\n >\n {makeOfferButtonLabel}\n </button>\n ) : null}\n </ActionButtons>\n </div>\n </HeroContainer>\n\n {hasAmenities ? (\n <MobileAmenities>\n {beds == null ? null : (\n <MobileAmenity>\n <BedDouble className=\"h-4 w-4\" />\n <span>{beds} Beds</span>\n </MobileAmenity>\n )}\n {baths == null ? null : (\n <MobileAmenity>\n <Bath className=\"h-4 w-4\" />\n <span>{baths} Baths</span>\n </MobileAmenity>\n )}\n {cars == null ? null : (\n <MobileAmenity>\n <CarFront className=\"h-4 w-4\" />\n <span>{cars} Cars</span>\n </MobileAmenity>\n )}\n {propertyTypeLabel == null ? null : <MobileAmenity>{propertyTypeLabel}</MobileAmenity>}\n </MobileAmenities>\n ) : null}\n </OuterWrapper>\n );\n }\n);\n\nPropertyHeroHeader.displayName = \"PropertyHeroHeader\";\n\nconst OuterWrapper = styled.div`\n width: 100%;\n max-width: 1200px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n`;\n\nconst HeroContainer = styled.div`\n position: relative;\n width: 100%;\n height: 500px;\n border-radius: 12px;\n overflow: hidden;\n background-color: #000;\n\n @media (max-width: 1024px) {\n height: 420px;\n }\n\n @media (max-width: 768px) {\n height: 320px;\n }\n\n @media (max-width: 640px) {\n height: 280px;\n }\n\n @media (max-width: 540px) {\n height: 250px;\n }\n\n @media (max-width: 420px) {\n height: 220px;\n }\n\n @media (max-width: 360px) {\n height: 200px;\n }\n`;\n\nconst MobileAmenities = styled.div`\n display: none;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n background: rgba(8, 8, 12, 0.85);\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.85);\n font-size: 0.85rem;\n\n @media (max-width: 768px) {\n display: flex;\n flex-wrap: wrap;\n }\n`;\n\nconst MobileAmenity = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.35rem 0.5rem;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.08);\n font-weight: 500;\n`;\n\nconst HeroImage = styled.img`\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n transform: scale(1.15);\n transform-origin: center;\n min-width: 110%;\n transition: transform 0.5s ease-out;\n`;\n\nconst HeroGradient = styled.div`\n position: absolute;\n inset: 0;\n z-index: 1;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.25) 45%, rgba(0, 0, 0, 0.75) 100%);\n`;\n\nconst ActionButtons = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.75rem;\n justify-content: flex-start;\n\n @media (max-width: 768px) {\n gap: 0.5rem;\n }\n\n @media (max-width: 640px) {\n display: none;\n }\n`;\n\nconst InfoCard = styled.div`\n display: inline-block;\n width: fit-content;\n max-width: 70%;\n border-radius: 12px;\n background: rgba(0, 0, 0, 0.12);\n padding: 0.75rem 1rem;\n color: #fff;\n backdrop-filter: blur(6px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);\n border: 1px solid rgba(255, 255, 255, 0.12);\n min-width: 0;\n\n @media (max-width: 768px) {\n max-width: 85%;\n }\n\n @media (max-width: 640px) {\n max-width: 92%;\n }\n\n @media (max-width: 480px) {\n max-width: 95%;\n }\n`;\n\nconst InfoRow = styled.div`\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 0.75rem;\n width: 100%;\n\n @media (max-width: 640px) {\n gap: 0.5rem;\n }\n`;\n\nconst LocationText = styled.span`\n font-size: clamp(1rem, 2.6vw, 1.25rem);\n color: rgba(255, 255, 255, 0.9);\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst PriceBlock = styled.span`\n display: flex;\n align-items: center;\n font-size: clamp(1rem, 2.2vw, 1.25rem);\n font-weight: 600;\n color: var(--color-accent, #f0b90b);\n padding-left: 1rem;\n border-left: 1px solid rgba(255, 255, 255, 0.25);\n min-height: 1.5rem;\n`;\n\n\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport loafLogoBanner from \"../assets/Loaf-logo-Banner.png\";\nimport { LoafLiquidityLogo } from \"./loaf-liquidity-logo\";\nimport type { LoginPopupView } from \"./login-popup\";\n\nconst DEFAULT_TRADE_PATH = \"/trade\";\nconst DEFAULT_HOME_PATH = \"/\";\nconst DEFAULT_ABOUT_PATH = \"/about\";\nconst DEFAULT_LEARN_PATH = \"/learn\";\nconst DEFAULT_PROPERTY_MAP_PATH = \"/map\";\nconst DEFAULT_PORTFOLIO_PATH = \"/portfolio\";\nconst DEFAULT_LOAF_LIQUIDITY_PATH = \"/loaf-liquidity\";\nconst DEFAULT_AUTH_RETURN_PARAM = \"returnTo\";\nconst LOGIN_POPUP_EVENT = \"loaf:open-login-popup\";\n\ntype HeaderUser = {\n displayName?: string | null;\n email?: string | null;\n walletAddress?: string | null;\n};\n\ntype HeaderActiveTab =\n | \"home\"\n | \"trade\"\n | \"offerings\"\n | \"propertyMap\"\n | \"about\"\n | \"portfolio\"\n | \"learn\";\n\nexport type HeaderLoginPopupComponentProps = {\n onClose: () => void;\n initialView?: LoginPopupView;\n};\n\nexport type HeaderProps = {\n currentUser?: HeaderUser | null;\n isAuthenticated?: boolean;\n locationPath?: string;\n activeTab?: HeaderActiveTab;\n onNavigate?: (path: string) => void;\n onLogout?: () => Promise<void> | void;\n onSignInClick?: () => void;\n loginPopupComponent?: React.ComponentType<HeaderLoginPopupComponentProps>;\n tradePath?: string;\n homePath?: string;\n aboutPath?: string;\n learnPath?: string;\n offeringsPath?: string;\n propertyMapPath?: string;\n portfolioPath?: string;\n loafLiquidityPath?: string;\n /** Absolute URL for the auth/login surface (e.g. https://auth.loafmarkets.com/login). */\n authLoginUrl?: string | null;\n /** Query parameter added to authLoginUrl for redirecting back to the originating SPA. */\n authReturnParam?: string | null;\n /**\n * Custom resolver for the \"return to\" URL. Defaults to window.location.href, but you can\n * inject your own implementation (e.g. saved pathname for native apps or React Router state).\n */\n getAuthReturnUrl?: () => string | null | undefined;\n logoHref?: string;\n onLogoClick?: () => void;\n onLoafLiquidityClick?: () => void;\n onTradeClick?: () => void;\n onProfileNavigate?: () => void;\n onOrdersNavigate?: () => void;\n onWalletNavigate?: () => void;\n showTradeTab?: boolean;\n};\n\nexport const Header: React.FC<HeaderProps> = ({\n currentUser,\n isAuthenticated = false,\n locationPath = DEFAULT_HOME_PATH,\n activeTab,\n onNavigate,\n onLogout,\n onSignInClick,\n loginPopupComponent: LoginPopupComponent,\n tradePath = DEFAULT_TRADE_PATH,\n homePath = DEFAULT_HOME_PATH,\n aboutPath = DEFAULT_ABOUT_PATH,\n learnPath = DEFAULT_LEARN_PATH,\n offeringsPath,\n propertyMapPath = DEFAULT_PROPERTY_MAP_PATH,\n portfolioPath = DEFAULT_PORTFOLIO_PATH,\n loafLiquidityPath = DEFAULT_LOAF_LIQUIDITY_PATH,\n authLoginUrl,\n authReturnParam = DEFAULT_AUTH_RETURN_PARAM,\n getAuthReturnUrl,\n logoHref,\n onLogoClick,\n onLoafLiquidityClick,\n onTradeClick,\n onProfileNavigate: _onProfileNavigate,\n onOrdersNavigate: _onOrdersNavigate,\n onWalletNavigate: _onWalletNavigate,\n showTradeTab = true,\n}) => {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const [isMoreMenuOpen, setIsMoreMenuOpen] = useState(false);\n const [showLoginPopup, setShowLoginPopup] = useState(false);\n const [loginPopupInitialView, setLoginPopupInitialView] = useState<LoginPopupView | undefined>(undefined);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Header] mounted\");\n return () => console.log(\"[LoginTrace][Header] unmounted\");\n }, []);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Header] showLoginPopup changed\", { showLoginPopup, loginPopupInitialView });\n }, [showLoginPopup, loginPopupInitialView]);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Header] loginPopupComponent updated\", { hasComponent: Boolean(LoginPopupComponent) });\n }, [LoginPopupComponent]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n\n const clickedInsideUserMenu = target.closest(\".user-menu\") || target.closest(\".user-menu-dropdown\");\n\n if (isUserMenuOpen && !clickedInsideUserMenu) {\n console.log(\"[LoginTrace][Header] Closing user menu due to outside click\");\n setIsUserMenuOpen(false);\n }\n if (\n isMobileMenuOpen &&\n !target.closest(\".mobile-menu\") &&\n !target.closest(\".mobile-menu-button\")\n ) {\n setIsMobileMenuOpen(false);\n }\n if (isMoreMenuOpen && !target.closest(\".more-menu\")) {\n setIsMoreMenuOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isUserMenuOpen, isMobileMenuOpen, isMoreMenuOpen]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const handleExternalLoginPopup = (event: Event) => {\n const customEvent = event as CustomEvent<{ initialView?: LoginPopupView }>;\n setLoginPopupInitialView(customEvent.detail?.initialView);\n console.log(\"[LoginTrace][Header] Received LOGIN_POPUP_EVENT\", customEvent.detail);\n setShowLoginPopup(true);\n };\n\n window.addEventListener(LOGIN_POPUP_EVENT, handleExternalLoginPopup as EventListener);\n return () => {\n window.removeEventListener(LOGIN_POPUP_EVENT, handleExternalLoginPopup as EventListener);\n };\n }, []);\n\n const closeMenus = () => {\n setIsMobileMenuOpen(false);\n setIsUserMenuOpen(false);\n setIsMoreMenuOpen(false);\n };\n\n const handleUserMenuToggle = () => {\n const nextState = !isUserMenuOpen;\n console.log(\"[LoginTrace][Header] User dropdown toggle clicked\", { nextState });\n setIsUserMenuOpen(nextState);\n };\n\n const performNavigation = (path: string) => {\n if (onNavigate) {\n onNavigate(path);\n } else if (typeof window !== \"undefined\") {\n window.location.href = path;\n }\n };\n\n const handleNavigation = (path: string) => {\n closeMenus();\n performNavigation(path);\n };\n\n const handleLogoNavigation = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n closeMenus();\n\n if (onLogoClick) {\n onLogoClick();\n return;\n }\n\n performNavigation(logoHref ?? homePath);\n };\n\n const handleLoafLiquidityNavigation = () => {\n closeMenus();\n if (onLoafLiquidityClick) {\n onLoafLiquidityClick();\n return;\n }\n performNavigation(resolvedLoafLiquidityPath);\n };\n\n const handleTradeNavigation = () => {\n if (!showTradeTab) {\n return;\n }\n closeMenus();\n if (onTradeClick) {\n onTradeClick();\n return;\n }\n performNavigation(resolvedTradePath);\n };\n\n const handleLogoutClick = async (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[LoginTrace][Header] Logout option selected, invoking onLogout handler\");\n await onLogout?.();\n };\n\n const handleAddFundingClick = (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[LoginTrace][Header] Add funding selected\");\n if (LoginPopupComponent) {\n setLoginPopupInitialView(\"funding\");\n setShowLoginPopup(true);\n }\n };\n\n const handlePortfolioNavigate = (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[LoginTrace][Header] Portfolio selected\");\n if (_onOrdersNavigate) {\n _onOrdersNavigate();\n return;\n }\n if (onNavigate) {\n onNavigate(\"/portfolio\");\n }\n };\n\n const rawDisplayName = currentUser?.displayName;\n const normalizedDisplayName =\n typeof rawDisplayName === \"string\" ? rawDisplayName.trim() : undefined;\n const userPrimaryLabel =\n normalizedDisplayName || currentUser?.email || currentUser?.walletAddress || \"User\";\n\n\n const resolveAuthReturnUrl = () => {\n if (getAuthReturnUrl) {\n return getAuthReturnUrl();\n }\n\n if (typeof window !== \"undefined\") {\n return window.location.href;\n }\n\n return null;\n };\n\n const redirectToAuthLogin = () => {\n if (!authLoginUrl) {\n return false;\n }\n\n const nextUrl = resolveAuthReturnUrl();\n let finalUrl = authLoginUrl;\n\n if (authReturnParam && nextUrl) {\n try {\n const parsed = new URL(authLoginUrl, typeof window !== \"undefined\" ? window.location.origin : undefined);\n parsed.searchParams.set(authReturnParam, nextUrl);\n finalUrl = parsed.toString();\n } catch {\n const delimiter = authLoginUrl.includes(\"?\") ? \"&\" : \"?\";\n finalUrl = `${authLoginUrl}${delimiter}${encodeURIComponent(authReturnParam)}=${encodeURIComponent(nextUrl)}`;\n }\n }\n\n if (typeof window !== \"undefined\") {\n window.location.href = finalUrl;\n return true;\n }\n\n return false;\n };\n\n const handleSignIn = () => {\n console.log(\"[LoginTrace][Header] handleSignIn invoked\", { hasCustomHandler: Boolean(onSignInClick) });\n if (onSignInClick) {\n onSignInClick();\n return;\n }\n\n if (redirectToAuthLogin()) {\n return;\n }\n\n if (LoginPopupComponent) {\n console.log(\"[LoginTrace][Header] Opening login popup via handleSignIn\");\n setShowLoginPopup(true);\n }\n };\n\n const handleLoginPopupClose = React.useCallback(() => {\n console.log(\"[LoginTrace][Header] Closing login popup via onClose handler\");\n setShowLoginPopup(false);\n setLoginPopupInitialView(undefined);\n }, []);\n\n const resolvedTradePath = tradePath ?? DEFAULT_TRADE_PATH;\n const resolvedHomePath = homePath ?? DEFAULT_HOME_PATH;\n const resolvedAboutPath = aboutPath ?? DEFAULT_ABOUT_PATH;\n const resolvedLearnPath = learnPath ?? DEFAULT_LEARN_PATH;\n const resolvedOfferingsPath = offeringsPath ?? undefined;\n const offeringsHref = resolvedOfferingsPath ?? resolvedHomePath;\n const resolvedPropertyMapPath = propertyMapPath ?? DEFAULT_PROPERTY_MAP_PATH;\n const resolvedPortfolioPath = portfolioPath ?? DEFAULT_PORTFOLIO_PATH;\n const resolvedLoafLiquidityPath = loafLiquidityPath ?? DEFAULT_LOAF_LIQUIDITY_PATH;\n\n const inferredActiveTab: HeaderActiveTab | null = (() => {\n if (showTradeTab && locationPath === resolvedTradePath) return \"trade\";\n if (locationPath === resolvedHomePath) return \"home\";\n if (locationPath === resolvedAboutPath) return \"about\";\n if (locationPath === resolvedLearnPath) return \"learn\";\n if (resolvedOfferingsPath && locationPath.startsWith(resolvedOfferingsPath)) return \"offerings\";\n if (locationPath === resolvedPropertyMapPath) return \"propertyMap\";\n if (locationPath === resolvedPortfolioPath) return \"portfolio\";\n return null;\n })();\n\n const resolvedActiveTab = activeTab ?? inferredActiveTab;\n\n const tradeActive = showTradeTab && resolvedActiveTab === \"trade\";\n const homeActive = resolvedActiveTab === \"home\";\n const offeringsActive = resolvedActiveTab === \"offerings\";\n const propertyMapActive = resolvedActiveTab === \"propertyMap\";\n const aboutActive = resolvedActiveTab === \"about\";\n const portfolioActive = resolvedActiveTab === \"portfolio\";\n const learnActive = resolvedActiveTab === \"learn\";\n\n return (\n <>\n <Overlay $isOpen={isMobileMenuOpen} onClick={() => setIsMobileMenuOpen(false)} />\n <HeaderContainer>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <Logo>\n <LogoLink href={logoHref ?? resolvedHomePath} onClick={handleLogoNavigation}>\n <img src={loafLogoBanner} alt=\"LOAF Logo\" />\n </LogoLink>\n <h1>LOAF</h1>\n </Logo>\n\n <Nav $isOpen={isMobileMenuOpen} className=\"mobile-menu\">\n {!isMobileMenuOpen && (\n <div\n style={{ display: \"flex\", flexDirection: \"row\", alignItems: \"center\", height: \"56px\" }}\n className=\"desktop-nav\"\n >\n <NavLink\n href={resolvedHomePath}\n className={homeActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedHomePath);\n }}\n >\n Home\n </NavLink>\n <NavLink\n href={resolvedPortfolioPath}\n className={portfolioActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedPortfolioPath);\n }}\n >\n Portfolio\n </NavLink>\n {showTradeTab && (\n <NavLink\n href={resolvedTradePath}\n className={tradeActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleTradeNavigation();\n }}\n >\n Trade\n </NavLink>\n )}\n <NavLink\n href={offeringsHref}\n className={offeringsActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(offeringsHref);\n }}\n >\n Initial Offerings\n </NavLink>\n <NavLink\n href={resolvedPropertyMapPath}\n className={propertyMapActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedPropertyMapPath);\n }}\n >\n Property Map\n </NavLink>\n <NavLink\n href={resolvedLearnPath}\n className={learnActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedLearnPath);\n }}\n >\n Learn\n </NavLink>\n <NavLink\n href={resolvedAboutPath}\n className={aboutActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(resolvedAboutPath);\n }}\n >\n About\n </NavLink>\n <div style={{ marginLeft: \"auto\", display: \"flex\", alignItems: \"center\" }}>\n <div\n style={{ cursor: \"pointer\", marginLeft: \"12px\" }}\n onClick={handleLoafLiquidityNavigation}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleLoafLiquidityNavigation();\n }\n }}\n >\n <LoafLiquidityLogo />\n </div>\n </div>\n </div>\n )}\n\n <div className=\"mobile-menu-content\">\n <MobileMenuHeader>\n <MobileMenuClose onClick={() => setIsMobileMenuOpen(false)} aria-label=\"Close menu\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </MobileMenuClose>\n </MobileMenuHeader>\n\n <SearchBar>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zM5 9.5C5 7.01 7.01 5 9.5 5S14 7.01 14 9.5 11.99 14 9.5 14 5 11.99 5 9.5z\" />\n </svg>\n <input type=\"text\" placeholder=\"Search...\" />\n </SearchBar>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedHomePath)}>Home</MobileNavItem>\n\n <MobileNavItem\n onClick={() => handleNavigation(resolvedPortfolioPath)}\n >\n Portfolio\n </MobileNavItem>\n\n {showTradeTab && (\n <MobileNavItem\n onClick={() => {\n handleTradeNavigation();\n }}\n >\n Trade\n </MobileNavItem>\n )}\n\n <MobileNavItem onClick={() => handleNavigation(offeringsHref)}>Initial Offerings</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedPropertyMapPath)}>Property Map</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedLearnPath)}>Learn</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(resolvedAboutPath)}>About</MobileNavItem>\n\n <div style={{ borderTop: \"1px solid #2b3139\", margin: \"8px 0\" }} />\n\n <MobileNavItem\n onClick={handleLoafLiquidityNavigation}\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"16px 24px\" }}\n >\n <LoafLiquidityLogo />\n </MobileNavItem>\n\n <div style={{ borderTop: \"1px solid #2b3139\", margin: \"8px 0\" }} />\n\n {isAuthenticated && (\n <MobileNavItem onClick={handleLogoutClick} style={{ color: \"#f6465d\" }}>\n Logout\n </MobileNavItem>\n )}\n </div>\n </Nav>\n </div>\n\n {isMobileMenuOpen && (\n <MobileOnlyButton\n onClick={() => setIsMobileMenuOpen(false)}\n $isOpen\n style={{ position: \"fixed\", right: \"1rem\", top: \"4rem\" }}\n aria-label=\"Close menu\"\n >\n ✕\n </MobileOnlyButton>\n )}\n\n {isAuthenticated ? (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <UserMenu>\n <UserButton\n onClick={handleUserMenuToggle}\n $isOpen={isUserMenuOpen}\n className=\"user-menu\"\n >\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\" }}>\n <span style={{ fontWeight: 600, fontSize: \"0.95rem\" }}>{userPrimaryLabel}</span>\n </div>\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>\n </UserButton>\n\n {isUserMenuOpen && (\n <DropdownMenu className=\"user-menu-dropdown\">\n <button\n type=\"button\"\n onClick={(event) => {\n handlePortfolioNavigate(event);\n }}\n >\n <MenuItem>Portfolio</MenuItem>\n </button>\n <button\n type=\"button\"\n onClick={(event) => {\n console.log(\"[LoginTrace][Header] Add funding menu item clicked\");\n handleAddFundingClick(event);\n }}\n >\n <MenuItem>Add funding</MenuItem>\n </button>\n <button\n type=\"button\"\n onClick={(event) => {\n console.log(\"[LoginTrace][Header] Logout menu item clicked\");\n void handleLogoutClick(event);\n }}\n >\n <MenuItem className=\"logout\">Logout</MenuItem>\n </button>\n </DropdownMenu>\n )}\n </UserMenu>\n {!isMobileMenuOpen && (\n <MobileOnlyButton\n onClick={() => setIsMobileMenuOpen(true)}\n $isOpen={false}\n className=\"mobile-menu-button\"\n aria-label=\"Open menu\"\n >\n ☰\n </MobileOnlyButton>\n )}\n </div>\n ) : (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <Button className=\"signup\" onClick={handleSignIn}>\n Sign in / Connect\n </Button>\n {!isMobileMenuOpen && (\n <MobileOnlyButton\n onClick={() => setIsMobileMenuOpen(true)}\n $isOpen={false}\n className=\"mobile-menu-button\"\n aria-label=\"Open menu\"\n >\n ☰\n </MobileOnlyButton>\n )}\n </div>\n )}\n </HeaderContainer>\n\n {LoginPopupComponent && showLoginPopup && (\n <LoginPopupComponent\n onClose={handleLoginPopupClose}\n initialView={loginPopupInitialView}\n />\n )}\n </>\n );\n};\n\nHeader.displayName = \"Header\";\n\nconst Overlay = styled.div<{ $isOpen: boolean }>`\n display: ${(props) => (props.$isOpen ? \"block\" : \"none\")};\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.7);\n backdrop-filter: blur(3px);\n z-index: 999;\n`;\n\nconst MobileOnlyButton = styled.button.attrs({ type: \"button\" })<{ $isOpen: boolean }>`\n display: none;\n background-color: ${(props) => (props.$isOpen ? \"rgba(240, 185, 11, 0.2)\" : \"#f0b90b\")};\n color: ${(props) => (props.$isOpen ? \"#ffffff\" : \"#0b0e11\")};\n font-size: 24px;\n font-weight: bold;\n width: 44px;\n height: 44px;\n justify-content: center;\n align-items: center;\n margin-left: 0.75rem;\n z-index: 1100;\n border-radius: 8px;\n border: ${(props) => (props.$isOpen ? \"1px solid #f0b90b\" : \"none\")};\n line-height: 1;\n padding: 0;\n cursor: pointer;\n box-shadow: ${(props) => (props.$isOpen ? \"0 2px 8px rgba(0, 0, 0, 0.3)\" : \"none\")};\n\n &:hover {\n background-color: ${(props) => (props.$isOpen ? \"rgba(240, 185, 11, 0.3)\" : \"#e0aa0b\")};\n }\n\n &:active {\n background-color: ${(props) => (props.$isOpen ? \"rgba(240, 185, 11, 0.4)\" : \"#d19f0a\")};\n }\n\n @media (max-width: 1300px) {\n display: flex;\n }\n`;\n\nconst HeaderContainer = styled.header`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 2rem;\n background-color: #0d1117;\n border-bottom: 1px solid #232a32;\n position: sticky;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n width: 100%;\n height: 56px;\n box-sizing: border-box;\n\n @media (max-width: 768px) {\n padding: 0 1rem;\n }\n`;\n\nconst Logo = styled.div`\n display: flex;\n align-items: center;\n margin-right: 24px;\n height: 56px;\n\n img {\n height: 28px;\n display: block;\n }\n\n h1 {\n display: none;\n }\n\n @media (max-width: 768px) {\n img {\n height: 30px;\n }\n }\n`;\n\nconst LogoLink = styled.a`\n display: inline-flex;\n align-items: center;\n`;\n\nconst Nav = styled.nav<{ $isOpen: boolean }>`\n display: flex;\n flex-direction: column;\n\n .desktop-nav {\n display: flex;\n }\n\n .mobile-menu-content {\n display: none;\n }\n\n .mobile-loaf-logo {\n display: none;\n }\n\n @media (max-width: 1300px) {\n .mobile-loaf-logo {\n display: flex !important;\n align-items: center;\n height: 56px;\n }\n }\n\n @media (max-width: 1300px) {\n position: fixed;\n top: 56px;\n right: ${(props) => (props.$isOpen ? \"0\" : \"-100%\")} ;\n width: 280px;\n max-width: 280px;\n height: calc(100vh - 56px);\n background: linear-gradient(180deg, #0f1419 0%, #0a0e13 100%);\n z-index: 1000;\n transition: right 0.3s ease;\n box-shadow: ${(props) => (props.$isOpen ? \"-10px 0 30px rgba(0, 0, 0, 0.5)\" : \"none\")};\n overflow-y: auto;\n border-left: 1px solid rgba(255, 255, 255, 0.05);\n\n .desktop-nav {\n display: none;\n }\n\n .mobile-menu-content {\n display: flex;\n flex-direction: column;\n padding-top: 0;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n }\n }\n`;\n\nconst NavLink = styled.a`\n margin: 0 12px;\n color: #eaecef;\n font-weight: 500;\n font-size: 14px;\n padding: 0 4px;\n height: 56px;\n display: flex;\n align-items: center;\n position: relative;\n transition: color 0.2s ease;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif;\n letter-spacing: 0.2px;\n\n &:first-child {\n margin-left: 0;\n }\n\n &:hover,\n &.active {\n color: #f0b90b;\n }\n\n &.active::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 3px;\n background-color: #f0b90b;\n }\n\n @media (max-width: 768px) {\n margin: 0;\n padding: 16px 24px;\n width: 100%;\n height: auto;\n text-align: left;\n font-size: 16px;\n color: #eaecef;\n display: flex;\n align-items: center;\n\n &:hover {\n background-color: #2b3139;\n }\n\n &.active::after {\n display: none;\n }\n\n svg {\n margin-right: 12px;\n width: 20px;\n height: 20px;\n }\n }\n`;\n\nconst Button = styled.button.attrs({ type: \"button\" })`\n padding: 0.5rem 1rem;\n border-radius: 6px;\n font-weight: 500;\n font-size: 13px;\n margin-left: 0.75rem;\n transition: all 0.2s ease;\n\n &.login {\n background-color: transparent;\n border: 1px solid #f0b90b;\n color: #f0b90b;\n\n &:hover {\n background-color: rgba(240, 185, 11, 0.1);\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n\n &.signup {\n background-color: #f0b90b;\n color: #0b0e11;\n border: none;\n\n &:hover {\n background-color: #f8d12f;\n }\n }\n\n @media (max-width: 768px) {\n padding: 0.65rem 1.25rem;\n font-size: 0.9rem;\n margin-left: 0.5rem;\n }\n`;\n\nconst UserMenu = styled.div`\n position: relative;\n margin-left: 0.75rem;\n height: 56px;\n display: flex;\n align-items: center;\n\n @media (max-width: 768px) {\n margin-left: auto;\n }\n`;\n\nconst UserButton = styled.button.attrs({ type: \"button\" })<{ $isOpen: boolean }>`\n display: flex;\n align-items: center;\n background: transparent;\n color: #eaecef;\n font-size: 13px;\n padding: 0 6px;\n height: 32px;\n border-radius: 4px;\n\n &:hover {\n background-color: #2b3139;\n }\n\n span {\n margin-right: 0.5rem;\n }\n\n svg {\n width: 12px;\n height: 12px;\n transition: transform 0.2s ease;\n transform: ${(props) => (props.$isOpen ? \"rotate(180deg)\" : \"rotate(0)\")};\n }\n`;\n\nconst DropdownMenu = styled.div`\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 0.25rem;\n background-color: #0d1117;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\n border: 1px solid rgba(255, 255, 255, 0.1);\n min-width: 180px;\n overflow: hidden;\n z-index: 10;\n padding: 0.5rem 0;\n\n button {\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n width: 100%;\n text-align: left;\n cursor: pointer;\n color: inherit;\n display: block;\n }\n`;\n\nconst MenuItem = styled.div`\n padding: 0.75rem 1.25rem;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #eaecef;\n font-size: 14px;\n font-weight: 400;\n display: block;\n width: 100%;\n border-bottom: none;\n\n &:hover {\n color: #f0b90b;\n background-color: rgba(240, 185, 11, 0.08);\n }\n\n &.logout {\n color: #f6465d;\n }\n`;\n\nconst MobileMenuHeader = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding: 16px 20px;\n margin-top: 60px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n background: rgba(0, 0, 0, 0.2);\n`;\n\nconst MobileMenuClose = styled.button.attrs({ type: \"button\" })`\n background: none;\n border: none;\n color: #eaecef;\n cursor: pointer;\n padding: 8px;\n font-size: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst SearchBar = styled.div`\n display: flex;\n align-items: center;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 6px;\n padding: 10px 14px;\n margin: 16px 20px 12px;\n border: 1px solid rgba(255, 255, 255, 0.08);\n transition: all 0.2s ease;\n\n &:focus-within {\n background: rgba(255, 255, 255, 0.05);\n border-color: rgba(240, 185, 11, 0.3);\n }\n\n svg {\n color: rgba(240, 185, 11, 0.5);\n margin-right: 10px;\n width: 16px;\n height: 16px;\n }\n\n input {\n background: none;\n border: none;\n color: #ffffff;\n font-size: 14px;\n width: 100%;\n outline: none;\n height: 20px;\n\n &::placeholder {\n color: rgba(255, 255, 255, 0.4);\n }\n }\n`;\n\nconst MobileNavItem = styled.div`\n display: flex;\n align-items: center;\n padding: 14px 20px;\n color: rgba(255, 255, 255, 0.85);\n font-size: 15px;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.03);\n font-weight: 400;\n transition: all 0.2s ease;\n letter-spacing: 0.2px;\n\n &:hover {\n background: rgba(255, 255, 255, 0.05);\n color: #ffffff;\n padding-left: 24px;\n }\n`;\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertySubheaderTab = {\n id: string;\n label: string;\n hasNotification?: boolean;\n notificationColor?: string;\n};\n\nexport type PropertySubheaderAction = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n};\n\nexport type PropertySubheaderProps = React.HTMLAttributes<HTMLDivElement> & {\n tabs: PropertySubheaderTab[];\n activeTabId: string;\n onTabChange?: (tabId: string) => void;\n actions?: PropertySubheaderAction[];\n};\n\nexport const PropertySubheader = React.forwardRef<HTMLDivElement, PropertySubheaderProps>(\n ({ className, tabs, activeTabId, onTabChange, actions, ...props }, ref) => {\n const tabsContainerRef = React.useRef<HTMLDivElement>(null);\n\n // Force scrollbar to be always visible on mobile\n React.useEffect(() => {\n const container = tabsContainerRef.current;\n if (!container) return;\n\n // Only apply on mobile where scrollbar is hidden by default\n const isMobile = window.innerWidth <= 768;\n if (!isMobile) return;\n\n // Force scrollbar to appear by slightly scrolling and resetting\n const forceScrollbar = () => {\n if (container.scrollWidth > container.clientWidth) {\n // Element is scrollable, force scrollbar visibility\n container.scrollTop = 1; // Triggers scrollbar in some browsers\n container.scrollTop = 0;\n container.scrollLeft = 1;\n container.scrollLeft = 0;\n }\n };\n\n // Initial check\n setTimeout(forceScrollbar, 100);\n\n // Also check on resize in case orientation changes\n window.addEventListener('resize', forceScrollbar);\n return () => window.removeEventListener('resize', forceScrollbar);\n }, [tabs]);\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full font-normal\",\n \"flex flex-col-reverse gap-3\",\n \"md:flex-row md:items-center md:justify-between\",\n className\n )}\n {...props}\n >\n <div\n ref={tabsContainerRef}\n className={cn(\n \"flex items-center border-b border-white/10\",\n \"overflow-x-auto md:overflow-visible\",\n \"[-webkit-overflow-scrolling:touch]\",\n \"[scroll-behavior:smooth]\",\n \"[touch-action:pan-x]\",\n \"md:border-b-0\"\n )}\n style={{ WebkitTapHighlightColor: \"transparent\" }}\n >\n <div className=\"flex min-w-max\">\n {tabs.map((tab) => {\n const active = tab.id === activeTabId;\n\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange?.(tab.id)}\n className={cn(\n \"relative whitespace-nowrap\",\n \"px-6 py-4\",\n \"font-normal\",\n \"transition-colors\",\n \"max-[768px]:px-[1.2rem] max-[768px]:py-[0.8rem]\",\n \"max-[480px]:px-4 max-[480px]:py-[0.7rem] max-[480px]:text-[0.9rem]\",\n active\n ? \"font-semibold text-[var(--color-accent,#e6c87e)]\"\n : \"text-white/60 hover:text-white\"\n )}\n style={{\n borderBottom: active ? \"2px solid var(--color-accent, #e6c87e)\" : \"2px solid transparent\",\n minWidth: \"80px\",\n touchAction: \"manipulation\",\n }}\n >\n {tab.label}\n\n {tab.hasNotification ? (\n <span\n className=\"absolute right-[10px] top-[10px] h-2 w-2 rounded-full animate-pulse\"\n style={{\n backgroundColor: tab.notificationColor ?? \"#f6465d\",\n boxShadow: \"0 0 0 0 rgba(246, 70, 93, 0.7)\",\n }}\n />\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n\n {actions != null && actions.length > 0 ? (\n <div\n className={cn(\n \"flex items-center gap-[10px]\",\n \"overflow-x-auto md:overflow-visible\",\n \"[scrollbar-width:none]\",\n \"md:justify-end\",\n \"max-[768px]:w-full max-[768px]:justify-center max-[768px]:pb-2 max-[768px]:mb-4\"\n )}\n >\n {actions.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n \"flex shrink-0 items-center gap-[5px] whitespace-nowrap\",\n \"rounded\",\n \"border border-white/10\",\n \"bg-transparent\",\n \"px-3 py-1.5 text-[14px] font-normal\",\n \"transition-all\",\n \"max-[768px]:px-2.5 max-[768px]:py-[5px] max-[768px]:text-[13px]\",\n \"hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)]\"\n )}\n >\n {action.icon}\n {action.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nPropertySubheader.displayName = \"PropertySubheader\";\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\ntype EmailCodeParams = {\n email: string;\n isSignUp: boolean;\n handle?: string | null;\n};\n\ntype VerifyCodeParams = {\n code: string;\n email: string;\n};\n\ntype DemoLoginResult = {\n success: boolean;\n};\n\ntype DemoLoginHandler = (\n email: string,\n handle?: string | null\n) => Promise<DemoLoginResult | void> | DemoLoginResult | void;\n\nexport type LoginPopupView = \"main\" | \"email\" | \"otp\" | \"kyc\" | \"kyc-success\" | \"kyc-failed\" | \"funding\";\n\nexport type FundWalletParams = {\n amount: string;\n mode?: \"crypto\" | \"fiat\";\n};\n\nexport type FundWalletResult = {\n funded: boolean;\n widgetUrl?: string;\n requiresKyc?: boolean;\n};\n\nexport type LoginPopupProps = {\n onClose: () => void;\n onOpenEarlyAccess?: () => void;\n /**\n * Optional flag that indicates an authenticated session exists. When true (and autoCloseOnAuth is enabled)\n * the popup will close automatically, mirroring the loaf-demo behaviour that watched Privy + demo auth state.\n */\n isAuthenticated?: boolean;\n /** Optional user payload that, when truthy, also triggers the auto close effect. */\n currentUser?: unknown;\n /**\n * Handler that should kick off an email OTP flow (e.g. Privy's sendCode). When omitted, the component will\n * display an inline error explaining that email auth is unavailable.\n */\n onSendEmailCode?: (params: EmailCodeParams) => Promise<void> | void;\n /** Handler invoked when the user submits the 6-digit OTP code. */\n onVerifyEmailCode?: (params: VerifyCodeParams) => Promise<void> | void;\n /** Optional handler used for demo / local login flows before falling back to email OTP. */\n onDemoLogin?: DemoLoginHandler;\n /** Override for the logo shown in the popup header. */\n logoSrc?: string;\n logoAlt?: string;\n /** Disable auto-closing behaviour tied to isAuthenticated/currentUser flags. */\n autoCloseOnAuth?: boolean;\n /**\n * Handler called when the user clicks \"KYC me now\". Should trigger the KYC verification flow\n * and resolve with { passed: boolean } when complete.\n */\n onKycStart?: () => Promise<{ passed: boolean }> | void;\n /**\n * Render prop for embedding an inline KYC widget (e.g. Sumsub). When provided, clicking\n * \"KYC me now\" will display this widget inside the popup. The callback should be invoked\n * when the verification flow completes.\n */\n renderKycWidget?: (onResult: (result: { passed: boolean }) => void) => React.ReactNode;\n /**\n * Handler called when the user clicks \"Fund my account\". Should open the funding UI (e.g. Transak onramp)\n * and resolve with { funded: boolean, widgetUrl?: string } when the user exits.\n */\n onFundWallet?: (params: FundWalletParams) => Promise<FundWalletResult> | void;\n /** Optional view to show immediately when the popup opens. */\n initialView?: LoginPopupView;\n /** Handler invoked when the user selects \"Sign in with Wallet\". */\n onWalletLogin?: () => Promise<void> | void;\n};\n\nconst DEFAULT_LOGO_SRC = \"/loaf-logo.png\";\nconst DEFAULT_LOGO_ALT = \"Loaf\";\n\nconst OTP_INPUT_LENGTH = 6;\n\ntype StatusMessageProps = {\n $error?: boolean;\n};\n\ntype MiniLiveFeedPurchase = {\n id: string;\n name: string;\n amount: number;\n timestamp: string;\n};\n\nexport const LoginPopup: React.FC<LoginPopupProps> = ({\n onClose,\n onOpenEarlyAccess,\n onWalletLogin,\n isAuthenticated,\n currentUser,\n onSendEmailCode,\n onVerifyEmailCode,\n onDemoLogin,\n logoSrc = DEFAULT_LOGO_SRC,\n logoAlt = DEFAULT_LOGO_ALT,\n autoCloseOnAuth = true,\n onKycStart,\n renderKycWidget,\n onFundWallet,\n initialView,\n}) => {\n const [view, setView] = useState<LoginPopupView>(() => initialView ?? \"main\");\n const [email, setEmail] = useState(\"\");\n const [handle, setHandle] = useState(\"\");\n const [otp, setOtp] = useState<string[]>(Array(OTP_INPUT_LENGTH).fill(\"\"));\n const [error, setError] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [isSignUp, setIsSignUp] = useState(false);\n\n const [fundingAmount, setFundingAmount] = useState(\"\");\n const [kycLoading, setKycLoading] = useState(false);\n const [showKycWidget, setShowKycWidget] = useState(false);\n const [cryptoFundingLoading, setCryptoFundingLoading] = useState(false);\n const [fiatFundingLoading, setFiatFundingLoading] = useState(false);\n const [fundingError, setFundingError] = useState(\"\");\n const [transakWidgetUrl, setTransakWidgetUrl] = useState<string | null>(null);\n\n // Ref-based flag to suppress auto-close during signup verification.\n // Set synchronously BEFORE the async verify call so the effect sees it\n // even if isAuthenticated flips true before setView(\"kyc\") renders.\n const suppressAutoCloseRef = React.useRef(false);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Popup] mounted\");\n return () => console.log(\"[LoginTrace][Popup] unmounted\");\n }, []);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Popup] view updated\", { view });\n }, [view]);\n\n useEffect(() => {\n console.log(\"[LoginTrace][Popup] auth props updated\", { isAuthenticated, hasUser: Boolean(currentUser) });\n }, [isAuthenticated, currentUser]);\n\n useEffect(() => {\n if (typeof initialView === \"string\") {\n console.log(\"[LoginTrace][Popup] initialView prop changed\", { initialView });\n setView(initialView);\n }\n }, [initialView]);\n\n useEffect(() => {\n if (!transakWidgetUrl) return;\n\n const handleTransakMessage = (event: MessageEvent) => {\n // Verify the message is from Transak\n if (!event.origin.includes('transak.com') && !event.origin.includes('global.transak.com')) {\n return;\n }\n\n console.log('[LoginTrace][Popup] Transak message received', event.data);\n\n try {\n const data = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\n // Handle different Transak events\n if (data.event_id === 'TRANSAK_ORDER_SUCCESSFUL') {\n console.log('[LoginTrace][Popup] Transak order successful', data);\n // Close the popup after successful transaction\n setTimeout(() => {\n onClose();\n }, 2000);\n } else if (data.event_id === 'TRANSAK_ORDER_FAILED') {\n console.error('[LoginTrace][Popup] Transak order failed', data);\n setFundingError('Transaction failed. Please try again.');\n setTransakWidgetUrl(null);\n } else if (data.event_id === 'TRANSAK_WIDGET_CLOSE') {\n console.log('[LoginTrace][Popup] Transak widget closed by user');\n setTransakWidgetUrl(null);\n }\n } catch (err) {\n console.warn('[LoginTrace][Popup] Failed to parse Transak message', err);\n }\n };\n\n window.addEventListener('message', handleTransakMessage);\n return () => window.removeEventListener('message', handleTransakMessage);\n }, [transakWidgetUrl, onClose]);\n\n useEffect(() => {\n if (!autoCloseOnAuth) {\n console.log(\"[LoginTrace][Popup] autoClose disabled\", { autoCloseOnAuth, view });\n return;\n }\n\n // Don't auto-close if we're in the post-signup onboarding flow\n if (suppressAutoCloseRef.current) {\n console.log(\"[LoginTrace][Popup] autoClose suppressed\", { view });\n return;\n }\n if (view === \"kyc\" || view === \"kyc-success\" || view === \"kyc-failed\" || view === \"funding\") {\n console.log(\"[LoginTrace][Popup] autoClose skipped due to onboarding view\", { view });\n return;\n }\n\n console.log(\"[LoginTrace][Popup] autoClose effect evaluating\", {\n autoCloseOnAuth,\n isAuthenticated,\n hasUser: Boolean(currentUser),\n view,\n });\n\n if (isAuthenticated || currentUser) {\n console.log(\"[LoginTrace][Popup] autoClose triggered\", { isAuthenticated, hasUser: Boolean(currentUser), view });\n onClose();\n }\n }, [autoCloseOnAuth, currentUser, isAuthenticated, onClose, view]);\n\n const handleWalletLogin = async () => {\n console.log('[LoginTrace][Popup] Wallet login clicked, onWalletLogin:', !!onWalletLogin);\n if (onWalletLogin) {\n try {\n console.log('[LoginTrace][Popup] Calling onWalletLogin...');\n await onWalletLogin();\n console.log('[LoginTrace][Popup] onWalletLogin completed, closing popup');\n onClose();\n return;\n } catch (err) {\n console.error('[LoginTrace][Popup] Wallet login failed', err);\n }\n }\n console.log('[LoginTrace][Popup] No onWalletLogin handler, closing popup');\n onClose();\n if (onOpenEarlyAccess) {\n onOpenEarlyAccess();\n }\n };\n\n const handleEmailClick = (signUp = false) => {\n console.log(\"[LoginTrace][Popup] handleEmailClick\", { signUp });\n setIsSignUp(signUp);\n setView(\"email\");\n setError(\"\");\n };\n\n const handleSendCode = async (event?: React.SyntheticEvent) => {\n event?.preventDefault();\n\n console.log(\"[LoginTrace][Popup] handleSendCode invoked\", { email, isSignUp, handle, eventType: event?.type });\n\n if (!email || !email.includes(\"@\")) {\n setError(\"Please enter a valid email address\");\n return;\n }\n\n if (isSignUp && !handle.trim()) {\n setError(\"Please claim a handle to continue\");\n return;\n }\n\n setLoading(true);\n setError(\"\");\n\n const normalizedHandle = isSignUp ? handle.trim() : undefined;\n\n try {\n console.log(\"[LoginTrace][Popup] Attempting demo login fallback\", { hasDemoHandler: Boolean(onDemoLogin) });\n const demoResult = await onDemoLogin?.(email, normalizedHandle ?? null);\n if (demoResult && (demoResult as DemoLoginResult).success) {\n console.log(\"[LoginTrace][Popup] Demo login succeeded, skipping OTP flow\");\n setLoading(false);\n return;\n }\n } catch (err) {\n // If demo login fails, fall back to email auth.\n console.warn(\"[LoginTrace][Popup] Demo login failed, attempting email OTP\", err);\n }\n\n if (!onSendEmailCode) {\n setError(\"Email authentication is not configured for this popup.\");\n setLoading(false);\n return;\n }\n\n try {\n console.log(\"[LoginTrace][Popup] Calling onSendEmailCode\", { email, isSignUp, normalizedHandle });\n await onSendEmailCode({ email, isSignUp, handle: normalizedHandle ?? null });\n console.log(\"[LoginTrace][Popup] onSendEmailCode resolved, switching to OTP view\");\n setView(\"otp\");\n setOtp(Array(OTP_INPUT_LENGTH).fill(\"\"));\n } catch (err) {\n console.error(\"[LoginTrace][Popup] onSendEmailCode threw\", err);\n setError(err instanceof Error ? err.message : \"Failed to send verification code\");\n } finally {\n setLoading(false);\n }\n };\n\n const handleOTPChange = (index: number, value: string) => {\n const sanitizedValue = value.replace(/\\D/g, \"\");\n\n if (sanitizedValue.length > 1) {\n const digits = sanitizedValue.slice(0, OTP_INPUT_LENGTH).split(\"\");\n const newOtp = [...otp];\n digits.forEach((digit, i) => {\n if (index + i < OTP_INPUT_LENGTH) {\n newOtp[index + i] = digit;\n }\n });\n setOtp(newOtp);\n\n const nextIndex = Math.min(index + digits.length, OTP_INPUT_LENGTH - 1);\n document.getElementById(`otp-${nextIndex}`)?.focus();\n return;\n }\n\n const newOtp = [...otp];\n newOtp[index] = sanitizedValue;\n setOtp(newOtp);\n\n if (sanitizedValue && index < OTP_INPUT_LENGTH - 1) {\n document.getElementById(`otp-${index + 1}`)?.focus();\n }\n };\n\n const handleOTPKeyDown = (index: number, event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Backspace\" && !otp[index] && index > 0) {\n document.getElementById(`otp-${index - 1}`)?.focus();\n }\n };\n\n const handleOTPInput = (index: number, event: React.FormEvent<HTMLInputElement>) => {\n const rawValue = event.currentTarget.value ?? \"\";\n const nativeEvent = event.nativeEvent as InputEvent | undefined;\n const isPasteLike = nativeEvent?.inputType === \"insertFromPaste\" || rawValue.length > 1;\n if (isPasteLike) {\n handleOTPChange(index, rawValue);\n }\n };\n\n const handleOTPPaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault();\n const pasted = event.clipboardData?.getData(\"text\") ?? \"\";\n const digits = pasted.replace(/\\D/g, \"\").slice(0, OTP_INPUT_LENGTH).split(\"\");\n if (digits.length === 0) return;\n\n const next = Array.from({ length: OTP_INPUT_LENGTH }, (_, i) => digits[i] ?? \"\");\n setOtp(next);\n\n const lastIndex = Math.min(digits.length, OTP_INPUT_LENGTH) - 1;\n if (lastIndex >= 0) {\n requestAnimationFrame(() => {\n document.getElementById(`otp-${lastIndex}`)?.focus();\n });\n }\n };\n\n const handleVerifyCode = async (event: React.FormEvent) => {\n event.preventDefault();\n\n const code = otp.join(\"\");\n console.log(\"[LoginTrace][Popup] handleVerifyCode\", { codeLength: code.length, isSignUp });\n if (code.length !== OTP_INPUT_LENGTH) {\n setError(\"Please enter the 6-digit code\");\n return;\n }\n\n if (!onVerifyEmailCode) {\n setError(\"Verification handler missing. Cannot verify code.\");\n return;\n }\n\n setLoading(true);\n setError(\"\");\n\n // If this is a signup flow, suppress auto-close BEFORE the verify call.\n // Privy will set isAuthenticated=true during verify, which would trigger\n // the auto-close effect before our setView(\"kyc\") renders.\n if (isSignUp) {\n suppressAutoCloseRef.current = true;\n }\n\n try {\n console.log(\"[LoginTrace][Popup] Calling onVerifyEmailCode\");\n await onVerifyEmailCode({ code, email });\n // After successful signup verification, go to KYC step\n if (isSignUp) {\n console.log(\"[LoginTrace][Popup] Signup OTP verified, moving to KYC view\");\n setView(\"kyc\");\n setLoading(false);\n return;\n }\n } catch (err) {\n console.error(\"[LoginTrace][Popup] onVerifyEmailCode threw\", err);\n suppressAutoCloseRef.current = false;\n setError(err instanceof Error ? err.message : \"Invalid verification code\");\n } finally {\n setLoading(false);\n }\n };\n\n const handleKycWidgetResult = (result: { passed: boolean }) => {\n setShowKycWidget(false);\n if (result.passed) {\n setView(\"kyc-success\");\n } else {\n setView(\"kyc-failed\");\n }\n };\n\n const handleKycWidgetClose = () => {\n setShowKycWidget(false);\n onClose();\n };\n\n const handleKycStart = async () => {\n if (renderKycWidget) {\n setShowKycWidget(true);\n return;\n }\n if (!onKycStart) {\n // If no KYC handler provided, skip to success\n setView(\"kyc-success\");\n return;\n }\n setKycLoading(true);\n setError(\"\");\n try {\n const result = await onKycStart();\n if (result && result.passed) {\n setView(\"kyc-success\");\n } else {\n setView(\"kyc-failed\");\n }\n } catch (err) {\n setView(\"kyc-failed\");\n } finally {\n setKycLoading(false);\n }\n };\n\n const handleKycSkip = () => {\n onClose();\n };\n\n const handleCryptoFund = async () => {\n if (!onFundWallet) {\n onClose();\n return;\n }\n setFundingError(\"\");\n setCryptoFundingLoading(true);\n try {\n const result = await onFundWallet({ amount: fundingAmount || \"100\", mode: \"crypto\" });\n if (result?.funded) {\n onClose();\n }\n } catch (err) {\n setFundingError(err instanceof Error ? err.message : \"Unable to launch funding. Please try again.\");\n } finally {\n setCryptoFundingLoading(false);\n }\n };\n\n const handleFiatFund = async () => {\n if (!onFundWallet) {\n onClose();\n return;\n }\n setFundingError(\"\");\n setFiatFundingLoading(true);\n try {\n const result = await onFundWallet({ amount: fundingAmount || \"100\", mode: \"fiat\" });\n if (result?.widgetUrl) {\n setTransakWidgetUrl(result.widgetUrl);\n } else if (result?.requiresKyc) {\n setView(\"kyc\");\n setShowKycWidget(true);\n } else if (result?.funded) {\n onClose();\n }\n } catch (err) {\n setFundingError(err instanceof Error ? err.message : \"Unable to launch funding. Please try again.\");\n } finally {\n setFiatFundingLoading(false);\n }\n };\n\n const handleFundingSkip = () => {\n onClose();\n };\n\n const handleTransakClose = () => {\n setTransakWidgetUrl(null);\n setFundingError('');\n };\n\n const handleFundingAmountChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value.replace(/[^0-9.]/g, \"\");\n setFundingAmount(next);\n };\n\n const handleBack = () => {\n setView(\"main\");\n setEmail(\"\");\n setHandle(\"\");\n setOtp(Array(OTP_INPUT_LENGTH).fill(\"\"));\n setError(\"\");\n };\n\n if (view === \"main\") {\n return (\n <Overlay onClick={onClose}>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <Title>\n <LogoContainer>\n <LogoImage src={logoSrc} alt={logoAlt} />\n </LogoContainer>\n Welcome to Loaf\n </Title>\n\n <ButtonsContainer>\n <LoginButton onClick={() => handleEmailClick(false)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n Sign in with Email\n </LoginButton>\n\n <div style={{ textAlign: \"center\", color: \"var(--color-text-secondary, #848e9c)\", fontSize: \"0.875rem\" }}>\n or\n </div>\n\n <LoginButton onClick={handleWalletLogin}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\" />\n </svg>\n Sign in with Wallet\n </LoginButton>\n </ButtonsContainer>\n\n <div style={{ textAlign: \"center\", marginTop: \"0.5rem\", marginBottom: \"1rem\" }}>\n <span\n onClick={() => handleEmailClick(true)}\n style={{\n color: \"var(--color-text-secondary, #848e9c)\",\n fontSize: \"0.8rem\",\n cursor: \"pointer\",\n textDecoration: \"underline\",\n }}\n >\n Sign Up\n </span>\n </div>\n\n <Divider />\n\n <AnnotationContainer>\n <Annotation>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\" />\n </svg>\n <AnnotationText>\n <AnnotationLabel>← Digital Asset users</AnnotationLabel>\n Connect your Web3 wallet to access your assets\n </AnnotationText>\n </Annotation>\n\n <Annotation>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n <AnnotationText>\n <AnnotationLabel>← Traditional Finance users</AnnotationLabel>\n Sign in with email, no web3 experience needed\n </AnnotationText>\n </Annotation>\n\n <Annotation>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n <AnnotationText>\n <AnnotationLabel>← Self-custodied</AnnotationLabel>\n We never have ownership of your assets. All units are self-custodied\n </AnnotationText>\n </Annotation>\n </AnnotationContainer>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"email\") {\n return (\n <Overlay onClick={onClose}>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <BackButton onClick={handleBack}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n </svg>\n Back\n </BackButton>\n\n <Title>\n <LogoContainer>\n <LogoImage src={logoSrc} alt={logoAlt} />\n </LogoContainer>\n {isSignUp ? \"Sign up with Email\" : \"Sign in with Email\"}\n </Title>\n\n <form onSubmit={handleSendCode}>\n <EmailFormContainer>\n <EmailInput\n type=\"email\"\n placeholder=\"Enter your email address\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n autoFocus\n />\n\n {isSignUp && (\n <EmailInput\n type=\"text\"\n placeholder=\"Claim your handle (e.g. Landlord)\"\n value={handle}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setHandle(event.target.value)}\n style={{ marginTop: \"0.5rem\" }}\n />\n )}\n\n <SubmitButton type=\"submit\" disabled={loading || !email || (isSignUp && !handle)}>\n {loading ? \"Sending...\" : \"Continue\"}\n </SubmitButton>\n\n {error && <StatusMessage $error>{error}</StatusMessage>}\n </EmailFormContainer>\n </form>\n\n <InfoText>We'll send you a verification code to sign in securely.</InfoText>\n\n {isSignUp && <MiniLiveFeed />}\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"otp\") {\n return (\n <Overlay onClick={onClose}>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <BackButton onClick={() => setView(\"email\")}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n </svg>\n Back\n </BackButton>\n\n <Title>\n <LogoContainer>\n <LogoImage src={logoSrc} alt={logoAlt} />\n </LogoContainer>\n Enter Verification Code\n </Title>\n\n <InfoText style={{ marginBottom: \"1.5rem\" }}>\n We sent a code to <strong style={{ color: \"#eaecef\" }}>{email}</strong>\n </InfoText>\n\n <form onSubmit={handleVerifyCode}>\n <EmailFormContainer>\n <OTPContainer>\n {otp.map((digit, index) => (\n <OTPInput\n key={index}\n id={`otp-${index}`}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n handleOTPChange(index, event.target.value)\n }\n onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) =>\n handleOTPKeyDown(index, event)\n }\n onInput={(event: React.FormEvent<HTMLInputElement>) => handleOTPInput(index, event)}\n onPaste={handleOTPPaste}\n autoComplete={index === 0 ? \"one-time-code\" : \"off\"}\n autoFocus={index === 0}\n />\n ))}\n </OTPContainer>\n\n <SubmitButton type=\"submit\" disabled={loading || otp.join(\"\").length !== OTP_INPUT_LENGTH}>\n {loading ? \"Verifying...\" : \"Verify\"}\n </SubmitButton>\n\n {error && <StatusMessage $error>{error}</StatusMessage>}\n </EmailFormContainer>\n </form>\n\n <InfoText>\n Didn't receive a code?{' '}\n <button\n type=\"button\"\n onClick={(event) => {\n event.preventDefault();\n void handleSendCode(event);\n }}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#f0b90b\",\n cursor: \"pointer\",\n textDecoration: \"underline\",\n }}\n >\n Resend\n </button>\n </InfoText>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"kyc\") {\n return (\n <Overlay>\n <KycPopupContainer\n onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}\n $expanded={showKycWidget}\n >\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n {showKycWidget && renderKycWidget ? (\n <KycWidgetContainer>\n <InlineCloseButton onClick={handleKycWidgetClose} aria-label=\"Close KYC widget\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </InlineCloseButton>\n {renderKycWidget(handleKycWidgetResult)}\n </KycWidgetContainer>\n ) : (\n <OnboardingStepContainer>\n <OnboardingHeading>KYC to Continue</OnboardingHeading>\n <OnboardingSubtext>\n Loaf requires all users to KYC before they can start purchasing properties.\n </OnboardingSubtext>\n\n <OnboardingButtonGroup>\n <SubmitButton onClick={handleKycStart} disabled={kycLoading}>\n {kycLoading ? \"Verifying\\u2026\" : \"KYC me now\"}\n </SubmitButton>\n <OnboardingSkipButton onClick={handleKycSkip}>\n I'll do this later, I want to see the properties first\n </OnboardingSkipButton>\n </OnboardingButtonGroup>\n\n {error && <StatusMessage $error>{error}</StatusMessage>}\n </OnboardingStepContainer>\n )}\n </KycPopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"kyc-success\") {\n return (\n <Overlay>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <OnboardingStepContainer>\n <KycSuccessIcon>\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 34.5L28.5 43 44 25\" stroke=\"var(--color-accent, #e6c656)\" strokeWidth=\"4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </KycSuccessIcon>\n\n <OnboardingHeading>KYC pending review</OnboardingHeading>\n <OnboardingSubtext>\n Thanks for submitting your documents.<br />\n </OnboardingSubtext>\n\n <OnboardingButtonGroup>\n <SubmitButton onClick={onClose}>Close</SubmitButton>\n <OnboardingSkipButton onClick={() => setView(\"funding\")}>\n Fund now\n </OnboardingSkipButton>\n </OnboardingButtonGroup>\n </OnboardingStepContainer>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"kyc-failed\") {\n return (\n <Overlay>\n <PopupContainer onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}>\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n <OnboardingStepContainer>\n <KycFailedIcon>\n <svg width=\"84\" height=\"84\" viewBox=\"0 0 84 84\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"28\" cy=\"34\" r=\"5.5\" fill=\"var(--color-accent, #e6c656)\" />\n <circle cx=\"56\" cy=\"34\" r=\"5.5\" fill=\"var(--color-accent, #e6c656)\" />\n <path d=\"M24 58c5.5-5.5 12.5-8 18-8s12.5 2.5 18 8\" stroke=\"var(--color-accent, #e6c656)\" strokeWidth=\"5\" strokeLinecap=\"round\" />\n </svg>\n </KycFailedIcon>\n\n <OnboardingHeading>KYC Check Failed</OnboardingHeading>\n <OnboardingSubtext>\n Unfortunately your KYC check hasn't passed.<br />\n If you think this is an error please contact us at help@loafmarkets.com\n </OnboardingSubtext>\n\n <OnboardingButtonGroup>\n <SubmitButton\n onClick={() => {\n window.open(\"mailto:help@loafmarkets.com\", \"_blank\");\n }}\n >\n Contact us\n </SubmitButton>\n <OnboardingSkipButton onClick={onClose}>\n Go home\n </OnboardingSkipButton>\n </OnboardingButtonGroup>\n </OnboardingStepContainer>\n </PopupContainer>\n </Overlay>\n );\n }\n\n if (view === \"funding\") {\n return (\n <Overlay>\n <FundingPopupContainer \n onClick={(event: React.MouseEvent<HTMLDivElement>) => event.stopPropagation()}\n $hasWidget={!!transakWidgetUrl}\n >\n <CloseButton onClick={onClose} aria-label=\"Close login popup\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </CloseButton>\n\n {transakWidgetUrl ? (\n <>\n <BackButton onClick={handleTransakClose} style={{ position: 'absolute', top: '1rem', left: '1rem', zIndex: 1 }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n </svg>\n Back\n </BackButton>\n <TransakWidgetContainer>\n <TransakIframe\n src={transakWidgetUrl}\n title=\"Transak Onramp Widget\"\n allow=\"camera; microphone; payment\"\n />\n </TransakWidgetContainer>\n </>\n ) : (\n <OnboardingStepContainer>\n <OnboardingHeading>Fund your account</OnboardingHeading>\n\n <FundingCard>\n <FundingCardLabel>How much would you like to transfer?</FundingCardLabel>\n <FundingInputWrapper>\n <FundingCurrencyLabel>AUD</FundingCurrencyLabel>\n <FundingAmountInput\n type=\"text\"\n inputMode=\"decimal\"\n value={fundingAmount}\n onChange={handleFundingAmountChange}\n placeholder=\"0\"\n />\n </FundingInputWrapper>\n\n <FundingOptionsGrid>\n <FundingOptionCard>\n <FundingOptionHeading>Crypto transfer</FundingOptionHeading>\n <FundingOptionSubtext>\n Use Privy's Coinbase onramp to move crypto from another exchange or wallet.\n </FundingOptionSubtext>\n <SubmitButton onClick={handleCryptoFund} disabled={cryptoFundingLoading}>\n {cryptoFundingLoading ? \"Opening Coinbase…\" : \"Use crypto deposit\"}\n </SubmitButton>\n </FundingOptionCard>\n\n <FundingOptionCard>\n <FundingOptionHeading>Fiat onramp</FundingOptionHeading>\n <FundingOptionSubtext>\n Buy USDC instantly with your card or local payment methods via Transak.\n </FundingOptionSubtext>\n <SubmitButton onClick={handleFiatFund} disabled={fiatFundingLoading}>\n {fiatFundingLoading ? \"Loading widget…\" : \"Use onramp\"}\n </SubmitButton>\n </FundingOptionCard>\n </FundingOptionsGrid>\n\n <OnboardingSkipButton onClick={handleFundingSkip} style={{ marginTop: \"1.25rem\" }}>\n Skip for now\n </OnboardingSkipButton>\n\n {fundingError && <StatusMessage $error>{fundingError}</StatusMessage>}\n </FundingCard>\n </OnboardingStepContainer>\n )}\n </FundingPopupContainer>\n </Overlay>\n );\n }\n\n return null;\n};\n\nconst Overlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 10000;\n animation: fadeIn 0.2s ease-in-out;\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`;\n\nconst PopupContainer = styled.div`\n background-color: var(--color-background, #0a0a0a);\n border: 1px solid rgba(230, 198, 86, 0.3);\n border-radius: var(--border-radius, 12px);\n padding: 2.5rem;\n max-width: 440px;\n width: 90%;\n position: relative;\n animation: slideUp 0.3s ease-out;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n\n @keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @media (max-width: 768px) {\n padding: 2rem;\n max-width: 90%;\n }\n`;\n\ntype KycPopupContainerProps = {\n $expanded?: boolean;\n};\n\nconst KycPopupContainer = styled.div<KycPopupContainerProps>`\n background-color: var(--color-background, #0a0a0a);\n border: 1px solid rgba(230, 198, 86, 0.3);\n border-radius: var(--border-radius, 12px);\n padding: 2.5rem;\n max-width: ${(props) => (props.$expanded ? \"680px\" : \"440px\")};\n width: 90%;\n position: relative;\n animation: slideUp 0.3s ease-out;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n transition: max-width 0.3s ease;\n\n @keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @media (max-width: 768px) {\n padding: 1.5rem;\n max-width: 95%;\n }\n`;\n\nconst KycWidgetContainer = styled.div`\n min-height: 500px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n gap: 0.75rem;\n`;\n\nconst InlineCloseButton = styled.button`\n position: absolute;\n top: -12px;\n right: -12px;\n background: rgba(0, 0, 0, 0.4);\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 999px;\n color: var(--color-text-secondary, #848e9c);\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: color 0.2s ease, background 0.2s ease;\n\n &:hover {\n background: rgba(0, 0, 0, 0.6);\n color: var(--color-accent, #e6c656);\n }\n\n svg {\n width: 18px;\n height: 18px;\n }\n`;\n\nconst CloseButton = styled.button`\n position: absolute;\n top: 1rem;\n right: 1rem;\n background: none;\n border: none;\n color: var(--color-text-secondary, #848e9c);\n font-size: 1.5rem;\n cursor: pointer;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s ease;\n\n &:hover {\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst Title = styled.h2`\n font-size: 1.75rem;\n font-weight: 600;\n color: var(--color-text, #eaecef);\n margin-bottom: 2rem;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n`;\n\nconst LogoContainer = styled.div`\n display: flex;\n justify-content: center;\n margin-bottom: 0.5rem;\n`;\n\nconst LogoImage = styled.img`\n height: 60px;\n`;\n\nconst ButtonsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n margin-bottom: 1.5rem;\n`;\n\nconst LoginButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 1rem 1.5rem;\n background-color: var(--color-background-light, #1a1a1a);\n border: 1px solid rgba(230, 198, 86, 0.2);\n border-radius: var(--border-radius, 8px);\n color: var(--color-text, #eaecef);\n font-size: 1rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: rgba(230, 198, 86, 0.1);\n border-color: var(--color-accent, #e6c656);\n }\n\n svg {\n width: 20px;\n height: 20px;\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst Divider = styled.div`\n display: flex;\n align-items: center;\n margin: 1.5rem 0;\n\n &::before,\n &::after {\n content: \"\";\n flex: 1;\n height: 1px;\n background-color: rgba(230, 198, 86, 0.2);\n }\n`;\n\nconst InfoText = styled.p`\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.875rem;\n text-align: center;\n line-height: 1.5;\n`;\n\nconst AnnotationContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin-top: 1.5rem;\n padding-top: 1.5rem;\n border-top: 1px solid rgba(230, 198, 86, 0.2);\n`;\n\nconst Annotation = styled.div`\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.8rem;\n\n svg {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n margin-top: 2px;\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst AnnotationText = styled.span`\n flex: 1;\n line-height: 1.4;\n`;\n\nconst AnnotationLabel = styled.span`\n color: var(--color-text, #eaecef);\n font-weight: 500;\n margin-right: 0.25rem;\n`;\n\nconst EmailFormContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n margin-bottom: 1.5rem;\n`;\n\nconst EmailInput = styled.input`\n width: 100%;\n padding: 1rem 1.25rem;\n background-color: var(--color-background-light, #1a1a1a);\n border: 1px solid rgba(230, 198, 86, 0.2);\n border-radius: var(--border-radius, 8px);\n color: var(--color-text, #eaecef);\n font-size: 1rem;\n transition: all 0.2s ease;\n\n &:focus {\n outline: none;\n border-color: var(--color-accent, #e6c656);\n }\n\n &::placeholder {\n color: var(--color-text-secondary, #848e9c);\n }\n`;\n\nconst OTPContainer = styled.div`\n display: flex;\n gap: 0.5rem;\n justify-content: center;\n`;\n\nconst OTPInput = styled.input`\n width: 48px;\n height: 56px;\n text-align: center;\n font-size: 1.5rem;\n font-weight: 600;\n background-color: var(--color-background-light, #1a1a1a);\n border: 1px solid rgba(230, 198, 86, 0.2);\n border-radius: var(--border-radius, 8px);\n color: var(--color-accent, #e6c656);\n transition: all 0.2s ease;\n\n &:focus {\n outline: none;\n border-color: var(--color-accent, #e6c656);\n box-shadow: 0 0 0 2px rgba(230, 198, 86, 0.2);\n }\n`;\n\nconst SubmitButton = styled.button`\n width: 100%;\n padding: 0.85rem;\n background-color: var(--color-accent, #e6c656);\n border: none;\n border-radius: var(--border-radius, 8px);\n color: var(--color-background, #0a0a0a);\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: var(--color-accent-hover, #d4a50a);\n transform: translateY(-1px);\n }\n\n &:disabled {\n background-color: var(--color-background-light, #1a1a1a);\n color: var(--color-text-secondary, #848e9c);\n cursor: not-allowed;\n }\n`;\n\nconst BackButton = styled.button`\n background: none;\n border: none;\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.875rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 1rem;\n\n &:hover {\n color: var(--color-accent, #e6c656);\n }\n`;\n\nconst StatusMessage = styled.p<StatusMessageProps>`\n color: ${(props) => (props.$error ? \"#f6465d\" : \"#0ecb81\")};\n font-size: 0.875rem;\n text-align: center;\n margin-top: 0.5rem;\n`;\n\nconst OnboardingStepContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n padding: 0.25rem 0;\n gap: 0.5rem;\n`;\n\nconst OnboardingHeading = styled.h2`\n font-size: 1.2rem;\n font-weight: 600;\n color: var(--color-text, #eaecef);\n margin: 0;\n`;\n\nconst OnboardingSubtext = styled.p`\n font-size: 0.95rem;\n color: var(--color-text-secondary, #848e9c);\n line-height: 1.6;\n margin-bottom: 2rem;\n`;\n\nconst OnboardingButtonGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n width: 100%;\n`;\n\nconst OnboardingSkipButton = styled.button`\n width: 100%;\n padding: 0.75rem 0.9rem;\n background-color: rgba(255, 255, 255, 0.05);\n border: none;\n border-radius: var(--border-radius, 8px);\n color: var(--color-text-secondary, #848e9c);\n font-size: 0.9rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n color: var(--color-text, #eaecef);\n }\n`;\n\nconst KycSuccessIcon = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 120px;\n height: 120px;\n border-radius: 50%;\n border: 8px solid var(--color-accent, #e6c656);\n margin-bottom: 1.5rem;\n`;\n\nconst KycFailedIcon = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 120px;\n height: 120px;\n border-radius: 50%;\n border: 6px solid var(--color-accent, #e6c656);\n margin-bottom: 1.5rem;\n`;\n\nconst FundingCard = styled.div`\n width: 100%;\n border-radius: 14px;\n background-color: var(--color-background-light, #14151e);\n padding: 1rem;\n text-align: left;\n box-shadow: 0 18px 60px rgba(0, 0, 0, 0.4);\n`;\n\nconst FundingCardLabel = styled.p`\n font-size: 0.9rem;\n color: var(--color-text, #eaecef);\n margin-bottom: 0.5rem;\n`;\n\nconst FundingInputWrapper = styled.div`\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 0.08);\n background-color: var(--color-background, #0d0e14);\n padding: 0.75rem 0.85rem;\n`;\n\nconst FundingCurrencyLabel = styled.label`\n display: block;\n font-size: 0.65rem;\n text-transform: uppercase;\n letter-spacing: 0.4em;\n color: rgba(255, 255, 255, 0.45);\n`;\n\nconst FundingAmountInput = styled.input`\n width: 100%;\n background: transparent;\n border: none;\n outline: none;\n font-size: 1.7rem;\n font-weight: 400;\n color: var(--color-text, #eaecef);\n margin-top: 0.4rem;\n font-family: \"Geist Mono\", \"Space Grotesk\", monospace;\n font-variant-numeric: slashed-zero;\n\n &::placeholder {\n color: rgba(255, 255, 255, 0.4);\n }\n`;\n\nconst FundingOptionsGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 0.6rem;\n margin-top: 0.75rem;\n`;\n\nconst FundingOptionCard = styled.div`\n background-color: rgba(255, 255, 255, 0.03);\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 12px;\n padding: 0.85rem;\n display: flex;\n flex-direction: column;\n gap: 0.4rem;\n`;\n\nconst FundingOptionHeading = styled.h4`\n margin: 0;\n font-size: 0.9rem;\n color: var(--color-text, #eaecef);\n`;\n\nconst FundingOptionSubtext = styled.p`\n margin: 0;\n font-size: 0.75rem;\n line-height: 1.3;\n color: var(--color-text-secondary, #848e9c);\n flex: 1;\n`;\n\ntype FundingPopupContainerProps = {\n $hasWidget?: boolean;\n};\n\nconst FundingPopupContainer = styled.div<FundingPopupContainerProps>`\n background-color: var(--color-background, #0a0a0a);\n border: 1px solid rgba(230, 198, 86, 0.3);\n border-radius: var(--border-radius, 12px);\n padding: ${(props) => (props.$hasWidget ? \"0\" : \"2.5rem\")};\n max-width: ${(props) => (props.$hasWidget ? \"900px\" : \"440px\")};\n width: 90%;\n position: relative;\n animation: slideUp 0.3s ease-out;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n\n @keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @media (max-width: 768px) {\n padding: ${(props) => (props.$hasWidget ? \"0\" : \"2rem\")};\n max-width: 95%;\n }\n`;\n\nconst TransakWidgetContainer = styled.div`\n width: 100%;\n height: 700px;\n display: flex;\n flex-direction: column;\n border-radius: var(--border-radius, 12px);\n overflow: hidden;\n\n @media (max-width: 768px) {\n height: 600px;\n }\n`;\n\nconst TransakIframe = styled.iframe`\n width: 100%;\n height: 100%;\n border: none;\n border-radius: var(--border-radius, 12px);\n`;\n\nconst MiniLiveFeed: React.FC = () => {\n const [purchases, setPurchases] = useState<MiniLiveFeedPurchase[]>([]);\n\n useEffect(() => {\n const handles = [\n \"Landlord\",\n \"PropertyKing\",\n \"RealEstateGuru\",\n \"InvestorPro\",\n \"WealthBuilder\",\n \"AssetHunter\",\n \"PortfolioMax\",\n \"CapitalGains\",\n \"DividendKing\",\n \"YieldSeeker\",\n \"BrickNMortar\",\n \"EquityBoss\",\n \"CashFlowKing\",\n \"PropMogul\",\n \"RentCollector\",\n \"LandBaron\",\n \"EstateBuilder\",\n \"ValueInvestor\",\n \"GrowthSeeker\",\n \"PassiveIncome\",\n \"WealthyOwl\",\n \"SmartMoney\",\n \"AlphaInvestor\",\n \"DiamondHands\",\n \"GoldenGoose\",\n \"EliteHolder\",\n \"TopTierInvestor\",\n \"PlatinumPro\",\n \"AussieInvestor\",\n \"HarbourHero\",\n \"James W.\",\n \"Sarah M.\",\n \"Michael T.\",\n \"Emma L.\",\n \"David K.\",\n \"Sophie R.\",\n \"Chris B.\",\n \"Jessica H.\",\n \"Andrew P.\",\n \"Rachel S.\",\n \"Daniel C.\",\n \"Olivia N.\",\n ];\n\n const generatePurchase = (): MiniLiveFeedPurchase => {\n const tokenPrice = 250;\n const tokenCount = Math.floor(Math.random() * 150) + 10;\n const amount = tokenPrice * tokenCount;\n const randomHandle = handles[Math.floor(Math.random() * handles.length)];\n return {\n id: `p-${Date.now()}-${Math.random()}`,\n name: randomHandle,\n amount,\n timestamp: new Date().toISOString(),\n };\n };\n\n const initial = Array.from({ length: 5 }, generatePurchase);\n setPurchases(initial);\n\n const interval = setInterval(() => {\n setPurchases((prev) => [generatePurchase(), ...prev.slice(0, 5)]);\n }, 2000 + Math.random() * 2000);\n\n return () => clearInterval(interval);\n }, []);\n\n const formatCurrency = (amount: number) => `$${amount.toLocaleString()}`;\n\n return (\n <div\n style={{\n marginTop: \"1rem\",\n maxHeight: \"180px\",\n overflow: \"hidden\",\n borderRadius: \"8px\",\n background: \"rgba(0, 0, 0, 0.3)\",\n }}\n >\n <div\n style={{\n fontSize: \"0.7rem\",\n color: \"var(--color-text-secondary, #848e9c)\",\n padding: \"0.5rem 0.75rem\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.05)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.4rem\",\n }}\n >\n <span\n style={{\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n background: \"#0ecb81\",\n animation: \"pulse 1.5s infinite\",\n }}\n ></span>\n Handles will Appear:\n </div>\n {purchases.map((purchase, index) => {\n const maxAmount = 40000;\n const barPercent = Math.min(80, Math.max(15, (purchase.amount / maxAmount) * 100));\n return (\n <div\n key={purchase.id}\n style={{\n padding: \"0.4rem 0.75rem\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.03)\",\n position: \"relative\",\n animation: index === 0 ? \"slideIn 0.3s ease-out\" : \"none\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n width: `${barPercent}%`,\n background: \"linear-gradient(90deg, transparent 0%, rgba(14, 203, 129, 0.12) 100%)\",\n pointerEvents: \"none\",\n }}\n ></div>\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n bottom: 0,\n width: \"2px\",\n background: index === 0 ? \"rgba(14, 203, 129, 0.5)\" : \"transparent\",\n }}\n ></div>\n <div style={{ position: \"relative\", zIndex: 1 }}>\n <div style={{ fontSize: \"0.8rem\", fontWeight: 500, color: \"#fff\" }}>{purchase.name}</div>\n <div style={{ fontSize: \"0.65rem\", color: \"var(--color-text-secondary, #848e9c)\" }}>\n less than a minute ago\n </div>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\", position: \"relative\", zIndex: 1 }}>\n <span style={{ fontSize: \"0.75rem\", color: \"var(--color-text-secondary, #848e9c)\" }}>bought</span>\n <span style={{ fontSize: \"0.8rem\", fontWeight: 600, color: \"#fff\" }}>{formatCurrency(purchase.amount)}</span>\n </div>\n </div>\n );\n })}\n <style>\n {`\n @keyframes slideIn {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `}\n </style>\n </div>\n );\n};\n\nLoginPopup.displayName = \"LoginPopup\";\n\n","import * as React from \"react\";\nimport styled, { css } from \"styled-components\";\n\nexport type PropertyAddressOption = {\n id: string;\n label: string;\n};\n\nexport type PropertyValueSummary = {\n value: number;\n change?: number;\n label?: string;\n currencySymbol?: string;\n formatOptions?: Intl.NumberFormatOptions;\n};\n\nexport type PropertyPriceSummary = {\n value: number;\n change?: number;\n changePercent?: number;\n currencySymbol?: string;\n formatOptions?: Intl.NumberFormatOptions;\n percentFormatOptions?: Intl.NumberFormatOptions;\n};\n\nexport type PropertyCompareBarProps = React.HTMLAttributes<HTMLDivElement> & {\n addresses: (PropertyAddressOption | string)[];\n selectedAddressId?: string;\n onSelectAddress?: (addressId: string) => void;\n propertyValue?: PropertyValueSummary;\n propertyValueVariant?: \"classic\" | \"card\" | \"pill\";\n price?: PropertyPriceSummary;\n};\n\nexport const PropertyCompareBar = React.forwardRef<HTMLDivElement, PropertyCompareBarProps>(\n (\n {\n className,\n addresses,\n selectedAddressId,\n onSelectAddress,\n propertyValue,\n propertyValueVariant = \"classic\",\n price,\n ...props\n },\n ref\n ) => {\n const normalizedAddresses = React.useMemo<PropertyAddressOption[]>(() => {\n return addresses.map((option) =>\n typeof option === \"string\" ? { id: option, label: option } : option\n );\n }, [addresses]);\n\n const hasAddresses = normalizedAddresses.length > 0;\n const firstAddressId = normalizedAddresses[0]?.id;\n\n const isControlled = selectedAddressId !== undefined;\n\n const [internalSelectedId, setInternalSelectedId] = React.useState<string | undefined>(() =>\n isControlled ? undefined : firstAddressId\n );\n\n const resolvedSelectedId = isControlled ? selectedAddressId : internalSelectedId;\n\n React.useEffect(() => {\n if (!isControlled) {\n setInternalSelectedId((current) => {\n if (current != null && normalizedAddresses.some((option) => option.id === current)) {\n return current;\n }\n\n return firstAddressId;\n });\n }\n }, [firstAddressId, isControlled, normalizedAddresses]);\n\n const selectedOption =\n normalizedAddresses.find((option) => option.id === resolvedSelectedId) ?? normalizedAddresses[0];\n\n const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);\n\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!isDropdownOpen) return;\n\n const handleClick = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsDropdownOpen(false);\n }\n };\n\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsDropdownOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [isDropdownOpen]);\n\n const handleAddressSelect = (addressId: string) => {\n if (!isControlled) {\n setInternalSelectedId(addressId);\n }\n onSelectAddress?.(addressId);\n setIsDropdownOpen(false);\n };\n\n const propertyValueLabel = propertyValue?.label ?? \"Property Value\";\n const propertyValueCurrency = propertyValue?.currencySymbol ?? \"$\";\n const propertyValueFormat =\n propertyValue?.formatOptions ?? ({\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n } satisfies Intl.NumberFormatOptions);\n const formattedPropertyValue =\n propertyValue == null\n ? null\n : `${propertyValueCurrency}${propertyValue.value.toLocaleString(\n undefined,\n propertyValueFormat\n )}`;\n const formattedPropertyChange =\n propertyValue?.change == null\n ? null\n : `${propertyValue.change >= 0 ? \"+\" : \"-\"}${propertyValueCurrency}${Math.abs(\n propertyValue.change\n ).toLocaleString(undefined, propertyValueFormat)}`;\n const priceCurrency = price?.currencySymbol ?? \"$\";\n const priceFormat =\n price?.formatOptions ?? ({ minimumFractionDigits: 2, maximumFractionDigits: 2 } satisfies Intl.NumberFormatOptions);\n const pricePercentFormat =\n price?.percentFormatOptions ?? ({ minimumFractionDigits: 2, maximumFractionDigits: 2 } satisfies Intl.NumberFormatOptions);\n const formattedPriceValue =\n price == null\n ? null\n : `${priceCurrency}${price.value.toLocaleString(undefined, priceFormat)}`;\n const formattedPriceChange =\n price?.change == null\n ? null\n : `${price.change >= 0 ? \"+\" : \"-\"}${priceCurrency}${Math.abs(price.change).toLocaleString(\n undefined,\n priceFormat\n )}`;\n const formattedPricePercent =\n price?.changePercent == null\n ? null\n : `${price.changePercent >= 0 ? \"+\" : \"-\"}${Math.abs(price.changePercent).toLocaleString(\n undefined,\n pricePercentFormat\n )}%`;\n const priceContent =\n formattedPriceValue && propertyValueVariant === \"pill\" ? (\n <PriceBlock $variant={propertyValueVariant}>\n <PriceAmount>{formattedPriceValue}</PriceAmount>\n {formattedPriceChange || formattedPricePercent ? (\n <PriceChange\n $isPositive={\n price?.change != null\n ? price.change >= 0\n : price?.changePercent != null\n ? price.changePercent >= 0\n : undefined\n }\n >\n {formattedPriceChange ? <span>{formattedPriceChange}</span> : null}\n {formattedPricePercent ? <span>{formattedPricePercent}</span> : null}\n </PriceChange>\n ) : null}\n </PriceBlock>\n ) : null;\n\n const propertyValueContent = formattedPropertyValue ? (\n <PropertyValueBlock $variant={propertyValueVariant}>\n <PropertyValueLabel>{propertyValueLabel}</PropertyValueLabel>\n <PropertyValueAmount>{formattedPropertyValue}</PropertyValueAmount>\n {formattedPropertyChange ? (\n <PropertyValueChange $isPositive={propertyValue?.change != null ? propertyValue.change >= 0 : undefined}>\n {formattedPropertyChange}\n </PropertyValueChange>\n ) : null}\n </PropertyValueBlock>\n ) : null;\n\n return (\n <PropertySelectorContainer ref={ref} className={className} $variant={propertyValueVariant} {...props}>\n <PropertySelector ref={dropdownRef} onClick={() => hasAddresses && setIsDropdownOpen((prev) => !prev)}>\n <PropertyAddress>\n {selectedOption ? selectedOption.label : hasAddresses ? \"Select address\" : \"No addresses available\"}\n <svg\n className=\"dropdown-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n style={{ transform: isDropdownOpen ? \"rotate(180deg)\" : undefined }}\n >\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>\n </PropertyAddress>\n\n <PropertySelectorDropdown $isOpen={isDropdownOpen && hasAddresses}>\n {normalizedAddresses.map((option) => (\n <PropertySelectorOption\n key={option.id}\n onClick={(event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n handleAddressSelect(option.id);\n }}\n >\n <PropertySelectorName>{option.label}</PropertySelectorName>\n </PropertySelectorOption>\n ))}\n </PropertySelectorDropdown>\n </PropertySelector>\n\n {propertyValueVariant === \"pill\" ? (\n <>\n {priceContent}\n {propertyValueContent}\n </>\n ) : (\n propertyValueContent\n )}\n </PropertySelectorContainer>\n );\n }\n);\n\nPropertyCompareBar.displayName = \"PropertyCompareBar\";\n\nconst PropertySelectorContainer = styled.div<{ $variant: \"classic\" | \"card\" | \"pill\" }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1.5rem;\n background-color: ${({ $variant }) => ($variant === \"pill\" ? \"#0f0f0f\" : \"rgba(30, 32, 38, 0.95)\")};\n border: ${({ $variant }) => ($variant === \"pill\" ? \"1px solid rgba(255, 255, 255, 0.15)\" : \"none\")};\n border-radius: 8px;\n margin-bottom: 1.5rem;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n color: var(--color-text, #f8f9fa);\n font-family: var(--font-family, \"Inter\", sans-serif);\n\n @media (max-width: 1024px) {\n padding: 0.75rem 1rem;\n margin-bottom: 0.75rem;\n }\n\n @media (max-width: 768px) {\n border-radius: 0;\n margin-top: 0;\n padding-top: 0.5rem;\n }\n\n @media (max-width: 600px) {\n width: 100%;\n\n ${({ $variant }) =>\n $variant === \"pill\"\n ? css`\n display: grid;\n grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr) minmax(0, 1fr);\n gap: 0.35rem;\n align-items: center;\n\n > *:nth-child(1) {\n width: 100%;\n }\n\n > *:nth-child(2) {\n justify-self: center;\n width: 100%;\n }\n\n > *:nth-child(3) {\n justify-self: end;\n text-align: right;\n }\n `\n : css`\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n `};\n }\n`;\n\nconst PropertySelector = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 0.5rem 0;\n flex: 1;\n\n &:hover {\n .dropdown-icon {\n transform: translateY(2px);\n }\n }\n`;\n\nconst PropertyAddress = styled.div`\n font-size: 1.125rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n color: inherit;\n\n svg {\n transition: transform 0.2s;\n }\n\n @media (max-width: 600px) {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.2rem;\n font-size: 1rem;\n line-height: 1.2;\n white-space: normal;\n }\n`;\n\nconst PropertySelectorDropdown = styled.div<{ $isOpen: boolean }>`\n position: absolute;\n top: 100%;\n left: 0;\n width: 100%;\n max-width: 400px;\n background-color: var(--color-card, #1f232b);\n border-radius: 8px;\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);\n z-index: 100;\n overflow: hidden;\n display: ${(props) => (props.$isOpen ? \"block\" : \"none\")};\n`;\n\nconst PropertySelectorOption = styled.div`\n padding: 0.75rem 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n cursor: pointer;\n transition: background-color 0.2s;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nconst PropertySelectorName = styled.div`\n font-weight: 600;\n`;\n\nconst PropertyValueBlock = styled.div<{ $variant: \"classic\" | \"card\" | \"pill\" }>`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-left: 1rem;\n white-space: nowrap;\n\n ${({ $variant }) =>\n $variant === \"card\" &&\n css`\n margin-left: auto;\n flex-direction: row;\n align-items: center;\n min-width: 220px;\n border: none;\n background: rgba(30, 32, 38, 0.95);\n border-radius: 14px;\n padding: 0.9rem 1.25rem;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);\n gap: 0.85rem;\n justify-content: flex-end;\n\n @media (max-width: 600px) {\n margin: 0;\n width: auto;\n min-width: 0;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.125rem;\n padding: 0;\n background: transparent;\n border-radius: 0;\n box-shadow: none;\n }\n `}\n\n ${({ $variant }) =>\n $variant === \"pill\" &&\n css`\n margin-left: auto;\n margin-right: 1rem;\n background: #191919;\n border-radius: 8px;\n border: 1px solid rgba(255, 255, 255, 0.05);\n padding: 0.5rem 1rem;\n gap: 1rem;\n align-items: center;\n\n @media (max-width: 600px) {\n margin: 0;\n width: 100%;\n min-width: 0;\n flex-direction: column;\n align-items: flex-end;\n text-align: right;\n gap: 0.2rem;\n padding: 0;\n background: transparent;\n border-radius: 0;\n border: none;\n white-space: normal;\n }\n `}\n\n @media (max-width: 600px) {\n margin: 0;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.2rem;\n white-space: normal;\n }\n`;\n\nconst PropertyValueLabel = styled.span`\n font-size: 0.7rem;\n color: var(--color-text-secondary, rgba(255, 255, 255, 0.6));\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n @media (max-width: 600px) {\n font-size: 0.6rem;\n letter-spacing: 0.4px;\n }\n`;\n\nconst PropertyValueAmount = styled.span`\n font-size: 1.1rem;\n font-weight: 600;\n color: #fff;\n\n @media (max-width: 600px) {\n font-size: 0.95rem;\n }\n`;\n\nconst PropertyValueChange = styled.span<{ $isPositive?: boolean }>`\n font-size: 0.75rem;\n font-weight: 500;\n color: ${(props) =>\n props.$isPositive == null\n ? \"var(--color-text-secondary, rgba(255, 255, 255, 0.6))\"\n : props.$isPositive\n ? \"var(--color-positive, #0ecb81)\"\n : \"var(--color-negative, #f6465d)\"};\n\n @media (max-width: 600px) {\n font-size: 0.65rem;\n }\n`;\n\nconst PriceBlock = styled.div<{ $variant: \"classic\" | \"card\" | \"pill\" }>`\n display: none;\n\n ${({ $variant }) =>\n $variant === \"pill\" &&\n css`\n @media (max-width: 600px) {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.15rem;\n width: 100%;\n }\n `}\n`;\n\nconst PriceAmount = styled.span`\n font-size: 1.6rem;\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.2px;\n`;\n\nconst PriceChange = styled.span<{ $isPositive?: boolean }>`\n font-size: 0.85rem;\n font-weight: 500;\n display: inline-flex;\n gap: 0.35rem;\n color: ${(props) =>\n props.$isPositive == null\n ? \"var(--color-text-secondary, rgba(255, 255, 255, 0.6))\"\n : props.$isPositive\n ? \"var(--color-positive, #0ecb81)\"\n : \"var(--color-negative, #f6465d)\"};\n`;\n","import styled from 'styled-components'\n\nexport interface OverviewResponse {\n readonly description: string;\n readonly tokensIssued: number;\n readonly offeringValuation: number;\n readonly weeklyRent: number;\n readonly indicativeListing: string;\n readonly minimumParticipation?: number;\n readonly landSizeSqm: number;\n readonly buildingSizeSqm: number;\n readonly swimmingPool: boolean;\n readonly tennisCourt: boolean;\n readonly garden: boolean;\n readonly gym: boolean;\n readonly propertyType?: string;\n readonly yearBuilt: number;\n readonly ownership: string;\n readonly zoning: string;\n readonly levels: number;\n readonly daStatus: string;\n}\n\nexport type PropertyOverviewProps = {\n propertyName: string\n location: string\n midPrice: number\n onTradeClick?: () => void\n overviewData?: OverviewResponse | null\n minimumParticipation?: number | null\n bedrooms?: number | null\n bathrooms?: number | null\n carSpaces?: number | null\n propertyTypeLabel?: string | null\n}\n\nexport function PropertyOverview({\n propertyName: _propertyName,\n location: _location,\n midPrice: _midPrice,\n onTradeClick: _onTradeClick,\n overviewData,\n minimumParticipation,\n bedrooms,\n bathrooms,\n carSpaces,\n propertyTypeLabel,\n}: PropertyOverviewProps) {\n // Use backend data or show N/A when not available\n const description = overviewData?.description ?? \"N/A\"\n const tokensIssued = overviewData?.tokensIssued ?? null\n const offeringValuation = overviewData?.offeringValuation ?? null\n const weeklyRent = overviewData?.weeklyRent ?? null\n const indicativeListing = overviewData?.indicativeListing ?? \"N/A\"\n const minParticipationValue =\n minimumParticipation ?? overviewData?.minimumParticipation ?? null\n\n const landSize = overviewData?.landSizeSqm ?? null\n const buildingSize = overviewData?.buildingSizeSqm ?? null\n const propertyType = propertyTypeLabel ?? overviewData?.propertyType ?? \"N/A\"\n const yearBuilt = overviewData?.yearBuilt ?? null\n const ownership = overviewData?.ownership ?? \"N/A\"\n const zoning = overviewData?.zoning ?? \"N/A\"\n const levels = overviewData?.levels ?? null\n const daStatus = overviewData?.daStatus ?? \"N/A\"\n\n const unitPrice = tokensIssued && offeringValuation ? offeringValuation / tokensIssued : null\n const formattedPropertyType = propertyType !== 'N/A'\n ? propertyType.charAt(0).toUpperCase() + propertyType.slice(1).toLowerCase()\n : 'N/A'\n\n return (\n <>\n <TwoColGrid>\n <Section>\n <SectionHeading>About This Property</SectionHeading>\n <BodyText>\n {description === \"N/A\" ? (\n description\n ) : (\n description.split('\\n\\n').map((paragraph: string, i: number) => (\n <span key={i}>\n {paragraph}\n {i < description.split('\\n\\n').length - 1 && <><br /><br /></>}\n </span>\n ))\n )}\n </BodyText>\n </Section>\n\n <Section>\n <SectionHeading>The Offering</SectionHeading>\n <OfferingGrid>\n {[\n { label: 'Units Issued', value: tokensIssued?.toLocaleString() ?? '-', gold: false },\n { label: 'Issue Price', value: unitPrice ? `$${unitPrice.toFixed(2)} / Unit` : '-', gold: true },\n { label: 'Implied Value', value: offeringValuation ? `$${offeringValuation.toLocaleString()}` : '-', gold: false },\n { label: 'Minimum Participation', value: minParticipationValue != null ? `$${minParticipationValue.toLocaleString()}` : '-', gold: false },\n { label: 'Est. Cash Flow', value: weeklyRent ? `$${weeklyRent.toLocaleString()}/wk` : '-', gold: true },\n { label: 'Indicative Listing Date', value: indicativeListing, gold: false },\n ].map(({ label, value, gold }) => (\n <OfferingItem key={label}>\n <OfferingLabel>{label}</OfferingLabel>\n <OfferingValue $gold={gold}>{value}</OfferingValue>\n </OfferingItem>\n ))}\n </OfferingGrid>\n </Section>\n </TwoColGrid>\n\n <Section>\n <AssetDetailsHeader>\n <GoldBar />\n <AssetDetailsTitle>Asset Details</AssetDetailsTitle>\n </AssetDetailsHeader>\n\n <StatGrid>\n {[\n { label: 'Bedrooms', value: bedrooms != null ? bedrooms.toString() : '-', icon: '🛏️' },\n { label: 'Bathrooms', value: bathrooms != null ? bathrooms.toString() : '-', icon: '🚿' },\n { type: 'dual' as const, label1: 'Land', value1: landSize?.toString() ?? '-', label2: 'Floor', value2: buildingSize?.toString() ?? '-', unit: 'sqm', highlight: true },\n { label: 'Car Spaces', value: carSpaces != null ? carSpaces.toString() : '-', icon: '🚗' }\n ].map((stat, i) => (\n <StatCard key={i} $highlight={!!stat.highlight}>\n {stat.type === 'dual' ? (\n <DualStatInner>\n <DualStatCol>\n <StatLabel $gold>{stat.label1}</StatLabel>\n <StatValueRow>\n <StatBigValue $gold>{stat.value1}</StatBigValue>\n <StatUnit $gold>{stat.unit}</StatUnit>\n </StatValueRow>\n </DualStatCol>\n <DualDivider />\n <DualStatCol>\n <StatLabel $gold>{stat.label2}</StatLabel>\n <StatValueRow>\n <StatBigValue $gold>{stat.value2}</StatBigValue>\n <StatUnit $gold>{stat.unit}</StatUnit>\n </StatValueRow>\n </DualStatCol>\n </DualStatInner>\n ) : (\n <>\n <StatLabel $gold={!!stat.highlight}>{stat.label}</StatLabel>\n <StatBigValue $gold={!!stat.highlight}>{stat.value}</StatBigValue>\n </>\n )}\n </StatCard>\n ))}\n </StatGrid>\n\n <DetailTable>\n <DetailTableGrid>\n {[\n { label: 'Last Sale', value: '-' },\n { label: 'Suburb Median', value: '-' },\n { label: 'Replication Cost of Architecture', value: '-' },\n { label: 'DA Status', value: daStatus, status: daStatus.toLowerCase() === 'approved' ? 'success' : 'progress' },\n { label: 'Property Type', value: formattedPropertyType },\n { label: 'Ownership', value: ownership ?? 'N/A' },\n { label: 'Zoning', value: zoning ?? 'N/A' },\n { label: 'Levels', value: levels?.toString() ?? 'N/A' }\n ].map((item, i) => (\n <DetailCell key={i} $borderBottom={i < 4} $borderRight={(i + 1) % 4 !== 0}>\n <DetailCellLabel>{item.label}</DetailCellLabel>\n <DetailCellValue $status={item.status}>\n {(item.status === 'success' || item.status === 'progress') && (\n <StatusDot $status={item.status} />\n )}\n {item.value}\n </DetailCellValue>\n </DetailCell>\n ))}\n </DetailTableGrid>\n </DetailTable>\n </Section>\n </>\n )\n}\n\nconst TwoColGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n margin-bottom: 2rem;\n\n @media (max-width: 768px) {\n grid-template-columns: 1fr;\n }\n`\n\nconst Section = styled.section`\n background: var(--color-card, rgba(30, 35, 41, 0.8));\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionHeading = styled.h2`\n font-size: 0.9rem;\n font-weight: 600;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n`\n\nconst BodyText = styled.p`\n color: var(--color-text);\n line-height: 1.7;\n font-size: 1rem;\n`\n\nconst OfferingGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n gap: 1.5rem;\n`\n\nconst OfferingItem = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst OfferingLabel = styled.span`\n color: var(--color-text-secondary);\n font-size: 0.75rem;\n margin-bottom: 0.25rem;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n`\n\nconst OfferingValue = styled.span<{ $gold: boolean }>`\n font-weight: 600;\n font-size: 1.125rem;\n color: ${({ $gold }) => ($gold ? 'var(--color-accent, #f0b90b)' : 'var(--color-text)')};\n`\n\nconst AssetDetailsHeader = styled.div`\n display: flex;\n align-items: center;\n gap: 1rem;\n margin-bottom: 2rem;\n`\n\nconst GoldBar = styled.div`\n width: 4px;\n height: 1.75rem;\n border-radius: 2px;\n background: linear-gradient(180deg, #D4AF37 0%, #B8860B 100%);\n`\n\nconst AssetDetailsTitle = styled.h2`\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--color-text);\n`\n\nconst StatGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 1rem;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n }\n`\n\nconst StatCard = styled.div<{ $highlight: boolean }>`\n border-radius: 1rem;\n padding: 1.25rem;\n border: 1px solid ${({ $highlight }) => ($highlight ? 'rgba(212,175,55,0.3)' : 'rgba(255,255,255,0.06)')};\n background: ${({ $highlight }) =>\n $highlight\n ? 'linear-gradient(135deg, rgba(212,175,55,0.15) 0%, rgba(184,134,11,0.08) 100%)'\n : 'linear-gradient(135deg, rgba(255,255,255,0.04) 0%, rgba(255,255,255,0.02) 100%)'};\n transition: all 0.3s;\n cursor: default;\n`\n\nconst DualStatInner = styled.div`\n display: flex;\n gap: 1rem;\n`\n\nconst DualStatCol = styled.div`\n flex: 1;\n`\n\nconst DualDivider = styled.div`\n width: 1px;\n background: rgba(212, 175, 55, 0.3);\n`\n\nconst StatLabel = styled.div<{ $gold?: boolean }>`\n font-size: 0.7rem;\n color: ${({ $gold }) => ($gold ? '#D4AF37' : 'var(--color-text-secondary)')};\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-bottom: 0.5rem;\n font-weight: 500;\n`\n\nconst StatValueRow = styled.div`\n display: flex;\n align-items: baseline;\n gap: 0.25rem;\n`\n\nconst StatBigValue = styled.span<{ $gold?: boolean }>`\n font-size: ${({ $gold }) => ($gold ? '1.75rem' : '2rem')};\n font-weight: 700;\n color: ${({ $gold }) => ($gold ? '#D4AF37' : 'var(--color-text)')};\n line-height: 1;\n`\n\nconst StatUnit = styled.span<{ $gold?: boolean }>`\n font-size: 0.75rem;\n color: ${({ $gold }) => ($gold ? 'rgba(212,175,55,0.7)' : 'var(--color-text-secondary)')};\n font-weight: 500;\n`\n\nconst DetailTable = styled.div`\n border-radius: 1rem;\n padding: 1.5rem;\n border: 1px solid rgba(255, 255, 255, 0.06);\n background: linear-gradient(135deg, rgba(255,255,255,0.03) 0%, rgba(255,255,255,0.01) 100%);\n`\n\nconst DetailTableGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n }\n`\n\nconst DetailCell = styled.div<{ $borderBottom: boolean; $borderRight: boolean }>`\n padding: 1rem 1.25rem;\n border-bottom: ${({ $borderBottom }) => ($borderBottom ? '1px solid rgba(255,255,255,0.06)' : 'none')};\n border-right: ${({ $borderRight }) => ($borderRight ? '1px solid rgba(255,255,255,0.06)' : 'none')};\n`\n\nconst DetailCellLabel = styled.div`\n font-size: 0.65rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-bottom: 0.5rem;\n font-weight: 500;\n`\n\nconst DetailCellValue = styled.div<{ $status?: string }>`\n font-size: 1rem;\n font-weight: 600;\n color: ${({ $status }) =>\n $status === 'success' ? '#10B981' : $status === 'progress' ? '#D4AF37' : 'var(--color-text)'};\n display: flex;\n align-items: center;\n`\n\nconst StatusDot = styled.span<{ $status: string }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 0.5rem;\n background: ${({ $status }) => ($status === 'success' ? '#10B981' : '#D4AF37')};\n box-shadow: ${({ $status }) =>\n $status === 'success' ? '0 0 8px rgba(16,185,129,0.5)' : '0 0 8px rgba(212,175,55,0.5)'};\n`\n","import styled from 'styled-components'\n\nexport type OfferStatus = 'active' | 'rejected' | 'expired' | 'historical' | 'pending'\n\nconst STATUS_BG: Record<OfferStatus, string> = {\n active: 'rgba(14,203,129,0.18)',\n rejected: 'rgba(246,70,93,0.18)',\n pending: 'rgba(242,201,76,0.2)',\n historical: 'rgba(56,97,251,0.18)',\n expired: 'rgba(255,255,255,0.12)',\n}\nconst STATUS_COLOR: Record<OfferStatus, string> = {\n active: '#0ecb81',\n rejected: '#f6465d',\n pending: '#f2c94c',\n historical: '#3861fb',\n expired: 'rgba(255,255,255,0.7)',\n}\n\nexport type PropertyOffer = {\n id: number\n price: string\n buyer: string\n date: string\n expiry: string\n status: OfferStatus\n conditions: string\n}\n\nexport type PropertyOffersProps = {\n offers: PropertyOffer[]\n}\n\nexport function PropertyOffers({ offers }: PropertyOffersProps) {\n return (\n <section className=\"bg-[rgba(30,32,38,0.95)] rounded-md p-7 border border-white/[0.08]\">\n <header className=\"flex justify-between items-center gap-4 flex-wrap\">\n <h2 className=\"m-0 text-xl font-semibold\">Active &amp; Historical Buyout Offers</h2>\n <div className=\"flex gap-3 flex-wrap\">\n <button\n onClick={() => alert('Coming soon...')}\n className=\"rounded-md px-6 py-[0.65rem] font-semibold text-[0.9rem] cursor-pointer transition-all duration-200 bg-[var(--color-accent,#f0b90b)] border-none text-black hover:bg-[var(--color-accent-hover,#f8d12f)] hover:-translate-y-px\"\n >Make Offer</button>\n <button\n onClick={() => alert('Coming soon...')}\n className=\"rounded-md px-6 py-[0.65rem] font-semibold text-[0.9rem] cursor-pointer transition-all duration-200 bg-transparent border border-[var(--color-accent,#f0b90b)] text-[var(--color-accent,#f0b90b)] hover:bg-[rgba(240,185,11,0.12)] hover:-translate-y-px\"\n >Enquire</button>\n </div>\n </header>\n\n <div className=\"flex flex-col gap-4 mt-6\">\n {offers.map((offer) => (\n <div\n key={offer.id}\n className=\"flex justify-between items-center gap-4 p-5 rounded-md bg-white/[0.03] border border-white/[0.06] flex-wrap transition-all duration-200 hover:border-white/[0.12] hover:bg-white/[0.05]\"\n >\n <div className=\"flex-1 min-w-[240px]\">\n <div className=\"font-semibold text-[1.15rem] inline-flex items-center gap-2\">\n {offer.price}\n {(offer.price === '$17,000,000' || offer.price === '$15,500,000') && (\n <OfferPricePulse $variant={offer.price === '$17,000,000' ? 'positive' : 'alert'} />\n )}\n </div>\n <div className=\"text-[0.85rem] text-white/65 mt-[0.3rem]\">\n by {offer.buyer} • {offer.date} • Expires: {offer.expiry}\n </div>\n <div className=\"text-[0.82rem] mt-[0.45rem] text-white/75\">{offer.conditions}</div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"px-[0.85rem] py-[0.4rem] rounded-md text-[0.78rem] font-semibold uppercase tracking-[0.08em]\"\n style={{ background: STATUS_BG[offer.status], color: STATUS_COLOR[offer.status] }}\n >{offer.status}</span>\n {offer.status === 'active' && (\n <button\n onClick={() => alert(`Voted for offer: ${offer.price} by ${offer.buyer}`)}\n className=\"bg-[var(--color-accent,#f0b90b)] text-black border-none rounded-md px-5 py-[0.45rem] font-semibold text-[0.78rem] uppercase cursor-pointer transition-all duration-200 hover:bg-[var(--color-accent-hover,#f8d12f)] hover:-translate-y-px\"\n >Vote</button>\n )}\n </div>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\nconst OfferPricePulse = styled.span<{ $variant: 'positive' | 'alert' }>`\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: ${({ $variant }) => ($variant === 'positive' ? '#4caf50' : '#f6465d')};\n box-shadow: 0 0 6px\n ${({ $variant }) => ($variant === 'positive' ? 'rgba(76, 175, 80, 0.7)' : 'rgba(246, 70, 93, 0.7)')};\n`\n\n","import { useMemo, useState } from 'react'\nimport styled, { css } from 'styled-components'\nimport { BiChevronDown, BiChevronUp } from 'react-icons/bi'\n\n// styled-components kept for: FilterButton ($active), HistoryContainer (::before), HistoryPanel (::before/::after + $isLoafListing), LeaseSection (::before), HistoryRow ($isOwnershipStart), TypeBadge (dynamic colors)\n\nconst eventTypes = ['Leased', 'Renovated', 'Extended', 'Rebuilt', 'Rezoned', 'DA Approval'] as const\n\ntype HistoryFilter = 'all' | 'sales' | 'events' | 'loaf' | 'lease'\n\ntype PastSale = {\n id: string\n type: (typeof eventTypes)[number] | 'Listed' | 'Sale' | string\n saleType?: string\n date: string\n price: string\n buyer: string\n seller: string\n agent: string\n ownershipPeriod: string\n sortOrder: number\n isOwnershipStart?: boolean\n isOwnershipEnd?: boolean\n percentGain?: number\n leaseTerm?: string\n weeklyRate?: string\n description?: string\n}\n\nexport function PropertyHistory() {\n const [historyFilter, setHistoryFilter] = useState<HistoryFilter>('all')\n\n const pastSales = useMemo(() => generateMockPastSales(), [])\n\n const loafListing = pastSales.find((sale) => sale.type === 'Listed')\n const loafEvents = pastSales.filter(\n (sale) =>\n sale.ownershipPeriod === 'current' &&\n sale.type !== 'Listed' &&\n (sale.id === 'leased-current' || sale.id === 'da-approval'),\n )\n\n return (\n <PastSalesSection>\n <div className=\"flex justify-between items-center mb-4 gap-4 flex-wrap\">\n <h2>Property History</h2>\n <FilterButtonsContainer>\n <FilterButton type=\"button\" $active={historyFilter === 'all'} onClick={() => setHistoryFilter('all')}>\n All\n </FilterButton>\n <FilterButton\n type=\"button\"\n $active={historyFilter === 'sales'}\n onClick={() => setHistoryFilter('sales')}\n >\n Sales\n </FilterButton>\n <FilterButton\n type=\"button\"\n $active={historyFilter === 'events'}\n onClick={() => setHistoryFilter('events')}\n >\n Events\n </FilterButton>\n <FilterButton\n type=\"button\"\n $active={historyFilter === 'loaf'}\n onClick={() => setHistoryFilter('loaf')}\n >\n Listed\n </FilterButton>\n </FilterButtonsContainer>\n </div>\n\n <HistoryContainer>\n <table className=\"w-full border-collapse mb-2\">\n <thead>\n <tr>\n <th className=\"text-left px-4 py-3 text-white/70 font-medium text-[0.9rem] border-b border-white/10 w-[20%]\">Type</th>\n <th className=\"text-left px-4 py-3 text-white/70 font-medium text-[0.9rem] border-b border-white/10 w-[30%]\">Sale Type</th>\n <th className=\"text-left px-4 py-3 text-white/70 font-medium text-[0.9rem] border-b border-white/10 w-[50%]\">Agent</th>\n </tr>\n </thead>\n </table>\n\n {(() => {\n if (!loafListing || (historyFilter !== 'all' && historyFilter !== 'loaf')) {\n return null\n }\n\n return (\n <HistoryPanel key={loafListing.id} $isLoafListing>\n <div className=\"bg-[rgba(30,32,38,0.7)] border-b border-[rgba(240,185,11,0.15)] px-4 py-3 flex justify-between items-center\">\n <div className=\"font-semibold text-[var(--color-accent)] flex items-center text-xl tracking-[0.5px]\">\n {loafListing.price.includes('18,750,000') ? '18.75M' : loafListing.price}\n <span className=\"text-[0.9rem] font-normal ml-3 opacity-80\">\n {loafListing.date.replace(/\\d+,\\s|\\s\\d+$/, '')}\n </span>\n </div>\n </div>\n\n <SalesTable>\n <tbody>\n <HistoryRow $isOwnershipStart>\n <td>\n <TypeBadge $type={loafListing.type}>\n {loafListing.type === 'Sale' ? 'Sold' : loafListing.type}\n </TypeBadge>\n </td>\n <td>{loafListing.saleType ?? '-'}</td>\n <td>{loafListing.agent}</td>\n </HistoryRow>\n </tbody>\n </SalesTable>\n\n {loafEvents.length > 0 && (\n <LeaseSection>\n <div className=\"h-1 w-10 bg-white/15 mb-3 rounded-sm\" />\n <div className=\"py-2\">\n {loafEvents.map((event) => (\n <div key={event.id} className=\"mb-2\">\n <EventDetails event={event} />\n </div>\n ))}\n </div>\n </LeaseSection>\n )}\n </HistoryPanel>\n )\n })()}\n\n {(() => {\n const filteredSales = pastSales.filter((sale) => {\n if (sale.type === 'Listed') return false\n if (historyFilter === 'all') return true\n if (historyFilter === 'sales') return sale.type === 'Sale'\n if (historyFilter === 'lease') return sale.type === 'Lease'\n if (historyFilter === 'loaf') return false\n return true\n })\n\n filteredSales.sort((a, b) => {\n const dateA = new Date(a.date)\n const dateB = new Date(b.date)\n return dateB.getTime() - dateA.getTime()\n })\n\n const groupedByPeriod: Record<string, PastSale[]> = {}\n filteredSales.forEach((sale) => {\n if (!groupedByPeriod[sale.ownershipPeriod]) {\n groupedByPeriod[sale.ownershipPeriod] = []\n }\n groupedByPeriod[sale.ownershipPeriod].push(sale)\n })\n\n const sortedPeriods = Object.keys(groupedByPeriod).sort((a, b) => {\n const aDates = groupedByPeriod[a].map((s) => new Date(s.date).getTime())\n const bDates = groupedByPeriod[b].map((s) => new Date(s.date).getTime())\n const aLatest = Math.max(...aDates)\n const bLatest = Math.max(...bDates)\n return bLatest - aLatest\n })\n\n return sortedPeriods.map((period) => {\n const periodSales = groupedByPeriod[period]\n const ownershipSale = periodSales.find((s) => s.isOwnershipStart)\n\n if (historyFilter === 'sales' && !ownershipSale && !periodSales.some((s) => s.type === 'Sale')) {\n return null\n }\n if (\n historyFilter === 'events' &&\n !periodSales.some((s) => ['Leased', 'Renovated', 'Extended', 'Rebuilt', 'Rezoned'].includes(s.type))\n ) {\n return null\n }\n if (historyFilter === 'loaf' && !periodSales.some((s) => s.type === 'Listed')) {\n return null\n }\n\n const events = periodSales.filter(\n (sale) =>\n eventTypes.includes(sale.type as (typeof eventTypes)[number]) &&\n sale.id !== 'leased-current' &&\n sale.id !== 'da-approval' &&\n (period !== 'current' || sale.type !== 'Leased'),\n )\n\n const otherSales = periodSales.filter((sale) => sale.type === 'Sale' && !sale.isOwnershipStart)\n\n events.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())\n otherSales.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())\n\n return (\n <HistoryPanel key={period}>\n {ownershipSale && (historyFilter === 'all' || historyFilter === 'sales') && (\n <div className=\"bg-[rgba(30,32,38,0.7)] border-b border-[rgba(240,185,11,0.15)] px-4 py-3 flex justify-between items-center\">\n <div className=\"font-semibold text-[var(--color-accent)] flex items-center text-xl tracking-[0.5px]\">\n {ownershipSale.price.includes('18,750,000')\n ? '18.75M'\n : ownershipSale.price.includes('15,200,000')\n ? '15.20M'\n : ownershipSale.price}\n <span className=\"text-[0.9rem] font-normal ml-3 opacity-80\">\n {ownershipSale.date.replace(/\\d+,\\s|\\s\\d+$/, '')}\n </span>\n </div>\n </div>\n )}\n\n {ownershipSale && (historyFilter === 'all' || historyFilter === 'sales') && (\n <SalesTable>\n <tbody>\n <HistoryRow $isOwnershipStart>\n <td>\n <TypeBadge $type={ownershipSale.type}>\n {ownershipSale.type === 'Sale' ? 'Sold' : ownershipSale.type}\n </TypeBadge>\n </td>\n <td>{ownershipSale.saleType ?? '-'}</td>\n <td>{ownershipSale.agent}</td>\n </HistoryRow>\n </tbody>\n </SalesTable>\n )}\n\n {events.length > 0 && (historyFilter === 'all' || historyFilter === 'events') && (\n <LeaseSection>\n <div className=\"h-1 w-10 bg-white/15 mb-3 rounded-sm\" />\n <div className=\"py-2\">\n {events.map((event) => (\n <div key={event.id} className=\"mb-2\">\n <EventDetails event={event} />\n </div>\n ))}\n </div>\n </LeaseSection>\n )}\n\n {otherSales.length > 0 && (historyFilter === 'all' || historyFilter === 'sales') && (\n <SalesTable>\n <tbody>\n {otherSales.map((sale) => (\n <HistoryRow key={sale.id}>\n <td>\n <TypeBadge $type={sale.type}>{sale.type === 'Sale' ? 'Sold' : sale.type}</TypeBadge>\n </td>\n <td>{sale.saleType ?? '-'}</td>\n <td>{sale.agent}</td>\n </HistoryRow>\n ))}\n </tbody>\n </SalesTable>\n )}\n </HistoryPanel>\n )\n })\n })()}\n </HistoryContainer>\n </PastSalesSection>\n )\n}\n\ntype EventDetailsProps = {\n event: PastSale\n}\n\nfunction EventDetails({ event }: EventDetailsProps) {\n const [expanded, setExpanded] = useState(false)\n\n const toggleExpand = () => {\n setExpanded((prev) => !prev)\n }\n\n const renderEventDetails = () => {\n switch (event.type) {\n case 'Leased':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Lease Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Lease Term:</span><span className=\"text-[0.9rem] flex-1\">{event.leaseTerm ?? '12 months'}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Weekly Rate:</span><span className=\"text-[0.9rem] flex-1\">{event.weeklyRate ?? event.price}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Tenant:</span><span className=\"text-[0.9rem] flex-1\">{event.buyer}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Agent:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <button onClick={() => alert('View lease agreement')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Lease Agreement</button>\n </>\n )\n case 'Extended':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Completion Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Construction Time:</span><span className=\"text-[0.9rem] flex-1\">6 months</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Cost:</span><span className=\"text-[0.9rem] flex-1\">{event.price}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Contractor:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <div className=\"flex items-start gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Description:</span><span className=\"text-[0.9rem] flex-1\">Extension to the eastern wing of the property, adding 120sqm of living space including a new master suite and expanded kitchen.</span></div>\n <button onClick={() => alert('View design plans')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Design Plans</button>\n </>\n )\n case 'Rebuilt':\n case 'Renovated':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Completion Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Construction Time:</span><span className=\"text-[0.9rem] flex-1\">14 months</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Cost:</span><span className=\"text-[0.9rem] flex-1\">{event.price}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Builder:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <div className=\"flex items-start gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Description:</span><span className=\"text-[0.9rem] flex-1\">Complete rebuild of the property, maintaining the heritage facade while modernizing all internal spaces and systems.</span></div>\n <button onClick={() => alert('View renovation details')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Design Plans</button>\n </>\n )\n case 'DA Approval':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Approval Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Council:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Application Fee:</span><span className=\"text-[0.9rem] flex-1\">{event.price}</span></div>\n <button onClick={() => alert('View approval documents')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Approval</button>\n </>\n )\n case 'Rezoned':\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Rezoning Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">New Zoning:</span><span className=\"text-[0.9rem] flex-1\">R4 High Density Residential</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Authority:</span><span className=\"text-[0.9rem] flex-1\">{event.agent}</span></div>\n <button onClick={() => alert('View zoning documents')} className=\"bg-[rgba(0,114,229,0.1)] text-[var(--color-primary)] border border-[var(--color-primary)] rounded px-[0.8rem] py-[0.3rem] text-[0.8rem] cursor-pointer transition-all duration-200 hover:bg-[var(--color-primary)] hover:text-white\">View Zoning Documents</button>\n </>\n )\n default:\n return (\n <>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Date:</span><span className=\"text-[0.9rem] flex-1\">{event.date}</span></div>\n <div className=\"flex items-center gap-4\"><span className=\"text-[0.85rem] text-[var(--color-text-secondary)] w-[120px] shrink-0\">Details:</span><span className=\"text-[0.9rem] flex-1\">{event.saleType ?? ''}</span></div>\n </>\n )\n }\n }\n\n return (\n <div>\n <div\n className=\"flex justify-between items-center p-2 cursor-pointer rounded transition-colors duration-200 hover:bg-white/[0.05]\"\n onClick={toggleExpand}\n >\n <div className=\"flex justify-between items-center flex-1 gap-4\">\n <div className=\"flex items-center\">\n <TypeBadge $type={event.type}>{event.type === 'Sale' ? 'Sold' : event.type}</TypeBadge>\n <span className=\"ml-2\">{event.date}</span>\n </div>\n </div>\n <div className=\"flex items-center justify-center text-[var(--color-text-secondary)] w-6 h-6 rounded-full transition-colors duration-200 hover:bg-white/10\">\n {expanded ? <BiChevronUp size={20} /> : <BiChevronDown size={20} />}\n </div>\n </div>\n {expanded && (\n <div className=\"flex flex-col gap-2 py-2\">\n {renderEventDetails()}\n </div>\n )}\n </div>\n )\n}\n\nfunction generateMockPastSales(): PastSale[] {\n return [\n {\n id: 'loaf-listing',\n type: 'Listed',\n saleType: 'Loaf Auction',\n date: 'January 15, 2025',\n price: '$14,000,000',\n buyer: '-',\n seller: 'Current Owner',\n agent: 'Loaf Platform',\n ownershipPeriod: 'current',\n sortOrder: 1,\n },\n {\n id: 'da-approval',\n type: 'DA Approval',\n saleType: 'Planning Change',\n date: 'February 5, 2025',\n price: '$500,000',\n buyer: '-',\n seller: 'Current Owner',\n agent: 'City Planning Consultants',\n ownershipPeriod: 'current',\n sortOrder: 2,\n description: 'Extension from 4 to 6 bathrooms, installation of elevator and rooftop terrace',\n },\n {\n id: 'leased-current',\n type: 'Leased',\n saleType: 'Rental',\n date: 'February 10, 2025',\n price: '$4,500/week',\n buyer: 'Executive Tenants Ltd',\n seller: 'Current Owner',\n agent: 'Sydney Luxury Rentals',\n ownershipPeriod: 'current',\n sortOrder: 3,\n leaseTerm: '12 months',\n weeklyRate: '$4,500',\n },\n {\n id: 'leased-2',\n type: 'Leased',\n saleType: 'Rental',\n date: 'March 5, 2022',\n price: '$4,000/week',\n buyer: 'Premium Tenants LLC',\n seller: 'Current Owner',\n agent: 'Sydney Prestige Real Estate',\n ownershipPeriod: 'period-1',\n sortOrder: 10,\n leaseTerm: '24 months',\n weeklyRate: '$4,000',\n },\n {\n id: 'leased-1',\n type: 'Leased',\n saleType: 'Rental',\n date: 'November 15, 2020',\n price: '$4,000/week',\n buyer: 'Executive Rentals LLC',\n seller: 'Current Owner',\n agent: 'Sydney Prestige Real Estate',\n ownershipPeriod: 'period-1',\n sortOrder: 15,\n leaseTerm: '24 months',\n weeklyRate: '$4,000',\n },\n {\n id: 'ownership-1',\n type: 'Sale',\n saleType: 'Private Sale',\n date: 'October 20, 2020',\n price: '$8,000,000',\n buyer: 'Current Owner',\n seller: 'Previous Owner',\n agent: 'Ray White Double Bay',\n ownershipPeriod: 'period-1',\n isOwnershipStart: true,\n isOwnershipEnd: false,\n sortOrder: 100,\n percentGain: 166.7,\n },\n {\n id: 'rebuilt-1',\n type: 'Rebuilt',\n saleType: 'Major Renovation',\n date: 'December 10, 2010',\n price: '$1,200,000',\n buyer: '-',\n seller: 'Previous Owner',\n agent: 'Premium Builders',\n ownershipPeriod: 'period-2',\n sortOrder: 8,\n },\n {\n id: 'ownership-2',\n type: 'Sale',\n saleType: 'Auction',\n date: 'March 5, 2010',\n price: '$3,000,000',\n buyer: 'Previous Owner',\n seller: 'Original Developer',\n agent: 'LJ Hooker Double Bay',\n ownershipPeriod: 'period-2',\n isOwnershipStart: true,\n isOwnershipEnd: true,\n sortOrder: 100,\n },\n ]\n}\n\nconst FilterButtonsContainer = styled.div`\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n\n @media (max-width: 768px) {\n gap: 0.25rem;\n }\n`\n\nconst FilterButton = styled.button<{ $active: boolean }>`\n background-color: ${(props) => (props.$active ? 'var(--color-accent, #f0b90b)' : 'transparent')};\n color: ${(props) => (props.$active ? '#000' : '#fff')};\n border: 1px solid var(--color-accent, #f0b90b);\n border-radius: 4px;\n padding: 0.4rem 0.8rem;\n font-size: 0.9rem;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background-color: ${(props) =>\n props.$active ? 'var(--color-accent, #f0b90b)' : 'rgba(240, 185, 11, 0.1)'};\n }\n\n @media (max-width: 768px) {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n }\n`\n\nconst HistoryContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 1rem;\n width: 1px;\n background-color: rgba(240, 185, 11, 0.15);\n z-index: 0;\n }\n`\n\nconst HistoryPanel = styled.div<{ $isLoafListing?: boolean }>`\n margin-bottom: 1.5rem;\n margin-left: 2rem;\n border: 1px solid rgba(240, 185, 11, 0.15);\n border-radius: 8px;\n background-color: rgba(30, 32, 38, 0.3);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n top: 50%;\n left: -2rem;\n width: 1.5rem;\n height: 2px;\n background-color: rgba(240, 185, 11, 0.3);\n }\n\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: -2rem;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: rgba(240, 185, 11, 0.8);\n transform: translateY(-50%);\n box-shadow: 0 0 0 4px rgba(30, 32, 38, 0.6);\n }\n\n ${({ $isLoafListing }) =>\n $isLoafListing &&\n css`\n background-color: rgba(30, 32, 38, 0.1);\n border-color: rgba(240, 185, 11, 0.05);\n\n &::after {\n background-color: rgba(240, 185, 11, 0.4);\n }\n `}\n`\n\nconst LeaseSection = styled.div`\n margin: 0.3rem 1rem;\n padding: 0.3rem 1rem 0.3rem;\n background-color: rgba(30, 32, 38, 0.2);\n border-radius: 6px;\n border-left: 2px solid rgba(255, 255, 255, 0.15);\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n top: -0.3rem;\n left: 1rem;\n width: 1px;\n height: 0.3rem;\n background-color: rgba(255, 255, 255, 0.15);\n }\n`\n\n\nconst HistoryRow = styled.tr<{ $isOwnershipStart?: boolean }>`\n background-color: ${(props) => (props.$isOwnershipStart ? 'rgba(240, 185, 11, 0.05)' : 'transparent')};\n\n td {\n padding: 0.75rem 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n font-size: 0.9rem;\n }\n\n &:last-child td {\n border-bottom: none;\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.08);\n }\n`\n\nconst TypeBadge = styled.span<{ $type?: string }>`\n display: inline-block;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n font-size: 0.75rem;\n font-weight: ${(props) => (props.$type === 'Listed' ? '600' : '500')};\n background-color: ${(props) => {\n switch (props.$type) {\n case 'Listed':\n return 'var(--color-accent, #f0b90b)'\n case 'Sale':\n return 'rgba(14, 203, 129, 0.15)'\n case 'Leased':\n return 'rgba(79, 117, 235, 0.15)'\n case 'Renovated':\n case 'Extended':\n case 'Rebuilt':\n return 'rgba(255, 152, 0, 0.15)'\n case 'Rezoned':\n case 'DA Approval':\n return 'rgba(33, 150, 243, 0.15)'\n default:\n return 'rgba(240, 185, 11, 0.15)'\n }\n }};\n color: ${(props) => {\n switch (props.$type) {\n case 'Listed':\n return '#000'\n case 'Sale':\n return '#0ecb81'\n case 'Leased':\n return '#4f75eb'\n case 'Renovated':\n case 'Extended':\n case 'Rebuilt':\n return '#ff9800'\n case 'Rezoned':\n case 'DA Approval':\n return '#2196f3'\n default:\n return 'var(--color-accent)'\n }\n }};\n\n @media (max-width: 768px) {\n padding: 0.15rem 0.3rem;\n font-size: 0.65rem;\n }\n`\n\nconst PastSalesSection = styled.div`\n background-color: rgba(30, 32, 38, 0.95);\n border-radius: 8px;\n padding: 1.25rem;\n margin-bottom: 1.5rem;\n`\n\nconst SalesTable = styled.table`\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n\n td {\n padding: 0.75rem 1rem;\n color: #fff;\n font-size: 0.9rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n\n td:nth-child(1),\n th:nth-child(1) {\n width: 20%;\n }\n td:nth-child(2),\n th:nth-child(2) {\n width: 30%;\n }\n td:nth-child(3),\n th:nth-child(3) {\n width: 50%;\n }\n\n @media (max-width: 768px) {\n td {\n padding: 0.5rem 0.5rem;\n font-size: 0.75rem;\n }\n }\n\n tr:hover {\n background-color: rgba(255, 255, 255, 0.03);\n }\n`\n","import styled from 'styled-components'\nexport interface DocumentItem {\n readonly title: string;\n readonly documentUrl: string;\n}\n\nexport interface DocumentsResponse {\n readonly documents: readonly DocumentItem[];\n}\n\nconst DocIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n)\n\nconst fallbackDocs = [\n { href: '/documents/musgrave-valuation-report.pdf', label: 'Valuation Report' },\n { href: '/documents/musgrave-offering-material.pdf', label: 'Offering Material' },\n { href: '/documents/musgrave-mortgage-agreement.pdf', label: 'Mortgage Agreement' },\n { href: '/documents/musgrave-investment-memo.pdf', label: 'Investment Memo' },\n { href: '/documents/musgrave-term-sheet.pdf', label: 'Investment Term Sheet' },\n { href: '/documents/musgrave-risk-disclosure.pdf', label: 'Risk Disclosure Statement' },\n { href: '/documents/musgrave-building-inspection.pdf', label: 'Building & Pest Inspection Report' },\n]\n\nexport type PropertyDocumentsProps = {\n documentsData?: DocumentsResponse | null\n}\n\nexport function PropertyDocuments({ documentsData }: PropertyDocumentsProps) {\n const backendDocuments = Array.isArray(documentsData?.documents) ? documentsData!.documents : null\n const hasBackendDocuments = !!backendDocuments?.length\n\n // Use backend data only when documents exist; otherwise fall back to disabled placeholders\n const documents = hasBackendDocuments\n ? backendDocuments\n : fallbackDocs.map((doc) => ({\n title: doc.label,\n documentUrl: doc.href,\n }))\n\n return (\n <Section>\n <SectionHeading>Investment Documents</SectionHeading>\n <DocList>\n {documents.map(({ documentUrl, title }: { documentUrl: string; title: string }) => {\n const isAvailable = Boolean(documentUrl)\n return (\n <DocItem key={`${title}-${documentUrl ?? 'pending'}`}>\n {hasBackendDocuments && isAvailable ? (\n <DocLink href={documentUrl!} target=\"_blank\" rel=\"noopener noreferrer\">\n <DocIconWrapper>\n <DocIcon />\n </DocIconWrapper>\n {title}\n </DocLink>\n ) : (\n <DocItemDisabled>\n <DocIconWrapper>\n <DocIcon />\n </DocIconWrapper>\n {title}\n <ComingSoonBadge>Coming Soon</ComingSoonBadge>\n </DocItemDisabled>\n )}\n </DocItem>\n )\n })}\n </DocList>\n </Section>\n )\n}\n\nconst Section = styled.section`\n background: var(--color-card, rgba(30, 35, 41, 0.8));\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionHeading = styled.h2`\n font-size: 0.9rem;\n font-weight: 600;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n`\n\nconst DocList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`\n\nconst DocItem = styled.li`\n padding: 0.75rem 0;\n border-bottom: 1px solid var(--color-border, rgba(255, 255, 255, 0.1));\n\n &:last-child {\n border-bottom: none;\n }\n`\n\nconst DocLink = styled.a`\n display: flex;\n align-items: center;\n color: var(--color-text);\n text-decoration: none;\n transition: color 0.2s;\n\n &:hover {\n color: var(--color-accent);\n }\n`\n\nconst DocItemDisabled = styled.div`\n display: flex;\n align-items: center;\n color: var(--color-text-secondary);\n cursor: not-allowed;\n opacity: 0.6;\n`\n\nconst DocIconWrapper = styled.span`\n margin-right: 0.75rem;\n flex-shrink: 0;\n color: var(--color-text-secondary);\n`\n\nconst ComingSoonBadge = styled.span`\n margin-left: auto;\n padding: 0.25rem 0.5rem;\n background: rgba(212, 175, 55, 0.1);\n color: #D4AF37;\n border-radius: 0.25rem;\n font-size: 0.7rem;\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n`\n","import styled from 'styled-components'\n\nexport type InspectionSlot = {\n slotId: string\n label: string\n date: string\n startTime: string\n endTime: string\n totalCapacity: number\n spotsRemaining: number\n}\n\ntype PropertyInspectionTimesProps = {\n isAuthenticated: boolean\n slots: InspectionSlot[]\n loading?: boolean\n error?: string | null\n bookingSlotId?: string | null\n bookingStatus?: string | null\n bookingError?: string | null\n onBook: (slot: InspectionSlot) => void\n onRetry?: () => void\n onSignIn?: () => void\n}\n\nconst formatIsoDate = (value: string) => {\n const parsed = new Date(value)\n if (Number.isNaN(parsed.getTime())) return value\n return parsed.toLocaleDateString(undefined, { weekday: 'long', day: 'numeric', month: 'short', year: 'numeric' })\n}\n\nconst formatIsoTime = (value: string) => {\n const parsed = new Date(value)\n if (Number.isNaN(parsed.getTime())) return value\n return parsed.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' })\n}\n\nexport function PropertyInspectionTimes({\n isAuthenticated,\n slots,\n loading = false,\n error = null,\n bookingSlotId = null,\n bookingStatus = null,\n bookingError = null,\n onBook,\n onRetry,\n onSignIn,\n}: PropertyInspectionTimesProps) {\n return (\n <Section>\n <SectionHeading>Inspection Times</SectionHeading>\n <Intro>Book a private inspection of the property. Walk through the home in person before investing.</Intro>\n {isAuthenticated ? (\n <SlotList>\n {loading && <StatusMessage>Loading inspection times…</StatusMessage>}\n {error && (\n <StatusMessage $error>\n {error}{' '}\n {onRetry && (\n <RetryButton type=\"button\" onClick={onRetry}>Retry</RetryButton>\n )}\n </StatusMessage>\n )}\n {!loading && !error && slots.length === 0 && (\n <StatusMessage>No inspection slots are currently available. Please check back later.</StatusMessage>\n )}\n {slots.map((slot) => (\n <SlotRow key={slot.slotId}>\n <SlotInfo>\n <SlotDate>{formatIsoDate(slot.label || slot.date)}</SlotDate>\n <SlotTime>{formatIsoTime(slot.startTime)} - {formatIsoTime(slot.endTime)}</SlotTime>\n </SlotInfo>\n <SlotActions>\n <SpotsLeft $low={slot.spotsRemaining <= 2}>\n {slot.spotsRemaining} {slot.spotsRemaining === 1 ? 'spot' : 'spots'} left\n </SpotsLeft>\n <BookButton\n disabled={slot.spotsRemaining === 0 || bookingSlotId === slot.slotId}\n onClick={() => onBook(slot)}\n >\n {bookingSlotId === slot.slotId ? 'Booking…' : 'Book'}\n </BookButton>\n </SlotActions>\n </SlotRow>\n ))}\n {bookingStatus && <StatusMessage>{bookingStatus}</StatusMessage>}\n {bookingError && <StatusMessage $error>{bookingError}</StatusMessage>}\n {slots.length > 0 && (\n <Disclaimer>All inspections are by appointment only. A confirmation email will be sent upon booking.</Disclaimer>\n )}\n </SlotList>\n ) : (\n <SignInPrompt>\n <SignInText>\n <SignInTitle>Sign in to see inspection times</SignInTitle>\n <SignInSub>View available dates and book a private walkthrough.</SignInSub>\n </SignInText>\n <SignInButton onClick={() => onSignIn?.()}>Sign In</SignInButton>\n </SignInPrompt>\n )}\n </Section>\n )\n}\n\nconst Section = styled.section`\n background: var(--color-card, rgba(30, 35, 41, 0.8));\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionHeading = styled.h2`\n font-size: 0.9rem;\n font-weight: 600;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n`\n\nconst Intro = styled.p`\n font-size: 0.9rem;\n color: var(--color-text-secondary);\n margin-bottom: 1.5rem;\n`\n\nconst SlotList = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n`\n\nconst SlotRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 8px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n`\n\nconst SlotInfo = styled.div``\n\nconst SlotDate = styled.div`\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n margin-bottom: 0.25rem;\n`\n\nconst SlotTime = styled.div`\n font-size: 0.8rem;\n color: var(--color-text-secondary);\n`\n\nconst SlotActions = styled.div`\n display: flex;\n align-items: center;\n gap: 1rem;\n`\n\nconst SpotsLeft = styled.span<{ $low: boolean }>`\n font-size: 0.75rem;\n color: ${({ $low }) => ($low ? '#f6465d' : 'var(--color-text-secondary)')};\n`\n\nconst BookButton = styled.button`\n padding: 0.4rem 1rem;\n background: transparent;\n border: 1px solid var(--color-accent, #f0b90b);\n color: var(--color-accent, #f0b90b);\n border-radius: 4px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(240, 185, 11, 0.1);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`\n\nconst StatusMessage = styled.div<{ $error?: boolean }>`\n font-size: 0.85rem;\n padding: 0.75rem 1rem;\n border-radius: 6px;\n color: ${({ $error }) => ($error ? '#f6465d' : 'var(--color-text-secondary)')};\n background: ${({ $error }) => ($error ? 'rgba(246,70,93,0.08)' : 'rgba(255,255,255,0.03)')};\n border: 1px solid ${({ $error }) => ($error ? 'rgba(246,70,93,0.2)' : 'rgba(255,255,255,0.06)')};\n`\n\nconst RetryButton = styled.button`\n margin-left: 0.5rem;\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n color: inherit;\n`\n\nconst Disclaimer = styled.p`\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n margin-top: 0.5rem;\n text-align: center;\n`\n\nconst SignInPrompt = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1.25rem 1.5rem;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 8px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n`\n\nconst SignInText = styled.div``\n\nconst SignInTitle = styled.div`\n font-size: 0.95rem;\n font-weight: 600;\n color: var(--color-text);\n margin-bottom: 0.25rem;\n`\n\nconst SignInSub = styled.div`\n font-size: 0.8rem;\n color: var(--color-text-secondary);\n`\n\nconst SignInButton = styled.button`\n padding: 0.5rem 1.25rem;\n background: transparent;\n border: 1px solid var(--color-accent, #f0b90b);\n color: var(--color-accent, #f0b90b);\n border-radius: 4px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n white-space: nowrap;\n\n &:hover {\n background: rgba(240, 185, 11, 0.1);\n }\n`\n","import type { GalleryCategory, GalleryImage, NewsItem, RecentOrder, StatusColorMap } from './types'\n\nexport const mockIPOList = [\n { id: 'musgrave', name: '8C Mcleod Street (Musgrave)', location: 'Mosman, Sydney', status: 'live' },\n { id: 'ipo-002', name: '15 Ocean View Drive', location: 'Bondi, Sydney', status: 'coming_soon' },\n { id: 'ipo-003', name: '42 Harbour Lane', location: 'Mosman, Sydney', status: 'coming_soon' },\n]\n\nexport const allNewsItems: NewsItem[] = [\n { id: 1, title: 'RBA signals potential rate cut in Q1 2026 - property stocks rally', type: 'market' },\n { id: 2, title: 'Sydney unemployment drops to 3.1% - Eastern suburbs lead recovery', type: 'market' },\n { id: 3, title: 'Musgrave heritage listing confirmed - protects architectural value', type: 'property' },\n { id: 4, title: 'Mosman Council approves DA for Musgrave restoration works', type: 'property' },\n { id: 5, title: 'Nearby 12 Mcleod St sells for $18.5M - sets new street record', type: 'market' },\n { id: 6, title: 'Eastern suburbs rental yields reach 3.8% - highest in 5 years', type: 'market' },\n { id: 7, title: 'Musgrave pool resurfacing completed - heritage sandstone preserved', type: 'property' },\n { id: 8, title: 'Mosman median house price hits $7.2M - up 9% YoY', type: 'market' },\n { id: 9, title: 'Musgrave gardens featured in Heritage NSW annual report', type: 'property' },\n { id: 10, title: 'Lower North Shore vacancy rates drop to 1.2% - rental demand surges', type: 'market' },\n { id: 11, title: 'Musgrave structural inspection complete - excellent condition confirmed', type: 'property' },\n { id: 12, title: 'Sydney harbour views premium reaches 35% - Mosman leads growth', type: 'market' },\n { id: 13, title: 'New security system installed at Musgrave - smart home integration', type: 'property' },\n { id: 14, title: 'Heritage property demand up 22% - pre-Federation homes most sought', type: 'market' },\n]\n\nexport const musgraveGalleryImages: GalleryImage[] = [\n { src: '/properties/Musgrave/ExteriorFront_Musgrave_Loafmarkets.jpg', title: 'Exterior Front', subtitle: 'Grand entrance' },\n { src: '/properties/Musgrave/ExteriorDusk_Musgrave_Loafmarkets.jpg', title: 'Exterior Dusk', subtitle: 'Evening ambiance' },\n { src: '/properties/Musgrave/LivingRoom_Musgrave_Loafmarkets.jpg', title: 'Living Room', subtitle: 'Spacious living' },\n { src: '/properties/Musgrave/Kitchen_Musgrave_Loafmarkets.jpg', title: 'Kitchen', subtitle: 'Modern design' },\n { src: '/properties/Musgrave/DiningRoom_Musgrave_Loafmarkets.jpg', title: 'Dining Room', subtitle: 'Elegant dining' },\n { src: '/properties/Musgrave/BreakfastRoom_Musgrave_Loafmarkets.jpg', title: 'Breakfast Room', subtitle: 'Morning light' },\n { src: '/properties/Musgrave/MainBedroom_Musgrave_Loafmarkets.jpg', title: 'Main Bedroom', subtitle: 'Master suite' },\n { src: '/properties/Musgrave/GuestBedroom_Musgrave_Loafmarkets.jpg', title: 'Guest Bedroom', subtitle: 'Comfortable stay' },\n { src: '/properties/Musgrave/Bathroom_Musgrave_Loafmarkets.jpg', title: 'Bathroom', subtitle: 'Luxury finishes' },\n { src: '/properties/Musgrave/PoolArea_Musgrave_Loafmarkets.jpg', title: 'Pool Area', subtitle: 'Resort living' },\n { src: '/properties/Musgrave/GardenView_Musgrave_Loafmarkets.jpg', title: 'Garden View', subtitle: 'Lush gardens' },\n { src: '/properties/Musgrave/SideGarden_Musgrave_Loafmarkets.jpg', title: 'Side Garden', subtitle: 'Private retreat' },\n { src: '/properties/Musgrave/AerialView_Musgrave_Loafmarkets.jpg', title: 'Aerial View', subtitle: 'Property overview' },\n { src: '/properties/Musgrave/AerialLocation_Musgrave_Loafmarkets.jpg', title: 'Aerial Location', subtitle: 'Neighborhood' },\n { src: '/properties/Musgrave/Floorplan_Musgrave_Loafmarkets.jpg', title: 'Floorplan', subtitle: 'Layout' },\n]\n\nexport const galleryCategories: GalleryCategory[] = [\n { name: 'Exterior', startIndex: 0 },\n { name: 'Living', startIndex: 2 },\n { name: 'Bedrooms', startIndex: 6 },\n { name: 'Outdoor', startIndex: 9 },\n { name: 'Aerial', startIndex: 12 },\n { name: 'Floorplan', startIndex: 14 },\n]\n\nexport const STATUS_COLOR: StatusColorMap = {\n 0: '#D4AF37',\n 1: '#0ecb81',\n 2: '#848e9c',\n 3: '#f6465d',\n}\n\nexport const recentOrderPurchases: RecentOrder[] = [\n { name: 'investor_au', amount: 12500 },\n { name: 'sydney_prop', amount: 25000 },\n { name: 'heritage_inv', amount: 50000 },\n { name: 'mosman_buyer', amount: 7500 },\n]\n","import { useState } from 'react'\nimport styled from 'styled-components'\n\nimport { mockIPOList } from './constants'\n\nexport type AssetSelectorBarProps = {\n propertyName: string\n tokenPrice: number\n offeringValuation: number\n}\n\nexport function AssetSelectorBar({ propertyName, tokenPrice, offeringValuation }: AssetSelectorBarProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false)\n\n return (\n <AssetSelectorWrapper>\n <IPOAssetSelector>\n <AssetSelectorDropdown onClick={() => setIsDropdownOpen((prev) => !prev)}>\n <AssetName>\n {propertyName}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n style={{ transform: isDropdownOpen ? 'rotate(180deg)' : 'none' }}\n >\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>\n </AssetName>\n </AssetSelectorDropdown>\n\n <SelectorMetrics>\n <div>\n <MetricLabel>Unit Price</MetricLabel>\n <MetricValue $accent>\n ${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </MetricValue>\n </div>\n <Separator>|</Separator>\n <div>\n <MetricLabel>Offering Valuation</MetricLabel>\n <MetricValue>\n ${offeringValuation.toLocaleString()}\n </MetricValue>\n </div>\n </SelectorMetrics>\n\n {isDropdownOpen && (\n <IPODropdown>\n {mockIPOList.map((ipo) => {\n const isDisabled = ipo.status === 'coming_soon'\n return (\n <IPOOption\n key={ipo.id}\n onClick={() => {\n if (!isDisabled) setIsDropdownOpen(false)\n }}\n $selected={ipo.id === 'musgrave'}\n style={{ opacity: isDisabled ? 0.4 : 1, cursor: isDisabled ? 'not-allowed' : 'pointer' }}\n >\n <IPOOptionName>{ipo.name}</IPOOptionName>\n <IPOOptionLocation>\n {ipo.location}\n {isDisabled && <span>Coming Soon</span>}\n </IPOOptionLocation>\n </IPOOption>\n )\n })}\n </IPODropdown>\n )}\n </IPOAssetSelector>\n </AssetSelectorWrapper>\n )\n}\n\nconst AssetSelectorWrapper = styled.div`\n width: 100%;\n`\n\nconst IPOAssetSelector = styled.div`\n position: relative;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: linear-gradient(135deg, var(--color-card-darker, #111) 0%, rgba(17,17,17,0.95) 100%);\n border-radius: 12px;\n border: 1px solid rgba(255,255,255,0.1);\n box-shadow: 0 8px 24px rgba(0,0,0,0.3);\n backdrop-filter: blur(10px);\n z-index: 10;\n transition: all 0.3s ease;\n &:hover { box-shadow: 0 12px 32px rgba(0,0,0,0.4); border-color: rgba(255,255,255,0.15); }\n`\n\nconst AssetSelectorDropdown = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 0.5rem 0.75rem;\n border-radius: 8px;\n transition: all 0.2s ease;\n &:hover { background-color: rgba(255,255,255,0.05); }\n`\n\nconst AssetName = styled.div`\n display: flex;\n align-items: center;\n font-weight: 600;\n font-size: 1.15rem;\n color: var(--color-text);\n letter-spacing: -0.02em;\n svg { margin-left: 0.75rem; transition: transform 0.3s cubic-bezier(0.4,0,0.2,1); opacity: 0.7; }\n &:hover svg { opacity: 1; }\n`\n\nconst SelectorMetrics = styled.div`\n display: flex;\n align-items: center;\n gap: 1rem;\n margin-left: auto;\n margin-right: 1rem;\n padding: 0.5rem 1rem;\n background: rgba(255,255,255,0.03);\n border-radius: 8px;\n border: 1px solid rgba(255,255,255,0.05);\n`\n\nconst MetricLabel = styled.span`\n font-size: 0.65rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 500;\n`\n\nconst MetricValue = styled.span<{ $accent?: boolean }>`\n font-size: 1.1rem;\n font-weight: 700;\n color: ${(p) => (p.$accent ? '#D4AF37' : '#fff')};\n`\n\nconst Separator = styled.span`\n font-size: 1rem;\n color: rgba(255,255,255,0.2);\n font-weight: 300;\n`\n\nconst IPODropdown = styled.div`\n position: absolute;\n top: calc(100% + 12px);\n left: 0;\n right: 0;\n background: #0a0a0a;\n border-radius: 16px;\n box-shadow: 0 20px 40px rgba(0,0,0,0.8), 0 4px 12px rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.1);\n z-index: 1000;\n max-height: 360px;\n overflow-y: auto;\n border: 1px solid rgba(255,255,255,0.08);\n animation: slideDown 0.3s cubic-bezier(0.4,0,0.2,1);\n @keyframes slideDown {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n`\n\nconst IPOOption = styled.div<{ $selected?: boolean }>`\n padding: 1.25rem 1.5rem;\n transition: all 0.2s ease;\n border-bottom: 1px solid rgba(255,255,255,0.03);\n position: relative;\n &:last-child { border-bottom: none; }\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: ${(p) => (p.$selected ? 'var(--color-accent)' : 'transparent')};\n transition: all 0.2s ease;\n }\n &:hover { background: linear-gradient(90deg, rgba(255,255,255,0.06) 0%, transparent 100%); }\n ${(p) => p.$selected && `background: linear-gradient(90deg, rgba(56,97,251,0.15) 0%, transparent 100%);`}\n`\n\nconst IPOOptionName = styled.div`\n font-weight: 600;\n font-size: 1rem;\n color: #ffffff;\n margin-bottom: 0.35rem;\n`\n\nconst IPOOptionLocation = styled.div`\n font-size: 0.875rem;\n color: rgba(255,255,255,0.5);\n span {\n margin-left: 0.5rem;\n color: var(--color-accent);\n font-size: 0.75rem;\n }\n`\n","import { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { FaChartLine } from 'react-icons/fa'\n\nexport type OfferingProgressCardProps = {\n ipoStarted: boolean\n statusLabel: string\n statusColor: string\n scStatus: number\n tokenPrice: number\n offeringValuation: number\n percentSold: number\n totalSold: number\n supplyToSell: number\n}\n\nexport function OfferingProgressCard({\n ipoStarted,\n statusLabel,\n statusColor,\n scStatus,\n tokenPrice,\n offeringValuation,\n percentSold,\n totalSold,\n supplyToSell,\n}: OfferingProgressCardProps) {\n const [currentTime, setCurrentTime] = useState(new Date())\n\n useEffect(() => {\n const timer = setInterval(() => setCurrentTime(new Date()), 1000)\n return () => clearInterval(timer)\n }, [])\n\n return (\n <Container>\n <Header>\n <h3>\n <FaChartLine /> Offering Progress\n </h3>\n <span>\n <span className=\"pulse\" />\n {statusLabel}\n {ipoStarted && (\n <time>\n {currentTime.toLocaleTimeString('en-AU', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n })}{' '}\n AEST\n </time>\n )}\n </span>\n </Header>\n\n {!ipoStarted ? (\n <PreLive>\n <div>\n <MetricLabel>Token Price</MetricLabel>\n <MetricValue accent>\n ${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </MetricValue>\n </div>\n <PreLiveStatus $statusColor={statusColor}>\n {scStatus === 2 ? 'Sale Completed' : scStatus === 3 ? 'Sale Paused' : 'Sale Not Yet Open'}\n </PreLiveStatus>\n <div style={{ textAlign: 'right' }}>\n <MetricLabel>Offering Valuation</MetricLabel>\n <MetricValue>\n ${offeringValuation.toLocaleString()}\n </MetricValue>\n </div>\n </PreLive>\n ) : (\n <LiveStats>\n <div>\n <LiveLabel>\n Offering Subscribed <span>ⓘ</span>\n </LiveLabel>\n <LivePercent>\n {percentSold < 0.1 && percentSold > 0 ? percentSold.toFixed(3) : percentSold.toFixed(1)}%\n <span>↑</span>\n </LivePercent>\n </div>\n <UnitsSubscribed>\n <MetricLabel>Units Subscribed</MetricLabel>\n <UnitsValue>\n <span>{totalSold.toLocaleString()}</span>\n <small>/ {supplyToSell.toLocaleString()}</small>\n </UnitsValue>\n </UnitsSubscribed>\n <ProgressBar>\n <div style={{ width: `${Math.min(percentSold, 100)}%` }} />\n </ProgressBar>\n </LiveStats>\n )}\n </Container>\n )\n}\n\nconst Container = styled.div`\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n width: 100%;\n display: flex;\n flex-direction: column;\n`\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 0;\n }\n span {\n display: flex;\n align-items: center;\n gap: 0.35rem;\n font-size: 0.75rem;\n color: var(--color-text);\n font-weight: 500;\n }\n .pulse {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: currentColor;\n animation: pulse 2s infinite;\n }\n time {\n margin-left: 1rem;\n color: #fff;\n font-weight: 600;\n font-size: 0.9rem;\n font-family: monospace;\n letter-spacing: 0.05em;\n }\n @keyframes pulse {\n 0% { opacity: 0.4; }\n 50% { opacity: 1; }\n 100% { opacity: 0.4; }\n }\n`\n\nconst MetricLabel = styled.div`\n font-size: 0.65rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-bottom: 0.25rem;\n`\n\nconst MetricValue = styled.div<{ accent?: boolean }>`\n font-size: 1.75rem;\n font-weight: 700;\n color: ${(p) => (p.accent ? '#D4AF37' : '#fff')};\n`\n\nconst PreLive = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.25rem 0;\n`\n\nconst PreLiveStatus = styled.div<{ $statusColor: string }>`\n font-size: 0.7rem;\n color: ${(p) => p.$statusColor};\n text-transform: uppercase;\n letter-spacing: 0.15em;\n font-weight: 600;\n`\n\nconst LiveStats = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n`\n\nconst LiveLabel = styled.div`\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin-bottom: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.35rem;\n span {\n font-size: 0.75rem;\n cursor: help;\n opacity: 0.7;\n }\n`\n\nconst LivePercent = styled.div`\n font-size: 2rem;\n font-weight: 600;\n color: #D4AF37;\n display: flex;\n align-items: center;\n span {\n margin-left: 0.5rem;\n color: #0ecb81;\n font-size: 1rem;\n opacity: 0.8;\n }\n`\n\nconst UnitsSubscribed = styled.div`\n text-align: right;\n`\n\nconst UnitsValue = styled.div`\n font-size: 1.75rem;\n font-weight: 700;\n span { color: #D4AF37; }\n small { color: rgba(255,255,255,0.3); margin-left: 0.35rem; }\n`\n\nconst ProgressBar = styled.div`\n width: 100%;\n height: 8px;\n background: rgba(255,255,255,0.1);\n border-radius: 4px;\n overflow: hidden;\n div {\n height: 100%;\n background: linear-gradient(90deg, #D4AF37, #f0b90b);\n border-radius: 4px;\n transition: width 0.5s ease;\n }\n`\n","import styled from 'styled-components'\n\nimport { recentOrderPurchases } from './constants'\n\nexport type VideoActivitySectionProps = {\n ipoStarted: boolean\n}\n\nexport function VideoActivitySection({ ipoStarted }: VideoActivitySectionProps) {\n return (\n <Section>\n <VideoPanel>\n <div className=\"section-header\">\n <h3>Musgrave</h3>\n </div>\n <div className=\"video-container\">\n <video controls loop autoPlay muted playsInline>\n <source src=\"/properties/Musgrave/musgrave.mp4\" type=\"video/mp4\" />\n Your browser does not support the video tag.\n </video>\n </div>\n </VideoPanel>\n\n <ActivityPanel>\n <div className=\"section-header\">\n <h3>\n <LiveIndicatorDot $active={ipoStarted} />\n Recent Order Activity\n </h3>\n <span>{ipoStarted ? 'Active orders: 1,247' : 'Waiting for Offer to Open'}</span>\n </div>\n <div className=\"activity-content\">\n {ipoStarted ? (\n <div className=\"activity-list\">\n {recentOrderPurchases.map((purchase, i) => (\n <div key={i} className=\"purchase-row\">\n <span>{purchase.name}</span>\n <strong>${purchase.amount.toLocaleString()}</strong>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"activity-empty\">\n <div className=\"spinner\" />\n <p>Activity will appear once the Offering opens</p>\n </div>\n )}\n </div>\n </ActivityPanel>\n </Section>\n )\n}\n\nconst Section = styled.div`\n display: flex;\n gap: 1.5rem;\n align-items: stretch;\n @media (max-width: 1024px) {\n flex-direction: column;\n gap: 1rem;\n }\n`\n\nconst VideoPanel = styled.div`\n flex: 1;\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n .section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n margin: 0;\n }\n }\n .video-container {\n flex: 1;\n position: relative;\n background: #000;\n border-radius: 8px;\n overflow: hidden;\n min-height: 300px;\n video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n`\n\nconst ActivityPanel = styled.div`\n flex: 0 0 auto;\n min-width: 450px;\n max-width: 520px;\n display: flex;\n flex-direction: column;\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n @media (max-width: 1024px) {\n min-width: 0;\n max-width: none;\n width: 100%;\n }\n .section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n margin: 0;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n span {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n font-weight: 500;\n }\n }\n .activity-content {\n flex: 1;\n overflow-y: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n .activity-content::-webkit-scrollbar {\n display: none;\n }\n .activity-list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n .purchase-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.5rem 0.75rem;\n background: rgba(255,255,255,0.03);\n border-radius: 6px;\n span {\n font-size: 0.8rem;\n color: var(--color-text);\n }\n strong {\n font-size: 0.8rem;\n color: #0ecb81;\n font-weight: 500;\n }\n }\n .activity-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: var(--color-text-secondary);\n text-align: center;\n gap: 0.75rem;\n .spinner {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: 2px solid rgba(212,175,55,0.3);\n border-top-color: #D4AF37;\n animation: spin 1s linear infinite;\n }\n p {\n font-size: 0.85rem;\n margin: 0;\n }\n }\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n`\n\nconst LiveIndicatorDot = styled.span<{ $active?: boolean }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n background-color: ${(p) => (p.$active ? '#0ecb81' : '#848e9c')};\n border-radius: 50%;\n position: relative;\n &:after {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n animation: ${(p) => (p.$active ? 'liveGlow 2s infinite' : 'none')};\n }\n @keyframes liveGlow {\n 0% { box-shadow: 0 0 0 0 rgba(14,203,129,0.4); }\n 70% { box-shadow: 0 0 0 10px rgba(14,203,129,0); }\n 100% { box-shadow: 0 0 0 0 rgba(14,203,129,0); }\n }\n`\n","import { useState } from 'react'\nimport styled from 'styled-components'\n\nimport type { OrderDetails } from './types'\n\nexport type OrderPanelProps = {\n statusLabel: string\n statusColor: string\n ipoStarted: boolean\n isAuthenticated: boolean\n tokenPrice: number\n feeRate: number\n supplyToSell: number\n availableBalance: number\n displayedOwnedTokens: number\n ownedTokensJustUpdated: boolean\n lastOrderQuantity: number\n orderPlacedSuccess: boolean\n lastOrderDetails: OrderDetails | null\n tokenQuantity: number\n feeInTokens: number\n orderTotal: number\n sliderValue: number\n manualOrderAmount: number | null\n setSliderValue: (value: number) => void\n setManualOrderAmount: (value: number | null) => void\n onSignInClick: () => void\n onOrderButtonClick: () => void\n orderButtonText: string\n isOrderButtonDisabled: boolean\n hasInsufficientFunds: boolean\n onPlaceAnotherOrder: () => void\n onDeposit?: () => void\n tokenDisplayName: string\n tokenSymbol: string\n}\n\nexport function OrderPanel({\n statusLabel,\n statusColor,\n ipoStarted,\n isAuthenticated,\n tokenPrice,\n feeRate,\n supplyToSell,\n availableBalance,\n displayedOwnedTokens,\n ownedTokensJustUpdated,\n lastOrderQuantity,\n orderPlacedSuccess,\n lastOrderDetails,\n tokenQuantity,\n feeInTokens,\n orderTotal,\n sliderValue,\n manualOrderAmount,\n setSliderValue,\n setManualOrderAmount,\n onOrderButtonClick,\n onSignInClick,\n orderButtonText,\n isOrderButtonDisabled,\n hasInsufficientFunds,\n onPlaceAnotherOrder,\n onDeposit,\n tokenDisplayName,\n tokenSymbol,\n}: OrderPanelProps) {\n const [payInputValue, setPayInputValue] = useState('')\n const [receiveInputValue, setReceiveInputValue] = useState('')\n const [isPayInputFocused, setIsPayInputFocused] = useState(false)\n const [isReceiveInputFocused, setIsReceiveInputFocused] = useState(false)\n\n const handlePayBlur = () => {\n setIsPayInputFocused(false)\n const parsed = parseInt(payInputValue.replace(/[^0-9]/g, ''), 10) || 0\n if (parsed <= 0) {\n setManualOrderAmount(null)\n setSliderValue(0)\n } else if (parsed >= availableBalance) {\n setManualOrderAmount(null)\n setSliderValue(100)\n } else {\n // Store exact amount — avoid lossy slider rounding\n setManualOrderAmount(parsed)\n const ratio = availableBalance === 0 ? 0 : Math.round(Math.max(0, (parsed / availableBalance) * 100))\n setSliderValue(ratio)\n }\n }\n\n const handleReceiveBlur = () => {\n setIsReceiveInputFocused(false)\n const parsed = parseFloat(receiveInputValue) || 0\n const newOrderTotal = Math.round(parsed * tokenPrice)\n if (newOrderTotal <= 0) {\n setManualOrderAmount(null)\n setSliderValue(0)\n } else if (newOrderTotal >= availableBalance) {\n setManualOrderAmount(null)\n setSliderValue(100)\n } else {\n // Store exact amount — avoid lossy slider rounding\n setManualOrderAmount(newOrderTotal)\n const ratio = availableBalance === 0 ? 0 : Math.round(Math.max(0, (newOrderTotal / availableBalance) * 100))\n setSliderValue(ratio)\n }\n }\n\n return (\n <Panel>\n <PanelHeader>\n <span>Place Order</span>\n <StatusBadge style={{ color: statusColor }}>\n <span style={{ backgroundColor: statusColor }} />\n {statusLabel}\n </StatusBadge>\n </PanelHeader>\n\n {orderPlacedSuccess ? (\n <OrderSuccessCard>\n <div className=\"success-header\">\n <div className=\"icon\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#D4AF37\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n <div>\n <p>Order Complete</p>\n <small>Order #{lastOrderDetails?.orderNumber || ''}</small>\n </div>\n </div>\n <div className=\"success-body\">\n {[\n { label: 'Units Acquired', value: `${lastOrderDetails?.tokens?.toFixed(2) || '0.00'} ${tokenSymbol}` },\n { label: 'Price Per Unit', value: `$${tokenPrice.toFixed(2)}` },\n {\n label: `${tokenDisplayName} Exposure`,\n value: `${(((lastOrderDetails?.tokens ?? 0) / supplyToSell) * 100).toFixed(3)}%`,\n },\n ].map((row) => (\n <div key={row.label} className=\"success-row\">\n <span>{row.label}</span>\n <strong>{row.value}</strong>\n </div>\n ))}\n <div className=\"success-total\">\n <span>Total Investment</span>\n <strong>${lastOrderDetails?.total?.toLocaleString() || '0'}</strong>\n </div>\n </div>\n <div className=\"success-footnote\">\n Your units will be available for secondary market trading once the offering period concludes.\n </div>\n <button type=\"button\" onClick={onPlaceAnotherOrder}>\n Place Another Order\n </button>\n </OrderSuccessCard>\n ) : (\n <FormBody>\n <Card>\n <CardLabel>You Invest</CardLabel>\n <CardInputRow>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={isPayInputFocused ? payInputValue : orderTotal.toLocaleString()}\n onFocus={(e) => {\n setIsPayInputFocused(true)\n setPayInputValue((manualOrderAmount ?? orderTotal).toString())\n e.target.select()\n }}\n onBlur={handlePayBlur}\n onChange={(e) => setPayInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n ;(e.target as HTMLInputElement).blur()\n }\n }}\n />\n <span>USDC</span>\n </CardInputRow>\n <QuickSelectRow>\n {[25, 50, 75, 100].map((pct) => (\n <button\n key={pct}\n type=\"button\"\n onClick={() => {\n setManualOrderAmount(null)\n setSliderValue(pct)\n }}\n className={sliderValue === pct ? 'active' : ''}\n >\n {pct}%\n </button>\n ))}\n </QuickSelectRow>\n </Card>\n\n <FundsRow>\n <span>\n Available Funds:{' '}\n <strong>{isAuthenticated ? `$${availableBalance.toLocaleString()}` : '—'}</strong>\n </span>\n <DepositButton\n type=\"button\"\n onClick={isAuthenticated ? onDeposit : undefined}\n disabled={!isAuthenticated}\n >\n + Deposit\n </DepositButton>\n </FundsRow>\n\n <Divider>↓</Divider>\n\n <Card>\n <CardTopRow>\n <CardLabel>{ipoStarted ? 'You Receive' : \"You'll Receive\"}</CardLabel>\n <CardHint>{((tokenQuantity / supplyToSell) * 100).toFixed(3)}% Exposure</CardHint>\n </CardTopRow>\n <CardInputRow>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={isReceiveInputFocused ? receiveInputValue : tokenQuantity.toFixed(2)}\n onFocus={(e) => {\n setIsReceiveInputFocused(true)\n setReceiveInputValue(tokenQuantity.toFixed(2))\n e.target.select()\n }}\n onBlur={handleReceiveBlur}\n onChange={(e) => setReceiveInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n ;(e.target as HTMLInputElement).blur()\n }\n }}\n />\n <span>{tokenDisplayName}</span>\n </CardInputRow>\n </Card>\n\n <OrderSummary>\n <SummaryRow>\n <span>Price</span>\n <strong>${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} / unit</strong>\n </SummaryRow>\n <SummaryRow>\n <span>Buying</span>\n <strong>{tokenQuantity.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {tokenSymbol}</strong>\n </SummaryRow>\n <SummaryRow>\n <span>Fee ({(feeRate * 100).toFixed(1)}%)</span>\n <strong>{feeInTokens.toFixed(2)} {tokenSymbol}</strong>\n </SummaryRow>\n <SummaryTotal>\n <span>Total</span>\n <strong>${orderTotal.toLocaleString()} USDC</strong>\n </SummaryTotal>\n </OrderSummary>\n </FormBody>\n )}\n\n {!orderPlacedSuccess && (\n <SubscribeButton\n type=\"button\"\n disabled={isOrderButtonDisabled}\n data-green={orderButtonText === 'Place Order'}\n onClick={() => {\n if (!isAuthenticated) {\n onSignInClick()\n return\n }\n onOrderButtonClick()\n }}\n >\n {orderButtonText}\n </SubscribeButton>\n )}\n\n {isAuthenticated && (\n <BalanceCards>\n <BalanceCard>\n <BalanceLabel>Available to Invest</BalanceLabel>\n <BalanceValue>${availableBalance.toLocaleString()}</BalanceValue>\n <BalanceAction onClick={onDeposit} style={{ cursor: onDeposit ? 'pointer' : 'default' }}>+ Deposit</BalanceAction>\n </BalanceCard>\n <BalanceCard>\n <BalanceLabel>{`${tokenDisplayName} Owned`}</BalanceLabel>\n <BalanceValue>\n {displayedOwnedTokens.toFixed(2)} {tokenSymbol}\n {ownedTokensJustUpdated && <span>+{lastOrderQuantity.toFixed(2)} {tokenSymbol}</span>}\n </BalanceValue>\n <BalanceSub>\n ${\n (displayedOwnedTokens * tokenPrice).toLocaleString('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })\n }{' '}\n • {((displayedOwnedTokens / supplyToSell) * 100).toFixed(3)}%\n </BalanceSub>\n </BalanceCard>\n </BalanceCards>\n )}\n\n {hasInsufficientFunds && (\n <InsufficientFunds>\n You need ${orderTotal.toLocaleString()} but only have ${availableBalance.toLocaleString()} available.\n </InsufficientFunds>\n )}\n </Panel>\n )\n}\n\nconst Panel = styled.div`\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n height: 100%;\n display: flex;\n flex-direction: column;\n min-width: 450px;\n max-width: 520px;\n width: 520px;\n overflow: hidden;\n @media (max-width: 1024px) {\n min-width: 0;\n max-width: none;\n width: 100%;\n }\n`\n\nconst PanelHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n padding-bottom: 0.75rem;\n border-bottom: 1px solid var(--color-border);\n span:first-child {\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text);\n }\n`\n\nconst StatusBadge = styled.span`\n font-size: 0.7rem;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 0.3rem;\n span {\n width: 5px;\n height: 5px;\n border-radius: 50%;\n display: inline-block;\n }\n`\n\nconst Card = styled.div`\n background: rgba(0,0,0,0.4);\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 12px;\n padding: 1rem 1.25rem;\n`\n\nconst CardLabel = styled.div`\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n margin-bottom: 0.5rem;\n`\n\nconst CardInputRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n input {\n background: transparent;\n border: none;\n outline: none;\n font-size: 1.75rem;\n font-weight: 600;\n color: #fff;\n width: 100%;\n }\n span {\n font-size: 1rem;\n color: var(--color-text-secondary);\n font-weight: 500;\n margin-left: 0.75rem;\n white-space: nowrap;\n }\n`\n\nconst QuickSelectRow = styled.div`\n display: flex;\n gap: 0.5rem;\n margin-top: 0.75rem;\n button {\n flex: 1;\n padding: 0.4rem 0;\n font-size: 0.75rem;\n font-weight: 500;\n background: rgba(255,255,255,0.05);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 6px;\n color: var(--color-text-secondary);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n button.active {\n background: rgba(212,175,55,0.2);\n border-color: rgba(212,175,55,0.5);\n color: #D4AF37;\n }\n`\n\nconst FundsRow = styled.div`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 0.5rem 0 0.5rem 0.5rem;\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n strong {\n color: #fff;\n }\n`\n\nconst DepositButton = styled.button`\n background: transparent;\n border: 1px solid rgba(212,175,55,0.4);\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n font-size: 0.65rem;\n color: #D4AF37;\n cursor: pointer;\n font-weight: 500;\n`\n\nconst Divider = styled.div`\n text-align: center;\n margin: 0.5rem 0;\n color: var(--color-text-secondary);\n`\n\nconst CardTopRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.5rem;\n`\n\nconst CardHint = styled.span`\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n opacity: 0.7;\n`\n\nconst OrderSummary = styled.div`\n border-top: 1px solid rgba(255,255,255,0.08);\n padding-top: 1rem;\n margin-top: 0.5rem;\n font-size: 0.8rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n`\n\nconst SummaryRow = styled.div`\n display: flex;\n justify-content: space-between;\n color: var(--color-text-secondary);\n strong { color: #fff; }\n`\n\nconst SummaryTotal = styled(SummaryRow)`\n padding-top: 0.5rem;\n border-top: 1px solid rgba(255,255,255,0.08);\n color: #fff;\n strong {\n font-weight: 600;\n }\n`\n\nconst FormBody = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n`\n\nconst SubscribeButton = styled.button`\n width: 100%;\n margin-top: 1rem;\n padding: 0.875rem;\n border-radius: 6px;\n font-weight: 600;\n font-size: 0.9rem;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n background-color: rgba(255,255,255,0.1);\n color: var(--color-text-secondary);\n &[disabled] {\n pointer-events: none;\n cursor: not-allowed;\n }\n &:not([disabled])[data-green='true'] {\n background-color: #0ecb81;\n color: #fff;\n }\n &:not([disabled])[data-green='false'] {\n background-color: #D4AF37;\n color: #0a0a0a;\n }\n`\n\nconst BalanceCards = styled.div`\n display: flex;\n gap: 1rem;\n margin-top: 1rem;\n flex-wrap: wrap;\n`\n\nconst BalanceCard = styled.div`\n flex: 1;\n background: rgba(255,255,255,0.03);\n border-radius: 12px;\n padding: 1rem;\n text-align: center;\n position: relative;\n`\n\nconst BalanceLabel = styled.div`\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 0.5rem;\n`\n\nconst BalanceValue = styled.div`\n font-size: 1.5rem;\n font-weight: 700;\n color: #fff;\n span {\n position: absolute;\n left: calc(50% + 1rem);\n font-size: 0.8rem;\n color: #0ecb81;\n font-weight: 600;\n }\n`\n\nconst BalanceAction = styled.div`\n font-size: 0.75rem;\n color: #D4AF37;\n cursor: pointer;\n font-weight: 500;\n margin-top: 0.5rem;\n`\n\nconst BalanceSub = styled.div`\n font-size: 0.85rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n margin-top: 0.25rem;\n`\n\nconst OrderSuccessCard = styled.div`\n margin-bottom: 1.5rem;\n background: linear-gradient(180deg, rgba(25,27,31,0.95) 0%, rgba(18,20,24,0.98) 100%);\n border: 1px solid rgba(212,175,55,0.12);\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 4px 20px rgba(0,0,0,0.3);\n .success-header {\n border-bottom: 1px solid rgba(255,255,255,0.06);\n padding: 1.25rem 1.5rem;\n display: flex;\n align-items: center;\n gap: 0.875rem;\n background: linear-gradient(135deg, rgba(212,175,55,0.06) 0%, transparent 100%);\n .icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(135deg, rgba(212,175,55,0.2) 0%, rgba(212,175,55,0.1) 100%);\n border: 1px solid rgba(212,175,55,0.25);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n p {\n font-size: 0.95rem;\n font-weight: 600;\n color: #fff;\n margin: 0;\n }\n small {\n font-size: 0.7rem;\n color: rgba(255,255,255,0.4);\n }\n }\n .success-body {\n padding: 1.25rem 1.5rem;\n }\n .success-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.875rem;\n margin-bottom: 0.875rem;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n span {\n font-size: 0.75rem;\n color: rgba(255,255,255,0.4);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 500;\n }\n strong {\n font-size: 0.95rem;\n font-weight: 500;\n color: rgba(255,255,255,0.7);\n font-family: monospace;\n }\n }\n .success-total {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.875rem;\n background: rgba(212,175,55,0.05);\n border-radius: 8px;\n border: 1px solid rgba(212,175,55,0.1);\n span {\n font-size: 0.75rem;\n color: rgba(255,255,255,0.5);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 500;\n }\n strong {\n font-size: 1.05rem;\n font-weight: 700;\n color: #D4AF37;\n font-family: monospace;\n }\n }\n .success-footnote {\n padding: 1rem 1.5rem;\n border-top: 1px solid rgba(255,255,255,0.06);\n background: rgba(0,0,0,0.2);\n font-size: 0.75rem;\n color: rgba(255,255,255,0.5);\n line-height: 1.6;\n }\n button {\n width: 100%;\n padding: 0.875rem;\n border-radius: 8px;\n font-weight: 600;\n font-size: 0.9rem;\n cursor: pointer;\n background: linear-gradient(135deg, #D4AF37 0%, #b8962e 100%);\n color: #0a0a0a;\n border: none;\n box-shadow: 0 2px 8px rgba(212,175,55,0.25);\n transition: all 0.2s ease;\n }\n`\nconst InsufficientFunds = styled.div`\n margin-top: 1rem;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n background: rgba(246,70,93,0.1);\n border: 1px solid rgba(246,70,93,0.3);\n color: #f6465d;\n font-size: 0.85rem;\n font-weight: 600;\n`\n","import { useState } from 'react'\nimport styled from 'styled-components'\nimport { BiImages, BiMap } from 'react-icons/bi'\n\nimport { galleryCategories, musgraveGalleryImages } from './constants'\n\nexport type GalleryMapSectionProps = {\n propertyLocation: string\n}\n\nexport function GalleryMapSection({ propertyLocation }: GalleryMapSectionProps) {\n const [carouselIndex, setCarouselIndex] = useState(0)\n\n const goPrev = () => {\n setCarouselIndex((prev) => (prev > 0 ? prev - 1 : musgraveGalleryImages.length - 1))\n }\n\n const goNext = () => {\n setCarouselIndex((prev) => (prev < musgraveGalleryImages.length - 1 ? prev + 1 : 0))\n }\n\n return (\n <Row>\n <GalleryPanel>\n <PanelHeader>\n <h3>\n <BiImages /> Property Gallery\n </h3>\n <button type=\"button\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M8 3H5a2 2 0 00-2 2v3m18 0V5a2 2 0 00-2-2h-3m0 18h3a2 2 0 002-2v-3M3 16v3a2 2 0 002 2h3\" />\n </svg>\n Full View\n </button>\n </PanelHeader>\n\n <Carousel>\n <Track style={{ transform: `translateX(-${carouselIndex * 100}%)` }}>\n {musgraveGalleryImages.map((img) => (\n <Slide key={img.src}>\n <img src={img.src} alt={img.title} />\n <SlideCaption>\n <h4>{img.title}</h4>\n <p>{img.subtitle}</p>\n </SlideCaption>\n </Slide>\n ))}\n </Track>\n <CarouselButton className=\"prev\" onClick={goPrev}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </CarouselButton>\n <CarouselButton className=\"next\" onClick={goNext}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </CarouselButton>\n </Carousel>\n\n <ThumbnailRow>\n {musgraveGalleryImages.map((img, index) => (\n <Thumbnail\n key={img.src}\n onClick={() => setCarouselIndex(index)}\n data-active={carouselIndex === index}\n >\n <img src={img.src} alt={img.title} />\n </Thumbnail>\n ))}\n </ThumbnailRow>\n\n <CategoryRow>\n {galleryCategories.map((cat, index) => {\n const isActive =\n carouselIndex >= cat.startIndex &&\n (index === galleryCategories.length - 1 || carouselIndex < galleryCategories[index + 1].startIndex)\n return (\n <button key={cat.name} type=\"button\" data-active={isActive} onClick={() => setCarouselIndex(cat.startIndex)}>\n {cat.name}\n </button>\n )\n })}\n </CategoryRow>\n </GalleryPanel>\n\n <MapPanel>\n <PanelHeader>\n <h3>\n <BiMap /> Location\n </h3>\n <span>{propertyLocation}</span>\n </PanelHeader>\n <MapFrame>\n <IframeShield onClick={(e) => ((e.currentTarget as HTMLDivElement).style.display = 'none')} />\n <iframe\n src=\"https://demo.loafmarkets.com/map/musgrave?embed=true&zoom=14&hideOthers=true\"\n width=\"100%\"\n height=\"100%\"\n style={{ border: 0, minHeight: '400px', pointerEvents: 'auto' }}\n allow=\"autoplay; fullscreen; web-share; xr-spatial-tracking;\"\n title=\"Explore Musgrave Property in 3D\"\n referrerPolicy=\"unsafe-url\"\n tabIndex={-1}\n />\n </MapFrame>\n </MapPanel>\n </Row>\n )\n}\n\nconst Row = styled.div`\n display: grid;\n grid-template-columns: 2fr 1fr;\n gap: 1.5rem;\n margin-top: 1.5rem;\n max-width: 1800px;\n margin-left: auto;\n margin-right: auto;\n @media (max-width: 1024px) {\n grid-template-columns: 1fr;\n }\n`\n\nconst PanelBase = styled.div`\n background: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n`\n\nconst PanelHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n padding-bottom: 0.75rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n button {\n background: transparent;\n border: 1px solid #D4AF37;\n color: #D4AF37;\n padding: 0.35rem 0.75rem;\n border-radius: 4px;\n font-size: 0.75rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 0.35rem;\n }\n span {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n }\n`\n\nconst GalleryPanel = styled(PanelBase)``\n\nconst Carousel = styled.div`\n position: relative;\n width: 100%;\n overflow: hidden;\n border-radius: 8px;\n`\n\nconst Track = styled.div`\n display: flex;\n transition: transform 0.4s ease;\n`\n\nconst Slide = styled.div`\n min-width: 100%;\n position: relative;\n img {\n width: 100%;\n height: 450px;\n object-fit: cover;\n border-radius: 8px;\n }\n`\n\nconst SlideCaption = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem;\n background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);\n border-radius: 0 0 8px 8px;\n h4 {\n margin: 0;\n font-size: 0.95rem;\n font-weight: 600;\n }\n p {\n margin: 0.25rem 0 0;\n font-size: 0.75rem;\n color: rgba(255,255,255,0.7);\n }\n`\n\nconst CarouselButton = styled.button`\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n background: rgba(0,0,0,0.8);\n border: 2px solid rgba(255,255,255,0.3);\n color: white;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 2;\n &.prev { left: 1.5rem; }\n &.next { right: 1.5rem; }\n svg {\n width: 28px;\n height: 28px;\n stroke: #fff;\n }\n`\n\nconst ThumbnailRow = styled.div`\n display: flex;\n gap: 0.5rem;\n margin-top: 1rem;\n overflow-x: auto;\n padding-bottom: 0.5rem;\n`\n\nconst Thumbnail = styled.div`\n min-width: 60px;\n height: 45px;\n border-radius: 4px;\n overflow: hidden;\n cursor: pointer;\n border: 2px solid transparent;\n opacity: 0.6;\n transition: all 0.2s ease;\n &[data-active='true'] {\n border-color: #D4AF37;\n opacity: 1;\n }\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`\n\nconst CategoryRow = styled.div`\n display: flex;\n justify-content: center;\n gap: 0.5rem;\n margin-top: 0.75rem;\n flex-wrap: wrap;\n button {\n background: transparent;\n border: 1px solid rgba(255,255,255,0.2);\n color: var(--color-text-secondary);\n padding: 0.5rem 1rem;\n border-radius: 6px;\n font-size: 0.8rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n button[data-active='true'] {\n background: rgba(212,175,55,0.2);\n border-color: #D4AF37;\n color: #D4AF37;\n }\n`\n\nconst MapPanel = styled(PanelBase)`\n min-height: 400px;\n`\n\nconst MapFrame = styled.div`\n flex: 1;\n border-radius: 6px;\n overflow: hidden;\n min-height: 400px;\n position: relative;\n`\n\nconst IframeShield = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1;\n cursor: pointer;\n`\n","import { useMemo, useState, useEffect } from 'react'\nimport styled from 'styled-components'\n\nimport type { NewsFeedItem, PropertySubscription } from './types'\n\nexport type NewsOrdersSectionProps = {\n newsItems: NewsFeedItem[]\n userSubscriptions: PropertySubscription[]\n tokenPrice: number\n}\n\nconst SUBSCRIPTIONS_PAGE_SIZE = 6\n\nexport function NewsOrdersSection({ newsItems, userSubscriptions, tokenPrice }: NewsOrdersSectionProps) {\n const [page, setPage] = useState(0)\n\n const totalPages = Math.max(1, Math.ceil(userSubscriptions.length / SUBSCRIPTIONS_PAGE_SIZE))\n\n useEffect(() => {\n if (page > totalPages - 1) {\n setPage(totalPages - 1)\n }\n }, [page, totalPages])\n\n useEffect(() => {\n setPage(0)\n }, [userSubscriptions])\n\n const paginatedSubscriptions = useMemo(() => {\n const start = page * SUBSCRIPTIONS_PAGE_SIZE\n return userSubscriptions.slice(start, start + SUBSCRIPTIONS_PAGE_SIZE)\n }, [page, userSubscriptions])\n\n const hasPagination = userSubscriptions.length > SUBSCRIPTIONS_PAGE_SIZE\n\n return (\n <Row>\n <TradeNewsPanel>\n <TradeNewsHeader>\n <h3>Property News &amp; Headlines</h3>\n <span>\n <span className=\"dot\" /> LIVE\n </span>\n </TradeNewsHeader>\n <TradeNewsList>\n {newsItems.map((newsItem) => (\n <TradeNewsItem\n key={newsItem.displayId || `${newsItem.id}-fallback`}\n data-new={newsItem.isNew}\n >\n <TradeNewsTitle>{newsItem.title}</TradeNewsTitle>\n <TradeNewsInfo>\n <TradeNewsDate data-new={newsItem.isNew}>{newsItem.date}</TradeNewsDate>\n <TradeNewsCategory data-type={newsItem.type}>\n {newsItem.type === 'property' ? 'Property Update' : 'Market News'}\n </TradeNewsCategory>\n </TradeNewsInfo>\n </TradeNewsItem>\n ))}\n </TradeNewsList>\n </TradeNewsPanel>\n\n <TradeNewsPanel>\n <TradeNewsHeader>\n <div>\n <h3>Your Orders</h3>\n <span>Offering Subscriptions</span>\n </div>\n {hasPagination ? (\n <Pagination>\n <button type=\"button\" onClick={() => setPage((prev) => Math.max(prev - 1, 0))} disabled={page === 0}>\n Prev\n </button>\n <span>\n Page {page + 1}/{totalPages}\n </span>\n <button\n type=\"button\"\n onClick={() => setPage((prev) => Math.min(prev + 1, totalPages - 1))}\n disabled={page >= totalPages - 1}\n >\n Next\n </button>\n </Pagination>\n ) : null}\n </TradeNewsHeader>\n <OrdersTable>\n <OrdersHead>\n {['Date', 'Units', 'Price', 'Total', 'Status'].map((h) => (\n <div key={h}>{h}</div>\n ))}\n </OrdersHead>\n {paginatedSubscriptions.length ? (\n paginatedSubscriptions.map((subscription) => {\n const subscriptionDate = new Date(subscription.timestamp)\n return (\n <OrdersRow key={`${subscription.timestamp}-${subscription.tokens}`}>\n <div>\n {subscriptionDate.toLocaleDateString('en-AU', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}\n <span>\n {subscriptionDate.toLocaleTimeString('en-AU', {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </span>\n </div>\n <div className=\"units\">{subscription.tokens.toFixed(2)}</div>\n <div>${tokenPrice.toFixed(2)}</div>\n <div className=\"total\">${subscription.value.toLocaleString()}</div>\n <div className=\"status\">{subscription.status ?? 'Confirmed'}</div>\n </OrdersRow>\n )\n })\n ) : (\n <OrdersEmpty>\n <div>📋</div>\n <p>No orders yet</p>\n <small>Subscribe to the IPO above to place your first order</small>\n </OrdersEmpty>\n )}\n </OrdersTable>\n </TradeNewsPanel>\n </Row>\n )\n}\n\nconst Row = styled.div`\n display: grid;\n grid-template-columns: 1fr 2fr;\n gap: 1.5rem;\n margin-top: 1.5rem;\n max-width: 1800px;\n margin-left: auto;\n margin-right: auto;\n @media (max-width: 1024px) {\n grid-template-columns: 1fr;\n }\n`\n\nconst TradeNewsPanel = styled.div`\n background-color: var(--color-card-darker, #111);\n border-radius: 8px;\n padding: 1.5rem;\n display: flex;\n flex-direction: column;\n box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n border: 1px solid var(--color-border);\n min-height: 280px;\n overflow: visible !important;\n`\n\nconst TradeNewsHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--color-text);\n }\n span {\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.25rem;\n font-weight: 500;\n }\n .dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #0ecb81;\n animation: pulse 2s infinite;\n }\n @keyframes pulse {\n 0% { opacity: 0.4; }\n 50% { opacity: 1; }\n 100% { opacity: 0.4; }\n }\n`\n\nconst TradeNewsList = styled.div`\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n flex: 1;\n overflow: visible;\n max-width: 100%;\n`\n\nconst TradeNewsItem = styled.div`\n display: flex;\n flex-direction: column;\n padding: 0.75rem;\n background-color: rgba(255,255,255,0.05);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n &[data-new='true'] {\n background-color: rgba(14,203,129,0.1);\n }\n &:hover {\n background-color: rgba(255,255,255,0.08);\n transform: translateY(-2px);\n }\n`\n\nconst TradeNewsTitle = styled.h4`\n font-size: 0.9375rem;\n font-weight: 500;\n margin: 0 0 0.5rem 0;\n color: var(--color-text);\n`\n\nconst TradeNewsInfo = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n`\n\nconst TradeNewsDate = styled.span`\n &[data-new='true'] {\n color: #0ecb81;\n }\n`\n\nconst TradeNewsCategory = styled.span`\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n background-color: rgba(240,185,11,0.1);\n color: var(--color-accent, #f0b90b);\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100px;\n &[data-type='property'] {\n background-color: rgba(14,203,129,0.1);\n color: #0ecb81;\n }\n`\n\nconst OrdersTable = styled.div`\n flex: 1;\n overflow: auto;\n`\n\nconst Pagination = styled.div`\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n\n button {\n border: 1px solid rgba(255,255,255,0.2);\n background: rgba(255,255,255,0.05);\n color: #fff;\n border-radius: 9999px;\n padding: 0.25rem 0.9rem;\n font-size: 0.7rem;\n cursor: pointer;\n transition: opacity 0.2s;\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n }\n`\n\nconst OrdersHead = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr 1fr 1fr 1.2fr;\n gap: 0.5rem;\n padding-bottom: 0.75rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n margin-bottom: 0.5rem;\n div {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--color-text-secondary);\n text-transform: uppercase;\n }\n`\n\nconst OrdersRow = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr 1fr 1fr 1.2fr;\n gap: 0.5rem;\n padding: 0.6rem 0;\n border-bottom: 1px solid rgba(255,255,255,0.05);\n align-items: center;\n div {\n font-size: 0.85rem;\n color: #fff;\n }\n div > span {\n display: block;\n font-size: 0.7rem;\n color: var(--color-text-secondary);\n }\n .units {\n color: #0ecb81;\n }\n .total {\n color: #D4AF37;\n font-weight: 500;\n }\n .status {\n font-size: 0.75rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n background: rgba(14,203,129,0.15);\n color: #0ecb81;\n display: inline-block;\n width: fit-content;\n }\n`\n\nconst OrdersEmpty = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n color: var(--color-text-secondary);\n text-align: center;\n div {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n p {\n font-size: 0.9rem;\n margin-bottom: 0.25rem;\n }\n small {\n font-size: 0.75rem;\n }\n`\n","import styled from 'styled-components'\n\nexport type OrderConfirmationModalProps = {\n open: boolean\n onClose: () => void\n hasInsufficientFunds: boolean\n tokenQuantity: number\n tokenPrice: number\n propertyName: string\n estExposure: string\n orderTotal: number\n availableBalance: number\n onConfirm: () => void\n}\n\nexport function OrderConfirmationModal({\n open,\n onClose,\n hasInsufficientFunds,\n tokenQuantity,\n tokenPrice,\n propertyName,\n estExposure,\n orderTotal,\n availableBalance,\n onConfirm,\n}: OrderConfirmationModalProps) {\n if (!open) return null\n\n return (\n <Overlay onClick={onClose}>\n <Modal onClick={(e) => e.stopPropagation()}>\n <ModalHeader>\n <h3>\n Confirm Order\n <Badge>Subscribe</Badge>\n </h3>\n </ModalHeader>\n\n <ModalBody>\n {[\n { label: 'Order Type', value: 'Primary Offering' },\n { label: 'Property', value: propertyName },\n { label: 'Units', value: `${tokenQuantity.toLocaleString()} MUS`, highlight: true },\n {\n label: 'Unit Price',\n value: `$${tokenPrice.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`,\n },\n { label: 'Property Exposure', value: `${estExposure}%` },\n { label: 'Total Investment', value: `$${orderTotal.toLocaleString()}`, highlight: true },\n ].map((row, index, arr) => (\n <ModalRow key={row.label} data-divider={index < arr.length - 1}>\n <span>{row.label}</span>\n <strong data-highlight={row.highlight}>{row.value}</strong>\n </ModalRow>\n ))}\n </ModalBody>\n\n {hasInsufficientFunds ? (\n <Warning>\n <p>⚠ Insufficient Balance</p>\n <small>\n You need <strong>${orderTotal.toLocaleString()}</strong> but only have{' '}\n <strong>${availableBalance.toLocaleString()}</strong> available.\n </small>\n </Warning>\n ) : (\n <Summary>\n Your order for <strong>{tokenQuantity.toLocaleString()} MUS units</strong> in the{' '}\n <strong>{propertyName}</strong> Primary Offering will be placed for <strong>${tokenPrice.toFixed(2)}/unit</strong>.\n </Summary>\n )}\n\n <ButtonRow>\n <button type=\"button\" onClick={onClose} className=\"secondary\">\n Cancel\n </button>\n {!hasInsufficientFunds && (\n <button type=\"button\" onClick={onConfirm} className=\"primary\">\n Place Order\n </button>\n )}\n </ButtonRow>\n </Modal>\n </Overlay>\n )\n}\n\nconst Overlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0,0,0,0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n backdrop-filter: blur(4px);\n`\n\nconst Modal = styled.div`\n background: linear-gradient(135deg, rgba(26,29,35,0.95) 0%, rgba(26,29,35,0.98) 100%);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 16px;\n padding: 2rem;\n max-width: 480px;\n width: 90%;\n box-shadow: 0 20px 60px rgba(0,0,0,0.5);\n`\n\nconst ModalHeader = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 1.5rem;\n padding-bottom: 1rem;\n border-bottom: 1px solid rgba(255,255,255,0.1);\n h3 {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: #fff;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n`\n\nconst Badge = styled.span`\n padding: 0.25rem 0.75rem;\n border-radius: 6px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: linear-gradient(135deg, rgba(212,175,55,0.2) 0%, rgba(212,175,55,0.1) 100%);\n color: #D4AF37;\n border: 1px solid rgba(212,175,55,0.3);\n`\n\nconst ModalBody = styled.div`\n margin-bottom: 1.5rem;\n display: flex;\n flex-direction: column;\n`\n\nconst ModalRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 0;\n border-bottom: 1px solid rgba(255,255,255,0.05);\n &[data-divider='false'] {\n border-bottom: none;\n }\n span {\n color: rgba(255,255,255,0.6);\n font-size: 0.9rem;\n }\n strong {\n color: #fff;\n font-weight: 500;\n font-size: 0.95rem;\n }\n strong[data-highlight='true'] {\n color: #D4AF37;\n font-weight: 600;\n }\n`\n\nconst Warning = styled.div`\n background: rgba(246,70,93,0.1);\n border: 1px solid rgba(246,70,93,0.3);\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1.5rem;\n p {\n margin: 0;\n color: #f6465d;\n font-size: 0.9rem;\n font-weight: 600;\n }\n small {\n display: block;\n margin-top: 0.5rem;\n color: rgba(255,255,255,0.7);\n font-size: 0.85rem;\n line-height: 1.5;\n }\n`\n\nconst Summary = styled.div`\n background: rgba(255,255,255,0.03);\n border: 1px solid rgba(255,255,255,0.08);\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1.5rem;\n color: rgba(255,255,255,0.8);\n font-size: 0.9rem;\n line-height: 1.5;\n`\n\nconst ButtonRow = styled.div`\n display: flex;\n gap: 1rem;\n justify-content: flex-end;\n button {\n padding: 0.75rem 1.5rem;\n border-radius: 8px;\n font-weight: 600;\n font-size: 0.95rem;\n cursor: pointer;\n }\n .secondary {\n background: rgba(255,255,255,0.1);\n color: rgba(255,255,255,0.8);\n border: 1px solid rgba(255,255,255,0.2);\n }\n .primary {\n background: linear-gradient(135deg, #0ecb81 0%, #0ba968 100%);\n color: #fff;\n border: none;\n box-shadow: 0 4px 12px rgba(14,203,129,0.3);\n }\n`\n","import { useEffect, useState } from 'react'\nimport styled from 'styled-components'\n\nimport { AssetSelectorBar } from './property-buy/asset-selector-bar'\nimport { OfferingProgressCard } from './property-buy/offering-progress-card'\nimport { VideoActivitySection } from './property-buy/video-activity-section'\nimport { OrderPanel } from './property-buy/order-panel'\nimport { GalleryMapSection } from './property-buy/gallery-map-section'\nimport { NewsOrdersSection } from './property-buy/news-orders-section'\nimport { OrderConfirmationModal } from './property-buy/order-confirmation-modal'\nimport { allNewsItems, STATUS_COLOR } from './property-buy/constants'\nimport type { OrderDetails, PropertySubscription, SaleData, NewsFeedItem } from './property-buy/types'\n\ntype PropertyBuyProps = {\n propertyName?: string\n propertyLocation?: string\n tokenDisplayName?: string\n tokenSymbol?: string\n isAuthenticated: boolean\n onSignIn: () => void\n saleData?: SaleData | null\n walletUsdcBalance?: number | null\n walletPropertyTokenBalance?: number | null\n onPurchase?: (tokenAmount: number) => Promise<void>\n purchaseStatus?: 'idle' | 'checking-allowance' | 'approving' | 'purchasing' | 'success' | 'error'\n purchaseError?: string | null\n onDeposit?: () => void\n initialUserSubscriptions?: PropertySubscription[]\n}\n\nexport function PropertyBuy({\n propertyName = 'Loaf Property',\n propertyLocation: propertyLocationLabel = 'Sydney, NSW',\n tokenDisplayName = 'Property Token',\n tokenSymbol = 'LOAF',\n isAuthenticated,\n onSignIn,\n saleData,\n walletUsdcBalance,\n walletPropertyTokenBalance,\n onPurchase,\n purchaseStatus = 'idle',\n purchaseError,\n onDeposit,\n initialUserSubscriptions = [],\n}: PropertyBuyProps) {\n const [sliderValue, setSliderValue] = useState(0)\n const [availableBalance, setAvailableBalance] = useState(walletUsdcBalance ?? 125000)\n const [optimisticUserSubscriptions, setOptimisticUserSubscriptions] = useState<PropertySubscription[]>([])\n const [manualOrderAmount, setManualOrderAmount] = useState<number | null>(null)\n const [ownedTokens, setOwnedTokens] = useState(0)\n const [displayedOwnedTokens, setDisplayedOwnedTokens] = useState(0)\n const [ownedTokensJustUpdated, setOwnedTokensJustUpdated] = useState(false)\n const [lastOrderQuantity, setLastOrderQuantity] = useState(0)\n const [orderPlacedSuccess, setOrderPlacedSuccess] = useState(false)\n const [lastOrderDetails, setLastOrderDetails] = useState<OrderDetails | null>(null)\n const [showOrderConfirmModal, setShowOrderConfirmModal] = useState(false)\n const [, setLiveNewsIndex] = useState(0)\n const [newsItems, setNewsItems] = useState<NewsFeedItem[]>(() =>\n allNewsItems.slice(0, 4).map((item, index) => ({\n ...item,\n displayId: `${item.id}-initial-${index}`,\n date: index === 0 ? 'Just now' : `${(index + 1) * 3} minutes ago`,\n isNew: false,\n }))\n )\n const resolvedUserSubscriptions =\n initialUserSubscriptions && initialUserSubscriptions.length > 0\n ? initialUserSubscriptions\n : optimisticUserSubscriptions\n\n useEffect(() => {\n if (initialUserSubscriptions?.length) {\n setOptimisticUserSubscriptions([])\n }\n }, [initialUserSubscriptions])\n\n const tokenPrice = saleData?.tokenPrice ?? 250\n const feeRate = (saleData?.feePercent ?? 0.5) / 100\n const totalSold = saleData?.totalSold ?? 0\n const supplyToSell = saleData?.supplyToSell ?? 50_000\n const percentSold = saleData?.percentSold ?? 0\n const offeringValuation = saleData?.offeringValuation ?? tokenPrice * supplyToSell\n const scStatus = saleData?.state?.status ?? 0\n const ipoStarted = scStatus === 1\n const statusLabel = saleData?.statusLabel ?? 'PREPARING'\n const statusColor = STATUS_COLOR[scStatus] ?? '#D4AF37'\n\n const totalSpend =\n manualOrderAmount !== null ? manualOrderAmount : Math.round((sliderValue / 100) * availableBalance)\n const grossTokens = totalSpend / tokenPrice\n const feeInTokens = grossTokens * feeRate\n const tokenQuantity = grossTokens - feeInTokens\n const orderTotal = totalSpend\n const estExposure = ((tokenQuantity / supplyToSell) * 100).toFixed(4)\n const hasInsufficientFunds = orderTotal > availableBalance\n\n // Sync availableBalance from wallet when it changes\n useEffect(() => {\n if (walletUsdcBalance != null) {\n setAvailableBalance(walletUsdcBalance)\n }\n }, [walletUsdcBalance])\n\n // Sync owned tokens from on-chain balance on load and when it changes\n useEffect(() => {\n if (walletPropertyTokenBalance != null) {\n setOwnedTokens(walletPropertyTokenBalance)\n setDisplayedOwnedTokens(walletPropertyTokenBalance)\n }\n }, [walletPropertyTokenBalance])\n\n const handleOrderButtonClick = () => {\n if (!ipoStarted || tokenQuantity === 0) {\n return\n }\n setShowOrderConfirmModal(true)\n }\n\n const isPurchaseInFlight = purchaseStatus === 'checking-allowance' || purchaseStatus === 'approving' || purchaseStatus === 'purchasing'\n\n const getOrderButtonText = () => {\n if (!isAuthenticated) return 'Sign In to Invest'\n if (purchaseStatus === 'checking-allowance') return 'Checking allowance…'\n if (purchaseStatus === 'approving') return 'Approving USDC…'\n if (purchaseStatus === 'purchasing') return 'Confirming purchase…'\n if (scStatus === 0) return 'Sale Not Open Yet'\n if (scStatus === 2) return 'Sale Completed'\n if (scStatus === 3) return 'Sale Paused'\n if (tokenQuantity === 0) return 'Enter Amount'\n return 'Place Order'\n }\n\n const isOrderButtonDisabled = () => {\n if (!isAuthenticated) return false\n if (isPurchaseInFlight) return true\n if (scStatus !== 1) return true\n if (tokenQuantity === 0) return true\n return false\n }\n\n const confirmOrder = async () => {\n setShowOrderConfirmModal(false)\n\n const tokenAmountInt = Math.floor(tokenQuantity)\n if (tokenAmountInt <= 0) return\n\n if (onPurchase) {\n try {\n await onPurchase(tokenAmountInt)\n } catch {\n return\n }\n }\n\n // Optimistic UI update (wallet balance will sync via walletUsdcBalance prop)\n if (walletUsdcBalance == null) {\n setAvailableBalance((prev) => prev - orderTotal)\n }\n\n const newTokens = ownedTokens + tokenAmountInt\n setOwnedTokens(newTokens)\n setDisplayedOwnedTokens(newTokens)\n setOwnedTokensJustUpdated(true)\n setLastOrderQuantity(tokenAmountInt)\n setTimeout(() => setOwnedTokensJustUpdated(false), 2000)\n\n const optimisticEntry: PropertySubscription = {\n propertyName,\n tokenSymbol,\n tokens: tokenAmountInt,\n value: orderTotal,\n avgPrice: tokenPrice,\n percentOfProperty: estExposure,\n timestamp: new Date().toISOString(),\n status: 'pending',\n }\n\n setOptimisticUserSubscriptions((prev) => [optimisticEntry, ...prev])\n\n setLastOrderDetails({\n tokens: tokenAmountInt,\n total: orderTotal,\n price: tokenPrice,\n })\n\n setOrderPlacedSuccess(true)\n setSliderValue(0)\n setManualOrderAmount(null)\n }\n\n useEffect(() => {\n const newsInterval = setInterval(() => {\n setLiveNewsIndex((prev) => {\n const nextIndex = (prev + 1) % allNewsItems.length\n setNewsItems((current) => {\n const incoming = allNewsItems[nextIndex]\n if (current.some((item) => item.id === incoming.id)) {\n return current\n }\n return [\n { ...incoming, displayId: `${incoming.id}-${Date.now()}`, date: 'Just now', isNew: true },\n ...current.slice(0, 3).map((item) => ({\n ...item,\n isNew: false,\n date: item.date === 'Just now' ? '8 seconds ago' : item.date,\n })),\n ]\n })\n return nextIndex\n })\n }, 8000)\n\n return () => clearInterval(newsInterval)\n }, [])\n\n if (saleData?.loading) {\n return <div className=\"py-16 px-8 text-[var(--color-text-secondary)] text-center text-[0.9rem]\">Loading sale data...</div>\n }\n\n return (\n <div className=\"flex flex-col gap-6 w-full\">\n <HeroGrid>\n <div className=\"asset-selector-wrapper\">\n <AssetSelectorBar\n propertyName={propertyName}\n tokenPrice={tokenPrice}\n offeringValuation={offeringValuation}\n />\n </div>\n <OfferingProgressCard\n ipoStarted={ipoStarted}\n statusLabel={statusLabel}\n statusColor={statusColor}\n scStatus={scStatus}\n tokenPrice={tokenPrice}\n offeringValuation={offeringValuation}\n percentSold={percentSold}\n totalSold={totalSold}\n supplyToSell={supplyToSell}\n />\n <VideoActivitySection ipoStarted={ipoStarted} />\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <OrderPanel\n statusLabel={statusLabel}\n statusColor={statusColor}\n ipoStarted={ipoStarted}\n tokenDisplayName={tokenDisplayName}\n tokenSymbol={tokenSymbol}\n isAuthenticated={isAuthenticated}\n tokenPrice={tokenPrice}\n feeRate={feeRate}\n supplyToSell={supplyToSell}\n availableBalance={availableBalance}\n displayedOwnedTokens={displayedOwnedTokens}\n ownedTokensJustUpdated={ownedTokensJustUpdated}\n lastOrderQuantity={lastOrderQuantity}\n orderPlacedSuccess={orderPlacedSuccess}\n lastOrderDetails={lastOrderDetails}\n tokenQuantity={tokenQuantity}\n feeInTokens={feeInTokens}\n orderTotal={orderTotal}\n sliderValue={sliderValue}\n manualOrderAmount={manualOrderAmount}\n setSliderValue={setSliderValue}\n setManualOrderAmount={setManualOrderAmount}\n onSignInClick={onSignIn}\n onOrderButtonClick={handleOrderButtonClick}\n orderButtonText={getOrderButtonText()}\n isOrderButtonDisabled={isOrderButtonDisabled()}\n hasInsufficientFunds={hasInsufficientFunds}\n onPlaceAnotherOrder={() => setOrderPlacedSuccess(false)}\n onDeposit={onDeposit}\n />\n {purchaseError && (\n <div style={{ marginTop: '0.75rem', padding: '0.75rem 1rem', borderRadius: '8px', background: 'rgba(246,70,93,0.1)', border: '1px solid rgba(246,70,93,0.3)', color: '#f6465d', fontSize: '0.8rem', fontWeight: 500 }}>\n {purchaseError}\n </div>\n )}\n </div>\n </HeroGrid>\n\n <div className=\"flex flex-col gap-6\">\n <GalleryMapSection propertyLocation={propertyLocationLabel} />\n <NewsOrdersSection\n newsItems={newsItems}\n userSubscriptions={resolvedUserSubscriptions}\n tokenPrice={tokenPrice}\n />\n </div>\n\n <OrderConfirmationModal\n open={showOrderConfirmModal}\n onClose={() => setShowOrderConfirmModal(false)}\n hasInsufficientFunds={hasInsufficientFunds}\n tokenQuantity={tokenQuantity}\n tokenPrice={tokenPrice}\n propertyName={propertyName}\n estExposure={estExposure}\n orderTotal={orderTotal}\n availableBalance={availableBalance}\n onConfirm={confirmOrder}\n />\n </div>\n )\n}\n\nconst HeroGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr auto;\n grid-template-rows: auto auto minmax(450px, 520px);\n gap: 1.5rem;\n width: 100%;\n max-width: 1800px;\n margin: 0 auto;\n\n & > div:nth-child(1) {\n grid-column: 1 / 2;\n grid-row: 1 / 2;\n }\n\n & > div:nth-child(2) {\n grid-column: 1 / 2;\n grid-row: 2 / 3;\n }\n\n & > div:nth-child(3) {\n grid-column: 1 / 2;\n grid-row: 3 / 4;\n }\n\n & > div:nth-child(4) {\n grid-column: 2 / 3;\n grid-row: 1 / 4;\n display: flex;\n flex-direction: column;\n }\n\n @media (max-width: 1024px) {\n grid-template-columns: 1fr;\n grid-template-rows: auto;\n gap: 1rem;\n\n & > div:nth-child(1) {\n display: none;\n }\n\n & > div:nth-child(2) {\n grid-column: 1 / -1;\n order: 1;\n }\n\n & > div:nth-child(4) {\n grid-column: 1 / -1;\n order: 2;\n }\n\n & > div:nth-child(3) {\n grid-column: 1 / -1;\n order: 3;\n }\n }\n`\n\n","import { useState } from 'react'\nimport styled from 'styled-components'\nimport { BiCoin, BiWallet, BiCreditCard, BiX } from 'react-icons/bi'\nimport { FaBitcoin } from 'react-icons/fa'\n\nconst PaymentOption = styled.div<{ $isSelected: boolean }>`\n display: flex;\n align-items: center;\n padding: 1rem;\n margin: 0.5rem 0;\n border-radius: 8px;\n background: ${(props) => (props.$isSelected ? 'rgba(0, 123, 255, 0.1)' : 'transparent')};\n border: 1px solid\n ${(props) => (props.$isSelected ? '#007bff' : 'rgba(255, 255, 255, 0.2)')};\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: rgba(0, 123, 255, 0.05);\n border-color: rgba(0, 123, 255, 0.5);\n }\n`\n\nconst RadioIndicator = styled.div<{ $isSelected: boolean }>`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 2px solid ${(props) => (props.$isSelected ? '#007bff' : 'rgba(255, 255, 255, 0.5)')};\n margin-left: 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &::after {\n content: '';\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: #007bff;\n opacity: ${(props) => (props.$isSelected ? 1 : 0)};\n transition: opacity 0.2s;\n }\n`\n\nconst PaymentMethodDetails = styled.div`\n background: rgba(0, 0, 0, 0.2);\n border-radius: 8px;\n padding: 1rem;\n margin-top: 0.5rem;\n margin-bottom: 1rem;\n animation: expandIn 0.3s ease-out;\n\n @keyframes expandIn {\n from {\n max-height: 0;\n opacity: 0;\n }\n to {\n max-height: 500px;\n opacity: 1;\n }\n }\n`\n\nconst ConfirmButton = styled.button<{ disabled?: boolean }>`\n background: ${(props) =>\n props.disabled ? 'rgba(255, 255, 255, 0.1)' : 'linear-gradient(to right, #d4af37, #f2d35b)'};\n border: none;\n border-radius: 8px;\n padding: 0.75rem 1.5rem;\n color: ${(props) => (props.disabled ? 'rgba(255, 255, 255, 0.5)' : '#000')};\n font-size: 1rem;\n font-weight: 600;\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n transition: all 0.2s;\n\n &:hover {\n background: ${(props) =>\n props.disabled ? 'rgba(255, 255, 255, 0.1)' : 'linear-gradient(to right, #f2d35b, #d4af37)'};\n transform: ${(props) => (props.disabled ? 'none' : 'translateY(-2px)')};\n }\n`\n\nexport type PaymentPopupProps = {\n isOpen: boolean\n onClose: () => void\n onConfirm: (method: string) => void\n selectedDates: Date[]\n totalCost: number\n isOwnerRate: boolean\n tokenPrice: number\n ownerRate: number\n marketRate: number\n userTokenHoldings: number\n propertyName: string\n}\n\nexport function PaymentPopup({\n isOpen,\n onClose,\n onConfirm,\n selectedDates,\n totalCost,\n isOwnerRate,\n tokenPrice,\n ownerRate,\n marketRate,\n userTokenHoldings,\n propertyName,\n}: PaymentPopupProps) {\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<'tokens' | 'deposit' | 'fiat' | 'crypto'>(\n 'tokens',\n )\n\n if (!isOpen) return null\n\n const startDate = selectedDates[0] ? new Date(selectedDates[0]) : new Date()\n const endDate = selectedDates[1] ? new Date(selectedDates[1]) : new Date()\n const nights = Math.max(1, Math.round((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)))\n\n const formatDate = (date: Date) =>\n new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n\n return (\n <div className=\"fixed inset-0 bg-black/70 flex justify-center items-center z-[1000]\">\n <div\n className=\"rounded-xl p-8 w-[90%] max-w-[500px] max-h-[90vh] overflow-y-auto border border-[rgba(212,175,55,0.3)] text-white\"\n style={{ background: 'linear-gradient(to right, #111, #1a1a1a)', animation: 'slideIn 0.3s ease-out' }}\n >\n <style>{`@keyframes slideIn { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }`}</style>\n <div className=\"flex justify-between items-center mb-6\">\n <h3 className=\"text-2xl m-0 text-white\">Complete Your Reservation</h3>\n <button onClick={onClose} className=\"bg-transparent border-none text-white/70 text-2xl cursor-pointer flex items-center justify-center p-1 transition-colors duration-200 hover:text-white\">\n <BiX />\n </button>\n </div>\n\n <div className=\"bg-black/20 rounded-lg p-4 mb-6\">\n <div className=\"flex justify-between mb-3\"><span>Property</span><span>{propertyName}</span></div>\n <div className=\"flex justify-between mb-3\"><span>Dates</span><span>{formatDate(startDate)} - {formatDate(endDate)}</span></div>\n <div className=\"flex justify-between mb-3\"><span>Nights</span><span>{nights}</span></div>\n <div className=\"flex justify-between mb-3\">\n <span>Rate per night</span>\n <span>{isOwnerRate ? `${ownerRate.toFixed(4)} tokens (~$${(ownerRate * tokenPrice).toFixed(2)})` : `${marketRate.toFixed(4)} tokens (~$${(marketRate * tokenPrice).toFixed(2)})`}</span>\n </div>\n <div className=\"flex justify-between pt-3 border-t border-white/10 font-semibold\">\n <span>Total</span>\n <span>{totalCost.toFixed(4)} tokens (~${(totalCost * tokenPrice).toFixed(2)})</span>\n </div>\n </div>\n\n <h4 className=\"text-[1.2rem] m-0 mb-4 text-white\">Select Payment Method</h4>\n\n <PaymentOption $isSelected={selectedPaymentMethod === 'tokens'} onClick={() => setSelectedPaymentMethod('tokens')}>\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#d4af37' }}><BiCoin size={24} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Loaf Tokens</div><div className=\"text-[0.85rem] text-white/70\">Pay with your Loaf token balance</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'tokens'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'tokens' && (\n <PaymentMethodDetails>\n <div>Available balance: {userTokenHoldings.toFixed(4)} tokens</div>\n {userTokenHoldings < totalCost && (\n <div className=\"text-[#ff4d4d] mt-2\">Insufficient balance. Please select another payment method.</div>\n )}\n </PaymentMethodDetails>\n )}\n\n <PaymentOption\n $isSelected={selectedPaymentMethod === 'deposit'}\n onClick={() => setSelectedPaymentMethod('deposit')}\n >\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#4dabf7' }}><BiWallet size={24} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Platform Deposit</div><div className=\"text-[0.85rem] text-white/70\">Use your available platform balance</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'deposit'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'deposit' && (\n <PaymentMethodDetails>\n <div>Available balance: $1,500.00</div>\n </PaymentMethodDetails>\n )}\n\n <PaymentOption $isSelected={selectedPaymentMethod === 'fiat'} onClick={() => setSelectedPaymentMethod('fiat')}>\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#82c91e' }}><BiCreditCard size={24} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Credit/Debit Card</div><div className=\"text-[0.85rem] text-white/70\">Pay with your credit or debit card</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'fiat'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'fiat' && (\n <PaymentMethodDetails>\n <div>Select a saved card or enter new card details</div>\n <div style={{ marginTop: '0.5rem' }}>\n <select\n style={{\n background: 'rgba(0, 0, 0, 0.3)',\n color: '#fff',\n padding: '0.5rem',\n borderRadius: '4px',\n border: '1px solid rgba(255, 255, 255, 0.2)',\n width: '100%',\n }}\n >\n <option value=\"\">Select a card</option>\n <option value=\"visa\">Visa ending in 4242</option>\n <option value=\"mastercard\">Mastercard ending in 5555</option>\n <option value=\"new\">+ Add new card</option>\n </select>\n </div>\n </PaymentMethodDetails>\n )}\n\n <PaymentOption\n $isSelected={selectedPaymentMethod === 'crypto'}\n onClick={() => setSelectedPaymentMethod('crypto')}\n >\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-white/10 mr-4\" style={{ color: '#f08c00' }}><FaBitcoin size={20} /></div>\n <div className=\"flex-1\"><div className=\"font-semibold mb-1\">Cryptocurrency</div><div className=\"text-[0.85rem] text-white/70\">Pay with Bitcoin, Ethereum, or other cryptocurrencies</div></div>\n <RadioIndicator $isSelected={selectedPaymentMethod === 'crypto'} />\n </PaymentOption>\n\n {selectedPaymentMethod === 'crypto' && (\n <PaymentMethodDetails>\n <div>Select cryptocurrency:</div>\n <div style={{ marginTop: '0.5rem' }}>\n <select\n style={{\n background: 'rgba(0, 0, 0, 0.3)',\n color: '#fff',\n padding: '0.5rem',\n borderRadius: '4px',\n border: '1px solid rgba(255, 255, 255, 0.2)',\n width: '100%',\n }}\n >\n <option value=\"btc\">Bitcoin (BTC)</option>\n <option value=\"eth\">Ethereum (ETH)</option>\n <option value=\"usdc\">USD Coin (USDC)</option>\n <option value=\"usdt\">Tether (USDT)</option>\n </select>\n </div>\n </PaymentMethodDetails>\n )}\n\n <div className=\"flex justify-between mt-8\">\n <button\n onClick={onClose}\n className=\"bg-transparent text-white/80 border border-white/30 rounded-lg px-6 py-3 text-base cursor-pointer transition-all duration-200 hover:bg-white/[0.05] hover:text-white\"\n >Back to Booking</button>\n <ConfirmButton\n onClick={() => onConfirm(selectedPaymentMethod)}\n disabled={selectedPaymentMethod === 'tokens' && userTokenHoldings < totalCost}\n >\n Confirm Payment\n </ConfirmButton>\n </div>\n </div>\n </div>\n )\n}\n\nexport default PaymentPopup\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport styled from 'styled-components'\nimport {\n BiCalendar,\n BiChevronDown,\n BiInfoCircle,\n BiPencil,\n BiX,\n} from 'react-icons/bi'\nimport PaymentPopup from './payment-popup'\n\ntype ReservationColor = { bg: string; border: string };\nconst SUMMER_MONTHS = new Set([11, 0, 1]); // Dec, Jan, Feb\n\ntype ReservationRange = {\n arrival: Date;\n departure: Date;\n nights: number;\n tokens: number;\n tokensPerDay: number;\n dailyRate: number;\n totalCost: number;\n tokenPriceAtBooking: number;\n color: ReservationColor;\n};\n\ntype CalendarDay = {\n date: Date;\n isCurrentMonth: boolean;\n isAvailable: boolean;\n isToday?: boolean;\n};\n\nexport type OwnerBookingProps = {\n propertyName?: string | null\n token: { price?: number | null }\n}\n\nconst OwnerBooking = ({ propertyName, token }: OwnerBookingProps) => {\n const today = useMemo(() => {\n const base = new Date();\n base.setHours(0, 0, 0, 0);\n return base;\n }, []);\n\n const [currentYear, setCurrentYear] = useState(today.getFullYear());\n const [currentMonth, setCurrentMonth] = useState(today.getMonth());\n const [dateRanges, setDateRanges] = useState<ReservationRange[]>([]);\n const [selectedDates, setSelectedDates] = useState<Date[]>([]);\n const [hoverDate, setHoverDate] = useState<Date | null>(null);\n const [isDateSelectorOpen, setIsDateSelectorOpen] = useState(false);\n const [selectorYear, setSelectorYear] = useState(today.getFullYear());\n const [isPaymentPopupOpen, setIsPaymentPopupOpen] = useState(false);\n const dateSelectorRef = useRef<HTMLDivElement | null>(null);\n\n const tokenPrice = token.price ?? 700;\n const userTokenHoldings = 2.2;\n\n const MIN_NIGHTS = 3;\n\n const reservationColors: ReservationColor[] = [\n { bg: 'rgba(212, 175, 55, 0.25)', border: 'rgba(212, 175, 55, 0.6)' },\n { bg: 'rgba(86, 180, 235, 0.25)', border: 'rgba(86, 180, 235, 0.6)' },\n { bg: 'rgba(230, 126, 34, 0.25)', border: 'rgba(230, 126, 34, 0.6)' },\n { bg: 'rgba(46, 204, 113, 0.25)', border: 'rgba(46, 204, 113, 0.6)' },\n ];\n\n // ─── Rate Helpers ────────────────────────────────────────────────\n const calculateTokensPerDayOwner = useCallback(() => {\n if (tokenPrice <= 0) return 0;\n const target = 650;\n const raw = target / tokenPrice;\n return Math.ceil(raw * 10000) / 10000;\n }, [tokenPrice]);\n\n const calculateTokensPerDayMarket = useCallback(() => {\n if (tokenPrice <= 0) return 0;\n const target = 900;\n const raw = target / tokenPrice;\n return Math.ceil(raw * 10000) / 10000;\n }, [tokenPrice]);\n\n const qualifiesForOwnerRate = userTokenHoldings >= 0.1;\n const getTokensPerDay = useCallback(\n () => (qualifiesForOwnerRate ? calculateTokensPerDayOwner() : calculateTokensPerDayMarket()),\n [qualifiesForOwnerRate, calculateTokensPerDayOwner, calculateTokensPerDayMarket],\n );\n\n const getRateLabel = () => (qualifiesForOwnerRate ? \"Owner's Rate\" : 'Market Rate');\n\n // ─── Selection Stats ─────────────────────────────────────────────\n const selectionStats = useMemo(() => {\n if (selectedDates.length !== 2) return null;\n\n const [a, b] = selectedDates;\n const start = a < b ? a : b;\n const end = a < b ? b : a;\n const nights = Math.ceil((end.getTime() - start.getTime()) / 86400000);\n const tokensPerDay = getTokensPerDay();\n const tokens = nights * tokensPerDay;\n const usd = tokens * tokenPrice;\n\n return { nights, tokensPerDay, tokens, usd, start, end };\n }, [selectedDates, getTokensPerDay, tokenPrice]);\n\n const totalNights = useMemo(() => dateRanges.reduce((sum, r) => sum + r.nights, 0), [dateRanges]);\n const totalTokens = useMemo(() => dateRanges.reduce((sum, r) => sum + r.tokens, 0), [dateRanges]);\n const totalUSD = totalTokens * tokenPrice;\n\n // ─── Calendar Days ───────────────────────────────────────────────\n const generateCalendarDays = useCallback(\n (year: number, month: number): CalendarDay[] => {\n const first = new Date(year, month, 1);\n const last = new Date(year, month + 1, 0);\n const startDOW = first.getDay();\n\n const days: CalendarDay[] = [];\n\n // Prev month filler\n const prevLast = new Date(year, month, 0).getDate();\n for (let i = startDOW - 1; i >= 0; i--) {\n const d = new Date(year, month - 1, prevLast - i);\n days.push({ date: d, isCurrentMonth: false, isAvailable: false });\n }\n\n // Current month\n for (let d = 1; d <= last.getDate(); d++) {\n const date = new Date(year, month, d);\n const isAvailable = SUMMER_MONTHS.has(month) || date >= today;\n days.push({\n date,\n isCurrentMonth: true,\n isAvailable,\n isToday: date.toDateString() === today.toDateString(),\n });\n }\n\n // Next month filler → fill up to 6 weeks\n while (days.length < 42) {\n const next = new Date(year, month + 1, days.length - (last.getDate() + startDOW) + 1);\n days.push({ date: next, isCurrentMonth: false, isAvailable: false });\n }\n\n return days;\n },\n [today],\n );\n\n const calendarDays = useMemo(\n () => generateCalendarDays(currentYear, currentMonth),\n [currentYear, currentMonth, generateCalendarDays],\n );\n\n const isDateReserved = useCallback(\n (date: Date) => dateRanges.some((r) => date >= r.arrival && date <= r.departure),\n [dateRanges],\n );\n\n const handleDateClick = (day: CalendarDay) => {\n if (!day.isCurrentMonth || !day.isAvailable || isDateReserved(day.date)) return;\n\n if (selectedDates.length === 0 || selectedDates.length === 2) {\n setSelectedDates([day.date]);\n return;\n }\n\n const [first] = selectedDates;\n const start = new Date(Math.min(first.getTime(), day.date.getTime()));\n const end = new Date(Math.max(first.getTime(), day.date.getTime()));\n\n const cur = new Date(start);\n while (cur <= end) {\n if (isDateReserved(cur)) return;\n cur.setDate(cur.getDate() + 1);\n }\n\n setSelectedDates([start, end]);\n setHoverDate(null);\n };\n\n const handleDayHover = (day: CalendarDay) => {\n if (selectedDates.length === 1 && day.isCurrentMonth && day.isAvailable && !isDateReserved(day.date)) {\n setHoverDate(day.date);\n }\n };\n\n const handleMouseLeave = () => setHoverDate(null);\n\n const isInHoverRange = (date: Date) => {\n if (selectedDates.length !== 1 || !hoverDate) return false;\n const [anchor] = selectedDates;\n const left = anchor < hoverDate ? anchor : hoverDate;\n const right = anchor < hoverDate ? hoverDate : anchor;\n return date >= left && date <= right;\n };\n\n const isInSelectedRange = (date: Date) => {\n if (selectedDates.length !== 2) return false;\n const [a, b] = selectedDates;\n const left = a < b ? a : b;\n const right = a < b ? b : a;\n return date >= left && date <= right;\n };\n\n const getSavedRangeInfo = (date: Date) => {\n for (let i = 0; i < dateRanges.length; i++) {\n const r = dateRanges[i];\n if (date >= r.arrival && date <= r.departure) {\n return { found: true, color: r.color, index: i + 1 };\n }\n }\n return { found: false } as const;\n };\n\n const addDateRange = () => {\n if (!selectionStats) return;\n if (selectionStats.nights < MIN_NIGHTS) {\n alert(`Minimum stay is ${MIN_NIGHTS} nights`);\n return;\n }\n\n const color = reservationColors[dateRanges.length % reservationColors.length];\n\n const newRange: ReservationRange = {\n arrival: selectionStats.start,\n departure: selectionStats.end,\n nights: selectionStats.nights,\n tokens: selectionStats.tokens,\n tokensPerDay: selectionStats.tokensPerDay,\n dailyRate: selectionStats.tokensPerDay * tokenPrice,\n totalCost: selectionStats.usd,\n tokenPriceAtBooking: tokenPrice,\n color,\n };\n\n setDateRanges((prev) => [...prev, newRange].sort((a, b) => a.arrival.getTime() - b.arrival.getTime()));\n setSelectedDates([]);\n };\n\n const removeDateRange = (index: number) => {\n setDateRanges((prev) => prev.filter((_, i) => i !== index));\n };\n\n const editDateRange = (index: number) => {\n const range = dateRanges[index];\n setSelectedDates([range.arrival, range.departure]);\n removeDateRange(index);\n };\n\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ] as const;\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const;\n\n const setMonthYear = useCallback(\n (month: number, year: number) => {\n setCurrentMonth(month);\n setCurrentYear(year);\n },\n [setCurrentMonth, setCurrentYear],\n );\n\n const shiftMonth = useCallback(\n (direction: 'prev' | 'next') => {\n const delta = direction === 'prev' ? -1 : 1;\n let newMonth = currentMonth + delta;\n let newYear = currentYear;\n\n if (newMonth < 0) {\n newMonth = 11;\n newYear -= 1;\n } else if (newMonth > 11) {\n newMonth = 0;\n newYear += 1;\n }\n\n setMonthYear(newMonth, newYear);\n setSelectorYear(newYear);\n },\n [currentMonth, currentYear, setMonthYear],\n );\n\n const jumpToNextAvailable = useCallback(() => {\n for (let offset = 1; offset <= 12; offset++) {\n const candidateMonth = (currentMonth + offset) % 12;\n if (!SUMMER_MONTHS.has(candidateMonth)) continue;\n\n const yearIncrement = Math.floor((currentMonth + offset) / 12);\n const targetYear = currentYear + yearIncrement;\n setMonthYear(candidateMonth, targetYear);\n setSelectorYear(targetYear);\n return;\n }\n }, [currentMonth, currentYear, setMonthYear]);\n\n const toggleDateSelector = () => setIsDateSelectorOpen((prev) => !prev);\n const changeYear = (increment: number) => setSelectorYear((year) => year + increment);\n const handleMonthYearSelect = (month: number) => {\n setMonthYear(month, selectorYear);\n setIsDateSelectorOpen(false);\n };\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dateSelectorRef.current && !dateSelectorRef.current.contains(event.target as Node)) {\n setIsDateSelectorOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const primaryReservation = dateRanges[0];\n\n return (\n <div className=\"flex flex-col gap-8 text-white max-w-[1200px] mx-auto px-4 py-8 pb-12\">\n <section className=\"bg-[#050505] border border-[rgba(212,175,55,0.35)] rounded-3xl p-10 shadow-[0_25px_60px_rgba(0,0,0,0.45)] md:p-7\">\n <h1 className=\"text-[clamp(2rem,4vw,2.75rem)] font-semibold text-white mb-8\">Reserve Your Stay</h1>\n\n <div className=\"grid gap-8\" style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))' }}>\n <div className=\"bg-white/[0.04] border border-[rgba(212,175,55,0.2)] rounded-[18px] p-7\">\n <h2 className=\"text-base tracking-[0.08em] uppercase text-[rgba(212,175,55,0.9)] text-center mb-5\">Residence Calendar</h2>\n <div className=\"flex justify-between items-center gap-4 mb-5 flex-wrap\">\n <h3 className=\"text-[1.35rem] font-medium flex items-center gap-1\">\n <BiCalendar size={20} />\n <div className=\"relative inline-block\" ref={dateSelectorRef}>\n <button\n onClick={toggleDateSelector}\n className=\"bg-none border-none text-white text-[1.15rem] flex items-center gap-[0.35rem] cursor-pointer px-2 py-1 rounded-md transition-all duration-200 hover:text-[#f2d35b] hover:bg-white/[0.05]\"\n >\n {monthNames[currentMonth]} {currentYear}\n <BiChevronDown size={16} />\n </button>\n\n <DateSelectorDropdown $isOpen={isDateSelectorOpen}>\n <div className=\"p-3\">\n <div className=\"flex justify-between items-center mb-[0.6rem]\">\n <button onClick={() => changeYear(-1)} className=\"bg-none border-none text-[#d4af37] text-[1.1rem] cursor-pointer px-2 py-1 transition-colors duration-200 hover:text-[#f2d35b]\">&lt;</button>\n <span className=\"text-white text-base\">{selectorYear}</span>\n <button onClick={() => changeYear(1)} className=\"bg-none border-none text-[#d4af37] text-[1.1rem] cursor-pointer px-2 py-1 transition-colors duration-200 hover:text-[#f2d35b]\">&gt;</button>\n </div>\n\n <h4 className=\"m-0 mt-[0.65rem] mb-[0.4rem] text-[0.85rem] uppercase tracking-[0.08em] text-[rgba(212,175,55,0.9)]\">Select Month</h4>\n <div className=\"grid grid-cols-3 gap-2\">\n {monthNames.map((month, index) => (\n <MonthButton\n key={month}\n $isSelected={currentMonth === index && currentYear === selectorYear}\n onClick={() => handleMonthYearSelect(index)}\n >\n {month.substring(0, 3)}\n </MonthButton>\n ))}\n </div>\n </div>\n </DateSelectorDropdown>\n </div>\n </h3>\n <div className=\"flex gap-2 items-center flex-wrap\">\n <button onClick={() => shiftMonth('prev')} className=\"bg-[rgba(212,175,55,0.15)] border-none rounded-md text-[#d4af37] w-8 h-8 flex items-center justify-center cursor-pointer transition-colors duration-200 hover:bg-[rgba(212,175,55,0.3)]\">&lt;</button>\n <button onClick={() => shiftMonth('next')} className=\"bg-[rgba(212,175,55,0.15)] border-none rounded-md text-[#d4af37] w-8 h-8 flex items-center justify-center cursor-pointer transition-colors duration-200 hover:bg-[rgba(212,175,55,0.3)]\">&gt;</button>\n <button onClick={jumpToNextAvailable} className=\"bg-[rgba(212,175,55,0.18)] border border-[rgba(212,175,55,0.4)] rounded-md text-[#f2d35b] px-3 py-[0.35rem] text-[0.85rem] cursor-pointer whitespace-nowrap transition-all duration-200 hover:bg-[rgba(212,175,55,0.3)]\">Next Available Date</button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-7 gap-[0.45rem]\" onMouseLeave={handleMouseLeave}>\n {dayNames.map((day) => (\n <div key={day} className=\"text-center text-[0.8rem] text-white/55 py-[0.35rem]\">{day}</div>\n ))}\n\n {calendarDays.map((day, index) => {\n const savedRangeInfo = day.isAvailable && day.isCurrentMonth ? getSavedRangeInfo(day.date) : { found: false as const };\n const isSelected = selectedDates.some((date) => date.toDateString() === day.date.toDateString());\n const inSelectedRange = day.isAvailable && day.isCurrentMonth && isInSelectedRange(day.date);\n const inHoverRange = day.isAvailable && day.isCurrentMonth && isInHoverRange(day.date);\n\n return (\n <DayCell\n key={index}\n $isAvailable={day.isAvailable}\n $isCurrentMonth={day.isCurrentMonth}\n $isToday={day.isToday}\n $isSelected={isSelected}\n $isInSelectedRange={inSelectedRange}\n $savedRangeColor={savedRangeInfo.found ? savedRangeInfo.color : null}\n $isInHoverRange={inHoverRange}\n onClick={() => handleDateClick(day)}\n onMouseEnter={() => handleDayHover(day)}\n >\n {day.date.getDate()}\n {savedRangeInfo.found && (\n <span className=\"absolute top-[2px] right-1 text-[0.55rem] font-bold text-[#f4d07f]\">{savedRangeInfo.index}</span>\n )}\n </DayCell>\n );\n })}\n </div>\n\n {selectedDates.length > 0 && (\n <div className=\"flex items-center gap-4 bg-white/[0.03] border border-white/[0.08] rounded-[10px] p-4 mt-5 mb-2\">\n <div className=\"flex-1 text-center\">\n <div className=\"text-[0.75rem] tracking-[0.08em] uppercase text-white/55 mb-1\">Arrival</div>\n <div className=\"text-[1.1rem] font-semibold\">{selectedDates[0].toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}</div>\n </div>\n <span>→</span>\n <div className=\"flex-1 text-center\">\n <div className=\"text-[0.75rem] tracking-[0.08em] uppercase text-white/55 mb-1\">Departure</div>\n <div className=\"text-[1.1rem] font-semibold\">{selectedDates[selectedDates.length - 1].toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}</div>\n </div>\n </div>\n )}\n\n <div className=\"flex gap-3 mt-6 flex-wrap\">\n {(selectedDates.length === 2 || dateRanges.length > 0) && (\n <AddDateRangeButton\n onClick={addDateRange}\n disabled={!selectionStats || selectionStats.nights < MIN_NIGHTS}\n >\n {dateRanges.length === 0 ? 'Add Date Range' : 'Add Another Date Range'}\n </AddDateRangeButton>\n )}\n\n {selectedDates.length === 2 && (\n <ConfirmButton\n onClick={addDateRange}\n disabled={!selectionStats || selectionStats.nights < MIN_NIGHTS}\n >\n Confirm\n </ConfirmButton>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-6\">\n <div className=\"bg-black/35 rounded-2xl p-6 border border-[rgba(212,175,55,0.2)]\">\n <h3 className=\"text-[1.3rem] font-semibold mb-4\">Reservation Summary</h3>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Property</div>\n <div className=\"text-[0.95rem] font-medium text-right\">{propertyName ?? '—'}</div>\n </div>\n\n {selectionStats && (\n <>\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Current Selection</div>\n <div className=\"text-[0.95rem] font-medium text-right\">\n {selectionStats.start.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })} - {selectionStats.end.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })}\n </div>\n </div>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Nights</div>\n <div className=\"text-[0.95rem] font-medium text-right\">{selectionStats.nights}</div>\n </div>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Market Rate per Night</div>\n <div className=\"text-[0.95rem] font-medium text-right\">\n {calculateTokensPerDayMarket().toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${(calculateTokensPerDayMarket() * tokenPrice).toFixed(2)}</div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 flex flex-col gap-1\">\n <span className=\"flex items-center\">\n Owner&apos;s Rate per Night\n <span className=\"relative inline-flex items-center ml-[0.35rem] cursor-help group\">\n <BiInfoCircle size={16} color=\"rgba(212,175,55,0.8)\" />\n <div className=\"absolute bottom-[120%] left-1/2 -translate-x-1/2 bg-black/92 border border-[rgba(212,175,55,0.4)] rounded-[10px] px-4 py-3 text-[0.8rem] leading-[1.4] w-[240px] opacity-0 invisible transition-all duration-200 text-white/90 z-[15] group-hover:opacity-100 group-hover:visible group-hover:-translate-y-[6px] group-hover:-translate-x-1/2\">\n Owners hold ≥0.1 Elara in the property and qualify for discounted nightly rates.\n </div>\n </span>\n </span>\n <span className=\"text-[0.75rem] text-[rgba(212,175,55,0.9)]\">Your Holdings: {userTokenHoldings.toFixed(2)} Elara</span>\n </div>\n <div className=\"text-[0.95rem] font-medium text-right\">\n {selectionStats.tokensPerDay.toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${(selectionStats.tokensPerDay * tokenPrice).toFixed(2)}</div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-start border-t border-white/15 mt-3 pt-4 gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 font-semibold\">Selection Total ({getRateLabel()})</div>\n <div className=\"text-[1.05rem] font-semibold text-right\">\n {selectionStats.tokens.toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${selectionStats.usd.toFixed(2)}</div>\n </div>\n </div>\n </>\n )}\n\n {dateRanges.length > 0 && (\n <>\n <div className=\"flex justify-between items-start py-3 border-b border-[rgba(212,175,55,0.12)] gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75\">Reservations</div>\n <div className=\"text-[0.95rem] font-medium text-right\">{dateRanges.length}</div>\n </div>\n\n {dateRanges.map((range, index) => (\n <ReservationCard key={`${range.arrival.toISOString()}-${index}`} $accent={range.color.border}>\n <div className=\"flex justify-between items-center mb-3\">\n <div className=\"font-semibold text-[0.95rem]\">Reservation {index + 1}</div>\n <div className=\"flex gap-[0.35rem]\">\n <ActionButton onClick={() => editDateRange(index)}>\n <BiPencil size={16} />\n </ActionButton>\n <ActionButton $variant=\"danger\" onClick={() => removeDateRange(index)}>\n <BiX size={18} />\n </ActionButton>\n </div>\n </div>\n\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex-1\">\n <div className=\"text-[0.75rem] text-white/60 mb-[0.15rem]\">Arrival</div>\n <div className=\"font-medium\">{range.arrival.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })}</div>\n </div>\n <div className=\"text-white/40\">→</div>\n <div className=\"flex-1\">\n <div className=\"text-[0.75rem] text-white/60 mb-[0.15rem]\">Departure</div>\n <div className=\"font-medium\">{range.departure.toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' })}</div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-center border-t border-white/[0.08] pt-[0.65rem]\">\n <div className=\"text-[0.85rem] text-white/70\">{range.nights} nights</div>\n <div className=\"text-right\">\n <div className=\"text-[0.95rem] font-semibold text-[#d4af37]\">{range.tokens.toFixed(4)} Elara</div>\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${range.totalCost.toFixed(2)}</div>\n </div>\n </div>\n </ReservationCard>\n ))}\n\n <div className=\"flex justify-between items-start border-t border-white/15 mt-3 pt-4 gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 font-semibold\">Total Stay</div>\n <div className=\"text-[1.05rem] font-semibold text-right\">{totalNights} {totalNights === 1 ? 'night' : 'nights'}</div>\n </div>\n\n <div className=\"flex justify-between items-start border-t border-white/15 mt-3 pt-4 gap-4 flex-wrap\">\n <div className=\"text-[0.95rem] text-white/75 font-semibold\">Total Cost ({getRateLabel()})</div>\n <div className=\"text-[1.05rem] font-semibold text-right\">\n {totalTokens.toFixed(4)} Elara\n <div className=\"text-[0.85rem] text-white/55 mt-[0.2rem]\">≈ ${totalUSD.toFixed(2)}</div>\n </div>\n </div>\n </>\n )}\n </div>\n\n {dateRanges.length > 0 && (\n <button\n onClick={() => setIsPaymentPopupOpen(true)}\n className=\"mt-2 w-full border-none rounded-xl p-4 text-base font-semibold text-black cursor-pointer transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_12px_30px_rgba(212,175,55,0.3)]\"\n style={{ background: 'linear-gradient(90deg, #d4af37, #f2d35b)' }}\n >Confirm Reservation</button>\n )}\n </div>\n </div>\n </section>\n\n {isPaymentPopupOpen && primaryReservation && (\n <PaymentPopup\n isOpen={isPaymentPopupOpen}\n onClose={() => setIsPaymentPopupOpen(false)}\n onConfirm={() => setIsPaymentPopupOpen(false)}\n selectedDates={[primaryReservation.arrival, primaryReservation.departure]}\n totalCost={primaryReservation.tokens}\n isOwnerRate={qualifiesForOwnerRate}\n tokenPrice={tokenPrice}\n ownerRate={calculateTokensPerDayOwner()}\n marketRate={calculateTokensPerDayMarket()}\n userTokenHoldings={userTokenHoldings}\n propertyName={propertyName ?? 'Property'}\n />\n )}\n </div>\n );\n};\n\nexport default OwnerBooking;\n\n// ─── Styled Components (kept for dynamic/complex styling) ────────────────────────────────────────────────\n\nconst DateSelectorDropdown = styled.div<{ $isOpen: boolean }>`\n position: absolute;\n top: calc(100% + 0.5rem);\n left: 0;\n background: #111;\n border: 1px solid rgba(212, 175, 55, 0.4);\n border-radius: 10px;\n width: 240px;\n max-height: 320px;\n overflow: hidden;\n box-shadow: 0 20px 35px rgba(0, 0, 0, 0.45);\n display: ${({ $isOpen }) => ($isOpen ? 'block' : 'none')};\n z-index: 10;\n`;\n\nconst MonthButton = styled.button<{ $isSelected?: boolean }>`\n background: ${({ $isSelected }) => ($isSelected ? 'rgba(212, 175, 55, 0.2)' : 'transparent')};\n border: 1px solid\n ${({ $isSelected }) => ($isSelected ? '#d4af37' : 'rgba(255, 255, 255, 0.12)')};\n color: ${({ $isSelected }) => ($isSelected ? '#d4af37' : '#fff')};\n border-radius: 6px;\n padding: 0.4rem 0;\n cursor: pointer;\n font-size: 0.9rem;\n transition: all 0.2s;\n\n &:hover {\n background: rgba(212, 175, 55, 0.15);\n border-color: rgba(212, 175, 55, 0.5);\n }\n`;\n\nconst DayCell = styled.div<{\n $isAvailable: boolean;\n $isCurrentMonth: boolean;\n $isSelected: boolean;\n $isInSelectedRange: boolean;\n $isToday?: boolean;\n $savedRangeColor: ReservationColor | null;\n $isInHoverRange: boolean;\n}>`\n aspect-ratio: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n border: 1px solid transparent;\n cursor: ${({ $isAvailable, $savedRangeColor }) =>\n $isAvailable && !$savedRangeColor ? 'pointer' : 'default'};\n opacity: ${({ $isCurrentMonth }) => ($isCurrentMonth ? 1 : 0.35)};\n color: ${({ $isAvailable }) => ($isAvailable ? '#fff' : 'rgba(255, 255, 255, 0.35)')};\n font-weight: ${({ $isSelected, $isInSelectedRange, $savedRangeColor, $isInHoverRange }) =>\n $isSelected || $isInSelectedRange || $savedRangeColor || $isInHoverRange ? 600 : 400};\n position: relative;\n transition: background 0.15s ease, border-color 0.15s ease;\n\n background: ${({ $isSelected, $isInSelectedRange, $savedRangeColor, $isInHoverRange }) => {\n if ($savedRangeColor) return $savedRangeColor.bg;\n if ($isSelected) return 'rgba(212, 175, 55, 0.45)';\n if ($isInSelectedRange) return 'rgba(212, 175, 55, 0.25)';\n if ($isInHoverRange) return 'rgba(212, 175, 55, 0.18)';\n return 'transparent';\n }};\n\n border-color: ${({ $isSelected, $isInSelectedRange, $savedRangeColor, $isToday, $isAvailable }) => {\n if ($savedRangeColor) return $savedRangeColor.border;\n if ($isSelected || $isInSelectedRange) return 'rgba(212, 175, 55, 0.6)';\n if ($isToday) return 'rgba(212, 175, 55, 0.5)';\n if ($isAvailable) return 'rgba(212, 175, 55, 0.25)';\n return 'transparent';\n }};\n\n &:hover {\n opacity: ${({ $isCurrentMonth, $savedRangeColor }) =>\n $isCurrentMonth ? ($savedRangeColor ? 0.85 : 1) : 0.35};\n }\n`;\n\nconst AddDateRangeButton = styled.button`\n flex: 1;\n min-width: 180px;\n background: rgba(212, 175, 55, 0.18);\n border: 1px solid rgba(212, 175, 55, 0.34);\n border-radius: 10px;\n color: #f2d35b;\n padding: 0.85rem 1rem;\n font-size: 0.95rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover:enabled {\n background: rgba(212, 175, 55, 0.3);\n }\n\n &:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n`;\n\nconst ConfirmButton = styled(AddDateRangeButton)`\n flex: 0 0 auto;\n min-width: 140px;\n background: rgba(212, 175, 55, 0.35);\n border-color: rgba(212, 175, 55, 0.6);\n font-weight: 600;\n`;\n\nconst ReservationCard = styled.div<{ $accent: string }>`\n background: rgba(0, 0, 0, 0.4);\n border-radius: 12px;\n padding: 1rem;\n margin-top: 1rem;\n border-left: 4px solid ${({ $accent }) => $accent};\n`;\n\nconst ActionButton = styled.button<{ $variant?: 'default' | 'danger' }>`\n background: none;\n border: none;\n color: ${({ $variant }) => ($variant === 'danger' ? '#ff7676' : '#d4af37')};\n cursor: pointer;\n padding: 0.25rem;\n display: inline-flex;\n transition: color 0.2s;\n\n &:hover {\n color: ${({ $variant }) => ($variant === 'danger' ? '#ff8f8f' : '#f4d07f')};\n }\n`;","import { useMemo } from 'react'\nimport styled from 'styled-components'\n\nexport type ValuationRecentSale = {\n readonly imageUrl?: string\n readonly price?: number | null\n readonly currency?: string | null\n readonly saleDate?: string | null\n readonly address?: string | null\n readonly suburb?: string | null\n readonly bedrooms?: number | null\n readonly bathrooms?: number | null\n readonly landSize?: string | null\n}\n\nexport type ValuationSummary = {\n readonly propertyId?: number\n readonly lastPrice?: number | null\n readonly fairValue?: number | null\n readonly totalTokens?: number | null\n readonly confidence?: string | null\n readonly undervaluedThreshold?: number | null\n readonly overvaluedThreshold?: number | null\n readonly valuationDeltaPercent?: number | null\n readonly valuationStatus?: string | null\n readonly areaDemand?: string | null\n readonly propertyMoat?: string | null\n readonly recentSales?: ValuationRecentSale[]\n}\n\nexport type ValuationHistoryPoint = {\n readonly timestamp: number\n readonly valuation: number\n readonly fairValue?: number | null\n}\n\nexport type PropertyValuationProps = {\n propertyName: string\n tokenPrice: number\n totalTokens?: number | null\n summary?: ValuationSummary | null\n history?: ValuationHistoryPoint[]\n loading?: boolean\n error?: string | null\n}\n\nconst CHART_WIDTH = 1200\nconst CHART_HEIGHT = 200\nconst CHART_PADDING = 10\n\nconst FALLBACK_RECENT_SALES: ValuationRecentSale[] = [\n {\n imageUrl: 'https://images.unsplash.com/photo-1464146072230-91cabc968266?auto=format&fit=crop&w=1200&q=80',\n price: 16500000,\n saleDate: 'Nov 2024',\n address: '15 Wentworth Road',\n suburb: 'Vaucluse',\n bedrooms: 5,\n bathrooms: 5,\n landSize: '1,420 sqm',\n },\n {\n imageUrl: 'https://images.unsplash.com/photo-1505691938895-1758d7feb511?auto=format&fit=crop&w=1200&q=80',\n price: 14900000,\n saleDate: 'Sep 2024',\n address: '42 Vaucluse Road',\n suburb: 'Vaucluse',\n bedrooms: 4,\n bathrooms: 4,\n landSize: '980 sqm',\n },\n {\n imageUrl: 'https://images.unsplash.com/photo-1505693314120-0d443867891c?auto=format&fit=crop&w=1200&q=80',\n price: 13250000,\n saleDate: 'Jun 2024',\n address: '18 Olola Avenue',\n suburb: 'Vaucluse',\n bedrooms: 4,\n bathrooms: 3,\n landSize: '860 sqm',\n },\n]\n\nexport function PropertyValuation({\n propertyName,\n tokenPrice,\n totalTokens,\n summary = null,\n history = [],\n loading = false,\n error = null,\n}: PropertyValuationProps) {\n const now = useMemo(() => new Date(), [])\n\n const lastPrice = useMemo(() => {\n const fallback = Number.isFinite(tokenPrice) && tokenPrice > 0 ? tokenPrice : 0\n if (!summary?.lastPrice || summary.lastPrice <= 0) {\n return fallback\n }\n return summary.lastPrice\n }, [summary, tokenPrice])\n\n const fairValue = useMemo(() => {\n if (summary?.fairValue && summary.fairValue > 0) {\n return summary.fairValue\n }\n return lastPrice || 1\n }, [summary, lastPrice])\n\n const tokensOutstanding = useMemo(() => {\n if (summary?.totalTokens && summary.totalTokens > 0) {\n return summary.totalTokens\n }\n if (totalTokens && totalTokens > 0) {\n return totalTokens\n }\n return 50_000\n }, [summary, totalTokens])\n\n const undervaluedThreshold = summary?.undervaluedThreshold ?? fairValue * 0.9\n const overvaluedThreshold = summary?.overvaluedThreshold ?? fairValue * 1.1\n const gaugePosition = calculatePositionFromPrice(lastPrice, undervaluedThreshold, fairValue, overvaluedThreshold)\n\n const valuationStatus = summary?.valuationStatus\n ?? (lastPrice < fairValue ? 'Undervalued' : lastPrice > fairValue ? 'Overvalued' : 'Fair Value')\n\n const valuationDelta = summary?.valuationDeltaPercent ?? ((lastPrice - fairValue) / fairValue) * 100\n const valuationDeltaFormatted = `${valuationDelta >= 0 ? '+' : ''}${valuationDelta.toFixed(1)}%`\n\n const { valuationPath, fairValuePath, axisLabels } = useMemo(() => buildChartPaths(history, fairValue), [history, fairValue])\n\n const recentSales = useMemo(() => {\n if (summary?.recentSales?.length) {\n return summary.recentSales\n }\n return FALLBACK_RECENT_SALES\n }, [summary])\n\n const areaDemandLabel = summary?.areaDemand ?? 'Hot'\n const propertyMoatLabel = summary?.propertyMoat ?? 'Wide'\n\n return (\n <ValuationWrapper>\n <SectionTitle>Valuation Model</SectionTitle>\n <LoafPricingSection>\n <SectionSubheading>Loaf Pricing Model</SectionSubheading>\n <PricingModelCard>\n <PricingModelHeader>\n <PricingModelTitle>{propertyName}</PricingModelTitle>\n <PricingModelValue>\n <div className=\"valuation-info\">\n <div>Valuation as of</div>\n <div><span style={{ color: 'var(--color-accent)' }}>{now.toLocaleDateString('en-US', { day: '2-digit', month: 'short', year: 'numeric' })}</span></div>\n <div>{now.toLocaleTimeString('en-AU', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false, timeZone: 'Australia/Sydney' })} AEST</div>\n </div>\n </PricingModelValue>\n </PricingModelHeader>\n\n <PricingModelDetails>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n <PricingModelDetail>\n <PropertyDetailLabel>Last Price</PropertyDetailLabel>\n <PricingDetailValue>{formatCurrency(lastPrice)}</PricingDetailValue>\n </PricingModelDetail>\n\n <PricingModelDetail>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', width: '100%' }}>\n <PropertyDetailLabel>Fair Value</PropertyDetailLabel>\n <span style={{ fontSize: '0.75rem', color: '#4CAF50', fontWeight: 'bold' }}>\n Confidence: {summary?.confidence ?? 'High'}\n </span>\n </div>\n <PricingDetailValue style={{ color: 'var(--color-accent)', fontWeight: 'bold' }}>\n {formatCurrency(fairValue)}{' '}\n <span style={{ fontSize: '0.85em', fontWeight: 'normal', opacity: 0.8 }}>\n ({formatCurrency(fairValue * tokensOutstanding, { maximumFractionDigits: 0 })})\n </span>\n </PricingDetailValue>\n </PricingModelDetail>\n </div>\n\n <ValuationIndicator className=\"mobile-only-valuation\">\n <ValuationHeader>\n <ValuationTitle style={{ color: '#4CAF50' }}>Undervalued</ValuationTitle>\n <ValuationTitle style={{ color: 'var(--color-accent)' }}>Fair Value</ValuationTitle>\n <ValuationTitle style={{ color: '#F44336' }}>Overvalued</ValuationTitle>\n </ValuationHeader>\n\n <ValuationGauge>\n <GaugeBackground />\n <GaugeIndicator type=\"fairValue\" position={50} />\n <GaugePriceTag position={gaugePosition}>\n <span>Last Price</span>\n <span>{formatCurrency(lastPrice)}</span>\n </GaugePriceTag>\n <GaugeIndicator type=\"lastPrice\" position={gaugePosition} />\n </ValuationGauge>\n\n <ValuationDetails>\n <ValuationItem>\n <ValuationValue style={{ color: '#4CAF50' }}>\n <span>&lt; {formatCurrency(undervaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(undervaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: 'var(--color-accent)' }}>\n <span>{formatCurrency(fairValue)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(fairValue * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: '#F44336' }}>\n <span>&gt; {formatCurrency(overvaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(overvaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n </ValuationDetails>\n </ValuationIndicator>\n\n <HiddenMobileChart>\n <h3 style={{ marginBottom: '1rem', fontSize: '1.1rem', color: '#fff' }}>Historical Valuation</h3>\n <ChartContainer>\n <ChartBackground>\n {axisLabels.map((label, index) => (\n <YAxisLabel key={`${label}-${index}`} style={{ top: `${10 + index * 22}%` }}>\n {label}\n </YAxisLabel>\n ))}\n <ValuationSvg viewBox={`0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`} preserveAspectRatio=\"none\">\n {valuationPath ? (\n <path d={valuationPath} fill=\"none\" stroke=\"#D4AF37\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n {fairValuePath ? (\n <path d={fairValuePath} fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n </ValuationSvg>\n </ChartBackground>\n </ChartContainer>\n </HiddenMobileChart>\n\n <PricingModelDetail>\n <PropertyDetailLabel>Valuation</PropertyDetailLabel>\n <ValuationCallout>\n <span style={{ color: '#4CAF50', fontWeight: 600, fontSize: '16px', letterSpacing: '0.3px' }}>{valuationStatus}</span>\n <ValuationBadge>{valuationDeltaFormatted}</ValuationBadge>\n </ValuationCallout>\n </PricingModelDetail>\n\n <PricingModelDetail>\n <PropertyDetailLabel>Area Demand</PropertyDetailLabel>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <PricingDetailValue>{areaDemandLabel}</PricingDetailValue>\n <AreaDemandChart>\n <svg width=\"100%\" height=\"60\" viewBox=\"0 0 180 60\" preserveAspectRatio=\"none\">\n <rect x=\"0\" y=\"0\" width=\"180\" height=\"20\" fill=\"rgba(244, 67, 54, 0.2)\" />\n <rect x=\"0\" y=\"20\" width=\"180\" height=\"20\" fill=\"rgba(255, 152, 0, 0.15)\" />\n <rect x=\"0\" y=\"40\" width=\"180\" height=\"20\" fill=\"rgba(158, 158, 158, 0.15)\" />\n <line x1=\"0\" y1=\"20\" x2=\"180\" y2=\"20\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"0\" y1=\"40\" x2=\"180\" y2=\"40\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"45\" y1=\"0\" x2=\"45\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"90\" y1=\"0\" x2=\"90\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"135\" y1=\"0\" x2=\"135\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <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\" />\n </svg>\n <ChartLabel style={{ top: '3px' }}>Hot</ChartLabel>\n <ChartLabel style={{ top: '23px' }}>Warm</ChartLabel>\n <ChartLabel style={{ top: '43px' }}>Cold</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: 0 }}>2020</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '45px' }}>2021</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '90px' }}>2022</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '135px' }}>2023</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', right: 0 }}>2025</ChartLabel>\n </AreaDemandChart>\n </div>\n </PricingModelDetail>\n\n <PricingModelDetail>\n <PropertyDetailLabel>Property Moat</PropertyDetailLabel>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <PricingDetailValue>{propertyMoatLabel}</PricingDetailValue>\n <AreaDemandChart>\n <svg width=\"100%\" height=\"60\" viewBox=\"0 0 180 60\" preserveAspectRatio=\"none\">\n <rect x=\"0\" y=\"0\" width=\"180\" height=\"20\" fill=\"rgba(0, 137, 123, 0.2)\" />\n <rect x=\"0\" y=\"20\" width=\"180\" height=\"20\" fill=\"rgba(102, 187, 106, 0.15)\" />\n <rect x=\"0\" y=\"40\" width=\"180\" height=\"20\" fill=\"rgba(200, 230, 201, 0.15)\" />\n <line x1=\"0\" y1=\"20\" x2=\"180\" y2=\"20\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"0\" y1=\"40\" x2=\"180\" y2=\"40\" stroke=\"rgba(255,255,255,0.1)\" strokeWidth=\"1\" />\n <line x1=\"45\" y1=\"0\" x2=\"45\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"90\" y1=\"0\" x2=\"90\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <line x1=\"135\" y1=\"0\" x2=\"135\" y2=\"60\" stroke=\"rgba(255,255,255,0.05)\" strokeWidth=\"1\" />\n <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\" />\n </svg>\n <ChartLabel style={{ top: '3px' }}>Wide Moat</ChartLabel>\n <ChartLabel style={{ top: '23px' }}>Narrow Moat</ChartLabel>\n <ChartLabel style={{ top: '43px' }}>No Moat</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: 0 }}>2020</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '45px' }}>2021</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '90px' }}>2022</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', left: '135px' }}>2023</ChartLabel>\n <ChartLabel style={{ bottom: '-15px', right: 0 }}>2025</ChartLabel>\n </AreaDemandChart>\n </div>\n </PricingModelDetail>\n </PricingModelDetails>\n\n <ValuationIndicator className=\"desktop-only-valuation\">\n <ValuationHeader>\n <ValuationTitle style={{ color: '#4CAF50' }}>Undervalued</ValuationTitle>\n <ValuationTitle style={{ color: 'var(--color-accent)' }}>Fair Value</ValuationTitle>\n <ValuationTitle style={{ color: '#F44336' }}>Overvalued</ValuationTitle>\n </ValuationHeader>\n <ValuationGauge>\n <GaugeBackground />\n <GaugeIndicator type=\"fairValue\" position={50} />\n <GaugePriceTag position={gaugePosition}>\n <span>Last Price</span>\n <span>{formatCurrency(lastPrice)}</span>\n </GaugePriceTag>\n <GaugeIndicator type=\"lastPrice\" position={gaugePosition} />\n </ValuationGauge>\n <ValuationDetails>\n <ValuationItem>\n <ValuationValue style={{ color: '#0ecb81' }}>\n <span>&lt; {formatCurrency(undervaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(undervaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: '#f0b90b' }}>\n <span>{formatCurrency(fairValue)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(fairValue * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n <ValuationItem>\n <ValuationValue style={{ color: '#f6465d' }}>\n <span>&gt; {formatCurrency(overvaluedThreshold)}</span>\n <span className=\"valuation-amount-span\" style={{ fontSize: '0.8rem', fontWeight: 'normal' }}>\n ({formatMillions(overvaluedThreshold * tokensOutstanding)})\n </span>\n </ValuationValue>\n </ValuationItem>\n </ValuationDetails>\n </ValuationIndicator>\n\n <h3 className=\"desktop-only-historical-chart\" style={{ marginBottom: '1rem', fontSize: '1.1rem', color: '#fff' }}>\n Historical Valuation\n </h3>\n\n <ChartContainer className=\"desktop-only-historical-chart\">\n <ChartBackground>\n {axisLabels.map((label, index) => (\n <YAxisLabel key={`${label}-${index}`} style={{ top: `${10 + index * 22}%` }}>\n {label}\n </YAxisLabel>\n ))}\n <ValuationSvg viewBox={`0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`} preserveAspectRatio=\"none\">\n {valuationPath ? (\n <path d={valuationPath} fill=\"none\" stroke=\"#D4AF37\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n {fairValuePath ? (\n <path d={fairValuePath} fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n ) : null}\n </ValuationSvg>\n </ChartBackground>\n </ChartContainer>\n </PricingModelCard>\n </LoafPricingSection>\n\n <RecentSalesSection>\n <SectionSubheading>Recent Sales in Comparable Suburbs</SectionSubheading>\n <SwipeIndicator>\n Swipe to see more\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" />\n </svg>\n </SwipeIndicator>\n <SalesGrid>\n {recentSales.map((sale, index) => (\n <SaleCard key={`${sale.address ?? sale.suburb ?? 'sale'}-${index}`}>\n <SaleImageContainer>\n <SaleImage\n src={sale.imageUrl ?? 'https://images.unsplash.com/photo-1505693314120-0d443867891c?auto=format&fit=crop&w=1200&q=80'}\n alt={sale.address ?? 'Recent sale'}\n />\n <SoldTag>\n SOLD\n <SoldIcon />\n </SoldTag>\n </SaleImageContainer>\n <SalePriceBar>\n <SalePriceLeft>\n <SalePriceLabel>Sale Price</SalePriceLabel>\n <SalePriceAmount>{formatCurrency(sale.price)}</SalePriceAmount>\n </SalePriceLeft>\n <SaleDate>{sale.saleDate ?? '—'}</SaleDate>\n </SalePriceBar>\n <SaleContent>\n <SaleAddress>{sale.address ?? 'Private Sale'}</SaleAddress>\n <SaleSuburb>{sale.suburb ?? ''}</SaleSuburb>\n </SaleContent>\n <SaleStatsBar>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <SaleStatItem>\n <BedIcon />\n {formatBedroomLabel(sale.bedrooms)}\n </SaleStatItem>\n <SaleStatItem>\n <BathIcon />\n {formatBathroomLabel(sale.bathrooms)}\n </SaleStatItem>\n </div>\n <SaleStatItem style={{ color: 'var(--color-text-secondary)' }}>\n {sale.landSize ?? '—'}\n </SaleStatItem>\n </SaleStatsBar>\n </SaleCard>\n ))}\n </SalesGrid>\n </RecentSalesSection>\n {loading ? <LoadingOverlay>Loading valuation data…</LoadingOverlay> : null}\n {error ? <ErrorMessage>{error}</ErrorMessage> : null}\n </ValuationWrapper>\n )\n}\n\nfunction formatCurrency(value?: number | null, options?: Intl.NumberFormatOptions) {\n if (value == null || Number.isNaN(value)) {\n return '—'\n }\n\n const { minimumFractionDigits = 2, maximumFractionDigits = 2, ...rest } = options ?? {}\n const minDigits = Math.max(0, Math.min(20, minimumFractionDigits))\n const maxDigits = Math.max(minDigits, Math.min(20, maximumFractionDigits))\n\n return value.toLocaleString('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: minDigits,\n maximumFractionDigits: maxDigits,\n ...rest,\n })\n}\n\nfunction formatMillions(value: number) {\n if (!Number.isFinite(value) || value === 0) {\n return '$0m'\n }\n return `$${(value / 1_000_000).toFixed(2)}m`\n}\n\nfunction formatBedroomLabel(bedrooms?: number | null) {\n if (!Number.isFinite(bedrooms)) return '—'\n return `${bedrooms} Bed`\n}\n\nfunction formatBathroomLabel(bathrooms?: number | null) {\n if (!Number.isFinite(bathrooms)) return '—'\n return `${bathrooms} Bath`\n}\n\nfunction buildChartPaths(history: ValuationHistoryPoint[], fallbackValue: number) {\n if (!history.length) {\n return { valuationPath: null, fairValuePath: null, axisLabels: ['$0', '$0', '$0', '$0', '$0'] }\n }\n\n const values = history.map((point) => point.valuation)\n const minValue = Math.min(...values)\n const maxValue = Math.max(...values)\n const minTime = Math.min(...history.map((point) => point.timestamp))\n const maxTime = Math.max(...history.map((point) => point.timestamp))\n\n const adjustedMinValue = minValue === maxValue ? minValue * 0.9 : minValue\n const adjustedMaxValue = minValue === maxValue ? maxValue * 1.1 : maxValue\n\n const valuationSegments = history.map((point, index) => {\n const x = normalize(point.timestamp, minTime, maxTime, CHART_PADDING, CHART_WIDTH - CHART_PADDING)\n const y = mapValueToY(point.valuation, adjustedMinValue, adjustedMaxValue)\n return `${index === 0 ? 'M' : 'L'} ${x} ${y}`\n })\n\n const fairValuePoints = history.filter((point) => Number.isFinite(point.fairValue))\n const fairValueSegments = fairValuePoints.map((point, index) => {\n const x = normalize(point.timestamp, minTime, maxTime, CHART_PADDING, CHART_WIDTH - CHART_PADDING)\n const y = mapValueToY(point.fairValue ?? fallbackValue, adjustedMinValue, adjustedMaxValue)\n return `${index === 0 ? 'M' : 'L'} ${x} ${y}`\n })\n\n const axisLabels = buildAxisLabels(adjustedMinValue, adjustedMaxValue)\n\n return {\n valuationPath: valuationSegments.length > 1 ? valuationSegments.join(' ') : null,\n fairValuePath: fairValueSegments.length > 1 ? fairValueSegments.join(' ') : null,\n axisLabels,\n }\n}\n\nfunction normalize(value: number, min: number, max: number, targetMin: number, targetMax: number) {\n if (max === min) return (targetMin + targetMax) / 2\n return targetMin + ((value - min) / (max - min)) * (targetMax - targetMin)\n}\n\nfunction mapValueToY(value: number, min: number, max: number) {\n const normalized = normalize(value, min, max, 0, 1)\n const clamped = Math.min(1, Math.max(0, normalized))\n const drawableHeight = CHART_HEIGHT - CHART_PADDING * 2\n return CHART_PADDING + (1 - clamped) * drawableHeight\n}\n\nfunction buildAxisLabels(min: number, max: number) {\n const steps = 5\n const labels: string[] = []\n for (let i = 0; i < steps; i += 1) {\n const ratio = i / (steps - 1)\n const value = max - ratio * (max - min)\n labels.push(formatCurrency(value, { maximumFractionDigits: 0, minimumFractionDigits: 0 }))\n }\n return labels\n}\n\nfunction calculatePositionFromPrice(price: number, undervaluedPrice: number, fairValue: number, overvaluedPrice: number) {\n if (price <= undervaluedPrice) return 0\n if (price >= overvaluedPrice) return 100\n if (price < fairValue) {\n return (50 * (price - undervaluedPrice)) / (fairValue - undervaluedPrice)\n }\n return 50 + (50 * (price - fairValue)) / (overvaluedPrice - fairValue)\n}\n\nconst ValuationIndicator = styled.div`\n background-color: rgba(50, 52, 58, 0.95);\n border-radius: 6px;\n padding: 1rem;\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n\n &.desktop-only-valuation {\n @media (max-width: 480px) {\n display: none;\n }\n }\n\n &.mobile-only-valuation {\n display: none;\n @media (max-width: 480px) {\n display: block;\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n }\n`\n\nconst GaugeIndicator = styled.div<{ type: 'fairValue' | 'lastPrice'; position: number }>`\n position: absolute;\n left: ${(props) => props.position}%;\n top: 0.35rem;\n transform: translateX(-50%);\n width: 3px;\n height: 36px;\n border-radius: 999px;\n background: ${(props) => (props.type === 'fairValue' ? '#f0b90b' : 'rgba(10, 12, 18, 0.95)')};\n box-shadow: ${(props) => (props.type === 'lastPrice' ? '0 6px 18px rgba(0, 0, 0, 0.65)' : '0 6px 16px rgba(0, 0, 0, 0.45)')};\n`\n\nconst GaugePriceTag = styled.div<{ position: number }>`\n position: absolute;\n left: ${(props) => props.position}%;\n top: -46px;\n transform: translateX(-50%);\n background: rgba(7, 9, 13, 0.85);\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 8px;\n padding: 6px 10px;\n font-size: 0.75rem;\n color: #fff;\n font-weight: 500;\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n backdrop-filter: blur(6px);\n\n span:last-child {\n font-size: 0.95em;\n font-weight: 600;\n letter-spacing: 0.2px;\n color: var(--color-accent);\n }\n`\n\nconst HiddenMobileChart = styled.div`\n display: none;\n @media (max-width: 480px) {\n display: block;\n }\n`\n\nconst ValuationWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2rem;\n`\n\nconst LoadingOverlay = styled.div`\n margin-top: 1rem;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.05);\n color: rgba(255, 255, 255, 0.8);\n font-size: 0.9rem;\n`\n\nconst ErrorMessage = styled.div`\n margin-top: 1rem;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n background: rgba(244, 67, 54, 0.15);\n color: #ff8a80;\n font-size: 0.9rem;\n border: 1px solid rgba(244, 67, 54, 0.4);\n`\n\nconst SectionTitle = styled.h2`\n margin: 0;\n font-size: clamp(1.75rem, 2.5vw, 2.25rem);\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.01em;\n`\n\nconst LoafPricingSection = styled.div`\n background-color: rgba(30, 32, 38, 0.95);\n border-radius: 8px;\n padding: 1.25rem;\n margin-bottom: 1.5rem;\n`\n\nconst SectionSubheading = styled.h2`\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.02em;\n`\n\nconst PricingModelCard = styled.div`\n background-color: rgba(40, 42, 48, 0.95);\n border-radius: 8px;\n padding: 1.5rem;\n margin-top: 1rem;\n`\n\nconst PricingModelHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1.5rem;\n gap: 1rem;\n\n .valuation-info {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n font-size: 0.85rem;\n color: rgba(255, 255, 255, 0.75);\n }\n`\n\nconst PricingModelTitle = styled.h3`\n margin: 0;\n font-size: 1.2rem;\n font-weight: 600;\n color: #fff;\n`\n\nconst PricingModelValue = styled.div`\n font-size: 1.4rem;\n font-weight: 700;\n color: var(--color-primary);\n\n @media (max-width: 768px) {\n font-size: 1.2rem;\n }\n`\n\nconst PricingModelDetails = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 1.5rem;\n margin-bottom: 1.5rem;\n`\n\nconst PricingModelDetail = styled.div`\n background-color: rgba(50, 52, 58, 0.95);\n border-radius: 6px;\n padding: 1rem;\n`\n\nconst PropertyDetailLabel = styled.div`\n font-size: 0.85rem;\n color: rgba(255, 255, 255, 0.7);\n margin-bottom: 0.5rem;\n`\n\nconst PricingDetailValue = styled.div`\n font-size: 1rem;\n color: #fff;\n font-weight: 500;\n`\n\nconst ValuationHeader = styled.div`\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.75rem;\n`\n\nconst ValuationTitle = styled.div`\n font-size: 0.9rem;\n color: rgba(255, 255, 255, 0.7);\n`\n\nconst ValuationGauge = styled.div`\n position: relative;\n width: 100%;\n padding: 1.1rem 0 2rem;\n margin: 0.75rem 0 1rem;\n`\n\nconst GaugeBackground = styled.div`\n width: 100%;\n height: 18px;\n border-radius: 999px;\n background: linear-gradient(90deg, #0ecb81 0%, #4dd482 30%, #f8e36c 50%, #f98b6c 70%, #f6465d 100%);\n position: relative;\n overflow: hidden;\n box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.35), 0 8px 18px rgba(0, 0, 0, 0.25);\n`\n\nconst ValuationDetails = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 1rem;\n`\n\nconst ValuationItem = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst ValuationValue = styled.div`\n font-size: 1rem;\n font-weight: 600;\n color: #fff;\n`\n\nconst ChartContainer = styled.div`\n width: 100%;\n height: 301.52px;\n margin-top: 1.5rem;\n background-color: rgba(50, 52, 58, 0.5);\n border-radius: 6px;\n padding: 1rem;\n position: relative;\n`\n\nconst ChartBackground = styled.div`\n position: relative;\n height: 100%;\n width: 100%;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 8px;\n`\n\nconst ValuationSvg = styled.svg`\n position: absolute;\n top: 10px;\n right: 0;\n bottom: 25px;\n left: 0;\n overflow: visible;\n width: 100%;\n height: calc(100% - 35px);\n`\n\nconst YAxisLabel = styled.div`\n position: absolute;\n left: -40px;\n font-size: 10px;\n color: rgba(255, 255, 255, 0.6);\n text-align: right;\n padding-right: 5px;\n`\n\nconst ValuationCallout = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: linear-gradient(90deg, rgba(76, 175, 80, 0.05) 0%, rgba(76, 175, 80, 0.1) 100%);\n border-radius: 8px;\n padding: 10px 16px;\n border: 1px solid rgba(76, 175, 80, 0.2);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n`\n\nconst ValuationBadge = styled.div`\n background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%);\n color: white;\n padding: 5px 12px;\n border-radius: 20px;\n font-size: 14px;\n font-weight: 600;\n box-shadow: 0 2px 4px rgba(76, 175, 80, 0.25);\n`\n\nconst AreaDemandChart = styled.div`\n height: 60px;\n width: 100%;\n position: relative;\n`\n\nconst ChartLabel = styled.div`\n position: absolute;\n font-size: 9px;\n color: rgba(255, 255, 255, 0.7);\n`\n\nconst RecentSalesSection = styled.div`\n background-color: rgba(30, 32, 38, 0.95);\n border-radius: 8px;\n padding: 1.25rem;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n position: relative;\n }\n`\n\nconst SalesGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 1.5rem;\n margin-top: 1rem;\n\n @media (max-width: 768px) {\n display: flex;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n scroll-behavior: smooth;\n -webkit-overflow-scrolling: touch;\n gap: 1rem;\n padding-bottom: 1rem;\n\n &::-webkit-scrollbar {\n display: none;\n }\n scrollbar-width: none;\n }\n`\n\nconst SaleCard = styled.div`\n background-color: var(--color-card, #1e2329);\n border-radius: var(--border-radius, 8px);\n overflow: hidden;\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n border: 1px solid rgba(255, 255, 255, 0.05);\n\n &:hover {\n transform: translateY(-4px);\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);\n }\n\n @media (max-width: 768px) {\n min-width: 280px;\n width: 85%;\n scroll-snap-align: start;\n flex-shrink: 0;\n margin-right: 0.5rem;\n\n &:last-child {\n margin-right: 1rem;\n }\n }\n`\n\nconst SaleImageContainer = styled.div`\n position: relative;\n width: 100%;\n height: 200px;\n overflow: hidden;\n`\n\nconst SaleImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n transition: transform 0.3s ease;\n\n ${SaleCard}:hover & {\n transform: scale(1.05);\n }\n`\n\nconst SoldTag = styled.div`\n position: absolute;\n top: 1rem;\n right: 1rem;\n background-color: var(--color-accent, #f0b90b);\n color: var(--color-background, #0b0e11);\n font-weight: 600;\n font-size: 0.75rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n`\n\nconst SoldIcon = styled.div`\n display: none;\n`\n\nconst SalePriceBar = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n background: linear-gradient(90deg, rgba(240, 185, 11, 0.1) 0%, rgba(240, 185, 11, 0.05) 100%);\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n`\n\nconst SalePriceLeft = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst SalePriceLabel = styled.span`\n font-size: 0.7rem;\n color: rgba(255, 255, 255, 0.5);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n`\n\nconst SalePriceAmount = styled.span`\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--color-accent, #f0b90b);\n`\n\nconst SaleContent = styled.div`\n padding: 1rem;\n`\n\nconst SaleAddress = styled.h3`\n margin: 0;\n margin-bottom: 0.25rem;\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text, #eaecef);\n`\n\nconst SaleSuburb = styled.div`\n font-size: 0.8rem;\n color: var(--color-text-secondary, #848e9c);\n margin-bottom: 0.5rem;\n`\n\nconst SaleStatsBar = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n background-color: rgba(0, 0, 0, 0.3);\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n`\n\nconst SaleStatItem = styled.div`\n display: flex;\n align-items: center;\n gap: 0.25rem;\n font-size: 0.8rem;\n color: var(--color-text-secondary, #848e9c);\n\n svg {\n width: 14px;\n height: 14px;\n opacity: 0.7;\n }\n`\n\nconst SaleDate = styled.div`\n font-size: 0.75rem;\n color: var(--color-text-secondary, #848e9c);\n`\n\nconst SwipeIndicator = styled.div`\n display: none;\n\n @media (max-width: 768px) {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 0.75rem;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.8rem;\n\n svg {\n margin-left: 0.25rem;\n animation: swipeAnimation 1.5s infinite;\n }\n\n @keyframes swipeAnimation {\n 0% { transform: translateX(0); }\n 50% { transform: translateX(5px); }\n 100% { transform: translateX(0); }\n }\n }\n`\n\nconst BedIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\" />\n </svg>\n)\n\nconst BathIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\" />\n </svg>\n)\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport styled, { css, keyframes } from 'styled-components'\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`\n\nconst pulse = keyframes`\n 0%, 100% { transform: scale(1); opacity: 0.8; }\n 50% { transform: scale(1.2); opacity: 1; }\n`\n\nconst FeatureTooltip = styled.div<{ $visible: boolean }>`\n position: absolute;\n transform: translate(-50%, calc(-100% - 24px));\n min-width: 180px;\n max-width: 220px;\n padding: 0.65rem 0.85rem;\n border-radius: 10px;\n border: 1px solid var(--color-accent, #f0b90b);\n background: rgba(20, 23, 29, 0.95);\n color: white;\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.35);\n opacity: ${(p) => (p.$visible ? 1 : 0)};\n visibility: ${(p) => (p.$visible ? 'visible' : 'hidden')};\n transition: opacity 0.2s ease, transform 0.2s ease;\n pointer-events: none;\n z-index: 20;\n\n h4 {\n margin: 0 0 0.2rem;\n font-size: 0.9rem;\n color: var(--color-accent, #f0b90b);\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.78rem;\n color: rgba(255, 255, 255, 0.85);\n }\n\n &::after {\n content: '';\n position: absolute;\n bottom: -8px;\n left: 50%;\n transform: translateX(-50%);\n border-width: 8px 7px 0;\n border-style: solid;\n border-color: rgba(20, 23, 29, 0.95) transparent transparent transparent;\n filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.35));\n }\n`\n\nconst GalleryOverlay = styled.div`\n position: fixed;\n inset: 0;\n z-index: 1000;\n background: rgba(0, 0, 0, 0.92);\n display: flex;\n flex-direction: column;\n animation: ${fadeIn} 0.3s ease;\n`\n\nconst GalleryHeader = styled.div`\n position: relative;\n padding: 1.5rem 2rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0.85) 0%, transparent 100%);\n z-index: 10;\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 1rem;\n }\n`\n\nconst PropertyInfo = styled.div`\n color: white;\n\n h2 {\n font-size: 1.25rem;\n font-weight: 600;\n margin: 0;\n }\n\n p {\n margin: 0.2rem 0 0;\n opacity: 0.8;\n font-size: 0.95rem;\n }\n`\n\nconst CloseButton = styled.button`\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: rgba(255, 255, 255, 0.25);\n transform: rotate(90deg);\n }\n`\n\nconst MainImageContainer = styled.div`\n position: relative;\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 80px 20px 140px;\n\n @media (max-width: 768px) {\n padding: 60px 0 110px;\n }\n`\n\nconst MainImage = styled.img<{ $visible: boolean }>`\n max-width: 90%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 12px;\n box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55);\n opacity: ${(p) => (p.$visible ? 1 : 0)};\n pointer-events: ${(p) => (p.$visible ? 'auto' : 'none')};\n transition: opacity 300ms ease;\n position: absolute;\n inset: 0;\n margin: auto;\n\n @media (max-width: 768px) {\n max-width: 100%;\n }\n`\n\nconst Hotspot = styled.button<{ $visible: boolean }>`\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n background: var(--color-accent, #f0b90b);\n color: #0b0e13;\n transform: translate(-50%, -50%);\n opacity: ${(p) => (p.$visible ? 1 : 0)};\n pointer-events: ${(p) => (p.$visible ? 'auto' : 'none')};\n animation: ${(p) => (p.$visible ? pulse : 'none')} 2s infinite;\n transition: transform 200ms ease;\n\n &:hover {\n transform: translate(-50%, -50%) scale(1.2);\n }\n`\n\nconst ThumbnailStrip = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem 2rem;\n display: flex;\n gap: 0.75rem;\n overflow-x: auto;\n background: linear-gradient(0deg, rgba(0, 0, 0, 0.9) 0%, transparent 100%);\n\n @media (max-width: 768px) {\n display: none;\n }\n`\n\nconst Thumbnail = styled.button<{ $active: boolean }>`\n width: 86px;\n height: 64px;\n border-radius: 6px;\n overflow: hidden;\n border: 2px solid ${(p) => (p.$active ? 'var(--color-accent, #f0b90b)' : 'transparent')};\n opacity: ${(p) => (p.$active ? 1 : 0.45)};\n transition: all 0.2s ease;\n background: transparent;\n padding: 0;\n\n &:hover {\n opacity: 1;\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`\n\nconst NavigationButton = styled.button<{ $dir: 'prev' | 'next' }>`\n position: absolute;\n top: 50%;\n ${(p) => (p.$dir === 'prev' ? 'left: 2rem;' : 'right: 2rem;')}\n transform: translateY(-50%);\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 1px solid rgba(255, 255, 255, 0.2);\n background: rgba(255, 255, 255, 0.12);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n @media (max-width: 768px) {\n display: none;\n }\n`\n\nconst SliderContainer = styled.div`\n position: absolute;\n bottom: 110px;\n left: 50%;\n transform: translateX(-50%);\n width: min(860px, 90%);\n background: rgba(0, 0, 0, 0.8);\n border-radius: 16px;\n padding: 0.75rem 1.5rem;\n backdrop-filter: blur(12px);\n user-select: none;\n\n @media (max-width: 768px) {\n bottom: 70px;\n width: 85%;\n }\n`\n\nconst SliderTrack = styled.div`\n position: relative;\n height: 4px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 999px;\n cursor: pointer;\n`\n\nconst SliderProgress = styled.div<{ $progress: number }>`\n position: absolute;\n inset: 0;\n width: ${(p) => p.$progress}%;\n background: linear-gradient(90deg, var(--color-accent, #f0b90b), rgba(240, 185, 11, 0.5));\n border-radius: inherit;\n`\n\nconst SliderThumb = styled.div<{ $position: number }>`\n position: absolute;\n top: 50%;\n left: ${(p) => p.$position}%;\n transform: translate(-50%, -50%);\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--color-accent, #f0b90b);\n border: 3px solid white;\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3);\n`\n\nconst SliderLabels = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 0.75rem;\n font-size: 0.75rem;\n color: rgba(255, 255, 255, 0.7);\n\n span {\n cursor: pointer;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n`\n\nconst MobileDots = styled.div`\n position: absolute;\n bottom: 1.5rem;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n gap: 0.35rem;\n\n @media (min-width: 769px) {\n display: none;\n }\n`\n\nconst MobileDot = styled.button<{ $active: boolean }>`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: none;\n background: ${(p) => (p.$active ? 'var(--color-accent, #f0b90b)' : 'rgba(255,255,255,0.3)')};\n ${(p) =>\n p.$active &&\n css`\n transform: scale(1.2);\n `}\n`\n\nexport type PropertyGalleryHotspot = {\n id: number\n x: number\n y: number\n title: string\n description: string\n}\n\nexport type PropertyGalleryImage = {\n src: string\n alt: string\n label: string\n hotspots?: PropertyGalleryHotspot[]\n}\n\ntype PropertyPhotoGalleryProps = {\n isOpen: boolean\n onClose: () => void\n startIndex?: number\n images?: PropertyGalleryImage[]\n title?: string\n subtitle?: string\n}\n\nconst DEFAULT_IMAGES: PropertyGalleryImage[] = [\n {\n src: '/properties/elara/28-derby-street-elara-vaucluse-front-view.jpg',\n alt: 'Front view',\n label: 'Entrance',\n hotspots: [\n { id: 1, x: 50, y: 38, title: 'Sydney Harbour Vista', description: 'Iconic skyline views' },\n { id: 2, x: 40, y: 55, title: 'Architectural Lines', description: 'Tiered sculptural facade' },\n ],\n },\n {\n src: '/properties/elara/28-derby-street-elara-vaucluse-sydney-living-room.jpg',\n alt: 'Living room',\n label: 'Living',\n hotspots: [\n { id: 3, x: 32, y: 42, title: 'Floor-to-ceiling glass', description: 'Walls of light + harbour' },\n { id: 4, x: 68, y: 64, title: 'Marble floors', description: 'Imported Italian slab work' },\n ],\n },\n {\n src: '/properties/elara/28-derby-street-elara-vaucluse-sydney-harbour-view.jpg',\n alt: 'Harbour view',\n label: 'Views',\n hotspots: [\n { id: 5, x: 48, y: 32, title: 'Opera House', description: 'Framed iconic outlook' },\n { id: 6, x: 70, y: 44, title: 'Harbour Bridge', description: 'Harbour bridge axis' },\n ],\n },\n]\n\nconst clampIndex = (index: number, length: number) => {\n if (length <= 0) return 0\n return Math.min(Math.max(index, 0), length - 1)\n}\n\nexport default function PropertyPhotoGallery({\n isOpen,\n onClose,\n startIndex = 0,\n title = '28 Derby Street, Vaucluse',\n subtitle = 'Elara — Luxury Harbour Residence',\n images,\n}: PropertyPhotoGalleryProps) {\n const galleryImages = images?.length ? images : DEFAULT_IMAGES\n\n if (!isOpen) return null\n\n return (\n <GalleryContent\n key={`${startIndex}-${galleryImages.length}`}\n galleryImages={galleryImages}\n startIndex={startIndex}\n title={title}\n subtitle={subtitle}\n onClose={onClose}\n />\n )\n}\n\ntype GalleryContentProps = {\n galleryImages: PropertyGalleryImage[]\n startIndex: number\n title: string\n subtitle: string\n onClose: () => void\n}\n\nfunction GalleryContent({ galleryImages, startIndex, title, subtitle, onClose }: GalleryContentProps) {\n const [currentIndex, setCurrentIndex] = useState(() => clampIndex(startIndex, galleryImages.length))\n const [activeHotspotId, setActiveHotspotId] = useState<number | null>(null)\n const sliderRef = useRef<HTMLDivElement | null>(null)\n const [isDragging, setIsDragging] = useState(false)\n const wasDraggingRef = useRef(false)\n const touchStartX = useRef<number | null>(null)\n const touchStartY = useRef<number | null>(null)\n const isSwiping = useRef(false)\n\n const progress = useMemo(() => {\n if (galleryImages.length <= 1) return 0\n return (currentIndex / (galleryImages.length - 1)) * 100\n }, [currentIndex, galleryImages.length])\n\n useEffect(() => {\n document.body.style.overflow = 'hidden'\n document.body.style.touchAction = 'none'\n return () => {\n document.body.style.overflow = ''\n document.body.style.touchAction = ''\n }\n }, [])\n\n useEffect(() => {\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose()\n if (event.key === 'ArrowLeft') setCurrentIndex((i) => (i === 0 ? galleryImages.length - 1 : i - 1))\n if (event.key === 'ArrowRight') setCurrentIndex((i) => (i === galleryImages.length - 1 ? 0 : i + 1))\n }\n window.addEventListener('keydown', handleKey)\n return () => window.removeEventListener('keydown', handleKey)\n }, [galleryImages.length, onClose])\n\n const handleSliderPointer = (clientX: number) => {\n if (!sliderRef.current) return\n const rect = sliderRef.current.getBoundingClientRect()\n const x = clientX - rect.left\n const pct = Math.min(1, Math.max(0, x / rect.width))\n const idx = Math.round(pct * (galleryImages.length - 1))\n setCurrentIndex(idx)\n }\n\n return (\n <GalleryOverlay\n onClick={(event) => {\n if (event.target === event.currentTarget && !wasDraggingRef.current) onClose()\n }}\n >\n <GalleryHeader onClick={(event) => event.stopPropagation()}>\n <PropertyInfo>\n <h2>{title}</h2>\n <p>{subtitle}</p>\n </PropertyInfo>\n <CloseButton onClick={onClose} aria-label=\"Close gallery\">\n <svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M6 6l12 12M6 18L18 6\" />\n </svg>\n </CloseButton>\n </GalleryHeader>\n\n <SliderContainer onClick={(event) => event.stopPropagation()}>\n <SliderTrack\n ref={sliderRef}\n onMouseDown={(event) => {\n setIsDragging(true)\n wasDraggingRef.current = true\n handleSliderPointer(event.clientX)\n }}\n onMouseUp={() => setIsDragging(false)}\n onMouseMove={(event) => isDragging && handleSliderPointer(event.clientX)}\n onTouchStart={(event) => handleSliderPointer(event.touches[0].clientX)}\n onTouchMove={(event) => handleSliderPointer(event.touches[0].clientX)}\n >\n <SliderProgress $progress={progress} />\n <SliderThumb $position={progress} />\n </SliderTrack>\n <SliderLabels>\n {galleryImages.map((image, idx) => (\n <span key={image.label} onClick={() => setCurrentIndex(idx)} style={{ fontWeight: idx === currentIndex ? 600 : 400 }}>\n {image.label}\n </span>\n ))}\n </SliderLabels>\n </SliderContainer>\n\n <MainImageContainer\n onTouchStart={(event) => {\n touchStartX.current = event.touches[0].clientX\n touchStartY.current = event.touches[0].clientY\n }}\n onTouchMove={(event) => {\n if (touchStartX.current === null || touchStartY.current === null) return\n const deltaX = event.touches[0].clientX - touchStartX.current\n const deltaY = event.touches[0].clientY - touchStartY.current\n if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 12) {\n isSwiping.current = true\n event.preventDefault()\n }\n }}\n onTouchEnd={(event) => {\n if (!isSwiping.current || touchStartX.current === null) return\n const deltaX = event.changedTouches[0].clientX - touchStartX.current\n if (deltaX > 40) {\n setCurrentIndex((idx) => (idx === 0 ? galleryImages.length - 1 : idx - 1))\n } else if (deltaX < -40) {\n setCurrentIndex((idx) => (idx === galleryImages.length - 1 ? 0 : idx + 1))\n }\n touchStartX.current = null\n touchStartY.current = null\n isSwiping.current = false\n }}\n >\n <NavigationButton\n $dir=\"prev\"\n onClick={(event) => {\n event.stopPropagation()\n setCurrentIndex((idx) => (idx === 0 ? galleryImages.length - 1 : idx - 1))\n }}\n aria-label=\"Previous\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </NavigationButton>\n\n {galleryImages.map((image, idx) => (\n <MainImage key={image.alt} src={image.src} alt={image.alt} $visible={idx === currentIndex} />\n ))}\n\n {galleryImages[currentIndex]?.hotspots?.map((hotspot) => (\n <Hotspot\n key={hotspot.id}\n $visible\n style={{ left: `${hotspot.x}%`, top: `${hotspot.y}%` }}\n onMouseEnter={() => setActiveHotspotId(hotspot.id)}\n onMouseLeave={() => setActiveHotspotId(null)}\n onClick={(event) => {\n event.stopPropagation()\n setActiveHotspotId((prev) => (prev === hotspot.id ? null : hotspot.id))\n }}\n aria-label={hotspot.title}\n >\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 22 12 18.77 5.82 22 7 14.14 2 9.27l6.91-1.01z\" />\n </svg>\n </Hotspot>\n ))}\n {galleryImages[currentIndex]?.hotspots?.map((hotspot) => (\n <FeatureTooltip\n key={`tooltip-${hotspot.id}`}\n $visible={activeHotspotId === hotspot.id}\n style={{ left: `${hotspot.x}%`, top: `${hotspot.y}%` }}\n >\n <h4>{hotspot.title}</h4>\n <p>{hotspot.description}</p>\n </FeatureTooltip>\n ))}\n\n <NavigationButton\n $dir=\"next\"\n onClick={(event) => {\n event.stopPropagation()\n setCurrentIndex((idx) => (idx === galleryImages.length - 1 ? 0 : idx + 1))\n }}\n aria-label=\"Next\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </NavigationButton>\n\n <MobileDots>\n {galleryImages.map((_, idx) => (\n <MobileDot key={idx} $active={idx === currentIndex} onClick={() => setCurrentIndex(idx)} aria-label={`Go to ${idx + 1}`} />\n ))}\n </MobileDots>\n </MainImageContainer>\n\n <ThumbnailStrip onClick={(event) => event.stopPropagation()}>\n {galleryImages.map((image, idx) => (\n <Thumbnail key={image.alt} $active={idx === currentIndex} onClick={() => setCurrentIndex(idx)} aria-label={`Preview ${image.label}`}>\n <img src={image.src} alt={image.alt} />\n </Thumbnail>\n ))}\n </ThumbnailStrip>\n </GalleryOverlay>\n )\n}\n","import React, { useEffect, useRef, useState, useCallback, createContext, useContext } from 'react'\nimport styled, { keyframes, css } from 'styled-components'\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type ToastVariant = 'success' | 'error' | 'info' | 'pending'\n\nexport type ToastData = {\n id: string\n variant: ToastVariant\n title: string\n /** Human-readable amount e.g. \"20,000 USDC\" */\n amount?: string\n /** On-chain tx hash — shown truncated with a block explorer link */\n txHash?: string\n /** Explorer base URL, defaults to Base Sepolia */\n explorerUrl?: string\n /** Auto-dismiss after ms. 0 = never. Default 6000 */\n duration?: number\n}\n\n// ─── Animations ───────────────────────────────────────────────────────────────\n\nconst slideIn = keyframes`\n from { transform: translateX(110%); opacity: 0; }\n to { transform: translateX(0); opacity: 1; }\n`\n\nconst slideOut = keyframes`\n from { transform: translateX(0); opacity: 1; }\n to { transform: translateX(110%); opacity: 0; }\n`\n\nconst progressShrink = keyframes`\n from { width: 100%; }\n to { width: 0%; }\n`\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst VARIANT_COLORS: Record<ToastVariant, { accent: string; icon: string }> = {\n success: { accent: '#0ecb81', icon: '✓' },\n error: { accent: '#f6465d', icon: '✕' },\n info: { accent: '#E6C656', icon: 'ℹ' },\n pending: { accent: '#7EB3E6', icon: '◌' },\n}\n\nconst Wrapper = styled.div<{ $exiting: boolean }>`\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 340px;\n background: #0d0f1a;\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.04);\n animation: ${({ $exiting }) =>\n $exiting\n ? css`${slideOut} 0.28s cubic-bezier(0.4,0,1,1) forwards`\n : css`${slideIn} 0.32s cubic-bezier(0,0,0.2,1) forwards`};\n pointer-events: all;\n`\n\nconst Body = styled.div`\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 14px 16px 12px;\n`\n\nconst IconDot = styled.div<{ $color: string }>`\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: ${({ $color }) => $color}1a;\n border: 1px solid ${({ $color }) => $color}55;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.75rem;\n font-weight: 700;\n color: ${({ $color }) => $color};\n margin-top: 1px;\n`\n\nconst Content = styled.div`\n flex: 1;\n min-width: 0;\n`\n\nconst Title = styled.p`\n margin: 0 0 2px;\n font-size: 0.8rem;\n font-weight: 600;\n color: #fff;\n letter-spacing: 0.01em;\n`\n\nconst Amount = styled.p`\n margin: 0 0 6px;\n font-size: 1.05rem;\n font-weight: 700;\n color: #E6C656;\n letter-spacing: -0.01em;\n`\n\nconst TxRow = styled.a`\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-family: 'IBM Plex Mono', 'Space Mono', monospace;\n font-size: 0.68rem;\n color: rgba(255, 255, 255, 0.4);\n text-decoration: none;\n transition: color 0.15s;\n &:hover {\n color: #7EB3E6;\n }\n`\n\nconst TxArrow = styled.span`\n font-size: 0.6rem;\n opacity: 0.6;\n`\n\nconst CloseBtn = styled.button`\n flex-shrink: 0;\n background: none;\n border: none;\n padding: 2px 4px;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.25);\n font-size: 0.9rem;\n line-height: 1;\n transition: color 0.15s;\n &:hover { color: rgba(255, 255, 255, 0.7); }\n`\n\nconst ProgressBar = styled.div<{ $color: string; $duration: number }>`\n height: 2px;\n background: rgba(255, 255, 255, 0.06);\n position: relative;\n &::after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n background: ${({ $color }) => $color};\n animation: ${css<{ $duration: number }>`${progressShrink} ${({ $duration }) => $duration}ms linear forwards`};\n }\n`\n\nconst Container = styled.div`\n position: fixed;\n bottom: 24px;\n right: 24px;\n z-index: 9999;\n display: flex;\n flex-direction: column-reverse;\n gap: 10px;\n pointer-events: none;\n`\n\n// ─── Single Toast ─────────────────────────────────────────────────────────────\n\ntype ToastItemProps = {\n toast: ToastData\n onDismiss: (id: string) => void\n}\n\nconst DEFAULT_EXPLORER = 'https://sepolia.basescan.org/tx/'\n\nfunction truncateHash(hash: string): string {\n return `${hash.slice(0, 6)}…${hash.slice(-4)}`\n}\n\nfunction ToastItem({ toast, onDismiss }: ToastItemProps) {\n const [exiting, setExiting] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const dismiss = useCallback(() => {\n setExiting(true)\n setTimeout(() => onDismiss(toast.id), 280)\n }, [onDismiss, toast.id])\n\n useEffect(() => {\n const duration = toast.duration ?? 6000\n if (duration > 0) {\n timerRef.current = setTimeout(dismiss, duration)\n }\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [dismiss, toast.duration])\n\n const { accent, icon } = VARIANT_COLORS[toast.variant]\n const duration = toast.duration ?? 6000\n const explorerBase = toast.explorerUrl ?? DEFAULT_EXPLORER\n const txUrl = toast.txHash ? `${explorerBase}${toast.txHash}` : undefined\n\n return (\n <Wrapper $exiting={exiting}>\n <Body>\n <IconDot $color={accent}>{icon}</IconDot>\n <Content>\n <Title>{toast.title}</Title>\n {toast.amount && <Amount>{toast.amount}</Amount>}\n {toast.txHash && txUrl && (\n <TxRow href={txUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {truncateHash(toast.txHash)}\n <TxArrow>↗</TxArrow>\n </TxRow>\n )}\n </Content>\n <CloseBtn type=\"button\" onClick={dismiss} aria-label=\"Dismiss\">✕</CloseBtn>\n </Body>\n {duration > 0 && <ProgressBar $color={accent} $duration={duration} />}\n </Wrapper>\n )\n}\n\n// ─── Context & Provider ───────────────────────────────────────────────────────\n\ntype ToastContextValue = {\n toast: (data: Omit<ToastData, 'id'>) => string\n dismiss: (id: string) => void\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = useState<ToastData[]>([])\n\n const addToast = useCallback((data: Omit<ToastData, 'id'>): string => {\n const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`\n setToasts((prev) => [...prev, { ...data, id }])\n return id\n }, [])\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n return (\n <ToastContext.Provider value={{ toast: addToast, dismiss }}>\n {children}\n <Container>\n {toasts.map((t) => (\n <ToastItem key={t.id} toast={t} onDismiss={dismiss} />\n ))}\n </Container>\n </ToastContext.Provider>\n )\n}\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within a ToastProvider')\n return ctx\n}\n"]}