@deriv-web-design/ui 0.0.24 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +623 -162
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +109 -28
- package/dist/index.d.ts +109 -28
- package/dist/index.js +977 -436
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +952 -416
- package/dist/index.mjs.map +1 -1
- package/dist/quote-left-63QMW5NQ.webp +0 -0
- package/dist/quote-right-W6AS4YHN.webp +0 -0
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -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/FaqAccordion/FaqAccordion.tsx","../templates/FeatureCards/FeatureCards.tsx","../templates/FeatureCardsIcon/FeatureCardsIcon.tsx","../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"],"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=\"accordion__header\"\n onClick={handleToggle}\n aria-expanded={isOpen}\n >\n <span className=\"accordion__title-wrapper\">\n <span className=\"accordion__title\">{title}</span>\n </span>\n <span className={[\"accordion__chevron\", isOpen ? \"accordion__chevron--rotated\" : \"\"].filter(Boolean).join(\" \")}>\n <ChevronIcon />\n </span>\n {showFocusRing && (\n <span className=\"accordion__focus-ring\" aria-hidden=\"true\" />\n )}\n </button>\n\n <div className={[\"accordion__body-wrapper\", isOpen ? \"accordion__body-wrapper--open\" : \"\"].filter(Boolean).join(\" \")}>\n <div className=\"accordion__body-inner\">\n <div className=\"accordion__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 { Accordion } from \"../../primitives/Accordion\";\nimport type { FaqAccordionProps } from \"./FaqAccordion.types\";\nimport \"./FaqAccordion.css\";\n\nexport const FaqAccordion = ({\n title,\n items,\n colorScheme = \"white\",\n}: FaqAccordionProps) => {\n return (\n <section className={[\"faq-accordion\", `faq-accordion--${colorScheme}`].join(\" \")}>\n <div className=\"faq-accordion__container\">\n <div className=\"faq-accordion__header\">\n <h2 className=\"faq-accordion__title\">{title}</h2>\n </div>\n\n <div className=\"faq-accordion__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","import type { FeatureBulletsProps } from \"./FeatureBullets.types\";\nimport \"./FeatureBullets.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=\"feature-bullets__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=\"feature-bullets\">\n <div className=\"feature-bullets__container\">\n <div\n className={[\n \"feature-bullets__split\",\n imagePosition === \"left\" ? \"feature-bullets__split--image-left\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className=\"feature-bullets__content\">\n <h2 className=\"feature-bullets__title\">{title}</h2>\n\n {bullets && bullets.length > 0 && (\n <div className=\"feature-bullets__bullet-list\">\n {bullets.map((bullet, i) => (\n <div key={i} className=\"feature-bullets__bullet-item\">\n <div className=\"feature-bullets__icon-wrapper\">\n <CheckIcon />\n </div>\n <p className=\"feature-bullets__bullet-text\">{bullet}</p>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {image && (\n <div className=\"feature-bullets__image-wrapper\">\n <img\n alt={imageAlt}\n className=\"feature-bullets__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 \"./Leaders.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=\"leaders__image-wrapper\">\n <img\n src={item.imageUrl}\n alt={item.name}\n className=\"leaders__image\"\n loading=\"lazy\"\n />\n </div>\n <div className=\"leaders__content\">\n <h3 className=\"leaders__name\">{item.name}</h3>\n <p className=\"leaders__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=\"leaders__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={[\"leaders\", className].filter(Boolean).join(\" \")} {...props}>\n <div className=\"leaders__container\">\n {title && (\n <div className=\"leaders__header\">\n <h2 className=\"leaders__title\">{title}</h2>\n </div>\n )}\n\n <div className=\"leaders__grid-wrapper\">\n {/* ── Always-visible first N cards ── */}\n <div className=\"leaders__grid\">\n {visibleItems.map((item, i) => (\n <div key={i} className=\"leaders__card\">\n <CardContent item={item} />\n </div>\n ))}\n </div>\n\n {/* ── Animated extra cards ── */}\n {hasMore && (\n <div\n className={[\n \"leaders__extra-cards\",\n isExpanded ? \"leaders__extra-cards--open\" : \"\",\n ].join(\" \")}\n aria-hidden={!isExpanded}\n >\n <div className=\"leaders__extra-grid\">\n {extraItems.map((item, i) => (\n <div\n key={i}\n className={[\n \"leaders__card\",\n \"leaders__extra-card\",\n isExpanded ? \"leaders__extra-card--visible\" : \"\",\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=\"leaders__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"],"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"]}
|
|
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/FaqAccordion/FaqAccordion.tsx","../templates/FeatureCards/FeatureCards.tsx","../templates/FeatureCardsIcon/FeatureCardsIcon.tsx","../templates/FeatureBullets/FeatureBullets.tsx","../components/Footer/Footer.tsx","../templates/Hero/Hero.tsx","../templates/Header/Header.tsx","../templates/Stats/StatsV2.tsx","../templates/Stats/StatsSimple.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/ImageBanner/ImageBanner.tsx","../templates/Testimonial/Testimonial.tsx"],"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=\"accordion__header\"\n onClick={handleToggle}\n aria-expanded={isOpen}\n >\n <span className=\"accordion__title-wrapper\">\n <span className=\"accordion__title\">{title}</span>\n </span>\n <span className={[\"accordion__chevron\", isOpen ? \"accordion__chevron--rotated\" : \"\"].filter(Boolean).join(\" \")}>\n <ChevronIcon />\n </span>\n {showFocusRing && (\n <span className=\"accordion__focus-ring\" aria-hidden=\"true\" />\n )}\n </button>\n\n <div className={[\"accordion__body-wrapper\", isOpen ? \"accordion__body-wrapper--open\" : \"\"].filter(Boolean).join(\" \")}>\n <div className=\"accordion__body-inner\">\n <div className=\"accordion__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 { useState } from \"react\";\nimport { Accordion } from \"../../primitives/Accordion\";\nimport type { FaqAccordionProps } from \"./FaqAccordion.types\";\nimport \"./FaqAccordion.css\";\n\nexport const FaqAccordion = ({\n title,\n items,\n colorScheme = \"white\",\n}: FaqAccordionProps) => {\n const [openIndex, setOpenIndex] = useState<number | null>(null);\n\n const handleToggle = (index: number) => (isOpen: boolean) => {\n setOpenIndex(isOpen ? index : null);\n };\n\n return (\n <section className={[\"faq-accordion\", `faq-accordion--${colorScheme}`].join(\" \")}>\n <div className=\"faq-accordion__container\">\n <div className=\"faq-accordion__header\">\n <h2 className=\"faq-accordion__title\">{title}</h2>\n </div>\n\n <div className=\"faq-accordion__list\">\n {items.map((item, index) => (\n <Accordion\n key={`${item.question}-${index}`}\n title={item.question}\n open={openIndex === index}\n onToggle={handleToggle(index)}\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","import type { FeatureBulletsProps } from \"./FeatureBullets.types\";\nimport \"./FeatureBullets.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=\"feature-bullets__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=\"feature-bullets\">\n <div className=\"feature-bullets__container\">\n <div\n className={[\n \"feature-bullets__split\",\n imagePosition === \"left\" ? \"feature-bullets__split--image-left\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className=\"feature-bullets__content\">\n <h2 className=\"feature-bullets__title\">{title}</h2>\n\n {bullets && bullets.length > 0 && (\n <div className=\"feature-bullets__bullet-list\">\n {bullets.map((bullet, i) => (\n <div key={i} className=\"feature-bullets__bullet-item\">\n <div className=\"feature-bullets__icon-wrapper\">\n <CheckIcon />\n </div>\n <p className=\"feature-bullets__bullet-text\">{bullet}</p>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {image && (\n <div className=\"feature-bullets__image-wrapper\">\n <img\n alt={imageAlt}\n className=\"feature-bullets__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, useMemo, useRef, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport type { StatsAward, StatsProps } from \"./StatsV2.types\";\nimport \"./StatsV2.css\";\n\n/* ── Animation constants ─────────────────────────────────────\n * Values extracted directly from the Webflow IX2 action list\n * `a-2` (\"Сarousel of Achievements 175\") on\n * `.achievements_slider-component` in the `stats-carousel`\n * reference. Each animated keyframe uses:\n *\n * delay : 1000ms ← hold between transitions\n * duration : 700ms ← length of each transition\n * easing : cubic-bezier(0.33, 1, 0.68, 1) (ease-out-cubic)\n * loop : true\n *\n * We model this in React with:\n * • a CSS transition that ONLY holds the duration + easing\n * (no delay), so the animation runs the moment the inline\n * transform/opacity change;\n * • a self-rescheduling `setTimeout` loop that uses HOLD_MS\n * (1000ms) for the first tick + after every snap-back, and\n * INTERVAL_MS (1700ms = delay + duration) between normal\n * advances — matching Webflow's IX2 cadence frame-for-frame.\n *\n * Putting the delay inside `transition` (which we tried first)\n * pushes the very first animation 2.7 s out from mount and\n * re-introduces a delay between Storybook's hot-reload and the\n * first visible movement — so we keep the wait outside CSS.\n */\nconst HOLD_MS = 1000;\nconst STEP_DURATION_MS = 700;\nconst INTERVAL_MS = HOLD_MS + STEP_DURATION_MS;\nconst EASING = \"cubic-bezier(0.33, 1, 0.68, 1)\";\nconst TRANSITION =\n `transform ${STEP_DURATION_MS}ms ${EASING},` +\n ` opacity ${STEP_DURATION_MS}ms ${EASING}`;\n\n/* ── Scroll-driven parallax on the side blocks ───────────────\n * Custom approach (no longer a literal port of the Webflow IX2\n * keyframes): the two side columns are centred in the layout\n * and start with a CSS stagger applied as an initial transform\n * (LEFT `translateY(-26.3%)`, RIGHT `translateY(+26.3%)`). The\n * scroll-driven parallax then interpolates those transforms\n * back to `translateY(0%)` as the user scrolls past the\n * section, so when the animation ends both columns are at\n * exactly the same transform — guaranteed parallel regardless\n * of how tall the badge stacks are.\n *\n * scroll ≤ PARALLAX_START → LEFT −26.3% / RIGHT +26.3%\n * scroll = PARALLAX_END → LEFT 0% / RIGHT 0%\n * scroll > PARALLAX_END → held at 0% / 0% (parallel)\n *\n * Keep `PARALLAX_MAX_PERCENT` here in sync with the initial\n * transform values on `.stats-v2__awards-col--left/--right`\n * in StatsV2.css.\n */\nconst PARALLAX_START = 0.10;\nconst PARALLAX_END = 0.45;\nconst PARALLAX_MAX_PERCENT = 26.3;\nconst PARALLAX_BREAKPOINT = 992;\n\n/* ── Carousel slot model ─────────────────────────────────────\n * Webflow's IX2 maps every slider item to one of FIVE logical\n * slots. The inline styles in `index.html` show the exact\n * transform values the live site uses on each slider item,\n * which we mirror 1:1:\n *\n * above : translate3d(0, -110%, 0) scale3d(0.65, 0.65, 1) opacity 1\n * active : translate3d(0, 0%, 0) scale3d(1.0, 1.0, 1) opacity 1\n * below : translate3d(0, +110%, 0) scale3d(0.65, 0.65, 1) opacity 1\n * exiting : translate3d(0, -110%, 0) scale3d(0.4, 0.4, 1) opacity 0\n * queued : translate3d(0, +110%, 0) scale3d(0.4, 0.4, 1) opacity 0\n *\n * Webflow's reference ships 0.7 for above/below, but the design\n * uses 0.65 here for slightly stronger visual deference to the\n * centred active stat.\n *\n * The CSS already centres each item via `translate(-50%, -50%)`\n * (see `.stats-v2__stat`), so we PREPEND that centring translate\n * to the Webflow transform here. Order matters — the centring\n * must come first so the slot translate's `%` units are applied\n * to the element's own box, not to a half-shifted origin.\n *\n * The `--stats-v2-slot-offset` CSS var lets a designer adjust\n * the 110% spacing without touching the component file.\n */\ntype Slot = \"above\" | \"active\" | \"below\" | \"exiting\" | \"queued\";\n\nconst SLOT_OFFSET = \"var(--stats-v2-slot-offset, 110%)\";\nconst CENTER = \"translate(-50%, -50%)\";\n\nfunction getSlotStyle(slot: Slot, transition: string): CSSProperties {\n switch (slot) {\n case \"active\":\n return {\n transform: `${CENTER} translateY(0%) scale(1)`,\n opacity: 1,\n zIndex: 2,\n transition,\n };\n case \"above\":\n return {\n transform: `${CENTER} translateY(calc(${SLOT_OFFSET} * -1)) scale(0.65)`,\n opacity: 1,\n zIndex: 1,\n transition,\n };\n case \"below\":\n return {\n transform: `${CENTER} translateY(${SLOT_OFFSET}) scale(0.65)`,\n opacity: 1,\n zIndex: 1,\n transition,\n };\n case \"exiting\":\n return {\n transform: `${CENTER} translateY(calc(${SLOT_OFFSET} * -1)) scale(0.4)`,\n opacity: 0,\n zIndex: 0,\n transition,\n };\n case \"queued\":\n default:\n return {\n transform: `${CENTER} translateY(${SLOT_OFFSET}) scale(0.4)`,\n opacity: 0,\n zIndex: 0,\n transition,\n };\n }\n}\n\n/**\n * Maps a DOM-strip index to its slot for a given step.\n *\n * Step 0 is the initial state — items[0] is `above`, items[1]\n * is `active`, items[2] is `below`, the rest are `queued`.\n *\n * Each step shifts every item up exactly one slot, mirroring\n * Webflow's \"promote one slot per tick\" choreography.\n */\nfunction slotForIndex(index: number, step: number): Slot {\n const rel = index - step - 1;\n if (rel === 0) return \"active\";\n if (rel === -1) return \"above\";\n if (rel === 1) return \"below\";\n if (rel < -1) return \"exiting\";\n return \"queued\";\n}\n\n/* ── Laurel decoration (left half) ───────────────────────────\n * Vector copied from the Webflow `award_image-svg` markup. The\n * right-hand laurel mirrors the same path via `scaleX(-1)` so\n * we don't ship duplicate geometry.\n */\nconst Laurel = ({ flip = false }: { flip?: boolean }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"84\"\n viewBox=\"0 0 32 84\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className={[\n \"stats-v2__laurel\",\n flip ? \"stats-v2__laurel--flip\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <g opacity=\"0.2\">\n <path\n d=\"M20.8655 76.0151C21.3631 78.5487 22.4577 80.4673 23.4245 81.7447C23.7945 82.2337 24.145 82.6275 24.4343 82.9245C24.5003 81.0424 24.5392 77.0209 23.854 73.543C23.3836 71.2282 22.6189 69.4263 21.9723 68.1997C21.7486 67.7754 21.539 67.42 21.3608 67.1361C21.2158 67.6487 21.042 68.3446 20.8935 69.1718C20.5634 71.0111 20.3623 73.4782 20.8655 76.0151Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M9.19518 69.4464C8.5612 69.2311 8.01354 69.0792 7.6041 68.9776C7.77674 69.5261 8.03563 70.2542 8.40971 71.0711C9.16156 72.713 10.3603 74.6729 12.1472 76.0342C13.9141 77.3864 15.8077 77.7752 17.2669 77.8239C17.9963 77.8483 18.6126 77.7873 19.0419 77.7209C18.3715 76.5307 16.6347 73.8279 14.0892 71.9349C12.4167 70.7081 10.6015 69.924 9.19518 69.4464Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M14.1789 62.4853C14.1095 65.0056 14.7018 67.1343 15.3106 68.6265C15.5268 69.1563 15.7445 69.6045 15.9342 69.9597C16.0737 69.4242 16.2473 68.7196 16.4239 67.9038C16.8294 66.0308 17.2467 63.5892 17.309 61.2688C17.3584 58.9612 17.0322 57.019 16.6942 55.65C16.5809 55.1908 16.4663 54.7965 16.3643 54.4749C16.1414 54.8952 15.8702 55.4487 15.5956 56.1107C14.9268 57.7233 14.2444 59.9642 14.1789 62.4853Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M6.16644 56.5363L5.92729 56.2113C4.18123 53.9739 2.10237 52.4221 0.99942 51.685C1.0448 52.2219 1.13195 52.9558 1.29599 53.7969C1.6458 55.5904 2.33816 57.834 3.68889 59.699C5.02796 61.5534 6.66938 62.5331 7.97363 63.0496C8.56984 63.2857 9.09434 63.4244 9.48448 63.5049C9.08235 62.1271 8.06278 59.1136 6.16644 56.5363Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M12.9202 41.9556C12.9103 41.468 12.8857 41.0438 12.8578 40.6964C12.5852 41.0139 12.2554 41.4254 11.9043 41.9234C10.9787 43.2365 9.91222 45.1415 9.34811 47.5086L9.21888 48.0509C8.78948 50.2094 8.89878 52.2002 9.13088 53.6853C9.21855 54.2463 9.32345 54.7333 9.42253 55.1275C10.2101 53.5777 11.6117 50.5783 12.3444 47.5177C12.8519 45.3454 12.9491 43.3817 12.9202 41.9556Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M4.26838 40.1575C3.16507 37.3338 1.55966 35.0449 0.658674 33.8839C0.595099 34.3962 0.53299 35.0674 0.509766 35.8425C0.454879 37.6743 0.618233 40.0556 1.46849 42.2871C2.30759 44.5064 3.60611 45.9871 4.68907 46.9107C5.12959 47.2864 5.53393 47.5694 5.85602 47.7717C5.82536 47.3041 5.77132 46.6715 5.67501 45.9295C5.46619 44.3205 5.06044 42.211 4.27156 40.1569L4.26838 40.1575Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M12.6632 27.4606C11.6314 28.3597 10.3804 29.7129 9.40352 31.5834L9.20135 32.004C8.19489 34.0975 7.83678 36.2499 7.73379 37.8807C7.69736 38.4576 7.693 38.9667 7.70264 39.3814C7.98105 39.0479 8.31846 38.6306 8.68777 38.1462C9.68653 36.8365 10.9078 35.0512 11.829 33.1204C12.7356 31.1936 13.238 29.3215 13.5154 27.9233C13.6157 27.4178 13.6864 26.9753 13.7361 26.6158C13.4324 26.8302 13.0648 27.1106 12.6632 27.4606Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M7.15889 23.0454L7.23043 22.5253C7.54518 19.6881 7.36017 17.0948 7.19664 15.6517C6.9244 16.0575 6.59747 16.5777 6.25738 17.1905C5.37216 18.7855 4.41002 20.986 4.07631 23.4177C3.74032 25.8399 4.108 27.8499 4.55657 29.25C4.7215 29.7648 4.89717 30.1965 5.05235 30.5349C5.64762 29.1157 6.71893 26.2445 7.15889 23.0454Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M20.7056 14.8951C19.4372 15.269 17.7724 15.9875 16.1554 17.3693L16.021 17.4932C14.3576 18.9542 13.2217 20.7665 12.5041 22.2202C12.2403 22.7546 12.0346 23.2374 11.8812 23.6318C12.2297 23.4596 12.6507 23.2423 13.1195 22.9822C14.4495 22.2442 16.1506 21.1686 17.6705 19.808C19.177 18.446 20.3493 16.9414 21.1512 15.7693C21.4549 15.3255 21.7047 14.9307 21.8987 14.6109C21.5673 14.6707 21.1626 14.7604 20.7056 14.8951Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M15.246 9.89451L15.3989 9.48769C16.3817 6.71545 16.8681 4.08928 17.0948 2.56556C16.7641 2.88544 16.3703 3.28963 15.9481 3.76978C14.7583 5.12276 13.3571 7.06214 12.4902 9.40367C11.6163 11.7394 11.483 13.8564 11.5665 15.3854C11.595 15.9081 11.6489 16.3613 11.7069 16.7298C11.9415 16.3768 12.2271 15.9318 12.5414 15.4103C13.3841 14.0121 14.4266 12.0747 15.246 9.89451Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M24.236 2.86551C22.4046 4.24716 21.0854 6.09763 20.225 7.6144C19.8673 8.24502 19.5916 8.81333 19.3933 9.25894C19.765 9.11933 20.2233 8.93634 20.7396 8.70812C22.1292 8.09394 23.9267 7.15785 25.5896 5.86671C27.2408 4.56435 28.6049 3.04428 29.5633 1.84034C29.9762 1.32163 30.3123 0.863542 30.5622 0.509562C30.206 0.526204 29.7564 0.567871 29.2396 0.659382C27.8788 0.900297 26.0564 1.48555 24.236 2.86551Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </g>\n </svg>\n);\n\n/* ── Award badge ─────────────────────────────────────────── */\n\nconst AwardBadge = ({ heading, subheading }: StatsAward) => (\n <div className=\"stats-v2__award\">\n <Laurel />\n <div className=\"stats-v2__award-text\">\n <div className=\"stats-v2__award-heading\">{heading}</div>\n <div className=\"stats-v2__award-subheading\">{subheading}</div>\n </div>\n <Laurel flip />\n </div>\n);\n\n/* ── Stats V2 ────────────────────────────────────────────── */\n\nexport const Stats = ({\n title,\n description,\n stats,\n leftAwards = [],\n rightAwards = [],\n className,\n ...props\n}: StatsProps) => {\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\n const N = stats.length;\n const hasAwards = leftAwards.length > 0 || rightAwards.length > 0;\n const allAwards: StatsAward[] = [...leftAwards, ...rightAwards];\n\n /* ── DOM strip (Webflow's `is-1` … `is-8` trick) ─────────\n * Webflow renders 2× the unique stats and snaps everything\n * back to the start once the active item reaches index N+1.\n * Because items[N+1] holds the SAME stat as items[1] (and\n * items[N]==items[0], items[N+2]==items[2]), the reset is\n * visually invisible — the three on-screen slots\n * (above / active / below) keep showing the same text from\n * the frame before to the frame after the snap.\n *\n * The minimum strip size we need is N + 3 (so that the\n * `below` slot at the reset step has an item to point at).\n * For N ≥ 3 that's ≤ 2N, so 2N is the natural choice and\n * matches Webflow exactly.\n */\n const strip = useMemo(() => {\n if (N === 0) return [];\n const target = Math.max(2 * N, N + 3);\n return Array.from({ length: target }, (_, i) => stats[i % N]);\n }, [stats, N]);\n\n /* ── Step + invisible reset state machine ─────────────────\n * Mirrors Webflow's IX2 timeline frame-for-frame.\n *\n * Webflow's `a-2` action list runs as a sequence:\n *\n * group 0 (initial) : instant\n * group 1..4 (animations) : delay 1000ms + duration 700ms\n * group 5 (snap reset) : INSTANT, fires the moment\n * group 4's animation ends\n * loop back to group 1\n *\n * The user-visible cadence is therefore:\n * - HOLD 1000ms after mount (group 1 delay)\n * - ANIMATE 700ms ← group 1\n * - HOLD 1000ms (group 2 delay)\n * - ANIMATE 700ms ← group 2\n * - … (groups 3, 4) …\n * - ANIMATE 700ms ← group 4 (TO is-6)\n * - SNAP (instant, is-2 takes over content) ← group 5\n * - HOLD 1000ms (group 1 delay of next cycle)\n * - ANIMATE 700ms ← cycle restarts\n *\n * Three crucial details we replicate exactly:\n *\n * 1. The snap fires the **moment the previous animation\n * ends** — there's NO extra hold between group 4\n * finishing and group 5 firing. We previously held for\n * INTERVAL_MS (1700ms) before snapping, which gave the\n * loop boundary an obvious 1000ms-too-long pause.\n *\n * 2. The first hold (after mount) and the post-snap hold\n * are both 1000ms — same as every inter-step hold.\n *\n * 3. Each tick is scheduled with the exact delay it needs:\n * • first tick ........ HOLD_MS (1000ms)\n * • normal advance .... INTERVAL_MS (1700ms)\n * • advance to step N . STEP_DURATION_MS (700ms) ←\n * no hold before snap; snap fires the instant\n * the animation reaches step N's resting state\n * • after snap-back ... HOLD_MS (1000ms)\n *\n * The snap-back itself uses an explicit 3-phase dance so\n * that `transition: none` is guaranteed to be applied to\n * the DOM BEFORE the position change, otherwise some\n * browsers still animate the snap.\n *\n * idle → normal CSS transition is applied\n * snap-disable → render with step=N + `transition:none`\n * (kills any in-flight transition)\n * snap-jump → render with step=0 + `transition:none`\n * (positions snap; invisible because the\n * visible slots show the same content\n * before and after)\n * idle (again) → restore transitions; the next tick\n * (scheduled for HOLD_MS later) starts\n * the new cycle\n */\n type Phase = \"idle\" | \"snap-disable\" | \"snap-jump\";\n const [step, setStep] = useState(0);\n const [phase, setPhase] = useState<Phase>(\"idle\");\n\n /* `scheduleRef` lets the snap-back rAF re-arm the next\n animation tick after the snap completes. */\n const scheduleRef = useRef<((delayMs: number) => void) | null>(null);\n\n useEffect(() => {\n if (N <= 1) return;\n\n let timerId: number | null = null;\n let cancelled = false;\n\n const advance = () => {\n timerId = null;\n if (cancelled) return;\n setStep((prev) => {\n if (prev >= N) {\n setPhase(\"snap-disable\");\n return prev;\n }\n const next = prev + 1;\n /* When we advance INTO the final step, schedule\n the snap to fire the moment the animation ends\n (STEP_DURATION_MS later) — NOT INTERVAL_MS.\n Webflow's group 5 reset has no delay; it fires\n immediately after group 4's animation completes,\n and the post-snap 1000ms hold happens as part\n of group 1's delay in the next cycle. Holding\n for the full INTERVAL_MS here would double the\n visible pause at the loop boundary. */\n const delayMs =\n next >= N ? STEP_DURATION_MS : INTERVAL_MS;\n schedule(delayMs);\n return next;\n });\n };\n\n const schedule = (delayMs: number) => {\n if (cancelled) return;\n if (timerId !== null) window.clearTimeout(timerId);\n timerId = window.setTimeout(advance, delayMs);\n };\n\n scheduleRef.current = schedule;\n schedule(HOLD_MS);\n\n return () => {\n cancelled = true;\n scheduleRef.current = null;\n if (timerId !== null) window.clearTimeout(timerId);\n };\n }, [N]);\n\n /* Drive the reset dance with rAFs so each phase actually\n paints to screen before the next one fires. */\n useEffect(() => {\n if (phase === \"snap-disable\") {\n const raf = requestAnimationFrame(() => {\n setStep(0);\n setPhase(\"snap-jump\");\n });\n rafRef.current = raf;\n return () => cancelAnimationFrame(raf);\n }\n if (phase === \"snap-jump\") {\n const raf = requestAnimationFrame(() => {\n setPhase(\"idle\");\n /* Schedule the next animation 1000ms after the\n snap — matching Webflow's group 1 delay that\n immediately follows group 5's snap reset. */\n scheduleRef.current?.(HOLD_MS);\n });\n rafRef.current = raf;\n return () => cancelAnimationFrame(raf);\n }\n }, [phase]);\n\n /* Reset everything if the stats list itself changes. */\n useEffect(() => {\n setStep(0);\n setPhase(\"idle\");\n }, [N]);\n\n /* ── Scroll-progress parallax (Webflow IX2 list `a`) ───── */\n useEffect(() => {\n const apply = () => {\n const section = sectionRef.current;\n if (!section || window.innerWidth < PARALLAX_BREAKPOINT) {\n /* Clearing inline transforms lets the CSS stagger\n (the `.stats-v2__awards-col--left/--right` rules)\n take over again. */\n if (leftColRef.current) leftColRef.current.style.transform = \"\";\n if (rightColRef.current)\n rightColRef.current.style.transform = \"\";\n return;\n }\n\n const rect = section.getBoundingClientRect();\n const viewport = window.innerHeight;\n const totalTravel = rect.height + viewport;\n const traveled = viewport - rect.top;\n const rawProgress = traveled / totalTravel;\n const progress = Math.max(0, Math.min(1, rawProgress));\n\n const normalised = Math.max(\n 0,\n Math.min(\n 1,\n (progress - PARALLAX_START) /\n (PARALLAX_END - PARALLAX_START),\n ),\n );\n\n /* `remaining` goes 1 → 0 as the scroll progresses from\n PARALLAX_START to PARALLAX_END, i.e. it pulls each\n column back from its ±26.3% resting stagger to 0%. */\n const remaining = 1 - normalised;\n const leftOffset = -PARALLAX_MAX_PERCENT * remaining;\n const rightOffset = PARALLAX_MAX_PERCENT * remaining;\n\n if (leftColRef.current) {\n leftColRef.current.style.transform = `translateY(${leftOffset}%)`;\n }\n if (rightColRef.current) {\n rightColRef.current.style.transform = `translateY(${rightOffset}%)`;\n }\n };\n\n const onScroll = () => {\n requestAnimationFrame(apply);\n };\n\n apply();\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n window.addEventListener(\"resize\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"resize\", onScroll);\n };\n }, []);\n\n const transition = phase === \"idle\" ? TRANSITION : \"none\";\n\n return (\n <section\n ref={sectionRef}\n className={[\"stats-v2\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"stats-v2__inner\">\n <div className=\"stats-v2__header\">\n <h2 className=\"stats-v2__title\">{title}</h2>\n {description && (\n <p className=\"stats-v2__description\">{description}</p>\n )}\n </div>\n\n <div className=\"stats-v2__content\">\n {leftAwards.length > 0 && (\n <div\n ref={leftColRef}\n className=\"stats-v2__awards-col stats-v2__awards-col--left\"\n >\n {leftAwards.map((award, i) => (\n <AwardBadge key={`l-${i}`} {...award} />\n ))}\n </div>\n )}\n\n <div className=\"stats-v2__card\">\n <div className=\"stats-v2__card-track\">\n <div\n className=\"stats-v2__fade stats-v2__fade--top\"\n aria-hidden=\"true\"\n />\n <div\n className=\"stats-v2__fade stats-v2__fade--bottom\"\n aria-hidden=\"true\"\n />\n {strip.map((stat, i) => {\n const slot = slotForIndex(i, step);\n const active = slot === \"active\";\n return (\n <div\n key={i}\n className={[\n \"stats-v2__stat\",\n active\n ? \"stats-v2__stat--active\"\n : \"stats-v2__stat--inactive\",\n ].join(\" \")}\n style={getSlotStyle(slot, transition)}\n aria-hidden={!active}\n >\n <span className=\"stats-v2__stat-value\">\n {stat.value}\n </span>\n <span className=\"stats-v2__stat-label\">\n {stat.label}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n\n {rightAwards.length > 0 && (\n <div\n ref={rightColRef}\n className=\"stats-v2__awards-col stats-v2__awards-col--right\"\n >\n {rightAwards.map((award, i) => (\n <AwardBadge key={`r-${i}`} {...award} />\n ))}\n </div>\n )}\n\n {hasAwards && (\n <div className=\"stats-v2__awards-mobile\">\n {allAwards.map((award, i) => (\n <AwardBadge key={`m-${i}`} {...award} />\n ))}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default Stats;\n","import { useEffect, useRef, useState } from \"react\";\nimport type { StatsSimpleProps } from \"./StatsSimple.types\";\nimport \"./StatsSimple.css\";\n\n/* ── Count-up helpers ─────────────────────────────────────────\n * Parses a display string like \"$118M+\" into its constituent\n * parts so we can animate only the numeric portion while\n * keeping the prefix/suffix stable.\n *\n * Examples:\n * \"117K+\" → { prefix: \"\", number: 117, suffix: \"K+\" }\n * \"$118M+\" → { prefix: \"$\", number: 118, suffix: \"M+\" }\n * \"190+\" → { prefix: \"\", number: 190, suffix: \"+\" }\n * \"3M+\" → { prefix: \"\", number: 3, suffix: \"M+\" }\n * \"1999\" → { prefix: \"\", number: 1999, suffix: \"\" }\n */\nfunction parseValue(raw: string): {\n prefix: string;\n number: number;\n suffix: string;\n} {\n const match = raw.match(/^([^0-9]*)([0-9]+(?:\\.[0-9]+)?)(.*)$/);\n if (!match) return { prefix: \"\", number: 0, suffix: raw };\n return {\n prefix: match[1],\n number: parseFloat(match[2]),\n suffix: match[3],\n };\n}\n\nconst DURATION_MS = 1800;\nconst EASING = (t: number) => 1 - Math.pow(1 - t, 3); // ease-out-cubic\n\nfunction useCountUp(target: number, active: boolean) {\n const [display, setDisplay] = useState(0);\n const rafRef = useRef<number | null>(null);\n const startRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!active) return;\n\n startRef.current = null;\n\n const tick = (now: number) => {\n if (startRef.current === null) startRef.current = now;\n const elapsed = now - startRef.current;\n const progress = Math.min(elapsed / DURATION_MS, 1);\n const eased = EASING(progress);\n setDisplay(Math.round(eased * target));\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick);\n }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current);\n };\n }, [target, active]);\n\n return display;\n}\n\n/* ── Animated stat item ───────────────────────────────────── */\n\nconst AnimatedValue = ({\n raw,\n active,\n}: {\n raw: string;\n active: boolean;\n}) => {\n const { prefix, number, suffix } = parseValue(raw);\n const count = useCountUp(number, active);\n\n /* Format with locale thousands separators if the original\n value contained a comma or is ≥ 1000 without a suffix\n that implies it's already abbreviated (K/M/B). */\n const formatted =\n number >= 1000 && !/[KMBkmb]/.test(suffix)\n ? count.toLocaleString()\n : String(count);\n\n return (\n <span className=\"stats-simple__value\">\n {prefix}\n {formatted}\n {suffix}\n </span>\n );\n};\n\n/* ── StatsSimple ──────────────────────────────────────────── */\n\nexport const StatsSimple = ({\n stats,\n className,\n ...props\n}: StatsSimpleProps) => {\n const sectionRef = useRef<HTMLElement>(null);\n const [animated, setAnimated] = useState(false);\n\n useEffect(() => {\n const el = sectionRef.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setAnimated(true);\n observer.disconnect();\n }\n },\n { threshold: 0.25 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, []);\n\n return (\n <section\n ref={sectionRef}\n className={[\"stats-simple\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"stats-simple__inner\">\n {stats.map((stat, i) => (\n <div key={i} className=\"stats-simple__item\">\n <AnimatedValue raw={stat.value} active={animated} />\n <span className=\"stats-simple__label\">{stat.label}</span>\n </div>\n ))}\n </div>\n </section>\n );\n};\n\nexport default StatsSimple;\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 { PersonItem, AvatarGridProps } from \"./Leaders.types\";\nimport \"./Leaders.css\";\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: PersonItem }) => (\n <>\n <div className=\"avatar-grid__image-wrapper\">\n <img\n src={item.imageUrl}\n alt={item.name}\n className=\"avatar-grid__image\"\n loading=\"lazy\"\n />\n </div>\n <div className=\"avatar-grid__content\">\n <h3 className=\"avatar-grid__name\">{item.name}</h3>\n <p className=\"avatar-grid__role\">{item.role}</p>\n </div>\n {item.linkUrl && (\n <Link\n href={item.linkUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n icon={item.linkIcon}\n label={item.linkLabel ?? \"Profile\"}\n colorScheme=\"black\"\n showChevron={false}\n className=\"avatar-grid__link\"\n />\n )}\n </>\n);\n\nexport const AvatarGrid = ({\n title,\n description,\n items,\n initialVisibleCount = 4,\n expandText = \"View all\",\n collapseText = \"View less\",\n className,\n ...props\n}: AvatarGridProps) => {\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={[\"avatar-grid\", className].filter(Boolean).join(\" \")} {...props}>\n <div className=\"avatar-grid__container\">\n {(title || description) && (\n <div className=\"avatar-grid__header\">\n {title && <h2 className=\"avatar-grid__title\">{title}</h2>}\n {description && <p className=\"avatar-grid__description\">{description}</p>}\n </div>\n )}\n\n <div className=\"avatar-grid__grid-wrapper\">\n {/* ── Always-visible first N cards ── */}\n <div className=\"avatar-grid__grid\">\n {visibleItems.map((item, i) => (\n <div key={i} className=\"avatar-grid__card\">\n <CardContent item={item} />\n </div>\n ))}\n </div>\n\n {/* ── Animated extra cards ── */}\n {hasMore && (\n <div\n className={[\n \"avatar-grid__extra-cards\",\n isExpanded ? \"avatar-grid__extra-cards--open\" : \"\",\n ].join(\" \")}\n aria-hidden={!isExpanded}\n >\n <div className=\"avatar-grid__extra-grid\">\n {extraItems.map((item, i) => (\n <div\n key={i}\n className={[\n \"avatar-grid__card\",\n \"avatar-grid__extra-card\",\n isExpanded ? \"avatar-grid__extra-card--visible\" : \"\",\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=\"avatar-grid__actions\">\n <Button\n variant=\"secondary\"\n colorScheme=\"black\"\n onClick={() => setIsExpanded(!isExpanded)}\n iconPosition=\"icon-right\"\n icon={isExpanded ? <ChevronUpIcon /> : <ChevronDownIcon />}\n fullWidth\n >\n {isExpanded ? collapseText : expandText}\n </Button>\n </div>\n )}\n </div>\n </section>\n );\n};\n\n/** @deprecated Use AvatarGrid instead */\nexport const PeopleGrid = AvatarGrid;\n/** @deprecated Use AvatarGrid instead */\nexport const Leaders = AvatarGrid;\n\nexport default AvatarGrid;\n","import type { ImageBannerProps } from \"./ImageBanner.types\";\nimport { Link } from \"../../primitives/Link\";\nimport \"./ImageBanner.css\";\n\nexport const ImageBanner = ({\n variant = \"split\",\n title = \"Join our global community\",\n description = \"Connect with traders around the world to exchange insights, explore portfolios, and gain valuable expertise.\",\n ctaLabel = \"Trader's Hub\",\n ctaHref,\n onCtaClick,\n imageUrl,\n imageAlt = \"\",\n className,\n ...props\n}: ImageBannerProps) => {\n const isFullBg = variant === \"full-bg\";\n\n return (\n <section\n className={[\"image-banner\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div\n className={[\n \"image-banner__inner\",\n `image-banner__inner--${variant}`,\n ].join(\" \")}\n >\n {/* ── Full-bg: image as CSS background ── */}\n {isFullBg && imageUrl && (\n <div className=\"image-banner__bg-image-wrapper\">\n <img\n src={imageUrl}\n alt={imageAlt}\n className=\"image-banner__bg-image\"\n loading=\"lazy\"\n />\n <div className=\"image-banner__bg-overlay\" aria-hidden=\"true\" />\n </div>\n )}\n\n {/* ── Text + CTA ── */}\n <div className=\"image-banner__content\">\n <h2 className=\"image-banner__title\">{title}</h2>\n\n {description && (\n <p className=\"image-banner__description\">{description}</p>\n )}\n\n {ctaLabel && (\n <div className=\"image-banner__actions\">\n <Link\n colorScheme=\"coral\"\n label={ctaLabel}\n href={ctaHref}\n onClick={onCtaClick}\n showChevron\n className=\"image-banner__cta-link\"\n />\n </div>\n )}\n </div>\n\n {/* ── Split: image in right panel ── */}\n {!isFullBg && imageUrl && (\n <div className=\"image-banner__image-wrapper\">\n <img\n src={imageUrl}\n alt={imageAlt}\n className=\"image-banner__image\"\n loading=\"lazy\"\n />\n </div>\n )}\n </div>\n </section>\n );\n};\n\nexport default ImageBanner;\n","import { useState, useEffect, useRef } from \"react\";\nimport type { TestimonialProps } from \"./Testimonial.types\";\nimport quoteLeft from \"../../assets/quote-left.webp\";\nimport quoteRight from \"../../assets/quote-right.webp\";\nimport \"./Testimonial.css\";\n\ntype Phase = \"idle\" | \"exiting\";\n\nexport const Testimonial = ({\n title,\n items,\n className,\n ...props\n}: TestimonialProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const [phase, setPhase] = useState<Phase>(\"idle\");\n const pendingIndex = useRef<number | null>(null);\n const autoRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const goTo = (next: number) => {\n if (next === activeIndex || phase !== \"idle\") return;\n pendingIndex.current = next;\n setPhase(\"exiting\");\n };\n\n /* After exit transition (200ms), switch to the new slide */\n useEffect(() => {\n if (phase === \"exiting\") {\n const t = setTimeout(() => {\n setActiveIndex(pendingIndex.current ?? activeIndex);\n setPhase(\"idle\");\n }, 200);\n return () => clearTimeout(t);\n }\n }, [phase, activeIndex]);\n\n /* Auto-advance every 5 s; resets on manual navigation */\n useEffect(() => {\n if (items.length <= 1) return;\n autoRef.current = setTimeout(() => {\n const next = (activeIndex + 1) % items.length;\n pendingIndex.current = next;\n setPhase(\"exiting\");\n }, 5000);\n return () => {\n if (autoRef.current) clearTimeout(autoRef.current);\n };\n }, [activeIndex, items.length]);\n\n if (!items || items.length === 0) return null;\n\n return (\n <section\n className={[\"testimonial\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"testimonial__container\">\n {title && <h2 className=\"testimonial__title\">{title}</h2>}\n\n <div className=\"testimonial__carousel\">\n {/* ── All slides stacked — container height = tallest card ── */}\n <div className=\"testimonial__slides\">\n {items.map((item, i) => {\n const isActive = i === activeIndex;\n const isExiting = isActive && phase === \"exiting\";\n\n const slideClass = [\n \"testimonial__slide\",\n isActive && !isExiting ? \"testimonial__slide--active\" : \"\",\n isExiting ? \"testimonial__slide--exiting\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n key={i}\n className={slideClass}\n role=\"region\"\n aria-label={`Testimonial ${i + 1} of ${items.length}`}\n aria-hidden={!isActive}\n >\n <div className=\"testimonial__card\">\n {/* Opening quote mark */}\n <span className=\"testimonial__quotemark testimonial__quotemark--open\" aria-hidden=\"true\">\n <img src={quoteLeft} alt=\"\" className=\"testimonial__quotemark-img\" />\n </span>\n\n {/* Quote */}\n <p className=\"testimonial__quote\">{item.quote}</p>\n\n {/* Author */}\n <div className=\"testimonial__author\">\n {item.avatarUrl && (\n <img\n src={item.avatarUrl}\n alt={item.authorName}\n className=\"testimonial__author-avatar\"\n loading=\"lazy\"\n />\n )}\n <p className=\"testimonial__author-name\">\n {item.authorName}\n </p>\n {item.authorLocation && (\n <p className=\"testimonial__author-location\">\n {item.authorLocation}\n </p>\n )}\n </div>\n\n {/* Closing quote mark */}\n <span className=\"testimonial__quotemark testimonial__quotemark--close\" aria-hidden=\"true\">\n <img src={quoteRight} alt=\"\" className=\"testimonial__quotemark-img\" />\n </span>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ── Dot pagination ── */}\n {items.length > 1 && (\n <div\n className=\"testimonial__dots\"\n role=\"tablist\"\n aria-label=\"Testimonial navigation\"\n >\n {items.map((_, i) => (\n <button\n key={i}\n role=\"tab\"\n aria-selected={i === activeIndex}\n aria-label={`Go to testimonial ${i + 1}`}\n className={[\n \"testimonial__dot\",\n i === activeIndex\n ? \"testimonial__dot--active\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => {\n if (autoRef.current) clearTimeout(autoRef.current);\n goTo(i);\n }}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </section>\n );\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","useState","jsx","jsxs","useState","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","useRef","useState","useEffect","useEffect","useRef","useState","jsx","jsxs","EASING","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","useMemo","Fragment","jsx","jsxs","useState","useMemo","useState","Fragment","jsx","jsxs","ChevronDownIcon","useState","jsx","jsxs","useState","useEffect","useRef","jsx","jsxs","useState","useRef","useEffect"]}
|