@deriv-web-design/ui 0.0.19 → 0.0.22

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":["../primitives/Button/Button.tsx","../primitives/Link/Link.tsx","../primitives/Chip/Chip.tsx","../primitives/Tag/Tag.tsx","../primitives/Accordion/Accordion.tsx","../primitives/TextField/TextField.tsx","../primitives/SearchField/SearchField.tsx","../primitives/Breadcrumb/Breadcrumb.tsx","../primitives/BottomSheet/BottomSheet.tsx","../primitives/ChipDropdown/ChipDropdown.tsx","../components/Card/CardPrimaryVariant.tsx","../components/Card/CardSecondaryVariant.tsx","../components/Card/CardThumbnailVariant.tsx","../components/Card/Card.tsx","../primitives/Pagination/Pagination.tsx","../primitives/Tabs/Tabs.tsx","../templates/FeatureCards/FeatureCards.tsx","../templates/FeatureCardsSecondary/FeatureCardsSecondary.tsx","../templates/FeatureBullets/FeatureBullets.module.css","../templates/FeatureBullets/FeatureBullets.tsx","../components/Footer/Footer.tsx","../templates/Hero/Hero.tsx","../templates/Stats/Stats.tsx","../templates/FeatureScroll/FeatureScroll.tsx","../components/DotLottieInView/DotLottieInView.tsx","../templates/StickyStackedCards/StickyStackedCards.tsx","../templates/CTABanner/CTABanner.tsx","../components/Navbar/Navbar.tsx","../templates/DayNightTransition/DayNightTransition.tsx","../templates/DayNightTransition/webflowDayNightV2Ix.ts","../templates/DayNightTransition/dayNightTransitionPresets.ts","../templates/LogoMarquee/LogoMarquee.tsx","../primitives/DownloadBadge/DownloadBadge.tsx","../templates/Steps/Steps.tsx","../templates/DownloadBanner/DownloadBanner.tsx","../templates/TextScroll/TextScroll.tsx","../templates/StickyMarketCards/StickyMarketCards.tsx","../templates/Table/Table.tsx","../templates/Leaders/Leaders.tsx","../templates/Leaders/Leaders.module.css"],"sourcesContent":["import type { ButtonProps } from \"./Button.types\";\nimport \"./Button.css\";\n\nexport const Button = ({\n colorScheme = \"coral\",\n variant = \"primary\",\n iconPosition = \"none\",\n icon,\n label,\n fullWidth = false,\n showFocusRing = false,\n children,\n disabled,\n className,\n ...props\n}: ButtonProps) => {\n const isIconOnly = iconPosition === \"icon-only\";\n\n const classNames = [\n \"button\",\n `${colorScheme}_${variant}`,\n isIconOnly ? \"iconOnly\" : \"\",\n fullWidth ? \"fullWidth\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const iconNode = icon ? (\n <span className=\"icon\">{icon}</span>\n ) : null;\n\n return (\n <button\n className={classNames}\n disabled={disabled}\n aria-label={isIconOnly && label ? label : undefined}\n {...props}\n >\n {iconPosition === \"icon-left\" && iconNode}\n\n {!isIconOnly && (\n <span className=\"label\">{label ?? children}</span>\n )}\n\n {iconPosition === \"icon-only\" && iconNode}\n\n {iconPosition === \"icon-right\" && iconNode}\n\n {showFocusRing && (\n <span className=\"focusRing\" aria-hidden=\"true\" />\n )}\n </button>\n );\n};\n\nexport default Button;\n","import type { LinkProps } from \"./Link.types\";\nimport \"./Link.css\";\n\nconst ChevronIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M3 8h10M9 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const Link = ({\n colorScheme = \"coral\",\n label,\n icon,\n showChevron = true,\n disabled = false,\n children,\n className,\n onClick,\n ...props\n}: LinkProps) => {\n const hasIcon = !!icon;\n\n const classNames = [\n \"link\",\n colorScheme,\n hasIcon ? \"withIcon\" : \"withChevron\",\n disabled ? \"disabled\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n return (\n <a\n className={classNames}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : undefined}\n onClick={handleClick}\n {...props}\n >\n {hasIcon && <span className=\"icon\">{icon}</span>}\n\n <span className=\"label\">{label ?? children}</span>\n\n {!hasIcon && showChevron && (\n <span className=\"chevron\" aria-hidden=\"true\">\n <ChevronIcon />\n </span>\n )}\n </a>\n );\n};\n\nexport default Link;\n","import type { ChipProps } from \"./Chip.types\";\nimport \"./Chip.css\";\n\nexport const Chip = ({\n size = \"md\",\n label,\n icon,\n tag,\n selected = false,\n showFocusRing = false,\n disabled = false,\n children,\n className,\n ...props\n}: ChipProps) => {\n const classNames = [\n \"chip\",\n size,\n selected ? \"selected\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n className={classNames}\n disabled={disabled}\n aria-pressed={selected}\n {...props}\n >\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{label ?? children}</span>\n {tag && <span className=\"tag\">{tag}</span>}\n {showFocusRing && (\n <span className=\"focusRing\" aria-hidden=\"true\" />\n )}\n </button>\n );\n};\n\nexport default Chip;\n","import type { TagProps } from \"./Tag.types\";\nimport \"./Tag.css\";\n\nexport const Tag = ({\n size = \"sm\",\n variant = \"fill\",\n fontWeight = \"regular\",\n label,\n icon,\n children,\n className,\n ...props\n}: TagProps) => {\n const classNames = [\n \"tag\",\n size,\n variant,\n fontWeight,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span className={classNames} {...props}>\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{label ?? children}</span>\n </span>\n );\n};\n\nexport default Tag;\n","import { useState } from \"react\";\nimport type { AccordionProps } from \"./Accordion.types\";\nimport \"./Accordion.css\";\n\nconst ChevronIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const Accordion = ({\n title,\n children,\n open,\n defaultOpen = false,\n onToggle,\n showTopDivider = true,\n showBottomDivider = true,\n showFocusRing = false,\n className,\n}: AccordionProps) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : internalOpen;\n\n const handleToggle = () => {\n const next = !isOpen;\n if (!isControlled) setInternalOpen(next);\n onToggle?.(next);\n };\n\n const classNames = [\"accordion\", className ?? \"\"].filter(Boolean).join(\" \");\n\n return (\n <div\n className={classNames}\n style={{\n borderTop: showTopDivider ? `1px solid var(--accordion-divider-color)` : undefined,\n borderBottom: showBottomDivider ? `1px solid var(--accordion-divider-color)` : undefined,\n }}\n >\n <button\n className=\"header\"\n onClick={handleToggle}\n aria-expanded={isOpen}\n >\n <span className=\"titleWrapper\">\n <span className=\"title\">{title}</span>\n </span>\n <span className={[\"chevron\", isOpen ? \"chevronRotated\" : \"\"].filter(Boolean).join(\" \")}>\n <ChevronIcon />\n </span>\n {showFocusRing && (\n <span className=\"focusRing\" aria-hidden=\"true\" />\n )}\n </button>\n\n <div className={[\"bodyWrapper\", isOpen ? \"bodyWrapperOpen\" : \"\"].filter(Boolean).join(\" \")}>\n <div className=\"bodyInner\">\n <div className=\"body\">{children}</div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default Accordion;\n","import { forwardRef } from \"react\";\nimport type { TextFieldProps } from \"./TextField.types\";\nimport \"./TextField.css\";\n\nconst SuccessIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5.5 8l2 2 3-3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst FailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M8 2.5L14 13.5H2L8 2.5Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n (\n {\n variant = \"outline\",\n status = \"neutral\",\n disabled,\n className,\n ...inputProps\n },\n ref\n ) => {\n const wrapperClass = [\n \"tf-wrapper\",\n variant,\n status,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={wrapperClass} data-disabled={disabled || undefined}>\n <input\n ref={ref}\n className=\"tf-input\"\n disabled={disabled}\n {...inputProps}\n />\n\n {status === \"success\" && (\n <span className=\"iconSlot iconSuccess\">\n <SuccessIcon />\n </span>\n )}\n {status === \"fail\" && (\n <span className=\"iconSlot iconFail\">\n <FailIcon />\n </span>\n )}\n </div>\n );\n }\n);\n\nTextField.displayName = \"TextField\";\n\nexport default TextField;\n","import { forwardRef, useRef, useState, useCallback, type ChangeEvent } from \"react\";\nimport type { SearchFieldProps } from \"./SearchField.types\";\nimport \"./SearchField.css\";\n\n/* ── Icons ────────────────────────────────────────────────── */\n\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"6.5\" cy=\"6.5\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.25\" />\n <path d=\"M9.5 9.5L13 13\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n </svg>\n);\n\nconst ClearIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.25\" />\n <path d=\"M6 6l4 4M10 6l-4 4\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n </svg>\n);\n\nconst SuccessIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5.5 8l2 2 3-3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst FailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M8 2.5L14 13.5H2L8 2.5Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n);\n\n/* ── Component ────────────────────────────────────────────── */\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n variant = \"outline\",\n status = \"neutral\",\n value,\n defaultValue,\n onChange,\n onClear,\n disabled,\n className,\n ...inputProps\n },\n ref\n ) => {\n const innerRef = useRef<HTMLInputElement>(null);\n\n // Merge forwarded ref with inner ref so we can clear the native input\n const setRef = useCallback(\n (node: HTMLInputElement | null) => {\n (innerRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }\n },\n [ref]\n );\n\n // Track whether the input has text for uncontrolled usage\n const isControlled = value !== undefined;\n const [internalHasValue, setInternalHasValue] = useState(\n Boolean(defaultValue)\n );\n const hasValue = isControlled ? Boolean(value) : internalHasValue;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalHasValue(Boolean(e.target.value));\n }\n onChange?.(e);\n };\n\n const handleClear = () => {\n if (!isControlled && innerRef.current) {\n innerRef.current.value = \"\";\n setInternalHasValue(false);\n }\n onClear?.();\n innerRef.current?.focus();\n };\n\n // ── Derived display state ──────────────────────────────\n // Fail icon always visible when status=fail (even with no input)\n const showFailIcon = status === \"fail\" && !disabled;\n // Success icon only visible when status=success + has input\n const showSuccessIcon = status === \"success\" && hasValue && !disabled;\n // Clear button visible when has input (all statuses)\n const showClearButton = hasValue && !disabled;\n\n const wrapperClass = [\n \"sf-wrapper\",\n variant,\n status,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={wrapperClass}\n data-disabled={disabled || undefined}\n >\n {/* Always-present search icon */}\n <span className=\"iconSlot\">\n <SearchIcon />\n </span>\n\n <input\n ref={setRef}\n className=\"sf-input\"\n disabled={disabled}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n {...inputProps}\n />\n\n {/* Status icons — right of input, left of clear */}\n {showSuccessIcon && (\n <span className=\"iconSlot iconSuccess\">\n <SuccessIcon />\n </span>\n )}\n {showFailIcon && (\n <span className=\"iconSlot iconFail\">\n <FailIcon />\n </span>\n )}\n\n {/* Clear button — always rightmost */}\n {showClearButton && (\n <button\n type=\"button\"\n className=\"clearButton\"\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n );\n }\n);\n\nSearchField.displayName = \"SearchField\";\n\nexport default SearchField;\n","import { useState } from \"react\";\nimport type { BreadcrumbProps, BreadcrumbItem } from \"./Breadcrumb.types\";\nimport { BottomSheet } from \"../BottomSheet\";\nimport \"./Breadcrumb.css\";\n\nconst ChevronRightIcon = () => (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 3.5L10.5 8L6 12.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nfunction BreadcrumbLink({ item }: { item: BreadcrumbItem }) {\n return (\n <>\n <a href={item.href} onClick={item.onClick} className=\"bc-link\">\n {item.label}\n </a>\n <span className=\"bc-separator\" aria-hidden=\"true\">\n <ChevronRightIcon />\n </span>\n </>\n );\n}\n\nexport function Breadcrumb({\n items,\n size = \"md\",\n collapsible = true,\n className,\n ...navProps\n}: BreadcrumbProps) {\n const [sheetOpen, setSheetOpen] = useState(false);\n\n // Collapse only when there are enough items for the pattern:\n // first › … › parent › current (needs ≥ 4 items)\n const truncatable = collapsible && items.length > 3;\n\n const listClass = [\"bc-list\", size, truncatable ? \"collapsible\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n\n if (!truncatable) {\n return (\n <nav aria-label=\"Breadcrumb\" className={className} {...navProps}>\n <ol className={listClass}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={index} className=\"bc-item\">\n {isLast ? (\n <span className=\"bc-current\" aria-current=\"page\">\n {item.label}\n </span>\n ) : (\n <BreadcrumbLink item={item} />\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n }\n\n const firstItem = items[0];\n const middleItems = items.slice(1, items.length - 2);\n const parentItem = items[items.length - 2];\n const currentItem = items[items.length - 1];\n\n return (\n <>\n <nav aria-label=\"Breadcrumb\" className={className} {...navProps}>\n <ol className={listClass}>\n {/* Always-visible: first item */}\n <li className=\"bc-item\">\n <BreadcrumbLink item={firstItem} />\n </li>\n\n {/* Mobile only — ellipsis button, opens BottomSheet */}\n <li className=\"bc-ellipsisItem\">\n <button\n className=\"bc-ellipsisButton\"\n onClick={() => setSheetOpen(true)}\n aria-label=\"Show all breadcrumb items\"\n aria-haspopup=\"dialog\"\n >\n …\n </button>\n <span className=\"bc-separator\" aria-hidden=\"true\">\n <ChevronRightIcon />\n </span>\n </li>\n\n {/* Middle items — hidden on mobile (shown in BottomSheet instead) */}\n {middleItems.map((item, index) => (\n <li key={`m-${index}`} className=\"bc-middleItem\">\n <BreadcrumbLink item={item} />\n </li>\n ))}\n\n {/* Always-visible: parent (second-to-last) */}\n <li className=\"bc-item\">\n <BreadcrumbLink item={parentItem} />\n </li>\n\n {/* Always-visible: current page (last) */}\n <li className=\"bc-item\">\n <span className=\"bc-current\" aria-current=\"page\">\n {currentItem.label}\n </span>\n </li>\n </ol>\n </nav>\n\n {/* Mobile BottomSheet — shows hidden middle breadcrumb items */}\n <BottomSheet\n open={sheetOpen}\n onClose={() => setSheetOpen(false)}\n showHandleBar\n showHeader={false}\n >\n <ul className=\"bc-sheet-list\" role=\"list\">\n {middleItems.map((item, index) => (\n <li key={`sheet-${index}`} className=\"bc-sheet-item\">\n <a\n href={item.href}\n className=\"bc-sheet-link\"\n onClick={(e) => {\n item.onClick?.(e as React.MouseEvent<HTMLAnchorElement>);\n setSheetOpen(false);\n }}\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n </BottomSheet>\n </>\n );\n}\n\nexport default Breadcrumb;\n","import { useEffect, useId } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { BottomSheetProps } from \"./BottomSheet.types\";\nimport \"./BottomSheet.css\";\n\nconst XMarkIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 3l10 10M13 3L3 13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nexport const BottomSheet = ({\n open,\n onClose,\n title,\n showHeader = true,\n showHandleBar = true,\n primaryAction,\n secondaryAction,\n children,\n}: BottomSheetProps) => {\n const titleId = useId();\n\n useEffect(() => {\n if (!open) return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"bs-overlay\"\n onClick={onClose}\n aria-hidden=\"true\"\n >\n <div\n className=\"bs-sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n onClick={(e) => e.stopPropagation()}\n >\n {showHandleBar && (\n <div className=\"bs-handle-container\">\n <div className=\"bs-handle-bar\" />\n </div>\n )}\n\n {showHeader && (\n <div className=\"bs-header\">\n <div className=\"bs-header-spacer\" />\n {title && (\n <p id={titleId} className=\"bs-title\">\n {title}\n </p>\n )}\n <div className=\"bs-close-container\">\n <button\n type=\"button\"\n className=\"bs-close-btn\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <XMarkIcon />\n </button>\n </div>\n </div>\n )}\n\n {children && <div className=\"bs-body\">{children}</div>}\n\n {(primaryAction || secondaryAction) && (\n <div className=\"bs-actions\">\n {primaryAction && (\n <button\n type=\"button\"\n className=\"bs-action-primary\"\n onClick={primaryAction.onClick}\n >\n {primaryAction.label}\n </button>\n )}\n {secondaryAction && (\n <button\n type=\"button\"\n className=\"bs-action-secondary\"\n onClick={secondaryAction.onClick}\n >\n {secondaryAction.label}\n </button>\n )}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport default BottomSheet;\n","import { useEffect, useRef, useState } from \"react\";\nimport type { ChipDropdownProps } from \"./ChipDropdown.types\";\nimport { BottomSheet } from \"../BottomSheet\";\nimport \"./ChipDropdown.css\";\n\nconst ChevronDownIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 6l5 5 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2 6l3 3 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport const ChipDropdown = ({\n size = \"md\",\n label,\n tag,\n icon,\n options,\n value,\n onChange,\n disabled = false,\n className,\n ...props\n}: ChipDropdownProps) => {\n const [open, setOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(\n () => typeof window !== \"undefined\" && window.matchMedia(\"(max-width: 767px)\").matches\n );\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const selectedOption = options.find((o) => o.value === value) ?? null;\n const displayLabel = selectedOption ? selectedOption.label : label;\n const isSelected = selectedOption !== null;\n\n // Track mobile breakpoint reactively\n useEffect(() => {\n const mq = window.matchMedia(\"(max-width: 767px)\");\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, []);\n\n // Close desktop dropdown on outside click\n useEffect(() => {\n if (!open || isMobile) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [open, isMobile]);\n\n const triggerClassNames = [\n \"cd-trigger\",\n size,\n isSelected ? \"selected\" : \"\",\n open ? \"expand\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n\n const handleSelect = (optionValue: string) => {\n onChange?.(optionValue);\n setOpen(false);\n };\n\n const optionList = options.map((option) => {\n const isActive = option.value === value;\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isActive}\n className={[\"cd-item\", isActive ? \"itemSelected\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => handleSelect(option.value)}\n >\n <span className=\"cd-itemLabel\">{option.label}</span>\n {isActive && (\n <span className=\"cd-itemCheck\">\n <CheckIcon />\n </span>\n )}\n </li>\n );\n });\n\n return (\n <div ref={wrapperRef} className=\"cd-wrapper\">\n <button\n type=\"button\"\n className={triggerClassNames}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((prev) => !prev)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {icon && <span className=\"cd-icon\">{icon}</span>}\n <span className=\"cd-label\">{displayLabel}</span>\n {tag && <span className=\"cd-tag\">{tag}</span>}\n <span\n className={[\"cd-chevron\", open ? \"chevronOpen\" : \"\"].filter(Boolean).join(\" \")}\n aria-hidden=\"true\"\n >\n <ChevronDownIcon />\n </span>\n </button>\n\n {/* Desktop: inline dropdown list */}\n {!isMobile && open && (\n <ul role=\"listbox\" aria-label={label} className=\"cd-list\">\n {optionList}\n </ul>\n )}\n\n {/* Mobile: bottom sheet */}\n {isMobile && (\n <BottomSheet\n open={open}\n onClose={() => setOpen(false)}\n title={label}\n showHandleBar\n showHeader\n >\n <ul role=\"listbox\" aria-label={label} className=\"cd-list cd-list--sheet\">\n {optionList}\n </ul>\n </BottomSheet>\n )}\n </div>\n );\n};\n\nexport default ChipDropdown;\n","import type { CardProps } from \"./Card.types\";\nimport { Link } from \"../../primitives/Link\";\nimport \"./CardPrimaryVariant.css\";\n\ntype PrimaryProps = Extract<CardProps, { variant: \"primary\" }>;\n\nexport const CardPrimaryVariant = ({\n colorScheme = \"light\",\n title,\n description,\n image,\n imageAlt = \"\",\n showLink = true,\n linkText = \"Learn more\",\n onLinkClick,\n className,\n variant: _variant,\n ...props\n}: PrimaryProps) => {\n const isInverse = colorScheme === \"dark\" || colorScheme === \"brand\" || colorScheme === \"image\";\n\n return (\n <div\n className={[\n \"card-primary\",\n `style--${colorScheme}`,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n {...props}\n >\n {/* ── Full-bleed image overlay (image colorScheme only) ─── */}\n {colorScheme === \"image\" && image && (\n <div aria-hidden=\"true\" className=\"cp-imageOverlay\">\n <img alt=\"\" className=\"cp-overlayImg\" src={image} />\n <div className=\"cp-gradient\" />\n </div>\n )}\n\n {/* ── Content ──────────────────────────────────────── */}\n <div className=\"cp-content\">\n <p className={[\"cp-title\", isInverse ? \"textInverse\" : \"textDefault\"].join(\" \")}>\n {title}\n </p>\n <p className={[\"cp-description\", isInverse ? \"textInverse\" : \"textDefault\"].join(\" \")}>\n {description}\n </p>\n {showLink && (\n <Link\n colorScheme={isInverse ? \"white\" : \"coral\"}\n label={linkText}\n onClick={onLinkClick}\n />\n )}\n </div>\n\n {/* ── Image section (light / dark / brand colorSchemes) ── */}\n {colorScheme !== \"image\" && image && (\n <div className=\"cp-imageSection\">\n <img alt={imageAlt} className=\"cp-image\" src={image} />\n </div>\n )}\n </div>\n );\n};\n","import type { CardProps } from \"./Card.types\";\nimport { Link } from \"../../primitives/Link\";\nimport \"./CardSecondaryVariant.css\";\n\ntype SecondaryProps = Extract<CardProps, { variant: \"secondary\" }>;\n\nexport const CardSecondaryVariant = ({\n title,\n description,\n icon,\n showIcon = true,\n showLink = true,\n linkText = \"Learn more\",\n onLinkClick,\n className,\n variant: _variant,\n ...props\n}: SecondaryProps) => {\n return (\n <div\n className={[\"card-secondary\", className ?? \"\"].filter(Boolean).join(\" \")}\n {...props}\n >\n {showIcon && icon && <span className=\"cs-icon\">{icon}</span>}\n\n <p className=\"cs-title\">{title}</p>\n\n <p className=\"cs-description\">{description}</p>\n\n {showLink && (\n <Link\n colorScheme=\"coral\"\n label={linkText}\n onClick={onLinkClick}\n />\n )}\n </div>\n );\n};\n","import type { CardProps } from \"./Card.types\";\nimport { Tag } from \"../../primitives/Tag\";\nimport \"./CardThumbnailVariant.css\";\n\nconst LinkIcon = () => (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.25 2.625H3.5A1.75 1.75 0 0 0 1.75 4.375v5.25A1.75 1.75 0 0 0 3.5 11.375h5.25a1.75 1.75 0 0 0 1.75-1.75V7.875\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.25\"\n />\n <path\n d=\"M7.875 1.75h4.375v4.375M12.25 1.75 6.125 7.875\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.25\"\n />\n </svg>\n);\n\nconst PlayIcon = () => (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"80\"\n viewBox=\"0 0 80 80\"\n width=\"80\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" fill=\"rgba(255,255,255,0.88)\" r=\"40\" />\n <path d=\"M32 27l22 13-22 13V27z\" fill=\"rgba(24,28,37,0.72)\" />\n </svg>\n);\n\ntype ThumbnailProps = Extract<CardProps, { variant: \"thumbnail\" }>;\n\nexport const CardThumbnailVariant = ({\n type = \"video\",\n thumbnail,\n thumbnailAlt = \"\",\n title,\n summary,\n tags = [],\n hideTags = false,\n showCopyLink = true,\n onCopyLink,\n avatar,\n avatarAlt = \"\",\n className,\n variant: _variant,\n ...props\n}: ThumbnailProps) => {\n const isVideo = type === \"video\";\n\n return (\n <div\n className={[\"card-thumbnail\", className ?? \"\"].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* ── Thumbnail ──────────────────────────────────── */}\n <div className=\"ct-thumbnailWrapper\">\n <img alt={thumbnailAlt} className=\"ct-thumbnailImage\" src={thumbnail} />\n {isVideo && (\n <span aria-label=\"Play video\" className=\"ct-playButton\">\n <PlayIcon />\n </span>\n )}\n {!isVideo && avatar && (\n <img alt={avatarAlt} className=\"ct-avatar\" src={avatar} />\n )}\n </div>\n\n {/* ── Content ────────────────────────────────────── */}\n <div className=\"ct-content\">\n <div className=\"ct-metaRow\">\n {!hideTags && (\n <div className=\"ct-tagsList\">\n {tags.map((tag, i) => (\n <Tag key={i} icon={tag.icon} label={tag.label} size=\"md\" variant=\"fill\" />\n ))}\n </div>\n )}\n {showCopyLink && (\n <button\n aria-label=\"Copy link\"\n className=\"ct-copyLink\"\n onClick={onCopyLink}\n type=\"button\"\n >\n <LinkIcon />\n </button>\n )}\n </div>\n <p className=\"ct-title\">{title}</p>\n <p className=\"ct-summary\">{summary}</p>\n </div>\n </div>\n );\n};\n","import type { CardProps } from \"./Card.types\";\nimport { CardPrimaryVariant } from \"./CardPrimaryVariant\";\nimport { CardSecondaryVariant } from \"./CardSecondaryVariant\";\nimport { CardThumbnailVariant } from \"./CardThumbnailVariant\";\n\nexport const Card = (props: CardProps) => {\n if (props.variant === \"primary\") {\n return <CardPrimaryVariant {...props} />;\n }\n if (props.variant === \"secondary\") {\n return <CardSecondaryVariant {...props} />;\n }\n return <CardThumbnailVariant {...props} />;\n};\n\nexport default Card;\n","import type { PaginationProps } from \"./Pagination.types\";\nimport \"./Pagination.css\";\n\nconst ChevronLeft = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M10 12L6 8L10 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst ChevronRight = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M6 4L10 8L6 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\ntype PageItem = number | \"ellipsis-left\" | \"ellipsis-right\";\n\nfunction getPageItems(currentPage: number, totalPages: number): PageItem[] {\n if (totalPages <= 5) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n if (currentPage <= 3) {\n return [1, 2, 3, 4, 5, \"ellipsis-right\", totalPages];\n }\n if (currentPage >= totalPages - 2) {\n return [1, \"ellipsis-left\", totalPages - 4, totalPages - 3, totalPages - 2, totalPages - 1, totalPages];\n }\n return [1, \"ellipsis-left\", currentPage - 1, currentPage, currentPage + 1, \"ellipsis-right\", totalPages];\n}\n\nexport const Pagination = ({\n currentPage,\n totalPages,\n onPageChange,\n className,\n}: PaginationProps) => {\n const items = getPageItems(currentPage, totalPages);\n const isPrevDisabled = currentPage <= 1;\n const isNextDisabled = currentPage >= totalPages;\n\n return (\n <nav\n className={[\"pagination\", className ?? \"\"].filter(Boolean).join(\" \")}\n aria-label=\"Pagination navigation\"\n >\n <button\n className={[\"navButton\", isPrevDisabled ? \"navButtonDisabled\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => onPageChange(currentPage - 1)}\n disabled={isPrevDisabled}\n aria-label=\"Previous page\"\n >\n <span className=\"navIcon\"><ChevronLeft /></span>\n </button>\n\n {items.map((item, index) => {\n if (item === \"ellipsis-left\" || item === \"ellipsis-right\") {\n return (\n <span\n key={`${item}-${index}`}\n className=\"ellipsis\"\n aria-hidden=\"true\"\n >\n …\n </span>\n );\n }\n\n const isSelected = item === currentPage;\n return (\n <button\n key={item}\n className={[\"pageButton\", isSelected ? \"pageButtonSelected\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => { if (!isSelected) onPageChange(item); }}\n aria-current={isSelected ? \"page\" : undefined}\n aria-label={`Page ${item}`}\n >\n {item}\n </button>\n );\n })}\n\n <button\n className={[\"navButton\", isNextDisabled ? \"navButtonDisabled\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => onPageChange(currentPage + 1)}\n disabled={isNextDisabled}\n aria-label=\"Next page\"\n >\n <span className=\"navIcon\"><ChevronRight /></span>\n </button>\n </nav>\n );\n};\n\nexport default Pagination;\n","import type { TabsProps } from \"./Tabs.types\";\nimport { Chip } from \"../Chip\";\nimport \"./Tabs.css\";\n\nexport const Tabs = ({\n items,\n activeId,\n onChange,\n className,\n ...props\n}: TabsProps) => {\n return (\n <div\n className={[\"tabs-menu w-tab-menu\", className].filter(Boolean).join(\" \")}\n role=\"tablist\"\n {...props}\n >\n {items.map((item, i) => {\n const isActive = item.id === activeId;\n return (\n <Chip\n key={item.id}\n label={item.label}\n selected={isActive}\n onClick={() => onChange(item.id)}\n className={isActive ? \"tab-active\" : \"\"}\n data-w-tab={item.label}\n id={`w-tabs-0-data-w-tab-${i}`}\n aria-controls={`w-tabs-0-data-w-pane-${i}`}\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n role=\"tab\"\n />\n );\n })}\n </div>\n );\n};\n\nexport default Tabs;\n","import { Card } from \"../../components/Card\";\nimport { Link } from \"../../primitives/Link\";\nimport type { FeatureCardsProps } from \"./FeatureCards.types\";\nimport \"./FeatureCards.css\";\n\nexport const FeatureCards = ({\n sectionTitle,\n sectionDescription,\n showLink = false,\n linkText = \"Learn more\",\n onLinkClick,\n cardColorScheme = \"image\",\n cards,\n}: FeatureCardsProps) => {\n return (\n <section className=\"fc-section\">\n <div className=\"fc-container\">\n <div className=\"fc-header\">\n <h2 className=\"fc-sectionTitle\">{sectionTitle}</h2>\n\n {sectionDescription && (\n <p className=\"fc-sectionDescription\">{sectionDescription}</p>\n )}\n\n {showLink && (\n <Link\n colorScheme=\"coral\"\n label={linkText}\n onClick={onLinkClick}\n />\n )}\n </div>\n\n <div className=\"fc-grid\">\n {cards.map((card, index) => (\n <Card\n key={index}\n variant=\"primary\"\n colorScheme={card.colorScheme ?? cardColorScheme}\n title={card.title}\n description={card.description}\n image={card.image}\n imageAlt={card.imageAlt}\n showLink={card.showLink}\n linkText={card.linkText}\n onLinkClick={card.onLinkClick}\n />\n ))}\n </div>\n </div>\n </section>\n );\n};\n","import { Card } from \"../../components/Card\";\nimport { Link } from \"../../primitives/Link\";\nimport type { FeatureCardSecondaryItem, FeatureCardsSecondaryProps } from \"./FeatureCardsSecondary.types\";\nimport \"./FeatureCardsSecondary.css\";\n\nconst externalLinkRel = (href: string | undefined) =>\n href && /^https?:\\/\\//i.test(href) ? \"noopener noreferrer\" : undefined;\n\nconst TwoCardsItem = ({ card, index }: { card: FeatureCardSecondaryItem; index: number }) => {\n const isDark = card.colorScheme === \"dark\";\n const showCardLink = card.showLink !== false;\n\n return (\n <div className=\"fcs-twoCardWrap\">\n <div\n className={[\n \"fcs-twoCard\",\n isDark ? \"fcs-twoCard--dark\" : \"fcs-twoCard--light\",\n ].join(\" \")}\n >\n <div className=\"fcs-twoCard-body\">\n <div className=\"fcs-twoCard-content\">\n <h3 className=\"fcs-twoCard-title\">{card.title}</h3>\n <p className=\"fcs-twoCard-description\">{card.description}</p>\n {showCardLink && (\n <div className=\"fcs-twoCard-linkWrap\">\n <Link\n colorScheme=\"coral\"\n href={card.linkHref}\n label={card.linkText ?? \"Learn more\"}\n rel={externalLinkRel(card.linkHref)}\n onClick={card.onLinkClick}\n />\n </div>\n )}\n </div>\n\n {card.platforms && card.platforms.length > 0 && (\n <div className=\"fcs-twoCard-platformsOuter\">\n <h3 className=\"fcs-twoCard-platformsHeading\">\n {card.platformsHeading ?? \"Available on\"}\n </h3>\n <div className=\"fcs-twoCard-platformRow\">\n {card.platforms.map((platform, i) => (\n <a\n key={`${platform.label}-${i}`}\n className={[\n \"fcs-platformLink\",\n isDark ? \"fcs-platformLink--dark\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n href={platform.href}\n rel={externalLinkRel(platform.href)}\n >\n <img\n alt=\"\"\n className=\"fcs-platformLink-icon\"\n height={32}\n src={platform.iconSrc}\n width={32}\n />\n <span className=\"fcs-platformLink-label\">{platform.label}</span>\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {card.image && (\n <div className=\"fcs-twoCard-imageSection\">\n <img\n alt={card.imageAlt ?? \"\"}\n className=\"fcs-twoCard-image\"\n decoding=\"async\"\n loading={index === 0 ? \"eager\" : \"lazy\"}\n src={card.image}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nconst OneCardPanel = ({ card }: { card: FeatureCardSecondaryItem }) => {\n const showCardLink = card.showLink !== false;\n\n return (\n <div className=\"fcs-oneCardShell\">\n <div className=\"fcs-oneCardGrid fcs-twoCard--dark\">\n <div className=\"fcs-oneCardLeft\">\n <div className=\"fcs-oneCardContentBlock\">\n <h3 className=\"fcs-twoCard-title\">{card.title}</h3>\n <p className=\"fcs-twoCard-description\">{card.description}</p>\n {showCardLink && (\n <div className=\"fcs-twoCard-linkWrap\">\n <Link\n colorScheme=\"coral\"\n href={card.linkHref}\n label={card.linkText ?? \"Learn more\"}\n rel={externalLinkRel(card.linkHref)}\n onClick={card.onLinkClick}\n />\n </div>\n )}\n </div>\n\n {card.platforms && card.platforms.length > 0 && (\n <div className=\"fcs-twoCard-platformsOuter\">\n <h3 className=\"fcs-twoCard-platformsHeading\">\n {card.platformsHeading ?? \"Available on\"}\n </h3>\n <div className=\"fcs-twoCard-platformRow\">\n {card.platforms.map((platform, i) => (\n <a\n key={`${platform.label}-${i}`}\n className=\"fcs-platformLink fcs-platformLink--dark\"\n href={platform.href}\n rel={externalLinkRel(platform.href)}\n >\n <img\n alt=\"\"\n className=\"fcs-platformLink-icon\"\n height={32}\n src={platform.iconSrc}\n width={32}\n />\n <span className=\"fcs-platformLink-label\">{platform.label}</span>\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {card.image && (\n <div className=\"fcs-oneCardRight\">\n <img\n alt={card.imageAlt ?? \"\"}\n className=\"fcs-oneCardImage\"\n decoding=\"async\"\n loading=\"eager\"\n src={card.image}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const FeatureCardsSecondary = ({\n variant = \"default\",\n sectionTitle,\n sectionDescription,\n showLink = false,\n linkText = \"Learn more\",\n onLinkClick,\n cards,\n}: FeatureCardsSecondaryProps) => {\n const sectionHeader = (\n <div className=\"fcs-header\">\n {sectionTitle && <h2 className=\"fcs-sectionTitle\">{sectionTitle}</h2>}\n\n {sectionDescription && (\n <p className=\"fcs-sectionDescription\">{sectionDescription}</p>\n )}\n\n {showLink && (\n <Link colorScheme=\"coral\" label={linkText} onClick={onLinkClick} />\n )}\n </div>\n );\n\n if (variant === \"twoCards\") {\n return (\n <section className=\"fcs-section\">\n <div className=\"fcs-container\">\n {sectionHeader}\n\n <div className=\"fcs-grid fcs-grid--twoCards\">\n {cards.map((card, index) => (\n <TwoCardsItem\n card={card}\n index={index}\n key={`${card.title}-${index}`}\n />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n if (variant === \"oneCard\") {\n const card = cards[0];\n if (!card) {\n return null;\n }\n\n return (\n <section className=\"fcs-section\">\n <div className=\"fcs-container\">\n {sectionHeader}\n\n <OneCardPanel card={card} />\n </div>\n </section>\n );\n }\n\n return (\n <section className=\"fcs-section\">\n <div className=\"fcs-container\">\n {sectionHeader}\n\n <div className={`fcs-grid fcs-grid--${cards.length === 4 ? \"4\" : \"3\"}`}>\n {cards.map((card, index) => (\n <Card\n key={index}\n variant=\"secondary\"\n title={card.title}\n description={card.description}\n icon={card.icon}\n showIcon={card.showIcon}\n showLink={card.showLink}\n linkText={card.linkText}\n onLinkClick={card.onLinkClick}\n />\n ))}\n </div>\n </div>\n </section>\n );\n};\n","/* ── Section shell ─────────────────────────────────────────── */\n\n.section {\n width: 100%;\n background-color: var(--color-slate-50);\n}\n\n/* ── Inner container ───────────────────────────────────────── */\n\n.container {\n display: flex;\n flex-direction: column;\n max-width: var(--content-width-1280);\n margin: 0 auto;\n padding: var(--spacing-56) var(--spacing-16);\n box-sizing: border-box;\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .container {\n padding: var(--spacing-112) var(--spacing-24);\n }\n}\n\n/* ── Split layout ──────────────────────────────────────────── */\n\n.split {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--spacing-24);\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .split {\n flex-direction: row;\n align-items: center;\n gap: 8rem;\n /* 128px — no token at this scale */\n }\n\n /* Reverse column order when image is on the left */\n .split--image-left {\n flex-direction: row-reverse;\n }\n}\n\n/* ── Content column ────────────────────────────────────────── */\n\n.content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--spacing-24);\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .content {\n gap: var(--spacing-32);\n width: 540px;\n flex-shrink: 0;\n }\n}\n\n/* ── Title ─────────────────────────────────────────────────── */\n\n.title {\n font-family: var(--typography-h2-font-family);\n font-size: var(--typography-h2-font-size);\n font-weight: var(--typography-h2-font-weight);\n line-height: var(--typography-h2-line-height);\n color: var(--text-primary);\n margin: 0;\n}\n\n/* ── Bullet List ───────────────────────────────────────────── */\n\n.bulletList {\n display: flex;\n flex-direction: column;\n width: 100%;\n /* The HTML shows a grid layout with small gap, but flex is more robust here.\n We'll use border-bottom to separate items. */\n}\n\n.bulletItem {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-16);\n padding: var(--spacing-16) 0;\n border-bottom: 1px solid var(--color-slate-100);\n}\n\n.bulletItem:first-child {\n padding-top: 0;\n}\n\n.bulletItem:last-child {\n border-bottom: none;\n padding-bottom: 0;\n}\n\n/* ── Icon ──────────────────────────────────────────────────── */\n\n.iconWrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem; /* 24px */\n height: 1.5rem; /* 24px */\n flex-shrink: 0;\n color: var(--color-slate-1200);\n margin-top: 2px; /* Slight optical adjustment to align with text */\n}\n\n.icon {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n/* ── Bullet Text ───────────────────────────────────────────── */\n\n.bulletText {\n font-family: var(--typography-body-md-font-family);\n font-size: var(--typography-body-md-font-size);\n font-weight: var(--typography-body-md-font-weight);\n line-height: var(--typography-body-md-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n/* ── Image column ──────────────────────────────────────────── */\n\n.imageWrapper {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: var(--radius-2xl);\n /* 24px mobile */\n overflow: hidden;\n flex-shrink: 0;\n position: relative;\n background-color: transparent;\n}\n\n@media (min-width: 992px) {\n .imageWrapper {\n flex: 1 0 0;\n width: auto;\n border-radius: 2rem;\n /* 32px desktop — no exact token */\n }\n}\n\n.image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n display: block;\n}\n","import type { FeatureBulletsProps } from \"./FeatureBullets.types\";\nimport styles from \"./FeatureBullets.module.css\";\n\nconst CheckIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" className={styles.icon}>\n <path d=\"M12 4.375C9.07031 4.375 6.41406 5.9375 4.92969 8.4375C3.48438 10.9766 3.48438 14.0625 4.92969 16.5625C6.41406 19.1016 9.07031 20.625 12 20.625C14.8906 20.625 17.5469 19.1016 19.0312 16.5625C20.4766 14.0625 20.4766 10.9766 19.0312 8.4375C17.5469 5.9375 14.8906 4.375 12 4.375ZM12 22.5C8.40625 22.5 5.125 20.625 3.32812 17.5C1.53125 14.4141 1.53125 10.625 3.32812 7.5C5.125 4.41406 8.40625 2.5 12 2.5C15.5547 2.5 18.8359 4.41406 20.6328 7.5C22.4297 10.625 22.4297 14.4141 20.6328 17.5C18.8359 20.625 15.5547 22.5 12 22.5ZM16.4141 10.6641L11.4141 15.6641C11.0234 16.0547 10.4375 16.0547 10.0859 15.6641L7.58594 13.1641C7.19531 12.8125 7.19531 12.2266 7.58594 11.875C7.9375 11.4844 8.52344 11.4844 8.91406 11.875L10.75 13.7109L15.0859 9.375C15.4375 8.98438 16.0234 8.98438 16.4141 9.375C16.7656 9.72656 16.7656 10.3125 16.4141 10.6641Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const FeatureBullets = ({\n title,\n bullets,\n image,\n imageAlt = \"\",\n imagePosition = \"right\",\n}: FeatureBulletsProps) => {\n return (\n <section className={styles.section}>\n <div className={styles.container}>\n <div\n className={[\n styles.split,\n imagePosition === \"left\" ? styles[\"split--image-left\"] : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className={styles.content}>\n <h2 className={styles.title}>{title}</h2>\n\n {bullets && bullets.length > 0 && (\n <div className={styles.bulletList}>\n {bullets.map((bullet, i) => (\n <div key={i} className={styles.bulletItem}>\n <div className={styles.iconWrapper}>\n <CheckIcon />\n </div>\n <p className={styles.bulletText}>{bullet}</p>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {image && (\n <div className={styles.imageWrapper}>\n <img\n alt={imageAlt}\n className={styles.image}\n src={image}\n />\n </div>\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default FeatureBullets;\n","import { useState } from \"react\";\nimport type { FooterProps, FooterDerivGoProps } from \"./Footer.types\";\nimport \"./Footer.css\";\n\n/* ── Internal icons ───────────────────────────────────────────── */\n\nconst ExternalLinkIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M2 2H10M10 2V10M10 2L2 10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M2 4L6 8L10 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/* ── Deriv GO shared content ──────────────────────────────────── */\n\ninterface DerivGoBadgesProps {\n googlePlayBadge?: FooterDerivGoProps[\"googlePlayBadge\"];\n appStoreBadge?: FooterDerivGoProps[\"appStoreBadge\"];\n huaweiBadge?: FooterDerivGoProps[\"huaweiBadge\"];\n availabilityNote?: string;\n}\n\nconst DerivGoBadges = ({\n googlePlayBadge,\n appStoreBadge,\n huaweiBadge,\n availabilityNote,\n}: DerivGoBadgesProps) => (\n <>\n <div className=\"footer__app-badges\">\n {googlePlayBadge && (\n <a\n href={googlePlayBadge.href}\n className={googlePlayBadge.icon ? \"footer__app-badge-svg\" : \"footer__app-badge\"}\n aria-label={googlePlayBadge.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {googlePlayBadge.icon ?? <img src={googlePlayBadge.imageSrc} alt={googlePlayBadge.imageAlt} />}\n </a>\n )}\n {appStoreBadge && (\n <a\n href={appStoreBadge.href}\n className={appStoreBadge.icon ? \"footer__app-badge-svg\" : \"footer__app-badge\"}\n aria-label={appStoreBadge.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {appStoreBadge.icon ?? <img src={appStoreBadge.imageSrc} alt={appStoreBadge.imageAlt} />}\n </a>\n )}\n {huaweiBadge && (\n <a\n href={huaweiBadge.href}\n className={huaweiBadge.icon ? \"footer__app-badge-svg\" : \"footer__app-badge\"}\n aria-label={huaweiBadge.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {huaweiBadge.icon ?? <img src={huaweiBadge.imageSrc} alt={huaweiBadge.imageAlt} />}\n </a>\n )}\n </div>\n {availabilityNote && (\n <p className=\"footer__app-note\">{availabilityNote}</p>\n )}\n</>\n);\n\n/* ── Nav link ─────────────────────────────────────────────────── */\n\ninterface NavLinkProps {\n label: string;\n href?: string;\n isExternal?: boolean;\n onClick?: () => void;\n}\n\nconst NavLink = ({ label, href, isExternal, onClick }: NavLinkProps) => (\n <a\n href={href}\n className=\"footer__nav-link\"\n onClick={onClick}\n {...(isExternal ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {label}\n {isExternal && <ExternalLinkIcon />}\n </a>\n);\n\n/* ── Footer ───────────────────────────────────────────────────── */\n\nexport const Footer = ({\n logoSrc,\n logoAlt = \"Deriv\",\n navColumns,\n socialLinks = [],\n derivGo,\n investorsInPeopleSrc,\n investorsInPeopleAlt = \"Investors in People - Platinum\",\n licenseText,\n riskWarningText,\n aiSummary,\n className,\n ...props\n}: FooterProps) => {\n // Flatten all nav sections for the mobile/tablet accordion\n const allSections = navColumns.flat();\n\n const [openSections, setOpenSections] = useState<Set<number>>(new Set());\n\n const toggleSection = (index: number) => {\n setOpenSections((prev) => {\n const next = new Set(prev);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n return next;\n });\n };\n\n const aiLabel = aiSummary?.label ?? \"Ask AI for a summary of Deriv\";\n\n return (\n <footer\n className={[\"footer\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"footer__inner\">\n\n {/* ── HEADER ROW: Logo · [AI bar — desktop] · Social icons ── */}\n <div className=\"footer__header\">\n <div className=\"footer__logo-wrapper\">\n <img\n src={logoSrc}\n alt={logoAlt}\n className=\"footer__logo\"\n />\n </div>\n\n {/* AI summary bar — visible only on desktop, inline in header */}\n {aiSummary && (\n <div className=\"footer__ai-bar footer__ai-bar--inline\">\n <span className=\"footer__ai-bar-label\">{aiLabel}</span>\n <div className=\"footer__ai-bar-icons\">\n {aiSummary.items.map((item, i) => (\n <a\n key={i}\n href={item.href}\n aria-label={item.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img className=\"footer__ai-icon\" src={item.imageSrc} alt={item.imageAlt} />\n </a>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"footer__social footer__social--in-header\">\n {socialLinks.map((link, i) => (\n <a\n key={i}\n href={link.href}\n className=\"footer__social-icon\"\n aria-label={link.ariaLabel}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {link.icon}\n </a>\n ))}\n </div>\n </div>\n\n {/* ── AI SUMMARY BAR — mobile only (standalone card) ── */}\n {aiSummary && (\n <div className=\"footer__ai-section\">\n <div className=\"footer__ai-bar footer__ai-bar--block\">\n <span className=\"footer__ai-bar-label\">{aiLabel}</span>\n <div className=\"footer__ai-bar-icons\">\n {aiSummary.items.map((item, i) => (\n <a\n key={i}\n href={item.href}\n aria-label={item.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img className=\"footer__ai-icon\" src={item.imageSrc} alt={item.imageAlt} />\n </a>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* ── NAVIGATION — Desktop: multi-column grid + sidebar ── */}\n <div className=\"footer__nav footer__nav--columns\">\n {navColumns.map((column, colIdx) => (\n <div key={colIdx} className=\"footer__column\">\n {column.map((section, secIdx) => (\n <div key={secIdx} className=\"footer__nav-section\">\n <p className=\"footer__nav-title\">{section.title}</p>\n <ul className=\"footer__nav-links\">\n {section.links.map((link, linkIdx) => (\n <li key={linkIdx}>\n <NavLink {...link} />\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n ))}\n\n {/* Desktop sidebar: Investors in People + Deriv GO with QR */}\n <div className=\"footer__sidebar\">\n {investorsInPeopleSrc && (\n <div className=\"footer__investors-card\">\n <img\n src={investorsInPeopleSrc}\n alt={investorsInPeopleAlt}\n className=\"footer__investors-img\"\n />\n </div>\n )}\n\n {derivGo && (\n <div className=\"footer__deriv-go-card\">\n <div className=\"footer__deriv-go-header\">\n <img\n src={derivGo.logoSrc}\n alt={derivGo.logoAlt ?? \"Deriv GO\"}\n className=\"footer__deriv-go-logo\"\n />\n <span className=\"footer__deriv-go-title\">\n {derivGo.title ?? \"Deriv GO\"}\n </span>\n </div>\n <p className=\"footer__deriv-go-desc\">\n {derivGo.description ?? \"Trade multipliers on our mobile app.\"}\n </p>\n {(derivGo.qrCodeSrc || derivGo.qrCodeIcon) && (\n <div className=\"footer__deriv-go-qr\">\n {derivGo.qrCodeIcon ? (\n <div className=\"footer__deriv-go-qr-icon\">\n {derivGo.qrCodeIcon}\n </div>\n ) : (\n <img\n src={derivGo.qrCodeSrc}\n alt={derivGo.qrCodeAlt ?? \"Scan to download\"}\n className=\"footer__deriv-go-qr-img\"\n />\n )}\n <span className=\"footer__deriv-go-qr-label\">\n {derivGo.scanToDownloadLabel ?? \"Scan to download\"}\n </span>\n </div>\n )}\n <DerivGoBadges\n googlePlayBadge={derivGo.googlePlayBadge}\n appStoreBadge={derivGo.appStoreBadge}\n huaweiBadge={derivGo.huaweiBadge}\n availabilityNote={derivGo.availabilityNote}\n />\n </div>\n )}\n </div>\n </div>\n\n {/* ── NAVIGATION — Mobile/Tablet: accordion ── */}\n <div className=\"footer__nav footer__nav--accordion\">\n {allSections.map((section, idx) => {\n const isOpen = openSections.has(idx);\n return (\n <div\n key={idx}\n className={[\n \"footer__accordion-item\",\n isOpen && \"footer__accordion-item--open\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <button\n type=\"button\"\n className=\"footer__accordion-toggle\"\n onClick={() => toggleSection(idx)}\n aria-expanded={isOpen}\n >\n <span className=\"footer__accordion-label\">\n {section.title}\n </span>\n <span className=\"footer__accordion-chevron\">\n <ChevronDownIcon />\n </span>\n </button>\n {isOpen && (\n <ul className=\"footer__accordion-links\">\n {section.links.map((link, linkIdx) => (\n <li key={linkIdx}>\n <NavLink {...link} />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n })}\n </div>\n\n {/* ── SOCIAL ICONS — Mobile only (standalone, above Deriv GO) ── */}\n {socialLinks.length > 0 && (\n <div className=\"footer__social footer__social--standalone\">\n {socialLinks.map((link, i) => (\n <a\n key={i}\n href={link.href}\n className=\"footer__social-icon\"\n aria-label={link.ariaLabel}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {link.icon}\n </a>\n ))}\n </div>\n )}\n\n {/* ── DERIV GO BANNER — Mobile/Tablet stacked (no QR) ── */}\n {derivGo && (\n <div className=\"footer__deriv-go-banner\">\n <div className=\"footer__deriv-go-banner-info\">\n <div className=\"footer__deriv-go-header\">\n <img\n src={derivGo.logoSrc}\n alt={derivGo.logoAlt ?? \"Deriv GO\"}\n className=\"footer__deriv-go-logo\"\n />\n <span className=\"footer__deriv-go-title\">\n {derivGo.title ?? \"Deriv GO\"}\n </span>\n </div>\n <p className=\"footer__deriv-go-desc\">\n {derivGo.description ?? \"Trade multipliers on our mobile app.\"}\n </p>\n </div>\n <div className=\"footer__deriv-go-banner-badges\">\n <DerivGoBadges\n googlePlayBadge={derivGo.googlePlayBadge}\n appStoreBadge={derivGo.appStoreBadge}\n huaweiBadge={derivGo.huaweiBadge}\n availabilityNote={derivGo.availabilityNote}\n />\n </div>\n </div>\n )}\n\n {/* ── LEGAL & RISK WARNING ── */}\n {(licenseText || riskWarningText) && (\n <div className=\"footer__legal-block\">\n {licenseText && (\n <div className=\"footer__license\">{licenseText}</div>\n )}\n {riskWarningText && (\n <div className=\"footer__risk-warning\">\n <p className=\"footer__risk-warning-text\">{riskWarningText}</p>\n </div>\n )}\n </div>\n )}\n\n {/* ── INVESTORS IN PEOPLE — Mobile/Tablet (centred) ── */}\n {investorsInPeopleSrc && (\n <div className=\"footer__investors-stacked\">\n <img\n src={investorsInPeopleSrc}\n alt={investorsInPeopleAlt}\n className=\"footer__investors-img\"\n />\n </div>\n )}\n </div>\n </footer>\n );\n};\n\nexport default Footer;\n","import React, { useEffect, useRef } from \"react\";\nimport type { HeroProps } from \"./Hero.types\";\nimport { Button } from \"../../primitives/Button\";\nimport \"./Hero.css\";\n\n/* ── Helpers ──────────────────────────────────────────────── */\n\n/** Renders a ReactNode or a plain string as an <img> */\nconst Visual = ({\n src,\n className,\n alt = \"\",\n}: {\n src: React.ReactNode | string;\n className: string;\n alt?: string;\n}) => (\n <div className={className}>\n {typeof src === \"string\" ? (\n <img src={src} alt={alt} />\n ) : (\n src\n )}\n </div>\n);\n\n/* ── Hero ─────────────────────────────────────────────────── */\n\nexport const Hero = ({\n variant,\n subtitle,\n title,\n description,\n primaryButton,\n secondaryButton,\n backgroundImageSrc,\n heroImage,\n leftVisual,\n rightVisual,\n productImage,\n floatingImage,\n className,\n ...props\n}: HeroProps) => {\n const variantClass = `hero--${variant}`;\n\n /* ── Parallax refs (visuals variant only) ── */\n const sectionRef = useRef<HTMLElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (variant !== \"visuals\") return;\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n const section = sectionRef.current;\n const leftEl = leftRef.current;\n const rightEl = rightRef.current;\n if (!section || !leftEl || !rightEl) return;\n\n const STRENGTH = 60; // px travel distance\n\n const onScroll = () => {\n const rect = section.getBoundingClientRect();\n const viewH = window.innerHeight;\n // progress: 0 when section top hits viewport bottom, 1 when section bottom hits viewport top\n const progress = 1 - (rect.bottom / (viewH + rect.height));\n const clamped = Math.max(0, Math.min(1, progress));\n const offset = (clamped - 0.5) * STRENGTH * 2;\n leftEl.style.transform = `translateY(${-offset}px)`;\n rightEl.style.transform = `translateY(${offset}px)`;\n };\n\n // Use the scroll container (Storybook iframe uses document.documentElement)\n const scrollEl = (() => {\n let el: Element | null = section.parentElement;\n while (el && el !== document.documentElement) {\n const { overflow, overflowY } = getComputedStyle(el);\n if (/auto|scroll/.test(overflow + overflowY)) return el;\n el = el.parentElement;\n }\n return window;\n })();\n\n scrollEl.addEventListener(\"scroll\", onScroll, { passive: true });\n onScroll(); // set initial position\n\n return () => scrollEl.removeEventListener(\"scroll\", onScroll);\n }, [variant]);\n\n /* ── Shared text block ── */\n const textBlock = (\n <div className=\"hero__text\">\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n <h2 className=\"hero__title\">{title}</h2>\n {description && <p className=\"hero__description\">{description}</p>}\n </div>\n );\n\n /* ── Shared button block ── */\n const buttonBlock = (primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n );\n\n /* ── Split ── */\n if (variant === \"split\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={backgroundImageSrc ? { backgroundImage: `url(${backgroundImageSrc})` } : undefined}\n {...props}\n >\n {/* Layer 1: gradient overlay */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 2: transparent PNG — direct child of section for correct z-index */}\n {heroImage && (\n <Visual\n src={heroImage}\n className=\"hero__image-slot\"\n alt=\"\"\n />\n )}\n\n {/* Layer 3: text + buttons */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n <div className=\"hero__left\">\n <div className=\"hero__body\">\n {/* Text block — stagger 1 */}\n <div className=\"hero__text\">\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n {/* Buttons — stagger 2 */}\n {(primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Centered ── */\n if (variant === \"centered\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={backgroundImageSrc ? { backgroundImage: `url(${backgroundImageSrc})` } : undefined}\n {...props}\n >\n {/* Layer 1: dark gradient overlay (top dark → transparent) */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 3: centered content column */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n {/* Text block — center aligned */}\n <div className=\"hero__text\">\n {subtitle && (\n <p className=\"hero__subtitle\">{subtitle}</p>\n )}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n\n {/* CTA buttons */}\n {(primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n )}\n\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Showcase ── */\n if (variant === \"showcase\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={backgroundImageSrc ? { backgroundImage: `url(${backgroundImageSrc})` } : undefined}\n {...props}\n >\n {/* Layer 1: dark gradient overlay (top dark → transparent) */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 3: centered content column */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n {/* Text block — center aligned */}\n <div className=\"hero__text\">\n {subtitle && (\n <p className=\"hero__subtitle\">{subtitle}</p>\n )}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n\n {/* CTA buttons */}\n {(primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n )}\n\n {/* Large product image — centered below buttons, slides up */}\n {productImage && (\n <Visual\n src={productImage}\n className=\"hero__product-image\"\n alt=\"\"\n />\n )}\n\n {/* Smaller floating image — below product image, slides up with delay */}\n {floatingImage && (\n <Visual\n src={floatingImage}\n className=\"hero__floating-image\"\n alt=\"\"\n />\n )}\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Visuals / Minimal ── */\n return (\n <section\n ref={sectionRef}\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* Layer 1: grid pattern */}\n <div className=\"hero__grid\" aria-hidden=\"true\" />\n {/* Layer 2: floating visuals — direct children so z-index is below text */}\n {variant === \"visuals\" && leftVisual && (\n <div ref={leftRef} className=\"hero__visual hero__visual--left\">\n {typeof leftVisual === \"string\" ? (\n <img src={leftVisual} alt=\"\" />\n ) : (\n leftVisual\n )}\n </div>\n )}\n {variant === \"visuals\" && rightVisual && (\n <div ref={rightRef} className=\"hero__visual hero__visual--right\">\n {typeof rightVisual === \"string\" ? (\n <img src={rightVisual} alt=\"\" />\n ) : (\n rightVisual\n )}\n </div>\n )}\n {/* Layer 3: overlay fades the visuals at edges */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n {/* Layer 4: text + button always on top */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n <div className=\"hero__body\">\n {textBlock}\n {buttonBlock}\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default Hero;\n","import { useEffect, useRef, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport type { AwardItem, StatsProps } from \"./Stats.types\";\nimport \"./Stats.css\";\n\n/* ── Constants ────────────────────────────────────────────── */\n\nconst INTERVAL_MS = 2000;\nconst TRANSITION = \"transform 0.8s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1)\";\nconst PARALLAX_FACTOR = 0.18; // fraction of section-centre offset applied as translation\nconst PARALLAX_MAX = 56; // px cap so translation never gets extreme\nconst PARALLAX_BP = 992; // desktop breakpoint at which parallax is active\n\n/* ── Carousel helpers ─────────────────────────────────────── */\n\n/**\n * Returns a signed relative position:\n * 0 → active (centre)\n * -1 → one slot above\n * +1 → one slot below\n * ±2+ → off-screen (hidden)\n */\nfunction relativePos(index: number, active: number, total: number): number {\n const raw = ((index - active) % total + total) % total;\n return raw > total / 2 ? raw - total : raw;\n}\n\nfunction getStatStyle(rel: number): CSSProperties {\n if (rel === 0) {\n return { transform: \"translateY(-50%) scale(1)\", opacity: 1, zIndex: 2, transition: TRANSITION };\n }\n if (rel === -1) {\n return { transform: \"translateY(calc(-50% - 110%)) scale(0.7)\", opacity: 1, zIndex: 1, transition: TRANSITION };\n }\n if (rel === 1) {\n return { transform: \"translateY(calc(-50% + 110%)) scale(0.7)\", opacity: 1, zIndex: 1, transition: TRANSITION };\n }\n return {\n transform: rel < 0\n ? \"translateY(calc(-50% - 110%)) scale(0.4)\"\n : \"translateY(calc(-50% + 110%)) scale(0.4)\",\n opacity: 0, zIndex: 0, transition: TRANSITION,\n };\n}\n\n/* ── Award Badge ──────────────────────────────────────────── */\n\nconst AwardBadge = ({ imageSrc, imageAlt = \"\" }: AwardItem) => (\n <div className=\"stats__award\">\n <img src={imageSrc} alt={imageAlt} className=\"stats__award-image\" />\n </div>\n);\n\n/* ── Stats ────────────────────────────────────────────────── */\n\nexport const Stats = ({\n title,\n description,\n stats,\n leftAwards = [],\n rightAwards = [],\n className,\n ...props\n}: StatsProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const sectionRef = useRef<HTMLElement>(null);\n const leftColRef = useRef<HTMLDivElement>(null);\n const rightColRef = useRef<HTMLDivElement>(null);\n const rafRef = useRef<number | null>(null);\n const hasAwards = leftAwards.length > 0 || rightAwards.length > 0;\n const allAwards: AwardItem[] = [...leftAwards, ...rightAwards];\n const total = stats.length;\n\n /* ── Stat carousel ────────────────────────────────────────── */\n useEffect(() => {\n if (total <= 1) return;\n intervalRef.current = setInterval(() => {\n setActiveIndex(prev => (prev + 1) % total);\n }, INTERVAL_MS);\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [total]);\n\n /* ── Parallax scroll — desktop only ─────────────────────── */\n useEffect(() => {\n const applyParallax = () => {\n const section = sectionRef.current;\n if (!section || window.innerWidth < PARALLAX_BP) {\n if (leftColRef.current) leftColRef.current.style.transform = \"\";\n if (rightColRef.current) rightColRef.current.style.transform = \"\";\n return;\n }\n\n const rect = section.getBoundingClientRect();\n const sectionCenter = rect.top + rect.height / 2;\n const viewportCenter = window.innerHeight / 2;\n\n // delta > 0: section below centre (not yet scrolled to)\n // delta < 0: section above centre (scrolled past)\n const raw = (sectionCenter - viewportCenter) * PARALLAX_FACTOR;\n const delta = Math.max(-PARALLAX_MAX, Math.min(PARALLAX_MAX, raw));\n\n // Left drifts UP as you scroll down → translateY follows delta (positive → negative)\n // Right drifts DOWN as you scroll down → translateY is inverted\n if (leftColRef.current) leftColRef.current.style.transform = `translateY(${delta}px)`;\n if (rightColRef.current) rightColRef.current.style.transform = `translateY(${-delta}px)`;\n };\n\n const onScroll = () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(applyParallax);\n };\n\n applyParallax();\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n window.addEventListener(\"resize\", onScroll, { passive: true });\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"resize\", onScroll);\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n return (\n <section\n ref={sectionRef}\n className={[\"stats\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"stats__inner\">\n {/* ── Header ── */}\n <div className=\"stats__header\">\n <h2 className=\"stats__title\">{title}</h2>\n {description && (\n <p className=\"stats__description\">{description}</p>\n )}\n </div>\n\n {/* ── Content row ── */}\n <div className=\"stats__content\">\n {/* Left award images — desktop only */}\n {leftAwards.length > 0 && (\n <div ref={leftColRef} className=\"stats__awards-col stats__awards-col--left\">\n {leftAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n\n {/* Centre stats card */}\n <div className=\"stats__card\">\n <div className=\"stats__card-track\">\n <div className=\"stats__fade stats__fade--top\" aria-hidden=\"true\" />\n <div className=\"stats__fade stats__fade--bottom\" aria-hidden=\"true\" />\n {stats.map((stat, i) => {\n const rel = relativePos(i, activeIndex, total);\n const active = rel === 0;\n return (\n <div\n key={i}\n className={[\n \"stats__stat\",\n active ? \"stats__stat--active\" : \"stats__stat--inactive\",\n ].join(\" \")}\n style={getStatStyle(rel)}\n aria-hidden={!active}\n >\n <span className=\"stats__stat-value\">{stat.value}</span>\n <span className=\"stats__stat-label\">{stat.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Right award images — desktop only */}\n {rightAwards.length > 0 && (\n <div ref={rightColRef} className=\"stats__awards-col stats__awards-col--right\">\n {rightAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n\n {/* Awards grid — mobile only */}\n {hasAwards && (\n <div className=\"stats__awards-mobile\">\n {allAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default Stats;\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { DotLottieInView } from \"../../components/DotLottieInView\";\nimport type { FeatureScrollItem, FeatureScrollProps } from \"./FeatureScroll.types\";\nimport \"./FeatureScroll.css\";\n\n/* ── Default data ──────────────────────────────────────────── */\n\nexport const FEATURE_SCROLL_DATA: FeatureScrollItem[] = [\n {\n title: \"Forex\",\n description: \"Trade the most popular currency pairs with high leverage, tight spreads, and fast execution.\",\n linkLabel: \"Learn more\",\n link: \"/markets/forex\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a906489e5aadf94e501c4_Forex.lottie\",\n },\n {\n title: \"Derived Indices\",\n description: \"Trade 24/7 on exclusive Synthetic and Derived Indices. Choose volatility levels that match your strategy.\",\n linkLabel: \"Learn more\",\n link: \"/markets/derived-indices/synthetic-indices\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064588b0d2709e7ceac_Derived%20Indices.lottie\",\n },\n {\n title: \"Stocks\",\n description: \"Trade global market leaders like Apple, Tesla, and NVIDIA.\",\n linkLabel: \"Learn more\",\n link: \"/markets/stocks\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064892f97175b724a9c_Stocks.lottie\",\n },\n {\n title: \"Commodities\",\n description: \"Trade gold, silver, oil, natural gas, sugar, and more.\",\n linkLabel: \"Learn more\",\n link: \"/markets/commodities\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064edd96a014a6092cf_Commodities.lottie\",\n },\n {\n title: \"Cryptos\",\n description: \"Trade round the clock on the volatility of cryptocurrencies like Bitcoin and Ethereum.\",\n linkLabel: \"Learn more\",\n link: \"/markets/cryptocurrencies\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a90647b8d9652a28b94e3_Crypto.lottie\",\n },\n {\n title: \"Stock Indices\",\n description: \"Trade offerings that track the top global stock indices.\",\n linkLabel: \"Learn more\",\n link: \"/markets/stock-indices\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064f2c16e4e0732abfb_Stock%20Indices.lottie\",\n },\n];\n\n/* ── Chevron SVG icon ──────────────────────────────────────── */\n\nconst ChevronRight = () => (\n <svg\n className=\"fs__item-link-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 3l5 5-5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/* ── Media renderer ────────────────────────────────────────── */\n\nfunction resolveMediaType(item: FeatureScrollItem): \"lottie\" | \"image\" {\n if (item.mediaType) return item.mediaType;\n return item.mediaUrl.split(\"?\")[0].endsWith(\".lottie\") ? \"lottie\" : \"image\";\n}\n\ninterface MediaRendererProps {\n item: FeatureScrollItem;\n active: boolean;\n}\n\nconst MediaRenderer = ({ item, active }: MediaRendererProps) => {\n if (resolveMediaType(item) === \"lottie\") {\n return (\n <DotLottieInView\n src={item.mediaUrl}\n enabled={active}\n />\n );\n }\n return (\n <img\n src={item.mediaUrl}\n alt={item.title}\n loading=\"lazy\"\n />\n );\n};\n\n/* ── FeatureScroll ─────────────────────────────────────────── */\n\nexport const FeatureScroll = ({\n header,\n items,\n variant = \"media-right\",\n className,\n ...props\n}: FeatureScrollProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const titleRefs = useRef<(HTMLHeadingElement | null)[]>([]);\n const mediaColRef = useRef<HTMLDivElement | null>(null);\n\n /*\n * Desktop: when step i's *title* (h3) top reaches the same line as the sticky\n * media (viewport band under nav), show the *next* step's Lottie/image.\n * pinned = largest i with title top <= threshold; media index = min(last, pinned + 1).\n */\n useLayoutEffect(() => {\n if (items.length === 0) return;\n\n const readThresholdPx = (): number => {\n const col = mediaColRef.current;\n if (!col) return 80;\n const top = getComputedStyle(col).top;\n const px = parseFloat(top);\n return Number.isFinite(px) ? px : 80;\n };\n\n let rafId = 0;\n const tick = () => {\n rafId = 0;\n if (typeof window === \"undefined\") return;\n if (!window.matchMedia(\"(min-width: 992px)\").matches) return;\n\n const threshold = readThresholdPx();\n const refs = titleRefs.current;\n let pinned = -1;\n for (let i = 0; i < items.length; i++) {\n const el = refs[i];\n if (!el) continue;\n if (el.getBoundingClientRect().top <= threshold) pinned = i;\n }\n const mediaIndex = Math.min(\n items.length - 1,\n pinned + 1,\n );\n setActiveIndex((prev) =>\n prev === mediaIndex ? prev : mediaIndex,\n );\n };\n\n const schedule = () => {\n if (rafId !== 0) return;\n rafId = window.requestAnimationFrame(tick);\n };\n\n tick();\n window.addEventListener(\"scroll\", schedule, { passive: true });\n window.addEventListener(\"resize\", schedule, { passive: true });\n const mq = window.matchMedia(\"(min-width: 992px)\");\n mq.addEventListener(\"change\", schedule);\n\n return () => {\n window.removeEventListener(\"scroll\", schedule);\n window.removeEventListener(\"resize\", schedule);\n mq.removeEventListener(\"change\", schedule);\n if (rafId !== 0) window.cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n const rootClass = [\n \"fs\",\n `fs--${variant}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (items.length === 0) {\n return (\n <section className={rootClass} {...props}>\n <div className=\"fs__inner\">\n <h2 className=\"fs__header\">{header}</h2>\n </div>\n </section>\n );\n }\n\n return (\n <section className={rootClass} {...props}>\n <div className=\"fs__inner\">\n\n {/* ── Section header ── */}\n <h2 className=\"fs__header\">{header}</h2>\n\n {/* ══ DESKTOP LAYOUT (hidden on mobile) ══════════════\n * Two equal columns; sticky media + scrolling text.\n * Column order is reversed by .fs--media-left.\n */}\n <div className=\"fs__layout\">\n\n {/* Media column: outer stretches to section height; inner is sticky so\n bottom constraint matches the full layout (fixes upward shift when\n scrolling back from the section below). */}\n <div className=\"fs__media-col\" aria-hidden=\"true\">\n <div\n ref={mediaColRef}\n className=\"fs__media-sticky\"\n >\n <div className=\"fs__media-wrap\">\n {items.map((item, i) => (\n <div\n key={i}\n className={[\n \"fs__media-item\",\n i === activeIndex\n ? \"fs__media-item--active\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <MediaRenderer\n item={item}\n active={i === activeIndex}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Text column: every step in flow — continuous scroll; ~viewport band min-height per step */}\n <div className=\"fs__content-col\">\n {items.map((item, i) => (\n <div\n key={i}\n className=\"fs__item\"\n >\n <h3\n ref={(el) => {\n titleRefs.current[i] = el;\n }}\n className=\"fs__item-title\"\n >\n {item.title}\n </h3>\n <p className=\"fs__item-desc\">\n {item.description}\n </p>\n <a\n href={item.link}\n className=\"fs__item-link\"\n >\n <span>{item.linkLabel}</span>\n <ChevronRight />\n </a>\n </div>\n ))}\n </div>\n </div>\n\n {/* ══ MOBILE LAYOUT (hidden on desktop) ══════════════\n * Stacked items: Title → Media → Description → Link.\n * Variant prop has no effect; layout is always stacked.\n */}\n <div className=\"fs__mobile-list\">\n {items.map((item, i) => (\n <div key={i} className=\"fs__mobile-item\">\n <h3 className=\"fs__item-title\">\n {item.title}\n </h3>\n <div className=\"fs__mobile-media\">\n <MediaRenderer item={item} active={true} />\n </div>\n <p className=\"fs__item-desc\">\n {item.description}\n </p>\n <a\n href={item.link}\n className=\"fs__item-link\"\n >\n <span>{item.linkLabel}</span>\n <ChevronRight />\n </a>\n </div>\n ))}\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default FeatureScroll;\n","import { useEffect, useRef, useState, type ComponentProps } from \"react\";\nimport { DotLottieReact, type DotLottie } from \"@lottiefiles/dotlottie-react\";\n\nexport type DotLottieInViewProps = Omit<\n ComponentProps<typeof DotLottieReact>,\n \"autoplay\" | \"loop\" | \"dotLottieRefCallback\"\n> & {\n /**\n * When false, playback is stopped (e.g. inactive slide in a stacked player).\n * When true, plays once whenever the instance is both enabled and intersecting.\n */\n enabled?: boolean;\n rootMargin?: string;\n threshold?: number | number[];\n};\n\n/**\n * Plays a .lottie once when it scrolls into view. Stops and resets when it leaves view.\n * When it enters view again, it plays once more. Set `enabled={false}` to force stop\n * (e.g. hidden slides) without relying on geometry alone.\n */\nexport function DotLottieInView({\n enabled = true,\n rootMargin = \"0px\",\n threshold = 0.2,\n className,\n style,\n ...dotProps\n}: DotLottieInViewProps) {\n const wrapRef = useRef<HTMLDivElement>(null);\n const [inView, setInView] = useState(false);\n const [dotLottie, setDotLottie] = useState<DotLottie | null>(null);\n\n useEffect(() => {\n const el = wrapRef.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n setInView(entry.isIntersecting);\n },\n { root: null, rootMargin, threshold }\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [rootMargin, threshold]);\n\n useEffect(() => {\n if (!dotLottie) return;\n\n if (!enabled || !inView) {\n dotLottie.stop();\n return;\n }\n\n dotLottie.stop();\n dotLottie.play();\n }, [dotLottie, enabled, inView]);\n\n return (\n <div\n ref={wrapRef}\n className={className}\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"transparent\",\n ...style,\n }}\n >\n <DotLottieReact\n {...dotProps}\n loop={false}\n autoplay={false}\n dotLottieRefCallback={setDotLottie}\n />\n </div>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport type { StickyCardItem, StickyStackedCardsProps } from \"./StickyStackedCards.types\";\nimport \"./StickyStackedCards.css\";\n\n/* ── Default data ──────────────────────────────────────────── */\n\n/* ── Shared design-system placeholder image ────────────────── */\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\nexport const STEPS_DATA: StickyCardItem[] = [\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"light\",\n },\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"coral\",\n },\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"dark\",\n },\n];\n\n/* ── Scale targets per card depth ─────────────────────────── */\n/*\n * When a card is fully covered by the card on top of it, its\n * scale reaches this minimum — creating the visual depth seen\n * in the stacked state. The last card always stays at 1.\n *\n * Index → minimum scale when fully covered:\n * 0 (Sign up) → 0.88 (furthest back)\n * 1 (Deposit) → 0.94 (one level back)\n * 2 (Trade) → 1.00 (front card, never scales down)\n */\nconst MIN_SCALE: Record<number, number> = { 0: 0.88, 1: 0.94 };\n\n/* ── StickyStackedCards ────────────────────────────────────── */\n\nexport const StickyStackedCards = ({\n header,\n items,\n className,\n ...props\n}: StickyStackedCardsProps) => {\n const cardRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n /*\n * SCALE SCROLL HANDLER\n * --------------------\n * Runs on every scroll tick (passive, rAF-debounced).\n * For each card that has a card on top of it, we measure\n * how close the next card is to its fully-stacked position\n * and interpolate --card-scale toward the MIN_SCALE value.\n *\n * progress = 0 → next card is still far below (no scale)\n * progress = 1 → next card has landed on its sticky top (full scale-down)\n */\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let rafId = 0;\n\n const update = () => {\n const cards = cardRefs.current.filter(Boolean) as HTMLDivElement[];\n const n = cards.length;\n\n cards.forEach((card, i) => {\n const minScale = MIN_SCALE[i];\n if (minScale === undefined) {\n // Last card — always full size\n card.style.setProperty(\"--card-scale\", \"1\");\n return;\n }\n\n const nextCard = cards[i + 1];\n if (!nextCard) return;\n\n const cardRect = card.getBoundingClientRect();\n const nextRect = nextCard.getBoundingClientRect();\n\n /*\n * \"gap\" = how far the next card's top is above the\n * current card's top in the viewport.\n *\n * gap ≥ cardHeight → next card is a full card-height below\n * (hasn't started overlapping) → progress 0\n * gap ≈ 0 or negative → next card is fully on top → progress 1\n */\n const cardHeight = cardRect.height;\n const gap = nextRect.top - cardRect.top;\n const progress = Math.max(0, Math.min(1, 1 - gap / cardHeight));\n\n const scale = 1 - (1 - minScale) * progress;\n card.style.setProperty(\"--card-scale\", String(+scale.toFixed(4)));\n });\n };\n\n const onScroll = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(update);\n };\n\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n // Run once immediately so initial state is correct\n update();\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n return (\n <section\n className={[\"ssc\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"ssc__inner\">\n\n {/* ── Section header ── */}\n <h2 className=\"ssc__header\">{header}</h2>\n\n {/* ── Card track ──────────────────────────────────────\n * CRITICAL:\n * • display:block on desktop (not flex) — see CSS note\n * • NO overflow:hidden — breaks position:sticky\n */}\n <div className=\"ssc__track\">\n {items.map((item, i) => (\n <div\n key={i}\n ref={(el) => { cardRefs.current[i] = el; }}\n className={[\n \"ssc__card\",\n `ssc__card--${item.theme ?? \"light\"}`,\n ].join(\" \")}\n style={{\n zIndex: i + 1,\n /*\n * PEEK OFFSET — every card gets i × peek-offset so each\n * prior card shows as a thin strip at the top of the next.\n *\n * Example with 3 cards, peek = 16px:\n * Card 0 (Sign up) → 80px\n * Card 1 (Deposit) → 96px (Sign up peeks 16px above)\n * Card 2 (Trade) → 112px (Deposit peeks 16px, Sign up 32px above)\n *\n * Final state: two 16px colour strips at top, Trade fills the rest.\n */\n top: `calc(var(--ssc-sticky-top) + ${i} * var(--ssc-peek-offset))`,\n } as React.CSSProperties}\n >\n {/* Left column — text content, top-left anchored */}\n <div className=\"ssc__card-content\">\n <h3 className=\"ssc__card-title\">{item.title}</h3>\n <p className=\"ssc__card-desc\">{item.description}</p>\n </div>\n\n {/* Right column — hero image */}\n <div className=\"ssc__card-image\">\n <img\n src={item.imageUrl}\n alt={item.title}\n loading={i === 0 ? \"eager\" : \"lazy\"}\n />\n </div>\n </div>\n ))}\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default StickyStackedCards;\n","import { useRef } from \"react\";\nimport {\n motion,\n useScroll,\n useSpring,\n useTransform,\n useMotionTemplate,\n type MotionValue,\n} from \"framer-motion\";\nimport type { CTABannerProps, AvatarItem } from \"./CTABanner.types\";\nimport { Button } from \"../../primitives/Button\";\nimport \"./CTABanner.css\";\n\n/* ── Entrance distance constants ─────────────────────────────────\n * How far from the centre each tier starts before scrolling in.\n * Values are intentionally large so the \"coming from far away\"\n * effect is clearly visible. Each avatar moves radially outward\n * from the centre — top avatars fly in from above, left avatars\n * from the left, corners from their diagonal, etc.\n *\n * Tier mapping (by staggerRank / distance from centre):\n * near → rank 0–1 → 80px\n * mid → rank 2–5 → 130px\n * far → rank 6–8 → 180px\n * edge → rank 9–11 → 240px (corners, most dramatic)\n *\n * blurStart: initial CSS blur in px when section enters.\n * blurStart corresponds to --spacing-16 (1rem = 16px).\n */\nconst ENTRANCE = {\n near: 80,\n mid: 130,\n far: 180,\n edge: 240,\n blurStart: 28,\n} as const;\n\n/* ── Spring config ───────────────────────────────────────────────\n * Wrapping scrollYProgress in useSpring adds a slight lag that\n * makes the parallax feel organic rather than mechanically locked\n * to the scroll wheel.\n *\n */\nconst SPRING = { stiffness: 80, damping: 30, restDelta: 0.001 } as const;\n\n/* ── Scroll range ────────────────────────────────────────────────\n * Avatars settle into their final grid positions by this progress\n * value (0 = section just entering viewport, 0.5 = section\n * centred). After LOCK_AT, y stays clamped at 0 — they \"snap\" to\n * the grid without continuing to move.\n */\nconst LOCK_AT = 0.5;\n\n/* ── Default data ────────────────────────────────────────────────\n * Desktop positions: 9-row stage (9 × 96px = 864px).\n * Stage centre = 432px = row 4 centre → hero aligns with mid-left/right.\n * Equal 1-cell breathing room top (row 1) and bottom (row 7 bottom = 768px, stage = 864px).\n *\n * Row 1 (y=96): col 0, 6, 12 — top outer (3 avatars)\n * Row 2 (y=192): col 3, 9 — upper inner (2 avatars)\n * Row 4 (y=384): col 0, 12 — mid, hero level (2 avatars)\n * Row 6 (y=576): col 3, 9 — lower inner (2 avatars)\n * Row 7 (y=672): col 0, 6, 12 — bottom outer (3 avatars)\n *\n * Mobile/tablet: identical layout to the compact variant (6 avatars).\n *\n * staggerRank: Euclidean distance rank from stage centre (col 6.5, row 4).\n * 0 = closest → slowest parallax (near tier)\n * 11 = furthest (corner) → fastest parallax (edge tier)\n */\n\nconst PLACEHOLDER_URL =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86ce1a_footer-member-5.webp\";\n\nexport const AVATAR_DATA: AvatarItem[] = [\n /* ── Rank 0 — top-centre (col 6, row 1) ─────── */\n {\n id: 12, staggerRank: 0, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 6)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobileVisible: true,\n },\n /* ── Rank 1 — bot-centre (col 6, row 7) ─────── */\n {\n id: 11, staggerRank: 1, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 6)\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 2 — upper-inner-left (col 3, row 2) ── */\n {\n id: 3, staggerRank: 2, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 3)\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 3 — upper-inner-right (col 9, row 2) ── */\n {\n id: 6, staggerRank: 3, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 9)\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 4 — lower-inner-left (col 3, row 6) ── */\n {\n id: 1, staggerRank: 4, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 3)\", top: \"calc(var(--ctab-grid-cell) * 6)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 9)\" },\n mobileVisible: true,\n },\n /* ── Rank 5 — lower-inner-right (col 9, row 6) ── */\n {\n id: 10, staggerRank: 5, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 9)\", top: \"calc(var(--ctab-grid-cell) * 6)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 6 — mid-left (col 0, row 4) ──────── */\n {\n id: 5, staggerRank: 6, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 4)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 7 — mid-right (col 12, row 4) ────── */\n {\n id: 8, staggerRank: 7, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 4)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 8 — top-left corner (col 0, row 1) ── */\n {\n id: 4, staggerRank: 8, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 9 — top-right corner (col 12, row 1) ── */\n {\n id: 7, staggerRank: 9, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 10 — bot-left corner (col 0, row 7) ── */\n {\n id: 2, staggerRank: 10, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 11 — bot-right corner (col 12, row 7) ── */\n {\n id: 9, staggerRank: 11, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n];\n\n/* ── Compact variant data ────────────────────────────────────────\n * 7 desktop avatars within the 1280 × 680 stage (Figma node 6865-13441).\n * Desktop grid cell = 96px. Positions as col/row multiples.\n *\n * Mobile reuses the standard 6-avatar mobile layout (same positions).\n */\nexport const COMPACT_AVATAR_DATA: AvatarItem[] = [\n /* ── Rank 0 — top-centre (col ~6, row 1) ── */\n {\n id: 12, staggerRank: 0, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobileVisible: true,\n },\n /* ── Rank 1 — top-left (col 2, row 1) ───── */\n {\n id: 3, staggerRank: 1, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 2 — top-right (col 10, row 1) ─── */\n {\n id: 6, staggerRank: 2, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 10)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 3 — mid-left (col 0, row 3) ────── */\n {\n id: 5, staggerRank: 3, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 3)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 4 — mid-right (col 12, row 3) ──── */\n {\n id: 8, staggerRank: 4, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 3)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 5 — bot-left (col 2, row 5) ────── */\n {\n id: 1, staggerRank: 5, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 2)\", top: \"calc(var(--ctab-grid-cell) * 5)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 9)\" },\n mobileVisible: true,\n },\n /* ── Rank 6 — bot-right (col 10, row 5) — desktop only ─── */\n {\n id: 11, staggerRank: 6, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 10)\", top: \"calc(var(--ctab-grid-cell) * 5)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n];\n\n/* ── Avatar radial entrance hooks ────────────────────────────────\n *\n * Hooks cannot be called inside a loop, so each of the 12\n * useTransform calls is explicit and always runs in the same order.\n * Index maps directly to AVATAR_DATA order (= staggerRank order).\n *\n * Y sign: + = avatar starts BELOW final position (bottom half)\n * - = avatar starts ABOVE final position (top half)\n * 0 = avatar is on the horizontal mid-line\n *\n * X sign: + = avatar starts to the RIGHT (right half)\n * - = avatar starts to the LEFT (left half)\n * 0 = avatar is on the vertical mid-line\n *\n * rank 0 (col 6, row 1) top-centre → X=0, Y=-near\n * rank 1 (col 6, row 7) bot-centre → X=0, Y=+near\n * rank 2 (col 3, row 2) upper-inner-left → X=-mid, Y=-mid\n * rank 3 (col 9, row 2) upper-inner-right → X=+mid, Y=-mid\n * rank 4 (col 3, row 6) lower-inner-left → X=-mid, Y=+mid\n * rank 5 (col 9, row 6) lower-inner-right → X=+mid, Y=+mid\n * rank 6 (col 0, row 4) mid-left → X=-far, Y=0\n * rank 7 (col 12, row 4) mid-right → X=+far, Y=0\n * rank 8 (col 0, row 1) top-left corner → X=-edge, Y=-edge\n * rank 9 (col 12, row 1) top-right corner → X=+edge, Y=-edge\n * rank 10 (col 0, row 7) bot-left corner → X=-edge, Y=+edge\n * rank 11 (col 12, row 7) bot-right corner → X=+edge, Y=+edge\n */\nfunction useAvatarYValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]); // top-centre\n const y1 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.near, 0]); // bot-centre\n const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-left\n const y3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-right\n const y4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-left\n const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-right\n const y6 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-left (no Y)\n const y7 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-right (no Y)\n const y8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-left corner\n const y9 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-right corner\n const y10 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-left corner\n const y11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-right corner\n return [y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11];\n}\n\nfunction useAvatarXValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // top-centre (no X)\n const x1 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // bot-centre (no X)\n const x2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-left\n const x3 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // upper-inner-right\n const x4 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // lower-inner-left\n const x5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-right\n const x6 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]); // mid-left\n const x7 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]); // mid-right\n const x8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-left corner\n const x9 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // top-right corner\n const x10 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // bot-left corner\n const x11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-right corner\n return [x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11];\n}\n\n/* ── Compact variant parallax hooks (7 avatars) ──────────────────\n *\n * rank 0 (top-centre): X=0, Y=-near\n * rank 1 (top-left): X=-mid, Y=-mid\n * rank 2 (top-right): X=+mid, Y=-mid\n * rank 3 (mid-left): X=-far, Y=0\n * rank 4 (mid-right): X=+far, Y=0\n * rank 5 (bot-left): X=-mid, Y=+mid\n * rank 6 (bot-right): X=+mid, Y=+mid\n */\nfunction useCompactAvatarYValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]); // top-centre\n const y1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-left\n const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-right\n const y3 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-left (no Y)\n const y4 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-right (no Y)\n const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-left\n const y6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-right\n return [y0, y1, y2, y3, y4, y5, y6];\n}\n\nfunction useCompactAvatarXValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // top-centre (no X)\n const x1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-left\n const x2 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // top-right\n const x3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]); // mid-left\n const x4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]); // mid-right\n const x5 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // bot-left\n const x6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-right\n return [x0, x1, x2, x3, x4, x5, x6];\n}\n\n/* ── CTABanner ────────────────────────────────────────────────── */\n\nexport const CTABanner = ({\n headline = \"Short section title goes here\",\n ctaLabel = \"Open account\",\n ctaHref = \"#\",\n avatars,\n variant = \"standard\",\n className,\n ...props\n}: CTABannerProps) => {\n const resolvedAvatars = avatars ?? (variant === \"compact\" ? COMPACT_AVATAR_DATA : AVATAR_DATA);\n const sectionRef = useRef<HTMLElement>(null);\n\n /* Track scroll progress as section crosses the viewport.\n * offset: \"start end\" = section top reaches viewport bottom → progress 0\n * offset: \"end start\" = section bottom reaches viewport top → progress 1\n * The spring smooths the raw scroll value into the organic\n * \"butter\" feel that matches the video reference. */\n const { scrollYProgress } = useScroll({\n target: sectionRef,\n offset: [\"start end\", \"end start\"],\n });\n\n const smooth = useSpring(scrollYProgress, SPRING);\n\n /* ── Grid: fade in as section enters ── */\n const gridOpacity = useTransform(smooth, [0, 0.3], [0, 1]);\n\n /* ── Hero: slight upward rise + fade ── */\n const heroY = useTransform(smooth, [0, LOCK_AT], [32, 0]);\n const heroOpacity = useTransform(smooth, [0, 0.3], [0, 1]);\n\n /* ── Avatar fade: all avatars share one opacity track ── */\n const avatarOpacity = useTransform(smooth, [0, 0.25], [0, 1]);\n\n /* ── Avatar blur: clears from blurStart → 0 as section enters ──\n * useMotionTemplate builds a valid CSS filter string so Framer\n * Motion can interpolate it at 60fps without touching the DOM\n * style attribute directly. */\n const blurPx = useTransform(smooth, [0, 0.3, 0.7, 1], [ENTRANCE.blurStart, 0, 0, ENTRANCE.blurStart]);\n const avatarFilter = useMotionTemplate`blur(${blurPx}px)`;\n\n /* ── Per-avatar radial entrance ── */\n const standardYValues = useAvatarYValues(smooth);\n const standardXValues = useAvatarXValues(smooth);\n const compactYValues = useCompactAvatarYValues(smooth);\n const compactXValues = useCompactAvatarXValues(smooth);\n\n const avatarYValues = variant === \"compact\" ? compactYValues : standardYValues;\n const avatarXValues = variant === \"compact\" ? compactXValues : standardXValues;\n\n return (\n <section\n ref={sectionRef}\n className={[\"ctab\", variant === \"compact\" ? \"ctab--compact\" : \"\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* ── Background grid ─────────────────────────────────── */}\n <motion.div\n className=\"ctab__grid\"\n style={{ opacity: gridOpacity }}\n aria-hidden=\"true\"\n />\n\n {/* ── Content stage ───────────────────────────────────── */}\n <div className=\"ctab__inner\">\n <div className=\"ctab__stage\">\n\n {/* ── Floating avatars ─────────────────────────────────\n * Position supplied as inline CSS custom properties so the\n * CSS token layer controls all sizing/spacing.\n *\n * Framer Motion controls only `y` (scroll-driven parallax)\n * and `opacity` (scroll-driven fade). No fixed initial\n * state — the animation is tied continuously to scroll.\n */}\n {resolvedAvatars.map((avatar, index) => {\n const posStyle: Record<string, string> = {};\n if (avatar.desktopPos.left) posStyle[\"--av-d-left\"] = avatar.desktopPos.left;\n if (avatar.desktopPos.right) posStyle[\"--av-d-right\"] = avatar.desktopPos.right;\n if (avatar.desktopPos.top) posStyle[\"--av-d-top\"] = avatar.desktopPos.top;\n if (avatar.mobilePos?.left) posStyle[\"--av-m-left\"] = avatar.mobilePos.left;\n if (avatar.mobilePos?.right) posStyle[\"--av-m-right\"] = avatar.mobilePos.right;\n if (avatar.mobilePos?.top) posStyle[\"--av-m-top\"] = avatar.mobilePos.top;\n\n return (\n <motion.div\n key={avatar.id}\n className={[\n \"ctab__avatar\",\n !avatar.mobileVisible ? \"ctab__avatar--desktop-only\" : \"\",\n ].filter(Boolean).join(\" \")}\n style={{\n ...(posStyle as React.CSSProperties),\n x: avatarXValues[index],\n y: avatarYValues[index],\n opacity: avatarOpacity,\n filter: avatarFilter,\n }}\n >\n <img\n src={avatar.imageUrl}\n alt=\"\"\n loading=\"lazy\"\n draggable={false}\n />\n </motion.div>\n );\n })}\n\n {/* ── Hero — headline + CTA ──────────────────── */}\n <motion.div\n className=\"ctab__hero\"\n style={{ y: heroY, opacity: heroOpacity }}\n >\n <h2 className=\"ctab__headline\">{headline}</h2>\n <a href={ctaHref}>\n <Button colorScheme=\"black\" variant=\"primary\" label={ctaLabel} />\n </a>\n </motion.div>\n\n </div>\n </div>\n </section>\n );\n};\n\nexport default CTABanner;\n","import { useRef, useState, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport type { NavbarProps, NavItem, NavDropdownFeature, NavDropdownSection, LanguageItem } from \"./Navbar.types\";\nimport { Button } from \"../../primitives/Button\";\nimport GLOBE_ICON from \"../../assets/icon-globe.svg\";\nimport \"./Navbar.css\";\n\n/* ── Animation config ────────────────────────────────────────── */\n\nconst EASE_OUT_EXPO = [0.16, 1, 0.3, 1] as const;\n\nconst dropdownVariants = {\n hidden: { opacity: 0, scale: 0.96, y: -8 },\n visible: { opacity: 1, scale: 1, y: 0 },\n};\n\nconst drawerVariants = {\n hidden: { y: \"-100%\" },\n visible: { y: 0 },\n};\n\nconst accordionVariants = {\n hidden: { height: 0, opacity: 0 },\n visible: { height: \"auto\", opacity: 1 },\n};\n\n/* ── Inline SVG icons ────────────────────────────────────────── */\n\nconst ChevronDownIcon = ({ className }: { className?: string }) => (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.625 4.8125L7 9.1875L11.375 4.8125\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ArrowRightIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M2.625 7H11.375M11.375 7L7.875 3.5M11.375 7L7.875 10.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ArrowUpRightIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4.5 11.5L11.5 4.5M11.5 4.5H5.5M11.5 4.5V10.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst BarsIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M2.5 5H17.5M2.5 10H17.5M2.5 15H17.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nconst XMarkIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M15 5L5 15M5 5L15 15\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nconst ChevronLeftIcon = ({ className }: { className?: string }) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M15 18L9 12L15 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst GlobeIcon = ({ className }: { className?: string }) => (\n <img src={GLOBE_ICON} alt=\"\" aria-hidden=\"true\" width=\"20\" height=\"20\" className={className} />\n);\n\n/* ── Desktop Dropdown Panel ──────────────────────────────────── */\n\ninterface DropdownPanelProps {\n item: NavItem;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n}\n\nconst DropdownPanel = ({ item, onMouseEnter, onMouseLeave }: DropdownPanelProps) => {\n const { dropdown } = item;\n if (!dropdown) return null;\n\n return (\n <motion.div\n className=\"navbar__dropdown\"\n variants={dropdownVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.18, ease: EASE_OUT_EXPO }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"navbar__dropdown-inner\">\n {/* Left: link columns */}\n <div className=\"navbar__dropdown-left\">\n {dropdown.columns.map((col, colIdx) => (\n <div key={colIdx} className=\"navbar__dropdown-col\">\n {col.sections.map((section: NavDropdownSection) => (\n <div key={section.title} className=\"navbar__dropdown-col-list\">\n <p className=\"navbar__dropdown-col-title\">{section.title}</p>\n {section.items.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"navbar__dropdown-link\"\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n >\n {link.label}\n {link.external ? <ArrowUpRightIcon /> : <ArrowRightIcon />}\n </a>\n ))}\n </div>\n ))}\n </div>\n ))}\n </div>\n\n {/* Right: feature card */}\n {dropdown.feature && (\n <div className=\"navbar__dropdown-right\">\n <FeatureCard feature={dropdown.feature} />\n </div>\n )}\n </div>\n </motion.div>\n );\n};\n\n/* ── Feature Card (shared desktop + mobile) ──────────────────── */\n\ninterface FeatureCardProps {\n feature: NavDropdownFeature;\n mobile?: boolean;\n}\n\nconst FeatureCard = ({ feature, mobile }: FeatureCardProps) => (\n <div\n className={mobile ? \"navbar__drawer-feature\" : \"navbar__dropdown-feature\"}\n style={\n feature.backgroundImageUrl\n ? { backgroundImage: `url(${feature.backgroundImageUrl})` }\n : undefined\n }\n >\n {feature.backgroundImageUrl && (\n <img\n src={feature.backgroundImageUrl}\n alt=\"\"\n className={mobile ? \"navbar__drawer-feature-img\" : \"navbar__dropdown-feature-img\"}\n aria-hidden=\"true\"\n />\n )}\n <div className={mobile ? \"navbar__drawer-feature-overlay\" : \"navbar__dropdown-feature-overlay\"} aria-hidden=\"true\" />\n <div className={mobile ? \"navbar__drawer-feature-content\" : \"navbar__dropdown-feature-content\"}>\n <div>\n <p className={mobile ? \"navbar__drawer-feature-title\" : \"navbar__dropdown-feature-title\"}>\n {feature.title}\n </p>\n <p className={mobile ? \"navbar__drawer-feature-desc\" : \"navbar__dropdown-feature-desc\"}>\n {feature.description}\n </p>\n </div>\n <a\n href={feature.ctaHref}\n className={mobile ? \"navbar__drawer-feature-cta\" : \"navbar__dropdown-feature-cta\"}\n >\n {feature.ctaLabel}\n <ArrowRightIcon />\n </a>\n </div>\n </div>\n);\n\n/* ── Mobile Accordion Item ───────────────────────────────────── */\n\ninterface DrawerAccordionProps {\n item: NavItem;\n isOpen: boolean;\n onToggle: () => void;\n}\n\nconst DrawerAccordion = ({ item, isOpen, onToggle }: DrawerAccordionProps) => {\n const { dropdown } = item;\n\n return (\n <div className=\"navbar__drawer-item\">\n <button\n className={`navbar__drawer-trigger ${isOpen ? \"navbar__drawer-trigger--open\" : \"\"}`}\n onClick={onToggle}\n aria-expanded={isOpen}\n >\n {item.label}\n <ChevronDownIcon className=\"navbar__drawer-trigger__chevron\" />\n </button>\n\n <AnimatePresence initial={false}>\n {isOpen && dropdown && (\n <motion.div\n className=\"navbar__drawer-panel\"\n variants={accordionVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.22, ease: EASE_OUT_EXPO }}\n >\n <div className=\"navbar__drawer-panel-inner\">\n {/* Link columns — each column's sections stack vertically */}\n <div className=\"navbar__drawer-panel-cols\">\n {dropdown.columns.map((col, colIdx) => (\n <div key={colIdx} className=\"navbar__drawer-panel-col\">\n {col.sections.map((section: NavDropdownSection) => (\n <div key={section.title} className=\"navbar__drawer-col-section\">\n <p className=\"navbar__drawer-col-title\">{section.title}</p>\n <div className=\"navbar__drawer-col-links\">\n {section.items.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"navbar__drawer-link\"\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n >\n {link.label}\n </a>\n ))}\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n\n {/* Feature card */}\n {dropdown.feature && (\n <FeatureCard feature={dropdown.feature} mobile />\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n\n/* ── Navbar ───────────────────────────────────────────────────── */\n\nexport const Navbar = ({\n theme = \"dark\",\n logoSrc,\n logoSrcDark,\n logoHref = \"/\",\n navItems = [],\n loginLabel = \"Log in\",\n loginHref,\n ctaLabel = \"Open account\",\n ctaHref,\n languageLabel,\n onLanguageClick,\n languageItems,\n activeLanguageCode,\n onLanguageSelect,\n className,\n ...props\n}: NavbarProps) => {\n const [openDropdown, setOpenDropdown] = useState<string | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpanded, setMobileExpanded] = useState<string | null>(null);\n const [scrolled, setScrolled] = useState(false);\n const [langDropdownOpen, setLangDropdownOpen] = useState(false);\n const [mobileLangOpen, setMobileLangOpen] = useState(false);\n\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const langHoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pillAreaRef = useRef<HTMLDivElement>(null);\n const langBtnRef = useRef<HTMLButtonElement>(null);\n\n const hasLangDropdown = Boolean(languageItems && languageItems.length > 0);\n\n const resolvedLogo = theme === \"light\" ? (logoSrcDark ?? logoSrc) : logoSrc;\n\n /* ── Scroll detection ── */\n useEffect(() => {\n const onScroll = () => setScrolled(window.scrollY > 0);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, []);\n\n /* ── Close on Escape ── */\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpenDropdown(null);\n setMobileOpen(false);\n setMobileLangOpen(false);\n }\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, []);\n\n /* ── Reset language panel when drawer closes ── */\n useEffect(() => {\n if (!mobileOpen) setMobileLangOpen(false);\n }, [mobileOpen]);\n\n /* ── Body scroll lock when drawer is open ── */\n useEffect(() => {\n document.body.style.overflow = mobileOpen ? \"hidden\" : \"\";\n return () => { document.body.style.overflow = \"\"; };\n }, [mobileOpen]);\n\n /* ── Close dropdown on outside click ── */\n useEffect(() => {\n if (!openDropdown) return;\n const onPointerDown = (e: PointerEvent) => {\n if (pillAreaRef.current && !pillAreaRef.current.contains(e.target as Node)) {\n setOpenDropdown(null);\n }\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [openDropdown]);\n\n /* ── Hover handlers with debounce ── */\n const clearHoverTimeout = useCallback(() => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = null;\n }\n }, []);\n\n /* ── Language dropdown hover handlers ── */\n const clearLangHoverTimeout = useCallback(() => {\n if (langHoverTimeoutRef.current) {\n clearTimeout(langHoverTimeoutRef.current);\n langHoverTimeoutRef.current = null;\n }\n }, []);\n\n const handleLangEnter = useCallback(() => {\n clearLangHoverTimeout();\n setLangDropdownOpen(true);\n }, [clearLangHoverTimeout]);\n\n const handleLangLeave = useCallback(() => {\n clearLangHoverTimeout();\n langHoverTimeoutRef.current = setTimeout(() => setLangDropdownOpen(false), 150);\n }, [clearLangHoverTimeout]);\n\n const handleLangSelect = useCallback((code: string) => {\n setLangDropdownOpen(false);\n setMobileLangOpen(false);\n onLanguageSelect?.(code);\n }, [onLanguageSelect]);\n\n const handleNavEnter = useCallback((label: string) => {\n clearHoverTimeout();\n setOpenDropdown(label);\n }, [clearHoverTimeout]);\n\n const handleNavLeave = useCallback(() => {\n clearHoverTimeout();\n hoverTimeoutRef.current = setTimeout(() => setOpenDropdown(null), 120);\n }, [clearHoverTimeout]);\n\n const activeDropdownItem = navItems.find((item) => item.label === openDropdown);\n\n /* ── Render ── */\n return (\n <nav\n className={[\"navbar\", `navbar--${theme}`, scrolled && \"navbar--scrolled\", mobileOpen && \"navbar--menu-open\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"navbar__bar\">\n\n {/* Logo */}\n <a href={logoHref} className=\"navbar__logo\" aria-label=\"Home\">\n <img src={resolvedLogo} alt=\"Logo\" />\n </a>\n\n {/* ── Desktop pill (full-width centering layer) ── */}\n <div className=\"navbar__nav-center\" ref={pillAreaRef}>\n <div className=\"navbar__pill\">\n\n {/* Logo — hidden by default, slides in when scrolled (desktop) */}\n <a href={logoHref} className=\"navbar__pill-logo\" aria-label=\"Home\">\n <img src={logoSrcDark ?? logoSrc} alt=\"Logo\" />\n </a>\n\n {/* Nav items + language switcher */}\n <div className=\"navbar__nav-group\">\n {navItems.map((item) => {\n if (item.external) {\n return (\n <a\n key={item.label}\n href={item.href}\n className=\"navbar__nav-item\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {item.label}\n <ArrowUpRightIcon />\n </a>\n );\n }\n\n if (item.dropdown) {\n return (\n <button\n key={item.label}\n className={[\n \"navbar__nav-item\",\n openDropdown === item.label ? \"navbar__nav-item--open\" : \"\",\n ].filter(Boolean).join(\" \")}\n onMouseEnter={() => handleNavEnter(item.label)}\n onMouseLeave={handleNavLeave}\n aria-expanded={openDropdown === item.label}\n aria-haspopup=\"true\"\n >\n {item.label}\n <ChevronDownIcon className=\"navbar__nav-item__chevron\" />\n </button>\n );\n }\n\n return (\n <a key={item.label} href={item.href} className=\"navbar__nav-item\">\n {item.label}\n </a>\n );\n })}\n\n {/* Language switcher — inside nav-group so spacing matches nav items */}\n {languageLabel && (\n <div\n className=\"navbar__lang-wrapper\"\n onMouseEnter={hasLangDropdown ? handleLangEnter : undefined}\n onMouseLeave={hasLangDropdown ? handleLangLeave : undefined}\n >\n <button\n ref={langBtnRef}\n className={[\n \"navbar__nav-item\",\n \"navbar__lang-btn\",\n hasLangDropdown && langDropdownOpen ? \"navbar__nav-item--open\" : \"\",\n ].filter(Boolean).join(\" \")}\n onClick={hasLangDropdown ? () => setLangDropdownOpen((o) => !o) : onLanguageClick}\n aria-haspopup={hasLangDropdown ? \"true\" : undefined}\n aria-expanded={hasLangDropdown ? langDropdownOpen : undefined}\n >\n <GlobeIcon className=\"navbar__lang-globe\" />\n {languageLabel}\n </button>\n </div>\n )}\n </div>\n\n {/* CTA buttons — hidden by default, slides in when scrolled (desktop) */}\n <div className=\"navbar__pill-actions\">\n {loginHref && (\n <a href={loginHref}>\n <Button colorScheme=\"black\" variant=\"secondary\" label={loginLabel} />\n </a>\n )}\n {ctaHref && (\n <a href={ctaHref}>\n <Button colorScheme=\"coral\" variant=\"primary\" label={ctaLabel} />\n </a>\n )}\n </div>\n </div>\n </div>\n\n {/* ── Desktop dropdown — child of navbar__bar (position:relative,\n full viewport width), so left:50% + translateX(-50%)\n centres relative to the screen ── */}\n <AnimatePresence>\n {openDropdown && activeDropdownItem?.dropdown && (\n <DropdownPanel\n key=\"dropdown\"\n item={activeDropdownItem}\n onMouseEnter={clearHoverTimeout}\n onMouseLeave={handleNavLeave}\n />\n )}\n </AnimatePresence>\n\n {/* ── Desktop language dropdown — same positioning as nav dropdown,\n child of navbar__bar so it centres relative to the screen ── */}\n <AnimatePresence>\n {hasLangDropdown && langDropdownOpen && (\n <motion.div\n className=\"navbar__lang-dropdown\"\n variants={dropdownVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.18, ease: EASE_OUT_EXPO }}\n onMouseEnter={clearLangHoverTimeout}\n onMouseLeave={handleLangLeave}\n >\n <div\n className=\"navbar__lang-dropdown-grid\"\n style={{ \"--lang-rows\": Math.ceil(languageItems!.length / 3) } as React.CSSProperties}\n >\n {languageItems!.map((lang) => (\n <button\n key={lang.code}\n className={[\n \"navbar__lang-dropdown-item\",\n lang.code === activeLanguageCode\n ? \"navbar__lang-dropdown-item--active\"\n : \"\",\n ].filter(Boolean).join(\" \")}\n onClick={() => handleLangSelect(lang.code)}\n >\n {lang.label}\n </button>\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* ── Desktop CTA buttons ── */}\n <div className=\"navbar__actions\">\n {loginHref && (\n <a href={loginHref} className=\"navbar__actions-login\">\n <Button\n colorScheme={theme === \"dark\" ? \"white\" : \"black\"}\n variant=\"secondary\"\n label={loginLabel}\n />\n </a>\n )}\n {ctaHref && (\n <a href={ctaHref}>\n <Button colorScheme=\"coral\" variant=\"primary\" label={ctaLabel} />\n </a>\n )}\n </div>\n\n {/* ── Mobile: Login + Hamburger ── */}\n <div className=\"navbar__mobile-actions\">\n {loginHref && (\n <a href={loginHref}>\n <Button\n colorScheme={scrolled || theme === \"light\" ? \"black\" : \"white\"}\n variant=\"secondary\"\n label={loginLabel}\n />\n </a>\n )}\n <button\n className=\"navbar__mobile-trigger\"\n onClick={() => setMobileOpen((o) => !o)}\n aria-label={mobileOpen ? \"Close navigation menu\" : \"Open navigation menu\"}\n >\n {mobileOpen ? <XMarkIcon /> : <BarsIcon />}\n </button>\n </div>\n\n </div>\n\n {/* ── Mobile drawer ── */}\n {/* Clip container: prevents the drawer from showing above the bar\n during open/close animation */}\n <div className=\"navbar__drawer-clip\">\n <AnimatePresence>\n {mobileOpen && (\n <motion.div\n className=\"navbar__drawer\"\n variants={drawerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.3, ease: EASE_OUT_EXPO }}\n aria-modal=\"true\"\n role=\"dialog\"\n aria-label=\"Navigation menu\"\n >\n {/* Drawer nav */}\n <nav className=\"navbar__drawer-nav\">\n {navItems.map((item) => {\n if (item.dropdown) {\n return (\n <DrawerAccordion\n key={item.label}\n item={item}\n isOpen={mobileExpanded === item.label}\n onToggle={() =>\n setMobileExpanded((prev) =>\n prev === item.label ? null : item.label\n )\n }\n />\n );\n }\n\n return (\n <a\n key={item.label}\n href={item.href}\n className=\"navbar__drawer-single\"\n target={item.external ? \"_blank\" : undefined}\n rel={item.external ? \"noopener noreferrer\" : undefined}\n >\n {item.label}\n {item.external && <ArrowUpRightIcon />}\n </a>\n );\n })}\n\n {/* Language — simple button (no dropdown items) */}\n {languageLabel && !hasLangDropdown && (\n <button className=\"navbar__drawer-lang\" onClick={onLanguageClick}>\n <GlobeIcon className=\"navbar__lang-globe\" />\n {languageLabel}\n </button>\n )}\n {/* Language — opens full-screen language panel */}\n {languageLabel && hasLangDropdown && (\n <button\n className=\"navbar__drawer-lang\"\n onClick={() => setMobileLangOpen(true)}\n >\n <GlobeIcon className=\"navbar__lang-globe\" />\n {languageLabel}\n </button>\n )}\n </nav>\n\n {/* Drawer footer CTAs — hidden when language panel is open */}\n {!mobileLangOpen && (\n <div className=\"navbar__drawer-footer\">\n {loginHref && (\n <a href={loginHref} style={{ display: \"block\" }}>\n <Button\n colorScheme=\"black\"\n variant=\"secondary\"\n label={loginLabel}\n fullWidth\n />\n </a>\n )}\n {ctaHref && (\n <a href={ctaHref} style={{ display: \"block\" }}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={ctaLabel}\n fullWidth\n />\n </a>\n )}\n </div>\n )}\n\n {/* ── Mobile language full-screen panel ── */}\n <AnimatePresence>\n {hasLangDropdown && mobileLangOpen && (\n <motion.div\n className=\"navbar__drawer-lang-panel\"\n initial={{ y: \"100%\" }}\n animate={{ y: 0 }}\n exit={{ y: \"100%\" }}\n transition={{ duration: 0.25, ease: EASE_OUT_EXPO }}\n >\n <button\n className=\"navbar__drawer-lang-back\"\n onClick={() => setMobileLangOpen(false)}\n aria-label=\"Back to menu\"\n >\n <ChevronLeftIcon />\n </button>\n\n <div className=\"navbar__drawer-lang-grid\">\n {languageItems!.map((lang) => (\n <button\n key={lang.code}\n className={[\n \"navbar__drawer-lang-item\",\n lang.code === activeLanguageCode\n ? \"navbar__drawer-lang-item--active\"\n : \"\",\n ].filter(Boolean).join(\" \")}\n onClick={() => handleLangSelect(lang.code)}\n >\n {lang.label}\n </button>\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </nav>\n );\n};\n\nexport default Navbar;\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n motion,\n useScroll,\n useSpring,\n useTransform,\n useMotionTemplate,\n} from \"framer-motion\";\nimport type { DayNightTransitionProps } from \"./DayNightTransition.types\";\nimport {\n webflowV2DayClipPercent,\n webflowV2DayWordOpacity,\n webflowV2DescriptionColor,\n webflowV2NightWordOpacity,\n webflowV2TitleColor,\n type WebflowDayNightV2Media,\n} from \"./webflowDayNightV2Ix\";\nimport \"./DayNightTransition.css\";\n\n/* ── Spring config (default preset only) ──────────────────────── */\nconst SPRING = { stiffness: 80, damping: 30, restDelta: 0.001 } as const;\n\nconst FADE_START = 0.35;\nconst FADE_END = 0.65;\n\n/** Webflow V2 desktop (>991px): dual headline/description crossfade on section `scrollYProgress`. */\nconst V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START = 0.49;\nconst V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END = 0.52;\n\n/** Webflow V2 mobile (≤991px): same crossfade, separate IX-aligned band. */\nconst V2_TEXT_SCROLL_CROSSFADE_MOBILE_START = 0.58;\nconst V2_TEXT_SCROLL_CROSSFADE_MOBILE_END = 0.61;\n\nconst TEXT_CHANNEL_DAY = 0;\nconst TEXT_CHANNEL_NIGHT = 255;\n\n/** Piecewise linear between (t0,v0) and (t1,v1); clamps outside [t0,t1]. */\nconst seg = (t: number, t0: number, t1: number, v0: number, v1: number) => {\n if (t <= t0) return v0;\n if (t >= t1) return v1;\n return v0 + (v1 - v0) * ((t - t0) / (t1 - t0));\n};\n\n/* ── DayNightTransition ───────────────────────────────────────── */\n\nexport const DayNightTransition = ({\n dayImageUrl,\n nightImageUrl,\n dayHeadline = \"Medium length section title goes here\",\n nightHeadline = \"Medium length section title goes here\",\n dayDescription = \"Description goes here. Description goes here. Description goes here.\",\n nightDescription = \"Description goes here. Description goes here. Description goes here.\",\n ctaLabel = \"Get started\",\n ctaHref = \"#\",\n hideCta = false,\n headlineLevel = \"h2\",\n descriptionLevel = \"body-md\",\n inlineDayNightHeadline,\n scrollPreset = \"default\",\n className,\n ...props\n}: DayNightTransitionProps) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const dayWordRef = useRef<HTMLSpanElement>(null);\n\n const [nightMarginStart, setNightMarginStart] = useState(\"0px\");\n const [nightMarginEnd, setNightMarginEnd] = useState(\"0px\");\n\n const [ixMedia, setIxMedia] = useState<WebflowDayNightV2Media>(\"desktop\");\n\n const webflowV2 = scrollPreset === \"webflow-day-night-v2\";\n\n useEffect(() => {\n const mq = window.matchMedia(\"(max-width: 991px)\");\n const sync = () => setIxMedia(mq.matches ? \"mobile\" : \"desktop\");\n sync();\n mq.addEventListener(\"change\", sync);\n return () => mq.removeEventListener(\"change\", sync);\n }, []);\n\n const MotionHeadline = headlineLevel === \"h1\" ? motion.h1 : motion.h2;\n\n useLayoutEffect(() => {\n if (!inlineDayNightHeadline) return;\n\n const syncNightPull = () => {\n const dayEl = dayWordRef.current;\n if (!dayEl) return;\n const w = dayEl.offsetWidth;\n const doc = document.documentElement;\n const rtl =\n doc.getAttribute(\"dir\") === \"rtl\" ||\n doc.lang.toLowerCase().startsWith(\"ar\");\n if (rtl) {\n setNightMarginStart(\"0px\");\n setNightMarginEnd(w ? `-${w}px` : \"0px\");\n } else {\n setNightMarginStart(w ? `-${w}px` : \"0px\");\n setNightMarginEnd(\"0px\");\n }\n };\n\n syncNightPull();\n const ro = new ResizeObserver(syncNightPull);\n if (dayWordRef.current) ro.observe(dayWordRef.current);\n window.addEventListener(\"resize\", syncNightPull);\n return () => {\n ro.disconnect();\n window.removeEventListener(\"resize\", syncNightPull);\n };\n }, [\n inlineDayNightHeadline,\n inlineDayNightHeadline?.dayWord,\n inlineDayNightHeadline?.nightWord,\n inlineDayNightHeadline?.prefix,\n ]);\n\n const { scrollYProgress } = useScroll({\n target: wrapperRef,\n offset: [\"start end\", \"end start\"],\n });\n\n /* Webflow IX uses raw scroll progress (smoothing:50 is mild; spring would skew keyframes). */\n const smooth = useSpring(scrollYProgress, SPRING);\n const progress = webflowV2 ? scrollYProgress : smooth;\n\n const nightOpacity = useTransform(progress, [FADE_START, FADE_END], [0, 1]);\n const channel = useTransform(progress, [FADE_START, FADE_END], [TEXT_CHANNEL_DAY, TEXT_CHANNEL_NIGHT]);\n const textColor = useMotionTemplate`rgb(${channel}, ${channel}, ${channel})`;\n\n /**\n * Dual headline / description crossfade.\n * - Default: [FADE_START, FADE_END] with the night image opacity.\n * - Webflow V2: desktop vs mobile `scrollYProgress` bands (see `V2_TEXT_SCROLL_CROSSFADE_*`).\n */\n const dayOpacity = useTransform(progress, (t) => {\n if (webflowV2) {\n return ixMedia === \"mobile\"\n ? seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,\n 1,\n 0,\n )\n : seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,\n 1,\n 0,\n );\n }\n return seg(t, FADE_START, FADE_END, 1, 0);\n });\n const nightOpacity2 = useTransform(progress, (t) => {\n if (webflowV2) {\n return ixMedia === \"mobile\"\n ? seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,\n 0,\n 1,\n )\n : seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,\n 0,\n 1,\n );\n }\n return seg(t, FADE_START, FADE_END, 0, 1);\n });\n\n const v2DescColor = useTransform(progress, (t) => webflowV2DescriptionColor(t, ixMedia));\n const v2TitleColor = useTransform(progress, (t) => webflowV2TitleColor(t, ixMedia));\n const v2DayWordOp = useTransform(progress, (t) => webflowV2DayWordOpacity(t, ixMedia));\n const v2NightWordOp = useTransform(progress, (t) => webflowV2NightWordOpacity(t, ixMedia));\n /**\n * IX mobile: `STYLE_SIZE` uses **%** on `.trade-day-night_background-day` (parent = 200vh wrapper).\n * Desktop: fixed `100vh` like `.is-alternative` in Webflow CSS.\n */\n const v2DayHeight = useTransform(progress, (t) =>\n ixMedia === \"mobile\"\n ? `${webflowV2DayClipPercent(t, ixMedia)}%`\n : \"100vh\",\n );\n\n const hasDescription = Boolean(dayDescription || nightDescription);\n\n const useInlineHeadline = Boolean(inlineDayNightHeadline);\n\n const rootClass = [\n \"dnt\",\n headlineLevel === \"h1\" && \"dnt--headline-h1\",\n descriptionLevel === \"body-lg\" && \"dnt--desc-body-lg\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n ref={wrapperRef}\n className={rootClass}\n {...props}\n >\n {webflowV2 && (\n <div className=\"dnt__v2-background-wrapper\" aria-hidden=\"true\">\n {/*\n Webflow DOM order (both layers, both images):\n 1) trade-day-night_background-day\n 2) trade-day-night_background-night\n */}\n <motion.div\n className=\"dnt__v2-bg-day trade-day-night_background-day is-alternative\"\n style={{\n backgroundImage: `url(${dayImageUrl})`,\n height: v2DayHeight,\n }}\n />\n <div\n className=\"dnt__v2-bg-night trade-day-night_background-night is-alternative\"\n style={{ backgroundImage: `url(${nightImageUrl})` }}\n />\n </div>\n )}\n\n <div className={webflowV2 ? \"dnt__sticky dnt__sticky--webflow-v2\" : \"dnt__sticky\"}>\n\n {!webflowV2 && (\n <>\n <img\n className=\"dnt__bg dnt__bg--day\"\n src={dayImageUrl}\n alt=\"\"\n loading=\"eager\"\n draggable={false}\n />\n <motion.img\n className=\"dnt__bg dnt__bg--night\"\n src={nightImageUrl}\n alt=\"\"\n loading=\"eager\"\n draggable={false}\n style={{ opacity: nightOpacity }}\n />\n </>\n )}\n\n <div className=\"dnt__content\">\n <div className=\"dnt__inner\">\n {webflowV2 ? (\n <div className=\"dnt__text-wrap\">\n {useInlineHeadline && inlineDayNightHeadline ? (\n <MotionHeadline\n className=\"dnt__headline dnt__headline--inline-day-night\"\n style={{ color: v2TitleColor }}\n aria-label={`${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`}\n >\n <span className=\"dnt__headline-prefix\">\n {inlineDayNightHeadline.prefix}\n </span>\n <span className=\"dnt__headline-pair\">\n <motion.span\n ref={dayWordRef}\n className=\"dnt__headline-wday\"\n style={{ opacity: v2DayWordOp }}\n >\n {inlineDayNightHeadline.dayWord}\n </motion.span>\n <motion.span\n className=\"dnt__headline-wnight\"\n style={{\n opacity: v2NightWordOp,\n marginInlineStart: nightMarginStart,\n marginInlineEnd: nightMarginEnd,\n }}\n >\n {inlineDayNightHeadline.nightWord}\n </motion.span>\n </span>\n </MotionHeadline>\n ) : (\n <div className=\"dnt__crossfade-wrap\">\n <MotionHeadline\n className=\"dnt__headline\"\n style={{ color: v2TitleColor, opacity: dayOpacity }}\n >\n {dayHeadline}\n </MotionHeadline>\n <MotionHeadline\n className=\"dnt__headline\"\n aria-hidden=\"true\"\n style={{ color: v2TitleColor, opacity: nightOpacity2 }}\n >\n {nightHeadline}\n </MotionHeadline>\n </div>\n )}\n\n {hasDescription && (\n <div className=\"dnt__crossfade-wrap\">\n <motion.p\n className=\"dnt__description\"\n style={{\n color: v2DescColor,\n opacity: dayOpacity,\n }}\n >\n {dayDescription ?? \"\"}\n </motion.p>\n <motion.p\n className=\"dnt__description\"\n aria-hidden=\"true\"\n style={{\n color: v2DescColor,\n opacity: nightOpacity2,\n }}\n >\n {nightDescription ?? \"\"}\n </motion.p>\n </div>\n )}\n\n {!hideCta && (\n <a href={ctaHref} className=\"dnt__btn\">\n {ctaLabel}\n </a>\n )}\n </div>\n ) : (\n <motion.div\n className=\"dnt__text-wrap\"\n style={{ color: textColor }}\n >\n {useInlineHeadline && inlineDayNightHeadline ? (\n <MotionHeadline\n className=\"dnt__headline dnt__headline--inline-day-night\"\n aria-label={`${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`}\n >\n <span className=\"dnt__headline-prefix\">\n {inlineDayNightHeadline.prefix}\n </span>\n <span className=\"dnt__headline-pair\">\n <motion.span\n ref={dayWordRef}\n className=\"dnt__headline-wday\"\n style={{ opacity: dayOpacity }}\n >\n {inlineDayNightHeadline.dayWord}\n </motion.span>\n <motion.span\n className=\"dnt__headline-wnight\"\n style={{\n opacity: nightOpacity2,\n marginInlineStart: nightMarginStart,\n marginInlineEnd: nightMarginEnd,\n }}\n >\n {inlineDayNightHeadline.nightWord}\n </motion.span>\n </span>\n </MotionHeadline>\n ) : (\n <div className=\"dnt__crossfade-wrap\">\n <MotionHeadline\n className=\"dnt__headline\"\n style={{ opacity: dayOpacity }}\n >\n {dayHeadline}\n </MotionHeadline>\n <MotionHeadline\n className=\"dnt__headline\"\n aria-hidden=\"true\"\n style={{ opacity: nightOpacity2 }}\n >\n {nightHeadline}\n </MotionHeadline>\n </div>\n )}\n\n {hasDescription && (\n <div className=\"dnt__crossfade-wrap\">\n <motion.p\n className=\"dnt__description\"\n style={{ opacity: dayOpacity }}\n >\n {dayDescription ?? \"\"}\n </motion.p>\n <motion.p\n className=\"dnt__description\"\n aria-hidden=\"true\"\n style={{ opacity: nightOpacity2 }}\n >\n {nightDescription ?? \"\"}\n </motion.p>\n </div>\n )}\n\n {!hideCta && (\n <a href={ctaHref} className=\"dnt__btn\">\n {ctaLabel}\n </a>\n )}\n </motion.div>\n )}\n </div>\n </div>\n\n </div>\n </div>\n );\n};\n\nexport default DayNightTransition;\n","/**\n * Scroll mapping reverse-engineered from Webflow IX2 in\n * `DayNightTransitionV2/js/webflow.js` (actionLists `a` = mobile, `a-2` = desktop).\n * `t` is continuous scroll progress 0 → 1 on the 200vh driver (SCROLL_PROGRESS).\n */\n\nexport type WebflowDayNightV2Media = \"desktop\" | \"mobile\";\n\n/** Description swatch from IX (STYLE_TEXT_COLOR r/g/b). */\nconst DESC_SWATCH = { r: 24, g: 28, b: 37 } as const;\n\n/** Webflow `body { color: #333 }` before IX touches description (mobile). */\nconst BODY_TEXT = { r: 51, g: 51, b: 51 } as const;\n\nconst rgb = (r: number, g: number, b: number) => `rgb(${r},${g},${b})`;\n\nconst lerp = (a: number, b: number, u: number) => a + (b - a) * u;\n\n/** Piecewise linear between (t0,v0) and (t1,v1); clamps outside [t0,t1]. */\nconst seg = (t: number, t0: number, t1: number, v0: number, v1: number) => {\n if (t <= t0) return v0;\n if (t >= t1) return v1;\n return lerp(v0, v1, (t - t0) / (t1 - t0));\n};\n\nexport function webflowV2DescriptionColor(t: number, media: WebflowDayNightV2Media): string {\n if (media === \"desktop\") {\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const white = rgb(255, 255, 255);\n /* IX kf 49 → swatch, kf 50 → white; before kf 49 inherits `body` #333. */\n if (t < 0.49) return body;\n if (t < 0.5) return dark;\n return white;\n }\n /* mobile: default body #333 until kf 58 → IX swatch, kf 59 → white. */\n const white = rgb(255, 255, 255);\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n if (t < 0.58) return body;\n if (t < 0.59) return dark;\n return white;\n}\n\n/** Title / prefix colour on `.trade-day-night_title.new-heading-style-h1`. */\nexport function webflowV2TitleColor(t: number, media: WebflowDayNightV2Media): string {\n if (media === \"desktop\") {\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n const black = rgb(0, 0, 0);\n const white = rgb(255, 255, 255);\n /* Title first touched at IX kf 51 (#000); before that inherits `body` #333. */\n if (t < 0.51) return body;\n if (t >= 0.52) return white;\n return seg(t, 0.51, 0.52, black, white);\n }\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const white = rgb(255, 255, 255);\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n /* IX kf 60 → dark title, kf 61 → white; before IX, title inherits `body` #333. */\n if (t < 0.6) return body;\n if (t >= 0.61) return white;\n const u = (t - 0.6) / 0.01;\n return rgb(\n lerp(DESC_SWATCH.r, 255, u),\n lerp(DESC_SWATCH.g, 255, u),\n lerp(DESC_SWATCH.b, 255, u),\n );\n}\n\nexport function webflowV2DayWordOpacity(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") {\n if (t < 0.51) return 1;\n if (t >= 0.52) return 0;\n return seg(t, 0.51, 0.52, 1, 0);\n }\n if (t < 0.6) return 1;\n if (t >= 0.61) return 0;\n return seg(t, 0.6, 0.61, 1, 0);\n}\n\nexport function webflowV2NightWordOpacity(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") {\n if (t < 0.51) return 0;\n if (t >= 0.52) return 1;\n return seg(t, 0.51, 0.52, 0, 1);\n }\n if (t < 0.6) return 0;\n if (t >= 0.61) return 1;\n return seg(t, 0.6, 0.61, 0, 1);\n}\n\n/** Scroll progress (0–1 on the 200vh driver) where mobile day-layer height finishes (IX kf 65). */\nexport const WEBFLOW_V2_DAY_CLIP_SCROLL_END = 0.65;\n\n/**\n * Mobile only: IX2 `STYLE_SIZE` height **%** on `.trade-day-night_background-day.is-alternative`\n * from keyframe **0 → 65** (parent height = `.trade-day-night_background-wrapper` / 200vh track).\n * Returns **0–100** for use as `${value}%` in Framer.\n */\nexport function webflowV2DayClipPercent(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") return 100;\n return seg(t, 0, WEBFLOW_V2_DAY_CLIP_SCROLL_END, 100, 0);\n}\n","import type { DayNightTransitionProps } from \"./DayNightTransition.types\";\n\n/**\n * **DayNightTransitionV2** Storybook preset: same headlines, body copy, CTA, and\n * typography defaults (h2 + body-md) as the **Default** story; Webflow IX2 scroll\n * timing via `scrollPreset: \"webflow-day-night-v2\"` plus `dnt--layout-v2` /\n * `dnt--webflow-v2` for layout and backgrounds.\n */\nexport const dayNightTransitionV2Preset: Pick<\n DayNightTransitionProps,\n | \"className\"\n | \"dayImageUrl\"\n | \"nightImageUrl\"\n | \"dayHeadline\"\n | \"nightHeadline\"\n | \"dayDescription\"\n | \"nightDescription\"\n | \"ctaLabel\"\n | \"ctaHref\"\n | \"scrollPreset\"\n> = {\n className: \"dnt--layout-v2 dnt--webflow-v2\",\n scrollPreset: \"webflow-day-night-v2\",\n dayImageUrl:\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86cd8f_trade_day.webp\",\n nightImageUrl:\n \"https://cdn.prod.website-files.com/66585fe0e1dc7e70cc75d440/6757df573bf331c84b6c69fe_trade_night.webp\",\n dayHeadline: \"Section title light\\n\",\n nightHeadline: \"Section title dark\\n\",\n dayDescription:\n \"This section is designed to give your visitors a quick overview of why your solution is the right choice. Use this space to provide high-level context.\\n\",\n nightDescription:\n \"This section is designed to give your visitors a quick overview of why your solution is the right choice. Use this space to provide high-level context.\",\n ctaLabel: \"Open account\",\n ctaHref: \"#\",\n};\n","import { useRef } from \"react\";\nimport {\n motion,\n useScroll,\n useVelocity,\n useAnimationFrame,\n useMotionValue,\n} from \"framer-motion\";\nimport type { LogoMarqueeProps, LogoItem } from \"./LogoMarquee.types\";\nimport \"./LogoMarquee.css\";\n\n/* ── Modular wrap ─────────────────────────────────────────────────\n * Keeps `v` cycling within [min, max).\n * JS % operator returns negative results for negative numbers, so\n * we normalise with the double-mod pattern.\n *\n * Example (cycleH = 1500):\n * modWrap(-1500, 0, -1501) → -1\n * modWrap(-1500, 0, 1) → -1499 (seamless cross-boundary)\n */\nfunction modWrap(min: number, max: number, v: number): number {\n const range = max - min;\n return ((((v - min) % range) + range) % range) + min;\n}\n\n/* ── Speed constants ──────────────────────────────────────────────\n * VELOCITY_FACTOR scales raw scroll px/s → column marquee px/s.\n * MAX_SCROLL_V clamps very fast flicks so the marquee stays\n * readable instead of blurring past.\n * DEADZONE minimum scroll velocity (px/s) needed to move\n * the columns — prevents micro-drift from inertia.\n */\nconst VELOCITY_FACTOR = 0.4;\nconst MAX_SCROLL_V = 2500;\nconst DEADZONE = 2;\n\n/* ── Placeholder image ────────────────────────────────────────── */\n\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\n/* ── Logo data ────────────────────────────────────────────────── */\n\nexport const COL_ONE_LOGOS: LogoItem[] = [\n { name: \"Logo 1\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 2\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 3\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 4\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 5\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 6\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 7\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 8\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 9\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 10\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 11\", url: PLACEHOLDER_IMAGE },\n];\n\nexport const COL_TWO_LOGOS: LogoItem[] = [\n { name: \"Logo 1\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 2\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 3\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 4\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 5\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 6\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 7\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 8\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 9\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 10\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 11\", url: PLACEHOLDER_IMAGE },\n];\n\nexport const TEXT_CONTENT = {\n headline: \"Section title goes here\",\n body: \"Explain how this specific feature helps your user.\",\n disclaimer: \"*Add any relevant disclaimers or legal copy here.\",\n ctaLabel: \"Learn more\",\n ctaHref: \"#\",\n};\n\n/* ── LogoMarquee ──────────────────────────────────────────────── */\n\nexport const LogoMarquee = ({\n headline = TEXT_CONTENT.headline,\n body = TEXT_CONTENT.body,\n disclaimer = TEXT_CONTENT.disclaimer,\n ctaLabel = TEXT_CONTENT.ctaLabel,\n ctaHref = TEXT_CONTENT.ctaHref,\n col1Logos = COL_ONE_LOGOS,\n col2Logos = COL_TWO_LOGOS,\n className,\n ...props\n}: LogoMarqueeProps) => {\n /* ── Scroll velocity source ─────────────────────────────────────\n * useScroll() (no args) tracks the global window scroll.\n * useVelocity() derives the rate of change in px/s.\n * When the user isn't scrolling, velocity → 0 and the columns\n * freeze immediately — no spring lag, no easing drift.\n */\n const { scrollY } = useScroll();\n const scrollVelocity = useVelocity(scrollY);\n\n /* ── Column Y positions ─────────────────────────────────────────\n * useMotionValue gives Framer Motion a mutable number it can\n * directly wire to the DOM transform without React re-renders.\n */\n const col1Y = useMotionValue(0);\n const col2Y = useMotionValue(0);\n\n /* Refs to measure each column's rendered height so modWrap can\n * calculate the exact single-cycle length at runtime. */\n const col1Ref = useRef<HTMLDivElement>(null);\n const col2Ref = useRef<HTMLDivElement>(null);\n\n /* ── Per-frame marquee update ───────────────────────────────────\n * useAnimationFrame runs every rAF tick.\n * `delta` is ms since the previous frame (~16 at 60 fps).\n *\n * step = scrollVelocity (px/s) × VELOCITY_FACTOR × (delta / 1000s)\n *\n * Col 1 subtracts step → scrolls UP when scrolling down.\n * Col 2 adds step → scrolls DOWN when scrolling down.\n * Opposite on scroll-up — naturally reversed.\n *\n * modWrap(-cycleH, 0, newPos) keeps the position looping within\n * one cycle so the column never runs out of cards.\n */\n useAnimationFrame((_, delta) => {\n const raw = scrollVelocity.get();\n\n // Frozen while not scrolling\n if (Math.abs(raw) < DEADZONE) return;\n\n const clamped = Math.sign(raw) * Math.min(Math.abs(raw), MAX_SCROLL_V);\n const step = clamped * VELOCITY_FACTOR * (delta / 1000);\n\n // Single-cycle height = half of total track (2× duplication)\n const cycleH1 = (col1Ref.current?.offsetHeight ?? 2000) / 2;\n const cycleH2 = (col2Ref.current?.offsetHeight ?? 2000) / 2;\n\n col1Y.set(modWrap(-cycleH1, 0, col1Y.get() - step)); // UP\n col2Y.set(modWrap(-cycleH2, 0, col2Y.get() + step)); // DOWN (opposite)\n });\n\n /* 2× duplication creates a seamless loop:\n * offsetHeight / 2 = one cycle → wrapping at that boundary\n * always reveals identical content (the other copy). */\n const track1 = [...col1Logos, ...col1Logos];\n const track2 = [...col2Logos, ...col2Logos];\n\n return (\n <section\n className={[\"lm\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"lm__inner\">\n\n {/* ── Media — two opposing marquee columns ──────── */}\n <div className=\"lm__media\">\n <div className=\"lm__carousel\">\n\n {/* Top gradient fade */}\n <div className=\"lm__fade lm__fade--top\" aria-hidden=\"true\" />\n\n {/* Column 1 — scrolls UP when page scrolls DOWN */}\n <motion.div\n ref={col1Ref}\n className=\"lm__col\"\n style={{ y: col1Y }}\n >\n {track1.map((logo, i) => (\n <div key={`c1-${i}`} className=\"lm__card\">\n <div className=\"lm__card-img-wrap\">\n <img\n src={logo.url}\n alt={logo.name}\n loading=\"lazy\"\n draggable={false}\n />\n </div>\n </div>\n ))}\n </motion.div>\n\n {/* Column 2 — scrolls DOWN when page scrolls DOWN */}\n <motion.div\n ref={col2Ref}\n className=\"lm__col\"\n style={{ y: col2Y }}\n >\n {track2.map((logo, i) => (\n <div key={`c2-${i}`} className=\"lm__card\">\n <div className=\"lm__card-img-wrap\">\n <img\n src={logo.url}\n alt={logo.name}\n loading=\"lazy\"\n draggable={false}\n />\n </div>\n </div>\n ))}\n </motion.div>\n\n {/* Bottom gradient fade */}\n <div className=\"lm__fade lm__fade--bottom\" aria-hidden=\"true\" />\n\n </div>\n </div>\n\n {/* ── Text content ────────────────────────────── */}\n <div className=\"lm__content\">\n <h2 className=\"lm__headline\">{headline}</h2>\n\n <div className=\"lm__text-group\">\n <p className=\"lm__body\">{body}</p>\n <p className=\"lm__disclaimer\">{disclaimer}</p>\n </div>\n\n <a href={ctaHref} className=\"lm__link\">\n {ctaLabel}\n <span className=\"lm__link-icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </a>\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default LogoMarquee;\n","import type { DownloadBadgeProps } from \"./DownloadBadge.types\";\nimport \"./DownloadBadge.css\";\n\n/* ── Light badge assets ─────────────────────────────────────── */\nimport googlePlayLight from \"../../assets/appstore-googleplay-light.svg\";\nimport appStoreLight from \"../../assets/appstore-appstore-light.svg\";\nimport appGalleryLight from \"../../assets/appstore-appgallery-light.svg\";\nimport windowsLight from \"../../assets/appstore-windows-light.svg\";\nimport macOSLight from \"../../assets/appstore-macos-light.svg\";\nimport linuxLight from \"../../assets/appstore-linux-light.svg\";\nimport browserLight from \"../../assets/appstore-browser-light.svg\";\n\n/* ── Dark badge assets ──────────────────────────────────────── */\nimport googlePlayDark from \"../../assets/appstore-googleplay-dark.svg\";\nimport appStoreDark from \"../../assets/appstore-appstore-dark.svg\";\nimport appGalleryDark from \"../../assets/appstore-appgallery-dark.svg\";\nimport windowsDark from \"../../assets/appstore-windows-dark.svg\";\nimport macOSDark from \"../../assets/appstore-macos-dark.svg\";\nimport linuxDark from \"../../assets/appstore-linux-dark.svg\";\nimport browserDark from \"../../assets/appstore-browser-dark.svg\";\n\n/* ── Asset map ──────────────────────────────────────────────── */\n\nconst BADGE_ASSETS = {\n light: {\n googleplay: { src: googlePlayLight, alt: \"Get it on Google Play\" },\n appstore: { src: appStoreLight, alt: \"Download on the App Store\" },\n appgallery: { src: appGalleryLight, alt: \"Explore it on AppGallery\" },\n windows: { src: windowsLight, alt: \"Download for Windows\" },\n macos: { src: macOSLight, alt: \"Download on the Mac App Store\" },\n linux: { src: linuxLight, alt: \"Installation on Linux\" },\n web: { src: browserLight, alt: \"Trade on Web browser\" },\n },\n dark: {\n googleplay: { src: googlePlayDark, alt: \"Get it on Google Play\" },\n appstore: { src: appStoreDark, alt: \"Download on the App Store\" },\n appgallery: { src: appGalleryDark, alt: \"Explore it on AppGallery\" },\n windows: { src: windowsDark, alt: \"Download for Windows\" },\n macos: { src: macOSDark, alt: \"Download on the Mac App Store\" },\n linux: { src: linuxDark, alt: \"Installation on Linux\" },\n web: { src: browserDark, alt: \"Trade on Web browser\" },\n },\n} as const;\n\n/* ── Component ──────────────────────────────────────────────── */\n\nexport const DownloadBadge = ({\n platform,\n colorScheme = \"light\",\n href,\n className,\n ...props\n}: DownloadBadgeProps) => {\n const { src, alt } = BADGE_ASSETS[colorScheme][platform];\n\n return (\n <a\n className={[\n \"download-badge\",\n `download-badge--${colorScheme}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n href={href ?? \"#\"}\n aria-label={alt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...props}\n >\n <img className=\"download-badge__img\" src={src} alt={alt} />\n </a>\n );\n};\n","import type { StepsProps } from \"./Steps.types\";\nimport \"./Steps.css\";\n\nexport const Steps = ({\n title,\n steps,\n image,\n imageAlt = \"\",\n imagePosition = \"left\",\n}: StepsProps) => {\n const containerClass = [\n \"steps__container\",\n imagePosition === \"right\" ? \"steps__container--image-right\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <section className=\"steps\">\n <div className={containerClass}>\n {/* ── Image column ── */}\n {image && (\n <div className=\"steps__image-wrapper\">\n <img\n src={image}\n alt={imageAlt}\n className=\"steps__image\"\n />\n </div>\n )}\n\n {/* ── Content column ── */}\n <div className=\"steps__content\">\n <h2 className=\"steps__title\">{title}</h2>\n\n <ol className=\"steps__list\">\n {steps.map((step, index) => (\n <li key={index} className=\"steps__item\">\n <div className=\"steps__item-inner\">\n <span className=\"steps__number\" aria-hidden=\"true\">\n {index + 1}\n </span>\n\n <div className=\"steps__item-body\">\n <h3 className=\"steps__item-title\">\n {step.title}\n </h3>\n <p className=\"steps__item-description\">\n {step.description}\n </p>\n </div>\n </div>\n </li>\n ))}\n </ol>\n </div>\n </div>\n </section>\n );\n};\n","import { DownloadBadge } from \"../../primitives/DownloadBadge\";\nimport type { DownloadBannerProps } from \"./DownloadBanner.types\";\nimport \"./DownloadBanner.css\";\n\nexport const DownloadBanner = ({\n style = \"light-2\",\n qrCodeImage,\n qrCodeAlt = \"QR code to download the app\",\n qrTitle = \"Scan to download\",\n qrSubtitle = \"Android & iOS\",\n mobileTitle = \"Available on\",\n showAppStore = true,\n showGooglePlay = true,\n showAppGallery = true,\n showWindows = true,\n showMacOS = true,\n showLinux = true,\n showWeb = true,\n appStoreHref,\n googlePlayHref,\n appGalleryHref,\n windowsHref,\n macOSHref,\n linuxHref,\n webHref,\n disclaimer,\n}: DownloadBannerProps) => {\n const colorScheme = style === \"dark\" ? \"dark\" : \"light\";\n\n return (\n <section className={`db-section db-section--${style}`}>\n <div className=\"db-container\">\n <div className=\"db-card\">\n {/* ── QR block (desktop) / heading (mobile) ── */}\n <div className=\"db-qr-block\">\n {qrCodeImage && (\n <img\n className=\"db-qr-image\"\n src={qrCodeImage}\n alt={qrCodeAlt}\n />\n )}\n <div className=\"db-qr-text\">\n {/* Desktop: two-line QR label */}\n <span className=\"db-qr-text__title db-qr-text__title--desktop\">\n {qrTitle}\n </span>\n <h2 className=\"db-qr-text__subtitle db-qr-text__subtitle--desktop\">\n {qrSubtitle}\n </h2>\n {/* Mobile: single heading */}\n <span className=\"db-qr-text__title db-qr-text__title--mobile\">\n {mobileTitle}\n </span>\n {disclaimer && (\n <span className=\"db-disclaimer\">{disclaimer}</span>\n )}\n </div>\n </div>\n\n {/* ── Badge grid ── */}\n <div className=\"db-badges\">\n {showGooglePlay && (\n <DownloadBadge platform=\"googleplay\" colorScheme={colorScheme} href={googlePlayHref} />\n )}\n {showAppGallery && (\n <DownloadBadge platform=\"appgallery\" colorScheme={colorScheme} href={appGalleryHref} />\n )}\n {showMacOS && (\n <DownloadBadge platform=\"macos\" colorScheme={colorScheme} href={macOSHref} />\n )}\n {showWindows && (\n <DownloadBadge platform=\"windows\" colorScheme={colorScheme} href={windowsHref} />\n )}\n {showLinux && (\n <DownloadBadge platform=\"linux\" colorScheme={colorScheme} href={linuxHref} />\n )}\n {showAppStore && (\n <DownloadBadge platform=\"appstore\" colorScheme={colorScheme} href={appStoreHref} />\n )}\n {showWeb && (\n <DownloadBadge platform=\"web\" colorScheme={colorScheme} href={webHref} />\n )}\n </div>\n </div>\n </div>\n </section>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport type { TextScrollProps } from \"./TextScroll.types\";\nimport \"./TextScroll.css\";\n\ngsap.registerPlugin(ScrollTrigger);\n\nexport const TextScroll = ({ text, className }: TextScrollProps) => {\n const sectionRef = useRef<HTMLElement>(null);\n const wordsRef = useRef<HTMLSpanElement[]>([]);\n\n /* Split the text string into individual word <span> elements.\n We do this in render so SSR / hydration is consistent. */\n const words = text.split(/\\s+/).filter(Boolean);\n\n useEffect(() => {\n const section = sectionRef.current;\n const wordEls = wordsRef.current.filter(Boolean);\n if (!section || wordEls.length === 0) return;\n\n const isMobile = window.matchMedia(\"(max-width: 767px)\").matches;\n const startValue = isMobile ? \"top 35%\" : \"top center\";\n const endValue = isMobile ? \"bottom 90%\" : \"bottom center\";\n\n /* Defer setup by one frame so the first paint renders words at\n full opacity (no flash of invisible content). After the frame,\n dim them and attach ScrollTrigger. */\n const rafId = requestAnimationFrame(() => {\n gsap.set(wordEls, { opacity: 0.2 });\n\n const tl = gsap.timeline({\n scrollTrigger: {\n trigger: section,\n start: startValue,\n end: endValue,\n scrub: 2,\n },\n });\n\n tl.to(wordEls, {\n opacity: 1,\n stagger: 0.1,\n ease: \"none\",\n });\n\n /* Store cleanup on the section element so the return fn can reach it */\n (section as HTMLElement & { _tl?: gsap.core.Timeline })._tl = tl;\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n const tl = (section as HTMLElement & { _tl?: gsap.core.Timeline })._tl;\n if (tl) {\n tl.scrollTrigger?.kill();\n tl.kill();\n }\n gsap.set(wordEls, { clearProps: \"opacity\" });\n };\n }, [text]);\n\n return (\n <section\n ref={sectionRef}\n className={[\"ts\", className].filter(Boolean).join(\" \")}\n >\n <div className=\"ts__inner\">\n <p className=\"ts__text\" aria-label={text}>\n {words.map((word, i) => (\n <span\n key={i}\n ref={(el) => {\n if (el) wordsRef.current[i] = el;\n }}\n className=\"ts__word\"\n aria-hidden=\"true\"\n >\n {word}\n {i < words.length - 1 ? \" \" : \"\"}\n </span>\n ))}\n </p>\n </div>\n </section>\n );\n};\n\nexport default TextScroll;\n","import { useEffect, useRef } from \"react\";\nimport type { StickyMarketCardItem, StickyMarketCardsProps } from \"./StickyMarketCards.types\";\nimport \"./StickyMarketCards.css\";\n\n/* ── Shared design-system placeholder image ────────────────── */\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\nexport const StickyMarketCards = ({\n sectionTitle,\n sectionDescription,\n items,\n className,\n ...props\n}: StickyMarketCardsProps) => {\n /* outer sticky wrappers — used for measuring overlap */\n const cardRefs = useRef<(HTMLElement | null)[]>([]);\n /* inner card elements — receive transform + filter on scroll */\n const cardInnerRefs = useRef<(HTMLElement | null)[]>([]);\n\n /* ── Scroll-driven scale + brightness ─────── */\n /*\n * Transform is applied to the INNER card element (not the sticky wrapper)\n * so that the layout position of the sticky wrapper is unchanged while\n * the visual card scales and dims as the next card overlaps it.\n * Max scale-down: 5% (scale = 0.95)\n * Max brightness reduction: 40% (brightness = 0.6)\n */\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let rafId = 0;\n\n const update = () => {\n const wrappers = cardRefs.current.filter(Boolean) as HTMLElement[];\n const inners = cardInnerRefs.current.filter(Boolean) as HTMLElement[];\n const n = wrappers.length;\n\n wrappers.forEach((wrapper, i) => {\n const inner = inners[i];\n if (!inner) return;\n\n /* Last card is always full scale + full brightness */\n if (i === n - 1) {\n inner.style.transform = \"scale(1)\";\n inner.style.filter = \"brightness(1)\";\n return;\n }\n\n const nextWrapper = wrappers[i + 1];\n if (!nextWrapper) return;\n\n const currentRect = wrapper.getBoundingClientRect();\n const nextRect = nextWrapper.getBoundingClientRect();\n const overlap = currentRect.bottom - nextRect.top;\n\n if (overlap > 0) {\n const progress = Math.min(overlap / currentRect.height, 1);\n inner.style.transform = `scale(${(1 - progress * 0.05).toFixed(4)})`;\n inner.style.filter = `brightness(${(1 - progress * 0.4).toFixed(4)})`;\n } else {\n inner.style.transform = \"scale(1)\";\n inner.style.filter = \"brightness(1)\";\n }\n });\n };\n\n const onScroll = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(update);\n };\n\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n update();\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n /* ── Sync card heights ────────────────────── */\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const syncHeights = () => {\n const inners = cardInnerRefs.current.filter(Boolean) as HTMLElement[];\n if (!inners.length) return;\n\n /* 1. Clear explicit heights to get natural CSS height */\n inners.forEach((inner) => {\n inner.style.minHeight = \"\";\n });\n\n /* 2. Measure the tallest card */\n let maxH = 0;\n inners.forEach((inner) => {\n const h = inner.getBoundingClientRect().height;\n if (h > maxH) maxH = h;\n });\n\n /* 3. Apply max height to all cards */\n inners.forEach((inner) => {\n inner.style.minHeight = `${maxH}px`;\n });\n };\n\n /* Initial sync */\n syncHeights();\n\n /* Sync on resize */\n window.addEventListener(\"resize\", syncHeights);\n\n /* Sync after custom fonts load to prevent layout shift */\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(syncHeights);\n }\n\n return () => {\n window.removeEventListener(\"resize\", syncHeights);\n };\n }, [items.length]);\n\n const n = items.length;\n const maxStack = 4;\n const baseIndex = Math.max(0, n - maxStack);\n\n return (\n <section\n className={[\"smc\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"smc__inner\">\n <div className=\"smc__header-wrap\">\n <h2 className=\"smc__header\">{sectionTitle}</h2>\n {sectionDescription && (\n <p className=\"smc__description\">{sectionDescription}</p>\n )}\n </div>\n\n <div className=\"smc__track\">\n {items.map((item, i) => {\n const theme = item.theme ?? \"dark\";\n const offsetMultiplier = Math.max(0, i - baseIndex);\n\n return (\n <div\n key={i}\n ref={(el) => { cardRefs.current[i] = el; }}\n className=\"smc__card\"\n style={{\n [\"--smc-card-index\" as string]: String(offsetMultiplier),\n zIndex: i + 1,\n }}\n >\n <div\n ref={(el) => { cardInnerRefs.current[i] = el; }}\n className={[\n \"smc__card-inner\",\n `smc__card-inner--${theme}`,\n ].join(\" \")}\n >\n {/* Background image with semi-transparent overlay */}\n <div className=\"smc__card-bg\">\n <img\n src={item.imageUrl ?? PLACEHOLDER_IMAGE}\n alt=\"\"\n aria-hidden=\"true\"\n loading={i === 0 ? \"eager\" : \"lazy\"}\n />\n <div\n className={[\n \"smc__card-overlay\",\n `smc__card-overlay--${theme}`,\n ].join(\" \")}\n />\n </div>\n\n <div className=\"smc__card-content\">\n <div className=\"smc__card-title-wrap\">\n <h3 className=\"smc__card-title\">{item.title}</h3>\n </div>\n <div className=\"smc__card-desc-wrap\">\n <p className=\"smc__card-desc\">{item.description}</p>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </section>\n );\n};\n\nexport default StickyMarketCards;\n","import { useState, useMemo } from \"react\";\nimport type { TableProps } from \"./Table.types\";\nimport { SearchField } from \"../../primitives/SearchField\";\nimport { Pagination } from \"../../primitives/Pagination\";\nimport \"./Table.css\";\n\nconst InfoIcon = ({ className }: { className?: string }) => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M12 16V12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"8\" r=\"1\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n);\n\nexport const Table = ({\n sectionTitle,\n columns,\n rows,\n mainColumnKey,\n pageSize = 10,\n searchPlaceholder = \"Search\",\n infoText,\n className,\n ...props\n}: TableProps) => {\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n const [tooltip, setTooltip] = useState({ visible: false, heading: \"\", description: \"\", x: 0, y: 0, arrowOffset: 0 });\n\n const mainKey =\n mainColumnKey ??\n columns.find((c) => c.width === \"main\")?.key ??\n columns[0]?.key;\n\n /* ── Filter ── */\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return rows;\n return rows.filter((row) =>\n Object.values(row).some((v) => v.toLowerCase().includes(q))\n );\n }, [rows, search]);\n\n /* ── Pagination ── */\n const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize));\n const currentPage = Math.min(page, totalPages);\n const startIdx = (currentPage - 1) * pageSize;\n const endIdx = Math.min(startIdx + pageSize, filtered.length);\n const visible = filtered.slice(startIdx, endIdx);\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value);\n setPage(1);\n };\n\n const handleClear = () => {\n setSearch(\"\");\n setPage(1);\n };\n\n return (\n <section className={[\"tbl-section\", className].filter(Boolean).join(\" \")} {...props}>\n {sectionTitle && (\n <div className=\"tbl-section__header\">\n <h2 className=\"tbl-section__title\">{sectionTitle}</h2>\n </div>\n )}\n <div className=\"tbl-section__content\">\n <div className=\"tbl\">\n {/* ── Search + summary bar ── */}\n <div className=\"tbl__topbar\">\n <div className=\"tbl__search-wrap\">\n <SearchField\n placeholder={searchPlaceholder}\n value={search}\n onChange={handleSearch}\n onClear={handleClear}\n variant=\"fill\"\n aria-label={searchPlaceholder}\n />\n </div>\n <div className=\"tbl__summary\">\n {filtered.length > 0\n ? <>Showing {startIdx + 1}- {endIdx} of {filtered.length}</>\n : \"No results\"\n }\n </div>\n </div>\n\n {/* ── Scrollable table area ── */}\n <div className=\"tbl__scroll-wrapper\">\n <table className=\"tbl__table\">\n <thead>\n <tr className=\"tbl__tr\">\n {columns.map((col, colIdx) => {\n const isFirst = colIdx === 0;\n const isLast = colIdx === columns.length - 1;\n const isMain = col.width === \"main\" || col.key === mainKey;\n return (\n <th\n key={col.key}\n className={[\n \"tbl__th\",\n isMain ? \"tbl__th--main\" : \"\",\n col.width === \"big\" ? \"tbl__th--big\" : \"\",\n ].filter(Boolean).join(\" \")}\n >\n <div \n className=\"tbl__th-inner\"\n onMouseEnter={(e) => {\n if (!col.tooltip) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const targetX = rect.left + rect.width / 2;\n const targetY = rect.top;\n \n // Tooltip width is 13rem (208px). Half is 104px.\n const tooltipHalfWidth = 104;\n const margin = 16;\n \n // Clamp the tooltip box so it doesn't overflow screen edges\n const clampedX = Math.max(\n margin + tooltipHalfWidth,\n Math.min(window.innerWidth - margin - tooltipHalfWidth, targetX)\n );\n \n // Offset the arrow so it still points to the exact center of the header\n const arrowOffset = targetX - clampedX;\n\n setTooltip({\n visible: true,\n heading: col.tooltip.heading,\n description: col.tooltip.description,\n x: clampedX,\n y: targetY,\n arrowOffset\n });\n }}\n onMouseLeave={() => {\n if (col.tooltip) {\n setTooltip(prev => ({ ...prev, visible: false }));\n }\n }}\n >\n <span className={[\"tbl__col-label\", col.tooltip ? \"tbl__col-label--dashed\" : \"\"].filter(Boolean).join(\" \")}>\n {Array.isArray(col.header)\n ? col.header.map((line, li) => (\n <span key={li}>\n {line}\n {li < (col.header as string[]).length - 1 && <br />}\n </span>\n ))\n : col.header\n }\n </span>\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody className=\"tbl__tbody\">\n {visible.length > 0 ? (\n visible.map((row, rowIdx) => (\n <tr key={rowIdx} className=\"tbl__tr\">\n {columns.map((col) => {\n const isMain = col.width === \"main\" || col.key === mainKey;\n const iconUrl = row[`${col.key}_iconUrl`];\n return (\n <td\n key={col.key}\n className={[\n \"tbl__td\",\n isMain ? \"tbl__td--main\" : \"\",\n col.width === \"big\" ? \"tbl__td--big\" : \"\",\n ].filter(Boolean).join(\" \")}\n >\n {isMain ? (\n <div className=\"tbl__cell-inner\">\n {iconUrl && (\n <img\n src={iconUrl}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"tbl__cell-icon\"\n loading=\"lazy\"\n width=\"24\"\n height=\"24\"\n />\n )}\n <span className=\"tbl__cell-text tbl__cell-text--bold\">{row[col.key] ?? \"\"}</span>\n </div>\n ) : (\n <span className=\"tbl__cell-text\">{row[col.key] ?? \"\"}</span>\n )}\n </td>\n );\n })}\n </tr>\n ))\n ) : (\n <tr className=\"tbl__tr\">\n <td colSpan={columns.length} className=\"tbl__empty-cell\">\n No results found for \"{search}\"\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n {/* ── Footer: Pagination ── */}\n {totalPages > 1 && (\n <div className=\"tbl__footer\">\n <div className=\"tbl__pagination-wrap\">\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setPage}\n />\n </div>\n </div>\n )}\n </div>\n \n {/* ── Message Box (Out of table, bottom center) ── */}\n {infoText && (\n <div className=\"tbl-section__info-box\">\n <InfoIcon className=\"tbl-section__info-icon\" />\n <p className=\"tbl-section__info-text\">{infoText}</p>\n </div>\n )}\n </div>\n\n {/* ── Global Tooltip Portal ── */}\n <div \n className={[\"tbl__global-hint\", tooltip.visible ? \"tbl__global-hint--visible\" : \"\"].filter(Boolean).join(\" \")}\n style={{ left: tooltip.x, top: tooltip.y - 8 }}\n >\n <div className=\"tbl__global-hint-desc\">{tooltip.description}</div>\n <div \n className=\"tbl__global-hint-arrow\" \n style={{ transform: `translateX(calc(-50% + ${tooltip.arrowOffset}px))` }}\n />\n </div>\n </section>\n );\n};\n\nexport default Table;\n","import { useState } from \"react\";\nimport { Link } from \"../../primitives/Link\";\nimport { Button } from \"../../primitives/Button\";\nimport type { LeaderItem, LeadersProps } from \"./Leaders.types\";\nimport styles from \"./Leaders.module.css\";\n\nconst LinkedInIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M14.816 0H1.18C0.528 0 0 0.516 0 1.153V14.846C0 15.484 0.528 16 1.18 16H14.816C15.468 16 16 15.484 16 14.846V1.153C16 0.516 15.468 0 14.816 0ZM4.744 13.642H2.368V5.996H4.744V13.642ZM3.556 4.952C2.796 4.952 2.18 4.336 2.18 3.576C2.18 2.816 2.796 2.2 3.556 2.2C4.316 2.2 4.932 2.816 4.932 3.576C4.932 4.336 4.316 4.952 3.556 4.952ZM13.642 13.642H11.266V9.924C11.266 9.038 11.25 7.896 10.032 7.896C8.814 7.896 8.626 8.846 8.626 9.86V13.642H6.25V5.996H8.53V7.04H8.562C8.88 6.44 9.534 5.806 10.686 5.806C12.958 5.806 13.642 7.3 13.642 9.386V13.642Z\" fill=\"currentColor\" />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst ChevronUpIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 10L8 6L4 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n/* ── Card content — shared between both grid sections ─────── */\nconst CardContent = ({ item }: { item: LeaderItem }) => (\n <>\n <div className={styles.imageWrapper}>\n <img\n src={item.imageUrl}\n alt={item.name}\n className={styles.image}\n loading=\"lazy\"\n />\n </div>\n <div className={styles.content}>\n <h3 className={styles.name}>{item.name}</h3>\n <p className={styles.role}>{item.role}</p>\n </div>\n {item.linkedinUrl && (\n <Link\n href={item.linkedinUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n icon={<LinkedInIcon />}\n label=\"LinkedIn\"\n colorScheme=\"black\"\n showChevron={false}\n className={styles.link}\n />\n )}\n </>\n);\n\nexport const Leaders = ({\n title = \"Our leaders\",\n items,\n initialVisibleCount = 4,\n expandText = \"View all\",\n collapseText = \"View less\",\n className,\n ...props\n}: LeadersProps) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const hasMore = items.length > initialVisibleCount;\n const visibleItems = items.slice(0, initialVisibleCount);\n const extraItems = items.slice(initialVisibleCount);\n\n return (\n <section className={[styles.section, className].filter(Boolean).join(\" \")} {...props}>\n <div className={styles.container}>\n {title && (\n <div className={styles.header}>\n <h2 className={styles.title}>{title}</h2>\n </div>\n )}\n\n <div className={styles.gridWrapper}>\n {/* ── Always-visible first N cards ── */}\n <div className={styles.grid}>\n {visibleItems.map((item, i) => (\n <div key={i} className={styles.card}>\n <CardContent item={item} />\n </div>\n ))}\n </div>\n\n {/* ── Animated extra cards ── */}\n {hasMore && (\n <div\n className={[\n styles.extraCards,\n isExpanded ? styles.extraCardsOpen : \"\",\n ].join(\" \")}\n aria-hidden={!isExpanded}\n >\n <div className={styles.extraGrid}>\n {extraItems.map((item, i) => (\n <div\n key={i}\n className={[\n styles.card,\n styles.extraCard,\n isExpanded ? styles.extraCardVisible : \"\",\n ].join(\" \")}\n style={{\n transitionDelay: isExpanded\n ? `${i * 70 + 120}ms`\n : \"0ms\",\n }}\n >\n <CardContent item={item} />\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {hasMore && (\n <div className={styles.actions}>\n <Button\n variant=\"secondary\"\n colorScheme=\"black\"\n onClick={() => setIsExpanded(!isExpanded)}\n iconPosition=\"icon-right\"\n icon={isExpanded ? <ChevronUpIcon /> : <ChevronDownIcon />}\n >\n {isExpanded ? collapseText : expandText}\n </Button>\n </div>\n )}\n </div>\n </section>\n );\n};\n\nexport default Leaders;\n","/* ── Section shell ─────────────────────────────────────────── */\n\n.section {\n width: 100%;\n background-color: var(--color-slate-50);\n}\n\n/* ── Inner container ───────────────────────────────────────── */\n\n.container {\n display: flex;\n flex-direction: column;\n max-width: var(--content-width-1280);\n margin: 0 auto;\n padding: var(--spacing-56) var(--spacing-16);\n box-sizing: border-box;\n width: 100%;\n align-items: center;\n gap: var(--spacing-48);\n}\n\n@media (min-width: 992px) {\n .container {\n padding: var(--spacing-112) var(--spacing-24);\n gap: var(--spacing-80);\n }\n}\n\n/* ── Header ────────────────────────────────────────────────── */\n\n.header {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n width: 100%;\n max-width: var(--content-width-846);\n}\n\n.title {\n font-family: var(--typography-h2-font-family);\n font-size: var(--typography-h2-font-size);\n font-weight: var(--typography-h2-font-weight);\n line-height: var(--typography-h2-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n/* ── Grid wrapper ──────────────────────────────────────────── */\n\n.gridWrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n/* ── Grid ──────────────────────────────────────────────────── */\n\n.grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: var(--spacing-24);\n width: 100%;\n}\n\n@media (min-width: 768px) {\n .grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (min-width: 992px) {\n .grid {\n grid-template-columns: repeat(4, 1fr);\n gap: var(--spacing-32);\n }\n}\n\n/* ── Extra cards — animated expand/collapse container ──────── */\n\n/*\n * Uses grid-template-rows: 0fr → 1fr for a height animation that\n * respects the actual content size (unlike max-height hacks).\n * The inner .extraGrid needs min-height: 0 for 0fr to fully collapse.\n */\n.extraCards {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 0.8s cubic-bezier(0.16, 1, 0.3, 1);\n width: 100%;\n}\n\n.extraCardsOpen {\n grid-template-rows: 1fr;\n}\n\n.extraGrid {\n min-height: 0;\n overflow: hidden;\n display: grid;\n grid-template-columns: 1fr;\n gap: var(--spacing-24);\n padding-top: var(--spacing-24);\n}\n\n@media (min-width: 768px) {\n .extraGrid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (min-width: 992px) {\n .extraGrid {\n grid-template-columns: repeat(4, 1fr);\n gap: var(--spacing-32);\n padding-top: var(--spacing-32);\n }\n}\n\n/* ── Extra card — individual fade + rise animation ─────────── */\n\n.extraCard {\n opacity: 0;\n transform: translateY(16px);\n transition:\n opacity 0.6s ease,\n transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n.extraCardVisible {\n opacity: 1;\n transform: translateY(0);\n}\n\n/* ── Card ──────────────────────────────────────────────────── */\n\n.card {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--spacing-24);\n background-color: var(--color-slate-50);\n border-radius: var(--radius-2xl);\n width: 100%;\n}\n\n/* ── Image ─────────────────────────────────────────────────── */\n\n.imageWrapper {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: var(--radius-2xl);\n overflow: hidden;\n position: relative;\n background-color: var(--color-slate-100);\n}\n\n.image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n display: block;\n}\n\n/* ── Content ───────────────────────────────────────────────── */\n\n.content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--spacing-8);\n width: 100%;\n}\n\n.name {\n font-family: var(--typography-h5-font-family);\n font-size: var(--typography-h5-font-size);\n font-weight: var(--typography-h5-font-weight);\n line-height: var(--typography-h5-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n.role {\n font-family: var(--typography-body-md-font-family);\n font-size: var(--typography-body-md-font-size);\n font-weight: var(--typography-body-md-font-weight);\n line-height: var(--typography-body-md-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n/* ── Link ──────────────────────────────────────────────────── */\n\n.link {\n margin-top: calc(var(--spacing-8) * -1); /* Pull up slightly to reduce gap */\n}\n\n.link :global(.icon) {\n color: #0072B1 !important; /* Official LinkedIn Blue */\n}\n\n.link:hover :global(.icon) {\n color: #005582 !important; /* Darker LinkedIn Blue for hover */\n}\n\n/* ── Actions ───────────────────────────────────────────────── */\n\n.actions {\n display: flex;\n justify-content: center;\n width: 100%;\n padding-top: var(--spacing-16);\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","ChevronIcon","jsx","jsxs","forwardRef","useState","jsx","jsxs","SuccessIcon","FailIcon","forwardRef","useState","useState","jsx","jsxs","jsx","jsxs","useState","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","CheckIcon","useState","Fragment","jsx","jsxs","ChevronDownIcon","useState","useEffect","useRef","jsx","jsxs","useRef","useEffect","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","useRef","useState","useEffect","useRef","useState","jsx","jsx","jsxs","ChevronRight","useState","useRef","useEffect","useRef","jsx","jsxs","useRef","useEffect","useRef","jsx","jsxs","useRef","useRef","useState","useEffect","useCallback","motion","jsx","jsxs","ChevronDownIcon","XMarkIcon","motion","useState","useRef","useEffect","useCallback","useEffect","useLayoutEffect","useRef","useState","motion","useScroll","useSpring","useTransform","useMotionTemplate","body","dark","white","Fragment","jsx","jsxs","SPRING","seg","useRef","useState","useEffect","motion","useLayoutEffect","useScroll","useSpring","useTransform","useMotionTemplate","useRef","motion","useScroll","jsx","jsxs","PLACEHOLDER_IMAGE","useScroll","useRef","motion","jsx","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsxs","useRef","useEffect","useEffect","useRef","jsx","jsxs","PLACEHOLDER_IMAGE","useRef","useEffect","n","useState","Fragment","jsx","jsxs","useState","useState","Fragment","jsx","jsxs","ChevronDownIcon","useState"]}
1
+ {"version":3,"sources":["../primitives/Button/Button.tsx","../primitives/Link/Link.tsx","../primitives/Chip/Chip.tsx","../primitives/Tag/Tag.tsx","../primitives/Accordion/Accordion.tsx","../primitives/Accordion/Accordion.module.css","../primitives/TextField/TextField.tsx","../primitives/SearchField/SearchField.tsx","../primitives/Breadcrumb/Breadcrumb.tsx","../primitives/BottomSheet/BottomSheet.tsx","../primitives/ChipDropdown/ChipDropdown.tsx","../components/Card/CardPrimaryVariant.tsx","../components/Card/CardSecondaryVariant.tsx","../components/Card/CardThumbnailVariant.tsx","../components/Card/Card.tsx","../primitives/Pagination/Pagination.tsx","../primitives/Tabs/Tabs.tsx","../templates/FaqAccordion/FaqAccordion.module.css","../templates/FaqAccordion/FaqAccordion.tsx","../templates/FeatureCards/FeatureCards.tsx","../templates/FeatureCardsIcon/FeatureCardsIcon.tsx","../templates/FeatureBullets/FeatureBullets.module.css","../templates/FeatureBullets/FeatureBullets.tsx","../components/Footer/Footer.tsx","../templates/Hero/Hero.tsx","../templates/Header/Header.tsx","../templates/Stats/Stats.tsx","../templates/FeatureScroll/FeatureScroll.tsx","../components/DotLottieInView/DotLottieInView.tsx","../templates/StickyStackedCards/StickyStackedCards.tsx","../templates/CTABanner/CTABanner.tsx","../components/Navbar/Navbar.tsx","../templates/DayNightTransition/DayNightTransition.tsx","../templates/DayNightTransition/webflowDayNightV2Ix.ts","../templates/DayNightTransition/dayNightTransitionPresets.ts","../templates/LogoMarquee/LogoMarquee.tsx","../primitives/DownloadBadge/DownloadBadge.tsx","../templates/Steps/Steps.tsx","../templates/DownloadBanner/DownloadBanner.tsx","../templates/TextScroll/TextScroll.tsx","../templates/StickyMarketCards/StickyMarketCards.tsx","../templates/Table/Table.tsx","../templates/Leaders/Leaders.tsx","../templates/Leaders/Leaders.module.css"],"sourcesContent":["import type { ButtonProps } from \"./Button.types\";\nimport \"./Button.css\";\n\nexport const Button = ({\n colorScheme = \"coral\",\n variant = \"primary\",\n iconPosition = \"none\",\n icon,\n label,\n fullWidth = false,\n showFocusRing = false,\n children,\n disabled,\n className,\n ...props\n}: ButtonProps) => {\n const isIconOnly = iconPosition === \"icon-only\";\n\n const classNames = [\n \"button\",\n `${colorScheme}_${variant}`,\n isIconOnly ? \"iconOnly\" : \"\",\n fullWidth ? \"fullWidth\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const iconNode = icon ? (\n <span className=\"icon\">{icon}</span>\n ) : null;\n\n return (\n <button\n className={classNames}\n disabled={disabled}\n aria-label={isIconOnly && label ? label : undefined}\n {...props}\n >\n {iconPosition === \"icon-left\" && iconNode}\n\n {!isIconOnly && (\n <span className=\"label\">{label ?? children}</span>\n )}\n\n {iconPosition === \"icon-only\" && iconNode}\n\n {iconPosition === \"icon-right\" && iconNode}\n\n {showFocusRing && (\n <span className=\"focusRing\" aria-hidden=\"true\" />\n )}\n </button>\n );\n};\n\nexport default Button;\n","import type { LinkProps } from \"./Link.types\";\nimport \"./Link.css\";\n\nconst ChevronIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M3 8h10M9 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const Link = ({\n colorScheme = \"coral\",\n label,\n icon,\n showChevron = true,\n disabled = false,\n children,\n className,\n onClick,\n ...props\n}: LinkProps) => {\n const hasIcon = !!icon;\n\n const classNames = [\n \"link\",\n colorScheme,\n hasIcon ? \"withIcon\" : \"withChevron\",\n disabled ? \"disabled\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n return (\n <a\n className={classNames}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : undefined}\n onClick={handleClick}\n {...props}\n >\n {hasIcon && <span className=\"icon\">{icon}</span>}\n\n <span className=\"label\">{label ?? children}</span>\n\n {!hasIcon && showChevron && (\n <span className=\"chevron\" aria-hidden=\"true\">\n <ChevronIcon />\n </span>\n )}\n </a>\n );\n};\n\nexport default Link;\n","import type { ChipProps } from \"./Chip.types\";\nimport \"./Chip.css\";\n\nexport const Chip = ({\n size = \"md\",\n label,\n icon,\n tag,\n selected = false,\n showFocusRing = false,\n disabled = false,\n children,\n className,\n ...props\n}: ChipProps) => {\n const classNames = [\n \"chip\",\n size,\n selected ? \"selected\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n className={classNames}\n disabled={disabled}\n aria-pressed={selected}\n {...props}\n >\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{label ?? children}</span>\n {tag && <span className=\"tag\">{tag}</span>}\n {showFocusRing && (\n <span className=\"focusRing\" aria-hidden=\"true\" />\n )}\n </button>\n );\n};\n\nexport default Chip;\n","import type { TagProps } from \"./Tag.types\";\nimport \"./Tag.css\";\n\nexport const Tag = ({\n size = \"sm\",\n variant = \"fill\",\n fontWeight = \"regular\",\n label,\n icon,\n children,\n className,\n ...props\n}: TagProps) => {\n const classNames = [\n \"tag\",\n size,\n variant,\n fontWeight,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span className={classNames} {...props}>\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{label ?? children}</span>\n </span>\n );\n};\n\nexport default Tag;\n","import { useState } from \"react\";\nimport type { AccordionProps } from \"./Accordion.types\";\nimport styles from \"./Accordion.module.css\";\n\nconst ChevronIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const Accordion = ({\n title,\n children,\n open,\n defaultOpen = false,\n onToggle,\n showTopDivider = true,\n showBottomDivider = true,\n showFocusRing = false,\n className,\n}: AccordionProps) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : internalOpen;\n\n const handleToggle = () => {\n const next = !isOpen;\n if (!isControlled) setInternalOpen(next);\n onToggle?.(next);\n };\n\n const classNames = [styles.accordion, className ?? \"\"].filter(Boolean).join(\" \");\n\n return (\n <div\n className={classNames}\n style={{\n borderTop: showTopDivider ? `1px solid var(--accordion-divider-color)` : undefined,\n borderBottom: showBottomDivider ? `1px solid var(--accordion-divider-color)` : undefined,\n }}\n >\n <button\n className={styles.header}\n onClick={handleToggle}\n aria-expanded={isOpen}\n >\n <span className={styles.titleWrapper}>\n <span className={styles.title}>{title}</span>\n </span>\n <span className={[styles.chevron, isOpen ? styles.chevronRotated : \"\"].filter(Boolean).join(\" \")}>\n <ChevronIcon />\n </span>\n {showFocusRing && (\n <span className={styles.focusRing} aria-hidden=\"true\" />\n )}\n </button>\n\n <div className={[styles.bodyWrapper, isOpen ? styles.bodyWrapperOpen : \"\"].filter(Boolean).join(\" \")}>\n <div className={styles.bodyInner}>\n <div className={styles.body}>{children}</div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default Accordion;\n","/* ── Container ────────────────────────────────────────────── */\n\n.accordion {\n position: relative;\n width: 100%;\n max-width: 846px;\n box-sizing: border-box;\n}\n\n/* ── Header ───────────────────────────────────────────────── */\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--spacing-24);\n padding: var(--spacing-24) 0;\n width: 100%;\n background: none;\n border: none;\n cursor: pointer;\n outline: none;\n position: relative;\n text-align: left;\n box-sizing: border-box;\n}\n\n.header:focus-visible::after {\n content: \"\";\n position: absolute;\n inset: -2px;\n border: 2px solid var(--accordion-focus-ring-color);\n pointer-events: none;\n}\n\n/* ── Focus ring overlay ───────────────────────────────────── */\n\n.focusRing {\n position: absolute;\n inset: -2px;\n border: 2px solid var(--accordion-focus-ring-color);\n pointer-events: none;\n}\n\n/* ── Title slot ───────────────────────────────────────────── */\n\n.titleWrapper {\n flex: 1 0 0;\n min-width: 1px;\n}\n\n.title {\n font-family: var(--font-family-base);\n font-size: var(--font-size-lg); /* 18px */\n font-weight: var(--font-weight-semi-bold);\n line-height: var(--line-height-normal);\n color: var(--accordion-title-color);\n}\n\n/* ── Chevron slot ─────────────────────────────────────────── */\n\n.chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--spacing-24);\n height: var(--spacing-24);\n flex-shrink: 0;\n color: var(--accordion-chevron-color);\n transition: transform 200ms ease;\n}\n\n.chevronRotated {\n transform: rotate(180deg);\n}\n\n/* ── Body — CSS Grid animated collapse ────────────────────── */\n\n.bodyWrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 200ms ease;\n}\n\n.bodyWrapperOpen {\n grid-template-rows: 1fr;\n}\n\n.bodyInner {\n overflow: hidden;\n}\n\n.body {\n padding-bottom: var(--spacing-24);\n font-family: var(--font-family-base);\n font-size: var(--font-size-md); /* 16px */\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-normal);\n color: var(--accordion-body-color);\n}\n","import { forwardRef } from \"react\";\nimport type { TextFieldProps } from \"./TextField.types\";\nimport \"./TextField.css\";\n\nconst SuccessIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5.5 8l2 2 3-3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst FailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M8 2.5L14 13.5H2L8 2.5Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n (\n {\n variant = \"outline\",\n status = \"neutral\",\n disabled,\n className,\n ...inputProps\n },\n ref\n ) => {\n const wrapperClass = [\n \"tf-wrapper\",\n variant,\n status,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={wrapperClass} data-disabled={disabled || undefined}>\n <input\n ref={ref}\n className=\"tf-input\"\n disabled={disabled}\n {...inputProps}\n />\n\n {status === \"success\" && (\n <span className=\"iconSlot iconSuccess\">\n <SuccessIcon />\n </span>\n )}\n {status === \"fail\" && (\n <span className=\"iconSlot iconFail\">\n <FailIcon />\n </span>\n )}\n </div>\n );\n }\n);\n\nTextField.displayName = \"TextField\";\n\nexport default TextField;\n","import { forwardRef, useRef, useState, useCallback, type ChangeEvent } from \"react\";\nimport type { SearchFieldProps } from \"./SearchField.types\";\nimport \"./SearchField.css\";\n\n/* ── Icons ────────────────────────────────────────────────── */\n\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"6.5\" cy=\"6.5\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.25\" />\n <path d=\"M9.5 9.5L13 13\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n </svg>\n);\n\nconst ClearIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.25\" />\n <path d=\"M6 6l4 4M10 6l-4 4\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n </svg>\n);\n\nconst SuccessIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5.5 8l2 2 3-3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst FailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M8 2.5L14 13.5H2L8 2.5Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n);\n\n/* ── Component ────────────────────────────────────────────── */\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n variant = \"outline\",\n status = \"neutral\",\n value,\n defaultValue,\n onChange,\n onClear,\n disabled,\n className,\n ...inputProps\n },\n ref\n ) => {\n const innerRef = useRef<HTMLInputElement>(null);\n\n // Merge forwarded ref with inner ref so we can clear the native input\n const setRef = useCallback(\n (node: HTMLInputElement | null) => {\n (innerRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }\n },\n [ref]\n );\n\n // Track whether the input has text for uncontrolled usage\n const isControlled = value !== undefined;\n const [internalHasValue, setInternalHasValue] = useState(\n Boolean(defaultValue)\n );\n const hasValue = isControlled ? Boolean(value) : internalHasValue;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalHasValue(Boolean(e.target.value));\n }\n onChange?.(e);\n };\n\n const handleClear = () => {\n if (!isControlled && innerRef.current) {\n innerRef.current.value = \"\";\n setInternalHasValue(false);\n }\n onClear?.();\n innerRef.current?.focus();\n };\n\n // ── Derived display state ──────────────────────────────\n // Fail icon always visible when status=fail (even with no input)\n const showFailIcon = status === \"fail\" && !disabled;\n // Success icon only visible when status=success + has input\n const showSuccessIcon = status === \"success\" && hasValue && !disabled;\n // Clear button visible when has input (all statuses)\n const showClearButton = hasValue && !disabled;\n\n const wrapperClass = [\n \"sf-wrapper\",\n variant,\n status,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={wrapperClass}\n data-disabled={disabled || undefined}\n >\n {/* Always-present search icon */}\n <span className=\"iconSlot\">\n <SearchIcon />\n </span>\n\n <input\n ref={setRef}\n className=\"sf-input\"\n disabled={disabled}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n {...inputProps}\n />\n\n {/* Status icons — right of input, left of clear */}\n {showSuccessIcon && (\n <span className=\"iconSlot iconSuccess\">\n <SuccessIcon />\n </span>\n )}\n {showFailIcon && (\n <span className=\"iconSlot iconFail\">\n <FailIcon />\n </span>\n )}\n\n {/* Clear button — always rightmost */}\n {showClearButton && (\n <button\n type=\"button\"\n className=\"clearButton\"\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n );\n }\n);\n\nSearchField.displayName = \"SearchField\";\n\nexport default SearchField;\n","import { useState } from \"react\";\nimport type { BreadcrumbProps, BreadcrumbItem } from \"./Breadcrumb.types\";\nimport { BottomSheet } from \"../BottomSheet\";\nimport \"./Breadcrumb.css\";\n\nconst ChevronRightIcon = () => (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 3.5L10.5 8L6 12.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nfunction BreadcrumbLink({ item }: { item: BreadcrumbItem }) {\n return (\n <>\n <a href={item.href} onClick={item.onClick} className=\"bc-link\">\n {item.label}\n </a>\n <span className=\"bc-separator\" aria-hidden=\"true\">\n <ChevronRightIcon />\n </span>\n </>\n );\n}\n\nexport function Breadcrumb({\n items,\n size = \"md\",\n collapsible = true,\n className,\n ...navProps\n}: BreadcrumbProps) {\n const [sheetOpen, setSheetOpen] = useState(false);\n\n // Collapse only when there are enough items for the pattern:\n // first › … › parent › current (needs ≥ 4 items)\n const truncatable = collapsible && items.length > 3;\n\n const listClass = [\"bc-list\", size, truncatable ? \"collapsible\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n\n if (!truncatable) {\n return (\n <nav aria-label=\"Breadcrumb\" className={className} {...navProps}>\n <ol className={listClass}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={index} className=\"bc-item\">\n {isLast ? (\n <span className=\"bc-current\" aria-current=\"page\">\n {item.label}\n </span>\n ) : (\n <BreadcrumbLink item={item} />\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n }\n\n const firstItem = items[0];\n const middleItems = items.slice(1, items.length - 2);\n const parentItem = items[items.length - 2];\n const currentItem = items[items.length - 1];\n\n return (\n <>\n <nav aria-label=\"Breadcrumb\" className={className} {...navProps}>\n <ol className={listClass}>\n {/* Always-visible: first item */}\n <li className=\"bc-item\">\n <BreadcrumbLink item={firstItem} />\n </li>\n\n {/* Mobile only — ellipsis button, opens BottomSheet */}\n <li className=\"bc-ellipsisItem\">\n <button\n className=\"bc-ellipsisButton\"\n onClick={() => setSheetOpen(true)}\n aria-label=\"Show all breadcrumb items\"\n aria-haspopup=\"dialog\"\n >\n …\n </button>\n <span className=\"bc-separator\" aria-hidden=\"true\">\n <ChevronRightIcon />\n </span>\n </li>\n\n {/* Middle items — hidden on mobile (shown in BottomSheet instead) */}\n {middleItems.map((item, index) => (\n <li key={`m-${index}`} className=\"bc-middleItem\">\n <BreadcrumbLink item={item} />\n </li>\n ))}\n\n {/* Always-visible: parent (second-to-last) */}\n <li className=\"bc-item\">\n <BreadcrumbLink item={parentItem} />\n </li>\n\n {/* Always-visible: current page (last) */}\n <li className=\"bc-item\">\n <span className=\"bc-current\" aria-current=\"page\">\n {currentItem.label}\n </span>\n </li>\n </ol>\n </nav>\n\n {/* Mobile BottomSheet — shows hidden middle breadcrumb items */}\n <BottomSheet\n open={sheetOpen}\n onClose={() => setSheetOpen(false)}\n showHandleBar\n showHeader={false}\n >\n <ul className=\"bc-sheet-list\" role=\"list\">\n {middleItems.map((item, index) => (\n <li key={`sheet-${index}`} className=\"bc-sheet-item\">\n <a\n href={item.href}\n className=\"bc-sheet-link\"\n onClick={(e) => {\n item.onClick?.(e as React.MouseEvent<HTMLAnchorElement>);\n setSheetOpen(false);\n }}\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n </BottomSheet>\n </>\n );\n}\n\nexport default Breadcrumb;\n","import { useEffect, useId } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { BottomSheetProps } from \"./BottomSheet.types\";\nimport \"./BottomSheet.css\";\n\nconst XMarkIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 3l10 10M13 3L3 13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nexport const BottomSheet = ({\n open,\n onClose,\n title,\n showHeader = true,\n showHandleBar = true,\n primaryAction,\n secondaryAction,\n children,\n}: BottomSheetProps) => {\n const titleId = useId();\n\n useEffect(() => {\n if (!open) return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"bs-overlay\"\n onClick={onClose}\n aria-hidden=\"true\"\n >\n <div\n className=\"bs-sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n onClick={(e) => e.stopPropagation()}\n >\n {showHandleBar && (\n <div className=\"bs-handle-container\">\n <div className=\"bs-handle-bar\" />\n </div>\n )}\n\n {showHeader && (\n <div className=\"bs-header\">\n <div className=\"bs-header-spacer\" />\n {title && (\n <p id={titleId} className=\"bs-title\">\n {title}\n </p>\n )}\n <div className=\"bs-close-container\">\n <button\n type=\"button\"\n className=\"bs-close-btn\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <XMarkIcon />\n </button>\n </div>\n </div>\n )}\n\n {children && <div className=\"bs-body\">{children}</div>}\n\n {(primaryAction || secondaryAction) && (\n <div className=\"bs-actions\">\n {primaryAction && (\n <button\n type=\"button\"\n className=\"bs-action-primary\"\n onClick={primaryAction.onClick}\n >\n {primaryAction.label}\n </button>\n )}\n {secondaryAction && (\n <button\n type=\"button\"\n className=\"bs-action-secondary\"\n onClick={secondaryAction.onClick}\n >\n {secondaryAction.label}\n </button>\n )}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport default BottomSheet;\n","import { useEffect, useRef, useState } from \"react\";\nimport type { ChipDropdownProps } from \"./ChipDropdown.types\";\nimport { BottomSheet } from \"../BottomSheet\";\nimport \"./ChipDropdown.css\";\n\nconst ChevronDownIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 6l5 5 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2 6l3 3 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport const ChipDropdown = ({\n size = \"md\",\n label,\n tag,\n icon,\n options,\n value,\n onChange,\n disabled = false,\n className,\n ...props\n}: ChipDropdownProps) => {\n const [open, setOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(\n () => typeof window !== \"undefined\" && window.matchMedia(\"(max-width: 767px)\").matches\n );\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const selectedOption = options.find((o) => o.value === value) ?? null;\n const displayLabel = selectedOption ? selectedOption.label : label;\n const isSelected = selectedOption !== null;\n\n // Track mobile breakpoint reactively\n useEffect(() => {\n const mq = window.matchMedia(\"(max-width: 767px)\");\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, []);\n\n // Close desktop dropdown on outside click\n useEffect(() => {\n if (!open || isMobile) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [open, isMobile]);\n\n const triggerClassNames = [\n \"cd-trigger\",\n size,\n isSelected ? \"selected\" : \"\",\n open ? \"expand\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n\n const handleSelect = (optionValue: string) => {\n onChange?.(optionValue);\n setOpen(false);\n };\n\n const optionList = options.map((option) => {\n const isActive = option.value === value;\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isActive}\n className={[\"cd-item\", isActive ? \"itemSelected\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => handleSelect(option.value)}\n >\n <span className=\"cd-itemLabel\">{option.label}</span>\n {isActive && (\n <span className=\"cd-itemCheck\">\n <CheckIcon />\n </span>\n )}\n </li>\n );\n });\n\n return (\n <div ref={wrapperRef} className=\"cd-wrapper\">\n <button\n type=\"button\"\n className={triggerClassNames}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((prev) => !prev)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {icon && <span className=\"cd-icon\">{icon}</span>}\n <span className=\"cd-label\">{displayLabel}</span>\n {tag && <span className=\"cd-tag\">{tag}</span>}\n <span\n className={[\"cd-chevron\", open ? \"chevronOpen\" : \"\"].filter(Boolean).join(\" \")}\n aria-hidden=\"true\"\n >\n <ChevronDownIcon />\n </span>\n </button>\n\n {/* Desktop: inline dropdown list */}\n {!isMobile && open && (\n <ul role=\"listbox\" aria-label={label} className=\"cd-list\">\n {optionList}\n </ul>\n )}\n\n {/* Mobile: bottom sheet */}\n {isMobile && (\n <BottomSheet\n open={open}\n onClose={() => setOpen(false)}\n title={label}\n showHandleBar\n showHeader\n >\n <ul role=\"listbox\" aria-label={label} className=\"cd-list cd-list--sheet\">\n {optionList}\n </ul>\n </BottomSheet>\n )}\n </div>\n );\n};\n\nexport default ChipDropdown;\n","import type { CardProps } from \"./Card.types\";\nimport { Link } from \"../../primitives/Link\";\nimport \"./CardPrimaryVariant.css\";\n\ntype PrimaryProps = Extract<CardProps, { variant: \"primary\" }>;\n\nexport const CardPrimaryVariant = ({\n colorScheme = \"light\",\n title,\n description,\n image,\n imageAlt = \"\",\n showLink = true,\n linkText = \"Learn more\",\n onLinkClick,\n className,\n variant: _variant,\n ...props\n}: PrimaryProps) => {\n const isInverse = colorScheme === \"dark\" || colorScheme === \"brand\" || colorScheme === \"image\";\n\n return (\n <div\n className={[\n \"card-primary\",\n `style--${colorScheme}`,\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n {...props}\n >\n {/* ── Full-bleed image overlay (image colorScheme only) ─── */}\n {colorScheme === \"image\" && image && (\n <div aria-hidden=\"true\" className=\"cp-imageOverlay\">\n <img alt=\"\" className=\"cp-overlayImg\" src={image} />\n <div className=\"cp-gradient\" />\n </div>\n )}\n\n {/* ── Content ──────────────────────────────────────── */}\n <div className=\"cp-content\">\n <p className={[\"cp-title\", isInverse ? \"textInverse\" : \"textDefault\"].join(\" \")}>\n {title}\n </p>\n <p className={[\"cp-description\", isInverse ? \"textInverse\" : \"textDefault\"].join(\" \")}>\n {description}\n </p>\n {showLink && (\n <Link\n colorScheme={isInverse ? \"white\" : \"coral\"}\n label={linkText}\n onClick={onLinkClick}\n />\n )}\n </div>\n\n {/* ── Image section (light / dark / brand colorSchemes) ── */}\n {colorScheme !== \"image\" && image && (\n <div className=\"cp-imageSection\">\n <img alt={imageAlt} className=\"cp-image\" src={image} />\n </div>\n )}\n </div>\n );\n};\n","import type { CardProps } from \"./Card.types\";\nimport { Link } from \"../../primitives/Link\";\nimport \"./CardSecondaryVariant.css\";\n\ntype SecondaryProps = Extract<CardProps, { variant: \"secondary\" }>;\n\nexport const CardSecondaryVariant = ({\n title,\n description,\n icon,\n showIcon = true,\n showLink = true,\n linkText = \"Learn more\",\n onLinkClick,\n className,\n variant: _variant,\n ...props\n}: SecondaryProps) => {\n return (\n <div\n className={[\"card-secondary\", className ?? \"\"].filter(Boolean).join(\" \")}\n {...props}\n >\n {showIcon && icon && <span className=\"cs-icon\">{icon}</span>}\n\n <p className=\"cs-title\">{title}</p>\n\n <p className=\"cs-description\">{description}</p>\n\n {showLink && (\n <Link\n colorScheme=\"coral\"\n label={linkText}\n onClick={onLinkClick}\n />\n )}\n </div>\n );\n};\n","import type { CardProps } from \"./Card.types\";\nimport { Tag } from \"../../primitives/Tag\";\nimport \"./CardThumbnailVariant.css\";\n\nconst LinkIcon = () => (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.25 2.625H3.5A1.75 1.75 0 0 0 1.75 4.375v5.25A1.75 1.75 0 0 0 3.5 11.375h5.25a1.75 1.75 0 0 0 1.75-1.75V7.875\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.25\"\n />\n <path\n d=\"M7.875 1.75h4.375v4.375M12.25 1.75 6.125 7.875\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.25\"\n />\n </svg>\n);\n\nconst PlayIcon = () => (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"80\"\n viewBox=\"0 0 80 80\"\n width=\"80\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" fill=\"rgba(255,255,255,0.88)\" r=\"40\" />\n <path d=\"M32 27l22 13-22 13V27z\" fill=\"rgba(24,28,37,0.72)\" />\n </svg>\n);\n\ntype ThumbnailProps = Extract<CardProps, { variant: \"thumbnail\" }>;\n\nexport const CardThumbnailVariant = ({\n type = \"video\",\n thumbnail,\n thumbnailAlt = \"\",\n title,\n summary,\n tags = [],\n hideTags = false,\n showCopyLink = true,\n onCopyLink,\n avatar,\n avatarAlt = \"\",\n className,\n variant: _variant,\n ...props\n}: ThumbnailProps) => {\n const isVideo = type === \"video\";\n\n return (\n <div\n className={[\"card-thumbnail\", className ?? \"\"].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* ── Thumbnail ──────────────────────────────────── */}\n <div className=\"ct-thumbnailWrapper\">\n <img alt={thumbnailAlt} className=\"ct-thumbnailImage\" src={thumbnail} />\n {isVideo && (\n <span aria-label=\"Play video\" className=\"ct-playButton\">\n <PlayIcon />\n </span>\n )}\n {!isVideo && avatar && (\n <img alt={avatarAlt} className=\"ct-avatar\" src={avatar} />\n )}\n </div>\n\n {/* ── Content ────────────────────────────────────── */}\n <div className=\"ct-content\">\n <div className=\"ct-metaRow\">\n {!hideTags && (\n <div className=\"ct-tagsList\">\n {tags.map((tag, i) => (\n <Tag key={i} icon={tag.icon} label={tag.label} size=\"md\" variant=\"fill\" />\n ))}\n </div>\n )}\n {showCopyLink && (\n <button\n aria-label=\"Copy link\"\n className=\"ct-copyLink\"\n onClick={onCopyLink}\n type=\"button\"\n >\n <LinkIcon />\n </button>\n )}\n </div>\n <p className=\"ct-title\">{title}</p>\n <p className=\"ct-summary\">{summary}</p>\n </div>\n </div>\n );\n};\n","import type { CardProps } from \"./Card.types\";\nimport { CardPrimaryVariant } from \"./CardPrimaryVariant\";\nimport { CardSecondaryVariant } from \"./CardSecondaryVariant\";\nimport { CardThumbnailVariant } from \"./CardThumbnailVariant\";\n\nexport const Card = (props: CardProps) => {\n if (props.variant === \"primary\") {\n return <CardPrimaryVariant {...props} />;\n }\n if (props.variant === \"secondary\") {\n return <CardSecondaryVariant {...props} />;\n }\n return <CardThumbnailVariant {...props} />;\n};\n\nexport default Card;\n","import type { PaginationProps } from \"./Pagination.types\";\nimport \"./Pagination.css\";\n\nconst ChevronLeft = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M10 12L6 8L10 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst ChevronRight = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M6 4L10 8L6 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\ntype PageItem = number | \"ellipsis-left\" | \"ellipsis-right\";\n\nfunction getPageItems(currentPage: number, totalPages: number): PageItem[] {\n if (totalPages <= 5) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n if (currentPage <= 3) {\n return [1, 2, 3, 4, 5, \"ellipsis-right\", totalPages];\n }\n if (currentPage >= totalPages - 2) {\n return [1, \"ellipsis-left\", totalPages - 4, totalPages - 3, totalPages - 2, totalPages - 1, totalPages];\n }\n return [1, \"ellipsis-left\", currentPage - 1, currentPage, currentPage + 1, \"ellipsis-right\", totalPages];\n}\n\nexport const Pagination = ({\n currentPage,\n totalPages,\n onPageChange,\n className,\n}: PaginationProps) => {\n const items = getPageItems(currentPage, totalPages);\n const isPrevDisabled = currentPage <= 1;\n const isNextDisabled = currentPage >= totalPages;\n\n return (\n <nav\n className={[\"pagination\", className ?? \"\"].filter(Boolean).join(\" \")}\n aria-label=\"Pagination navigation\"\n >\n <button\n className={[\"navButton\", isPrevDisabled ? \"navButtonDisabled\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => onPageChange(currentPage - 1)}\n disabled={isPrevDisabled}\n aria-label=\"Previous page\"\n >\n <span className=\"navIcon\"><ChevronLeft /></span>\n </button>\n\n {items.map((item, index) => {\n if (item === \"ellipsis-left\" || item === \"ellipsis-right\") {\n return (\n <span\n key={`${item}-${index}`}\n className=\"ellipsis\"\n aria-hidden=\"true\"\n >\n …\n </span>\n );\n }\n\n const isSelected = item === currentPage;\n return (\n <button\n key={item}\n className={[\"pageButton\", isSelected ? \"pageButtonSelected\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => { if (!isSelected) onPageChange(item); }}\n aria-current={isSelected ? \"page\" : undefined}\n aria-label={`Page ${item}`}\n >\n {item}\n </button>\n );\n })}\n\n <button\n className={[\"navButton\", isNextDisabled ? \"navButtonDisabled\" : \"\"].filter(Boolean).join(\" \")}\n onClick={() => onPageChange(currentPage + 1)}\n disabled={isNextDisabled}\n aria-label=\"Next page\"\n >\n <span className=\"navIcon\"><ChevronRight /></span>\n </button>\n </nav>\n );\n};\n\nexport default Pagination;\n","import type { TabsProps } from \"./Tabs.types\";\nimport { Chip } from \"../Chip\";\nimport \"./Tabs.css\";\n\nexport const Tabs = ({\n items,\n activeId,\n onChange,\n className,\n ...props\n}: TabsProps) => {\n return (\n <div\n className={[\"tabs-menu w-tab-menu\", className].filter(Boolean).join(\" \")}\n role=\"tablist\"\n {...props}\n >\n {items.map((item, i) => {\n const isActive = item.id === activeId;\n return (\n <Chip\n key={item.id}\n label={item.label}\n selected={isActive}\n onClick={() => onChange(item.id)}\n className={isActive ? \"tab-active\" : \"\"}\n data-w-tab={item.label}\n id={`w-tabs-0-data-w-tab-${i}`}\n aria-controls={`w-tabs-0-data-w-pane-${i}`}\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n role=\"tab\"\n />\n );\n })}\n </div>\n );\n};\n\nexport default Tabs;\n","/* ── Section shell ─────────────────────────────────────────── */\n\n.section {\n width: 100%;\n}\n\n.section--white {\n background-color: var(--color-slate-50);\n}\n\n.section--slate {\n background-color: var(--color-slate-75);\n}\n\n/* ── Inner container ───────────────────────────────────────── */\n\n.container {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-24);\n max-width: var(--content-width-1280);\n margin: 0 auto;\n padding: var(--spacing-56) var(--spacing-16);\n box-sizing: border-box;\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .container {\n gap: var(--spacing-48);\n padding: var(--spacing-112) var(--spacing-24);\n }\n}\n\n/* ── Section header ────────────────────────────────────────── */\n\n.header {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 1.25rem;\n /* 20px mobile */\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .header {\n align-items: center;\n gap: var(--spacing-24);\n }\n}\n\n/* ── Title ─────────────────────────────────────────────────── */\n\n.title {\n font-family: var(--typography-h2-font-family);\n font-size: var(--typography-h2-font-size);\n font-weight: var(--typography-h2-font-weight);\n line-height: var(--typography-h2-line-height);\n color: var(--text-primary);\n margin: 0;\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .title {\n text-align: center;\n }\n}\n\n\n/* ── Accordion list ────────────────────────────────────────── */\n\n.list {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.list>* {\n max-width: 100%;\n}","import { Accordion } from \"../../primitives/Accordion\";\nimport type { FaqAccordionProps } from \"./FaqAccordion.types\";\nimport styles from \"./FaqAccordion.module.css\";\n\nexport const FaqAccordion = ({\n title,\n items,\n colorScheme = \"white\",\n}: FaqAccordionProps) => {\n return (\n <section className={[styles.section, styles[`section--${colorScheme}`]].join(\" \")}>\n <div className={styles.container}>\n <div className={styles.header}>\n <h2 className={styles.title}>{title}</h2>\n </div>\n\n <div className={styles.list}>\n {items.map((item, index) => (\n <Accordion\n key={`${item.question}-${index}`}\n title={item.question}\n showTopDivider={index === 0}\n showBottomDivider={true}\n >\n {item.answer}\n </Accordion>\n ))}\n </div>\n </div>\n </section>\n );\n};\n","import { Card } from \"../../components/Card\";\nimport { Link } from \"../../primitives/Link\";\nimport type { FeatureCardItem, FeatureCardsProps } from \"./FeatureCards.types\";\nimport \"./FeatureCards.css\";\n\nconst externalLinkRel = (href: string | undefined) =>\n href && /^https?:\\/\\//i.test(href) ? \"noopener noreferrer\" : undefined;\n\n/* ── Two Cards sub-component ────────────────────────────────── */\n\nconst TwoCardsItem = ({ card, index }: { card: FeatureCardItem; index: number }) => {\n const isDark = card.twoTone === \"dark\";\n const showCardLink = card.showLink !== false;\n\n return (\n <div className=\"fc-twoCardWrap\">\n <div\n className={[\n \"fc-twoCard\",\n isDark ? \"fc-twoCard--dark\" : \"fc-twoCard--light\",\n ].join(\" \")}\n >\n <div className=\"fc-twoCard-body\">\n <div className=\"fc-twoCard-content\">\n <h3 className=\"fc-twoCard-title\">{card.title}</h3>\n <p className=\"fc-twoCard-description\">{card.description}</p>\n {showCardLink && (\n <div className=\"fc-twoCard-linkWrap\">\n <Link\n colorScheme=\"coral\"\n href={card.linkHref}\n label={card.linkText ?? \"Learn more\"}\n rel={externalLinkRel(card.linkHref)}\n onClick={card.onLinkClick}\n />\n </div>\n )}\n </div>\n\n {card.platforms && card.platforms.length > 0 && (\n <div className=\"fc-twoCard-platformsOuter\">\n <h3 className=\"fc-twoCard-platformsHeading\">\n {card.platformsHeading ?? \"Available on\"}\n </h3>\n <div className=\"fc-twoCard-platformRow\">\n {card.platforms.map((platform, i) => (\n <a\n key={`${platform.label}-${i}`}\n className={[\n \"fc-platformLink\",\n isDark ? \"fc-platformLink--dark\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n href={platform.href}\n rel={externalLinkRel(platform.href)}\n >\n <img\n alt=\"\"\n className=\"fc-platformLink-icon\"\n height={32}\n src={platform.iconSrc}\n width={32}\n />\n <span className=\"fc-platformLink-label\">{platform.label}</span>\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {card.image && (\n <div className=\"fc-twoCard-imageSection\">\n <img\n alt={card.imageAlt ?? \"\"}\n className=\"fc-twoCard-image\"\n decoding=\"async\"\n loading={index === 0 ? \"eager\" : \"lazy\"}\n src={card.image}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/* ── One Card sub-component ─────────────────────────────────── */\n\nconst OneCardPanel = ({ card }: { card: FeatureCardItem }) => {\n const showCardLink = card.showLink !== false;\n\n return (\n <div className=\"fc-oneCardShell\">\n <div className=\"fc-oneCardGrid fc-twoCard--dark\">\n <div className=\"fc-oneCardLeft\">\n <div className=\"fc-oneCardContentBlock\">\n <h3 className=\"fc-twoCard-title\">{card.title}</h3>\n <p className=\"fc-twoCard-description\">{card.description}</p>\n {showCardLink && (\n <div className=\"fc-twoCard-linkWrap\">\n <Link\n colorScheme=\"coral\"\n href={card.linkHref}\n label={card.linkText ?? \"Learn more\"}\n rel={externalLinkRel(card.linkHref)}\n onClick={card.onLinkClick}\n />\n </div>\n )}\n </div>\n\n {card.platforms && card.platforms.length > 0 && (\n <div className=\"fc-twoCard-platformsOuter\">\n <h3 className=\"fc-twoCard-platformsHeading\">\n {card.platformsHeading ?? \"Available on\"}\n </h3>\n <div className=\"fc-twoCard-platformRow\">\n {card.platforms.map((platform, i) => (\n <a\n key={`${platform.label}-${i}`}\n className=\"fc-platformLink fc-platformLink--dark\"\n href={platform.href}\n rel={externalLinkRel(platform.href)}\n >\n <img\n alt=\"\"\n className=\"fc-platformLink-icon\"\n height={32}\n src={platform.iconSrc}\n width={32}\n />\n <span className=\"fc-platformLink-label\">{platform.label}</span>\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {card.image && (\n <div className=\"fc-oneCardRight\">\n <img\n alt={card.imageAlt ?? \"\"}\n className=\"fc-oneCardImage\"\n decoding=\"async\"\n loading=\"eager\"\n src={card.image}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/* ── Main component ─────────────────────────────────────────── */\n\nexport const FeatureCards = ({\n variant = \"default\",\n sectionTitle,\n sectionDescription,\n showLink = false,\n linkText = \"Learn more\",\n onLinkClick,\n cardColorScheme = \"image\",\n cards,\n}: FeatureCardsProps) => {\n const sectionHeader = (\n <div className=\"fc-header\">\n <h2 className=\"fc-sectionTitle\">{sectionTitle}</h2>\n\n {sectionDescription && (\n <p className=\"fc-sectionDescription\">{sectionDescription}</p>\n )}\n\n {showLink && (\n <Link colorScheme=\"coral\" label={linkText} onClick={onLinkClick} />\n )}\n </div>\n );\n\n if (variant === \"twoCards\") {\n return (\n <section className=\"fc-section\">\n <div className=\"fc-container\">\n {sectionHeader}\n\n <div className=\"fc-grid fc-grid--twoCards\">\n {cards.map((card, index) => (\n <TwoCardsItem\n card={card}\n index={index}\n key={`${card.title}-${index}`}\n />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n if (variant === \"oneCard\") {\n const card = cards[0];\n if (!card) return null;\n\n return (\n <section className=\"fc-section\">\n <div className=\"fc-container\">\n {sectionHeader}\n\n <OneCardPanel card={card} />\n </div>\n </section>\n );\n }\n\n return (\n <section className=\"fc-section\">\n <div className=\"fc-container\">\n {sectionHeader}\n\n <div className={`fc-grid fc-grid--${cards.length === 4 ? \"4\" : \"3\"}`}>\n {cards.map((card, index) => (\n <Card\n key={index}\n variant=\"primary\"\n colorScheme={card.colorScheme ?? cardColorScheme}\n title={card.title}\n description={card.description}\n image={card.image}\n imageAlt={card.imageAlt}\n showLink={card.showLink}\n linkText={card.linkText}\n onLinkClick={card.onLinkClick}\n />\n ))}\n </div>\n </div>\n </section>\n );\n};\n","import { Card } from \"../../components/Card\";\nimport { Link } from \"../../primitives/Link\";\nimport type { FeatureCardsIconProps } from \"./FeatureCardsIcon.types\";\nimport \"./FeatureCardsIcon.css\";\n\nexport const FeatureCardsIcon = ({\n sectionTitle,\n sectionDescription,\n showLink = false,\n linkText = \"Learn more\",\n onLinkClick,\n cards,\n}: FeatureCardsIconProps) => {\n return (\n <section className=\"fci-section\">\n <div className=\"fci-container\">\n <div className=\"fci-header\">\n {sectionTitle && <h2 className=\"fci-sectionTitle\">{sectionTitle}</h2>}\n\n {sectionDescription && (\n <p className=\"fci-sectionDescription\">{sectionDescription}</p>\n )}\n\n {showLink && (\n <Link colorScheme=\"coral\" label={linkText} onClick={onLinkClick} />\n )}\n </div>\n\n <div className={`fci-grid fci-grid--${cards.length === 4 ? \"4\" : \"3\"}`}>\n {cards.map((card, index) => (\n <Card\n key={index}\n variant=\"secondary\"\n title={card.title}\n description={card.description}\n icon={card.icon}\n showIcon={card.showIcon}\n showLink={card.showLink}\n linkText={card.linkText}\n onLinkClick={card.onLinkClick}\n />\n ))}\n </div>\n </div>\n </section>\n );\n};\n","/* ── Section shell ─────────────────────────────────────────── */\n\n.section {\n width: 100%;\n background-color: var(--color-slate-50);\n}\n\n/* ── Inner container ───────────────────────────────────────── */\n\n.container {\n display: flex;\n flex-direction: column;\n max-width: var(--content-width-1280);\n margin: 0 auto;\n padding: var(--spacing-56) var(--spacing-16);\n box-sizing: border-box;\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .container {\n padding: var(--spacing-112) var(--spacing-24);\n }\n}\n\n/* ── Split layout ──────────────────────────────────────────── */\n\n.split {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--spacing-24);\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .split {\n flex-direction: row;\n align-items: center;\n gap: 8rem;\n /* 128px — no token at this scale */\n }\n\n /* Reverse column order when image is on the left */\n .split--image-left {\n flex-direction: row-reverse;\n }\n}\n\n/* ── Content column ────────────────────────────────────────── */\n\n.content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--spacing-24);\n width: 100%;\n}\n\n@media (min-width: 992px) {\n .content {\n gap: var(--spacing-32);\n width: 540px;\n flex-shrink: 0;\n }\n}\n\n/* ── Title ─────────────────────────────────────────────────── */\n\n.title {\n font-family: var(--typography-h2-font-family);\n font-size: var(--typography-h2-font-size);\n font-weight: var(--typography-h2-font-weight);\n line-height: var(--typography-h2-line-height);\n color: var(--text-primary);\n margin: 0;\n}\n\n/* ── Bullet List ───────────────────────────────────────────── */\n\n.bulletList {\n display: flex;\n flex-direction: column;\n width: 100%;\n /* The HTML shows a grid layout with small gap, but flex is more robust here.\n We'll use border-bottom to separate items. */\n}\n\n.bulletItem {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-16);\n padding: var(--spacing-16) 0;\n border-bottom: 1px solid var(--color-slate-100);\n}\n\n.bulletItem:first-child {\n padding-top: 0;\n}\n\n.bulletItem:last-child {\n border-bottom: none;\n padding-bottom: 0;\n}\n\n/* ── Icon ──────────────────────────────────────────────────── */\n\n.iconWrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem; /* 24px */\n height: 1.5rem; /* 24px */\n flex-shrink: 0;\n color: var(--color-slate-1200);\n margin-top: 2px; /* Slight optical adjustment to align with text */\n}\n\n.icon {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n/* ── Bullet Text ───────────────────────────────────────────── */\n\n.bulletText {\n font-family: var(--typography-body-md-font-family);\n font-size: var(--typography-body-md-font-size);\n font-weight: var(--typography-body-md-font-weight);\n line-height: var(--typography-body-md-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n/* ── Image column ──────────────────────────────────────────── */\n\n.imageWrapper {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: var(--radius-2xl);\n /* 24px mobile */\n overflow: hidden;\n flex-shrink: 0;\n position: relative;\n background-color: transparent;\n}\n\n@media (min-width: 992px) {\n .imageWrapper {\n flex: 1 0 0;\n width: auto;\n border-radius: 2rem;\n /* 32px desktop — no exact token */\n }\n}\n\n.image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n display: block;\n}\n","import type { FeatureBulletsProps } from \"./FeatureBullets.types\";\nimport styles from \"./FeatureBullets.module.css\";\n\nconst CheckIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" className={styles.icon}>\n <path d=\"M12 4.375C9.07031 4.375 6.41406 5.9375 4.92969 8.4375C3.48438 10.9766 3.48438 14.0625 4.92969 16.5625C6.41406 19.1016 9.07031 20.625 12 20.625C14.8906 20.625 17.5469 19.1016 19.0312 16.5625C20.4766 14.0625 20.4766 10.9766 19.0312 8.4375C17.5469 5.9375 14.8906 4.375 12 4.375ZM12 22.5C8.40625 22.5 5.125 20.625 3.32812 17.5C1.53125 14.4141 1.53125 10.625 3.32812 7.5C5.125 4.41406 8.40625 2.5 12 2.5C15.5547 2.5 18.8359 4.41406 20.6328 7.5C22.4297 10.625 22.4297 14.4141 20.6328 17.5C18.8359 20.625 15.5547 22.5 12 22.5ZM16.4141 10.6641L11.4141 15.6641C11.0234 16.0547 10.4375 16.0547 10.0859 15.6641L7.58594 13.1641C7.19531 12.8125 7.19531 12.2266 7.58594 11.875C7.9375 11.4844 8.52344 11.4844 8.91406 11.875L10.75 13.7109L15.0859 9.375C15.4375 8.98438 16.0234 8.98438 16.4141 9.375C16.7656 9.72656 16.7656 10.3125 16.4141 10.6641Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const FeatureBullets = ({\n title,\n bullets,\n image,\n imageAlt = \"\",\n imagePosition = \"right\",\n}: FeatureBulletsProps) => {\n return (\n <section className={styles.section}>\n <div className={styles.container}>\n <div\n className={[\n styles.split,\n imagePosition === \"left\" ? styles[\"split--image-left\"] : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className={styles.content}>\n <h2 className={styles.title}>{title}</h2>\n\n {bullets && bullets.length > 0 && (\n <div className={styles.bulletList}>\n {bullets.map((bullet, i) => (\n <div key={i} className={styles.bulletItem}>\n <div className={styles.iconWrapper}>\n <CheckIcon />\n </div>\n <p className={styles.bulletText}>{bullet}</p>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {image && (\n <div className={styles.imageWrapper}>\n <img\n alt={imageAlt}\n className={styles.image}\n src={image}\n />\n </div>\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default FeatureBullets;\n","import { useState } from \"react\";\nimport type { FooterProps, FooterDerivGoProps } from \"./Footer.types\";\nimport \"./Footer.css\";\n\n/* ── Internal icons ───────────────────────────────────────────── */\n\nconst ExternalLinkIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M2 2H10M10 2V10M10 2L2 10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M2 4L6 8L10 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/* ── Deriv GO shared content ──────────────────────────────────── */\n\ninterface DerivGoBadgesProps {\n googlePlayBadge?: FooterDerivGoProps[\"googlePlayBadge\"];\n appStoreBadge?: FooterDerivGoProps[\"appStoreBadge\"];\n huaweiBadge?: FooterDerivGoProps[\"huaweiBadge\"];\n availabilityNote?: string;\n}\n\nconst DerivGoBadges = ({\n googlePlayBadge,\n appStoreBadge,\n huaweiBadge,\n availabilityNote,\n}: DerivGoBadgesProps) => (\n <>\n <div className=\"footer__app-badges\">\n {googlePlayBadge && (\n <a\n href={googlePlayBadge.href}\n className={googlePlayBadge.icon ? \"footer__app-badge-svg\" : \"footer__app-badge\"}\n aria-label={googlePlayBadge.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {googlePlayBadge.icon ?? <img src={googlePlayBadge.imageSrc} alt={googlePlayBadge.imageAlt} />}\n </a>\n )}\n {appStoreBadge && (\n <a\n href={appStoreBadge.href}\n className={appStoreBadge.icon ? \"footer__app-badge-svg\" : \"footer__app-badge\"}\n aria-label={appStoreBadge.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {appStoreBadge.icon ?? <img src={appStoreBadge.imageSrc} alt={appStoreBadge.imageAlt} />}\n </a>\n )}\n {huaweiBadge && (\n <a\n href={huaweiBadge.href}\n className={huaweiBadge.icon ? \"footer__app-badge-svg\" : \"footer__app-badge\"}\n aria-label={huaweiBadge.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {huaweiBadge.icon ?? <img src={huaweiBadge.imageSrc} alt={huaweiBadge.imageAlt} />}\n </a>\n )}\n </div>\n {availabilityNote && (\n <p className=\"footer__app-note\">{availabilityNote}</p>\n )}\n</>\n);\n\n/* ── Nav link ─────────────────────────────────────────────────── */\n\ninterface NavLinkProps {\n label: string;\n href?: string;\n isExternal?: boolean;\n onClick?: () => void;\n}\n\nconst NavLink = ({ label, href, isExternal, onClick }: NavLinkProps) => (\n <a\n href={href}\n className=\"footer__nav-link\"\n onClick={onClick}\n {...(isExternal ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {label}\n {isExternal && <ExternalLinkIcon />}\n </a>\n);\n\n/* ── Footer ───────────────────────────────────────────────────── */\n\nexport const Footer = ({\n logoSrc,\n logoAlt = \"Deriv\",\n navColumns,\n socialLinks = [],\n derivGo,\n investorsInPeopleSrc,\n investorsInPeopleAlt = \"Investors in People - Platinum\",\n licenseText,\n riskWarningText,\n aiSummary,\n className,\n ...props\n}: FooterProps) => {\n // Flatten all nav sections for the mobile/tablet accordion\n const allSections = navColumns.flat();\n\n const [openSections, setOpenSections] = useState<Set<number>>(new Set());\n\n const toggleSection = (index: number) => {\n setOpenSections((prev) => {\n const next = new Set(prev);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n return next;\n });\n };\n\n const aiLabel = aiSummary?.label ?? \"Ask AI for a summary of Deriv\";\n\n return (\n <footer\n className={[\"footer\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"footer__inner\">\n\n {/* ── HEADER ROW: Logo · [AI bar — desktop] · Social icons ── */}\n <div className=\"footer__header\">\n <div className=\"footer__logo-wrapper\">\n <img\n src={logoSrc}\n alt={logoAlt}\n className=\"footer__logo\"\n />\n </div>\n\n {/* AI summary bar — visible only on desktop, inline in header */}\n {aiSummary && (\n <div className=\"footer__ai-bar footer__ai-bar--inline\">\n <span className=\"footer__ai-bar-label\">{aiLabel}</span>\n <div className=\"footer__ai-bar-icons\">\n {aiSummary.items.map((item, i) => (\n <a\n key={i}\n href={item.href}\n aria-label={item.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img className=\"footer__ai-icon\" src={item.imageSrc} alt={item.imageAlt} />\n </a>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"footer__social footer__social--in-header\">\n {socialLinks.map((link, i) => (\n <a\n key={i}\n href={link.href}\n className=\"footer__social-icon\"\n aria-label={link.ariaLabel}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {link.icon}\n </a>\n ))}\n </div>\n </div>\n\n {/* ── AI SUMMARY BAR — mobile only (standalone card) ── */}\n {aiSummary && (\n <div className=\"footer__ai-section\">\n <div className=\"footer__ai-bar footer__ai-bar--block\">\n <span className=\"footer__ai-bar-label\">{aiLabel}</span>\n <div className=\"footer__ai-bar-icons\">\n {aiSummary.items.map((item, i) => (\n <a\n key={i}\n href={item.href}\n aria-label={item.imageAlt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img className=\"footer__ai-icon\" src={item.imageSrc} alt={item.imageAlt} />\n </a>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* ── NAVIGATION — Desktop: multi-column grid + sidebar ── */}\n <div className=\"footer__nav footer__nav--columns\">\n {navColumns.map((column, colIdx) => (\n <div key={colIdx} className=\"footer__column\">\n {column.map((section, secIdx) => (\n <div key={secIdx} className=\"footer__nav-section\">\n <p className=\"footer__nav-title\">{section.title}</p>\n <ul className=\"footer__nav-links\">\n {section.links.map((link, linkIdx) => (\n <li key={linkIdx}>\n <NavLink {...link} />\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n ))}\n\n {/* Desktop sidebar: Investors in People + Deriv GO with QR */}\n <div className=\"footer__sidebar\">\n {investorsInPeopleSrc && (\n <div className=\"footer__investors-card\">\n <img\n src={investorsInPeopleSrc}\n alt={investorsInPeopleAlt}\n className=\"footer__investors-img\"\n />\n </div>\n )}\n\n {derivGo && (\n <div className=\"footer__deriv-go-card\">\n <div className=\"footer__deriv-go-header\">\n <img\n src={derivGo.logoSrc}\n alt={derivGo.logoAlt ?? \"Deriv GO\"}\n className=\"footer__deriv-go-logo\"\n />\n <span className=\"footer__deriv-go-title\">\n {derivGo.title ?? \"Deriv GO\"}\n </span>\n </div>\n <p className=\"footer__deriv-go-desc\">\n {derivGo.description ?? \"Trade multipliers on our mobile app.\"}\n </p>\n {(derivGo.qrCodeSrc || derivGo.qrCodeIcon) && (\n <div className=\"footer__deriv-go-qr\">\n {derivGo.qrCodeIcon ? (\n <div className=\"footer__deriv-go-qr-icon\">\n {derivGo.qrCodeIcon}\n </div>\n ) : (\n <img\n src={derivGo.qrCodeSrc}\n alt={derivGo.qrCodeAlt ?? \"Scan to download\"}\n className=\"footer__deriv-go-qr-img\"\n />\n )}\n <span className=\"footer__deriv-go-qr-label\">\n {derivGo.scanToDownloadLabel ?? \"Scan to download\"}\n </span>\n </div>\n )}\n <DerivGoBadges\n googlePlayBadge={derivGo.googlePlayBadge}\n appStoreBadge={derivGo.appStoreBadge}\n huaweiBadge={derivGo.huaweiBadge}\n availabilityNote={derivGo.availabilityNote}\n />\n </div>\n )}\n </div>\n </div>\n\n {/* ── NAVIGATION — Mobile/Tablet: accordion ── */}\n <div className=\"footer__nav footer__nav--accordion\">\n {allSections.map((section, idx) => {\n const isOpen = openSections.has(idx);\n return (\n <div\n key={idx}\n className={[\n \"footer__accordion-item\",\n isOpen && \"footer__accordion-item--open\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <button\n type=\"button\"\n className=\"footer__accordion-toggle\"\n onClick={() => toggleSection(idx)}\n aria-expanded={isOpen}\n >\n <span className=\"footer__accordion-label\">\n {section.title}\n </span>\n <span className=\"footer__accordion-chevron\">\n <ChevronDownIcon />\n </span>\n </button>\n {isOpen && (\n <ul className=\"footer__accordion-links\">\n {section.links.map((link, linkIdx) => (\n <li key={linkIdx}>\n <NavLink {...link} />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n })}\n </div>\n\n {/* ── SOCIAL ICONS — Mobile only (standalone, above Deriv GO) ── */}\n {socialLinks.length > 0 && (\n <div className=\"footer__social footer__social--standalone\">\n {socialLinks.map((link, i) => (\n <a\n key={i}\n href={link.href}\n className=\"footer__social-icon\"\n aria-label={link.ariaLabel}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {link.icon}\n </a>\n ))}\n </div>\n )}\n\n {/* ── DERIV GO BANNER — Mobile/Tablet stacked (no QR) ── */}\n {derivGo && (\n <div className=\"footer__deriv-go-banner\">\n <div className=\"footer__deriv-go-banner-info\">\n <div className=\"footer__deriv-go-header\">\n <img\n src={derivGo.logoSrc}\n alt={derivGo.logoAlt ?? \"Deriv GO\"}\n className=\"footer__deriv-go-logo\"\n />\n <span className=\"footer__deriv-go-title\">\n {derivGo.title ?? \"Deriv GO\"}\n </span>\n </div>\n <p className=\"footer__deriv-go-desc\">\n {derivGo.description ?? \"Trade multipliers on our mobile app.\"}\n </p>\n </div>\n <div className=\"footer__deriv-go-banner-badges\">\n <DerivGoBadges\n googlePlayBadge={derivGo.googlePlayBadge}\n appStoreBadge={derivGo.appStoreBadge}\n huaweiBadge={derivGo.huaweiBadge}\n availabilityNote={derivGo.availabilityNote}\n />\n </div>\n </div>\n )}\n\n {/* ── LEGAL & RISK WARNING ── */}\n {(licenseText || riskWarningText) && (\n <div className=\"footer__legal-block\">\n {licenseText && (\n <div className=\"footer__license\">{licenseText}</div>\n )}\n {riskWarningText && (\n <div className=\"footer__risk-warning\">\n <p className=\"footer__risk-warning-text\">{riskWarningText}</p>\n </div>\n )}\n </div>\n )}\n\n {/* ── INVESTORS IN PEOPLE — Mobile/Tablet (centred) ── */}\n {investorsInPeopleSrc && (\n <div className=\"footer__investors-stacked\">\n <img\n src={investorsInPeopleSrc}\n alt={investorsInPeopleAlt}\n className=\"footer__investors-img\"\n />\n </div>\n )}\n </div>\n </footer>\n );\n};\n\nexport default Footer;\n","import React from \"react\";\nimport type { HeroProps } from \"./Hero.types\";\nimport { Button } from \"../../primitives/Button\";\nimport \"./Hero.css\";\n\n/* ── Helpers ──────────────────────────────────────────────── */\n\n/** Renders a ReactNode or a plain string as an <img> */\nconst Visual = ({\n src,\n className,\n alt = \"\",\n}: {\n src: React.ReactNode | string;\n className: string;\n alt?: string;\n}) => (\n <div className={className}>\n {typeof src === \"string\" ? <img src={src} alt={alt} /> : src}\n </div>\n);\n\n/* ── Button block helper ──────────────────────────────────── */\n\nconst ButtonBlock = ({\n primaryButton,\n secondaryButton,\n}: Pick<HeroProps, \"primaryButton\" | \"secondaryButton\">) => {\n if (!primaryButton && !secondaryButton) return null;\n return (\n <div className=\"hero__buttons\">\n {primaryButton &&\n (primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n ))}\n {secondaryButton &&\n (secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n ))}\n </div>\n );\n};\n\n/* ── Hero ─────────────────────────────────────────────────── */\n\nexport const Hero = ({\n variant,\n subtitle,\n title,\n description,\n primaryButton,\n secondaryButton,\n backgroundImageSrc,\n heroImage,\n productImage,\n floatingImage,\n className,\n ...props\n}: HeroProps) => {\n const variantClass = `hero--${variant}`;\n\n /* ── Split ── */\n if (variant === \"split\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={\n backgroundImageSrc\n ? { backgroundImage: `url(${backgroundImageSrc})` }\n : undefined\n }\n {...props}\n >\n {/* Layer 1: gradient overlay */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 2: transparent PNG — direct child of section for correct z-index */}\n {heroImage && (\n <Visual src={heroImage} className=\"hero__image-slot\" alt=\"\" />\n )}\n\n {/* Layer 3: text + buttons */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n <div className=\"hero__left\">\n <div className=\"hero__body\">\n <div className=\"hero__text\">\n {subtitle && (\n <p className=\"hero__subtitle\">{subtitle}</p>\n )}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n <ButtonBlock\n primaryButton={primaryButton}\n secondaryButton={secondaryButton}\n />\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Centered ── */\n if (variant === \"centered\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={\n backgroundImageSrc\n ? { backgroundImage: `url(${backgroundImageSrc})` }\n : undefined\n }\n {...props}\n >\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n <div className=\"hero__text\">\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n <ButtonBlock\n primaryButton={primaryButton}\n secondaryButton={secondaryButton}\n />\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Showcase ── */\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={\n backgroundImageSrc\n ? { backgroundImage: `url(${backgroundImageSrc})` }\n : undefined\n }\n {...props}\n >\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n <div className=\"hero__text\">\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n\n <ButtonBlock\n primaryButton={primaryButton}\n secondaryButton={secondaryButton}\n />\n\n {productImage && (\n <Visual\n src={productImage}\n className=\"hero__product-image\"\n alt=\"\"\n />\n )}\n\n {floatingImage && (\n <Visual\n src={floatingImage}\n className=\"hero__floating-image\"\n alt=\"\"\n />\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default Hero;\n","import React, { useEffect, useRef } from \"react\";\nimport type { HeaderProps } from \"./Header.types\";\nimport { Button } from \"../../primitives/Button\";\nimport \"./Header.css\";\n\n/* ── Button block helper ──────────────────────────────────── */\n\nconst ButtonBlock = ({\n primaryButton,\n secondaryButton,\n}: Pick<HeaderProps, \"primaryButton\" | \"secondaryButton\">) => {\n if (!primaryButton && !secondaryButton) return null;\n return (\n <div className=\"header__buttons\">\n {primaryButton &&\n (primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n ))}\n {secondaryButton &&\n (secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n ))}\n </div>\n );\n};\n\n/* ── Header ───────────────────────────────────────────────── */\n\nexport const Header = ({\n variant,\n subtitle,\n title,\n description,\n primaryButton,\n secondaryButton,\n leftVisual,\n rightVisual,\n className,\n ...props\n}: HeaderProps) => {\n const variantClass = `header--${variant}`;\n\n /* ── Parallax refs (visuals variant only) ── */\n const sectionRef = useRef<HTMLElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (variant !== \"visuals\") return;\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n const section = sectionRef.current;\n const leftEl = leftRef.current;\n const rightEl = rightRef.current;\n if (!section || !leftEl || !rightEl) return;\n\n const STRENGTH = 60; // px travel distance\n\n const onScroll = () => {\n const rect = section.getBoundingClientRect();\n const viewH = window.innerHeight;\n const progress = 1 - rect.bottom / (viewH + rect.height);\n const clamped = Math.max(0, Math.min(1, progress));\n const offset = (clamped - 0.5) * STRENGTH * 2;\n leftEl.style.transform = `translateY(${-offset}px)`;\n rightEl.style.transform = `translateY(${offset}px)`;\n };\n\n const scrollEl = (() => {\n let el: Element | null = section.parentElement;\n while (el && el !== document.documentElement) {\n const { overflow, overflowY } = getComputedStyle(el);\n if (/auto|scroll/.test(overflow + overflowY)) return el;\n el = el.parentElement;\n }\n return window;\n })();\n\n scrollEl.addEventListener(\"scroll\", onScroll, { passive: true });\n onScroll();\n\n return () => scrollEl.removeEventListener(\"scroll\", onScroll);\n }, [variant]);\n\n /* ── Shared text block ── */\n const textBlock = (\n <div className=\"header__text\">\n {subtitle && <p className=\"header__subtitle\">{subtitle}</p>}\n <h2 className=\"header__title\">{title}</h2>\n {description && <p className=\"header__description\">{description}</p>}\n </div>\n );\n\n return (\n <section\n ref={sectionRef}\n className={[\"header\", variantClass, className].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* Layer 1: grid pattern */}\n <div className=\"header__grid\" aria-hidden=\"true\" />\n\n {/* Layer 2: floating visuals (visuals variant only) */}\n {variant === \"visuals\" && leftVisual && (\n <div ref={leftRef} className=\"header__visual header__visual--left\">\n {typeof leftVisual === \"string\" ? (\n <img src={leftVisual} alt=\"\" />\n ) : (\n leftVisual\n )}\n </div>\n )}\n {variant === \"visuals\" && rightVisual && (\n <div ref={rightRef} className=\"header__visual header__visual--right\">\n {typeof rightVisual === \"string\" ? (\n <img src={rightVisual} alt=\"\" />\n ) : (\n rightVisual\n )}\n </div>\n )}\n\n {/* Layer 3: overlay fades the visuals at edges */}\n <div className=\"header__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 4: text + button always on top */}\n <div className=\"header__inner\">\n <div className=\"header__content\">\n <div className=\"header__body\">\n {textBlock}\n <ButtonBlock\n primaryButton={primaryButton}\n secondaryButton={secondaryButton}\n />\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default Header;\n","import { useEffect, useRef, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport type { AwardItem, StatsProps } from \"./Stats.types\";\nimport \"./Stats.css\";\n\n/* ── Constants ────────────────────────────────────────────── */\n\nconst INTERVAL_MS = 2000;\nconst TRANSITION = \"transform 0.8s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1)\";\nconst PARALLAX_FACTOR = 0.18; // fraction of section-centre offset applied as translation\nconst PARALLAX_MAX = 56; // px cap so translation never gets extreme\nconst PARALLAX_BP = 992; // desktop breakpoint at which parallax is active\n\n/* ── Carousel helpers ─────────────────────────────────────── */\n\n/**\n * Returns a signed relative position:\n * 0 → active (centre)\n * -1 → one slot above\n * +1 → one slot below\n * ±2+ → off-screen (hidden)\n */\nfunction relativePos(index: number, active: number, total: number): number {\n const raw = ((index - active) % total + total) % total;\n return raw > total / 2 ? raw - total : raw;\n}\n\nfunction getStatStyle(rel: number): CSSProperties {\n if (rel === 0) {\n return { transform: \"translateY(-50%) scale(1)\", opacity: 1, zIndex: 2, transition: TRANSITION };\n }\n if (rel === -1) {\n return { transform: \"translateY(calc(-50% - 110%)) scale(0.7)\", opacity: 1, zIndex: 1, transition: TRANSITION };\n }\n if (rel === 1) {\n return { transform: \"translateY(calc(-50% + 110%)) scale(0.7)\", opacity: 1, zIndex: 1, transition: TRANSITION };\n }\n return {\n transform: rel < 0\n ? \"translateY(calc(-50% - 110%)) scale(0.4)\"\n : \"translateY(calc(-50% + 110%)) scale(0.4)\",\n opacity: 0, zIndex: 0, transition: TRANSITION,\n };\n}\n\n/* ── Award Badge ──────────────────────────────────────────── */\n\nconst AwardBadge = ({ imageSrc, imageAlt = \"\" }: AwardItem) => (\n <div className=\"stats__award\">\n <img src={imageSrc} alt={imageAlt} className=\"stats__award-image\" />\n </div>\n);\n\n/* ── Stats ────────────────────────────────────────────────── */\n\nexport const Stats = ({\n title,\n description,\n stats,\n leftAwards = [],\n rightAwards = [],\n className,\n ...props\n}: StatsProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const sectionRef = useRef<HTMLElement>(null);\n const leftColRef = useRef<HTMLDivElement>(null);\n const rightColRef = useRef<HTMLDivElement>(null);\n const rafRef = useRef<number | null>(null);\n const hasAwards = leftAwards.length > 0 || rightAwards.length > 0;\n const allAwards: AwardItem[] = [...leftAwards, ...rightAwards];\n const total = stats.length;\n\n /* ── Stat carousel ────────────────────────────────────────── */\n useEffect(() => {\n if (total <= 1) return;\n intervalRef.current = setInterval(() => {\n setActiveIndex(prev => (prev + 1) % total);\n }, INTERVAL_MS);\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [total]);\n\n /* ── Parallax scroll — desktop only ─────────────────────── */\n useEffect(() => {\n const applyParallax = () => {\n const section = sectionRef.current;\n if (!section || window.innerWidth < PARALLAX_BP) {\n if (leftColRef.current) leftColRef.current.style.transform = \"\";\n if (rightColRef.current) rightColRef.current.style.transform = \"\";\n return;\n }\n\n const rect = section.getBoundingClientRect();\n const sectionCenter = rect.top + rect.height / 2;\n const viewportCenter = window.innerHeight / 2;\n\n // delta > 0: section below centre (not yet scrolled to)\n // delta < 0: section above centre (scrolled past)\n const raw = (sectionCenter - viewportCenter) * PARALLAX_FACTOR;\n const delta = Math.max(-PARALLAX_MAX, Math.min(PARALLAX_MAX, raw));\n\n // Left drifts UP as you scroll down → translateY follows delta (positive → negative)\n // Right drifts DOWN as you scroll down → translateY is inverted\n if (leftColRef.current) leftColRef.current.style.transform = `translateY(${delta}px)`;\n if (rightColRef.current) rightColRef.current.style.transform = `translateY(${-delta}px)`;\n };\n\n const onScroll = () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(applyParallax);\n };\n\n applyParallax();\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n window.addEventListener(\"resize\", onScroll, { passive: true });\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"resize\", onScroll);\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n return (\n <section\n ref={sectionRef}\n className={[\"stats\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"stats__inner\">\n {/* ── Header ── */}\n <div className=\"stats__header\">\n <h2 className=\"stats__title\">{title}</h2>\n {description && (\n <p className=\"stats__description\">{description}</p>\n )}\n </div>\n\n {/* ── Content row ── */}\n <div className=\"stats__content\">\n {/* Left award images — desktop only */}\n {leftAwards.length > 0 && (\n <div ref={leftColRef} className=\"stats__awards-col stats__awards-col--left\">\n {leftAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n\n {/* Centre stats card */}\n <div className=\"stats__card\">\n <div className=\"stats__card-track\">\n <div className=\"stats__fade stats__fade--top\" aria-hidden=\"true\" />\n <div className=\"stats__fade stats__fade--bottom\" aria-hidden=\"true\" />\n {stats.map((stat, i) => {\n const rel = relativePos(i, activeIndex, total);\n const active = rel === 0;\n return (\n <div\n key={i}\n className={[\n \"stats__stat\",\n active ? \"stats__stat--active\" : \"stats__stat--inactive\",\n ].join(\" \")}\n style={getStatStyle(rel)}\n aria-hidden={!active}\n >\n <span className=\"stats__stat-value\">{stat.value}</span>\n <span className=\"stats__stat-label\">{stat.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Right award images — desktop only */}\n {rightAwards.length > 0 && (\n <div ref={rightColRef} className=\"stats__awards-col stats__awards-col--right\">\n {rightAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n\n {/* Awards grid — mobile only */}\n {hasAwards && (\n <div className=\"stats__awards-mobile\">\n {allAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default Stats;\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { DotLottieInView } from \"../../components/DotLottieInView\";\nimport type { FeatureScrollItem, FeatureScrollProps } from \"./FeatureScroll.types\";\nimport \"./FeatureScroll.css\";\n\n/* ── Default data ──────────────────────────────────────────── */\n\nexport const FEATURE_SCROLL_DATA: FeatureScrollItem[] = [\n {\n title: \"Forex\",\n description: \"Trade the most popular currency pairs with high leverage, tight spreads, and fast execution.\",\n linkLabel: \"Learn more\",\n link: \"/markets/forex\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a906489e5aadf94e501c4_Forex.lottie\",\n },\n {\n title: \"Derived Indices\",\n description: \"Trade 24/7 on exclusive Synthetic and Derived Indices. Choose volatility levels that match your strategy.\",\n linkLabel: \"Learn more\",\n link: \"/markets/derived-indices/synthetic-indices\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064588b0d2709e7ceac_Derived%20Indices.lottie\",\n },\n {\n title: \"Stocks\",\n description: \"Trade global market leaders like Apple, Tesla, and NVIDIA.\",\n linkLabel: \"Learn more\",\n link: \"/markets/stocks\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064892f97175b724a9c_Stocks.lottie\",\n },\n {\n title: \"Commodities\",\n description: \"Trade gold, silver, oil, natural gas, sugar, and more.\",\n linkLabel: \"Learn more\",\n link: \"/markets/commodities\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064edd96a014a6092cf_Commodities.lottie\",\n },\n {\n title: \"Cryptos\",\n description: \"Trade round the clock on the volatility of cryptocurrencies like Bitcoin and Ethereum.\",\n linkLabel: \"Learn more\",\n link: \"/markets/cryptocurrencies\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a90647b8d9652a28b94e3_Crypto.lottie\",\n },\n {\n title: \"Stock Indices\",\n description: \"Trade offerings that track the top global stock indices.\",\n linkLabel: \"Learn more\",\n link: \"/markets/stock-indices\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064f2c16e4e0732abfb_Stock%20Indices.lottie\",\n },\n];\n\n/* ── Chevron SVG icon ──────────────────────────────────────── */\n\nconst ChevronRight = () => (\n <svg\n className=\"fs__item-link-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 3l5 5-5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/* ── Media renderer ────────────────────────────────────────── */\n\nfunction resolveMediaType(item: FeatureScrollItem): \"lottie\" | \"image\" {\n if (item.mediaType) return item.mediaType;\n return item.mediaUrl.split(\"?\")[0].endsWith(\".lottie\") ? \"lottie\" : \"image\";\n}\n\ninterface MediaRendererProps {\n item: FeatureScrollItem;\n active: boolean;\n}\n\nconst MediaRenderer = ({ item, active }: MediaRendererProps) => {\n if (resolveMediaType(item) === \"lottie\") {\n return (\n <DotLottieInView\n src={item.mediaUrl}\n enabled={active}\n />\n );\n }\n return (\n <img\n src={item.mediaUrl}\n alt={item.title}\n loading=\"lazy\"\n />\n );\n};\n\n/* ── FeatureScroll ─────────────────────────────────────────── */\n\nexport const FeatureScroll = ({\n header,\n items,\n variant = \"media-right\",\n className,\n ...props\n}: FeatureScrollProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const titleRefs = useRef<(HTMLHeadingElement | null)[]>([]);\n const mediaColRef = useRef<HTMLDivElement | null>(null);\n\n /*\n * Desktop: when step i's *title* (h3) top reaches the same line as the sticky\n * media (viewport band under nav), show the *next* step's Lottie/image.\n * pinned = largest i with title top <= threshold; media index = min(last, pinned + 1).\n */\n useLayoutEffect(() => {\n if (items.length === 0) return;\n\n const readThresholdPx = (): number => {\n const col = mediaColRef.current;\n if (!col) return 80;\n const top = getComputedStyle(col).top;\n const px = parseFloat(top);\n return Number.isFinite(px) ? px : 80;\n };\n\n let rafId = 0;\n const tick = () => {\n rafId = 0;\n if (typeof window === \"undefined\") return;\n if (!window.matchMedia(\"(min-width: 992px)\").matches) return;\n\n const threshold = readThresholdPx();\n const refs = titleRefs.current;\n let pinned = -1;\n for (let i = 0; i < items.length; i++) {\n const el = refs[i];\n if (!el) continue;\n if (el.getBoundingClientRect().top <= threshold) pinned = i;\n }\n const mediaIndex = Math.min(\n items.length - 1,\n pinned + 1,\n );\n setActiveIndex((prev) =>\n prev === mediaIndex ? prev : mediaIndex,\n );\n };\n\n const schedule = () => {\n if (rafId !== 0) return;\n rafId = window.requestAnimationFrame(tick);\n };\n\n tick();\n window.addEventListener(\"scroll\", schedule, { passive: true });\n window.addEventListener(\"resize\", schedule, { passive: true });\n const mq = window.matchMedia(\"(min-width: 992px)\");\n mq.addEventListener(\"change\", schedule);\n\n return () => {\n window.removeEventListener(\"scroll\", schedule);\n window.removeEventListener(\"resize\", schedule);\n mq.removeEventListener(\"change\", schedule);\n if (rafId !== 0) window.cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n const rootClass = [\n \"fs\",\n `fs--${variant}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (items.length === 0) {\n return (\n <section className={rootClass} {...props}>\n <div className=\"fs__inner\">\n <h2 className=\"fs__header\">{header}</h2>\n </div>\n </section>\n );\n }\n\n return (\n <section className={rootClass} {...props}>\n <div className=\"fs__inner\">\n\n {/* ── Section header ── */}\n <h2 className=\"fs__header\">{header}</h2>\n\n {/* ══ DESKTOP LAYOUT (hidden on mobile) ══════════════\n * Two equal columns; sticky media + scrolling text.\n * Column order is reversed by .fs--media-left.\n */}\n <div className=\"fs__layout\">\n\n {/* Media column: outer stretches to section height; inner is sticky so\n bottom constraint matches the full layout (fixes upward shift when\n scrolling back from the section below). */}\n <div className=\"fs__media-col\" aria-hidden=\"true\">\n <div\n ref={mediaColRef}\n className=\"fs__media-sticky\"\n >\n <div className=\"fs__media-wrap\">\n {items.map((item, i) => (\n <div\n key={i}\n className={[\n \"fs__media-item\",\n i === activeIndex\n ? \"fs__media-item--active\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <MediaRenderer\n item={item}\n active={i === activeIndex}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Text column: every step in flow — continuous scroll; ~viewport band min-height per step */}\n <div className=\"fs__content-col\">\n {items.map((item, i) => (\n <div\n key={i}\n className=\"fs__item\"\n >\n <h3\n ref={(el) => {\n titleRefs.current[i] = el;\n }}\n className=\"fs__item-title\"\n >\n {item.title}\n </h3>\n <p className=\"fs__item-desc\">\n {item.description}\n </p>\n <a\n href={item.link}\n className=\"fs__item-link\"\n >\n <span>{item.linkLabel}</span>\n <ChevronRight />\n </a>\n </div>\n ))}\n </div>\n </div>\n\n {/* ══ MOBILE LAYOUT (hidden on desktop) ══════════════\n * Stacked items: Title → Media → Description → Link.\n * Variant prop has no effect; layout is always stacked.\n */}\n <div className=\"fs__mobile-list\">\n {items.map((item, i) => (\n <div key={i} className=\"fs__mobile-item\">\n <h3 className=\"fs__item-title\">\n {item.title}\n </h3>\n <div className=\"fs__mobile-media\">\n <MediaRenderer item={item} active={true} />\n </div>\n <p className=\"fs__item-desc\">\n {item.description}\n </p>\n <a\n href={item.link}\n className=\"fs__item-link\"\n >\n <span>{item.linkLabel}</span>\n <ChevronRight />\n </a>\n </div>\n ))}\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default FeatureScroll;\n","import { useEffect, useRef, useState, type ComponentProps } from \"react\";\nimport { DotLottieReact, type DotLottie } from \"@lottiefiles/dotlottie-react\";\n\nexport type DotLottieInViewProps = Omit<\n ComponentProps<typeof DotLottieReact>,\n \"autoplay\" | \"loop\" | \"dotLottieRefCallback\"\n> & {\n /**\n * When false, playback is stopped (e.g. inactive slide in a stacked player).\n * When true, plays once whenever the instance is both enabled and intersecting.\n */\n enabled?: boolean;\n rootMargin?: string;\n threshold?: number | number[];\n};\n\n/**\n * Plays a .lottie once when it scrolls into view. Stops and resets when it leaves view.\n * When it enters view again, it plays once more. Set `enabled={false}` to force stop\n * (e.g. hidden slides) without relying on geometry alone.\n */\nexport function DotLottieInView({\n enabled = true,\n rootMargin = \"0px\",\n threshold = 0.2,\n className,\n style,\n ...dotProps\n}: DotLottieInViewProps) {\n const wrapRef = useRef<HTMLDivElement>(null);\n const [inView, setInView] = useState(false);\n const [dotLottie, setDotLottie] = useState<DotLottie | null>(null);\n\n useEffect(() => {\n const el = wrapRef.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n setInView(entry.isIntersecting);\n },\n { root: null, rootMargin, threshold }\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [rootMargin, threshold]);\n\n useEffect(() => {\n if (!dotLottie) return;\n\n if (!enabled || !inView) {\n dotLottie.stop();\n return;\n }\n\n dotLottie.stop();\n dotLottie.play();\n }, [dotLottie, enabled, inView]);\n\n return (\n <div\n ref={wrapRef}\n className={className}\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"transparent\",\n ...style,\n }}\n >\n <DotLottieReact\n {...dotProps}\n loop={false}\n autoplay={false}\n dotLottieRefCallback={setDotLottie}\n />\n </div>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport type { StickyCardItem, StickyStackedCardsProps } from \"./StickyStackedCards.types\";\nimport \"./StickyStackedCards.css\";\n\n/* ── Default data ──────────────────────────────────────────── */\n\n/* ── Shared design-system placeholder image ────────────────── */\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\nexport const STEPS_DATA: StickyCardItem[] = [\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"light\",\n },\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"coral\",\n },\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"dark\",\n },\n];\n\n/* ── Scale targets per card depth ─────────────────────────── */\n/*\n * When a card is fully covered by the card on top of it, its\n * scale reaches this minimum — creating the visual depth seen\n * in the stacked state. The last card always stays at 1.\n *\n * Index → minimum scale when fully covered:\n * 0 (Sign up) → 0.88 (furthest back)\n * 1 (Deposit) → 0.94 (one level back)\n * 2 (Trade) → 1.00 (front card, never scales down)\n */\nconst MIN_SCALE: Record<number, number> = { 0: 0.88, 1: 0.94 };\n\n/* ── StickyStackedCards ────────────────────────────────────── */\n\nexport const StickyStackedCards = ({\n header,\n items,\n className,\n ...props\n}: StickyStackedCardsProps) => {\n const cardRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n /*\n * SCALE SCROLL HANDLER\n * --------------------\n * Runs on every scroll tick (passive, rAF-debounced).\n * For each card that has a card on top of it, we measure\n * how close the next card is to its fully-stacked position\n * and interpolate --card-scale toward the MIN_SCALE value.\n *\n * progress = 0 → next card is still far below (no scale)\n * progress = 1 → next card has landed on its sticky top (full scale-down)\n */\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let rafId = 0;\n\n const update = () => {\n const cards = cardRefs.current.filter(Boolean) as HTMLDivElement[];\n const n = cards.length;\n\n cards.forEach((card, i) => {\n const minScale = MIN_SCALE[i];\n if (minScale === undefined) {\n // Last card — always full size\n card.style.setProperty(\"--card-scale\", \"1\");\n return;\n }\n\n const nextCard = cards[i + 1];\n if (!nextCard) return;\n\n const cardRect = card.getBoundingClientRect();\n const nextRect = nextCard.getBoundingClientRect();\n\n /*\n * \"gap\" = how far the next card's top is above the\n * current card's top in the viewport.\n *\n * gap ≥ cardHeight → next card is a full card-height below\n * (hasn't started overlapping) → progress 0\n * gap ≈ 0 or negative → next card is fully on top → progress 1\n */\n const cardHeight = cardRect.height;\n const gap = nextRect.top - cardRect.top;\n const progress = Math.max(0, Math.min(1, 1 - gap / cardHeight));\n\n const scale = 1 - (1 - minScale) * progress;\n card.style.setProperty(\"--card-scale\", String(+scale.toFixed(4)));\n });\n };\n\n const onScroll = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(update);\n };\n\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n // Run once immediately so initial state is correct\n update();\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n return (\n <section\n className={[\"ssc\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"ssc__inner\">\n\n {/* ── Section header ── */}\n <h2 className=\"ssc__header\">{header}</h2>\n\n {/* ── Card track ──────────────────────────────────────\n * CRITICAL:\n * • display:block on desktop (not flex) — see CSS note\n * • NO overflow:hidden — breaks position:sticky\n */}\n <div className=\"ssc__track\">\n {items.map((item, i) => (\n <div\n key={i}\n ref={(el) => { cardRefs.current[i] = el; }}\n className={[\n \"ssc__card\",\n `ssc__card--${item.theme ?? \"light\"}`,\n ].join(\" \")}\n style={{\n zIndex: i + 1,\n /*\n * PEEK OFFSET — every card gets i × peek-offset so each\n * prior card shows as a thin strip at the top of the next.\n *\n * Example with 3 cards, peek = 16px:\n * Card 0 (Sign up) → 80px\n * Card 1 (Deposit) → 96px (Sign up peeks 16px above)\n * Card 2 (Trade) → 112px (Deposit peeks 16px, Sign up 32px above)\n *\n * Final state: two 16px colour strips at top, Trade fills the rest.\n */\n top: `calc(var(--ssc-sticky-top) + ${i} * var(--ssc-peek-offset))`,\n } as React.CSSProperties}\n >\n {/* Left column — text content, top-left anchored */}\n <div className=\"ssc__card-content\">\n <h3 className=\"ssc__card-title\">{item.title}</h3>\n <p className=\"ssc__card-desc\">{item.description}</p>\n </div>\n\n {/* Right column — hero image */}\n <div className=\"ssc__card-image\">\n <img\n src={item.imageUrl}\n alt={item.title}\n loading={i === 0 ? \"eager\" : \"lazy\"}\n />\n </div>\n </div>\n ))}\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default StickyStackedCards;\n","import { useRef } from \"react\";\nimport {\n motion,\n useScroll,\n useSpring,\n useTransform,\n useMotionTemplate,\n type MotionValue,\n} from \"framer-motion\";\nimport type { CTABannerProps, AvatarItem } from \"./CTABanner.types\";\nimport { Button } from \"../../primitives/Button\";\nimport \"./CTABanner.css\";\n\n/* ── Entrance distance constants ─────────────────────────────────\n * How far from the centre each tier starts before scrolling in.\n * Values are intentionally large so the \"coming from far away\"\n * effect is clearly visible. Each avatar moves radially outward\n * from the centre — top avatars fly in from above, left avatars\n * from the left, corners from their diagonal, etc.\n *\n * Tier mapping (by staggerRank / distance from centre):\n * near → rank 0–1 → 80px\n * mid → rank 2–5 → 130px\n * far → rank 6–8 → 180px\n * edge → rank 9–11 → 240px (corners, most dramatic)\n *\n * blurStart: initial CSS blur in px when section enters.\n * blurStart corresponds to --spacing-16 (1rem = 16px).\n */\nconst ENTRANCE = {\n near: 80,\n mid: 130,\n far: 180,\n edge: 240,\n blurStart: 28,\n} as const;\n\n/* ── Spring config ───────────────────────────────────────────────\n * Wrapping scrollYProgress in useSpring adds a slight lag that\n * makes the parallax feel organic rather than mechanically locked\n * to the scroll wheel.\n *\n */\nconst SPRING = { stiffness: 80, damping: 30, restDelta: 0.001 } as const;\n\n/* ── Scroll range ────────────────────────────────────────────────\n * Avatars settle into their final grid positions by this progress\n * value (0 = section just entering viewport, 0.5 = section\n * centred). After LOCK_AT, y stays clamped at 0 — they \"snap\" to\n * the grid without continuing to move.\n */\nconst LOCK_AT = 0.5;\n\n/* ── Default data ────────────────────────────────────────────────\n * Desktop positions: 9-row stage (9 × 96px = 864px).\n * Stage centre = 432px = row 4 centre → hero aligns with mid-left/right.\n * Equal 1-cell breathing room top (row 1) and bottom (row 7 bottom = 768px, stage = 864px).\n *\n * Row 1 (y=96): col 0, 6, 12 — top outer (3 avatars)\n * Row 2 (y=192): col 3, 9 — upper inner (2 avatars)\n * Row 4 (y=384): col 0, 12 — mid, hero level (2 avatars)\n * Row 6 (y=576): col 3, 9 — lower inner (2 avatars)\n * Row 7 (y=672): col 0, 6, 12 — bottom outer (3 avatars)\n *\n * Mobile/tablet: identical layout to the compact variant (6 avatars).\n *\n * staggerRank: Euclidean distance rank from stage centre (col 6.5, row 4).\n * 0 = closest → slowest parallax (near tier)\n * 11 = furthest (corner) → fastest parallax (edge tier)\n */\n\nconst PLACEHOLDER_URL =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86ce1a_footer-member-5.webp\";\n\nexport const AVATAR_DATA: AvatarItem[] = [\n /* ── Rank 0 — top-centre (col 6, row 1) ─────── */\n {\n id: 12, staggerRank: 0, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 6)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobileVisible: true,\n },\n /* ── Rank 1 — bot-centre (col 6, row 7) ─────── */\n {\n id: 11, staggerRank: 1, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 6)\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 2 — upper-inner-left (col 3, row 2) ── */\n {\n id: 3, staggerRank: 2, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 3)\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 3 — upper-inner-right (col 9, row 2) ── */\n {\n id: 6, staggerRank: 3, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 9)\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 4 — lower-inner-left (col 3, row 6) ── */\n {\n id: 1, staggerRank: 4, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 3)\", top: \"calc(var(--ctab-grid-cell) * 6)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 9)\" },\n mobileVisible: true,\n },\n /* ── Rank 5 — lower-inner-right (col 9, row 6) ── */\n {\n id: 10, staggerRank: 5, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 9)\", top: \"calc(var(--ctab-grid-cell) * 6)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 6 — mid-left (col 0, row 4) ──────── */\n {\n id: 5, staggerRank: 6, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 4)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 7 — mid-right (col 12, row 4) ────── */\n {\n id: 8, staggerRank: 7, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 4)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 8 — top-left corner (col 0, row 1) ── */\n {\n id: 4, staggerRank: 8, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 9 — top-right corner (col 12, row 1) ── */\n {\n id: 7, staggerRank: 9, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 10 — bot-left corner (col 0, row 7) ── */\n {\n id: 2, staggerRank: 10, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 11 — bot-right corner (col 12, row 7) ── */\n {\n id: 9, staggerRank: 11, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n];\n\n/* ── Compact variant data ────────────────────────────────────────\n * 7 desktop avatars within the 1280 × 680 stage (Figma node 6865-13441).\n * Desktop grid cell = 96px. Positions as col/row multiples.\n *\n * Mobile reuses the standard 6-avatar mobile layout (same positions).\n */\nexport const COMPACT_AVATAR_DATA: AvatarItem[] = [\n /* ── Rank 0 — top-centre (col ~6, row 1) ── */\n {\n id: 12, staggerRank: 0, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobileVisible: true,\n },\n /* ── Rank 1 — top-left (col 2, row 1) ───── */\n {\n id: 3, staggerRank: 1, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 2 — top-right (col 10, row 1) ─── */\n {\n id: 6, staggerRank: 2, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 10)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 3 — mid-left (col 0, row 3) ────── */\n {\n id: 5, staggerRank: 3, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 3)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 4 — mid-right (col 12, row 3) ──── */\n {\n id: 8, staggerRank: 4, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 3)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 5 — bot-left (col 2, row 5) ────── */\n {\n id: 1, staggerRank: 5, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 2)\", top: \"calc(var(--ctab-grid-cell) * 5)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 9)\" },\n mobileVisible: true,\n },\n /* ── Rank 6 — bot-right (col 10, row 5) — desktop only ─── */\n {\n id: 11, staggerRank: 6, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 10)\", top: \"calc(var(--ctab-grid-cell) * 5)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n];\n\n/* ── Avatar radial entrance hooks ────────────────────────────────\n *\n * Hooks cannot be called inside a loop, so each of the 12\n * useTransform calls is explicit and always runs in the same order.\n * Index maps directly to AVATAR_DATA order (= staggerRank order).\n *\n * Y sign: + = avatar starts BELOW final position (bottom half)\n * - = avatar starts ABOVE final position (top half)\n * 0 = avatar is on the horizontal mid-line\n *\n * X sign: + = avatar starts to the RIGHT (right half)\n * - = avatar starts to the LEFT (left half)\n * 0 = avatar is on the vertical mid-line\n *\n * rank 0 (col 6, row 1) top-centre → X=0, Y=-near\n * rank 1 (col 6, row 7) bot-centre → X=0, Y=+near\n * rank 2 (col 3, row 2) upper-inner-left → X=-mid, Y=-mid\n * rank 3 (col 9, row 2) upper-inner-right → X=+mid, Y=-mid\n * rank 4 (col 3, row 6) lower-inner-left → X=-mid, Y=+mid\n * rank 5 (col 9, row 6) lower-inner-right → X=+mid, Y=+mid\n * rank 6 (col 0, row 4) mid-left → X=-far, Y=0\n * rank 7 (col 12, row 4) mid-right → X=+far, Y=0\n * rank 8 (col 0, row 1) top-left corner → X=-edge, Y=-edge\n * rank 9 (col 12, row 1) top-right corner → X=+edge, Y=-edge\n * rank 10 (col 0, row 7) bot-left corner → X=-edge, Y=+edge\n * rank 11 (col 12, row 7) bot-right corner → X=+edge, Y=+edge\n */\nfunction useAvatarYValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]); // top-centre\n const y1 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.near, 0]); // bot-centre\n const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-left\n const y3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-right\n const y4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-left\n const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-right\n const y6 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-left (no Y)\n const y7 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-right (no Y)\n const y8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-left corner\n const y9 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-right corner\n const y10 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-left corner\n const y11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-right corner\n return [y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11];\n}\n\nfunction useAvatarXValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // top-centre (no X)\n const x1 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // bot-centre (no X)\n const x2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-left\n const x3 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // upper-inner-right\n const x4 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // lower-inner-left\n const x5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-right\n const x6 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]); // mid-left\n const x7 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]); // mid-right\n const x8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-left corner\n const x9 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // top-right corner\n const x10 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // bot-left corner\n const x11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-right corner\n return [x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11];\n}\n\n/* ── Compact variant parallax hooks (7 avatars) ──────────────────\n *\n * rank 0 (top-centre): X=0, Y=-near\n * rank 1 (top-left): X=-mid, Y=-mid\n * rank 2 (top-right): X=+mid, Y=-mid\n * rank 3 (mid-left): X=-far, Y=0\n * rank 4 (mid-right): X=+far, Y=0\n * rank 5 (bot-left): X=-mid, Y=+mid\n * rank 6 (bot-right): X=+mid, Y=+mid\n */\nfunction useCompactAvatarYValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]); // top-centre\n const y1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-left\n const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-right\n const y3 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-left (no Y)\n const y4 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-right (no Y)\n const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-left\n const y6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-right\n return [y0, y1, y2, y3, y4, y5, y6];\n}\n\nfunction useCompactAvatarXValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // top-centre (no X)\n const x1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-left\n const x2 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // top-right\n const x3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]); // mid-left\n const x4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]); // mid-right\n const x5 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // bot-left\n const x6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-right\n return [x0, x1, x2, x3, x4, x5, x6];\n}\n\n/* ── CTABanner ────────────────────────────────────────────────── */\n\nexport const CTABanner = ({\n headline = \"Short section title goes here\",\n ctaLabel = \"Open account\",\n ctaHref = \"#\",\n avatars,\n variant = \"standard\",\n className,\n ...props\n}: CTABannerProps) => {\n const resolvedAvatars = avatars ?? (variant === \"compact\" ? COMPACT_AVATAR_DATA : AVATAR_DATA);\n const sectionRef = useRef<HTMLElement>(null);\n\n /* Track scroll progress as section crosses the viewport.\n * offset: \"start end\" = section top reaches viewport bottom → progress 0\n * offset: \"end start\" = section bottom reaches viewport top → progress 1\n * The spring smooths the raw scroll value into the organic\n * \"butter\" feel that matches the video reference. */\n const { scrollYProgress } = useScroll({\n target: sectionRef,\n offset: [\"start end\", \"end start\"],\n });\n\n const smooth = useSpring(scrollYProgress, SPRING);\n\n /* ── Grid: fade in as section enters ── */\n const gridOpacity = useTransform(smooth, [0, 0.3], [0, 1]);\n\n /* ── Hero: slight upward rise + fade ── */\n const heroY = useTransform(smooth, [0, LOCK_AT], [32, 0]);\n const heroOpacity = useTransform(smooth, [0, 0.3], [0, 1]);\n\n /* ── Avatar fade: all avatars share one opacity track ── */\n const avatarOpacity = useTransform(smooth, [0, 0.25], [0, 1]);\n\n /* ── Avatar blur: clears from blurStart → 0 as section enters ──\n * useMotionTemplate builds a valid CSS filter string so Framer\n * Motion can interpolate it at 60fps without touching the DOM\n * style attribute directly. */\n const blurPx = useTransform(smooth, [0, 0.3, 0.7, 1], [ENTRANCE.blurStart, 0, 0, ENTRANCE.blurStart]);\n const avatarFilter = useMotionTemplate`blur(${blurPx}px)`;\n\n /* ── Per-avatar radial entrance ── */\n const standardYValues = useAvatarYValues(smooth);\n const standardXValues = useAvatarXValues(smooth);\n const compactYValues = useCompactAvatarYValues(smooth);\n const compactXValues = useCompactAvatarXValues(smooth);\n\n const avatarYValues = variant === \"compact\" ? compactYValues : standardYValues;\n const avatarXValues = variant === \"compact\" ? compactXValues : standardXValues;\n\n return (\n <section\n ref={sectionRef}\n className={[\"ctab\", variant === \"compact\" ? \"ctab--compact\" : \"\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* ── Background grid ─────────────────────────────────── */}\n <motion.div\n className=\"ctab__grid\"\n style={{ opacity: gridOpacity }}\n aria-hidden=\"true\"\n />\n\n {/* ── Content stage ───────────────────────────────────── */}\n <div className=\"ctab__inner\">\n <div className=\"ctab__stage\">\n\n {/* ── Floating avatars ─────────────────────────────────\n * Position supplied as inline CSS custom properties so the\n * CSS token layer controls all sizing/spacing.\n *\n * Framer Motion controls only `y` (scroll-driven parallax)\n * and `opacity` (scroll-driven fade). No fixed initial\n * state — the animation is tied continuously to scroll.\n */}\n {resolvedAvatars.map((avatar, index) => {\n const posStyle: Record<string, string> = {};\n if (avatar.desktopPos.left) posStyle[\"--av-d-left\"] = avatar.desktopPos.left;\n if (avatar.desktopPos.right) posStyle[\"--av-d-right\"] = avatar.desktopPos.right;\n if (avatar.desktopPos.top) posStyle[\"--av-d-top\"] = avatar.desktopPos.top;\n if (avatar.mobilePos?.left) posStyle[\"--av-m-left\"] = avatar.mobilePos.left;\n if (avatar.mobilePos?.right) posStyle[\"--av-m-right\"] = avatar.mobilePos.right;\n if (avatar.mobilePos?.top) posStyle[\"--av-m-top\"] = avatar.mobilePos.top;\n\n return (\n <motion.div\n key={avatar.id}\n className={[\n \"ctab__avatar\",\n !avatar.mobileVisible ? \"ctab__avatar--desktop-only\" : \"\",\n ].filter(Boolean).join(\" \")}\n style={{\n ...(posStyle as React.CSSProperties),\n x: avatarXValues[index],\n y: avatarYValues[index],\n opacity: avatarOpacity,\n filter: avatarFilter,\n }}\n >\n <img\n src={avatar.imageUrl}\n alt=\"\"\n loading=\"lazy\"\n draggable={false}\n />\n </motion.div>\n );\n })}\n\n {/* ── Hero — headline + CTA ──────────────────── */}\n <motion.div\n className=\"ctab__hero\"\n style={{ y: heroY, opacity: heroOpacity }}\n >\n <h2 className=\"ctab__headline\">{headline}</h2>\n <a href={ctaHref}>\n <Button colorScheme=\"black\" variant=\"primary\" label={ctaLabel} />\n </a>\n </motion.div>\n\n </div>\n </div>\n </section>\n );\n};\n\nexport default CTABanner;\n","import { useRef, useState, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport type { NavbarProps, NavItem, NavDropdownFeature, NavDropdownSection, LanguageItem } from \"./Navbar.types\";\nimport { Button } from \"../../primitives/Button\";\nimport GLOBE_ICON from \"../../assets/icon-globe.svg\";\nimport \"./Navbar.css\";\n\n/* ── Animation config ────────────────────────────────────────── */\n\nconst EASE_OUT_EXPO = [0.16, 1, 0.3, 1] as const;\n\nconst dropdownVariants = {\n hidden: { opacity: 0, scale: 0.96, y: -8 },\n visible: { opacity: 1, scale: 1, y: 0 },\n};\n\nconst drawerVariants = {\n hidden: { y: \"-100%\" },\n visible: { y: 0 },\n};\n\nconst accordionVariants = {\n hidden: { height: 0, opacity: 0 },\n visible: { height: \"auto\", opacity: 1 },\n};\n\n/* ── Inline SVG icons ────────────────────────────────────────── */\n\nconst ChevronDownIcon = ({ className }: { className?: string }) => (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.625 4.8125L7 9.1875L11.375 4.8125\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ArrowRightIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M2.625 7H11.375M11.375 7L7.875 3.5M11.375 7L7.875 10.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ArrowUpRightIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4.5 11.5L11.5 4.5M11.5 4.5H5.5M11.5 4.5V10.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst BarsIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M2.5 5H17.5M2.5 10H17.5M2.5 15H17.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nconst XMarkIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M15 5L5 15M5 5L15 15\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nconst ChevronLeftIcon = ({ className }: { className?: string }) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M15 18L9 12L15 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst GlobeIcon = ({ className }: { className?: string }) => (\n <img src={GLOBE_ICON} alt=\"\" aria-hidden=\"true\" width=\"20\" height=\"20\" className={className} />\n);\n\n/* ── Desktop Dropdown Panel ──────────────────────────────────── */\n\ninterface DropdownPanelProps {\n item: NavItem;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n}\n\nconst DropdownPanel = ({ item, onMouseEnter, onMouseLeave }: DropdownPanelProps) => {\n const { dropdown } = item;\n if (!dropdown) return null;\n\n return (\n <motion.div\n className=\"navbar__dropdown\"\n variants={dropdownVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.18, ease: EASE_OUT_EXPO }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"navbar__dropdown-inner\">\n {/* Left: link columns */}\n <div className=\"navbar__dropdown-left\">\n {dropdown.columns.map((col, colIdx) => (\n <div key={colIdx} className=\"navbar__dropdown-col\">\n {col.sections.map((section: NavDropdownSection) => (\n <div key={section.title} className=\"navbar__dropdown-col-list\">\n <p className=\"navbar__dropdown-col-title\">{section.title}</p>\n {section.items.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"navbar__dropdown-link\"\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n >\n {link.label}\n {link.external ? <ArrowUpRightIcon /> : <ArrowRightIcon />}\n </a>\n ))}\n </div>\n ))}\n </div>\n ))}\n </div>\n\n {/* Right: feature card */}\n {dropdown.feature && (\n <div className=\"navbar__dropdown-right\">\n <FeatureCard feature={dropdown.feature} />\n </div>\n )}\n </div>\n </motion.div>\n );\n};\n\n/* ── Feature Card (shared desktop + mobile) ──────────────────── */\n\ninterface FeatureCardProps {\n feature: NavDropdownFeature;\n mobile?: boolean;\n}\n\nconst FeatureCard = ({ feature, mobile }: FeatureCardProps) => (\n <div\n className={mobile ? \"navbar__drawer-feature\" : \"navbar__dropdown-feature\"}\n style={\n feature.backgroundImageUrl\n ? { backgroundImage: `url(${feature.backgroundImageUrl})` }\n : undefined\n }\n >\n {feature.backgroundImageUrl && (\n <img\n src={feature.backgroundImageUrl}\n alt=\"\"\n className={mobile ? \"navbar__drawer-feature-img\" : \"navbar__dropdown-feature-img\"}\n aria-hidden=\"true\"\n />\n )}\n <div className={mobile ? \"navbar__drawer-feature-overlay\" : \"navbar__dropdown-feature-overlay\"} aria-hidden=\"true\" />\n <div className={mobile ? \"navbar__drawer-feature-content\" : \"navbar__dropdown-feature-content\"}>\n <div>\n <p className={mobile ? \"navbar__drawer-feature-title\" : \"navbar__dropdown-feature-title\"}>\n {feature.title}\n </p>\n <p className={mobile ? \"navbar__drawer-feature-desc\" : \"navbar__dropdown-feature-desc\"}>\n {feature.description}\n </p>\n </div>\n <a\n href={feature.ctaHref}\n className={mobile ? \"navbar__drawer-feature-cta\" : \"navbar__dropdown-feature-cta\"}\n >\n {feature.ctaLabel}\n <ArrowRightIcon />\n </a>\n </div>\n </div>\n);\n\n/* ── Mobile Accordion Item ───────────────────────────────────── */\n\ninterface DrawerAccordionProps {\n item: NavItem;\n isOpen: boolean;\n onToggle: () => void;\n}\n\nconst DrawerAccordion = ({ item, isOpen, onToggle }: DrawerAccordionProps) => {\n const { dropdown } = item;\n\n return (\n <div className=\"navbar__drawer-item\">\n <button\n className={`navbar__drawer-trigger ${isOpen ? \"navbar__drawer-trigger--open\" : \"\"}`}\n onClick={onToggle}\n aria-expanded={isOpen}\n >\n {item.label}\n <ChevronDownIcon className=\"navbar__drawer-trigger__chevron\" />\n </button>\n\n <AnimatePresence initial={false}>\n {isOpen && dropdown && (\n <motion.div\n className=\"navbar__drawer-panel\"\n variants={accordionVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.22, ease: EASE_OUT_EXPO }}\n >\n <div className=\"navbar__drawer-panel-inner\">\n {/* Link columns — each column's sections stack vertically */}\n <div className=\"navbar__drawer-panel-cols\">\n {dropdown.columns.map((col, colIdx) => (\n <div key={colIdx} className=\"navbar__drawer-panel-col\">\n {col.sections.map((section: NavDropdownSection) => (\n <div key={section.title} className=\"navbar__drawer-col-section\">\n <p className=\"navbar__drawer-col-title\">{section.title}</p>\n <div className=\"navbar__drawer-col-links\">\n {section.items.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"navbar__drawer-link\"\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n >\n {link.label}\n </a>\n ))}\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n\n {/* Feature card */}\n {dropdown.feature && (\n <FeatureCard feature={dropdown.feature} mobile />\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n\n/* ── Navbar ───────────────────────────────────────────────────── */\n\nexport const Navbar = ({\n theme = \"dark\",\n logoSrc,\n logoSrcDark,\n logoHref = \"/\",\n navItems = [],\n loginLabel = \"Log in\",\n loginHref,\n ctaLabel = \"Open account\",\n ctaHref,\n languageLabel,\n onLanguageClick,\n languageItems,\n activeLanguageCode,\n onLanguageSelect,\n className,\n ...props\n}: NavbarProps) => {\n const [openDropdown, setOpenDropdown] = useState<string | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpanded, setMobileExpanded] = useState<string | null>(null);\n const [scrolled, setScrolled] = useState(false);\n const [langDropdownOpen, setLangDropdownOpen] = useState(false);\n const [mobileLangOpen, setMobileLangOpen] = useState(false);\n\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const langHoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pillAreaRef = useRef<HTMLDivElement>(null);\n const langBtnRef = useRef<HTMLButtonElement>(null);\n\n const hasLangDropdown = Boolean(languageItems && languageItems.length > 0);\n\n const resolvedLogo = theme === \"light\" ? (logoSrcDark ?? logoSrc) : logoSrc;\n\n /* ── Scroll detection ── */\n useEffect(() => {\n const onScroll = () => setScrolled(window.scrollY > 0);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, []);\n\n /* ── Close on Escape ── */\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpenDropdown(null);\n setMobileOpen(false);\n setMobileLangOpen(false);\n }\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, []);\n\n /* ── Reset language panel when drawer closes ── */\n useEffect(() => {\n if (!mobileOpen) setMobileLangOpen(false);\n }, [mobileOpen]);\n\n /* ── Body scroll lock when drawer is open ── */\n useEffect(() => {\n document.body.style.overflow = mobileOpen ? \"hidden\" : \"\";\n return () => { document.body.style.overflow = \"\"; };\n }, [mobileOpen]);\n\n /* ── Close dropdown on outside click ── */\n useEffect(() => {\n if (!openDropdown) return;\n const onPointerDown = (e: PointerEvent) => {\n if (pillAreaRef.current && !pillAreaRef.current.contains(e.target as Node)) {\n setOpenDropdown(null);\n }\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [openDropdown]);\n\n /* ── Hover handlers with debounce ── */\n const clearHoverTimeout = useCallback(() => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = null;\n }\n }, []);\n\n /* ── Language dropdown hover handlers ── */\n const clearLangHoverTimeout = useCallback(() => {\n if (langHoverTimeoutRef.current) {\n clearTimeout(langHoverTimeoutRef.current);\n langHoverTimeoutRef.current = null;\n }\n }, []);\n\n const handleLangEnter = useCallback(() => {\n clearLangHoverTimeout();\n setLangDropdownOpen(true);\n }, [clearLangHoverTimeout]);\n\n const handleLangLeave = useCallback(() => {\n clearLangHoverTimeout();\n langHoverTimeoutRef.current = setTimeout(() => setLangDropdownOpen(false), 150);\n }, [clearLangHoverTimeout]);\n\n const handleLangSelect = useCallback((code: string) => {\n setLangDropdownOpen(false);\n setMobileLangOpen(false);\n onLanguageSelect?.(code);\n }, [onLanguageSelect]);\n\n const handleNavEnter = useCallback((label: string) => {\n clearHoverTimeout();\n setOpenDropdown(label);\n }, [clearHoverTimeout]);\n\n const handleNavLeave = useCallback(() => {\n clearHoverTimeout();\n hoverTimeoutRef.current = setTimeout(() => setOpenDropdown(null), 120);\n }, [clearHoverTimeout]);\n\n const activeDropdownItem = navItems.find((item) => item.label === openDropdown);\n\n /* ── Render ── */\n return (\n <nav\n className={[\"navbar\", `navbar--${theme}`, scrolled && \"navbar--scrolled\", mobileOpen && \"navbar--menu-open\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"navbar__bar\">\n\n {/* Logo */}\n <a href={logoHref} className=\"navbar__logo\" aria-label=\"Home\">\n <img src={resolvedLogo} alt=\"Logo\" />\n </a>\n\n {/* ── Desktop pill (full-width centering layer) ── */}\n <div className=\"navbar__nav-center\" ref={pillAreaRef}>\n <div className=\"navbar__pill\">\n\n {/* Logo — hidden by default, slides in when scrolled (desktop) */}\n <a href={logoHref} className=\"navbar__pill-logo\" aria-label=\"Home\">\n <img src={logoSrcDark ?? logoSrc} alt=\"Logo\" />\n </a>\n\n {/* Nav items + language switcher */}\n <div className=\"navbar__nav-group\">\n {navItems.map((item) => {\n if (item.external) {\n return (\n <a\n key={item.label}\n href={item.href}\n className=\"navbar__nav-item\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {item.label}\n <ArrowUpRightIcon />\n </a>\n );\n }\n\n if (item.dropdown) {\n return (\n <button\n key={item.label}\n className={[\n \"navbar__nav-item\",\n openDropdown === item.label ? \"navbar__nav-item--open\" : \"\",\n ].filter(Boolean).join(\" \")}\n onMouseEnter={() => handleNavEnter(item.label)}\n onMouseLeave={handleNavLeave}\n aria-expanded={openDropdown === item.label}\n aria-haspopup=\"true\"\n >\n {item.label}\n <ChevronDownIcon className=\"navbar__nav-item__chevron\" />\n </button>\n );\n }\n\n return (\n <a key={item.label} href={item.href} className=\"navbar__nav-item\">\n {item.label}\n </a>\n );\n })}\n\n {/* Language switcher — inside nav-group so spacing matches nav items */}\n {languageLabel && (\n <div\n className=\"navbar__lang-wrapper\"\n onMouseEnter={hasLangDropdown ? handleLangEnter : undefined}\n onMouseLeave={hasLangDropdown ? handleLangLeave : undefined}\n >\n <button\n ref={langBtnRef}\n className={[\n \"navbar__nav-item\",\n \"navbar__lang-btn\",\n hasLangDropdown && langDropdownOpen ? \"navbar__nav-item--open\" : \"\",\n ].filter(Boolean).join(\" \")}\n onClick={hasLangDropdown ? () => setLangDropdownOpen((o) => !o) : onLanguageClick}\n aria-haspopup={hasLangDropdown ? \"true\" : undefined}\n aria-expanded={hasLangDropdown ? langDropdownOpen : undefined}\n >\n <GlobeIcon className=\"navbar__lang-globe\" />\n {languageLabel}\n </button>\n </div>\n )}\n </div>\n\n {/* CTA buttons — hidden by default, slides in when scrolled (desktop) */}\n <div className=\"navbar__pill-actions\">\n {loginHref && (\n <a href={loginHref}>\n <Button colorScheme=\"black\" variant=\"secondary\" label={loginLabel} />\n </a>\n )}\n {ctaHref && (\n <a href={ctaHref}>\n <Button colorScheme=\"coral\" variant=\"primary\" label={ctaLabel} />\n </a>\n )}\n </div>\n </div>\n </div>\n\n {/* ── Desktop dropdown — child of navbar__bar (position:relative,\n full viewport width), so left:50% + translateX(-50%)\n centres relative to the screen ── */}\n <AnimatePresence>\n {openDropdown && activeDropdownItem?.dropdown && (\n <DropdownPanel\n key=\"dropdown\"\n item={activeDropdownItem}\n onMouseEnter={clearHoverTimeout}\n onMouseLeave={handleNavLeave}\n />\n )}\n </AnimatePresence>\n\n {/* ── Desktop language dropdown — same positioning as nav dropdown,\n child of navbar__bar so it centres relative to the screen ── */}\n <AnimatePresence>\n {hasLangDropdown && langDropdownOpen && (\n <motion.div\n className=\"navbar__lang-dropdown\"\n variants={dropdownVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.18, ease: EASE_OUT_EXPO }}\n onMouseEnter={clearLangHoverTimeout}\n onMouseLeave={handleLangLeave}\n >\n <div\n className=\"navbar__lang-dropdown-grid\"\n style={{ \"--lang-rows\": Math.ceil(languageItems!.length / 3) } as React.CSSProperties}\n >\n {languageItems!.map((lang) => (\n <button\n key={lang.code}\n className={[\n \"navbar__lang-dropdown-item\",\n lang.code === activeLanguageCode\n ? \"navbar__lang-dropdown-item--active\"\n : \"\",\n ].filter(Boolean).join(\" \")}\n onClick={() => handleLangSelect(lang.code)}\n >\n {lang.label}\n </button>\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* ── Desktop CTA buttons ── */}\n <div className=\"navbar__actions\">\n {loginHref && (\n <a href={loginHref} className=\"navbar__actions-login\">\n <Button\n colorScheme={theme === \"dark\" ? \"white\" : \"black\"}\n variant=\"secondary\"\n label={loginLabel}\n />\n </a>\n )}\n {ctaHref && (\n <a href={ctaHref}>\n <Button colorScheme=\"coral\" variant=\"primary\" label={ctaLabel} />\n </a>\n )}\n </div>\n\n {/* ── Mobile: Login + Hamburger ── */}\n <div className=\"navbar__mobile-actions\">\n {loginHref && (\n <a href={loginHref}>\n <Button\n colorScheme={scrolled || theme === \"light\" ? \"black\" : \"white\"}\n variant=\"secondary\"\n label={loginLabel}\n />\n </a>\n )}\n <button\n className=\"navbar__mobile-trigger\"\n onClick={() => setMobileOpen((o) => !o)}\n aria-label={mobileOpen ? \"Close navigation menu\" : \"Open navigation menu\"}\n >\n {mobileOpen ? <XMarkIcon /> : <BarsIcon />}\n </button>\n </div>\n\n </div>\n\n {/* ── Mobile drawer ── */}\n {/* Clip container: prevents the drawer from showing above the bar\n during open/close animation */}\n <div className=\"navbar__drawer-clip\">\n <AnimatePresence>\n {mobileOpen && (\n <motion.div\n className=\"navbar__drawer\"\n variants={drawerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={{ duration: 0.3, ease: EASE_OUT_EXPO }}\n aria-modal=\"true\"\n role=\"dialog\"\n aria-label=\"Navigation menu\"\n >\n {/* Drawer nav */}\n <nav className=\"navbar__drawer-nav\">\n {navItems.map((item) => {\n if (item.dropdown) {\n return (\n <DrawerAccordion\n key={item.label}\n item={item}\n isOpen={mobileExpanded === item.label}\n onToggle={() =>\n setMobileExpanded((prev) =>\n prev === item.label ? null : item.label\n )\n }\n />\n );\n }\n\n return (\n <a\n key={item.label}\n href={item.href}\n className=\"navbar__drawer-single\"\n target={item.external ? \"_blank\" : undefined}\n rel={item.external ? \"noopener noreferrer\" : undefined}\n >\n {item.label}\n {item.external && <ArrowUpRightIcon />}\n </a>\n );\n })}\n\n {/* Language — simple button (no dropdown items) */}\n {languageLabel && !hasLangDropdown && (\n <button className=\"navbar__drawer-lang\" onClick={onLanguageClick}>\n <GlobeIcon className=\"navbar__lang-globe\" />\n {languageLabel}\n </button>\n )}\n {/* Language — opens full-screen language panel */}\n {languageLabel && hasLangDropdown && (\n <button\n className=\"navbar__drawer-lang\"\n onClick={() => setMobileLangOpen(true)}\n >\n <GlobeIcon className=\"navbar__lang-globe\" />\n {languageLabel}\n </button>\n )}\n </nav>\n\n {/* Drawer footer CTAs — hidden when language panel is open */}\n {!mobileLangOpen && (\n <div className=\"navbar__drawer-footer\">\n {loginHref && (\n <a href={loginHref} style={{ display: \"block\" }}>\n <Button\n colorScheme=\"black\"\n variant=\"secondary\"\n label={loginLabel}\n fullWidth\n />\n </a>\n )}\n {ctaHref && (\n <a href={ctaHref} style={{ display: \"block\" }}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={ctaLabel}\n fullWidth\n />\n </a>\n )}\n </div>\n )}\n\n {/* ── Mobile language full-screen panel ── */}\n <AnimatePresence>\n {hasLangDropdown && mobileLangOpen && (\n <motion.div\n className=\"navbar__drawer-lang-panel\"\n initial={{ y: \"100%\" }}\n animate={{ y: 0 }}\n exit={{ y: \"100%\" }}\n transition={{ duration: 0.25, ease: EASE_OUT_EXPO }}\n >\n <button\n className=\"navbar__drawer-lang-back\"\n onClick={() => setMobileLangOpen(false)}\n aria-label=\"Back to menu\"\n >\n <ChevronLeftIcon />\n </button>\n\n <div className=\"navbar__drawer-lang-grid\">\n {languageItems!.map((lang) => (\n <button\n key={lang.code}\n className={[\n \"navbar__drawer-lang-item\",\n lang.code === activeLanguageCode\n ? \"navbar__drawer-lang-item--active\"\n : \"\",\n ].filter(Boolean).join(\" \")}\n onClick={() => handleLangSelect(lang.code)}\n >\n {lang.label}\n </button>\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </nav>\n );\n};\n\nexport default Navbar;\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n motion,\n useScroll,\n useSpring,\n useTransform,\n useMotionTemplate,\n} from \"framer-motion\";\nimport type { DayNightTransitionProps } from \"./DayNightTransition.types\";\nimport {\n webflowV2DayClipPercent,\n webflowV2DayWordOpacity,\n webflowV2DescriptionColor,\n webflowV2NightWordOpacity,\n webflowV2TitleColor,\n type WebflowDayNightV2Media,\n} from \"./webflowDayNightV2Ix\";\nimport \"./DayNightTransition.css\";\n\n/* ── Spring config (default preset only) ──────────────────────── */\nconst SPRING = { stiffness: 80, damping: 30, restDelta: 0.001 } as const;\n\nconst FADE_START = 0.35;\nconst FADE_END = 0.65;\n\n/** Webflow V2 desktop (>991px): dual headline/description crossfade on section `scrollYProgress`. */\nconst V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START = 0.49;\nconst V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END = 0.52;\n\n/** Webflow V2 mobile (≤991px): same crossfade, separate IX-aligned band. */\nconst V2_TEXT_SCROLL_CROSSFADE_MOBILE_START = 0.58;\nconst V2_TEXT_SCROLL_CROSSFADE_MOBILE_END = 0.61;\n\nconst TEXT_CHANNEL_DAY = 0;\nconst TEXT_CHANNEL_NIGHT = 255;\n\n/** Piecewise linear between (t0,v0) and (t1,v1); clamps outside [t0,t1]. */\nconst seg = (t: number, t0: number, t1: number, v0: number, v1: number) => {\n if (t <= t0) return v0;\n if (t >= t1) return v1;\n return v0 + (v1 - v0) * ((t - t0) / (t1 - t0));\n};\n\n/* ── DayNightTransition ───────────────────────────────────────── */\n\nexport const DayNightTransition = ({\n dayImageUrl,\n nightImageUrl,\n dayHeadline = \"Medium length section title goes here\",\n nightHeadline = \"Medium length section title goes here\",\n dayDescription = \"Description goes here. Description goes here. Description goes here.\",\n nightDescription = \"Description goes here. Description goes here. Description goes here.\",\n ctaLabel = \"Get started\",\n ctaHref = \"#\",\n hideCta = false,\n headlineLevel = \"h2\",\n descriptionLevel = \"body-md\",\n inlineDayNightHeadline,\n scrollPreset = \"default\",\n className,\n ...props\n}: DayNightTransitionProps) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const dayWordRef = useRef<HTMLSpanElement>(null);\n\n const [nightMarginStart, setNightMarginStart] = useState(\"0px\");\n const [nightMarginEnd, setNightMarginEnd] = useState(\"0px\");\n\n const [ixMedia, setIxMedia] = useState<WebflowDayNightV2Media>(\"desktop\");\n\n const webflowV2 = scrollPreset === \"webflow-day-night-v2\";\n\n useEffect(() => {\n const mq = window.matchMedia(\"(max-width: 991px)\");\n const sync = () => setIxMedia(mq.matches ? \"mobile\" : \"desktop\");\n sync();\n mq.addEventListener(\"change\", sync);\n return () => mq.removeEventListener(\"change\", sync);\n }, []);\n\n const MotionHeadline = headlineLevel === \"h1\" ? motion.h1 : motion.h2;\n\n useLayoutEffect(() => {\n if (!inlineDayNightHeadline) return;\n\n const syncNightPull = () => {\n const dayEl = dayWordRef.current;\n if (!dayEl) return;\n const w = dayEl.offsetWidth;\n const doc = document.documentElement;\n const rtl =\n doc.getAttribute(\"dir\") === \"rtl\" ||\n doc.lang.toLowerCase().startsWith(\"ar\");\n if (rtl) {\n setNightMarginStart(\"0px\");\n setNightMarginEnd(w ? `-${w}px` : \"0px\");\n } else {\n setNightMarginStart(w ? `-${w}px` : \"0px\");\n setNightMarginEnd(\"0px\");\n }\n };\n\n syncNightPull();\n const ro = new ResizeObserver(syncNightPull);\n if (dayWordRef.current) ro.observe(dayWordRef.current);\n window.addEventListener(\"resize\", syncNightPull);\n return () => {\n ro.disconnect();\n window.removeEventListener(\"resize\", syncNightPull);\n };\n }, [\n inlineDayNightHeadline,\n inlineDayNightHeadline?.dayWord,\n inlineDayNightHeadline?.nightWord,\n inlineDayNightHeadline?.prefix,\n ]);\n\n const { scrollYProgress } = useScroll({\n target: wrapperRef,\n offset: [\"start end\", \"end start\"],\n });\n\n /* Webflow IX uses raw scroll progress (smoothing:50 is mild; spring would skew keyframes). */\n const smooth = useSpring(scrollYProgress, SPRING);\n const progress = webflowV2 ? scrollYProgress : smooth;\n\n const nightOpacity = useTransform(progress, [FADE_START, FADE_END], [0, 1]);\n const channel = useTransform(progress, [FADE_START, FADE_END], [TEXT_CHANNEL_DAY, TEXT_CHANNEL_NIGHT]);\n const textColor = useMotionTemplate`rgb(${channel}, ${channel}, ${channel})`;\n\n /**\n * Dual headline / description crossfade.\n * - Default: [FADE_START, FADE_END] with the night image opacity.\n * - Webflow V2: desktop vs mobile `scrollYProgress` bands (see `V2_TEXT_SCROLL_CROSSFADE_*`).\n */\n const dayOpacity = useTransform(progress, (t) => {\n if (webflowV2) {\n return ixMedia === \"mobile\"\n ? seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,\n 1,\n 0,\n )\n : seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,\n 1,\n 0,\n );\n }\n return seg(t, FADE_START, FADE_END, 1, 0);\n });\n const nightOpacity2 = useTransform(progress, (t) => {\n if (webflowV2) {\n return ixMedia === \"mobile\"\n ? seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,\n 0,\n 1,\n )\n : seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,\n 0,\n 1,\n );\n }\n return seg(t, FADE_START, FADE_END, 0, 1);\n });\n\n const v2DescColor = useTransform(progress, (t) => webflowV2DescriptionColor(t, ixMedia));\n const v2TitleColor = useTransform(progress, (t) => webflowV2TitleColor(t, ixMedia));\n const v2DayWordOp = useTransform(progress, (t) => webflowV2DayWordOpacity(t, ixMedia));\n const v2NightWordOp = useTransform(progress, (t) => webflowV2NightWordOpacity(t, ixMedia));\n /**\n * IX mobile: `STYLE_SIZE` uses **%** on `.trade-day-night_background-day` (parent = 200vh wrapper).\n * Desktop: fixed `100vh` like `.is-alternative` in Webflow CSS.\n */\n const v2DayHeight = useTransform(progress, (t) =>\n ixMedia === \"mobile\"\n ? `${webflowV2DayClipPercent(t, ixMedia)}%`\n : \"100vh\",\n );\n\n const hasDescription = Boolean(dayDescription || nightDescription);\n\n const useInlineHeadline = Boolean(inlineDayNightHeadline);\n\n const rootClass = [\n \"dnt\",\n headlineLevel === \"h1\" && \"dnt--headline-h1\",\n descriptionLevel === \"body-lg\" && \"dnt--desc-body-lg\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n ref={wrapperRef}\n className={rootClass}\n {...props}\n >\n {webflowV2 && (\n <div className=\"dnt__v2-background-wrapper\" aria-hidden=\"true\">\n {/*\n Webflow DOM order (both layers, both images):\n 1) trade-day-night_background-day\n 2) trade-day-night_background-night\n */}\n <motion.div\n className=\"dnt__v2-bg-day trade-day-night_background-day is-alternative\"\n style={{\n backgroundImage: `url(${dayImageUrl})`,\n height: v2DayHeight,\n }}\n />\n <div\n className=\"dnt__v2-bg-night trade-day-night_background-night is-alternative\"\n style={{ backgroundImage: `url(${nightImageUrl})` }}\n />\n </div>\n )}\n\n <div className={webflowV2 ? \"dnt__sticky dnt__sticky--webflow-v2\" : \"dnt__sticky\"}>\n\n {!webflowV2 && (\n <>\n <img\n className=\"dnt__bg dnt__bg--day\"\n src={dayImageUrl}\n alt=\"\"\n loading=\"eager\"\n draggable={false}\n />\n <motion.img\n className=\"dnt__bg dnt__bg--night\"\n src={nightImageUrl}\n alt=\"\"\n loading=\"eager\"\n draggable={false}\n style={{ opacity: nightOpacity }}\n />\n </>\n )}\n\n <div className=\"dnt__content\">\n <div className=\"dnt__inner\">\n {webflowV2 ? (\n <div className=\"dnt__text-wrap\">\n {useInlineHeadline && inlineDayNightHeadline ? (\n <MotionHeadline\n className=\"dnt__headline dnt__headline--inline-day-night\"\n style={{ color: v2TitleColor }}\n aria-label={`${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`}\n >\n <span className=\"dnt__headline-prefix\">\n {inlineDayNightHeadline.prefix}\n </span>\n <span className=\"dnt__headline-pair\">\n <motion.span\n ref={dayWordRef}\n className=\"dnt__headline-wday\"\n style={{ opacity: v2DayWordOp }}\n >\n {inlineDayNightHeadline.dayWord}\n </motion.span>\n <motion.span\n className=\"dnt__headline-wnight\"\n style={{\n opacity: v2NightWordOp,\n marginInlineStart: nightMarginStart,\n marginInlineEnd: nightMarginEnd,\n }}\n >\n {inlineDayNightHeadline.nightWord}\n </motion.span>\n </span>\n </MotionHeadline>\n ) : (\n <div className=\"dnt__crossfade-wrap\">\n <MotionHeadline\n className=\"dnt__headline\"\n style={{ color: v2TitleColor, opacity: dayOpacity }}\n >\n {dayHeadline}\n </MotionHeadline>\n <MotionHeadline\n className=\"dnt__headline\"\n aria-hidden=\"true\"\n style={{ color: v2TitleColor, opacity: nightOpacity2 }}\n >\n {nightHeadline}\n </MotionHeadline>\n </div>\n )}\n\n {hasDescription && (\n <div className=\"dnt__crossfade-wrap\">\n <motion.p\n className=\"dnt__description\"\n style={{\n color: v2DescColor,\n opacity: dayOpacity,\n }}\n >\n {dayDescription ?? \"\"}\n </motion.p>\n <motion.p\n className=\"dnt__description\"\n aria-hidden=\"true\"\n style={{\n color: v2DescColor,\n opacity: nightOpacity2,\n }}\n >\n {nightDescription ?? \"\"}\n </motion.p>\n </div>\n )}\n\n {!hideCta && (\n <a href={ctaHref} className=\"dnt__btn\">\n {ctaLabel}\n </a>\n )}\n </div>\n ) : (\n <motion.div\n className=\"dnt__text-wrap\"\n style={{ color: textColor }}\n >\n {useInlineHeadline && inlineDayNightHeadline ? (\n <MotionHeadline\n className=\"dnt__headline dnt__headline--inline-day-night\"\n aria-label={`${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`}\n >\n <span className=\"dnt__headline-prefix\">\n {inlineDayNightHeadline.prefix}\n </span>\n <span className=\"dnt__headline-pair\">\n <motion.span\n ref={dayWordRef}\n className=\"dnt__headline-wday\"\n style={{ opacity: dayOpacity }}\n >\n {inlineDayNightHeadline.dayWord}\n </motion.span>\n <motion.span\n className=\"dnt__headline-wnight\"\n style={{\n opacity: nightOpacity2,\n marginInlineStart: nightMarginStart,\n marginInlineEnd: nightMarginEnd,\n }}\n >\n {inlineDayNightHeadline.nightWord}\n </motion.span>\n </span>\n </MotionHeadline>\n ) : (\n <div className=\"dnt__crossfade-wrap\">\n <MotionHeadline\n className=\"dnt__headline\"\n style={{ opacity: dayOpacity }}\n >\n {dayHeadline}\n </MotionHeadline>\n <MotionHeadline\n className=\"dnt__headline\"\n aria-hidden=\"true\"\n style={{ opacity: nightOpacity2 }}\n >\n {nightHeadline}\n </MotionHeadline>\n </div>\n )}\n\n {hasDescription && (\n <div className=\"dnt__crossfade-wrap\">\n <motion.p\n className=\"dnt__description\"\n style={{ opacity: dayOpacity }}\n >\n {dayDescription ?? \"\"}\n </motion.p>\n <motion.p\n className=\"dnt__description\"\n aria-hidden=\"true\"\n style={{ opacity: nightOpacity2 }}\n >\n {nightDescription ?? \"\"}\n </motion.p>\n </div>\n )}\n\n {!hideCta && (\n <a href={ctaHref} className=\"dnt__btn\">\n {ctaLabel}\n </a>\n )}\n </motion.div>\n )}\n </div>\n </div>\n\n </div>\n </div>\n );\n};\n\nexport default DayNightTransition;\n","/**\n * Scroll mapping reverse-engineered from Webflow IX2 in\n * `DayNightTransitionV2/js/webflow.js` (actionLists `a` = mobile, `a-2` = desktop).\n * `t` is continuous scroll progress 0 → 1 on the 200vh driver (SCROLL_PROGRESS).\n */\n\nexport type WebflowDayNightV2Media = \"desktop\" | \"mobile\";\n\n/** Description swatch from IX (STYLE_TEXT_COLOR r/g/b). */\nconst DESC_SWATCH = { r: 24, g: 28, b: 37 } as const;\n\n/** Webflow `body { color: #333 }` before IX touches description (mobile). */\nconst BODY_TEXT = { r: 51, g: 51, b: 51 } as const;\n\nconst rgb = (r: number, g: number, b: number) => `rgb(${r},${g},${b})`;\n\nconst lerp = (a: number, b: number, u: number) => a + (b - a) * u;\n\n/** Piecewise linear between (t0,v0) and (t1,v1); clamps outside [t0,t1]. */\nconst seg = (t: number, t0: number, t1: number, v0: number, v1: number) => {\n if (t <= t0) return v0;\n if (t >= t1) return v1;\n return lerp(v0, v1, (t - t0) / (t1 - t0));\n};\n\nexport function webflowV2DescriptionColor(t: number, media: WebflowDayNightV2Media): string {\n if (media === \"desktop\") {\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const white = rgb(255, 255, 255);\n /* IX kf 49 → swatch, kf 50 → white; before kf 49 inherits `body` #333. */\n if (t < 0.49) return body;\n if (t < 0.5) return dark;\n return white;\n }\n /* mobile: default body #333 until kf 58 → IX swatch, kf 59 → white. */\n const white = rgb(255, 255, 255);\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n if (t < 0.58) return body;\n if (t < 0.59) return dark;\n return white;\n}\n\n/** Title / prefix colour on `.trade-day-night_title.new-heading-style-h1`. */\nexport function webflowV2TitleColor(t: number, media: WebflowDayNightV2Media): string {\n if (media === \"desktop\") {\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n const black = rgb(0, 0, 0);\n const white = rgb(255, 255, 255);\n /* Title first touched at IX kf 51 (#000); before that inherits `body` #333. */\n if (t < 0.51) return body;\n if (t >= 0.52) return white;\n return seg(t, 0.51, 0.52, black, white);\n }\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const white = rgb(255, 255, 255);\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n /* IX kf 60 → dark title, kf 61 → white; before IX, title inherits `body` #333. */\n if (t < 0.6) return body;\n if (t >= 0.61) return white;\n const u = (t - 0.6) / 0.01;\n return rgb(\n lerp(DESC_SWATCH.r, 255, u),\n lerp(DESC_SWATCH.g, 255, u),\n lerp(DESC_SWATCH.b, 255, u),\n );\n}\n\nexport function webflowV2DayWordOpacity(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") {\n if (t < 0.51) return 1;\n if (t >= 0.52) return 0;\n return seg(t, 0.51, 0.52, 1, 0);\n }\n if (t < 0.6) return 1;\n if (t >= 0.61) return 0;\n return seg(t, 0.6, 0.61, 1, 0);\n}\n\nexport function webflowV2NightWordOpacity(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") {\n if (t < 0.51) return 0;\n if (t >= 0.52) return 1;\n return seg(t, 0.51, 0.52, 0, 1);\n }\n if (t < 0.6) return 0;\n if (t >= 0.61) return 1;\n return seg(t, 0.6, 0.61, 0, 1);\n}\n\n/** Scroll progress (0–1 on the 200vh driver) where mobile day-layer height finishes (IX kf 65). */\nexport const WEBFLOW_V2_DAY_CLIP_SCROLL_END = 0.65;\n\n/**\n * Mobile only: IX2 `STYLE_SIZE` height **%** on `.trade-day-night_background-day.is-alternative`\n * from keyframe **0 → 65** (parent height = `.trade-day-night_background-wrapper` / 200vh track).\n * Returns **0–100** for use as `${value}%` in Framer.\n */\nexport function webflowV2DayClipPercent(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") return 100;\n return seg(t, 0, WEBFLOW_V2_DAY_CLIP_SCROLL_END, 100, 0);\n}\n","import type { DayNightTransitionProps } from \"./DayNightTransition.types\";\n\n/**\n * **DayNightTransitionV2** Storybook preset: same headlines, body copy, CTA, and\n * typography defaults (h2 + body-md) as the **Default** story; Webflow IX2 scroll\n * timing via `scrollPreset: \"webflow-day-night-v2\"` plus `dnt--layout-v2` /\n * `dnt--webflow-v2` for layout and backgrounds.\n */\nexport const dayNightTransitionV2Preset: Pick<\n DayNightTransitionProps,\n | \"className\"\n | \"dayImageUrl\"\n | \"nightImageUrl\"\n | \"dayHeadline\"\n | \"nightHeadline\"\n | \"dayDescription\"\n | \"nightDescription\"\n | \"ctaLabel\"\n | \"ctaHref\"\n | \"scrollPreset\"\n> = {\n className: \"dnt--layout-v2 dnt--webflow-v2\",\n scrollPreset: \"webflow-day-night-v2\",\n dayImageUrl:\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86cd8f_trade_day.webp\",\n nightImageUrl:\n \"https://cdn.prod.website-files.com/66585fe0e1dc7e70cc75d440/6757df573bf331c84b6c69fe_trade_night.webp\",\n dayHeadline: \"Section title light\\n\",\n nightHeadline: \"Section title dark\\n\",\n dayDescription:\n \"This section is designed to give your visitors a quick overview of why your solution is the right choice. Use this space to provide high-level context.\\n\",\n nightDescription:\n \"This section is designed to give your visitors a quick overview of why your solution is the right choice. Use this space to provide high-level context.\",\n ctaLabel: \"Open account\",\n ctaHref: \"#\",\n};\n","import { useRef } from \"react\";\nimport {\n motion,\n useScroll,\n useVelocity,\n useAnimationFrame,\n useMotionValue,\n} from \"framer-motion\";\nimport type { LogoMarqueeProps, LogoItem } from \"./LogoMarquee.types\";\nimport \"./LogoMarquee.css\";\n\n/* ── Modular wrap ─────────────────────────────────────────────────\n * Keeps `v` cycling within [min, max).\n * JS % operator returns negative results for negative numbers, so\n * we normalise with the double-mod pattern.\n *\n * Example (cycleH = 1500):\n * modWrap(-1500, 0, -1501) → -1\n * modWrap(-1500, 0, 1) → -1499 (seamless cross-boundary)\n */\nfunction modWrap(min: number, max: number, v: number): number {\n const range = max - min;\n return ((((v - min) % range) + range) % range) + min;\n}\n\n/* ── Speed constants ──────────────────────────────────────────────\n * VELOCITY_FACTOR scales raw scroll px/s → column marquee px/s.\n * MAX_SCROLL_V clamps very fast flicks so the marquee stays\n * readable instead of blurring past.\n * DEADZONE minimum scroll velocity (px/s) needed to move\n * the columns — prevents micro-drift from inertia.\n */\nconst VELOCITY_FACTOR = 0.4;\nconst MAX_SCROLL_V = 2500;\nconst DEADZONE = 2;\n\n/* ── Placeholder image ────────────────────────────────────────── */\n\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\n/* ── Logo data ────────────────────────────────────────────────── */\n\nexport const COL_ONE_LOGOS: LogoItem[] = [\n { name: \"Logo 1\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 2\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 3\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 4\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 5\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 6\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 7\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 8\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 9\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 10\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 11\", url: PLACEHOLDER_IMAGE },\n];\n\nexport const COL_TWO_LOGOS: LogoItem[] = [\n { name: \"Logo 1\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 2\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 3\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 4\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 5\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 6\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 7\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 8\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 9\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 10\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 11\", url: PLACEHOLDER_IMAGE },\n];\n\nexport const TEXT_CONTENT = {\n headline: \"Section title goes here\",\n body: \"Explain how this specific feature helps your user.\",\n disclaimer: \"*Add any relevant disclaimers or legal copy here.\",\n ctaLabel: \"Learn more\",\n ctaHref: \"#\",\n};\n\n/* ── LogoMarquee ──────────────────────────────────────────────── */\n\nexport const LogoMarquee = ({\n headline = TEXT_CONTENT.headline,\n body = TEXT_CONTENT.body,\n disclaimer = TEXT_CONTENT.disclaimer,\n ctaLabel = TEXT_CONTENT.ctaLabel,\n ctaHref = TEXT_CONTENT.ctaHref,\n col1Logos = COL_ONE_LOGOS,\n col2Logos = COL_TWO_LOGOS,\n className,\n ...props\n}: LogoMarqueeProps) => {\n /* ── Scroll velocity source ─────────────────────────────────────\n * useScroll() (no args) tracks the global window scroll.\n * useVelocity() derives the rate of change in px/s.\n * When the user isn't scrolling, velocity → 0 and the columns\n * freeze immediately — no spring lag, no easing drift.\n */\n const { scrollY } = useScroll();\n const scrollVelocity = useVelocity(scrollY);\n\n /* ── Column Y positions ─────────────────────────────────────────\n * useMotionValue gives Framer Motion a mutable number it can\n * directly wire to the DOM transform without React re-renders.\n */\n const col1Y = useMotionValue(0);\n const col2Y = useMotionValue(0);\n\n /* Refs to measure each column's rendered height so modWrap can\n * calculate the exact single-cycle length at runtime. */\n const col1Ref = useRef<HTMLDivElement>(null);\n const col2Ref = useRef<HTMLDivElement>(null);\n\n /* ── Per-frame marquee update ───────────────────────────────────\n * useAnimationFrame runs every rAF tick.\n * `delta` is ms since the previous frame (~16 at 60 fps).\n *\n * step = scrollVelocity (px/s) × VELOCITY_FACTOR × (delta / 1000s)\n *\n * Col 1 subtracts step → scrolls UP when scrolling down.\n * Col 2 adds step → scrolls DOWN when scrolling down.\n * Opposite on scroll-up — naturally reversed.\n *\n * modWrap(-cycleH, 0, newPos) keeps the position looping within\n * one cycle so the column never runs out of cards.\n */\n useAnimationFrame((_, delta) => {\n const raw = scrollVelocity.get();\n\n // Frozen while not scrolling\n if (Math.abs(raw) < DEADZONE) return;\n\n const clamped = Math.sign(raw) * Math.min(Math.abs(raw), MAX_SCROLL_V);\n const step = clamped * VELOCITY_FACTOR * (delta / 1000);\n\n // Single-cycle height = half of total track (2× duplication)\n const cycleH1 = (col1Ref.current?.offsetHeight ?? 2000) / 2;\n const cycleH2 = (col2Ref.current?.offsetHeight ?? 2000) / 2;\n\n col1Y.set(modWrap(-cycleH1, 0, col1Y.get() - step)); // UP\n col2Y.set(modWrap(-cycleH2, 0, col2Y.get() + step)); // DOWN (opposite)\n });\n\n /* 2× duplication creates a seamless loop:\n * offsetHeight / 2 = one cycle → wrapping at that boundary\n * always reveals identical content (the other copy). */\n const track1 = [...col1Logos, ...col1Logos];\n const track2 = [...col2Logos, ...col2Logos];\n\n return (\n <section\n className={[\"lm\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"lm__inner\">\n\n {/* ── Media — two opposing marquee columns ──────── */}\n <div className=\"lm__media\">\n <div className=\"lm__carousel\">\n\n {/* Top gradient fade */}\n <div className=\"lm__fade lm__fade--top\" aria-hidden=\"true\" />\n\n {/* Column 1 — scrolls UP when page scrolls DOWN */}\n <motion.div\n ref={col1Ref}\n className=\"lm__col\"\n style={{ y: col1Y }}\n >\n {track1.map((logo, i) => (\n <div key={`c1-${i}`} className=\"lm__card\">\n <div className=\"lm__card-img-wrap\">\n <img\n src={logo.url}\n alt={logo.name}\n loading=\"lazy\"\n draggable={false}\n />\n </div>\n </div>\n ))}\n </motion.div>\n\n {/* Column 2 — scrolls DOWN when page scrolls DOWN */}\n <motion.div\n ref={col2Ref}\n className=\"lm__col\"\n style={{ y: col2Y }}\n >\n {track2.map((logo, i) => (\n <div key={`c2-${i}`} className=\"lm__card\">\n <div className=\"lm__card-img-wrap\">\n <img\n src={logo.url}\n alt={logo.name}\n loading=\"lazy\"\n draggable={false}\n />\n </div>\n </div>\n ))}\n </motion.div>\n\n {/* Bottom gradient fade */}\n <div className=\"lm__fade lm__fade--bottom\" aria-hidden=\"true\" />\n\n </div>\n </div>\n\n {/* ── Text content ────────────────────────────── */}\n <div className=\"lm__content\">\n <h2 className=\"lm__headline\">{headline}</h2>\n\n <div className=\"lm__text-group\">\n <p className=\"lm__body\">{body}</p>\n <p className=\"lm__disclaimer\">{disclaimer}</p>\n </div>\n\n <a href={ctaHref} className=\"lm__link\">\n {ctaLabel}\n <span className=\"lm__link-icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </a>\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default LogoMarquee;\n","import type { DownloadBadgeProps } from \"./DownloadBadge.types\";\nimport \"./DownloadBadge.css\";\n\n/* ── Light badge assets ─────────────────────────────────────── */\nimport googlePlayLight from \"../../assets/appstore-googleplay-light.svg\";\nimport appStoreLight from \"../../assets/appstore-appstore-light.svg\";\nimport appGalleryLight from \"../../assets/appstore-appgallery-light.svg\";\nimport windowsLight from \"../../assets/appstore-windows-light.svg\";\nimport macOSLight from \"../../assets/appstore-macos-light.svg\";\nimport linuxLight from \"../../assets/appstore-linux-light.svg\";\nimport browserLight from \"../../assets/appstore-browser-light.svg\";\n\n/* ── Dark badge assets ──────────────────────────────────────── */\nimport googlePlayDark from \"../../assets/appstore-googleplay-dark.svg\";\nimport appStoreDark from \"../../assets/appstore-appstore-dark.svg\";\nimport appGalleryDark from \"../../assets/appstore-appgallery-dark.svg\";\nimport windowsDark from \"../../assets/appstore-windows-dark.svg\";\nimport macOSDark from \"../../assets/appstore-macos-dark.svg\";\nimport linuxDark from \"../../assets/appstore-linux-dark.svg\";\nimport browserDark from \"../../assets/appstore-browser-dark.svg\";\n\n/* ── Asset map ──────────────────────────────────────────────── */\n\nconst BADGE_ASSETS = {\n light: {\n googleplay: { src: googlePlayLight, alt: \"Get it on Google Play\" },\n appstore: { src: appStoreLight, alt: \"Download on the App Store\" },\n appgallery: { src: appGalleryLight, alt: \"Explore it on AppGallery\" },\n windows: { src: windowsLight, alt: \"Download for Windows\" },\n macos: { src: macOSLight, alt: \"Download on the Mac App Store\" },\n linux: { src: linuxLight, alt: \"Installation on Linux\" },\n web: { src: browserLight, alt: \"Trade on Web browser\" },\n },\n dark: {\n googleplay: { src: googlePlayDark, alt: \"Get it on Google Play\" },\n appstore: { src: appStoreDark, alt: \"Download on the App Store\" },\n appgallery: { src: appGalleryDark, alt: \"Explore it on AppGallery\" },\n windows: { src: windowsDark, alt: \"Download for Windows\" },\n macos: { src: macOSDark, alt: \"Download on the Mac App Store\" },\n linux: { src: linuxDark, alt: \"Installation on Linux\" },\n web: { src: browserDark, alt: \"Trade on Web browser\" },\n },\n} as const;\n\n/* ── Component ──────────────────────────────────────────────── */\n\nexport const DownloadBadge = ({\n platform,\n colorScheme = \"light\",\n href,\n className,\n ...props\n}: DownloadBadgeProps) => {\n const { src, alt } = BADGE_ASSETS[colorScheme][platform];\n\n return (\n <a\n className={[\n \"download-badge\",\n `download-badge--${colorScheme}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n href={href ?? \"#\"}\n aria-label={alt}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...props}\n >\n <img className=\"download-badge__img\" src={src} alt={alt} />\n </a>\n );\n};\n","import type { StepsProps } from \"./Steps.types\";\nimport \"./Steps.css\";\n\nexport const Steps = ({\n title,\n steps,\n image,\n imageAlt = \"\",\n imagePosition = \"left\",\n}: StepsProps) => {\n const containerClass = [\n \"steps__container\",\n imagePosition === \"right\" ? \"steps__container--image-right\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <section className=\"steps\">\n <div className={containerClass}>\n {/* ── Image column ── */}\n {image && (\n <div className=\"steps__image-wrapper\">\n <img\n src={image}\n alt={imageAlt}\n className=\"steps__image\"\n />\n </div>\n )}\n\n {/* ── Content column ── */}\n <div className=\"steps__content\">\n <h2 className=\"steps__title\">{title}</h2>\n\n <ol className=\"steps__list\">\n {steps.map((step, index) => (\n <li key={index} className=\"steps__item\">\n <div className=\"steps__item-inner\">\n <span className=\"steps__number\" aria-hidden=\"true\">\n {index + 1}\n </span>\n\n <div className=\"steps__item-body\">\n <h3 className=\"steps__item-title\">\n {step.title}\n </h3>\n <p className=\"steps__item-description\">\n {step.description}\n </p>\n </div>\n </div>\n </li>\n ))}\n </ol>\n </div>\n </div>\n </section>\n );\n};\n","import { DownloadBadge } from \"../../primitives/DownloadBadge\";\nimport type { DownloadBannerProps } from \"./DownloadBanner.types\";\nimport \"./DownloadBanner.css\";\n\nexport const DownloadBanner = ({\n style = \"light-2\",\n qrCodeImage,\n qrCodeAlt = \"QR code to download the app\",\n qrTitle = \"Scan to download\",\n qrSubtitle = \"Android & iOS\",\n mobileTitle = \"Available on\",\n showAppStore = true,\n showGooglePlay = true,\n showAppGallery = true,\n showWindows = true,\n showMacOS = true,\n showLinux = true,\n showWeb = true,\n appStoreHref,\n googlePlayHref,\n appGalleryHref,\n windowsHref,\n macOSHref,\n linuxHref,\n webHref,\n disclaimer,\n}: DownloadBannerProps) => {\n const colorScheme = style === \"dark\" ? \"dark\" : \"light\";\n\n return (\n <section className={`db-section db-section--${style}`}>\n <div className=\"db-container\">\n <div className=\"db-card\">\n {/* ── QR block (desktop) / heading (mobile) ── */}\n <div className=\"db-qr-block\">\n {qrCodeImage && (\n <img\n className=\"db-qr-image\"\n src={qrCodeImage}\n alt={qrCodeAlt}\n />\n )}\n <div className=\"db-qr-text\">\n {/* Desktop: two-line QR label */}\n <span className=\"db-qr-text__title db-qr-text__title--desktop\">\n {qrTitle}\n </span>\n <h2 className=\"db-qr-text__subtitle db-qr-text__subtitle--desktop\">\n {qrSubtitle}\n </h2>\n {/* Mobile: single heading */}\n <span className=\"db-qr-text__title db-qr-text__title--mobile\">\n {mobileTitle}\n </span>\n {disclaimer && (\n <span className=\"db-disclaimer\">{disclaimer}</span>\n )}\n </div>\n </div>\n\n {/* ── Badge grid ── */}\n <div className=\"db-badges\">\n {showGooglePlay && (\n <DownloadBadge platform=\"googleplay\" colorScheme={colorScheme} href={googlePlayHref} />\n )}\n {showAppGallery && (\n <DownloadBadge platform=\"appgallery\" colorScheme={colorScheme} href={appGalleryHref} />\n )}\n {showMacOS && (\n <DownloadBadge platform=\"macos\" colorScheme={colorScheme} href={macOSHref} />\n )}\n {showWindows && (\n <DownloadBadge platform=\"windows\" colorScheme={colorScheme} href={windowsHref} />\n )}\n {showLinux && (\n <DownloadBadge platform=\"linux\" colorScheme={colorScheme} href={linuxHref} />\n )}\n {showAppStore && (\n <DownloadBadge platform=\"appstore\" colorScheme={colorScheme} href={appStoreHref} />\n )}\n {showWeb && (\n <DownloadBadge platform=\"web\" colorScheme={colorScheme} href={webHref} />\n )}\n </div>\n </div>\n </div>\n </section>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport type { TextScrollProps } from \"./TextScroll.types\";\nimport \"./TextScroll.css\";\n\ngsap.registerPlugin(ScrollTrigger);\n\nexport const TextScroll = ({ text, className }: TextScrollProps) => {\n const sectionRef = useRef<HTMLElement>(null);\n const wordsRef = useRef<HTMLSpanElement[]>([]);\n\n /* Split the text string into individual word <span> elements.\n We do this in render so SSR / hydration is consistent. */\n const words = text.split(/\\s+/).filter(Boolean);\n\n useEffect(() => {\n const section = sectionRef.current;\n const wordEls = wordsRef.current.filter(Boolean);\n if (!section || wordEls.length === 0) return;\n\n const isMobile = window.matchMedia(\"(max-width: 767px)\").matches;\n const startValue = isMobile ? \"top 35%\" : \"top center\";\n const endValue = isMobile ? \"bottom 90%\" : \"bottom center\";\n\n /* Defer setup by one frame so the first paint renders words at\n full opacity (no flash of invisible content). After the frame,\n dim them and attach ScrollTrigger. */\n const rafId = requestAnimationFrame(() => {\n gsap.set(wordEls, { opacity: 0.2 });\n\n const tl = gsap.timeline({\n scrollTrigger: {\n trigger: section,\n start: startValue,\n end: endValue,\n scrub: 2,\n },\n });\n\n tl.to(wordEls, {\n opacity: 1,\n stagger: 0.1,\n ease: \"none\",\n });\n\n /* Store cleanup on the section element so the return fn can reach it */\n (section as HTMLElement & { _tl?: gsap.core.Timeline })._tl = tl;\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n const tl = (section as HTMLElement & { _tl?: gsap.core.Timeline })._tl;\n if (tl) {\n tl.scrollTrigger?.kill();\n tl.kill();\n }\n gsap.set(wordEls, { clearProps: \"opacity\" });\n };\n }, [text]);\n\n return (\n <section\n ref={sectionRef}\n className={[\"ts\", className].filter(Boolean).join(\" \")}\n >\n <div className=\"ts__inner\">\n <p className=\"ts__text\" aria-label={text}>\n {words.map((word, i) => (\n <span\n key={i}\n ref={(el) => {\n if (el) wordsRef.current[i] = el;\n }}\n className=\"ts__word\"\n aria-hidden=\"true\"\n >\n {word}\n {i < words.length - 1 ? \" \" : \"\"}\n </span>\n ))}\n </p>\n </div>\n </section>\n );\n};\n\nexport default TextScroll;\n","import { useEffect, useRef } from \"react\";\nimport type { StickyMarketCardItem, StickyMarketCardsProps } from \"./StickyMarketCards.types\";\nimport \"./StickyMarketCards.css\";\n\n/* ── Shared design-system placeholder image ────────────────── */\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\nexport const StickyMarketCards = ({\n sectionTitle,\n sectionDescription,\n items,\n className,\n ...props\n}: StickyMarketCardsProps) => {\n /* outer sticky wrappers — used for measuring overlap */\n const cardRefs = useRef<(HTMLElement | null)[]>([]);\n /* inner card elements — receive transform + filter on scroll */\n const cardInnerRefs = useRef<(HTMLElement | null)[]>([]);\n\n /* ── Scroll-driven scale + brightness ─────── */\n /*\n * Transform is applied to the INNER card element (not the sticky wrapper)\n * so that the layout position of the sticky wrapper is unchanged while\n * the visual card scales and dims as the next card overlaps it.\n * Max scale-down: 5% (scale = 0.95)\n * Max brightness reduction: 40% (brightness = 0.6)\n */\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let rafId = 0;\n\n const update = () => {\n const wrappers = cardRefs.current.filter(Boolean) as HTMLElement[];\n const inners = cardInnerRefs.current.filter(Boolean) as HTMLElement[];\n const n = wrappers.length;\n\n wrappers.forEach((wrapper, i) => {\n const inner = inners[i];\n if (!inner) return;\n\n /* Last card is always full scale + full brightness */\n if (i === n - 1) {\n inner.style.transform = \"scale(1)\";\n inner.style.filter = \"brightness(1)\";\n return;\n }\n\n const nextWrapper = wrappers[i + 1];\n if (!nextWrapper) return;\n\n const currentRect = wrapper.getBoundingClientRect();\n const nextRect = nextWrapper.getBoundingClientRect();\n const overlap = currentRect.bottom - nextRect.top;\n\n if (overlap > 0) {\n const progress = Math.min(overlap / currentRect.height, 1);\n inner.style.transform = `scale(${(1 - progress * 0.05).toFixed(4)})`;\n inner.style.filter = `brightness(${(1 - progress * 0.4).toFixed(4)})`;\n } else {\n inner.style.transform = \"scale(1)\";\n inner.style.filter = \"brightness(1)\";\n }\n });\n };\n\n const onScroll = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(update);\n };\n\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n update();\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n /* ── Sync card heights ────────────────────── */\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const syncHeights = () => {\n const inners = cardInnerRefs.current.filter(Boolean) as HTMLElement[];\n if (!inners.length) return;\n\n /* 1. Clear explicit heights to get natural CSS height */\n inners.forEach((inner) => {\n inner.style.minHeight = \"\";\n });\n\n /* 2. Measure the tallest card */\n let maxH = 0;\n inners.forEach((inner) => {\n const h = inner.getBoundingClientRect().height;\n if (h > maxH) maxH = h;\n });\n\n /* 3. Apply max height to all cards */\n inners.forEach((inner) => {\n inner.style.minHeight = `${maxH}px`;\n });\n };\n\n /* Initial sync */\n syncHeights();\n\n /* Sync on resize */\n window.addEventListener(\"resize\", syncHeights);\n\n /* Sync after custom fonts load to prevent layout shift */\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(syncHeights);\n }\n\n return () => {\n window.removeEventListener(\"resize\", syncHeights);\n };\n }, [items.length]);\n\n const n = items.length;\n const maxStack = 4;\n const baseIndex = Math.max(0, n - maxStack);\n\n return (\n <section\n className={[\"smc\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"smc__inner\">\n <div className=\"smc__header-wrap\">\n <h2 className=\"smc__header\">{sectionTitle}</h2>\n {sectionDescription && (\n <p className=\"smc__description\">{sectionDescription}</p>\n )}\n </div>\n\n <div className=\"smc__track\">\n {items.map((item, i) => {\n const theme = item.theme ?? \"dark\";\n const offsetMultiplier = Math.max(0, i - baseIndex);\n\n return (\n <div\n key={i}\n ref={(el) => { cardRefs.current[i] = el; }}\n className=\"smc__card\"\n style={{\n [\"--smc-card-index\" as string]: String(offsetMultiplier),\n zIndex: i + 1,\n }}\n >\n <div\n ref={(el) => { cardInnerRefs.current[i] = el; }}\n className={[\n \"smc__card-inner\",\n `smc__card-inner--${theme}`,\n ].join(\" \")}\n >\n {/* Background image with semi-transparent overlay */}\n <div className=\"smc__card-bg\">\n <img\n src={item.imageUrl ?? PLACEHOLDER_IMAGE}\n alt=\"\"\n aria-hidden=\"true\"\n loading={i === 0 ? \"eager\" : \"lazy\"}\n />\n <div\n className={[\n \"smc__card-overlay\",\n `smc__card-overlay--${theme}`,\n ].join(\" \")}\n />\n </div>\n\n <div className=\"smc__card-content\">\n <div className=\"smc__card-title-wrap\">\n <h3 className=\"smc__card-title\">{item.title}</h3>\n </div>\n <div className=\"smc__card-desc-wrap\">\n <p className=\"smc__card-desc\">{item.description}</p>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </section>\n );\n};\n\nexport default StickyMarketCards;\n","import { useState, useMemo } from \"react\";\nimport type { TableProps } from \"./Table.types\";\nimport { SearchField } from \"../../primitives/SearchField\";\nimport { Pagination } from \"../../primitives/Pagination\";\nimport \"./Table.css\";\n\nconst InfoIcon = ({ className }: { className?: string }) => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M12 16V12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"8\" r=\"1\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n);\n\nexport const Table = ({\n sectionTitle,\n columns,\n rows,\n mainColumnKey,\n pageSize = 10,\n searchPlaceholder = \"Search\",\n infoText,\n className,\n ...props\n}: TableProps) => {\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n const [tooltip, setTooltip] = useState({ visible: false, heading: \"\", description: \"\", x: 0, y: 0, arrowOffset: 0 });\n\n const mainKey =\n mainColumnKey ??\n columns.find((c) => c.width === \"main\")?.key ??\n columns[0]?.key;\n\n /* ── Filter ── */\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return rows;\n return rows.filter((row) =>\n Object.values(row).some((v) => v.toLowerCase().includes(q))\n );\n }, [rows, search]);\n\n /* ── Pagination ── */\n const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize));\n const currentPage = Math.min(page, totalPages);\n const startIdx = (currentPage - 1) * pageSize;\n const endIdx = Math.min(startIdx + pageSize, filtered.length);\n const visible = filtered.slice(startIdx, endIdx);\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value);\n setPage(1);\n };\n\n const handleClear = () => {\n setSearch(\"\");\n setPage(1);\n };\n\n return (\n <section className={[\"tbl-section\", className].filter(Boolean).join(\" \")} {...props}>\n {sectionTitle && (\n <div className=\"tbl-section__header\">\n <h2 className=\"tbl-section__title\">{sectionTitle}</h2>\n </div>\n )}\n <div className=\"tbl-section__content\">\n <div className=\"tbl\">\n {/* ── Search + summary bar ── */}\n <div className=\"tbl__topbar\">\n <div className=\"tbl__search-wrap\">\n <SearchField\n placeholder={searchPlaceholder}\n value={search}\n onChange={handleSearch}\n onClear={handleClear}\n variant=\"fill\"\n aria-label={searchPlaceholder}\n />\n </div>\n <div className=\"tbl__summary\">\n {filtered.length > 0\n ? <>Showing {startIdx + 1}- {endIdx} of {filtered.length}</>\n : \"No results\"\n }\n </div>\n </div>\n\n {/* ── Scrollable table area ── */}\n <div className=\"tbl__scroll-wrapper\">\n <table className=\"tbl__table\">\n <thead>\n <tr className=\"tbl__tr\">\n {columns.map((col, colIdx) => {\n const isFirst = colIdx === 0;\n const isLast = colIdx === columns.length - 1;\n const isMain = col.width === \"main\" || col.key === mainKey;\n return (\n <th\n key={col.key}\n className={[\n \"tbl__th\",\n isMain ? \"tbl__th--main\" : \"\",\n col.width === \"big\" ? \"tbl__th--big\" : \"\",\n ].filter(Boolean).join(\" \")}\n >\n <div \n className=\"tbl__th-inner\"\n onMouseEnter={(e) => {\n if (!col.tooltip) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const targetX = rect.left + rect.width / 2;\n const targetY = rect.top;\n \n // Tooltip width is 13rem (208px). Half is 104px.\n const tooltipHalfWidth = 104;\n const margin = 16;\n \n // Clamp the tooltip box so it doesn't overflow screen edges\n const clampedX = Math.max(\n margin + tooltipHalfWidth,\n Math.min(window.innerWidth - margin - tooltipHalfWidth, targetX)\n );\n \n // Offset the arrow so it still points to the exact center of the header\n const arrowOffset = targetX - clampedX;\n\n setTooltip({\n visible: true,\n heading: col.tooltip.heading,\n description: col.tooltip.description,\n x: clampedX,\n y: targetY,\n arrowOffset\n });\n }}\n onMouseLeave={() => {\n if (col.tooltip) {\n setTooltip(prev => ({ ...prev, visible: false }));\n }\n }}\n >\n <span className={[\"tbl__col-label\", col.tooltip ? \"tbl__col-label--dashed\" : \"\"].filter(Boolean).join(\" \")}>\n {Array.isArray(col.header)\n ? col.header.map((line, li) => (\n <span key={li}>\n {line}\n {li < (col.header as string[]).length - 1 && <br />}\n </span>\n ))\n : col.header\n }\n </span>\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody className=\"tbl__tbody\">\n {visible.length > 0 ? (\n visible.map((row, rowIdx) => (\n <tr key={rowIdx} className=\"tbl__tr\">\n {columns.map((col) => {\n const isMain = col.width === \"main\" || col.key === mainKey;\n const iconUrl = row[`${col.key}_iconUrl`];\n return (\n <td\n key={col.key}\n className={[\n \"tbl__td\",\n isMain ? \"tbl__td--main\" : \"\",\n col.width === \"big\" ? \"tbl__td--big\" : \"\",\n ].filter(Boolean).join(\" \")}\n >\n {isMain ? (\n <div className=\"tbl__cell-inner\">\n {iconUrl && (\n <img\n src={iconUrl}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"tbl__cell-icon\"\n loading=\"lazy\"\n width=\"24\"\n height=\"24\"\n />\n )}\n <span className=\"tbl__cell-text tbl__cell-text--bold\">{row[col.key] ?? \"\"}</span>\n </div>\n ) : (\n <span className=\"tbl__cell-text\">{row[col.key] ?? \"\"}</span>\n )}\n </td>\n );\n })}\n </tr>\n ))\n ) : (\n <tr className=\"tbl__tr\">\n <td colSpan={columns.length} className=\"tbl__empty-cell\">\n No results found for \"{search}\"\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n {/* ── Footer: Pagination ── */}\n {totalPages > 1 && (\n <div className=\"tbl__footer\">\n <div className=\"tbl__pagination-wrap\">\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setPage}\n />\n </div>\n </div>\n )}\n </div>\n \n {/* ── Message Box (Out of table, bottom center) ── */}\n {infoText && (\n <div className=\"tbl-section__info-box\">\n <InfoIcon className=\"tbl-section__info-icon\" />\n <p className=\"tbl-section__info-text\">{infoText}</p>\n </div>\n )}\n </div>\n\n {/* ── Global Tooltip Portal ── */}\n <div \n className={[\"tbl__global-hint\", tooltip.visible ? \"tbl__global-hint--visible\" : \"\"].filter(Boolean).join(\" \")}\n style={{ left: tooltip.x, top: tooltip.y - 8 }}\n >\n <div className=\"tbl__global-hint-desc\">{tooltip.description}</div>\n <div \n className=\"tbl__global-hint-arrow\" \n style={{ transform: `translateX(calc(-50% + ${tooltip.arrowOffset}px))` }}\n />\n </div>\n </section>\n );\n};\n\nexport default Table;\n","import { useState } from \"react\";\nimport { Link } from \"../../primitives/Link\";\nimport { Button } from \"../../primitives/Button\";\nimport type { LeaderItem, LeadersProps } from \"./Leaders.types\";\nimport styles from \"./Leaders.module.css\";\n\nconst LinkedInIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M14.816 0H1.18C0.528 0 0 0.516 0 1.153V14.846C0 15.484 0.528 16 1.18 16H14.816C15.468 16 16 15.484 16 14.846V1.153C16 0.516 15.468 0 14.816 0ZM4.744 13.642H2.368V5.996H4.744V13.642ZM3.556 4.952C2.796 4.952 2.18 4.336 2.18 3.576C2.18 2.816 2.796 2.2 3.556 2.2C4.316 2.2 4.932 2.816 4.932 3.576C4.932 4.336 4.316 4.952 3.556 4.952ZM13.642 13.642H11.266V9.924C11.266 9.038 11.25 7.896 10.032 7.896C8.814 7.896 8.626 8.846 8.626 9.86V13.642H6.25V5.996H8.53V7.04H8.562C8.88 6.44 9.534 5.806 10.686 5.806C12.958 5.806 13.642 7.3 13.642 9.386V13.642Z\" fill=\"currentColor\" />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst ChevronUpIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 10L8 6L4 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n/* ── Card content — shared between both grid sections ─────── */\nconst CardContent = ({ item }: { item: LeaderItem }) => (\n <>\n <div className={styles.imageWrapper}>\n <img\n src={item.imageUrl}\n alt={item.name}\n className={styles.image}\n loading=\"lazy\"\n />\n </div>\n <div className={styles.content}>\n <h3 className={styles.name}>{item.name}</h3>\n <p className={styles.role}>{item.role}</p>\n </div>\n {item.linkedinUrl && (\n <Link\n href={item.linkedinUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n icon={<LinkedInIcon />}\n label=\"LinkedIn\"\n colorScheme=\"black\"\n showChevron={false}\n className={styles.link}\n />\n )}\n </>\n);\n\nexport const Leaders = ({\n title = \"Our leaders\",\n items,\n initialVisibleCount = 4,\n expandText = \"View all\",\n collapseText = \"View less\",\n className,\n ...props\n}: LeadersProps) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const hasMore = items.length > initialVisibleCount;\n const visibleItems = items.slice(0, initialVisibleCount);\n const extraItems = items.slice(initialVisibleCount);\n\n return (\n <section className={[styles.section, className].filter(Boolean).join(\" \")} {...props}>\n <div className={styles.container}>\n {title && (\n <div className={styles.header}>\n <h2 className={styles.title}>{title}</h2>\n </div>\n )}\n\n <div className={styles.gridWrapper}>\n {/* ── Always-visible first N cards ── */}\n <div className={styles.grid}>\n {visibleItems.map((item, i) => (\n <div key={i} className={styles.card}>\n <CardContent item={item} />\n </div>\n ))}\n </div>\n\n {/* ── Animated extra cards ── */}\n {hasMore && (\n <div\n className={[\n styles.extraCards,\n isExpanded ? styles.extraCardsOpen : \"\",\n ].join(\" \")}\n aria-hidden={!isExpanded}\n >\n <div className={styles.extraGrid}>\n {extraItems.map((item, i) => (\n <div\n key={i}\n className={[\n styles.card,\n styles.extraCard,\n isExpanded ? styles.extraCardVisible : \"\",\n ].join(\" \")}\n style={{\n transitionDelay: isExpanded\n ? `${i * 70 + 120}ms`\n : \"0ms\",\n }}\n >\n <CardContent item={item} />\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {hasMore && (\n <div className={styles.actions}>\n <Button\n variant=\"secondary\"\n colorScheme=\"black\"\n onClick={() => setIsExpanded(!isExpanded)}\n iconPosition=\"icon-right\"\n icon={isExpanded ? <ChevronUpIcon /> : <ChevronDownIcon />}\n >\n {isExpanded ? collapseText : expandText}\n </Button>\n </div>\n )}\n </div>\n </section>\n );\n};\n\nexport default Leaders;\n","/* ── Section shell ─────────────────────────────────────────── */\n\n.section {\n width: 100%;\n background-color: var(--color-slate-50);\n}\n\n/* ── Inner container ───────────────────────────────────────── */\n\n.container {\n display: flex;\n flex-direction: column;\n max-width: var(--content-width-1280);\n margin: 0 auto;\n padding: var(--spacing-56) var(--spacing-16);\n box-sizing: border-box;\n width: 100%;\n align-items: center;\n gap: var(--spacing-48);\n}\n\n@media (min-width: 992px) {\n .container {\n padding: var(--spacing-112) var(--spacing-24);\n gap: var(--spacing-80);\n }\n}\n\n/* ── Header ────────────────────────────────────────────────── */\n\n.header {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n width: 100%;\n max-width: var(--content-width-846);\n}\n\n.title {\n font-family: var(--typography-h2-font-family);\n font-size: var(--typography-h2-font-size);\n font-weight: var(--typography-h2-font-weight);\n line-height: var(--typography-h2-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n/* ── Grid wrapper ──────────────────────────────────────────── */\n\n.gridWrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n/* ── Grid ──────────────────────────────────────────────────── */\n\n.grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: var(--spacing-24);\n width: 100%;\n}\n\n@media (min-width: 768px) {\n .grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (min-width: 992px) {\n .grid {\n grid-template-columns: repeat(4, 1fr);\n gap: var(--spacing-32);\n }\n}\n\n/* ── Extra cards — animated expand/collapse container ──────── */\n\n/*\n * Uses grid-template-rows: 0fr → 1fr for a height animation that\n * respects the actual content size (unlike max-height hacks).\n * The inner .extraGrid needs min-height: 0 for 0fr to fully collapse.\n */\n.extraCards {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 0.8s cubic-bezier(0.16, 1, 0.3, 1);\n width: 100%;\n}\n\n.extraCardsOpen {\n grid-template-rows: 1fr;\n}\n\n.extraGrid {\n min-height: 0;\n overflow: hidden;\n display: grid;\n grid-template-columns: 1fr;\n gap: var(--spacing-24);\n padding-top: var(--spacing-24);\n}\n\n@media (min-width: 768px) {\n .extraGrid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (min-width: 992px) {\n .extraGrid {\n grid-template-columns: repeat(4, 1fr);\n gap: var(--spacing-32);\n padding-top: var(--spacing-32);\n }\n}\n\n/* ── Extra card — individual fade + rise animation ─────────── */\n\n.extraCard {\n opacity: 0;\n transform: translateY(16px);\n transition:\n opacity 0.6s ease,\n transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n.extraCardVisible {\n opacity: 1;\n transform: translateY(0);\n}\n\n/* ── Card ──────────────────────────────────────────────────── */\n\n.card {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--spacing-24);\n background-color: var(--color-slate-50);\n border-radius: var(--radius-2xl);\n width: 100%;\n}\n\n/* ── Image ─────────────────────────────────────────────────── */\n\n.imageWrapper {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: var(--radius-2xl);\n overflow: hidden;\n position: relative;\n background-color: var(--color-slate-100);\n}\n\n.image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n display: block;\n}\n\n/* ── Content ───────────────────────────────────────────────── */\n\n.content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--spacing-8);\n width: 100%;\n}\n\n.name {\n font-family: var(--typography-h5-font-family);\n font-size: var(--typography-h5-font-size);\n font-weight: var(--typography-h5-font-weight);\n line-height: var(--typography-h5-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n.role {\n font-family: var(--typography-body-md-font-family);\n font-size: var(--typography-body-md-font-size);\n font-weight: var(--typography-body-md-font-weight);\n line-height: var(--typography-body-md-line-height);\n color: var(--color-slate-1200);\n margin: 0;\n}\n\n/* ── Link ──────────────────────────────────────────────────── */\n\n.link {\n margin-top: calc(var(--spacing-8) * -1); /* Pull up slightly to reduce gap */\n}\n\n.link :global(.icon) {\n color: #0072B1 !important; /* Official LinkedIn Blue */\n}\n\n.link:hover :global(.icon) {\n color: #005582 !important; /* Darker LinkedIn Blue for hover */\n}\n\n/* ── Actions ───────────────────────────────────────────────── */\n\n.actions {\n display: flex;\n justify-content: center;\n width: 100%;\n padding-top: var(--spacing-16);\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","ChevronIcon","jsx","jsxs","forwardRef","useState","jsx","jsxs","SuccessIcon","FailIcon","forwardRef","useState","useState","jsx","jsxs","jsx","jsxs","useState","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","CheckIcon","useState","Fragment","jsx","jsxs","ChevronDownIcon","useState","jsx","jsxs","useEffect","useRef","jsx","jsxs","ButtonBlock","useRef","useEffect","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","useRef","useState","useEffect","useRef","useState","jsx","jsx","jsxs","ChevronRight","useState","useRef","useEffect","useRef","jsx","jsxs","useRef","useEffect","useRef","jsx","jsxs","useRef","useRef","useState","useEffect","useCallback","motion","jsx","jsxs","ChevronDownIcon","XMarkIcon","motion","useState","useRef","useEffect","useCallback","useEffect","useLayoutEffect","useRef","useState","motion","useScroll","useSpring","useTransform","useMotionTemplate","body","dark","white","Fragment","jsx","jsxs","SPRING","seg","useRef","useState","useEffect","motion","useLayoutEffect","useScroll","useSpring","useTransform","useMotionTemplate","useRef","motion","useScroll","jsx","jsxs","PLACEHOLDER_IMAGE","useScroll","useRef","motion","jsx","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsxs","useRef","useEffect","useEffect","useRef","jsx","jsxs","PLACEHOLDER_IMAGE","useRef","useEffect","n","useState","Fragment","jsx","jsxs","useState","useState","Fragment","jsx","jsxs","ChevronDownIcon","useState"]}