@loafmarkets/ui 0.1.11 → 0.1.13

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","../../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../../node_modules/.pnpm/@emotion+memoize@0.9.0/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../../node_modules/.pnpm/@emotion+is-prop-valid@1.4.0/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Enum.js","../../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Utility.js","../../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Tokenizer.js","../../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Parser.js","../../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Prefixer.js","../../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Serializer.js","../../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Middleware.js","../../../../node_modules/.pnpm/@emotion+unitless@0.10.0/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/constants.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/checkDynamicCreation.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/empties.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/determineTheme.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/domElements.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/escape.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/generateAlphabeticName.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/hash.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/generateComponentId.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/getComponentName.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/isTag.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/hoist.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/isFunction.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/isStyledComponent.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/joinStrings.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/isPlainObject.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/mixinDeep.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/setToString.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/errors.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/error.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/sheet/GroupedTag.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/sheet/GroupIDAllocator.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/sheet/Rehydration.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/nonce.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/sheet/dom.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/sheet/Tag.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/sheet/Sheet.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/stylis.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/models/StyleSheetManager.tsx","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/models/Keyframes.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/addUnitIfNeeded.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/hyphenateStyleName.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/flatten.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/isStatelessFunction.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/isStaticRules.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/models/ComponentStyle.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/models/ThemeProvider.tsx","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/models/StyledComponent.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/generateDisplayName.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/createWarnTooManyClasses.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/utils/interleave.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/constructors/css.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/constructors/constructWithOptions.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/constructors/styled.tsx","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/constructors/keyframes.ts","../../../../node_modules/.pnpm/styled-components@6.3.6_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/src/base.ts","../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"],"names":["React","cva","React2","jsx","React3","React4","formatCurrency","formatPercent","v","a","b","React5","o","y","next","jsxs","clamp","fmt0","React6","__assign","p","from","l","length","position","character","characters","j","k","x","z","_","c","d","f","SC_ATTR","process","env","REACT_APP_SC_ATTR","SC_ATTR_ACTIVE","SC_ATTR_VERSION","SC_VERSION","SPLITTER","IS_BROWSER","window","document","IS_RSC","createContext","DISABLE_SPEEDY","Boolean","SC_DISABLE_SPEEDY","REACT_APP_SC_DISABLE_SPEEDY","NODE_ENV","invalidHookCallRe","seen","Set","checkDynamicCreation","displayName","componentId","parsedIdString","concat","message_1","originalConsoleError_1","console","error","didNotCallInvalidHook_1","consoleErrorMessage","consoleErrorArgs","_i","arguments","test","delete","apply","__spreadArray","useState","has","warn","add","message","EMPTY_ARRAY","Object","freeze","EMPTY_OBJECT","determineTheme","props","providedTheme","defaultProps","theme","domElements","escapeRegex","dashesAtEnds","escape","str","replace","AD_REPLACER_R","getAlphabeticChar","code","String","fromCharCode","generateAlphabeticName","name","Math","abs","phash","h","i","charCodeAt","hash","generateComponentId","getComponentName","target","isTag","charAt","toLowerCase","hasSymbol","Symbol","for","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","REACT_STATICS","childContextTypes","contextType","contextTypes","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","type","KNOWN_STATICS","prototype","caller","callee","arity","MEMO_STATICS","$$typeof","compare","TYPE_STATICS","_a","render","getStatics","component","object","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","excludelist","inheritedComponent","keys","targetStatics","sourceStatics","key","descriptor","e","isFunction","isStyledComponent","joinStrings","joinStringArray","arr","sep","result","isPlainObject","constructor","mixinRecursively","source","forceMerge","Array","isArray","setToString","toStringFn","value","ERRORS","format","args","len","push","forEach","throwStyledComponentsError","interpolations","Error","join","trim","DefaultGroupedTag","tag","this","groupSizes","Uint32Array","indexOfGroup","group","index","insertRules","rules","oldBuffer","oldSize","newSize","styledError","set","ruleIndex","insertRule","clearGroup","length_1","startIndex","endIndex","deleteRule","getGroup","css","getRule","MAX_SMI","groupIDRegister","Map","reverseRegister","nextFreeGroup","getGroupForId","id","get","setGroupForId","SELECTOR","MARKER_RE","RegExp","rehydrateNamesFromContent","sheet","content","names","split","registerName","rehydrateSheetFromTag","style","parts","textContent","part","marker","match","parseInt","getTag","rehydrateSheet","nodes","querySelectorAll","node","getAttribute","parentNode","removeChild","getNonce","__webpack_nonce__","makeStyleTag","head","parent","createElement","prevStyle","nextSibling","setAttribute","nonce","insertBefore","CSSOMTag","element","appendChild","createTextNode","styleSheets","ownerNode","rule","_error","cssRules","cssText","TextTag","childNodes","VirtualTag","_target","splice","SHOULD_REHYDRATE","defaultOptions","isServer","useCSSOMInjection","StyleSheet","options","globalStyles","_this","gs","server","r","size","selector","registerId","rehydrate","reconstructWithOptions","withNames","undefined","allocateGSInstance","hasNameForId","groupNames","clearNames","clear","clearRules","clearTag","AMP_REGEX","SLASH","hasUnbalancedBraces","indexOf","depth","inString","inComment","recursivelySetNamepace","compiled","namespace","map","replaceAll","prop","children","createStylisInstance","_componentId","_selector","_selectorRegexp","_b","_c","_d","plugins","selfReferenceReplacer","offset","string","startsWith","endsWith","middlewares","slice","RULESET","includes","prefix","prefixer","stringify","stringifyRules","flatCSS","declStart","braceDepth","skipEnd","skipCode","substring","remaining","start","urlDepth","compile","stack","serialize","middleware","rulesheet","reduce","acc","plugin","throwStyledError","toString","mainSheet","mainStylis","defaultContextValue","shouldForwardProp","styleSheet","stylis","StyleSheetContext","Provider","Consumer","useStyleSheetContext","useContext","Keyframes","inject","stylisInstance","resolvedName","getName","addUnitIfNeeded","unitless","isUpper","hyphenateStyleName","output","isFalsish","chunk","objToCssArray","obj","val","hasOwnProperty","isCss","hyphenate","flatten","executionContext","styledComponentId","isReactComponent","chunklet","isStaticRules","SEED","ComponentStyle","baseStyle","staticRulesId","isStatic","baseHash","generateAndInjectStyles","className","cssStatic","name_1","generateName","cssStaticFormatted","dynamicHash","partRule","partString","name_2","cssFormatted","ThemeContext","identifiers","seenUnknownProps","createStyledComponent","isTargetStyledComp","styledComponentTarget","isCompositeComponent","attrs","parentComponentId","finalAttrs","filter","shouldForwardPropFn_1","passedShouldForwardPropFn_1","elementToBeCreated","componentStyle","forwardRefRender","ref","forwardedComponent","forwardedRef","componentAttrs","foldedComponentIds","contextTheme","ssc","useDebugValue","context","attrDef","resolvedAttrDef","as","propsForElement","forwardedAs","isPropValid","resolvedAttrs","generatedClassName","warnTooManyClasses","classString","Fragment","precedence","href","WrappedStyledComponent","forwardRef","_foldedDefaultProps","sources","sources_1","generatedClasses","warningSeen","hoist","interleave","strings","addTag","arg","assign","styles","styleStringArray","constructWithOptions","componentConstructor","templateFunction","initialStyles","withConfig","config","baseStyled","styled","domElement","keyframes","navigator","product","windowGlobalKey","React7","React8","React9","React10","prev","React11","React12","pulse","shimmer","LogoContainer","IconWrapper","IconCircle","IconCore","LogoText","LoafLogoImage","LiquidityText","headerStyle","titleStyle","React13","formatPrice","React14","timeScale","React15","useEffect","delimiter","Button","React17","newOtp","Overlay","React19","PriceBlock"],"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 } 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","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\n// eslint-disable-next-line no-undef\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|popover|popoverTarget|popoverTargetAction|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || (variable === 0 && previous === 47)))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599:\n\t\t\treturn WEBKIT + value + value\n\t\t// mask-composite\n\t\tcase 4855:\n\t\t\treturn WEBKIT + value.replace('add', 'source-over').replace('substract', 'source-out').replace('intersect', 'source-in').replace('exclude', 'xor') + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /space-between/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span', 0) ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch', 0) ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","declare let SC_DISABLE_SPEEDY: boolean | null | undefined;\ndeclare let __VERSION__: string;\n\nimport React from 'react';\n\nexport const SC_ATTR: string =\n (typeof process !== 'undefined' &&\n typeof process.env !== 'undefined' &&\n (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR)) ||\n 'data-styled';\n\nexport const SC_ATTR_ACTIVE = 'active';\nexport const SC_ATTR_VERSION = 'data-styled-version';\nexport const SC_VERSION = __VERSION__;\nexport const SPLITTER = '/*!sc*/\\n';\n\nexport const IS_BROWSER = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Detect if we're running in a React Server Component environment.\n * RSC environments lack createContext, making this a reliable indicator.\n */\nexport const IS_RSC = typeof React.createContext === 'undefined';\n\nexport const DISABLE_SPEEDY = Boolean(\n typeof SC_DISABLE_SPEEDY === 'boolean'\n ? SC_DISABLE_SPEEDY\n : typeof process !== 'undefined' &&\n typeof process.env !== 'undefined' &&\n typeof process.env.REACT_APP_SC_DISABLE_SPEEDY !== 'undefined' &&\n process.env.REACT_APP_SC_DISABLE_SPEEDY !== ''\n ? process.env.REACT_APP_SC_DISABLE_SPEEDY === 'false'\n ? false\n : process.env.REACT_APP_SC_DISABLE_SPEEDY\n : typeof process !== 'undefined' &&\n typeof process.env !== 'undefined' &&\n typeof process.env.SC_DISABLE_SPEEDY !== 'undefined' &&\n process.env.SC_DISABLE_SPEEDY !== ''\n ? process.env.SC_DISABLE_SPEEDY === 'false'\n ? false\n : process.env.SC_DISABLE_SPEEDY\n : process.env.NODE_ENV !== 'production'\n);\n\n// Shared empty execution context when generating static styles\nexport const STATIC_EXECUTION_CONTEXT = {};\n","import React from 'react';\nimport { IS_RSC } from '../constants';\n\nconst invalidHookCallRe = /invalid hook call/i;\nconst seen = new Set();\n\nexport const checkDynamicCreation = (displayName: string, componentId?: string | undefined) => {\n if (process.env.NODE_ENV !== 'production') {\n // Skip check in RSC environments where:\n // 1. Components are always module-level (can't be in render functions)\n // 2. Hook detection is unreliable due to different module evaluation context\n if (IS_RSC) {\n return;\n }\n\n const parsedIdString = componentId ? ` with the id of \"${componentId}\"` : '';\n const message =\n `The component ${displayName}${parsedIdString} has been created dynamically.\\n` +\n \"You may see this warning because you've called styled inside another component.\\n\" +\n 'To resolve this only create new StyledComponents outside of any render method and function component.\\n' +\n 'See https://styled-components.com/docs/basics#define-styled-components-outside-of-the-render-method for more info.\\n';\n\n // If a hook is called outside of a component:\n // React 17 and earlier throw an error\n // React 18 and above use console.error\n\n const originalConsoleError = console.error;\n try {\n let didNotCallInvalidHook = true;\n console.error = (consoleErrorMessage, ...consoleErrorArgs) => {\n // The error here is expected, since we're expecting anything that uses `checkDynamicCreation` to\n // be called outside of a React component.\n if (invalidHookCallRe.test(consoleErrorMessage)) {\n didNotCallInvalidHook = false;\n // This shouldn't happen, but resets `warningSeen` if we had this error happen intermittently\n seen.delete(message);\n } else {\n originalConsoleError(consoleErrorMessage, ...consoleErrorArgs);\n }\n };\n // We purposefully call a hook outside of a component and expect it to throw\n // If it doesn't, then we're inside another component.\n // Use useState instead of useRef to avoid importing useRef\n if (typeof React.useState === 'function') {\n React.useState(null);\n }\n\n if (didNotCallInvalidHook && !seen.has(message)) {\n console.warn(message);\n seen.add(message);\n }\n } catch (error) {\n // The error here is expected, since we're expecting anything that uses `checkDynamicCreation` to\n // be called outside of a React component.\n if (invalidHookCallRe.test((error as Error).message)) {\n // This shouldn't happen, but resets `warningSeen` if we had this error happen intermittently\n seen.delete(message);\n }\n } finally {\n console.error = originalConsoleError;\n }\n }\n};\n","import { Dict } from '../types';\n\nexport const EMPTY_ARRAY = Object.freeze([]) as Readonly<any[]>;\nexport const EMPTY_OBJECT = Object.freeze({}) as Readonly<Dict<any>>;\n","import { DefaultTheme, ExecutionProps } from '../types';\nimport { EMPTY_OBJECT } from './empties';\n\nexport default function determineTheme(\n props: ExecutionProps,\n providedTheme?: DefaultTheme | undefined,\n defaultProps: { theme?: DefaultTheme | undefined } = EMPTY_OBJECT\n): DefaultTheme | undefined {\n return (props.theme !== defaultProps.theme && props.theme) || providedTheme || defaultProps.theme;\n}\n","const elements = [\n 'a',\n 'abbr',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'data',\n 'datalist',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'menu',\n 'meter',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'search',\n 'section',\n 'select',\n 'slot',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'filter',\n 'foreignObject',\n 'g',\n 'image',\n 'line',\n 'linearGradient',\n 'marker',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'svg',\n 'switch',\n 'symbol',\n 'text',\n 'textPath',\n 'tspan',\n 'use',\n] as const;\n\nexport default new Set(elements);\nexport type SupportedHTMLElements = (typeof elements)[number];\n","// Source: https://www.w3.org/TR/cssom-1/#serialize-an-identifier\n// Control characters and non-letter first symbols are not supported\nconst escapeRegex = /[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g;\n\nconst dashesAtEnds = /(^-|-$)/g;\n\n/**\n * TODO: Explore using CSS.escape when it becomes more available\n * in evergreen browsers.\n */\nexport default function escape(str: string) {\n return str // Replace all possible CSS selectors\n .replace(escapeRegex, '-') // Remove extraneous hyphens at the start and end\n .replace(dashesAtEnds, '');\n}\n","const AD_REPLACER_R = /(a)(d)/gi;\n\n/* This is the \"capacity\" of our alphabet i.e. 2x26 for all letters plus their capitalised\n * counterparts */\nconst charsLength = 52;\n\n/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */\nconst getAlphabeticChar = (code: number) => String.fromCharCode(code + (code > 25 ? 39 : 97));\n\n/* input a number, usually a hash and convert it to base-52 */\nexport default function generateAlphabeticName(code: number) {\n let name = '';\n let x;\n\n /* get a char and divide by alphabet-length */\n for (x = Math.abs(code); x > charsLength; x = (x / charsLength) | 0) {\n name = getAlphabeticChar(x % charsLength) + name;\n }\n\n return (getAlphabeticChar(x % charsLength) + name).replace(AD_REPLACER_R, '$1-$2');\n}\n","export const SEED = 5381;\n\n// When we have separate strings it's useful to run a progressive\n// version of djb2 where we pretend that we're still looping over\n// the same string\nexport const phash = (h: number, x: string) => {\n let i = x.length;\n\n while (i) {\n h = (h * 33) ^ x.charCodeAt(--i);\n }\n\n return h;\n};\n\n// This is a djb2 hashing function\nexport const hash = (x: string) => {\n return phash(SEED, x);\n};\n","import generateAlphabeticName from './generateAlphabeticName';\nimport { hash } from './hash';\n\nexport default function generateComponentId(str: string) {\n return generateAlphabeticName(hash(str) >>> 0);\n}\n","import { StyledTarget } from '../types';\n\nexport default function getComponentName(target: StyledTarget<any>) {\n return (\n (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) ||\n (target as Exclude<StyledTarget<any>, string>).displayName ||\n (target as Function).name ||\n 'Component'\n );\n}\n","import { StyledTarget } from '../types';\n\nexport default function isTag(target: StyledTarget<'web'>): target is string {\n return (\n typeof target === 'string' &&\n (process.env.NODE_ENV !== 'production'\n ? target.charAt(0) === target.charAt(0).toLowerCase()\n : true)\n );\n}\n","import React from 'react';\nimport { AnyComponent } from '../types';\n\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\n// copied from react-is\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nconst REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\n\n/**\n * Adapted from hoist-non-react-statics to avoid the react-is dependency.\n */\nconst REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true,\n};\n\nconst KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true,\n};\n\nconst FORWARD_REF_STATICS = {\n $$typeof: true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n};\n\nconst MEMO_STATICS = {\n $$typeof: true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true,\n};\n\nconst TYPE_STATICS = {\n [REACT_FORWARD_REF_TYPE]: FORWARD_REF_STATICS,\n [REACT_MEMO_TYPE]: MEMO_STATICS,\n};\n\ntype OmniComponent = AnyComponent;\n\n// adapted from react-is\nfunction isMemo(\n object: OmniComponent | React.MemoExoticComponent<any>\n): object is React.MemoExoticComponent<any> {\n const $$typeofType = 'type' in object && object.type.$$typeof;\n\n return $$typeofType === REACT_MEMO_TYPE;\n}\n\nfunction getStatics(component: OmniComponent) {\n // React v16.11 and below\n if (isMemo(component)) {\n return MEMO_STATICS;\n }\n\n // React v16.12 and above\n return '$$typeof' in component\n ? TYPE_STATICS[component['$$typeof'] as unknown as string]\n : REACT_STATICS;\n}\n\nconst defineProperty = Object.defineProperty;\nconst getOwnPropertyNames = Object.getOwnPropertyNames;\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols;\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst getPrototypeOf = Object.getPrototypeOf;\nconst objectPrototype = Object.prototype;\n\ntype ExcludeList = {\n [key: string]: true;\n};\n\nexport type NonReactStatics<S extends OmniComponent, C extends ExcludeList = {}> = {\n [key in Exclude<\n keyof S,\n S extends React.MemoExoticComponent<any>\n ? keyof typeof MEMO_STATICS | keyof C\n : S extends React.ForwardRefExoticComponent<any>\n ? keyof typeof FORWARD_REF_STATICS | keyof C\n : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\n >]: S[key];\n};\n\nexport default function hoistNonReactStatics<\n T extends OmniComponent,\n S extends OmniComponent,\n C extends ExcludeList = {},\n>(targetComponent: T, sourceComponent: S, excludelist?: C | undefined) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n\n if (objectPrototype) {\n const inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, excludelist);\n }\n }\n\n let keys: (String | Symbol)[] = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n const targetStatics = getStatics(targetComponent);\n const sourceStatics = getStatics(sourceComponent);\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i] as unknown as string;\n if (\n !(key in KNOWN_STATICS) &&\n !(excludelist && excludelist[key]) &&\n !(sourceStatics && key in sourceStatics) &&\n !(targetStatics && key in targetStatics)\n ) {\n const descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor!);\n } catch (e) {\n /* ignore */\n }\n }\n }\n }\n\n return targetComponent as T & NonReactStatics<S, C>;\n}\n","export default function isFunction(test: any): test is Function {\n return typeof test === 'function';\n}\n","import { StyledComponentBrand } from '../types';\n\nexport default function isStyledComponent(target: any): target is StyledComponentBrand {\n return typeof target === 'object' && 'styledComponentId' in target;\n}\n","/**\n * Convenience function for joining strings to form className chains\n */\nexport function joinStrings(a?: string | undefined, b?: string | undefined): string {\n return a && b ? `${a} ${b}` : a || b || '';\n}\n\nexport function joinStringArray(arr: string[], sep?: string | undefined): string {\n if (arr.length === 0) {\n return '';\n }\n\n let result = arr[0];\n for (let i = 1; i < arr.length; i++) {\n result += sep ? sep + arr[i] : arr[i];\n }\n return result;\n}\n","export default function isPlainObject(x: any): x is Record<any, any> {\n return (\n x !== null &&\n typeof x === 'object' &&\n x.constructor.name === Object.name &&\n /* check for reasonable markers that the object isn't an element for react & preact/compat */\n !('props' in x && x.$$typeof)\n );\n}\n","import isPlainObject from './isPlainObject';\n\nfunction mixinRecursively(target: any, source: any, forceMerge = false) {\n /* only merge into POJOs, Arrays, but for top level objects only\n * allow to merge into anything by passing forceMerge = true */\n if (!forceMerge && !isPlainObject(target) && !Array.isArray(target)) {\n return source;\n }\n\n if (Array.isArray(source)) {\n for (let key = 0; key < source.length; key++) {\n target[key] = mixinRecursively(target[key], source[key]);\n }\n } else if (isPlainObject(source)) {\n for (const key in source) {\n target[key] = mixinRecursively(target[key], source[key]);\n }\n }\n\n return target;\n}\n\n/**\n * Arrays & POJOs merged recursively, other objects and value types are overridden\n * If target is not a POJO or an Array, it will get source properties injected via shallow merge\n * Source objects applied left to right. Mutates & returns target. Similar to lodash merge.\n */\nexport default function mixinDeep(target: any, ...sources: any[]) {\n for (const source of sources) {\n mixinRecursively(target, source, true);\n }\n\n return target;\n}\n","/**\n * If the Object prototype is frozen, the \"toString\" property is non-writable. This means that any objects which inherit this property\n * cannot have the property changed using a \"=\" assignment operator. If using strict mode, attempting that will cause an error. If not using\n * strict mode, attempting that will be silently ignored.\n *\n * If the Object prototype is frozen, inherited non-writable properties can still be shadowed using one of two mechanisms:\n *\n * 1. ES6 class methods: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#methods\n * 2. Using the `Object.defineProperty()` static method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * However, this project uses Babel to transpile ES6 classes, and transforms ES6 class methods to use the assignment operator instead:\n * https://babeljs.io/docs/babel-plugin-transform-class-properties#options\n *\n * Therefore, the most compatible way to shadow the prototype's \"toString\" property is to define a new \"toString\" property on this object.\n */\nexport function setToString(object: object, toStringFn: () => string) {\n Object.defineProperty(object, 'toString', { value: toStringFn });\n}\n","export default {\n '1': 'Cannot create styled-component for component: %s.\\n\\n',\n '2': \"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",\n '3': 'Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n',\n '4': 'The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n',\n '5': 'The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n',\n '6': \"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",\n '7': 'ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n',\n '8': 'ThemeProvider: Please make your \"theme\" prop an object.\\n\\n',\n '9': 'Missing document `<head>`\\n\\n',\n '10': 'Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n',\n '11': '_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n',\n '12': 'It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n',\n '13': '%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\\n',\n '14': 'ThemeProvider: \"theme\" prop is required.\\n\\n',\n '15': \"A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\\n\\n```js\\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\\n```\\n\\n\",\n '16': \"Reached the limit of how many styled components may be created at group %s.\\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\\nas for instance in your render method then you may be running into this limitation.\\n\\n\",\n '17': \"CSSStyleSheet could not be found on HTMLStyleElement.\\nHas styled-components' style tag been unmounted or altered by another script?\\n\",\n '18': 'ThemeProvider: Please make sure your useTheme hook is within a `<ThemeProvider>`',\n};\n","import { Dict } from '../types';\nimport errorMap from './errors';\n\nconst ERRORS: Dict<any> = process.env.NODE_ENV !== 'production' ? errorMap : {};\n\n/**\n * super basic version of sprintf\n */\nfunction format(...args: [string, ...any]) {\n let a = args[0];\n const b = [];\n\n for (let c = 1, len = args.length; c < len; c += 1) {\n b.push(args[c]);\n }\n\n b.forEach(d => {\n a = a.replace(/%[a-z]/, d);\n });\n\n return a;\n}\n\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n */\nexport default function throwStyledComponentsError(\n code: string | number,\n ...interpolations: any[]\n) {\n if (process.env.NODE_ENV === 'production') {\n return new Error(\n `An error occurred. See https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#${code} for more information.${\n interpolations.length > 0 ? ` Args: ${interpolations.join(', ')}` : ''\n }`\n );\n } else {\n return new Error(format(ERRORS[code], ...interpolations).trim());\n }\n}\n","import { SPLITTER } from '../constants';\nimport styledError from '../utils/error';\nimport { GroupedTag, Tag } from './types';\n\n/** Create a GroupedTag with an underlying Tag implementation */\nexport const makeGroupedTag = (tag: Tag) => {\n return new DefaultGroupedTag(tag);\n};\n\nconst BASE_SIZE = 1 << 9;\n\nconst DefaultGroupedTag = class DefaultGroupedTag implements GroupedTag {\n groupSizes: Uint32Array;\n length: number;\n tag: Tag;\n\n constructor(tag: Tag) {\n this.groupSizes = new Uint32Array(BASE_SIZE);\n this.length = BASE_SIZE;\n this.tag = tag;\n }\n\n indexOfGroup(group: number) {\n let index = 0;\n for (let i = 0; i < group; i++) {\n index += this.groupSizes[i];\n }\n\n return index;\n }\n\n insertRules(group: number, rules: string[]) {\n if (group >= this.groupSizes.length) {\n const oldBuffer = this.groupSizes;\n const oldSize = oldBuffer.length;\n\n let newSize = oldSize;\n while (group >= newSize) {\n newSize <<= 1;\n if (newSize < 0) {\n throw styledError(16, `${group}`);\n }\n }\n\n this.groupSizes = new Uint32Array(newSize);\n this.groupSizes.set(oldBuffer);\n this.length = newSize;\n\n for (let i = oldSize; i < newSize; i++) {\n this.groupSizes[i] = 0;\n }\n }\n\n let ruleIndex = this.indexOfGroup(group + 1);\n\n for (let i = 0, l = rules.length; i < l; i++) {\n if (this.tag.insertRule(ruleIndex, rules[i])) {\n this.groupSizes[group]++;\n ruleIndex++;\n }\n }\n }\n\n clearGroup(group: number) {\n if (group < this.length) {\n const length = this.groupSizes[group];\n const startIndex = this.indexOfGroup(group);\n const endIndex = startIndex + length;\n\n this.groupSizes[group] = 0;\n\n for (let i = startIndex; i < endIndex; i++) {\n this.tag.deleteRule(startIndex);\n }\n }\n }\n\n getGroup(group: number) {\n let css = '';\n if (group >= this.length || this.groupSizes[group] === 0) {\n return css;\n }\n\n const length = this.groupSizes[group];\n const startIndex = this.indexOfGroup(group);\n const endIndex = startIndex + length;\n\n for (let i = startIndex; i < endIndex; i++) {\n css += `${this.tag.getRule(i)}${SPLITTER}`;\n }\n\n return css;\n }\n};\n","import styledError from '../utils/error';\n\nconst MAX_SMI = 1 << (31 - 1);\n\nlet groupIDRegister: Map<string, number> = new Map();\nlet reverseRegister: Map<number, string> = new Map();\nlet nextFreeGroup = 1;\n\nexport const resetGroupIds = () => {\n groupIDRegister = new Map();\n reverseRegister = new Map();\n nextFreeGroup = 1;\n};\n\nexport const getGroupForId = (id: string): number => {\n if (groupIDRegister.has(id)) {\n return groupIDRegister.get(id) as any;\n }\n\n while (reverseRegister.has(nextFreeGroup)) {\n nextFreeGroup++;\n }\n\n const group = nextFreeGroup++;\n\n if (process.env.NODE_ENV !== 'production' && ((group | 0) < 0 || group > MAX_SMI)) {\n throw styledError(16, `${group}`);\n }\n\n groupIDRegister.set(id, group);\n reverseRegister.set(group, id);\n return group;\n};\n\nexport const getIdForGroup = (group: number): void | string => {\n return reverseRegister.get(group);\n};\n\nexport const setGroupForId = (id: string, group: number) => {\n // move pointer\n nextFreeGroup = group + 1;\n\n groupIDRegister.set(id, group);\n reverseRegister.set(group, id);\n};\n","import { SC_ATTR, SC_ATTR_ACTIVE, SC_ATTR_VERSION, SC_VERSION, SPLITTER } from '../constants';\nimport { getIdForGroup, setGroupForId } from './GroupIDAllocator';\nimport { Sheet } from './types';\n\nconst SELECTOR = `style[${SC_ATTR}][${SC_ATTR_VERSION}=\"${SC_VERSION}\"]`;\nconst MARKER_RE = new RegExp(`^${SC_ATTR}\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)`);\n\nexport const outputSheet = (sheet: Sheet) => {\n const tag = sheet.getTag();\n const { length } = tag;\n\n let css = '';\n for (let group = 0; group < length; group++) {\n const id = getIdForGroup(group);\n if (id === undefined) continue;\n\n const names = sheet.names.get(id);\n const rules = tag.getGroup(group);\n if (names === undefined || !names.size || rules.length === 0) continue;\n\n const selector = `${SC_ATTR}.g${group}[id=\"${id}\"]`;\n\n let content = '';\n if (names !== undefined) {\n names.forEach(name => {\n if (name.length > 0) {\n content += `${name},`;\n }\n });\n }\n\n // NOTE: It's easier to collect rules and have the marker\n // after the actual rules to simplify the rehydration\n css += `${rules}${selector}{content:\"${content}\"}${SPLITTER}`;\n }\n\n return css;\n};\n\nconst rehydrateNamesFromContent = (sheet: Sheet, id: string, content: string) => {\n const names = content.split(',');\n let name;\n\n for (let i = 0, l = names.length; i < l; i++) {\n if ((name = names[i])) {\n sheet.registerName(id, name);\n }\n }\n};\n\nconst rehydrateSheetFromTag = (sheet: Sheet, style: HTMLStyleElement) => {\n const parts = (style.textContent ?? '').split(SPLITTER);\n const rules: string[] = [];\n\n for (let i = 0, l = parts.length; i < l; i++) {\n const part = parts[i].trim();\n if (!part) continue;\n\n const marker = part.match(MARKER_RE);\n\n if (marker) {\n const group = parseInt(marker[1], 10) | 0;\n const id = marker[2];\n\n if (group !== 0) {\n // Rehydrate componentId to group index mapping\n setGroupForId(id, group);\n // Rehydrate names and rules\n // looks like: data-styled.g11[id=\"idA\"]{content:\"nameA,\"}\n rehydrateNamesFromContent(sheet, id, marker[3]);\n sheet.getTag().insertRules(group, rules);\n }\n\n rules.length = 0;\n } else {\n rules.push(part);\n }\n }\n};\n\nexport const rehydrateSheet = (sheet: Sheet) => {\n const nodes = document.querySelectorAll(SELECTOR);\n\n for (let i = 0, l = nodes.length; i < l; i++) {\n const node = nodes[i] as any as HTMLStyleElement;\n if (node && node.getAttribute(SC_ATTR) !== SC_ATTR_ACTIVE) {\n rehydrateSheetFromTag(sheet, node);\n\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n }\n};\n","declare let __webpack_nonce__: string;\n\nexport default function getNonce() {\n return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n}\n","import { SC_ATTR, SC_ATTR_ACTIVE, SC_ATTR_VERSION, SC_VERSION } from '../constants';\nimport { InsertionTarget } from '../types';\nimport styledError from '../utils/error';\nimport getNonce from '../utils/nonce';\n\n/** Find last style element if any inside target */\nconst findLastStyleTag = (target: InsertionTarget): void | HTMLStyleElement => {\n const arr = Array.from(target.querySelectorAll<HTMLStyleElement>(`style[${SC_ATTR}]`));\n\n return arr[arr.length - 1];\n};\n\n/** Create a style element inside `target` or <head> after the last */\nexport const makeStyleTag = (target?: InsertionTarget | undefined): HTMLStyleElement => {\n const head = document.head;\n const parent = target || head;\n const style = document.createElement('style');\n const prevStyle = findLastStyleTag(parent);\n const nextSibling = prevStyle !== undefined ? prevStyle.nextSibling : null;\n\n style.setAttribute(SC_ATTR, SC_ATTR_ACTIVE);\n style.setAttribute(SC_ATTR_VERSION, SC_VERSION);\n\n const nonce = getNonce();\n\n if (nonce) style.setAttribute('nonce', nonce);\n\n parent.insertBefore(style, nextSibling);\n\n return style;\n};\n\n/** Get the CSSStyleSheet instance for a given style element */\nexport const getSheet = (tag: HTMLStyleElement): CSSStyleSheet => {\n if (tag.sheet) {\n return tag.sheet as any as CSSStyleSheet;\n }\n\n // Avoid Firefox quirk where the style element might not have a sheet property\n const { styleSheets } = document;\n for (let i = 0, l = styleSheets.length; i < l; i++) {\n const sheet = styleSheets[i];\n if (sheet.ownerNode === tag) {\n return sheet as any as CSSStyleSheet;\n }\n }\n\n throw styledError(17);\n};\n","import { InsertionTarget } from '../types';\nimport { getSheet, makeStyleTag } from './dom';\nimport { SheetOptions, Tag } from './types';\n\n/** Create a CSSStyleSheet-like tag depending on the environment */\nexport const makeTag = ({ isServer, useCSSOMInjection, target }: SheetOptions) => {\n if (isServer) {\n return new VirtualTag(target);\n } else if (useCSSOMInjection) {\n return new CSSOMTag(target);\n } else {\n return new TextTag(target);\n }\n};\n\nexport const CSSOMTag = class CSSOMTag implements Tag {\n element: HTMLStyleElement;\n\n sheet: CSSStyleSheet;\n\n length: number;\n\n constructor(target?: InsertionTarget | undefined) {\n this.element = makeStyleTag(target);\n\n // Avoid Edge bug where empty style elements don't create sheets\n this.element.appendChild(document.createTextNode(''));\n\n this.sheet = getSheet(this.element);\n this.length = 0;\n }\n\n insertRule(index: number, rule: string): boolean {\n try {\n this.sheet.insertRule(rule, index);\n this.length++;\n return true;\n } catch (_error) {\n return false;\n }\n }\n\n deleteRule(index: number): void {\n this.sheet.deleteRule(index);\n this.length--;\n }\n\n getRule(index: number): string {\n const rule = this.sheet.cssRules[index];\n\n // Avoid IE11 quirk where cssText is inaccessible on some invalid rules\n if (rule && rule.cssText) {\n return rule.cssText;\n } else {\n return '';\n }\n }\n};\n\n/** A Tag that emulates the CSSStyleSheet API but uses text nodes */\nexport const TextTag = class TextTag implements Tag {\n element: HTMLStyleElement;\n nodes: NodeListOf<Node>;\n length: number;\n\n constructor(target?: InsertionTarget | undefined) {\n this.element = makeStyleTag(target);\n this.nodes = this.element.childNodes;\n this.length = 0;\n }\n\n insertRule(index: number, rule: string) {\n if (index <= this.length && index >= 0) {\n const node = document.createTextNode(rule);\n const refNode = this.nodes[index];\n this.element.insertBefore(node, refNode || null);\n this.length++;\n return true;\n } else {\n return false;\n }\n }\n\n deleteRule(index: number) {\n this.element.removeChild(this.nodes[index]);\n this.length--;\n }\n\n getRule(index: number) {\n if (index < this.length) {\n return this.nodes[index].textContent as string;\n } else {\n return '';\n }\n }\n};\n\n/** A completely virtual (server-side) Tag that doesn't manipulate the DOM */\nexport const VirtualTag = class VirtualTag implements Tag {\n rules: string[];\n\n length: number;\n\n constructor(_target?: InsertionTarget | undefined) {\n this.rules = [];\n this.length = 0;\n }\n\n insertRule(index: number, rule: string) {\n if (index <= this.length) {\n this.rules.splice(index, 0, rule);\n this.length++;\n return true;\n } else {\n return false;\n }\n }\n\n deleteRule(index: number) {\n this.rules.splice(index, 1);\n this.length--;\n }\n\n getRule(index: number) {\n if (index < this.length) {\n return this.rules[index];\n } else {\n return '';\n }\n }\n};\n","import { DISABLE_SPEEDY, IS_BROWSER } from '../constants';\nimport { InsertionTarget } from '../types';\nimport { EMPTY_OBJECT } from '../utils/empties';\nimport { setToString } from '../utils/setToString';\nimport { makeGroupedTag } from './GroupedTag';\nimport { getGroupForId } from './GroupIDAllocator';\nimport { outputSheet, rehydrateSheet } from './Rehydration';\nimport { makeTag } from './Tag';\nimport { GroupedTag, Sheet, SheetOptions } from './types';\n\nlet SHOULD_REHYDRATE = IS_BROWSER;\n\ntype SheetConstructorArgs = {\n isServer?: boolean;\n useCSSOMInjection?: boolean;\n target?: InsertionTarget | undefined;\n};\n\ntype GlobalStylesAllocationMap = {\n [key: string]: number;\n};\ntype NamesAllocationMap = Map<string, Set<string>>;\n\nconst defaultOptions: SheetOptions = {\n isServer: !IS_BROWSER,\n useCSSOMInjection: !DISABLE_SPEEDY,\n};\n\n/** Contains the main stylesheet logic for stringification and caching */\nexport default class StyleSheet implements Sheet {\n gs: GlobalStylesAllocationMap;\n names: NamesAllocationMap;\n options: SheetOptions;\n server: boolean;\n tag?: GroupedTag | undefined;\n\n /** Register a group ID to give it an index */\n static registerId(id: string): number {\n return getGroupForId(id);\n }\n\n constructor(\n options: SheetConstructorArgs = EMPTY_OBJECT as Object,\n globalStyles: GlobalStylesAllocationMap = {},\n names?: NamesAllocationMap | undefined\n ) {\n this.options = {\n ...defaultOptions,\n ...options,\n };\n\n this.gs = globalStyles;\n this.names = new Map(names as NamesAllocationMap);\n this.server = !!options.isServer;\n\n // We rehydrate only once and use the sheet that is created first\n if (!this.server && IS_BROWSER && SHOULD_REHYDRATE) {\n SHOULD_REHYDRATE = false;\n rehydrateSheet(this);\n }\n\n setToString(this, () => outputSheet(this));\n }\n\n rehydrate(): void {\n if (!this.server && IS_BROWSER) {\n rehydrateSheet(this);\n }\n }\n\n reconstructWithOptions(options: SheetConstructorArgs, withNames = true) {\n return new StyleSheet(\n { ...this.options, ...options },\n this.gs,\n (withNames && this.names) || undefined\n );\n }\n\n allocateGSInstance(id: string) {\n return (this.gs[id] = (this.gs[id] || 0) + 1);\n }\n\n /** Lazily initialises a GroupedTag for when it's actually needed */\n getTag() {\n return this.tag || (this.tag = makeGroupedTag(makeTag(this.options)));\n }\n\n /** Check whether a name is known for caching */\n hasNameForId(id: string, name: string): boolean {\n return this.names.has(id) && (this.names.get(id) as any).has(name);\n }\n\n /** Mark a group's name as known for caching */\n registerName(id: string, name: string) {\n getGroupForId(id);\n\n if (!this.names.has(id)) {\n const groupNames = new Set<string>();\n groupNames.add(name);\n this.names.set(id, groupNames);\n } else {\n (this.names.get(id) as any).add(name);\n }\n }\n\n /** Insert new rules which also marks the name as known */\n insertRules(id: string, name: string, rules: string | string[]) {\n this.registerName(id, name);\n this.getTag().insertRules(getGroupForId(id), rules);\n }\n\n /** Clears all cached names for a given group ID */\n clearNames(id: string) {\n if (this.names.has(id)) {\n (this.names.get(id) as any).clear();\n }\n }\n\n /** Clears all rules for a given group ID */\n clearRules(id: string) {\n this.getTag().clearGroup(getGroupForId(id));\n this.clearNames(id);\n }\n\n /** Clears the entire tag which deletes all rules but not its names */\n clearTag() {\n // NOTE: This does not clear the names, since it's only used during SSR\n // so that we can continuously output only new rules\n this.tag = undefined;\n }\n}\n","import * as stylis from 'stylis';\nimport { Stringifier } from '../types';\nimport { EMPTY_ARRAY, EMPTY_OBJECT } from './empties';\nimport throwStyledError from './error';\nimport { SEED, phash } from './hash';\n\nconst AMP_REGEX = /&/g;\n\n// Character codes for fast comparison\nconst DOUBLE_QUOTE = 34; // \"\nconst SINGLE_QUOTE = 39; // '\nconst SLASH = 47; // /\nconst ASTERISK = 42; // *\nconst BACKSLASH = 92; // \\\nconst OPEN_BRACE = 123; // {\nconst CLOSE_BRACE = 125; // }\nconst SEMICOLON = 59; // ;\nconst NEWLINE = 10; // \\n\nconst OPEN_PAREN = 40; // (\nconst CLOSE_PAREN = 41; // )\n\n/**\n * Strips JS-style line comments (//) from CSS, handling comments anywhere\n * in the line while preserving strings, url() contents, and valid CSS.\n * Optimized with early bail and charCodeAt for performance.\n */\nfunction stripLineComments(css: string): string {\n // Fast path: no // means no line comments\n if (css.indexOf('//') === -1) return css;\n\n const len = css.length;\n const parts: string[] = [];\n let start = 0;\n let i = 0;\n let inString = 0; // 0 = none, DOUBLE_QUOTE or SINGLE_QUOTE when in string\n let urlDepth = 0; // Track nesting depth inside url()\n\n while (i < len) {\n const code = css.charCodeAt(i);\n\n // Track string state\n if (\n (code === DOUBLE_QUOTE || code === SINGLE_QUOTE) &&\n (i === 0 || css.charCodeAt(i - 1) !== BACKSLASH)\n ) {\n if (inString === 0) {\n inString = code;\n } else if (inString === code) {\n inString = 0;\n }\n i++;\n continue;\n }\n\n // Skip string content\n if (inString !== 0) {\n i++;\n continue;\n }\n\n // Track url() context - check for 'url(' (case insensitive via | 32)\n if (\n code === OPEN_PAREN &&\n i >= 3 &&\n (css.charCodeAt(i - 1) | 32) === 108 && // l\n (css.charCodeAt(i - 2) | 32) === 114 && // r\n (css.charCodeAt(i - 3) | 32) === 117 // u\n ) {\n urlDepth = 1;\n i++;\n continue;\n }\n\n // Track nested parentheses inside url()\n if (urlDepth > 0) {\n if (code === CLOSE_PAREN) urlDepth--;\n else if (code === OPEN_PAREN) urlDepth++;\n i++;\n continue;\n }\n\n // Check for line comment (only when not in url())\n if (code === SLASH && i + 1 < len && css.charCodeAt(i + 1) === SLASH) {\n if (i > start) parts.push(css.substring(start, i));\n // Skip to end of line\n while (i < len && css.charCodeAt(i) !== NEWLINE) {\n i++;\n }\n start = i;\n continue;\n }\n\n i++;\n }\n\n // No comments found after indexOf check means // was in a string or url()\n if (start === 0) return css;\n if (start < len) parts.push(css.substring(start));\n return parts.join('');\n}\n\n/**\n * Checks if CSS has unbalanced closing braces that would cause stylis\n * to prematurely close rule blocks.\n * Optimized with early bail and charCodeAt for performance.\n */\nfunction hasUnbalancedBraces(css: string): boolean {\n // Fast path: no closing brace means can't have unbalanced braces\n if (css.indexOf('}') === -1) return false;\n\n const len = css.length;\n let depth = 0;\n let inString = 0; // 0 = none, char code when in string\n let inComment = false;\n\n for (let i = 0; i < len; i++) {\n const code = css.charCodeAt(i);\n\n // Handle CSS comments\n if (inString === 0 && !inComment && code === SLASH && css.charCodeAt(i + 1) === ASTERISK) {\n inComment = true;\n i++;\n continue;\n }\n if (inComment) {\n if (code === ASTERISK && css.charCodeAt(i + 1) === SLASH) {\n inComment = false;\n i++;\n }\n continue;\n }\n\n // Track string state\n if (\n (code === DOUBLE_QUOTE || code === SINGLE_QUOTE) &&\n (i === 0 || css.charCodeAt(i - 1) !== BACKSLASH)\n ) {\n if (inString === 0) {\n inString = code;\n } else if (inString === code) {\n inString = 0;\n }\n continue;\n }\n if (inString !== 0) continue;\n\n // Track brace depth\n if (code === OPEN_BRACE) {\n depth++;\n } else if (code === CLOSE_BRACE) {\n depth--;\n if (depth < 0) return true;\n }\n }\n\n return depth !== 0 || inString !== 0;\n}\n\n/**\n * Sanitizes CSS by removing declarations with unbalanced braces.\n * This contains invalid syntax to just the affected declaration.\n * Optimized with charCodeAt for performance.\n */\nfunction sanitizeCSS(css: string): string {\n // Fast path: valid CSS passes through unchanged\n if (!hasUnbalancedBraces(css)) {\n return css;\n }\n\n const len = css.length;\n let result = '';\n let declStart = 0;\n let braceDepth = 0;\n let inString = 0;\n let inComment = false;\n\n for (let i = 0; i < len; i++) {\n const code = css.charCodeAt(i);\n\n // Handle CSS comments\n if (inString === 0 && !inComment && code === SLASH && css.charCodeAt(i + 1) === ASTERISK) {\n inComment = true;\n i++;\n continue;\n }\n if (inComment) {\n if (code === ASTERISK && css.charCodeAt(i + 1) === SLASH) {\n inComment = false;\n i++;\n }\n continue;\n }\n\n // Track string state\n if (\n (code === DOUBLE_QUOTE || code === SINGLE_QUOTE) &&\n (i === 0 || css.charCodeAt(i - 1) !== BACKSLASH)\n ) {\n if (inString === 0) {\n inString = code;\n } else if (inString === code) {\n inString = 0;\n }\n continue;\n }\n if (inString !== 0) continue;\n\n if (code === OPEN_BRACE) {\n braceDepth++;\n } else if (code === CLOSE_BRACE) {\n braceDepth--;\n\n if (braceDepth < 0) {\n // Extra closing brace - skip to next semicolon or newline\n let skipEnd = i + 1;\n while (skipEnd < len) {\n const skipCode = css.charCodeAt(skipEnd);\n if (skipCode === SEMICOLON || skipCode === NEWLINE) break;\n skipEnd++;\n }\n if (skipEnd < len && css.charCodeAt(skipEnd) === SEMICOLON) skipEnd++;\n\n braceDepth = 0;\n i = skipEnd - 1;\n declStart = skipEnd;\n continue;\n }\n\n if (braceDepth === 0) {\n result += css.substring(declStart, i + 1);\n declStart = i + 1;\n }\n } else if (code === SEMICOLON && braceDepth === 0) {\n result += css.substring(declStart, i + 1);\n declStart = i + 1;\n }\n }\n\n // Add remaining valid content\n if (declStart < len) {\n const remaining = css.substring(declStart);\n if (!hasUnbalancedBraces(remaining)) {\n result += remaining;\n }\n }\n\n return result;\n}\n\nexport type ICreateStylisInstance = {\n options?: { namespace?: string | undefined; prefix?: boolean | undefined } | undefined;\n plugins?: stylis.Middleware[] | undefined;\n};\n\n/**\n * Takes an element and recurses through it's rules added the namespace to the start of each selector.\n * Takes into account media queries by recursing through child rules if they are present.\n */\nfunction recursivelySetNamepace(compiled: stylis.Element[], namespace: String): stylis.Element[] {\n return compiled.map(rule => {\n if (rule.type === 'rule') {\n // add the namespace to the start\n rule.value = `${namespace} ${rule.value}`;\n // add the namespace after each comma for subsequent selectors.\n rule.value = rule.value.replaceAll(',', `,${namespace} `);\n rule.props = (rule.props as string[]).map(prop => {\n return `${namespace} ${prop}`;\n });\n }\n\n if (Array.isArray(rule.children) && rule.type !== '@keyframes') {\n rule.children = recursivelySetNamepace(rule.children, namespace);\n }\n return rule;\n });\n}\n\nexport default function createStylisInstance(\n {\n options = EMPTY_OBJECT as object,\n plugins = EMPTY_ARRAY as unknown as stylis.Middleware[],\n }: ICreateStylisInstance = EMPTY_OBJECT as object\n) {\n let _componentId: string;\n let _selector: string;\n let _selectorRegexp: RegExp;\n\n const selfReferenceReplacer = (match: string, offset: number, string: string) => {\n if (\n /**\n * We only want to refer to the static class directly if the selector is part of a\n * self-reference selector `& + & { color: red; }`\n */\n string.startsWith(_selector) &&\n string.endsWith(_selector) &&\n string.replaceAll(_selector, '').length > 0\n ) {\n return `.${_componentId}`;\n }\n\n return match;\n };\n\n /**\n * When writing a style like\n *\n * & + & {\n * color: red;\n * }\n *\n * The second ampersand should be a reference to the static component class. stylis\n * has no knowledge of static class so we have to intelligently replace the base selector.\n *\n * https://github.com/thysultan/stylis.js/tree/v4.0.2#abstract-syntax-structure\n */\n const selfReferenceReplacementPlugin: stylis.Middleware = element => {\n if (element.type === stylis.RULESET && element.value.includes('&')) {\n (element.props as string[])[0] = element.props[0]\n // catch any hanging references that stylis missed\n .replace(AMP_REGEX, _selector)\n .replace(_selectorRegexp, selfReferenceReplacer);\n }\n };\n\n const middlewares = plugins.slice();\n\n middlewares.push(selfReferenceReplacementPlugin);\n\n /**\n * Enables automatic vendor-prefixing for styles.\n */\n if (options.prefix) {\n middlewares.push(stylis.prefixer);\n }\n\n middlewares.push(stylis.stringify);\n\n const stringifyRules: Stringifier = (\n css: string,\n selector = '',\n /**\n * This \"prefix\" referes to a _selector_ prefix.\n */\n prefix = '',\n componentId = '&'\n ) => {\n // stylis has no concept of state to be passed to plugins\n // but since JS is single-threaded, we can rely on that to ensure\n // these properties stay in sync with the current stylis run\n _componentId = componentId;\n _selector = selector;\n _selectorRegexp = new RegExp(`\\\\${_selector}\\\\b`, 'g');\n\n const flatCSS = sanitizeCSS(stripLineComments(css));\n let compiled = stylis.compile(\n prefix || selector ? `${prefix} ${selector} { ${flatCSS} }` : flatCSS\n );\n\n if (options.namespace) {\n compiled = recursivelySetNamepace(compiled, options.namespace);\n }\n\n const stack: string[] = [];\n\n stylis.serialize(\n compiled,\n stylis.middleware(middlewares.concat(stylis.rulesheet(value => stack.push(value))))\n );\n\n return stack;\n };\n\n stringifyRules.hash = plugins.length\n ? plugins\n .reduce((acc, plugin) => {\n if (!plugin.name) {\n throwStyledError(15);\n }\n\n return phash(acc, plugin.name);\n }, SEED)\n .toString()\n : '';\n\n return stringifyRules;\n}\n","import React from 'react';\nimport type stylis from 'stylis';\nimport { IS_RSC } from '../constants';\nimport StyleSheet from '../sheet';\nimport { InsertionTarget, ShouldForwardProp, Stringifier } from '../types';\nimport createStylisInstance from '../utils/stylis';\n\nexport const mainSheet: StyleSheet = new StyleSheet();\nexport const mainStylis: Stringifier = createStylisInstance();\n\nexport type IStyleSheetContext = {\n shouldForwardProp?: ShouldForwardProp<'web'> | undefined;\n styleSheet: StyleSheet;\n stylis: Stringifier;\n};\n\nconst defaultContextValue: IStyleSheetContext = {\n shouldForwardProp: undefined,\n styleSheet: mainSheet,\n stylis: mainStylis,\n};\n\n// Create context only if createContext is available, otherwise create a fallback\nexport const StyleSheetContext = !IS_RSC\n ? React.createContext<IStyleSheetContext>(defaultContextValue)\n : ({\n Provider: ({ children }: { children: React.ReactNode; value?: IStyleSheetContext }) =>\n children,\n Consumer: ({ children }: { children: (value: IStyleSheetContext) => React.ReactNode }) =>\n children(defaultContextValue),\n } as React.Context<IStyleSheetContext>);\n\nexport const StyleSheetConsumer = StyleSheetContext.Consumer;\n\nexport type IStylisContext = Stringifier | void;\nexport const StylisContext = !IS_RSC\n ? React.createContext<IStylisContext>(undefined)\n : ({\n Provider: ({ children }: { children: React.ReactNode; value?: IStylisContext }) => children,\n Consumer: ({ children }: { children: (value: IStylisContext) => React.ReactNode }) =>\n children(undefined),\n } as React.Context<IStylisContext>);\nexport const StylisConsumer = StylisContext.Consumer;\n\nexport function useStyleSheetContext() {\n // Skip useContext if we're in an RSC environment without context support\n return !IS_RSC && React.useContext ? React.useContext(StyleSheetContext) : defaultContextValue;\n}\n\nexport type IStyleSheetManager = React.PropsWithChildren<{\n /**\n * If desired, you can pass this prop to disable \"speedy\" insertion mode, which\n * uses the browser [CSSOM APIs](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet).\n * When disabled, rules are inserted as simple text into style blocks.\n */\n disableCSSOMInjection?: undefined | boolean;\n /**\n * If you are working exclusively with modern browsers, vendor prefixes can often be omitted\n * to reduce the weight of CSS on the page.\n */\n enableVendorPrefixes?: undefined | boolean;\n /**\n * Provide an optional selector to be prepended to all generated style rules.\n */\n namespace?: undefined | string;\n /**\n * Create and provide your own `StyleSheet` if necessary for advanced SSR scenarios.\n */\n sheet?: undefined | StyleSheet;\n /**\n * Starting in v6, styled-components no longer does its own prop validation\n * and recommends use of transient props \"$prop\" to pass style-only props to\n * components. If for some reason you are not able to use transient props, a\n * prop validation function can be provided via `StyleSheetManager`, such as\n * `@emotion/is-prop-valid`.\n *\n * When the return value is `true`, props will be forwarded to the DOM/underlying\n * component. If return value is `false`, the prop will be discarded after styles\n * are calculated.\n *\n * Manually composing `styled.{element}.withConfig({shouldForwardProp})` will\n * override this default.\n */\n shouldForwardProp?: undefined | IStyleSheetContext['shouldForwardProp'];\n /**\n * An array of plugins to be run by stylis (style processor) during compilation.\n * Check out [what's available on npm*](https://www.npmjs.com/search?q=keywords%3Astylis).\n *\n * \\* The plugin(s) must be compatible with stylis v4 or above.\n */\n stylisPlugins?: undefined | stylis.Middleware[];\n /**\n * Provide an alternate DOM node to host generated styles; useful for iframes.\n */\n target?: undefined | InsertionTarget;\n}>;\n\nexport function StyleSheetManager(props: IStyleSheetManager): React.JSX.Element {\n // In RSC environments without context support, StyleSheetManager becomes a no-op\n if (IS_RSC || !React.useMemo) {\n return props.children as React.JSX.Element;\n }\n\n const { styleSheet } = useStyleSheetContext();\n\n const resolvedStyleSheet = React.useMemo(() => {\n let sheet = styleSheet;\n\n if (props.sheet) {\n sheet = props.sheet;\n } else if (props.target) {\n sheet = sheet.reconstructWithOptions({ target: props.target }, false);\n }\n\n if (props.disableCSSOMInjection) {\n sheet = sheet.reconstructWithOptions({ useCSSOMInjection: false });\n }\n\n return sheet;\n }, [props.disableCSSOMInjection, props.sheet, props.target, styleSheet]);\n\n const stylis = React.useMemo(\n () =>\n createStylisInstance({\n options: { namespace: props.namespace, prefix: props.enableVendorPrefixes },\n plugins: props.stylisPlugins,\n }),\n [props.enableVendorPrefixes, props.namespace, props.stylisPlugins]\n );\n\n const styleSheetContextValue = React.useMemo(\n () => ({\n shouldForwardProp: props.shouldForwardProp,\n styleSheet: resolvedStyleSheet,\n stylis,\n }),\n [props.shouldForwardProp, resolvedStyleSheet, stylis]\n );\n\n return (\n <StyleSheetContext.Provider value={styleSheetContextValue}>\n <StylisContext.Provider value={stylis}>{props.children}</StylisContext.Provider>\n </StyleSheetContext.Provider>\n );\n}\n","import StyleSheet from '../sheet';\nimport { Keyframes as KeyframesType, Stringifier } from '../types';\nimport styledError from '../utils/error';\nimport { setToString } from '../utils/setToString';\nimport { mainStylis } from './StyleSheetManager';\n\nexport default class Keyframes implements KeyframesType {\n id: string;\n name: string;\n rules: string;\n\n constructor(name: string, rules: string) {\n this.name = name;\n this.id = `sc-keyframes-${name}`;\n this.rules = rules;\n\n setToString(this, () => {\n throw styledError(12, String(this.name));\n });\n }\n\n inject = (styleSheet: StyleSheet, stylisInstance: Stringifier = mainStylis): void => {\n const resolvedName = this.name + stylisInstance.hash;\n\n if (!styleSheet.hasNameForId(this.id, resolvedName)) {\n styleSheet.insertRules(\n this.id,\n resolvedName,\n stylisInstance(this.rules, resolvedName, '@keyframes')\n );\n }\n };\n\n getName(stylisInstance: Stringifier = mainStylis): string {\n return this.name + stylisInstance.hash;\n }\n}\n","import unitless from '@emotion/unitless';\n\n// Taken from https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/dangerousStyleValue.js\nexport default function addUnitIfNeeded(name: string, value: any) {\n // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133\n if (value == null || typeof value === 'boolean' || value === '') {\n return '';\n }\n\n if (typeof value === 'number' && value !== 0 && !(name in unitless) && !name.startsWith('--')) {\n return `${value}px`; // Presumes implicit 'px' suffix for unitless numbers except for CSS variables\n }\n\n return String(value).trim();\n}\n","const isUpper = (c: string) => c >= 'A' && c <= 'Z';\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\nexport default function hyphenateStyleName(string: string): string {\n let output = '';\n\n for (let i = 0; i < string.length; i++) {\n const c = string[i];\n // Check for CSS variable prefix\n if (i === 1 && c === '-' && string[0] === '-') {\n return string;\n }\n\n if (isUpper(c)) {\n output += '-' + c.toLowerCase();\n } else {\n output += c;\n }\n }\n\n return output.startsWith('ms-') ? '-' + output : output;\n}\n","import Keyframes from '../models/Keyframes';\nimport StyleSheet from '../sheet';\nimport {\n AnyComponent,\n Dict,\n ExecutionContext,\n Interpolation,\n IStyledComponent,\n RuleSet,\n Stringifier,\n StyledObject,\n} from '../types';\nimport addUnitIfNeeded from './addUnitIfNeeded';\nimport { EMPTY_ARRAY } from './empties';\nimport getComponentName from './getComponentName';\nimport hyphenate from './hyphenateStyleName';\nimport isFunction from './isFunction';\nimport isPlainObject from './isPlainObject';\nimport isStatelessFunction from './isStatelessFunction';\nimport isStyledComponent from './isStyledComponent';\n\n/**\n * It's falsish not falsy because 0 is allowed.\n */\nconst isFalsish = (chunk: any): chunk is undefined | null | false | '' =>\n chunk === undefined || chunk === null || chunk === false || chunk === '';\n\nexport const objToCssArray = (obj: Dict<any>): string[] => {\n const rules = [];\n\n for (const key in obj) {\n const val = obj[key];\n if (!obj.hasOwnProperty(key) || isFalsish(val)) continue;\n\n // @ts-expect-error Property 'isCss' does not exist on type 'any[]'\n if ((Array.isArray(val) && val.isCss) || isFunction(val)) {\n rules.push(`${hyphenate(key)}:`, val, ';');\n } else if (isPlainObject(val)) {\n rules.push(`${key} {`, ...objToCssArray(val), '}');\n } else {\n rules.push(`${hyphenate(key)}: ${addUnitIfNeeded(key, val)};`);\n }\n }\n\n return rules;\n};\n\nexport default function flatten<Props extends object>(\n chunk: Interpolation<object>,\n executionContext?: (ExecutionContext & Props) | undefined,\n styleSheet?: StyleSheet | undefined,\n stylisInstance?: Stringifier | undefined\n): RuleSet<Props> {\n if (isFalsish(chunk)) {\n return [];\n }\n\n /* Handle other components */\n if (isStyledComponent(chunk)) {\n return [`.${(chunk as unknown as IStyledComponent<'web', any>).styledComponentId}`];\n }\n\n /* Either execute or defer the function */\n if (isFunction(chunk)) {\n if (isStatelessFunction(chunk) && executionContext) {\n const result = chunk(executionContext);\n\n if (\n process.env.NODE_ENV !== 'production' &&\n typeof result === 'object' &&\n !Array.isArray(result) &&\n !(result instanceof Keyframes) &&\n !isPlainObject(result) &&\n result !== null\n ) {\n console.error(\n `${getComponentName(\n chunk as AnyComponent\n )} is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.`\n );\n }\n\n return flatten<Props>(result, executionContext, styleSheet, stylisInstance);\n } else {\n return [chunk as unknown as IStyledComponent<'web'>];\n }\n }\n\n if (chunk instanceof Keyframes) {\n if (styleSheet) {\n chunk.inject(styleSheet, stylisInstance);\n return [chunk.getName(stylisInstance)];\n } else {\n return [chunk];\n }\n }\n\n /* Handle objects */\n if (isPlainObject(chunk)) {\n return objToCssArray(chunk as StyledObject<Props>);\n }\n\n if (!Array.isArray(chunk)) {\n return [chunk.toString()];\n }\n\n return flatMap(chunk, chunklet =>\n flatten<Props>(chunklet, executionContext, styleSheet, stylisInstance)\n );\n}\n\nfunction flatMap<T, U>(array: T[], transform: (value: T, index: number, array: T[]) => U[]): U[] {\n return Array.prototype.concat.apply(EMPTY_ARRAY, array.map(transform));\n}\n","import isFunction from './isFunction';\n\nexport default function isStatelessFunction(test: any): test is Function {\n return isFunction(test) && !(test.prototype && test.prototype.isReactComponent);\n}\n","import { RuleSet } from '../types';\nimport isFunction from './isFunction';\nimport isStyledComponent from './isStyledComponent';\n\nexport default function isStaticRules<Props extends object>(rules: RuleSet<Props>) {\n for (let i = 0; i < rules.length; i += 1) {\n const rule = rules[i];\n\n if (isFunction(rule) && !isStyledComponent(rule)) {\n // functions are allowed to be static if they're just being\n // used to get the classname of a nested styled component\n return false;\n }\n }\n\n return true;\n}\n","import { SC_VERSION } from '../constants';\nimport StyleSheet from '../sheet';\nimport { getGroupForId } from '../sheet/GroupIDAllocator';\nimport { ExecutionContext, RuleSet, Stringifier } from '../types';\nimport flatten from '../utils/flatten';\nimport generateName from '../utils/generateAlphabeticName';\nimport { hash, phash } from '../utils/hash';\nimport isStaticRules from '../utils/isStaticRules';\nimport { joinStringArray, joinStrings } from '../utils/joinStrings';\n\ndeclare const __SERVER__: boolean;\n\nconst SEED = hash(SC_VERSION);\n\n/**\n * ComponentStyle is all the CSS-specific stuff, not the React-specific stuff.\n */\nexport default class ComponentStyle {\n baseHash: number;\n baseStyle: ComponentStyle | null | undefined;\n componentId: string;\n isStatic: boolean;\n rules: RuleSet<any>;\n staticRulesId: string;\n\n constructor(rules: RuleSet<any>, componentId: string, baseStyle?: ComponentStyle | undefined) {\n this.rules = rules;\n this.staticRulesId = '';\n this.isStatic =\n process.env.NODE_ENV === 'production' &&\n (baseStyle === undefined || baseStyle.isStatic) &&\n isStaticRules(rules);\n this.componentId = componentId;\n this.baseHash = phash(SEED, componentId);\n this.baseStyle = baseStyle;\n\n // NOTE: This registers the componentId, which ensures a consistent order\n // for this component's styles compared to others\n StyleSheet.registerId(componentId);\n }\n\n generateAndInjectStyles(\n executionContext: ExecutionContext,\n styleSheet: StyleSheet,\n stylis: Stringifier\n ): { className: string; css: string } {\n let names = this.baseStyle\n ? this.baseStyle.generateAndInjectStyles(executionContext, styleSheet, stylis).className\n : '';\n\n // force dynamic classnames if user-supplied stylis plugins are in use\n if (this.isStatic && !stylis.hash) {\n if (this.staticRulesId && styleSheet.hasNameForId(this.componentId, this.staticRulesId)) {\n names = joinStrings(names, this.staticRulesId);\n } else {\n const cssStatic = joinStringArray(\n flatten(this.rules, executionContext, styleSheet, stylis) as string[]\n );\n const name = generateName(phash(this.baseHash, cssStatic) >>> 0);\n\n if (!styleSheet.hasNameForId(this.componentId, name)) {\n const cssStaticFormatted = stylis(cssStatic, `.${name}`, undefined, this.componentId);\n styleSheet.insertRules(this.componentId, name, cssStaticFormatted);\n }\n\n names = joinStrings(names, name);\n this.staticRulesId = name;\n }\n } else {\n let dynamicHash = phash(this.baseHash, stylis.hash);\n let css = '';\n\n for (let i = 0; i < this.rules.length; i++) {\n const partRule = this.rules[i];\n\n if (typeof partRule === 'string') {\n css += partRule;\n\n if (process.env.NODE_ENV !== 'production') dynamicHash = phash(dynamicHash, partRule);\n } else if (partRule) {\n const partString = joinStringArray(\n flatten(partRule, executionContext, styleSheet, stylis) as string[]\n );\n // The same value can switch positions in the array, so we include \"i\" in the hash.\n dynamicHash = phash(dynamicHash, partString + i);\n css += partString;\n }\n }\n\n if (css) {\n const name = generateName(dynamicHash >>> 0);\n\n if (!styleSheet.hasNameForId(this.componentId, name)) {\n const cssFormatted = stylis(css, `.${name}`, undefined, this.componentId);\n styleSheet.insertRules(this.componentId, name, cssFormatted);\n }\n\n names = joinStrings(names, name);\n }\n }\n\n // Retrieve CSS from Tag for RSC rendering\n const generatedCSS =\n typeof window === 'undefined'\n ? styleSheet.getTag().getGroup(getGroupForId(this.componentId))\n : '';\n\n return { className: names, css: generatedCSS };\n }\n}\n","import React from 'react';\nimport { IS_RSC } from '../constants';\nimport styledError from '../utils/error';\nimport isFunction from '../utils/isFunction';\n\n// Helper type for the `DefaultTheme` interface that enforces an object type & exclusively allows\n// for typed keys.\ntype DefaultThemeAsObject<T = object> = Record<keyof T, any>;\n\n/**\n * Override DefaultTheme to get accurate typings for your project.\n *\n * ```\n * // create styled-components.d.ts in your project source\n * // if it isn't being picked up, check tsconfig compilerOptions.types\n * import type { CSSProp } from \"styled-components\";\n * import Theme from './theme';\n *\n * type ThemeType = typeof Theme;\n *\n * declare module \"styled-components\" {\n * export interface DefaultTheme extends ThemeType {}\n * }\n *\n * declare module \"react\" {\n * interface DOMAttributes<T> {\n * css?: CSSProp;\n * }\n * }\n * ```\n */\nexport interface DefaultTheme extends DefaultThemeAsObject {}\n\ntype ThemeFn = (outerTheme?: DefaultTheme | undefined) => DefaultTheme;\ntype ThemeArgument = DefaultTheme | ThemeFn;\n\ntype Props = {\n children?: React.ReactNode;\n theme: ThemeArgument;\n};\n\n// Create context only if createContext is available, otherwise create a fallback\nexport const ThemeContext = !IS_RSC\n ? React.createContext<DefaultTheme | undefined>(undefined)\n : ({\n Provider: ({ children }: { children: React.ReactNode; value?: DefaultTheme }) => children,\n Consumer: ({ children }: { children: (theme?: DefaultTheme) => React.ReactNode }) =>\n children(undefined),\n } as React.Context<DefaultTheme | undefined>);\n\nexport const ThemeConsumer = ThemeContext.Consumer;\n\nfunction mergeTheme(theme: ThemeArgument, outerTheme?: DefaultTheme | undefined): DefaultTheme {\n if (!theme) {\n throw styledError(14);\n }\n\n if (isFunction(theme)) {\n const themeFn = theme as ThemeFn;\n const mergedTheme = themeFn(outerTheme);\n\n if (\n process.env.NODE_ENV !== 'production' &&\n (mergedTheme === null || Array.isArray(mergedTheme) || typeof mergedTheme !== 'object')\n ) {\n throw styledError(7);\n }\n\n return mergedTheme;\n }\n\n if (Array.isArray(theme) || typeof theme !== 'object') {\n throw styledError(8);\n }\n\n return outerTheme ? { ...outerTheme, ...theme } : theme;\n}\n\n/**\n * Returns the current theme (as provided by the closest ancestor `ThemeProvider`.)\n *\n * If no `ThemeProvider` is found, the function will error. If you need access to the theme in an\n * uncertain composition scenario, `React.useContext(ThemeContext)` will not emit an error if there\n * is no `ThemeProvider` ancestor.\n */\nexport function useTheme(): DefaultTheme {\n // Skip useContext if we're in an RSC environment without context support\n const theme = !IS_RSC && React.useContext ? React.useContext(ThemeContext) : undefined;\n\n if (!theme) {\n throw styledError(18);\n }\n\n return theme;\n}\n\n/**\n * Provide a theme to an entire react component tree via context\n */\nexport default function ThemeProvider(props: Props): React.JSX.Element | null {\n // In RSC environments without context support, ThemeProvider becomes a no-op\n if (IS_RSC || !React.useContext || !React.useMemo) {\n return props.children as React.JSX.Element | null;\n }\n\n const outerTheme = React.useContext(ThemeContext);\n const themeContext = React.useMemo(\n () => mergeTheme(props.theme, outerTheme),\n [props.theme, outerTheme]\n );\n\n if (!props.children) {\n return null;\n }\n\n return <ThemeContext.Provider value={themeContext}>{props.children}</ThemeContext.Provider>;\n}\n","import isPropValid from '@emotion/is-prop-valid';\nimport React, { createElement, PropsWithoutRef, Ref } from 'react';\nimport { IS_RSC, SC_VERSION } from '../constants';\nimport type {\n AnyComponent,\n Attrs,\n BaseObject,\n Dict,\n ExecutionContext,\n ExecutionProps,\n IStyledComponent,\n IStyledComponentFactory,\n IStyledStatics,\n OmitNever,\n RuleSet,\n StyledOptions,\n WebTarget,\n} from '../types';\nimport { checkDynamicCreation } from '../utils/checkDynamicCreation';\nimport createWarnTooManyClasses from '../utils/createWarnTooManyClasses';\nimport determineTheme from '../utils/determineTheme';\nimport domElements from '../utils/domElements';\nimport { EMPTY_ARRAY, EMPTY_OBJECT } from '../utils/empties';\nimport escape from '../utils/escape';\nimport generateComponentId from '../utils/generateComponentId';\nimport generateDisplayName from '../utils/generateDisplayName';\nimport hoist from '../utils/hoist';\nimport isFunction from '../utils/isFunction';\nimport isStyledComponent from '../utils/isStyledComponent';\nimport isTag from '../utils/isTag';\nimport { joinStrings } from '../utils/joinStrings';\nimport merge from '../utils/mixinDeep';\nimport { setToString } from '../utils/setToString';\nimport ComponentStyle from './ComponentStyle';\nimport { useStyleSheetContext } from './StyleSheetManager';\nimport { DefaultTheme, ThemeContext } from './ThemeProvider';\n\nconst identifiers: { [key: string]: number } = {};\n\n/* We depend on components having unique IDs */\nfunction generateId(\n displayName?: string | undefined,\n parentComponentId?: string | undefined\n): string {\n const name = typeof displayName !== 'string' ? 'sc' : escape(displayName);\n // Ensure that no displayName can lead to duplicate componentIds\n identifiers[name] = (identifiers[name] || 0) + 1;\n\n const componentId = `${name}-${generateComponentId(\n // SC_VERSION gives us isolation between multiple runtimes on the page at once\n // this is improved further with use of the babel plugin \"namespace\" feature\n SC_VERSION + name + identifiers[name]\n )}`;\n\n return parentComponentId ? `${parentComponentId}-${componentId}` : componentId;\n}\n\nfunction useInjectedStyle<T extends ExecutionContext>(\n componentStyle: ComponentStyle,\n resolvedAttrs: T\n): { className: string; css: string } {\n const ssc = useStyleSheetContext();\n\n const result = componentStyle.generateAndInjectStyles(resolvedAttrs, ssc.styleSheet, ssc.stylis);\n\n if (process.env.NODE_ENV !== 'production' && React.useDebugValue) {\n React.useDebugValue(result.className);\n }\n\n return result;\n}\n\nfunction resolveContext<Props extends BaseObject>(\n attrs: Attrs<React.HTMLAttributes<Element> & Props>[],\n props: ExecutionProps & Props,\n theme: DefaultTheme\n): React.HTMLAttributes<Element> & ExecutionContext & Props {\n const context: React.HTMLAttributes<Element> & ExecutionContext & Props = {\n ...props,\n // unset, add `props.className` back at the end so props always \"wins\"\n className: undefined,\n theme,\n } as React.HTMLAttributes<Element> & ExecutionContext & Props;\n\n let attrDef;\n\n for (let i = 0; i < attrs.length; i += 1) {\n attrDef = attrs[i];\n const resolvedAttrDef = isFunction(attrDef) ? attrDef(context) : attrDef;\n\n for (const key in resolvedAttrDef) {\n if (key === 'className') {\n context.className = joinStrings(context.className, resolvedAttrDef[key] as string);\n } else if (key === 'style') {\n context.style = { ...context.style, ...(resolvedAttrDef[key] as React.CSSProperties) };\n } else {\n // @ts-expect-error attrs can dynamically add arbitrary properties\n context[key] = resolvedAttrDef[key];\n }\n }\n }\n\n if ('className' in props && typeof props.className === 'string') {\n context.className = joinStrings(context.className, props.className);\n }\n\n return context;\n}\n\nlet seenUnknownProps = new Set();\n\nfunction useStyledComponentImpl<Props extends BaseObject>(\n forwardedComponent: IStyledComponent<'web', Props>,\n props: ExecutionProps & Props,\n forwardedRef: Ref<Element>\n) {\n const {\n attrs: componentAttrs,\n componentStyle,\n defaultProps,\n foldedComponentIds,\n styledComponentId,\n target,\n } = forwardedComponent;\n\n const contextTheme = React.useContext ? React.useContext(ThemeContext) : undefined;\n const ssc = useStyleSheetContext();\n const shouldForwardProp = forwardedComponent.shouldForwardProp || ssc.shouldForwardProp;\n\n if (process.env.NODE_ENV !== 'production' && React.useDebugValue) {\n React.useDebugValue(styledComponentId);\n }\n\n // NOTE: the non-hooks version only subscribes to this when !componentStyle.isStatic,\n // but that'd be against the rules-of-hooks. We could be naughty and do it anyway as it\n // should be an immutable value, but behave for now.\n const theme = determineTheme(props, contextTheme, defaultProps) || EMPTY_OBJECT;\n\n const context = resolveContext<Props>(componentAttrs, props, theme);\n const elementToBeCreated: WebTarget = context.as || target;\n const propsForElement: Dict<any> = {};\n\n for (const key in context) {\n // @ts-expect-error context may have arbitrary properties from attrs\n if (context[key] === undefined) {\n // Omit undefined values from props passed to wrapped element.\n // This enables using .attrs() to remove props, for example.\n } else if (key[0] === '$' || key === 'as' || (key === 'theme' && context.theme === theme)) {\n // Omit transient props and execution props.\n } else if (key === 'forwardedAs') {\n propsForElement.as = context.forwardedAs;\n } else if (!shouldForwardProp || shouldForwardProp(key, elementToBeCreated)) {\n // @ts-expect-error context may have arbitrary properties from attrs\n propsForElement[key] = context[key];\n\n if (\n !shouldForwardProp &&\n process.env.NODE_ENV === 'development' &&\n !isPropValid(key) &&\n !seenUnknownProps.has(key) &&\n // Only warn on DOM Element.\n domElements.has(elementToBeCreated as any)\n ) {\n seenUnknownProps.add(key);\n console.warn(\n `styled-components: it looks like an unknown prop \"${key}\" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via \\`<StyleSheetManager shouldForwardProp={...}>\\` (connect an API like \\`@emotion/is-prop-valid\\`) or consider using transient props (\\`$\\` prefix for automatic filtering.)`\n );\n }\n }\n }\n\n const { className: generatedClassName, css } = useInjectedStyle(componentStyle, context);\n\n if (process.env.NODE_ENV !== 'production' && forwardedComponent.warnTooManyClasses) {\n forwardedComponent.warnTooManyClasses(generatedClassName);\n }\n\n let classString = joinStrings(foldedComponentIds, styledComponentId);\n if (generatedClassName) {\n classString += ' ' + generatedClassName;\n }\n if (context.className) {\n classString += ' ' + context.className;\n }\n\n propsForElement[\n // handle custom elements which React doesn't properly alias\n isTag(elementToBeCreated) &&\n !domElements.has(elementToBeCreated as Extract<typeof domElements, string>)\n ? 'class'\n : 'className'\n ] = classString;\n\n // forwardedRef is coming from React.forwardRef.\n // But it might not exist. Since React 19 handles `ref` like a prop, it only define it if there is a value.\n // We don't want to inject an empty ref.\n if (forwardedRef) {\n propsForElement.ref = forwardedRef;\n }\n\n const element = createElement(elementToBeCreated, propsForElement);\n\n // RSC mode: output style tag alongside element\n // React 19's style hoisting will deduplicate by href and move to <head>\n if (IS_RSC && css) {\n return React.createElement(\n React.Fragment,\n null,\n React.createElement('style', {\n precedence: 'styled-components',\n href: `sc-${styledComponentId}-${generatedClassName}`,\n children: css,\n }),\n element\n );\n }\n\n return element;\n}\n\nfunction createStyledComponent<\n Target extends WebTarget,\n OuterProps extends BaseObject,\n Statics extends BaseObject = BaseObject,\n>(\n target: Target,\n options: StyledOptions<'web', OuterProps>,\n rules: RuleSet<OuterProps>\n): ReturnType<IStyledComponentFactory<'web', Target, OuterProps, Statics>> {\n const isTargetStyledComp = isStyledComponent(target);\n const styledComponentTarget = target as IStyledComponent<'web', OuterProps>;\n const isCompositeComponent = !isTag(target);\n\n const {\n attrs = EMPTY_ARRAY,\n componentId = generateId(options.displayName, options.parentComponentId),\n displayName = generateDisplayName(target),\n } = options;\n\n const styledComponentId =\n options.displayName && options.componentId\n ? `${escape(options.displayName)}-${options.componentId}`\n : options.componentId || componentId;\n\n // fold the underlying StyledComponent attrs up (implicit extend)\n const finalAttrs =\n isTargetStyledComp && styledComponentTarget.attrs\n ? styledComponentTarget.attrs.concat(attrs as unknown as Attrs<OuterProps>[]).filter(Boolean)\n : (attrs as Attrs<OuterProps>[]);\n\n let { shouldForwardProp } = options;\n\n if (isTargetStyledComp && styledComponentTarget.shouldForwardProp) {\n const shouldForwardPropFn = styledComponentTarget.shouldForwardProp;\n\n if (options.shouldForwardProp) {\n const passedShouldForwardPropFn = options.shouldForwardProp;\n\n // compose nested shouldForwardProp calls\n shouldForwardProp = (prop, elementToBeCreated) =>\n shouldForwardPropFn(prop, elementToBeCreated) &&\n passedShouldForwardPropFn(prop, elementToBeCreated);\n } else {\n shouldForwardProp = shouldForwardPropFn;\n }\n }\n\n const componentStyle = new ComponentStyle(\n rules,\n styledComponentId,\n isTargetStyledComp ? (styledComponentTarget.componentStyle as ComponentStyle) : undefined\n );\n\n function forwardRefRender(\n props: PropsWithoutRef<ExecutionProps & OuterProps>,\n ref: Ref<Element>\n ) {\n return useStyledComponentImpl<OuterProps>(\n WrappedStyledComponent,\n props as ExecutionProps & OuterProps,\n ref\n );\n }\n\n forwardRefRender.displayName = displayName;\n\n /**\n * forwardRef creates a new interim component, which we'll take advantage of\n * instead of extending ParentComponent to create _another_ interim class\n */\n let WrappedStyledComponent = React.forwardRef(forwardRefRender) as unknown as IStyledComponent<\n 'web',\n any\n > &\n Statics;\n WrappedStyledComponent.attrs = finalAttrs;\n WrappedStyledComponent.componentStyle = componentStyle;\n WrappedStyledComponent.displayName = displayName;\n WrappedStyledComponent.shouldForwardProp = shouldForwardProp;\n\n // this static is used to preserve the cascade of static classes for component selector\n // purposes; this is especially important with usage of the css prop\n WrappedStyledComponent.foldedComponentIds = isTargetStyledComp\n ? joinStrings(styledComponentTarget.foldedComponentIds, styledComponentTarget.styledComponentId)\n : '';\n\n WrappedStyledComponent.styledComponentId = styledComponentId;\n\n // fold the underlying StyledComponent target up since we folded the styles\n WrappedStyledComponent.target = isTargetStyledComp ? styledComponentTarget.target : target;\n\n Object.defineProperty(WrappedStyledComponent, 'defaultProps', {\n get() {\n return this._foldedDefaultProps;\n },\n\n set(obj) {\n this._foldedDefaultProps = isTargetStyledComp\n ? merge({}, styledComponentTarget.defaultProps, obj)\n : obj;\n },\n });\n\n if (process.env.NODE_ENV !== 'production') {\n checkDynamicCreation(displayName, styledComponentId);\n\n WrappedStyledComponent.warnTooManyClasses = createWarnTooManyClasses(\n displayName,\n styledComponentId\n );\n }\n\n setToString(WrappedStyledComponent, () => `.${WrappedStyledComponent.styledComponentId}`);\n\n if (isCompositeComponent) {\n const compositeComponentTarget = target as AnyComponent;\n\n hoist<typeof WrappedStyledComponent, typeof compositeComponentTarget>(\n WrappedStyledComponent,\n compositeComponentTarget,\n {\n // all SC-specific things should not be hoisted\n attrs: true,\n componentStyle: true,\n displayName: true,\n foldedComponentIds: true,\n shouldForwardProp: true,\n styledComponentId: true,\n target: true,\n } as { [key in keyof OmitNever<IStyledStatics<'web', OuterProps>>]: true }\n );\n }\n\n return WrappedStyledComponent;\n}\n\nexport default createStyledComponent;\n","import { StyledTarget } from '../types';\nimport getComponentName from './getComponentName';\nimport isTag from './isTag';\n\nexport default function generateDisplayName(target: StyledTarget<any>) {\n return isTag(target) ? `styled.${target}` : `Styled(${getComponentName(target)})`;\n}\n","import { Dict } from '../types';\n\nexport const LIMIT = 200;\n\nexport default (displayName: string, componentId: string) => {\n let generatedClasses: Dict<any> = {};\n let warningSeen = false;\n\n return (className: string) => {\n if (!warningSeen) {\n generatedClasses[className] = true;\n if (Object.keys(generatedClasses).length >= LIMIT) {\n // Unable to find latestRule in test environment.\n\n const parsedIdString = componentId ? ` with the id of \"${componentId}\"` : '';\n\n console.warn(\n `Over ${LIMIT} classes were generated for component ${displayName}${parsedIdString}.\\n` +\n 'Consider using the attrs method, together with a style object for frequently changed styles.\\n' +\n 'Example:\\n' +\n ' const Component = styled.div.attrs(props => ({\\n' +\n ' style: {\\n' +\n ' background: props.background,\\n' +\n ' },\\n' +\n ' }))`width: 100%;`\\n\\n' +\n ' <Component />'\n );\n warningSeen = true;\n generatedClasses = {};\n }\n }\n };\n};\n","import { Interpolation } from '../types';\n\nexport default function interleave<Props extends object>(\n strings: readonly string[],\n interpolations: Interpolation<Props>[]\n): Interpolation<Props>[] {\n const result: Interpolation<Props>[] = [strings[0]];\n\n for (let i = 0, len = interpolations.length; i < len; i += 1) {\n result.push(interpolations[i], strings[i + 1]);\n }\n\n return result;\n}\n","import {\n BaseObject,\n Interpolation,\n NoInfer,\n RuleSet,\n StyledObject,\n StyleFunction,\n Styles,\n} from '../types';\nimport { EMPTY_ARRAY } from '../utils/empties';\nimport flatten from '../utils/flatten';\nimport interleave from '../utils/interleave';\nimport isFunction from '../utils/isFunction';\nimport isPlainObject from '../utils/isPlainObject';\n\n/**\n * Used when flattening object styles to determine if we should\n * expand an array of styles.\n */\nconst addTag = <T extends RuleSet<any>>(arg: T): T & { isCss: true } =>\n Object.assign(arg, { isCss: true } as const);\n\nfunction css(styles: Styles<object>, ...interpolations: Interpolation<object>[]): RuleSet<object>;\nfunction css<Props extends object>(\n styles: Styles<NoInfer<Props>>,\n ...interpolations: Interpolation<NoInfer<Props>>[]\n): RuleSet<NoInfer<Props>>;\nfunction css<Props extends object = BaseObject>(\n styles: Styles<NoInfer<Props>>,\n ...interpolations: Interpolation<NoInfer<Props>>[]\n): RuleSet<NoInfer<Props>> {\n if (isFunction(styles) || isPlainObject(styles)) {\n const styleFunctionOrObject = styles as StyleFunction<Props> | StyledObject<Props>;\n\n return addTag(\n flatten<Props>(\n interleave<Props>(EMPTY_ARRAY, [\n styleFunctionOrObject,\n ...interpolations,\n ]) as Interpolation<object>\n )\n );\n }\n\n const styleStringArray = styles as TemplateStringsArray;\n\n if (\n interpolations.length === 0 &&\n styleStringArray.length === 1 &&\n typeof styleStringArray[0] === 'string'\n ) {\n return flatten<Props>(styleStringArray);\n }\n\n return addTag(\n flatten<Props>(interleave<Props>(styleStringArray, interpolations) as Interpolation<object>)\n );\n}\n\nexport default css;\n","import {\n Attrs,\n BaseObject,\n ExecutionProps,\n Interpolation,\n IStyledComponent,\n IStyledComponentFactory,\n KnownTarget,\n NoInfer,\n Runtime,\n StyledOptions,\n StyledTarget,\n Styles,\n Substitute,\n} from '../types';\nimport { EMPTY_OBJECT } from '../utils/empties';\nimport styledError from '../utils/error';\nimport css from './css';\n\ntype AttrsResult<T extends Attrs<any>> = T extends (...args: any) => infer P\n ? P extends object\n ? P\n : never\n : T extends object\n ? T\n : never;\n\n/**\n * Based on Attrs being a simple object or function that returns\n * a prop object, inspect the attrs result and attempt to extract\n * any \"as\" prop usage to modify the runtime target.\n */\ntype AttrsTarget<\n R extends Runtime,\n T extends Attrs<any>,\n FallbackTarget extends StyledTarget<R>,\n Result extends ExecutionProps = AttrsResult<T>,\n> = Result extends { as: infer RuntimeTarget }\n ? RuntimeTarget extends KnownTarget\n ? RuntimeTarget\n : FallbackTarget\n : FallbackTarget;\n\nexport interface Styled<\n R extends Runtime,\n Target extends StyledTarget<R>,\n OuterProps extends object,\n OuterStatics extends object = BaseObject,\n> {\n <Props extends object = BaseObject, Statics extends object = BaseObject>(\n initialStyles: Styles<Substitute<OuterProps, NoInfer<Props>>>,\n ...interpolations: Interpolation<Substitute<OuterProps, NoInfer<Props>>>[]\n ): IStyledComponent<R, Substitute<OuterProps, Props>> &\n OuterStatics &\n Statics &\n (R extends 'web'\n ? Target extends string\n ? {}\n : Omit<Target, keyof React.Component<any>>\n : {});\n\n attrs: <\n Props extends object = BaseObject,\n PrivateMergedProps extends object = Substitute<OuterProps, Props>,\n PrivateAttrsArg extends Attrs<PrivateMergedProps> = Attrs<PrivateMergedProps>,\n PrivateResolvedTarget extends StyledTarget<R> = AttrsTarget<R, PrivateAttrsArg, Target>,\n >(\n attrs: PrivateAttrsArg\n ) => Styled<\n R,\n PrivateResolvedTarget,\n PrivateResolvedTarget extends KnownTarget\n ? Substitute<\n Substitute<OuterProps, React.ComponentPropsWithRef<PrivateResolvedTarget>>,\n Props\n >\n : PrivateMergedProps,\n OuterStatics\n >;\n\n withConfig: (config: StyledOptions<R, OuterProps>) => Styled<R, Target, OuterProps, OuterStatics>;\n}\n\nexport default function constructWithOptions<\n R extends Runtime,\n Target extends StyledTarget<R>,\n OuterProps extends object = Target extends KnownTarget\n ? React.ComponentPropsWithRef<Target>\n : BaseObject,\n OuterStatics extends object = BaseObject,\n>(\n componentConstructor: IStyledComponentFactory<R, StyledTarget<R>, object, any>,\n tag: StyledTarget<R>,\n options: StyledOptions<R, OuterProps> = EMPTY_OBJECT\n): Styled<R, Target, OuterProps, OuterStatics> {\n /**\n * We trust that the tag is a valid component as long as it isn't\n * falsish. Typically the tag here is a string or function (i.e.\n * class or pure function component), however a component may also be\n * an object if it uses another utility, e.g. React.memo. React will\n * output an appropriate warning however if the `tag` isn't valid.\n */\n if (!tag) {\n throw styledError(1, tag);\n }\n\n /* This is callable directly as a template function */\n const templateFunction = <Props extends object = BaseObject, Statics extends object = BaseObject>(\n initialStyles: Styles<Substitute<OuterProps, Props>>,\n ...interpolations: Interpolation<Substitute<OuterProps, Props>>[]\n ) =>\n componentConstructor<Substitute<OuterProps, Props>, Statics>(\n tag,\n options as StyledOptions<R, Substitute<OuterProps, Props>>,\n css<Substitute<OuterProps, Props>>(initialStyles, ...interpolations)\n );\n\n /**\n * Attrs allows for accomplishing two goals:\n *\n * 1. Backfilling props at runtime more expressively than defaultProps\n * 2. Amending the prop interface of a wrapped styled component\n */\n templateFunction.attrs = <\n Props extends object = BaseObject,\n PrivateMergedProps extends object = Substitute<OuterProps, Props>,\n PrivateAttrsArg extends Attrs<PrivateMergedProps> = Attrs<PrivateMergedProps>,\n PrivateResolvedTarget extends StyledTarget<R> = AttrsTarget<R, PrivateAttrsArg, Target>,\n >(\n attrs: PrivateAttrsArg\n ) =>\n constructWithOptions<\n R,\n PrivateResolvedTarget,\n PrivateResolvedTarget extends KnownTarget\n ? Substitute<\n Substitute<OuterProps, React.ComponentPropsWithRef<PrivateResolvedTarget>>,\n Props\n >\n : PrivateMergedProps,\n OuterStatics\n >(componentConstructor, tag, {\n ...options,\n attrs: Array.prototype.concat(options.attrs, attrs).filter(Boolean),\n });\n\n /**\n * If config methods are called, wrap up a new template function\n * and merge options.\n */\n templateFunction.withConfig = (config: StyledOptions<R, OuterProps>) =>\n constructWithOptions<R, Target, OuterProps, OuterStatics>(componentConstructor, tag, {\n ...options,\n ...config,\n });\n\n return templateFunction;\n}\n","import * as React from 'react';\nimport createStyledComponent from '../models/StyledComponent';\nimport { BaseObject, KnownTarget, WebTarget } from '../types';\nimport domElements, { SupportedHTMLElements } from '../utils/domElements';\nimport constructWithOptions, { Styled as StyledInstance } from './constructWithOptions';\n\nconst baseStyled = <Target extends WebTarget, InjectedProps extends object = BaseObject>(\n tag: Target\n) =>\n constructWithOptions<\n 'web',\n Target,\n Target extends KnownTarget ? React.ComponentPropsWithRef<Target> & InjectedProps : InjectedProps\n >(createStyledComponent, tag);\n\nconst styled = baseStyled as typeof baseStyled & {\n [E in SupportedHTMLElements]: StyledInstance<'web', E, React.JSX.IntrinsicElements[E]>;\n};\n\n// Shorthands for all valid HTML Elements\ndomElements.forEach(domElement => {\n // @ts-expect-error some react typing bs\n styled[domElement] = baseStyled<typeof domElement>(domElement);\n});\n\nexport default styled;\nexport { StyledInstance };\n\n/**\n * This is the type of the `styled` HOC.\n */\nexport type Styled = typeof styled;\n\n/**\n * Use this higher-order type for scenarios where you are wrapping `styled`\n * and providing extra props as a third-party library.\n */\nexport type LibraryStyled<LibraryProps extends object = BaseObject> = <Target extends WebTarget>(\n tag: Target\n) => typeof baseStyled<Target, LibraryProps>;\n","import Keyframes from '../models/Keyframes';\nimport { Interpolation, Styles } from '../types';\nimport generateComponentId from '../utils/generateComponentId';\nimport { joinStringArray } from '../utils/joinStrings';\nimport css from './css';\n\nexport default function keyframes<Props extends object = {}>(\n strings: Styles<Props>,\n ...interpolations: Array<Interpolation<Props>>\n): Keyframes {\n /* Warning if you've used keyframes on React Native */\n if (\n process.env.NODE_ENV !== 'production' &&\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative'\n ) {\n console.warn(\n '`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.'\n );\n }\n\n const rules = joinStringArray(css<Props>(strings, ...interpolations) as string[]);\n const name = generateComponentId(rules);\n return new Keyframes(name, rules);\n}\n","/* Import singletons */\nimport { SC_ATTR, SC_VERSION } from './constants';\nimport createGlobalStyle from './constructors/createGlobalStyle';\nimport css from './constructors/css';\nimport keyframes from './constructors/keyframes';\n/* Import Higher Order Components */\nimport withTheme from './hoc/withTheme';\n/* Import hooks */\nimport ServerStyleSheet from './models/ServerStyleSheet';\nimport {\n IStyleSheetContext,\n IStyleSheetManager,\n IStylisContext,\n StyleSheetConsumer,\n StyleSheetContext,\n StyleSheetManager,\n} from './models/StyleSheetManager';\n/* Import components */\nimport ThemeProvider, { ThemeConsumer, ThemeContext, useTheme } from './models/ThemeProvider';\nimport isStyledComponent from './utils/isStyledComponent';\n\n/* Warning if you've imported this file on React Native */\nif (\n process.env.NODE_ENV !== 'production' &&\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative'\n) {\n console.warn(\n `It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native`\n );\n}\n\nconst windowGlobalKey = `__sc-${SC_ATTR}__`;\n\n/* Warning if there are several instances of styled-components */\nif (\n process.env.NODE_ENV !== 'production' &&\n process.env.NODE_ENV !== 'test' &&\n typeof window !== 'undefined'\n) {\n // @ts-expect-error dynamic key not in window object\n window[windowGlobalKey] ||= 0;\n\n // @ts-expect-error dynamic key not in window object\n if (window[windowGlobalKey] === 1) {\n console.warn(\n `It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\\n\\nSee https://styled-components.com/docs/faqs#why-am-i-getting-a-warning-about-several-instances-of-module-on-the-page for more info.`\n );\n }\n\n // @ts-expect-error dynamic key not in window object\n window[windowGlobalKey] += 1;\n}\n\n/* Export everything */\nexport * from './secretInternals';\nexport { Attrs, DefaultTheme, ShouldForwardProp } from './types';\nexport {\n IStyleSheetContext,\n IStyleSheetManager,\n IStylisContext,\n ServerStyleSheet,\n StyleSheetConsumer,\n StyleSheetContext,\n StyleSheetManager,\n ThemeConsumer,\n ThemeContext,\n ThemeProvider,\n createGlobalStyle,\n css,\n isStyledComponent,\n keyframes,\n useTheme,\n SC_VERSION as version,\n withTheme,\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,\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};\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 ...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 pageSize =\n activeTab?.id === \"order-history\" || activeTab?.id === \"trade-history\"\n ? HISTORY_PAGE_SIZE\n : DEFAULT_PAGE_SIZE;\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};\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 ...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\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={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 width: \"88.06px\",\n height: \"43px\",\n minWidth: \"88.06px\",\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 }}\n onMouseEnter={() => setIsTradeInteracting(true)}\n onMouseLeave={() => setIsTradeInteracting(false)}\n onMouseDown={() => setIsTradeInteracting(true)}\n onMouseUp={() => setIsTradeInteracting(false)}\n onFocus={() => setIsTradeInteracting(true)}\n onBlur={() => setIsTradeInteracting(false)}\n onTouchStart={() => setIsTradeInteracting(true)}\n onTouchEnd={() => setIsTradeInteracting(false)}\n >\n Trade\n </button>\n\n <button\n type=\"button\"\n onClick={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 width: \"127.14px\",\n height: \"43px\",\n minWidth: \"127.14px\",\n boxShadow: isOfferInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : \"none\",\n }}\n onMouseEnter={() => setIsOfferInteracting(true)}\n onMouseLeave={() => setIsOfferInteracting(false)}\n onMouseDown={() => setIsOfferInteracting(true)}\n onMouseUp={() => setIsOfferInteracting(false)}\n onFocus={() => setIsOfferInteracting(true)}\n onBlur={() => setIsOfferInteracting(false)}\n onTouchStart={() => setIsOfferInteracting(true)}\n onTouchEnd={() => setIsOfferInteracting(false)}\n >\n Make Offer\n </button>\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\";\n\nconst DEFAULT_TRADE_URL = \"https://loafx-frontend-web.vercel.app/\";\nconst DEFAULT_TRADE_PATH = \"/trade\";\nconst DEFAULT_HOME_PATH = \"/\";\nconst DEFAULT_ABOUT_PATH = \"/about\";\nconst DEFAULT_OFFERINGS_PATH = \"/ipo/musgrave\";\nconst DEFAULT_PROPERTY_MAP_PATH = \"/map\";\nconst DEFAULT_LOAF_LIQUIDITY_PATH = \"/loaf-liquidity\";\nconst DEFAULT_AUTH_LOGIN_URL = \"http://localhost:5174/\";\n// const DEFAULT_AUTH_LOGIN_URL = \"https://auth.loafmarkets.com/login\";\nconst DEFAULT_AUTH_RETURN_PARAM = \"returnTo\";\n\ntype HeaderUser = {\n displayName?: string | null;\n email?: string | null;\n walletAddress?: string | null;\n};\n\ntype HeaderActiveTab = \"home\" | \"trade\" | \"offerings\" | \"propertyMap\" | \"about\";\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<{ onClose: () => void }>;\n tradeUrl?: string;\n tradePath?: string;\n homePath?: string;\n aboutPath?: string;\n offeringsPath?: string;\n propertyMapPath?: 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 tradeUrl = DEFAULT_TRADE_URL,\n tradePath = DEFAULT_TRADE_PATH,\n homePath = DEFAULT_HOME_PATH,\n aboutPath = DEFAULT_ABOUT_PATH,\n offeringsPath = DEFAULT_OFFERINGS_PATH,\n propertyMapPath = DEFAULT_PROPERTY_MAP_PATH,\n loafLiquidityPath = DEFAULT_LOAF_LIQUIDITY_PATH,\n authLoginUrl = DEFAULT_AUTH_LOGIN_URL,\n authReturnParam = DEFAULT_AUTH_RETURN_PARAM,\n getAuthReturnUrl,\n logoHref,\n onLogoClick,\n onLoafLiquidityClick,\n onTradeClick,\n onProfileNavigate,\n onOrdersNavigate,\n 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\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(\"[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 const closeMenus = () => {\n setIsMobileMenuOpen(false);\n setIsUserMenuOpen(false);\n setIsMoreMenuOpen(false);\n };\n\n const handleUserMenuToggle = () => {\n const nextState = !isUserMenuOpen;\n console.log(\"[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(loafLiquidityPath);\n };\n\n const handleTradeNavigation = () => {\n closeMenus();\n if (onTradeClick) {\n onTradeClick();\n return;\n }\n if (typeof window !== \"undefined\") {\n window.location.href = tradeUrl;\n }\n };\n\n const handleLogoutClick = async (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[Header] Logout option selected, invoking onLogout handler\");\n await onLogout?.();\n };\n\n const userPrimaryLabel = currentUser?.displayName?.trim() || \"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 if (onSignInClick) {\n onSignInClick();\n return;\n }\n\n if (redirectToAuthLogin()) {\n return;\n }\n\n if (LoginPopupComponent) {\n setShowLoginPopup(true);\n }\n };\n\n const inferredActiveTab: HeaderActiveTab | null = (() => {\n if (locationPath === tradePath) return \"trade\";\n if (locationPath === homePath) return \"home\";\n if (locationPath === aboutPath) return \"about\";\n if (locationPath.startsWith(offeringsPath)) return \"offerings\";\n if (locationPath === propertyMapPath) return \"propertyMap\";\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\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 ?? homePath} 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={homePath}\n className={homeActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(homePath);\n }}\n >\n Home\n </NavLink>\n <NavLink\n href={tradeUrl}\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={offeringsPath}\n className={offeringsActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(offeringsPath);\n }}\n >\n Offerings\n </NavLink>\n <NavLink\n href={propertyMapPath}\n className={propertyMapActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(propertyMapPath);\n }}\n >\n Property Map\n </NavLink>\n <NavLink\n href={aboutPath}\n className={aboutActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(aboutPath);\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(homePath)}>Home</MobileNavItem>\n\n <MobileNavItem\n onClick={() => {\n handleTradeNavigation();\n }}\n >\n Trade\n </MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(offeringsPath)}>Offerings</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(propertyMapPath)}>Property Map</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(aboutPath)}>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 <div\n style={{\n padding: \"12px 16px\",\n borderBottom: \"1px solid rgba(255,255,255,0.08)\",\n textAlign: \"left\",\n }}\n >\n <p style={{ margin: 0, fontWeight: 600 }}>{userPrimaryLabel}</p>\n </div>\n <button\n type=\"button\"\n onClick={(event) => {\n console.log(\"[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 onClose={() => setShowLoginPopup(false)} />\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 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\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 isAuthenticated,\n currentUser,\n onSendEmailCode,\n onVerifyEmailCode,\n onDemoLogin,\n logoSrc = DEFAULT_LOGO_SRC,\n logoAlt = DEFAULT_LOGO_ALT,\n autoCloseOnAuth = true,\n}) => {\n const [view, setView] = useState<\"main\" | \"email\" | \"otp\">(\"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 useEffect(() => {\n if (!autoCloseOnAuth) {\n return;\n }\n\n if (isAuthenticated || currentUser) {\n onClose();\n }\n }, [autoCloseOnAuth, currentUser, isAuthenticated, onClose]);\n\n const handleWalletLogin = () => {\n onClose();\n if (onOpenEarlyAccess) {\n onOpenEarlyAccess();\n }\n };\n\n const handleEmailClick = (signUp = false) => {\n setIsSignUp(signUp);\n setView(\"email\");\n setError(\"\");\n };\n\n const handleSendCode = async (event?: React.SyntheticEvent) => {\n event?.preventDefault();\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 const demoResult = await onDemoLogin?.(email, normalizedHandle ?? null);\n if (demoResult && (demoResult as DemoLoginResult).success) {\n setLoading(false);\n return;\n }\n } catch (err) {\n // If demo login fails, fall back to email auth.\n console.warn(\"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 setView(\"otp\");\n setOtp(Array(OTP_INPUT_LENGTH).fill(\"\"));\n\n try {\n await onSendEmailCode({ email, isSignUp, handle: normalizedHandle ?? null });\n } catch (err) {\n setView(\"email\");\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 handleVerifyCode = async (event: React.FormEvent) => {\n event.preventDefault();\n\n const code = otp.join(\"\");\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 try {\n await onVerifyEmailCode({ code, email });\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Invalid verification code\");\n } finally {\n setLoading(false);\n }\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 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 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\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 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"]}
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"],"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"],"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};\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 ...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 pageSize =\n activeTab?.id === \"order-history\" || activeTab?.id === \"trade-history\"\n ? HISTORY_PAGE_SIZE\n : DEFAULT_PAGE_SIZE;\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};\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 ...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\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={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 width: \"88.06px\",\n height: \"43px\",\n minWidth: \"88.06px\",\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 }}\n onMouseEnter={() => setIsTradeInteracting(true)}\n onMouseLeave={() => setIsTradeInteracting(false)}\n onMouseDown={() => setIsTradeInteracting(true)}\n onMouseUp={() => setIsTradeInteracting(false)}\n onFocus={() => setIsTradeInteracting(true)}\n onBlur={() => setIsTradeInteracting(false)}\n onTouchStart={() => setIsTradeInteracting(true)}\n onTouchEnd={() => setIsTradeInteracting(false)}\n >\n Trade\n </button>\n\n <button\n type=\"button\"\n onClick={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 width: \"127.14px\",\n height: \"43px\",\n minWidth: \"127.14px\",\n boxShadow: isOfferInteracting ? `0 0 0 2px rgba(0,0,0,0.4), 0 0 0 4px ${accentColor}` : \"none\",\n }}\n onMouseEnter={() => setIsOfferInteracting(true)}\n onMouseLeave={() => setIsOfferInteracting(false)}\n onMouseDown={() => setIsOfferInteracting(true)}\n onMouseUp={() => setIsOfferInteracting(false)}\n onFocus={() => setIsOfferInteracting(true)}\n onBlur={() => setIsOfferInteracting(false)}\n onTouchStart={() => setIsOfferInteracting(true)}\n onTouchEnd={() => setIsOfferInteracting(false)}\n >\n Make Offer\n </button>\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_URL = \"https://loafx-frontend-web.vercel.app/\";\nconst DEFAULT_TRADE_PATH = \"/trade\";\nconst DEFAULT_HOME_PATH = \"/\";\nconst DEFAULT_ABOUT_PATH = \"/about\";\nconst DEFAULT_OFFERINGS_PATH = \"/ipo/musgrave\";\nconst DEFAULT_PROPERTY_MAP_PATH = \"/map\";\nconst DEFAULT_LOAF_LIQUIDITY_PATH = \"/loaf-liquidity\";\nconst DEFAULT_AUTH_LOGIN_URL = \"http://localhost:5174/\";\n// const DEFAULT_AUTH_LOGIN_URL = \"https://auth.loafmarkets.com/login\";\nconst DEFAULT_AUTH_RETURN_PARAM = \"returnTo\";\n\ntype HeaderUser = {\n displayName?: string | null;\n email?: string | null;\n walletAddress?: string | null;\n};\n\ntype HeaderActiveTab = \"home\" | \"trade\" | \"offerings\" | \"propertyMap\" | \"about\";\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 tradeUrl?: string;\n tradePath?: string;\n homePath?: string;\n aboutPath?: string;\n offeringsPath?: string;\n propertyMapPath?: 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 tradeUrl = DEFAULT_TRADE_URL,\n tradePath = DEFAULT_TRADE_PATH,\n homePath = DEFAULT_HOME_PATH,\n aboutPath = DEFAULT_ABOUT_PATH,\n offeringsPath = DEFAULT_OFFERINGS_PATH,\n propertyMapPath = DEFAULT_PROPERTY_MAP_PATH,\n loafLiquidityPath = DEFAULT_LOAF_LIQUIDITY_PATH,\n authLoginUrl = DEFAULT_AUTH_LOGIN_URL,\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 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(\"[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 const closeMenus = () => {\n setIsMobileMenuOpen(false);\n setIsUserMenuOpen(false);\n setIsMoreMenuOpen(false);\n };\n\n const handleUserMenuToggle = () => {\n const nextState = !isUserMenuOpen;\n console.log(\"[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(loafLiquidityPath);\n };\n\n const handleTradeNavigation = () => {\n closeMenus();\n if (onTradeClick) {\n onTradeClick();\n return;\n }\n if (typeof window !== \"undefined\") {\n window.location.href = tradeUrl;\n }\n };\n\n const handleLogoutClick = async (event?: React.MouseEvent) => {\n event?.preventDefault();\n closeMenus();\n console.log(\"[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(\"[Header] Add funding selected\");\n if (LoginPopupComponent) {\n setLoginPopupInitialView(undefined);\n setShowLoginPopup(true);\n }\n };\n\n const userPrimaryLabel = currentUser?.displayName?.trim() || \"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 if (onSignInClick) {\n onSignInClick();\n return;\n }\n\n if (redirectToAuthLogin()) {\n return;\n }\n\n if (LoginPopupComponent) {\n setShowLoginPopup(true);\n }\n };\n\n const inferredActiveTab: HeaderActiveTab | null = (() => {\n if (locationPath === tradePath) return \"trade\";\n if (locationPath === homePath) return \"home\";\n if (locationPath === aboutPath) return \"about\";\n if (locationPath.startsWith(offeringsPath)) return \"offerings\";\n if (locationPath === propertyMapPath) return \"propertyMap\";\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\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 ?? homePath} 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={homePath}\n className={homeActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(homePath);\n }}\n >\n Home\n </NavLink>\n <NavLink\n href={tradeUrl}\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={offeringsPath}\n className={offeringsActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(offeringsPath);\n }}\n >\n Offerings\n </NavLink>\n <NavLink\n href={propertyMapPath}\n className={propertyMapActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(propertyMapPath);\n }}\n >\n Property Map\n </NavLink>\n <NavLink\n href={aboutPath}\n className={aboutActive ? \"active\" : \"\"}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n handleNavigation(aboutPath);\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(homePath)}>Home</MobileNavItem>\n\n <MobileNavItem\n onClick={() => {\n handleTradeNavigation();\n }}\n >\n Trade\n </MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(offeringsPath)}>Offerings</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(propertyMapPath)}>Property Map</MobileNavItem>\n\n <MobileNavItem onClick={() => handleNavigation(aboutPath)}>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 <div\n style={{\n padding: \"12px 16px\",\n borderBottom: \"1px solid rgba(255,255,255,0.08)\",\n textAlign: \"left\",\n }}\n >\n <p style={{ margin: 0, fontWeight: 600 }}>{userPrimaryLabel}</p>\n </div>\n <button\n type=\"button\"\n onClick={(event) => {\n console.log(\"[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(\"[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={() => {\n setShowLoginPopup(false);\n setLoginPopupInitialView(undefined);\n }}\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 * 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};\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 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 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 [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 if (typeof initialView === \"string\") {\n setView(initialView);\n }\n }, [initialView]);\n\n useEffect(() => {\n if (!autoCloseOnAuth) {\n return;\n }\n\n // Don't auto-close if we're in the post-signup onboarding flow\n if (suppressAutoCloseRef.current) {\n return;\n }\n if (view === \"kyc\" || view === \"kyc-success\" || view === \"kyc-failed\" || view === \"funding\") {\n return;\n }\n\n if (isAuthenticated || currentUser) {\n onClose();\n }\n }, [autoCloseOnAuth, currentUser, isAuthenticated, onClose, view]);\n\n const handleWalletLogin = () => {\n onClose();\n if (onOpenEarlyAccess) {\n onOpenEarlyAccess();\n }\n };\n\n const handleEmailClick = (signUp = false) => {\n setIsSignUp(signUp);\n setView(\"email\");\n setError(\"\");\n };\n\n const handleSendCode = async (event?: React.SyntheticEvent) => {\n event?.preventDefault();\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 const demoResult = await onDemoLogin?.(email, normalizedHandle ?? null);\n if (demoResult && (demoResult as DemoLoginResult).success) {\n setLoading(false);\n return;\n }\n } catch (err) {\n // If demo login fails, fall back to email auth.\n console.warn(\"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 await onSendEmailCode({ email, isSignUp, handle: normalizedHandle ?? null });\n setView(\"otp\");\n setOtp(Array(OTP_INPUT_LENGTH).fill(\"\"));\n } catch (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 handleVerifyCode = async (event: React.FormEvent) => {\n event.preventDefault();\n\n const code = otp.join(\"\");\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 await onVerifyEmailCode({ code, email });\n // After successful signup verification, go to KYC step\n if (isSignUp) {\n setView(\"kyc\");\n setLoading(false);\n return;\n }\n } catch (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 handleKycStart = async () => {\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 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 <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>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…\" : \"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 </PopupContainer>\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\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 type PropertyOverviewProps = {\n propertyName: string\n location: string\n midPrice: number\n onTradeClick?: () => void\n}\n\nexport function PropertyOverview({ propertyName: _propertyName, location: _location, midPrice: _midPrice, onTradeClick: _onTradeClick }: PropertyOverviewProps) {\n return (\n <>\n <TwoColGrid>\n <Section>\n <SectionHeading>About This Property</SectionHeading>\n <BodyText>\n Musgrave is Mosman&apos;s oldest mansion. Built in 1880 and meticulously maintained for over 140 years. This is not just property - it&apos;s legacy.\n <br /><br />\n Assets like this are irreplaceable. Pre-Federation sandstone architecture of this calibre simply cannot be recreated. With fewer than a handful of comparable estates remaining, scarcity drives enduring value.\n </BodyText>\n </Section>\n\n <Section>\n <SectionHeading>The Offering</SectionHeading>\n <OfferingGrid>\n {[\n { label: 'Units Issued', value: '50,000', gold: false },\n { label: 'Issue Price', value: '$250 / Unit', gold: true },\n { label: 'Implied Value', value: '$26,000,000', gold: false },\n { label: 'Minimum Participation', value: '$20,000', gold: false },\n { label: 'Est. Cash Flow', value: '$6000/wk', gold: true },\n { label: 'Indicative Listing Date', value: 'MAY 2026', 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: '6', icon: '🛏️' },\n { label: 'Bathrooms', value: '6', icon: '🚿' },\n { type: 'dual' as const, label1: 'Land', value1: '1,862', label2: 'Floor', value2: '700', unit: 'sqm', highlight: true },\n { label: 'Car Spaces', value: '6', 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: '$13M (2021)' },\n { label: 'Suburb Median', value: '$7M' },\n { label: 'Replication Cost of Architecture', value: '$7M' },\n { label: 'DA Status', value: 'In Progress', status: 'progress' },\n { label: 'Property Type', value: 'Heritage Home' },\n { label: 'Ownership', value: 'Freehold' },\n { label: 'Zoning', value: 'R2 Low Density' },\n { label: 'Levels', value: '3' }\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'\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 docs = [\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 function PropertyDocuments() {\n return (\n <Section>\n <SectionHeading>Investment Documents</SectionHeading>\n <DocList>\n {docs.map(({ href, label }) => (\n <DocItem key={href}>\n <DocLink href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n <DocIconWrapper>\n <DocIcon />\n </DocIconWrapper>\n {label}\n </DocLink>\n </DocItem>\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 DocIconWrapper = styled.span`\n margin-right: 0.75rem;\n flex-shrink: 0;\n color: var(--color-text-secondary);\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.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 onOrderButtonClick: () => void\n orderButtonText: string\n isOrderButtonDisabled: boolean\n hasInsufficientFunds: boolean\n onPlaceAnotherOrder: () => void\n}\n\nexport function OrderPanel({\n statusLabel,\n statusColor,\n ipoStarted,\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 orderButtonText,\n isOrderButtonDisabled,\n hasInsufficientFunds,\n onPlaceAnotherOrder,\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 > availableBalance) {\n setManualOrderAmount(parsed)\n setSliderValue(100)\n } else {\n setManualOrderAmount(null)\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 > availableBalance) {\n setManualOrderAmount(newOrderTotal)\n setSliderValue(100)\n } else {\n setManualOrderAmount(null)\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'} MUS` },\n { label: 'Price Per Unit', value: `$${tokenPrice.toFixed(2)}` },\n {\n label: 'Musgrave 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>AUD</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: <strong>${availableBalance.toLocaleString()}</strong>\n </span>\n <DepositButton type=\"button\">+ Deposit</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>MUSGRAVE</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 })} units</strong>\n </SummaryRow>\n <SummaryRow>\n <span>Fee ({(feeRate * 100).toFixed(1)}%)</span>\n <strong>{feeInTokens.toFixed(2)} units</strong>\n </SummaryRow>\n <SummaryTotal>\n <span>Total</span>\n <strong>${orderTotal.toLocaleString()} AUD</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={onOrderButtonClick}\n >\n {orderButtonText}\n </SubscribeButton>\n )}\n\n <BalanceCards>\n <BalanceCard>\n <BalanceLabel>Available to Invest</BalanceLabel>\n <BalanceValue>${availableBalance.toLocaleString()}</BalanceValue>\n <BalanceAction>+ Deposit</BalanceAction>\n </BalanceCard>\n <BalanceCard>\n <BalanceLabel>Musgrave Owned</BalanceLabel>\n <BalanceValue>\n {displayedOwnedTokens.toFixed(2)}\n {ownedTokensJustUpdated && <span>+{lastOrderQuantity.toFixed(2)}</span>}\n </BalanceValue>\n <BalanceSub>\n ${(displayedOwnedTokens * tokenPrice).toLocaleString()} • {((displayedOwnedTokens / supplyToSell) * 100).toFixed(3)}%\n </BalanceSub>\n </BalanceCard>\n </BalanceCards>\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 styled from 'styled-components'\n\nimport type { NewsFeedItem, PropertySubscription } from './types'\n\nexport type NewsOrdersSectionProps = {\n newsItems: NewsFeedItem[]\n userSubscription: PropertySubscription | null\n tokenPrice: number\n}\n\nexport function NewsOrdersSection({ newsItems, userSubscription, tokenPrice }: NewsOrdersSectionProps) {\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 <h3>Your Orders</h3>\n <span>Offering Subscriptions</span>\n </TradeNewsHeader>\n <OrdersTable>\n <OrdersHead>\n {['Date', 'Units', 'Price', 'Total', 'Status'].map((h) => (\n <div key={h}>{h}</div>\n ))}\n </OrdersHead>\n {userSubscription ? (\n <OrdersRow>\n <div>\n {new Date(userSubscription.timestamp).toLocaleDateString('en-AU', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}\n <span>\n {new Date(userSubscription.timestamp).toLocaleTimeString('en-AU', {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </span>\n </div>\n <div className=\"units\">{userSubscription.tokens.toFixed(2)}</div>\n <div>${tokenPrice.toFixed(2)}</div>\n <div className=\"total\">${userSubscription.value.toLocaleString()}</div>\n <div className=\"status\">Confirmed</div>\n </OrdersRow>\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 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 isAuthenticated: boolean\n onSignIn: () => void\n saleData?: SaleData | null\n}\n\nexport function PropertyBuy({\n propertyName = '8c Mcleod Street (Musgrave)',\n propertyLocation: propertyLocationLabel = 'Mosman, Sydney',\n isAuthenticated,\n onSignIn,\n saleData,\n}: PropertyBuyProps) {\n const [sliderValue, setSliderValue] = useState(0)\n const [availableBalance, setAvailableBalance] = useState(125000)\n const [userSubscription, setUserSubscription] = useState<PropertySubscription | null>(null)\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\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 const handleOrderButtonClick = () => {\n if (!isAuthenticated) {\n onSignIn()\n return\n }\n if (!ipoStarted || tokenQuantity === 0) {\n return\n }\n setShowOrderConfirmModal(true)\n }\n\n const getOrderButtonText = () => {\n if (!isAuthenticated) return 'Sign In to Invest'\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 (scStatus !== 1) return true\n if (tokenQuantity === 0) return true\n return false\n }\n\n const confirmOrder = () => {\n setShowOrderConfirmModal(false)\n setAvailableBalance((prev) => prev - orderTotal)\n\n const newTokens = ownedTokens + tokenQuantity\n setOwnedTokens(newTokens)\n setDisplayedOwnedTokens(newTokens)\n setOwnedTokensJustUpdated(true)\n setLastOrderQuantity(tokenQuantity)\n setTimeout(() => setOwnedTokensJustUpdated(false), 2000)\n\n setUserSubscription({\n propertyName,\n tokenSymbol: 'MUS',\n tokens: tokenQuantity,\n value: orderTotal,\n avgPrice: tokenPrice,\n percentOfProperty: estExposure,\n timestamp: new Date().toISOString(),\n })\n\n setLastOrderDetails({\n tokens: tokenQuantity,\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 <OrderPanel\n statusLabel={statusLabel}\n statusColor={statusColor}\n ipoStarted={ipoStarted}\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 onOrderButtonClick={handleOrderButtonClick}\n orderButtonText={getOrderButtonText()}\n isOrderButtonDisabled={isOrderButtonDisabled()}\n hasInsufficientFunds={hasInsufficientFunds}\n onPlaceAnotherOrder={() => setOrderPlacedSuccess(false)}\n />\n </HeroGrid>\n\n <div className=\"flex flex-col gap-6\">\n <GalleryMapSection propertyLocation={propertyLocationLabel} />\n <NewsOrdersSection\n newsItems={newsItems}\n userSubscription={userSubscription}\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"]}