@deriv-web-design/ui 0.0.14 → 0.0.17

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.mjs CHANGED
@@ -1793,11 +1793,76 @@ var Stats = ({
1793
1793
  );
1794
1794
  };
1795
1795
 
1796
- // templates/Scrollytelling/Scrollytelling.tsx
1796
+ // templates/FeatureScroll/FeatureScroll.tsx
1797
+ import { useLayoutEffect, useRef as useRef6, useState as useState8 } from "react";
1798
+
1799
+ // components/DotLottieInView/DotLottieInView.tsx
1797
1800
  import { useEffect as useEffect5, useRef as useRef5, useState as useState7 } from "react";
1798
1801
  import { DotLottieReact } from "@lottiefiles/dotlottie-react";
1799
- import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
1800
- var SCROLLYTELLING_DATA = [
1802
+ import { jsx as jsx21 } from "react/jsx-runtime";
1803
+ function DotLottieInView({
1804
+ enabled = true,
1805
+ rootMargin = "0px",
1806
+ threshold = 0.2,
1807
+ className,
1808
+ style,
1809
+ ...dotProps
1810
+ }) {
1811
+ const wrapRef = useRef5(null);
1812
+ const [inView, setInView] = useState7(false);
1813
+ const [dotLottie, setDotLottie] = useState7(null);
1814
+ useEffect5(() => {
1815
+ const el = wrapRef.current;
1816
+ if (!el) return;
1817
+ const observer = new IntersectionObserver(
1818
+ ([entry]) => {
1819
+ setInView(entry.isIntersecting);
1820
+ },
1821
+ { root: null, rootMargin, threshold }
1822
+ );
1823
+ observer.observe(el);
1824
+ return () => observer.disconnect();
1825
+ }, [rootMargin, threshold]);
1826
+ useEffect5(() => {
1827
+ if (!dotLottie) return;
1828
+ if (!enabled || !inView) {
1829
+ dotLottie.stop();
1830
+ return;
1831
+ }
1832
+ dotLottie.stop();
1833
+ dotLottie.play();
1834
+ }, [dotLottie, enabled, inView]);
1835
+ return /* @__PURE__ */ jsx21(
1836
+ "div",
1837
+ {
1838
+ ref: wrapRef,
1839
+ className,
1840
+ style: {
1841
+ width: "100%",
1842
+ height: "100%",
1843
+ minHeight: 0,
1844
+ display: "flex",
1845
+ alignItems: "center",
1846
+ justifyContent: "center",
1847
+ backgroundColor: "transparent",
1848
+ ...style
1849
+ },
1850
+ children: /* @__PURE__ */ jsx21(
1851
+ DotLottieReact,
1852
+ {
1853
+ ...dotProps,
1854
+ loop: false,
1855
+ autoplay: false,
1856
+ dotLottieRefCallback: setDotLottie
1857
+ }
1858
+ )
1859
+ }
1860
+ );
1861
+ }
1862
+
1863
+ // templates/FeatureScroll/FeatureScroll.tsx
1864
+ import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
1865
+ var FEATURE_SCROLL_DATA = [
1801
1866
  {
1802
1867
  title: "Forex",
1803
1868
  description: "Trade the most popular currency pairs with high leverage, tight spreads, and fast execution.",
@@ -1841,16 +1906,16 @@ var SCROLLYTELLING_DATA = [
1841
1906
  mediaUrl: "https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064f2c16e4e0732abfb_Stock%20Indices.lottie"
1842
1907
  }
1843
1908
  ];
1844
- var ChevronRight2 = () => /* @__PURE__ */ jsx21(
1909
+ var ChevronRight2 = () => /* @__PURE__ */ jsx22(
1845
1910
  "svg",
1846
1911
  {
1847
- className: "scrolly__item-link-icon",
1912
+ className: "fs__item-link-icon",
1848
1913
  width: "16",
1849
1914
  height: "16",
1850
1915
  viewBox: "0 0 16 16",
1851
1916
  fill: "none",
1852
1917
  "aria-hidden": "true",
1853
- children: /* @__PURE__ */ jsx21(
1918
+ children: /* @__PURE__ */ jsx22(
1854
1919
  "path",
1855
1920
  {
1856
1921
  d: "M6 3l5 5-5 5",
@@ -1868,16 +1933,15 @@ function resolveMediaType(item) {
1868
1933
  }
1869
1934
  var MediaRenderer = ({ item, active }) => {
1870
1935
  if (resolveMediaType(item) === "lottie") {
1871
- return /* @__PURE__ */ jsx21(
1872
- DotLottieReact,
1936
+ return /* @__PURE__ */ jsx22(
1937
+ DotLottieInView,
1873
1938
  {
1874
1939
  src: item.mediaUrl,
1875
- loop: true,
1876
- autoplay: active
1940
+ enabled: active
1877
1941
  }
1878
1942
  );
1879
1943
  }
1880
- return /* @__PURE__ */ jsx21(
1944
+ return /* @__PURE__ */ jsx22(
1881
1945
  "img",
1882
1946
  {
1883
1947
  src: item.mediaUrl,
@@ -1886,87 +1950,121 @@ var MediaRenderer = ({ item, active }) => {
1886
1950
  }
1887
1951
  );
1888
1952
  };
1889
- var Scrollytelling = ({
1953
+ var FeatureScroll = ({
1890
1954
  header,
1891
1955
  items,
1892
1956
  variant = "media-right",
1893
1957
  className,
1894
1958
  ...props
1895
1959
  }) => {
1896
- const [activeIndex, setActiveIndex] = useState7(0);
1897
- const itemRefs = useRef5([]);
1898
- useEffect5(() => {
1899
- const elements = itemRefs.current.filter(Boolean);
1900
- if (!elements.length) return;
1901
- const observer = new IntersectionObserver(
1902
- (entries) => {
1903
- entries.forEach((entry) => {
1904
- if (entry.isIntersecting) {
1905
- const idx = itemRefs.current.indexOf(
1906
- entry.target
1907
- );
1908
- if (idx !== -1) setActiveIndex(idx);
1909
- }
1910
- });
1911
- },
1912
- {
1913
- /* Fire when 50 % of the text block is visible.
1914
- rootMargin trims the effective viewport to its
1915
- middle third, preventing accidental fires when
1916
- items are only just entering / leaving the screen. */
1917
- threshold: 0.5,
1918
- rootMargin: "-15% 0px -15% 0px"
1960
+ const [activeIndex, setActiveIndex] = useState8(0);
1961
+ const titleRefs = useRef6([]);
1962
+ const mediaColRef = useRef6(null);
1963
+ useLayoutEffect(() => {
1964
+ if (items.length === 0) return;
1965
+ const readThresholdPx = () => {
1966
+ const col = mediaColRef.current;
1967
+ if (!col) return 80;
1968
+ const top = getComputedStyle(col).top;
1969
+ const px = parseFloat(top);
1970
+ return Number.isFinite(px) ? px : 80;
1971
+ };
1972
+ let rafId = 0;
1973
+ const tick = () => {
1974
+ rafId = 0;
1975
+ if (typeof window === "undefined") return;
1976
+ if (!window.matchMedia("(min-width: 992px)").matches) return;
1977
+ const threshold = readThresholdPx();
1978
+ const refs = titleRefs.current;
1979
+ let pinned = -1;
1980
+ for (let i = 0; i < items.length; i++) {
1981
+ const el = refs[i];
1982
+ if (!el) continue;
1983
+ if (el.getBoundingClientRect().top <= threshold) pinned = i;
1919
1984
  }
1920
- );
1921
- elements.forEach((el) => observer.observe(el));
1922
- return () => observer.disconnect();
1985
+ const mediaIndex = Math.min(
1986
+ items.length - 1,
1987
+ pinned + 1
1988
+ );
1989
+ setActiveIndex(
1990
+ (prev) => prev === mediaIndex ? prev : mediaIndex
1991
+ );
1992
+ };
1993
+ const schedule = () => {
1994
+ if (rafId !== 0) return;
1995
+ rafId = window.requestAnimationFrame(tick);
1996
+ };
1997
+ tick();
1998
+ window.addEventListener("scroll", schedule, { passive: true });
1999
+ window.addEventListener("resize", schedule, { passive: true });
2000
+ const mq = window.matchMedia("(min-width: 992px)");
2001
+ mq.addEventListener("change", schedule);
2002
+ return () => {
2003
+ window.removeEventListener("scroll", schedule);
2004
+ window.removeEventListener("resize", schedule);
2005
+ mq.removeEventListener("change", schedule);
2006
+ if (rafId !== 0) window.cancelAnimationFrame(rafId);
2007
+ };
1923
2008
  }, [items.length]);
1924
2009
  const rootClass = [
1925
- "scrolly",
1926
- `scrolly--${variant}`,
2010
+ "fs",
2011
+ `fs--${variant}`,
1927
2012
  className
1928
2013
  ].filter(Boolean).join(" ");
1929
- return /* @__PURE__ */ jsx21("section", { className: rootClass, ...props, children: /* @__PURE__ */ jsxs20("div", { className: "scrolly__inner", children: [
1930
- /* @__PURE__ */ jsx21("h2", { className: "scrolly__header", children: header }),
1931
- /* @__PURE__ */ jsxs20("div", { className: "scrolly__layout", children: [
1932
- /* @__PURE__ */ jsx21("div", { className: "scrolly__media-col", "aria-hidden": "true", children: /* @__PURE__ */ jsx21("div", { className: "scrolly__media-wrap", children: items.map((item, i) => /* @__PURE__ */ jsx21(
2014
+ if (items.length === 0) {
2015
+ return /* @__PURE__ */ jsx22("section", { className: rootClass, ...props, children: /* @__PURE__ */ jsx22("div", { className: "fs__inner", children: /* @__PURE__ */ jsx22("h2", { className: "fs__header", children: header }) }) });
2016
+ }
2017
+ return /* @__PURE__ */ jsx22("section", { className: rootClass, ...props, children: /* @__PURE__ */ jsxs20("div", { className: "fs__inner", children: [
2018
+ /* @__PURE__ */ jsx22("h2", { className: "fs__header", children: header }),
2019
+ /* @__PURE__ */ jsxs20("div", { className: "fs__layout", children: [
2020
+ /* @__PURE__ */ jsx22("div", { className: "fs__media-col", "aria-hidden": "true", children: /* @__PURE__ */ jsx22(
1933
2021
  "div",
1934
2022
  {
1935
- className: [
1936
- "scrolly__media-item",
1937
- i === activeIndex ? "scrolly__media-item--active" : ""
1938
- ].filter(Boolean).join(" "),
1939
- children: /* @__PURE__ */ jsx21(
1940
- MediaRenderer,
2023
+ ref: mediaColRef,
2024
+ className: "fs__media-sticky",
2025
+ children: /* @__PURE__ */ jsx22("div", { className: "fs__media-wrap", children: items.map((item, i) => /* @__PURE__ */ jsx22(
2026
+ "div",
1941
2027
  {
1942
- item,
1943
- active: i === activeIndex
1944
- }
1945
- )
1946
- },
1947
- i
1948
- )) }) }),
1949
- /* @__PURE__ */ jsx21("div", { className: "scrolly__content-col", children: items.map((item, i) => /* @__PURE__ */ jsxs20(
2028
+ className: [
2029
+ "fs__media-item",
2030
+ i === activeIndex ? "fs__media-item--active" : ""
2031
+ ].filter(Boolean).join(" "),
2032
+ children: /* @__PURE__ */ jsx22(
2033
+ MediaRenderer,
2034
+ {
2035
+ item,
2036
+ active: i === activeIndex
2037
+ }
2038
+ )
2039
+ },
2040
+ i
2041
+ )) })
2042
+ }
2043
+ ) }),
2044
+ /* @__PURE__ */ jsx22("div", { className: "fs__content-col", children: items.map((item, i) => /* @__PURE__ */ jsxs20(
1950
2045
  "div",
1951
2046
  {
1952
- ref: (el) => {
1953
- itemRefs.current[i] = el;
1954
- },
1955
- className: [
1956
- "scrolly__item",
1957
- i === activeIndex ? "scrolly__item--active" : "scrolly__item--inactive"
1958
- ].join(" "),
2047
+ className: "fs__item",
1959
2048
  children: [
1960
- /* @__PURE__ */ jsx21("h3", { className: "scrolly__item-title", children: item.title }),
1961
- /* @__PURE__ */ jsx21("p", { className: "scrolly__item-desc", children: item.description }),
2049
+ /* @__PURE__ */ jsx22(
2050
+ "h3",
2051
+ {
2052
+ ref: (el) => {
2053
+ titleRefs.current[i] = el;
2054
+ },
2055
+ className: "fs__item-title",
2056
+ children: item.title
2057
+ }
2058
+ ),
2059
+ /* @__PURE__ */ jsx22("p", { className: "fs__item-desc", children: item.description }),
1962
2060
  /* @__PURE__ */ jsxs20(
1963
2061
  "a",
1964
2062
  {
1965
2063
  href: item.link,
1966
- className: "scrolly__item-link",
2064
+ className: "fs__item-link",
1967
2065
  children: [
1968
- /* @__PURE__ */ jsx21("span", { children: item.linkLabel }),
1969
- /* @__PURE__ */ jsx21(ChevronRight2, {})
2066
+ /* @__PURE__ */ jsx22("span", { children: item.linkLabel }),
2067
+ /* @__PURE__ */ jsx22(ChevronRight2, {})
1970
2068
  ]
1971
2069
  }
1972
2070
  )
@@ -1975,28 +2073,28 @@ var Scrollytelling = ({
1975
2073
  i
1976
2074
  )) })
1977
2075
  ] }),
1978
- /* @__PURE__ */ jsx21("div", { className: "scrolly__mobile-list", children: items.map((item, i) => /* @__PURE__ */ jsxs20("div", { className: "scrolly__mobile-item", children: [
1979
- /* @__PURE__ */ jsx21("h3", { className: "scrolly__item-title", children: item.title }),
1980
- /* @__PURE__ */ jsx21("p", { className: "scrolly__item-desc", children: item.description }),
2076
+ /* @__PURE__ */ jsx22("div", { className: "fs__mobile-list", children: items.map((item, i) => /* @__PURE__ */ jsxs20("div", { className: "fs__mobile-item", children: [
2077
+ /* @__PURE__ */ jsx22("h3", { className: "fs__item-title", children: item.title }),
2078
+ /* @__PURE__ */ jsx22("div", { className: "fs__mobile-media", children: /* @__PURE__ */ jsx22(MediaRenderer, { item, active: true }) }),
2079
+ /* @__PURE__ */ jsx22("p", { className: "fs__item-desc", children: item.description }),
1981
2080
  /* @__PURE__ */ jsxs20(
1982
2081
  "a",
1983
2082
  {
1984
2083
  href: item.link,
1985
- className: "scrolly__item-link",
2084
+ className: "fs__item-link",
1986
2085
  children: [
1987
- /* @__PURE__ */ jsx21("span", { children: "Learn more" }),
1988
- /* @__PURE__ */ jsx21(ChevronRight2, {})
2086
+ /* @__PURE__ */ jsx22("span", { children: item.linkLabel }),
2087
+ /* @__PURE__ */ jsx22(ChevronRight2, {})
1989
2088
  ]
1990
2089
  }
1991
- ),
1992
- /* @__PURE__ */ jsx21("div", { className: "scrolly__mobile-media", children: /* @__PURE__ */ jsx21(MediaRenderer, { item, active: true }) })
2090
+ )
1993
2091
  ] }, i)) })
1994
2092
  ] }) });
1995
2093
  };
1996
2094
 
1997
2095
  // templates/StickyStackedCards/StickyStackedCards.tsx
1998
- import { useEffect as useEffect6, useRef as useRef6 } from "react";
1999
- import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
2096
+ import { useEffect as useEffect6, useRef as useRef7 } from "react";
2097
+ import { jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
2000
2098
  var PLACEHOLDER_IMAGE = "https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp";
2001
2099
  var STEPS_DATA = [
2002
2100
  {
@@ -2025,7 +2123,7 @@ var StickyStackedCards = ({
2025
2123
  className,
2026
2124
  ...props
2027
2125
  }) => {
2028
- const cardRefs = useRef6([]);
2126
+ const cardRefs = useRef7([]);
2029
2127
  useEffect6(() => {
2030
2128
  if (typeof window === "undefined") return;
2031
2129
  let rafId = 0;
@@ -2060,14 +2158,14 @@ var StickyStackedCards = ({
2060
2158
  cancelAnimationFrame(rafId);
2061
2159
  };
2062
2160
  }, [items.length]);
2063
- return /* @__PURE__ */ jsx22(
2161
+ return /* @__PURE__ */ jsx23(
2064
2162
  "section",
2065
2163
  {
2066
2164
  className: ["ssc", className].filter(Boolean).join(" "),
2067
2165
  ...props,
2068
2166
  children: /* @__PURE__ */ jsxs21("div", { className: "ssc__inner", children: [
2069
- /* @__PURE__ */ jsx22("h2", { className: "ssc__header", children: header }),
2070
- /* @__PURE__ */ jsx22("div", { className: "ssc__track", children: items.map((item, i) => /* @__PURE__ */ jsxs21(
2167
+ /* @__PURE__ */ jsx23("h2", { className: "ssc__header", children: header }),
2168
+ /* @__PURE__ */ jsx23("div", { className: "ssc__track", children: items.map((item, i) => /* @__PURE__ */ jsxs21(
2071
2169
  "div",
2072
2170
  {
2073
2171
  ref: (el) => {
@@ -2094,10 +2192,10 @@ var StickyStackedCards = ({
2094
2192
  },
2095
2193
  children: [
2096
2194
  /* @__PURE__ */ jsxs21("div", { className: "ssc__card-content", children: [
2097
- /* @__PURE__ */ jsx22("h3", { className: "ssc__card-title", children: item.title }),
2098
- /* @__PURE__ */ jsx22("p", { className: "ssc__card-desc", children: item.description })
2195
+ /* @__PURE__ */ jsx23("h3", { className: "ssc__card-title", children: item.title }),
2196
+ /* @__PURE__ */ jsx23("p", { className: "ssc__card-desc", children: item.description })
2099
2197
  ] }),
2100
- /* @__PURE__ */ jsx22("div", { className: "ssc__card-image", children: /* @__PURE__ */ jsx22(
2198
+ /* @__PURE__ */ jsx23("div", { className: "ssc__card-image", children: /* @__PURE__ */ jsx23(
2101
2199
  "img",
2102
2200
  {
2103
2201
  src: item.imageUrl,
@@ -2115,7 +2213,7 @@ var StickyStackedCards = ({
2115
2213
  };
2116
2214
 
2117
2215
  // templates/CTABanner/CTABanner.tsx
2118
- import { useRef as useRef7 } from "react";
2216
+ import { useRef as useRef8 } from "react";
2119
2217
  import {
2120
2218
  motion,
2121
2219
  useScroll,
@@ -2123,7 +2221,7 @@ import {
2123
2221
  useTransform,
2124
2222
  useMotionTemplate
2125
2223
  } from "framer-motion";
2126
- import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
2224
+ import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
2127
2225
  var ENTRANCE = {
2128
2226
  near: 80,
2129
2227
  mid: 130,
@@ -2369,7 +2467,7 @@ var CTABanner = ({
2369
2467
  ...props
2370
2468
  }) => {
2371
2469
  const resolvedAvatars = avatars ?? (variant === "compact" ? COMPACT_AVATAR_DATA : AVATAR_DATA);
2372
- const sectionRef = useRef7(null);
2470
+ const sectionRef = useRef8(null);
2373
2471
  const { scrollYProgress } = useScroll({
2374
2472
  target: sectionRef,
2375
2473
  offset: ["start end", "end start"]
@@ -2394,7 +2492,7 @@ var CTABanner = ({
2394
2492
  className: ["ctab", variant === "compact" ? "ctab--compact" : "", className].filter(Boolean).join(" "),
2395
2493
  ...props,
2396
2494
  children: [
2397
- /* @__PURE__ */ jsx23(
2495
+ /* @__PURE__ */ jsx24(
2398
2496
  motion.div,
2399
2497
  {
2400
2498
  className: "ctab__grid",
@@ -2402,7 +2500,7 @@ var CTABanner = ({
2402
2500
  "aria-hidden": "true"
2403
2501
  }
2404
2502
  ),
2405
- /* @__PURE__ */ jsx23("div", { className: "ctab__inner", children: /* @__PURE__ */ jsxs22("div", { className: "ctab__stage", children: [
2503
+ /* @__PURE__ */ jsx24("div", { className: "ctab__inner", children: /* @__PURE__ */ jsxs22("div", { className: "ctab__stage", children: [
2406
2504
  resolvedAvatars.map((avatar, index) => {
2407
2505
  const posStyle = {};
2408
2506
  if (avatar.desktopPos.left) posStyle["--av-d-left"] = avatar.desktopPos.left;
@@ -2411,7 +2509,7 @@ var CTABanner = ({
2411
2509
  if (avatar.mobilePos?.left) posStyle["--av-m-left"] = avatar.mobilePos.left;
2412
2510
  if (avatar.mobilePos?.right) posStyle["--av-m-right"] = avatar.mobilePos.right;
2413
2511
  if (avatar.mobilePos?.top) posStyle["--av-m-top"] = avatar.mobilePos.top;
2414
- return /* @__PURE__ */ jsx23(
2512
+ return /* @__PURE__ */ jsx24(
2415
2513
  motion.div,
2416
2514
  {
2417
2515
  className: [
@@ -2425,7 +2523,7 @@ var CTABanner = ({
2425
2523
  opacity: avatarOpacity,
2426
2524
  filter: avatarFilter
2427
2525
  },
2428
- children: /* @__PURE__ */ jsx23(
2526
+ children: /* @__PURE__ */ jsx24(
2429
2527
  "img",
2430
2528
  {
2431
2529
  src: avatar.imageUrl,
@@ -2444,8 +2542,8 @@ var CTABanner = ({
2444
2542
  className: "ctab__hero",
2445
2543
  style: { y: heroY, opacity: heroOpacity },
2446
2544
  children: [
2447
- /* @__PURE__ */ jsx23("h2", { className: "ctab__headline", children: headline }),
2448
- /* @__PURE__ */ jsx23("a", { href: ctaHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "black", variant: "primary", label: ctaLabel }) })
2545
+ /* @__PURE__ */ jsx24("h2", { className: "ctab__headline", children: headline }),
2546
+ /* @__PURE__ */ jsx24("a", { href: ctaHref, children: /* @__PURE__ */ jsx24(Button, { colorScheme: "black", variant: "primary", label: ctaLabel }) })
2449
2547
  ]
2450
2548
  }
2451
2549
  )
@@ -2456,14 +2554,14 @@ var CTABanner = ({
2456
2554
  };
2457
2555
 
2458
2556
  // components/Navbar/Navbar.tsx
2459
- import { useRef as useRef8, useState as useState8, useEffect as useEffect7, useCallback as useCallback2 } from "react";
2557
+ import { useRef as useRef9, useState as useState9, useEffect as useEffect7, useCallback as useCallback2 } from "react";
2460
2558
  import { motion as motion2, AnimatePresence } from "framer-motion";
2461
2559
 
2462
2560
  // assets/icon-globe.svg
2463
2561
  var icon_globe_default = "./icon-globe-S54WYYEK.svg";
2464
2562
 
2465
2563
  // components/Navbar/Navbar.tsx
2466
- import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2564
+ import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
2467
2565
  var EASE_OUT_EXPO = [0.16, 1, 0.3, 1];
2468
2566
  var dropdownVariants = {
2469
2567
  hidden: { opacity: 0, scale: 0.96, y: -8 },
@@ -2477,7 +2575,7 @@ var accordionVariants = {
2477
2575
  hidden: { height: 0, opacity: 0 },
2478
2576
  visible: { height: "auto", opacity: 1 }
2479
2577
  };
2480
- var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ jsx24(
2578
+ var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ jsx25(
2481
2579
  "svg",
2482
2580
  {
2483
2581
  className,
@@ -2486,7 +2584,7 @@ var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ jsx24(
2486
2584
  viewBox: "0 0 14 14",
2487
2585
  fill: "none",
2488
2586
  "aria-hidden": "true",
2489
- children: /* @__PURE__ */ jsx24(
2587
+ children: /* @__PURE__ */ jsx25(
2490
2588
  "path",
2491
2589
  {
2492
2590
  d: "M2.625 4.8125L7 9.1875L11.375 4.8125",
@@ -2498,7 +2596,7 @@ var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ jsx24(
2498
2596
  )
2499
2597
  }
2500
2598
  );
2501
- var ArrowRightIcon = () => /* @__PURE__ */ jsx24("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx24(
2599
+ var ArrowRightIcon = () => /* @__PURE__ */ jsx25("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx25(
2502
2600
  "path",
2503
2601
  {
2504
2602
  d: "M2.625 7H11.375M11.375 7L7.875 3.5M11.375 7L7.875 10.5",
@@ -2508,7 +2606,7 @@ var ArrowRightIcon = () => /* @__PURE__ */ jsx24("svg", { width: "14", height: "
2508
2606
  strokeLinejoin: "round"
2509
2607
  }
2510
2608
  ) });
2511
- var ArrowUpRightIcon = () => /* @__PURE__ */ jsx24("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx24(
2609
+ var ArrowUpRightIcon = () => /* @__PURE__ */ jsx25("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx25(
2512
2610
  "path",
2513
2611
  {
2514
2612
  d: "M4.5 11.5L11.5 4.5M11.5 4.5H5.5M11.5 4.5V10.5",
@@ -2518,7 +2616,7 @@ var ArrowUpRightIcon = () => /* @__PURE__ */ jsx24("svg", { width: "16", height:
2518
2616
  strokeLinejoin: "round"
2519
2617
  }
2520
2618
  ) });
2521
- var BarsIcon = () => /* @__PURE__ */ jsx24("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx24(
2619
+ var BarsIcon = () => /* @__PURE__ */ jsx25("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx25(
2522
2620
  "path",
2523
2621
  {
2524
2622
  d: "M2.5 5H17.5M2.5 10H17.5M2.5 15H17.5",
@@ -2527,7 +2625,7 @@ var BarsIcon = () => /* @__PURE__ */ jsx24("svg", { width: "20", height: "20", v
2527
2625
  strokeLinecap: "round"
2528
2626
  }
2529
2627
  ) });
2530
- var XMarkIcon2 = () => /* @__PURE__ */ jsx24("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx24(
2628
+ var XMarkIcon2 = () => /* @__PURE__ */ jsx25("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx25(
2531
2629
  "path",
2532
2630
  {
2533
2631
  d: "M15 5L5 15M5 5L15 15",
@@ -2536,7 +2634,7 @@ var XMarkIcon2 = () => /* @__PURE__ */ jsx24("svg", { width: "20", height: "20",
2536
2634
  strokeLinecap: "round"
2537
2635
  }
2538
2636
  ) });
2539
- var ChevronLeftIcon = ({ className }) => /* @__PURE__ */ jsx24(
2637
+ var ChevronLeftIcon = ({ className }) => /* @__PURE__ */ jsx25(
2540
2638
  "svg",
2541
2639
  {
2542
2640
  className,
@@ -2545,7 +2643,7 @@ var ChevronLeftIcon = ({ className }) => /* @__PURE__ */ jsx24(
2545
2643
  viewBox: "0 0 24 24",
2546
2644
  fill: "none",
2547
2645
  "aria-hidden": "true",
2548
- children: /* @__PURE__ */ jsx24(
2646
+ children: /* @__PURE__ */ jsx25(
2549
2647
  "path",
2550
2648
  {
2551
2649
  d: "M15 18L9 12L15 6",
@@ -2557,11 +2655,11 @@ var ChevronLeftIcon = ({ className }) => /* @__PURE__ */ jsx24(
2557
2655
  )
2558
2656
  }
2559
2657
  );
2560
- var GlobeIcon = ({ className }) => /* @__PURE__ */ jsx24("img", { src: icon_globe_default, alt: "", "aria-hidden": "true", width: "20", height: "20", className });
2658
+ var GlobeIcon = ({ className }) => /* @__PURE__ */ jsx25("img", { src: icon_globe_default, alt: "", "aria-hidden": "true", width: "20", height: "20", className });
2561
2659
  var DropdownPanel = ({ item, onMouseEnter, onMouseLeave }) => {
2562
2660
  const { dropdown } = item;
2563
2661
  if (!dropdown) return null;
2564
- return /* @__PURE__ */ jsx24(
2662
+ return /* @__PURE__ */ jsx25(
2565
2663
  motion2.div,
2566
2664
  {
2567
2665
  className: "navbar__dropdown",
@@ -2573,8 +2671,8 @@ var DropdownPanel = ({ item, onMouseEnter, onMouseLeave }) => {
2573
2671
  onMouseEnter,
2574
2672
  onMouseLeave,
2575
2673
  children: /* @__PURE__ */ jsxs23("div", { className: "navbar__dropdown-inner", children: [
2576
- /* @__PURE__ */ jsx24("div", { className: "navbar__dropdown-left", children: dropdown.columns.map((col, colIdx) => /* @__PURE__ */ jsx24("div", { className: "navbar__dropdown-col", children: col.sections.map((section) => /* @__PURE__ */ jsxs23("div", { className: "navbar__dropdown-col-list", children: [
2577
- /* @__PURE__ */ jsx24("p", { className: "navbar__dropdown-col-title", children: section.title }),
2674
+ /* @__PURE__ */ jsx25("div", { className: "navbar__dropdown-left", children: dropdown.columns.map((col, colIdx) => /* @__PURE__ */ jsx25("div", { className: "navbar__dropdown-col", children: col.sections.map((section) => /* @__PURE__ */ jsxs23("div", { className: "navbar__dropdown-col-list", children: [
2675
+ /* @__PURE__ */ jsx25("p", { className: "navbar__dropdown-col-title", children: section.title }),
2578
2676
  section.items.map((link) => /* @__PURE__ */ jsxs23(
2579
2677
  "a",
2580
2678
  {
@@ -2584,13 +2682,13 @@ var DropdownPanel = ({ item, onMouseEnter, onMouseLeave }) => {
2584
2682
  rel: link.external ? "noopener noreferrer" : void 0,
2585
2683
  children: [
2586
2684
  link.label,
2587
- link.external ? /* @__PURE__ */ jsx24(ArrowUpRightIcon, {}) : /* @__PURE__ */ jsx24(ArrowRightIcon, {})
2685
+ link.external ? /* @__PURE__ */ jsx25(ArrowUpRightIcon, {}) : /* @__PURE__ */ jsx25(ArrowRightIcon, {})
2588
2686
  ]
2589
2687
  },
2590
2688
  link.href
2591
2689
  ))
2592
2690
  ] }, section.title)) }, colIdx)) }),
2593
- dropdown.feature && /* @__PURE__ */ jsx24("div", { className: "navbar__dropdown-right", children: /* @__PURE__ */ jsx24(FeatureCard, { feature: dropdown.feature }) })
2691
+ dropdown.feature && /* @__PURE__ */ jsx25("div", { className: "navbar__dropdown-right", children: /* @__PURE__ */ jsx25(FeatureCard, { feature: dropdown.feature }) })
2594
2692
  ] })
2595
2693
  }
2596
2694
  );
@@ -2601,7 +2699,7 @@ var FeatureCard = ({ feature, mobile }) => /* @__PURE__ */ jsxs23(
2601
2699
  className: mobile ? "navbar__drawer-feature" : "navbar__dropdown-feature",
2602
2700
  style: feature.backgroundImageUrl ? { backgroundImage: `url(${feature.backgroundImageUrl})` } : void 0,
2603
2701
  children: [
2604
- feature.backgroundImageUrl && /* @__PURE__ */ jsx24(
2702
+ feature.backgroundImageUrl && /* @__PURE__ */ jsx25(
2605
2703
  "img",
2606
2704
  {
2607
2705
  src: feature.backgroundImageUrl,
@@ -2610,11 +2708,11 @@ var FeatureCard = ({ feature, mobile }) => /* @__PURE__ */ jsxs23(
2610
2708
  "aria-hidden": "true"
2611
2709
  }
2612
2710
  ),
2613
- /* @__PURE__ */ jsx24("div", { className: mobile ? "navbar__drawer-feature-overlay" : "navbar__dropdown-feature-overlay", "aria-hidden": "true" }),
2711
+ /* @__PURE__ */ jsx25("div", { className: mobile ? "navbar__drawer-feature-overlay" : "navbar__dropdown-feature-overlay", "aria-hidden": "true" }),
2614
2712
  /* @__PURE__ */ jsxs23("div", { className: mobile ? "navbar__drawer-feature-content" : "navbar__dropdown-feature-content", children: [
2615
2713
  /* @__PURE__ */ jsxs23("div", { children: [
2616
- /* @__PURE__ */ jsx24("p", { className: mobile ? "navbar__drawer-feature-title" : "navbar__dropdown-feature-title", children: feature.title }),
2617
- /* @__PURE__ */ jsx24("p", { className: mobile ? "navbar__drawer-feature-desc" : "navbar__dropdown-feature-desc", children: feature.description })
2714
+ /* @__PURE__ */ jsx25("p", { className: mobile ? "navbar__drawer-feature-title" : "navbar__dropdown-feature-title", children: feature.title }),
2715
+ /* @__PURE__ */ jsx25("p", { className: mobile ? "navbar__drawer-feature-desc" : "navbar__dropdown-feature-desc", children: feature.description })
2618
2716
  ] }),
2619
2717
  /* @__PURE__ */ jsxs23(
2620
2718
  "a",
@@ -2623,7 +2721,7 @@ var FeatureCard = ({ feature, mobile }) => /* @__PURE__ */ jsxs23(
2623
2721
  className: mobile ? "navbar__drawer-feature-cta" : "navbar__dropdown-feature-cta",
2624
2722
  children: [
2625
2723
  feature.ctaLabel,
2626
- /* @__PURE__ */ jsx24(ArrowRightIcon, {})
2724
+ /* @__PURE__ */ jsx25(ArrowRightIcon, {})
2627
2725
  ]
2628
2726
  }
2629
2727
  )
@@ -2642,11 +2740,11 @@ var DrawerAccordion = ({ item, isOpen, onToggle }) => {
2642
2740
  "aria-expanded": isOpen,
2643
2741
  children: [
2644
2742
  item.label,
2645
- /* @__PURE__ */ jsx24(ChevronDownIcon3, { className: "navbar__drawer-trigger__chevron" })
2743
+ /* @__PURE__ */ jsx25(ChevronDownIcon3, { className: "navbar__drawer-trigger__chevron" })
2646
2744
  ]
2647
2745
  }
2648
2746
  ),
2649
- /* @__PURE__ */ jsx24(AnimatePresence, { initial: false, children: isOpen && dropdown && /* @__PURE__ */ jsx24(
2747
+ /* @__PURE__ */ jsx25(AnimatePresence, { initial: false, children: isOpen && dropdown && /* @__PURE__ */ jsx25(
2650
2748
  motion2.div,
2651
2749
  {
2652
2750
  className: "navbar__drawer-panel",
@@ -2656,9 +2754,9 @@ var DrawerAccordion = ({ item, isOpen, onToggle }) => {
2656
2754
  exit: "hidden",
2657
2755
  transition: { duration: 0.22, ease: EASE_OUT_EXPO },
2658
2756
  children: /* @__PURE__ */ jsxs23("div", { className: "navbar__drawer-panel-inner", children: [
2659
- /* @__PURE__ */ jsx24("div", { className: "navbar__drawer-panel-cols", children: dropdown.columns.map((col, colIdx) => /* @__PURE__ */ jsx24("div", { className: "navbar__drawer-panel-col", children: col.sections.map((section) => /* @__PURE__ */ jsxs23("div", { className: "navbar__drawer-col-section", children: [
2660
- /* @__PURE__ */ jsx24("p", { className: "navbar__drawer-col-title", children: section.title }),
2661
- /* @__PURE__ */ jsx24("div", { className: "navbar__drawer-col-links", children: section.items.map((link) => /* @__PURE__ */ jsx24(
2757
+ /* @__PURE__ */ jsx25("div", { className: "navbar__drawer-panel-cols", children: dropdown.columns.map((col, colIdx) => /* @__PURE__ */ jsx25("div", { className: "navbar__drawer-panel-col", children: col.sections.map((section) => /* @__PURE__ */ jsxs23("div", { className: "navbar__drawer-col-section", children: [
2758
+ /* @__PURE__ */ jsx25("p", { className: "navbar__drawer-col-title", children: section.title }),
2759
+ /* @__PURE__ */ jsx25("div", { className: "navbar__drawer-col-links", children: section.items.map((link) => /* @__PURE__ */ jsx25(
2662
2760
  "a",
2663
2761
  {
2664
2762
  href: link.href,
@@ -2670,7 +2768,7 @@ var DrawerAccordion = ({ item, isOpen, onToggle }) => {
2670
2768
  link.href
2671
2769
  )) })
2672
2770
  ] }, section.title)) }, colIdx)) }),
2673
- dropdown.feature && /* @__PURE__ */ jsx24(FeatureCard, { feature: dropdown.feature, mobile: true })
2771
+ dropdown.feature && /* @__PURE__ */ jsx25(FeatureCard, { feature: dropdown.feature, mobile: true })
2674
2772
  ] })
2675
2773
  }
2676
2774
  ) })
@@ -2694,16 +2792,16 @@ var Navbar = ({
2694
2792
  className,
2695
2793
  ...props
2696
2794
  }) => {
2697
- const [openDropdown, setOpenDropdown] = useState8(null);
2698
- const [mobileOpen, setMobileOpen] = useState8(false);
2699
- const [mobileExpanded, setMobileExpanded] = useState8(null);
2700
- const [scrolled, setScrolled] = useState8(false);
2701
- const [langDropdownOpen, setLangDropdownOpen] = useState8(false);
2702
- const [mobileLangOpen, setMobileLangOpen] = useState8(false);
2703
- const hoverTimeoutRef = useRef8(null);
2704
- const langHoverTimeoutRef = useRef8(null);
2705
- const pillAreaRef = useRef8(null);
2706
- const langBtnRef = useRef8(null);
2795
+ const [openDropdown, setOpenDropdown] = useState9(null);
2796
+ const [mobileOpen, setMobileOpen] = useState9(false);
2797
+ const [mobileExpanded, setMobileExpanded] = useState9(null);
2798
+ const [scrolled, setScrolled] = useState9(false);
2799
+ const [langDropdownOpen, setLangDropdownOpen] = useState9(false);
2800
+ const [mobileLangOpen, setMobileLangOpen] = useState9(false);
2801
+ const hoverTimeoutRef = useRef9(null);
2802
+ const langHoverTimeoutRef = useRef9(null);
2803
+ const pillAreaRef = useRef9(null);
2804
+ const langBtnRef = useRef9(null);
2707
2805
  const hasLangDropdown = Boolean(languageItems && languageItems.length > 0);
2708
2806
  const resolvedLogo = theme === "light" ? logoSrcDark ?? logoSrc : logoSrc;
2709
2807
  useEffect7(() => {
@@ -2782,9 +2880,9 @@ var Navbar = ({
2782
2880
  ...props,
2783
2881
  children: [
2784
2882
  /* @__PURE__ */ jsxs23("div", { className: "navbar__bar", children: [
2785
- /* @__PURE__ */ jsx24("a", { href: logoHref, className: "navbar__logo", "aria-label": "Home", children: /* @__PURE__ */ jsx24("img", { src: resolvedLogo, alt: "Logo" }) }),
2786
- /* @__PURE__ */ jsx24("div", { className: "navbar__nav-center", ref: pillAreaRef, children: /* @__PURE__ */ jsxs23("div", { className: "navbar__pill", children: [
2787
- /* @__PURE__ */ jsx24("a", { href: logoHref, className: "navbar__pill-logo", "aria-label": "Home", children: /* @__PURE__ */ jsx24("img", { src: logoSrcDark ?? logoSrc, alt: "Logo" }) }),
2883
+ /* @__PURE__ */ jsx25("a", { href: logoHref, className: "navbar__logo", "aria-label": "Home", children: /* @__PURE__ */ jsx25("img", { src: resolvedLogo, alt: "Logo" }) }),
2884
+ /* @__PURE__ */ jsx25("div", { className: "navbar__nav-center", ref: pillAreaRef, children: /* @__PURE__ */ jsxs23("div", { className: "navbar__pill", children: [
2885
+ /* @__PURE__ */ jsx25("a", { href: logoHref, className: "navbar__pill-logo", "aria-label": "Home", children: /* @__PURE__ */ jsx25("img", { src: logoSrcDark ?? logoSrc, alt: "Logo" }) }),
2788
2886
  /* @__PURE__ */ jsxs23("div", { className: "navbar__nav-group", children: [
2789
2887
  navItems.map((item) => {
2790
2888
  if (item.external) {
@@ -2797,7 +2895,7 @@ var Navbar = ({
2797
2895
  rel: "noopener noreferrer",
2798
2896
  children: [
2799
2897
  item.label,
2800
- /* @__PURE__ */ jsx24(ArrowUpRightIcon, {})
2898
+ /* @__PURE__ */ jsx25(ArrowUpRightIcon, {})
2801
2899
  ]
2802
2900
  },
2803
2901
  item.label
@@ -2817,15 +2915,15 @@ var Navbar = ({
2817
2915
  "aria-haspopup": "true",
2818
2916
  children: [
2819
2917
  item.label,
2820
- /* @__PURE__ */ jsx24(ChevronDownIcon3, { className: "navbar__nav-item__chevron" })
2918
+ /* @__PURE__ */ jsx25(ChevronDownIcon3, { className: "navbar__nav-item__chevron" })
2821
2919
  ]
2822
2920
  },
2823
2921
  item.label
2824
2922
  );
2825
2923
  }
2826
- return /* @__PURE__ */ jsx24("a", { href: item.href, className: "navbar__nav-item", children: item.label }, item.label);
2924
+ return /* @__PURE__ */ jsx25("a", { href: item.href, className: "navbar__nav-item", children: item.label }, item.label);
2827
2925
  }),
2828
- languageLabel && /* @__PURE__ */ jsx24(
2926
+ languageLabel && /* @__PURE__ */ jsx25(
2829
2927
  "div",
2830
2928
  {
2831
2929
  className: "navbar__lang-wrapper",
@@ -2835,12 +2933,16 @@ var Navbar = ({
2835
2933
  "button",
2836
2934
  {
2837
2935
  ref: langBtnRef,
2838
- className: "navbar__nav-item navbar__lang-btn",
2936
+ className: [
2937
+ "navbar__nav-item",
2938
+ "navbar__lang-btn",
2939
+ hasLangDropdown && langDropdownOpen ? "navbar__nav-item--open" : ""
2940
+ ].filter(Boolean).join(" "),
2839
2941
  onClick: hasLangDropdown ? () => setLangDropdownOpen((o) => !o) : onLanguageClick,
2840
2942
  "aria-haspopup": hasLangDropdown ? "true" : void 0,
2841
2943
  "aria-expanded": hasLangDropdown ? langDropdownOpen : void 0,
2842
2944
  children: [
2843
- /* @__PURE__ */ jsx24(GlobeIcon, { className: "navbar__lang-globe" }),
2945
+ /* @__PURE__ */ jsx25(GlobeIcon, { className: "navbar__lang-globe" }),
2844
2946
  languageLabel
2845
2947
  ]
2846
2948
  }
@@ -2849,11 +2951,11 @@ var Navbar = ({
2849
2951
  )
2850
2952
  ] }),
2851
2953
  /* @__PURE__ */ jsxs23("div", { className: "navbar__pill-actions", children: [
2852
- loginHref && /* @__PURE__ */ jsx24("a", { href: loginHref, children: /* @__PURE__ */ jsx24(Button, { colorScheme: "black", variant: "secondary", label: loginLabel }) }),
2853
- ctaHref && /* @__PURE__ */ jsx24("a", { href: ctaHref, children: /* @__PURE__ */ jsx24(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2954
+ loginHref && /* @__PURE__ */ jsx25("a", { href: loginHref, children: /* @__PURE__ */ jsx25(Button, { colorScheme: "black", variant: "secondary", label: loginLabel }) }),
2955
+ ctaHref && /* @__PURE__ */ jsx25("a", { href: ctaHref, children: /* @__PURE__ */ jsx25(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2854
2956
  ] })
2855
2957
  ] }) }),
2856
- /* @__PURE__ */ jsx24(AnimatePresence, { children: openDropdown && activeDropdownItem?.dropdown && /* @__PURE__ */ jsx24(
2958
+ /* @__PURE__ */ jsx25(AnimatePresence, { children: openDropdown && activeDropdownItem?.dropdown && /* @__PURE__ */ jsx25(
2857
2959
  DropdownPanel,
2858
2960
  {
2859
2961
  item: activeDropdownItem,
@@ -2862,7 +2964,7 @@ var Navbar = ({
2862
2964
  },
2863
2965
  "dropdown"
2864
2966
  ) }),
2865
- /* @__PURE__ */ jsx24(AnimatePresence, { children: hasLangDropdown && langDropdownOpen && /* @__PURE__ */ jsx24(
2967
+ /* @__PURE__ */ jsx25(AnimatePresence, { children: hasLangDropdown && langDropdownOpen && /* @__PURE__ */ jsx25(
2866
2968
  motion2.div,
2867
2969
  {
2868
2970
  className: "navbar__lang-dropdown",
@@ -2873,12 +2975,12 @@ var Navbar = ({
2873
2975
  transition: { duration: 0.18, ease: EASE_OUT_EXPO },
2874
2976
  onMouseEnter: clearLangHoverTimeout,
2875
2977
  onMouseLeave: handleLangLeave,
2876
- children: /* @__PURE__ */ jsx24(
2978
+ children: /* @__PURE__ */ jsx25(
2877
2979
  "div",
2878
2980
  {
2879
2981
  className: "navbar__lang-dropdown-grid",
2880
2982
  style: { "--lang-rows": Math.ceil(languageItems.length / 3) },
2881
- children: languageItems.map((lang) => /* @__PURE__ */ jsx24(
2983
+ children: languageItems.map((lang) => /* @__PURE__ */ jsx25(
2882
2984
  "button",
2883
2985
  {
2884
2986
  className: [
@@ -2895,7 +2997,7 @@ var Navbar = ({
2895
2997
  }
2896
2998
  ) }),
2897
2999
  /* @__PURE__ */ jsxs23("div", { className: "navbar__actions", children: [
2898
- loginHref && /* @__PURE__ */ jsx24("a", { href: loginHref, className: "navbar__actions-login", children: /* @__PURE__ */ jsx24(
3000
+ loginHref && /* @__PURE__ */ jsx25("a", { href: loginHref, className: "navbar__actions-login", children: /* @__PURE__ */ jsx25(
2899
3001
  Button,
2900
3002
  {
2901
3003
  colorScheme: theme === "dark" ? "white" : "black",
@@ -2903,10 +3005,10 @@ var Navbar = ({
2903
3005
  label: loginLabel
2904
3006
  }
2905
3007
  ) }),
2906
- ctaHref && /* @__PURE__ */ jsx24("a", { href: ctaHref, children: /* @__PURE__ */ jsx24(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
3008
+ ctaHref && /* @__PURE__ */ jsx25("a", { href: ctaHref, children: /* @__PURE__ */ jsx25(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2907
3009
  ] }),
2908
3010
  /* @__PURE__ */ jsxs23("div", { className: "navbar__mobile-actions", children: [
2909
- loginHref && /* @__PURE__ */ jsx24("a", { href: loginHref, children: /* @__PURE__ */ jsx24(
3011
+ loginHref && /* @__PURE__ */ jsx25("a", { href: loginHref, children: /* @__PURE__ */ jsx25(
2910
3012
  Button,
2911
3013
  {
2912
3014
  colorScheme: scrolled || theme === "light" ? "black" : "white",
@@ -2914,18 +3016,18 @@ var Navbar = ({
2914
3016
  label: loginLabel
2915
3017
  }
2916
3018
  ) }),
2917
- /* @__PURE__ */ jsx24(
3019
+ /* @__PURE__ */ jsx25(
2918
3020
  "button",
2919
3021
  {
2920
3022
  className: "navbar__mobile-trigger",
2921
3023
  onClick: () => setMobileOpen((o) => !o),
2922
3024
  "aria-label": mobileOpen ? "Close navigation menu" : "Open navigation menu",
2923
- children: mobileOpen ? /* @__PURE__ */ jsx24(XMarkIcon2, {}) : /* @__PURE__ */ jsx24(BarsIcon, {})
3025
+ children: mobileOpen ? /* @__PURE__ */ jsx25(XMarkIcon2, {}) : /* @__PURE__ */ jsx25(BarsIcon, {})
2924
3026
  }
2925
3027
  )
2926
3028
  ] })
2927
3029
  ] }),
2928
- /* @__PURE__ */ jsx24("div", { className: "navbar__drawer-clip", children: /* @__PURE__ */ jsx24(AnimatePresence, { children: mobileOpen && /* @__PURE__ */ jsxs23(
3030
+ /* @__PURE__ */ jsx25("div", { className: "navbar__drawer-clip", children: /* @__PURE__ */ jsx25(AnimatePresence, { children: mobileOpen && /* @__PURE__ */ jsxs23(
2929
3031
  motion2.div,
2930
3032
  {
2931
3033
  className: "navbar__drawer",
@@ -2941,7 +3043,7 @@ var Navbar = ({
2941
3043
  /* @__PURE__ */ jsxs23("nav", { className: "navbar__drawer-nav", children: [
2942
3044
  navItems.map((item) => {
2943
3045
  if (item.dropdown) {
2944
- return /* @__PURE__ */ jsx24(
3046
+ return /* @__PURE__ */ jsx25(
2945
3047
  DrawerAccordion,
2946
3048
  {
2947
3049
  item,
@@ -2962,14 +3064,14 @@ var Navbar = ({
2962
3064
  rel: item.external ? "noopener noreferrer" : void 0,
2963
3065
  children: [
2964
3066
  item.label,
2965
- item.external && /* @__PURE__ */ jsx24(ArrowUpRightIcon, {})
3067
+ item.external && /* @__PURE__ */ jsx25(ArrowUpRightIcon, {})
2966
3068
  ]
2967
3069
  },
2968
3070
  item.label
2969
3071
  );
2970
3072
  }),
2971
3073
  languageLabel && !hasLangDropdown && /* @__PURE__ */ jsxs23("button", { className: "navbar__drawer-lang", onClick: onLanguageClick, children: [
2972
- /* @__PURE__ */ jsx24(GlobeIcon, { className: "navbar__lang-globe" }),
3074
+ /* @__PURE__ */ jsx25(GlobeIcon, { className: "navbar__lang-globe" }),
2973
3075
  languageLabel
2974
3076
  ] }),
2975
3077
  languageLabel && hasLangDropdown && /* @__PURE__ */ jsxs23(
@@ -2978,14 +3080,14 @@ var Navbar = ({
2978
3080
  className: "navbar__drawer-lang",
2979
3081
  onClick: () => setMobileLangOpen(true),
2980
3082
  children: [
2981
- /* @__PURE__ */ jsx24(GlobeIcon, { className: "navbar__lang-globe" }),
3083
+ /* @__PURE__ */ jsx25(GlobeIcon, { className: "navbar__lang-globe" }),
2982
3084
  languageLabel
2983
3085
  ]
2984
3086
  }
2985
3087
  )
2986
3088
  ] }),
2987
3089
  !mobileLangOpen && /* @__PURE__ */ jsxs23("div", { className: "navbar__drawer-footer", children: [
2988
- loginHref && /* @__PURE__ */ jsx24("a", { href: loginHref, style: { display: "block" }, children: /* @__PURE__ */ jsx24(
3090
+ loginHref && /* @__PURE__ */ jsx25("a", { href: loginHref, style: { display: "block" }, children: /* @__PURE__ */ jsx25(
2989
3091
  Button,
2990
3092
  {
2991
3093
  colorScheme: "black",
@@ -2994,7 +3096,7 @@ var Navbar = ({
2994
3096
  fullWidth: true
2995
3097
  }
2996
3098
  ) }),
2997
- ctaHref && /* @__PURE__ */ jsx24("a", { href: ctaHref, style: { display: "block" }, children: /* @__PURE__ */ jsx24(
3099
+ ctaHref && /* @__PURE__ */ jsx25("a", { href: ctaHref, style: { display: "block" }, children: /* @__PURE__ */ jsx25(
2998
3100
  Button,
2999
3101
  {
3000
3102
  colorScheme: "coral",
@@ -3004,7 +3106,7 @@ var Navbar = ({
3004
3106
  }
3005
3107
  ) })
3006
3108
  ] }),
3007
- /* @__PURE__ */ jsx24(AnimatePresence, { children: hasLangDropdown && mobileLangOpen && /* @__PURE__ */ jsxs23(
3109
+ /* @__PURE__ */ jsx25(AnimatePresence, { children: hasLangDropdown && mobileLangOpen && /* @__PURE__ */ jsxs23(
3008
3110
  motion2.div,
3009
3111
  {
3010
3112
  className: "navbar__drawer-lang-panel",
@@ -3013,16 +3115,16 @@ var Navbar = ({
3013
3115
  exit: { y: "100%" },
3014
3116
  transition: { duration: 0.25, ease: EASE_OUT_EXPO },
3015
3117
  children: [
3016
- /* @__PURE__ */ jsx24(
3118
+ /* @__PURE__ */ jsx25(
3017
3119
  "button",
3018
3120
  {
3019
3121
  className: "navbar__drawer-lang-back",
3020
3122
  onClick: () => setMobileLangOpen(false),
3021
3123
  "aria-label": "Back to menu",
3022
- children: /* @__PURE__ */ jsx24(ChevronLeftIcon, {})
3124
+ children: /* @__PURE__ */ jsx25(ChevronLeftIcon, {})
3023
3125
  }
3024
3126
  ),
3025
- /* @__PURE__ */ jsx24("div", { className: "navbar__drawer-lang-grid", children: languageItems.map((lang) => /* @__PURE__ */ jsx24(
3127
+ /* @__PURE__ */ jsx25("div", { className: "navbar__drawer-lang-grid", children: languageItems.map((lang) => /* @__PURE__ */ jsx25(
3026
3128
  "button",
3027
3129
  {
3028
3130
  className: [
@@ -3046,7 +3148,7 @@ var Navbar = ({
3046
3148
  };
3047
3149
 
3048
3150
  // templates/DayNightTransition/DayNightTransition.tsx
3049
- import { useRef as useRef9 } from "react";
3151
+ import { useEffect as useEffect8, useLayoutEffect as useLayoutEffect2, useRef as useRef10, useState as useState10 } from "react";
3050
3152
  import {
3051
3153
  motion as motion3,
3052
3154
  useScroll as useScroll2,
@@ -3054,121 +3156,449 @@ import {
3054
3156
  useTransform as useTransform2,
3055
3157
  useMotionTemplate as useMotionTemplate2
3056
3158
  } from "framer-motion";
3057
- import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
3159
+
3160
+ // templates/DayNightTransition/webflowDayNightV2Ix.ts
3161
+ var DESC_SWATCH = { r: 24, g: 28, b: 37 };
3162
+ var BODY_TEXT = { r: 51, g: 51, b: 51 };
3163
+ var rgb = (r, g, b) => `rgb(${r},${g},${b})`;
3164
+ var lerp = (a, b, u) => a + (b - a) * u;
3165
+ var seg = (t, t0, t1, v0, v1) => {
3166
+ if (t <= t0) return v0;
3167
+ if (t >= t1) return v1;
3168
+ return lerp(v0, v1, (t - t0) / (t1 - t0));
3169
+ };
3170
+ function webflowV2DescriptionColor(t, media) {
3171
+ if (media === "desktop") {
3172
+ const body2 = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);
3173
+ const dark2 = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);
3174
+ const white2 = rgb(255, 255, 255);
3175
+ if (t < 0.49) return body2;
3176
+ if (t < 0.5) return dark2;
3177
+ return white2;
3178
+ }
3179
+ const white = rgb(255, 255, 255);
3180
+ const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);
3181
+ const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);
3182
+ if (t < 0.58) return body;
3183
+ if (t < 0.59) return dark;
3184
+ return white;
3185
+ }
3186
+ function webflowV2TitleColor(t, media) {
3187
+ if (media === "desktop") {
3188
+ const body2 = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);
3189
+ const black = rgb(0, 0, 0);
3190
+ const white2 = rgb(255, 255, 255);
3191
+ if (t < 0.51) return body2;
3192
+ if (t >= 0.52) return white2;
3193
+ return seg(t, 0.51, 0.52, black, white2);
3194
+ }
3195
+ const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);
3196
+ const white = rgb(255, 255, 255);
3197
+ const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);
3198
+ if (t < 0.6) return body;
3199
+ if (t >= 0.61) return white;
3200
+ const u = (t - 0.6) / 0.01;
3201
+ return rgb(
3202
+ lerp(DESC_SWATCH.r, 255, u),
3203
+ lerp(DESC_SWATCH.g, 255, u),
3204
+ lerp(DESC_SWATCH.b, 255, u)
3205
+ );
3206
+ }
3207
+ function webflowV2DayWordOpacity(t, media) {
3208
+ if (media === "desktop") {
3209
+ if (t < 0.51) return 1;
3210
+ if (t >= 0.52) return 0;
3211
+ return seg(t, 0.51, 0.52, 1, 0);
3212
+ }
3213
+ if (t < 0.6) return 1;
3214
+ if (t >= 0.61) return 0;
3215
+ return seg(t, 0.6, 0.61, 1, 0);
3216
+ }
3217
+ function webflowV2NightWordOpacity(t, media) {
3218
+ if (media === "desktop") {
3219
+ if (t < 0.51) return 0;
3220
+ if (t >= 0.52) return 1;
3221
+ return seg(t, 0.51, 0.52, 0, 1);
3222
+ }
3223
+ if (t < 0.6) return 0;
3224
+ if (t >= 0.61) return 1;
3225
+ return seg(t, 0.6, 0.61, 0, 1);
3226
+ }
3227
+ var WEBFLOW_V2_DAY_CLIP_SCROLL_END = 0.65;
3228
+ function webflowV2DayClipPercent(t, media) {
3229
+ if (media === "desktop") return 100;
3230
+ return seg(t, 0, WEBFLOW_V2_DAY_CLIP_SCROLL_END, 100, 0);
3231
+ }
3232
+
3233
+ // templates/DayNightTransition/DayNightTransition.tsx
3234
+ import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
3058
3235
  var SPRING2 = { stiffness: 80, damping: 30, restDelta: 1e-3 };
3059
3236
  var FADE_START = 0.35;
3060
3237
  var FADE_END = 0.65;
3061
- var WORD_START = 0.4;
3062
- var WORD_END = 0.6;
3238
+ var V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START = 0.49;
3239
+ var V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END = 0.52;
3240
+ var V2_TEXT_SCROLL_CROSSFADE_MOBILE_START = 0.58;
3241
+ var V2_TEXT_SCROLL_CROSSFADE_MOBILE_END = 0.61;
3063
3242
  var TEXT_CHANNEL_DAY = 0;
3064
3243
  var TEXT_CHANNEL_NIGHT = 255;
3244
+ var seg2 = (t, t0, t1, v0, v1) => {
3245
+ if (t <= t0) return v0;
3246
+ if (t >= t1) return v1;
3247
+ return v0 + (v1 - v0) * ((t - t0) / (t1 - t0));
3248
+ };
3065
3249
  var DayNightTransition = ({
3066
3250
  dayImageUrl,
3067
3251
  nightImageUrl,
3068
- dayHeadline = "Trade all day",
3069
- nightHeadline = "Trade all night",
3070
- dayDescription,
3071
- nightDescription,
3252
+ dayHeadline = "Medium length section title goes here",
3253
+ nightHeadline = "Medium length section title goes here",
3254
+ dayDescription = "Description goes here. Description goes here. Description goes here.",
3255
+ nightDescription = "Description goes here. Description goes here. Description goes here.",
3072
3256
  ctaLabel = "Get started",
3073
3257
  ctaHref = "#",
3258
+ hideCta = false,
3259
+ headlineLevel = "h2",
3260
+ descriptionLevel = "body-md",
3261
+ inlineDayNightHeadline,
3262
+ scrollPreset = "default",
3074
3263
  className,
3075
3264
  ...props
3076
3265
  }) => {
3077
- const wrapperRef = useRef9(null);
3266
+ const wrapperRef = useRef10(null);
3267
+ const dayWordRef = useRef10(null);
3268
+ const [nightMarginStart, setNightMarginStart] = useState10("0px");
3269
+ const [nightMarginEnd, setNightMarginEnd] = useState10("0px");
3270
+ const [ixMedia, setIxMedia] = useState10("desktop");
3271
+ const webflowV2 = scrollPreset === "webflow-day-night-v2";
3272
+ useEffect8(() => {
3273
+ const mq = window.matchMedia("(max-width: 991px)");
3274
+ const sync = () => setIxMedia(mq.matches ? "mobile" : "desktop");
3275
+ sync();
3276
+ mq.addEventListener("change", sync);
3277
+ return () => mq.removeEventListener("change", sync);
3278
+ }, []);
3279
+ const MotionHeadline = headlineLevel === "h1" ? motion3.h1 : motion3.h2;
3280
+ useLayoutEffect2(() => {
3281
+ if (!inlineDayNightHeadline) return;
3282
+ const syncNightPull = () => {
3283
+ const dayEl = dayWordRef.current;
3284
+ if (!dayEl) return;
3285
+ const w = dayEl.offsetWidth;
3286
+ const doc = document.documentElement;
3287
+ const rtl = doc.getAttribute("dir") === "rtl" || doc.lang.toLowerCase().startsWith("ar");
3288
+ if (rtl) {
3289
+ setNightMarginStart("0px");
3290
+ setNightMarginEnd(w ? `-${w}px` : "0px");
3291
+ } else {
3292
+ setNightMarginStart(w ? `-${w}px` : "0px");
3293
+ setNightMarginEnd("0px");
3294
+ }
3295
+ };
3296
+ syncNightPull();
3297
+ const ro = new ResizeObserver(syncNightPull);
3298
+ if (dayWordRef.current) ro.observe(dayWordRef.current);
3299
+ window.addEventListener("resize", syncNightPull);
3300
+ return () => {
3301
+ ro.disconnect();
3302
+ window.removeEventListener("resize", syncNightPull);
3303
+ };
3304
+ }, [
3305
+ inlineDayNightHeadline,
3306
+ inlineDayNightHeadline?.dayWord,
3307
+ inlineDayNightHeadline?.nightWord,
3308
+ inlineDayNightHeadline?.prefix
3309
+ ]);
3078
3310
  const { scrollYProgress } = useScroll2({
3079
3311
  target: wrapperRef,
3080
3312
  offset: ["start end", "end start"]
3081
3313
  });
3082
3314
  const smooth = useSpring2(scrollYProgress, SPRING2);
3083
- const nightOpacity = useTransform2(smooth, [FADE_START, FADE_END], [0, 1]);
3084
- const channel = useTransform2(smooth, [FADE_START, FADE_END], [TEXT_CHANNEL_DAY, TEXT_CHANNEL_NIGHT]);
3315
+ const progress = webflowV2 ? scrollYProgress : smooth;
3316
+ const nightOpacity = useTransform2(progress, [FADE_START, FADE_END], [0, 1]);
3317
+ const channel = useTransform2(progress, [FADE_START, FADE_END], [TEXT_CHANNEL_DAY, TEXT_CHANNEL_NIGHT]);
3085
3318
  const textColor = useMotionTemplate2`rgb(${channel}, ${channel}, ${channel})`;
3086
- const dayOpacity = useTransform2(smooth, [WORD_START, WORD_END], [1, 0]);
3087
- const nightOpacity2 = useTransform2(smooth, [WORD_START, WORD_END], [0, 1]);
3319
+ const dayOpacity = useTransform2(progress, (t) => {
3320
+ if (webflowV2) {
3321
+ return ixMedia === "mobile" ? seg2(
3322
+ t,
3323
+ V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,
3324
+ V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,
3325
+ 1,
3326
+ 0
3327
+ ) : seg2(
3328
+ t,
3329
+ V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,
3330
+ V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,
3331
+ 1,
3332
+ 0
3333
+ );
3334
+ }
3335
+ return seg2(t, FADE_START, FADE_END, 1, 0);
3336
+ });
3337
+ const nightOpacity2 = useTransform2(progress, (t) => {
3338
+ if (webflowV2) {
3339
+ return ixMedia === "mobile" ? seg2(
3340
+ t,
3341
+ V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,
3342
+ V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,
3343
+ 0,
3344
+ 1
3345
+ ) : seg2(
3346
+ t,
3347
+ V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,
3348
+ V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,
3349
+ 0,
3350
+ 1
3351
+ );
3352
+ }
3353
+ return seg2(t, FADE_START, FADE_END, 0, 1);
3354
+ });
3355
+ const v2DescColor = useTransform2(progress, (t) => webflowV2DescriptionColor(t, ixMedia));
3356
+ const v2TitleColor = useTransform2(progress, (t) => webflowV2TitleColor(t, ixMedia));
3357
+ const v2DayWordOp = useTransform2(progress, (t) => webflowV2DayWordOpacity(t, ixMedia));
3358
+ const v2NightWordOp = useTransform2(progress, (t) => webflowV2NightWordOpacity(t, ixMedia));
3359
+ const v2DayHeight = useTransform2(
3360
+ progress,
3361
+ (t) => ixMedia === "mobile" ? `${webflowV2DayClipPercent(t, ixMedia)}%` : "100vh"
3362
+ );
3088
3363
  const hasDescription = Boolean(dayDescription || nightDescription);
3089
- return /* @__PURE__ */ jsx25(
3364
+ const useInlineHeadline = Boolean(inlineDayNightHeadline);
3365
+ const rootClass = [
3366
+ "dnt",
3367
+ headlineLevel === "h1" && "dnt--headline-h1",
3368
+ descriptionLevel === "body-lg" && "dnt--desc-body-lg",
3369
+ className
3370
+ ].filter(Boolean).join(" ");
3371
+ return /* @__PURE__ */ jsxs24(
3090
3372
  "div",
3091
3373
  {
3092
3374
  ref: wrapperRef,
3093
- className: ["dnt", className].filter(Boolean).join(" "),
3375
+ className: rootClass,
3094
3376
  ...props,
3095
- children: /* @__PURE__ */ jsxs24("div", { className: "dnt__sticky", children: [
3096
- /* @__PURE__ */ jsx25(
3097
- "img",
3098
- {
3099
- className: "dnt__bg dnt__bg--day",
3100
- src: dayImageUrl,
3101
- alt: "",
3102
- loading: "eager",
3103
- draggable: false
3104
- }
3105
- ),
3106
- /* @__PURE__ */ jsx25(
3107
- motion3.img,
3108
- {
3109
- className: "dnt__bg dnt__bg--night",
3110
- src: nightImageUrl,
3111
- alt: "",
3112
- loading: "eager",
3113
- draggable: false,
3114
- style: { opacity: nightOpacity }
3115
- }
3116
- ),
3117
- /* @__PURE__ */ jsx25("div", { className: "dnt__content", children: /* @__PURE__ */ jsxs24(
3118
- motion3.div,
3119
- {
3120
- className: "dnt__text-wrap",
3121
- style: { color: textColor },
3122
- children: [
3123
- /* @__PURE__ */ jsxs24("div", { className: "dnt__crossfade-wrap", children: [
3124
- /* @__PURE__ */ jsx25(
3125
- motion3.h2,
3126
- {
3127
- className: "dnt__headline",
3128
- style: { opacity: dayOpacity },
3129
- children: dayHeadline
3130
- }
3131
- ),
3132
- /* @__PURE__ */ jsx25(
3133
- motion3.h2,
3134
- {
3135
- className: "dnt__headline",
3136
- "aria-hidden": "true",
3137
- style: { opacity: nightOpacity2 },
3138
- children: nightHeadline
3139
- }
3140
- )
3141
- ] }),
3142
- hasDescription && /* @__PURE__ */ jsxs24("div", { className: "dnt__crossfade-wrap", children: [
3143
- /* @__PURE__ */ jsx25(
3144
- motion3.p,
3145
- {
3146
- className: "dnt__description",
3147
- style: { opacity: dayOpacity },
3148
- children: dayDescription ?? ""
3149
- }
3150
- ),
3151
- /* @__PURE__ */ jsx25(
3152
- motion3.p,
3377
+ children: [
3378
+ webflowV2 && /* @__PURE__ */ jsxs24("div", { className: "dnt__v2-background-wrapper", "aria-hidden": "true", children: [
3379
+ /* @__PURE__ */ jsx26(
3380
+ motion3.div,
3381
+ {
3382
+ className: "dnt__v2-bg-day trade-day-night_background-day is-alternative",
3383
+ style: {
3384
+ backgroundImage: `url(${dayImageUrl})`,
3385
+ height: v2DayHeight
3386
+ }
3387
+ }
3388
+ ),
3389
+ /* @__PURE__ */ jsx26(
3390
+ "div",
3391
+ {
3392
+ className: "dnt__v2-bg-night trade-day-night_background-night is-alternative",
3393
+ style: { backgroundImage: `url(${nightImageUrl})` }
3394
+ }
3395
+ )
3396
+ ] }),
3397
+ /* @__PURE__ */ jsxs24("div", { className: webflowV2 ? "dnt__sticky dnt__sticky--webflow-v2" : "dnt__sticky", children: [
3398
+ !webflowV2 && /* @__PURE__ */ jsxs24(Fragment3, { children: [
3399
+ /* @__PURE__ */ jsx26(
3400
+ "img",
3401
+ {
3402
+ className: "dnt__bg dnt__bg--day",
3403
+ src: dayImageUrl,
3404
+ alt: "",
3405
+ loading: "eager",
3406
+ draggable: false
3407
+ }
3408
+ ),
3409
+ /* @__PURE__ */ jsx26(
3410
+ motion3.img,
3411
+ {
3412
+ className: "dnt__bg dnt__bg--night",
3413
+ src: nightImageUrl,
3414
+ alt: "",
3415
+ loading: "eager",
3416
+ draggable: false,
3417
+ style: { opacity: nightOpacity }
3418
+ }
3419
+ )
3420
+ ] }),
3421
+ /* @__PURE__ */ jsx26("div", { className: "dnt__content", children: /* @__PURE__ */ jsx26("div", { className: "dnt__inner", children: webflowV2 ? /* @__PURE__ */ jsxs24("div", { className: "dnt__text-wrap", children: [
3422
+ useInlineHeadline && inlineDayNightHeadline ? /* @__PURE__ */ jsxs24(
3423
+ MotionHeadline,
3424
+ {
3425
+ className: "dnt__headline dnt__headline--inline-day-night",
3426
+ style: { color: v2TitleColor },
3427
+ "aria-label": `${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`,
3428
+ children: [
3429
+ /* @__PURE__ */ jsx26("span", { className: "dnt__headline-prefix", children: inlineDayNightHeadline.prefix }),
3430
+ /* @__PURE__ */ jsxs24("span", { className: "dnt__headline-pair", children: [
3431
+ /* @__PURE__ */ jsx26(
3432
+ motion3.span,
3433
+ {
3434
+ ref: dayWordRef,
3435
+ className: "dnt__headline-wday",
3436
+ style: { opacity: v2DayWordOp },
3437
+ children: inlineDayNightHeadline.dayWord
3438
+ }
3439
+ ),
3440
+ /* @__PURE__ */ jsx26(
3441
+ motion3.span,
3442
+ {
3443
+ className: "dnt__headline-wnight",
3444
+ style: {
3445
+ opacity: v2NightWordOp,
3446
+ marginInlineStart: nightMarginStart,
3447
+ marginInlineEnd: nightMarginEnd
3448
+ },
3449
+ children: inlineDayNightHeadline.nightWord
3450
+ }
3451
+ )
3452
+ ] })
3453
+ ]
3454
+ }
3455
+ ) : /* @__PURE__ */ jsxs24("div", { className: "dnt__crossfade-wrap", children: [
3456
+ /* @__PURE__ */ jsx26(
3457
+ MotionHeadline,
3458
+ {
3459
+ className: "dnt__headline",
3460
+ style: { color: v2TitleColor, opacity: dayOpacity },
3461
+ children: dayHeadline
3462
+ }
3463
+ ),
3464
+ /* @__PURE__ */ jsx26(
3465
+ MotionHeadline,
3466
+ {
3467
+ className: "dnt__headline",
3468
+ "aria-hidden": "true",
3469
+ style: { color: v2TitleColor, opacity: nightOpacity2 },
3470
+ children: nightHeadline
3471
+ }
3472
+ )
3473
+ ] }),
3474
+ hasDescription && /* @__PURE__ */ jsxs24("div", { className: "dnt__crossfade-wrap", children: [
3475
+ /* @__PURE__ */ jsx26(
3476
+ motion3.p,
3477
+ {
3478
+ className: "dnt__description",
3479
+ style: {
3480
+ color: v2DescColor,
3481
+ opacity: dayOpacity
3482
+ },
3483
+ children: dayDescription ?? ""
3484
+ }
3485
+ ),
3486
+ /* @__PURE__ */ jsx26(
3487
+ motion3.p,
3488
+ {
3489
+ className: "dnt__description",
3490
+ "aria-hidden": "true",
3491
+ style: {
3492
+ color: v2DescColor,
3493
+ opacity: nightOpacity2
3494
+ },
3495
+ children: nightDescription ?? ""
3496
+ }
3497
+ )
3498
+ ] }),
3499
+ !hideCta && /* @__PURE__ */ jsx26("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
3500
+ ] }) : /* @__PURE__ */ jsxs24(
3501
+ motion3.div,
3502
+ {
3503
+ className: "dnt__text-wrap",
3504
+ style: { color: textColor },
3505
+ children: [
3506
+ useInlineHeadline && inlineDayNightHeadline ? /* @__PURE__ */ jsxs24(
3507
+ MotionHeadline,
3153
3508
  {
3154
- className: "dnt__description",
3155
- "aria-hidden": "true",
3156
- style: { opacity: nightOpacity2 },
3157
- children: nightDescription ?? ""
3509
+ className: "dnt__headline dnt__headline--inline-day-night",
3510
+ "aria-label": `${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`,
3511
+ children: [
3512
+ /* @__PURE__ */ jsx26("span", { className: "dnt__headline-prefix", children: inlineDayNightHeadline.prefix }),
3513
+ /* @__PURE__ */ jsxs24("span", { className: "dnt__headline-pair", children: [
3514
+ /* @__PURE__ */ jsx26(
3515
+ motion3.span,
3516
+ {
3517
+ ref: dayWordRef,
3518
+ className: "dnt__headline-wday",
3519
+ style: { opacity: dayOpacity },
3520
+ children: inlineDayNightHeadline.dayWord
3521
+ }
3522
+ ),
3523
+ /* @__PURE__ */ jsx26(
3524
+ motion3.span,
3525
+ {
3526
+ className: "dnt__headline-wnight",
3527
+ style: {
3528
+ opacity: nightOpacity2,
3529
+ marginInlineStart: nightMarginStart,
3530
+ marginInlineEnd: nightMarginEnd
3531
+ },
3532
+ children: inlineDayNightHeadline.nightWord
3533
+ }
3534
+ )
3535
+ ] })
3536
+ ]
3158
3537
  }
3159
- )
3160
- ] }),
3161
- /* @__PURE__ */ jsx25("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
3162
- ]
3163
- }
3164
- ) })
3165
- ] })
3538
+ ) : /* @__PURE__ */ jsxs24("div", { className: "dnt__crossfade-wrap", children: [
3539
+ /* @__PURE__ */ jsx26(
3540
+ MotionHeadline,
3541
+ {
3542
+ className: "dnt__headline",
3543
+ style: { opacity: dayOpacity },
3544
+ children: dayHeadline
3545
+ }
3546
+ ),
3547
+ /* @__PURE__ */ jsx26(
3548
+ MotionHeadline,
3549
+ {
3550
+ className: "dnt__headline",
3551
+ "aria-hidden": "true",
3552
+ style: { opacity: nightOpacity2 },
3553
+ children: nightHeadline
3554
+ }
3555
+ )
3556
+ ] }),
3557
+ hasDescription && /* @__PURE__ */ jsxs24("div", { className: "dnt__crossfade-wrap", children: [
3558
+ /* @__PURE__ */ jsx26(
3559
+ motion3.p,
3560
+ {
3561
+ className: "dnt__description",
3562
+ style: { opacity: dayOpacity },
3563
+ children: dayDescription ?? ""
3564
+ }
3565
+ ),
3566
+ /* @__PURE__ */ jsx26(
3567
+ motion3.p,
3568
+ {
3569
+ className: "dnt__description",
3570
+ "aria-hidden": "true",
3571
+ style: { opacity: nightOpacity2 },
3572
+ children: nightDescription ?? ""
3573
+ }
3574
+ )
3575
+ ] }),
3576
+ !hideCta && /* @__PURE__ */ jsx26("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
3577
+ ]
3578
+ }
3579
+ ) }) })
3580
+ ] })
3581
+ ]
3166
3582
  }
3167
3583
  );
3168
3584
  };
3169
3585
 
3586
+ // templates/DayNightTransition/dayNightTransitionPresets.ts
3587
+ var dayNightTransitionV2Preset = {
3588
+ className: "dnt--layout-v2 dnt--webflow-v2",
3589
+ scrollPreset: "webflow-day-night-v2",
3590
+ dayImageUrl: "https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86cd8f_trade_day.webp",
3591
+ nightImageUrl: "https://cdn.prod.website-files.com/66585fe0e1dc7e70cc75d440/6757df573bf331c84b6c69fe_trade_night.webp",
3592
+ dayHeadline: "Section title light\n",
3593
+ nightHeadline: "Section title dark\n",
3594
+ dayDescription: "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",
3595
+ nightDescription: "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.",
3596
+ ctaLabel: "Open account",
3597
+ ctaHref: "#"
3598
+ };
3599
+
3170
3600
  // templates/LogoMarquee/LogoMarquee.tsx
3171
- import { useRef as useRef10 } from "react";
3601
+ import { useRef as useRef11 } from "react";
3172
3602
  import {
3173
3603
  motion as motion4,
3174
3604
  useScroll as useScroll3,
@@ -3176,7 +3606,7 @@ import {
3176
3606
  useAnimationFrame,
3177
3607
  useMotionValue
3178
3608
  } from "framer-motion";
3179
- import { jsx as jsx26, jsxs as jsxs25 } from "react/jsx-runtime";
3609
+ import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
3180
3610
  function modWrap(min, max, v) {
3181
3611
  const range = max - min;
3182
3612
  return ((v - min) % range + range) % range + min;
@@ -3233,8 +3663,8 @@ var LogoMarquee = ({
3233
3663
  const scrollVelocity = useVelocity(scrollY);
3234
3664
  const col1Y = useMotionValue(0);
3235
3665
  const col2Y = useMotionValue(0);
3236
- const col1Ref = useRef10(null);
3237
- const col2Ref = useRef10(null);
3666
+ const col1Ref = useRef11(null);
3667
+ const col2Ref = useRef11(null);
3238
3668
  useAnimationFrame((_, delta) => {
3239
3669
  const raw = scrollVelocity.get();
3240
3670
  if (Math.abs(raw) < DEADZONE) return;
@@ -3247,21 +3677,21 @@ var LogoMarquee = ({
3247
3677
  });
3248
3678
  const track1 = [...col1Logos, ...col1Logos];
3249
3679
  const track2 = [...col2Logos, ...col2Logos];
3250
- return /* @__PURE__ */ jsx26(
3680
+ return /* @__PURE__ */ jsx27(
3251
3681
  "section",
3252
3682
  {
3253
3683
  className: ["lm", className].filter(Boolean).join(" "),
3254
3684
  ...props,
3255
3685
  children: /* @__PURE__ */ jsxs25("div", { className: "lm__inner", children: [
3256
- /* @__PURE__ */ jsx26("div", { className: "lm__media", children: /* @__PURE__ */ jsxs25("div", { className: "lm__carousel", children: [
3257
- /* @__PURE__ */ jsx26("div", { className: "lm__fade lm__fade--top", "aria-hidden": "true" }),
3258
- /* @__PURE__ */ jsx26(
3686
+ /* @__PURE__ */ jsx27("div", { className: "lm__media", children: /* @__PURE__ */ jsxs25("div", { className: "lm__carousel", children: [
3687
+ /* @__PURE__ */ jsx27("div", { className: "lm__fade lm__fade--top", "aria-hidden": "true" }),
3688
+ /* @__PURE__ */ jsx27(
3259
3689
  motion4.div,
3260
3690
  {
3261
3691
  ref: col1Ref,
3262
3692
  className: "lm__col",
3263
3693
  style: { y: col1Y },
3264
- children: track1.map((logo, i) => /* @__PURE__ */ jsx26("div", { className: "lm__card", children: /* @__PURE__ */ jsx26("div", { className: "lm__card-img-wrap", children: /* @__PURE__ */ jsx26(
3694
+ children: track1.map((logo, i) => /* @__PURE__ */ jsx27("div", { className: "lm__card", children: /* @__PURE__ */ jsx27("div", { className: "lm__card-img-wrap", children: /* @__PURE__ */ jsx27(
3265
3695
  "img",
3266
3696
  {
3267
3697
  src: logo.url,
@@ -3272,13 +3702,13 @@ var LogoMarquee = ({
3272
3702
  ) }) }, `c1-${i}`))
3273
3703
  }
3274
3704
  ),
3275
- /* @__PURE__ */ jsx26(
3705
+ /* @__PURE__ */ jsx27(
3276
3706
  motion4.div,
3277
3707
  {
3278
3708
  ref: col2Ref,
3279
3709
  className: "lm__col",
3280
3710
  style: { y: col2Y },
3281
- children: track2.map((logo, i) => /* @__PURE__ */ jsx26("div", { className: "lm__card", children: /* @__PURE__ */ jsx26("div", { className: "lm__card-img-wrap", children: /* @__PURE__ */ jsx26(
3711
+ children: track2.map((logo, i) => /* @__PURE__ */ jsx27("div", { className: "lm__card", children: /* @__PURE__ */ jsx27("div", { className: "lm__card-img-wrap", children: /* @__PURE__ */ jsx27(
3282
3712
  "img",
3283
3713
  {
3284
3714
  src: logo.url,
@@ -3289,17 +3719,17 @@ var LogoMarquee = ({
3289
3719
  ) }) }, `c2-${i}`))
3290
3720
  }
3291
3721
  ),
3292
- /* @__PURE__ */ jsx26("div", { className: "lm__fade lm__fade--bottom", "aria-hidden": "true" })
3722
+ /* @__PURE__ */ jsx27("div", { className: "lm__fade lm__fade--bottom", "aria-hidden": "true" })
3293
3723
  ] }) }),
3294
3724
  /* @__PURE__ */ jsxs25("div", { className: "lm__content", children: [
3295
- /* @__PURE__ */ jsx26("h2", { className: "lm__headline", children: headline }),
3725
+ /* @__PURE__ */ jsx27("h2", { className: "lm__headline", children: headline }),
3296
3726
  /* @__PURE__ */ jsxs25("div", { className: "lm__text-group", children: [
3297
- /* @__PURE__ */ jsx26("p", { className: "lm__body", children: body }),
3298
- /* @__PURE__ */ jsx26("p", { className: "lm__disclaimer", children: disclaimer })
3727
+ /* @__PURE__ */ jsx27("p", { className: "lm__body", children: body }),
3728
+ /* @__PURE__ */ jsx27("p", { className: "lm__disclaimer", children: disclaimer })
3299
3729
  ] }),
3300
3730
  /* @__PURE__ */ jsxs25("a", { href: ctaHref, className: "lm__link", children: [
3301
3731
  ctaLabel,
3302
- /* @__PURE__ */ jsx26("span", { className: "lm__link-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx26("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx26("path", { d: "M3 8H13M13 8L9 4M13 8L9 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
3732
+ /* @__PURE__ */ jsx27("span", { className: "lm__link-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx27("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx27("path", { d: "M3 8H13M13 8L9 4M13 8L9 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
3303
3733
  ] })
3304
3734
  ] })
3305
3735
  ] })
@@ -3350,7 +3780,7 @@ var appstore_linux_dark_default = "./appstore-linux-dark-RVH7CBM4.svg";
3350
3780
  var appstore_browser_dark_default = "./appstore-browser-dark-2E6TK6JH.svg";
3351
3781
 
3352
3782
  // primitives/DownloadBadge/DownloadBadge.tsx
3353
- import { jsx as jsx27 } from "react/jsx-runtime";
3783
+ import { jsx as jsx28 } from "react/jsx-runtime";
3354
3784
  var BADGE_ASSETS = {
3355
3785
  light: {
3356
3786
  googleplay: { src: appstore_googleplay_light_default, alt: "Get it on Google Play" },
@@ -3379,7 +3809,7 @@ var DownloadBadge = ({
3379
3809
  ...props
3380
3810
  }) => {
3381
3811
  const { src, alt } = BADGE_ASSETS[colorScheme][platform];
3382
- return /* @__PURE__ */ jsx27(
3812
+ return /* @__PURE__ */ jsx28(
3383
3813
  "a",
3384
3814
  {
3385
3815
  className: [
@@ -3392,13 +3822,13 @@ var DownloadBadge = ({
3392
3822
  target: "_blank",
3393
3823
  rel: "noopener noreferrer",
3394
3824
  ...props,
3395
- children: /* @__PURE__ */ jsx27("img", { className: "download-badge__img", src, alt })
3825
+ children: /* @__PURE__ */ jsx28("img", { className: "download-badge__img", src, alt })
3396
3826
  }
3397
3827
  );
3398
3828
  };
3399
3829
 
3400
3830
  // templates/Steps/Steps.tsx
3401
- import { jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
3831
+ import { jsx as jsx29, jsxs as jsxs26 } from "react/jsx-runtime";
3402
3832
  var Steps = ({
3403
3833
  title,
3404
3834
  steps,
@@ -3410,8 +3840,8 @@ var Steps = ({
3410
3840
  "steps__container",
3411
3841
  imagePosition === "right" ? "steps__container--image-right" : ""
3412
3842
  ].filter(Boolean).join(" ");
3413
- return /* @__PURE__ */ jsx28("section", { className: "steps", children: /* @__PURE__ */ jsxs26("div", { className: containerClass, children: [
3414
- image && /* @__PURE__ */ jsx28("div", { className: "steps__image-wrapper", children: /* @__PURE__ */ jsx28(
3843
+ return /* @__PURE__ */ jsx29("section", { className: "steps", children: /* @__PURE__ */ jsxs26("div", { className: containerClass, children: [
3844
+ image && /* @__PURE__ */ jsx29("div", { className: "steps__image-wrapper", children: /* @__PURE__ */ jsx29(
3415
3845
  "img",
3416
3846
  {
3417
3847
  src: image,
@@ -3420,12 +3850,12 @@ var Steps = ({
3420
3850
  }
3421
3851
  ) }),
3422
3852
  /* @__PURE__ */ jsxs26("div", { className: "steps__content", children: [
3423
- /* @__PURE__ */ jsx28("h2", { className: "steps__title", children: title }),
3424
- /* @__PURE__ */ jsx28("ol", { className: "steps__list", children: steps.map((step, index) => /* @__PURE__ */ jsx28("li", { className: "steps__item", children: /* @__PURE__ */ jsxs26("div", { className: "steps__item-inner", children: [
3425
- /* @__PURE__ */ jsx28("span", { className: "steps__number", "aria-hidden": "true", children: index + 1 }),
3853
+ /* @__PURE__ */ jsx29("h2", { className: "steps__title", children: title }),
3854
+ /* @__PURE__ */ jsx29("ol", { className: "steps__list", children: steps.map((step, index) => /* @__PURE__ */ jsx29("li", { className: "steps__item", children: /* @__PURE__ */ jsxs26("div", { className: "steps__item-inner", children: [
3855
+ /* @__PURE__ */ jsx29("span", { className: "steps__number", "aria-hidden": "true", children: index + 1 }),
3426
3856
  /* @__PURE__ */ jsxs26("div", { className: "steps__item-body", children: [
3427
- /* @__PURE__ */ jsx28("h3", { className: "steps__item-title", children: step.title }),
3428
- /* @__PURE__ */ jsx28("p", { className: "steps__item-description", children: step.description })
3857
+ /* @__PURE__ */ jsx29("h3", { className: "steps__item-title", children: step.title }),
3858
+ /* @__PURE__ */ jsx29("p", { className: "steps__item-description", children: step.description })
3429
3859
  ] })
3430
3860
  ] }) }, index)) })
3431
3861
  ] })
@@ -3433,7 +3863,7 @@ var Steps = ({
3433
3863
  };
3434
3864
 
3435
3865
  // templates/DownloadBanner/DownloadBanner.tsx
3436
- import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
3866
+ import { jsx as jsx30, jsxs as jsxs27 } from "react/jsx-runtime";
3437
3867
  var DownloadBanner = ({
3438
3868
  style = "light-2",
3439
3869
  qrCodeImage,
@@ -3458,9 +3888,9 @@ var DownloadBanner = ({
3458
3888
  disclaimer
3459
3889
  }) => {
3460
3890
  const colorScheme = style === "dark" ? "dark" : "light";
3461
- return /* @__PURE__ */ jsx29("section", { className: `db-section db-section--${style}`, children: /* @__PURE__ */ jsx29("div", { className: "db-container", children: /* @__PURE__ */ jsxs27("div", { className: "db-card", children: [
3891
+ return /* @__PURE__ */ jsx30("section", { className: `db-section db-section--${style}`, children: /* @__PURE__ */ jsx30("div", { className: "db-container", children: /* @__PURE__ */ jsxs27("div", { className: "db-card", children: [
3462
3892
  /* @__PURE__ */ jsxs27("div", { className: "db-qr-block", children: [
3463
- qrCodeImage && /* @__PURE__ */ jsx29(
3893
+ qrCodeImage && /* @__PURE__ */ jsx30(
3464
3894
  "img",
3465
3895
  {
3466
3896
  className: "db-qr-image",
@@ -3469,23 +3899,91 @@ var DownloadBanner = ({
3469
3899
  }
3470
3900
  ),
3471
3901
  /* @__PURE__ */ jsxs27("div", { className: "db-qr-text", children: [
3472
- /* @__PURE__ */ jsx29("span", { className: "db-qr-text__title db-qr-text__title--desktop", children: qrTitle }),
3473
- /* @__PURE__ */ jsx29("h2", { className: "db-qr-text__subtitle db-qr-text__subtitle--desktop", children: qrSubtitle }),
3474
- /* @__PURE__ */ jsx29("span", { className: "db-qr-text__title db-qr-text__title--mobile", children: mobileTitle }),
3475
- disclaimer && /* @__PURE__ */ jsx29("span", { className: "db-disclaimer", children: disclaimer })
3902
+ /* @__PURE__ */ jsx30("span", { className: "db-qr-text__title db-qr-text__title--desktop", children: qrTitle }),
3903
+ /* @__PURE__ */ jsx30("h2", { className: "db-qr-text__subtitle db-qr-text__subtitle--desktop", children: qrSubtitle }),
3904
+ /* @__PURE__ */ jsx30("span", { className: "db-qr-text__title db-qr-text__title--mobile", children: mobileTitle }),
3905
+ disclaimer && /* @__PURE__ */ jsx30("span", { className: "db-disclaimer", children: disclaimer })
3476
3906
  ] })
3477
3907
  ] }),
3478
3908
  /* @__PURE__ */ jsxs27("div", { className: "db-badges", children: [
3479
- showGooglePlay && /* @__PURE__ */ jsx29(DownloadBadge, { platform: "googleplay", colorScheme, href: googlePlayHref }),
3480
- showAppGallery && /* @__PURE__ */ jsx29(DownloadBadge, { platform: "appgallery", colorScheme, href: appGalleryHref }),
3481
- showMacOS && /* @__PURE__ */ jsx29(DownloadBadge, { platform: "macos", colorScheme, href: macOSHref }),
3482
- showWindows && /* @__PURE__ */ jsx29(DownloadBadge, { platform: "windows", colorScheme, href: windowsHref }),
3483
- showLinux && /* @__PURE__ */ jsx29(DownloadBadge, { platform: "linux", colorScheme, href: linuxHref }),
3484
- showAppStore && /* @__PURE__ */ jsx29(DownloadBadge, { platform: "appstore", colorScheme, href: appStoreHref }),
3485
- showWeb && /* @__PURE__ */ jsx29(DownloadBadge, { platform: "web", colorScheme, href: webHref })
3909
+ showGooglePlay && /* @__PURE__ */ jsx30(DownloadBadge, { platform: "googleplay", colorScheme, href: googlePlayHref }),
3910
+ showAppGallery && /* @__PURE__ */ jsx30(DownloadBadge, { platform: "appgallery", colorScheme, href: appGalleryHref }),
3911
+ showMacOS && /* @__PURE__ */ jsx30(DownloadBadge, { platform: "macos", colorScheme, href: macOSHref }),
3912
+ showWindows && /* @__PURE__ */ jsx30(DownloadBadge, { platform: "windows", colorScheme, href: windowsHref }),
3913
+ showLinux && /* @__PURE__ */ jsx30(DownloadBadge, { platform: "linux", colorScheme, href: linuxHref }),
3914
+ showAppStore && /* @__PURE__ */ jsx30(DownloadBadge, { platform: "appstore", colorScheme, href: appStoreHref }),
3915
+ showWeb && /* @__PURE__ */ jsx30(DownloadBadge, { platform: "web", colorScheme, href: webHref })
3486
3916
  ] })
3487
3917
  ] }) }) });
3488
3918
  };
3919
+
3920
+ // templates/TextScroll/TextScroll.tsx
3921
+ import { useEffect as useEffect9, useRef as useRef12 } from "react";
3922
+ import { gsap } from "gsap";
3923
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
3924
+ import { jsx as jsx31, jsxs as jsxs28 } from "react/jsx-runtime";
3925
+ gsap.registerPlugin(ScrollTrigger);
3926
+ var TextScroll = ({ text, className }) => {
3927
+ const sectionRef = useRef12(null);
3928
+ const wordsRef = useRef12([]);
3929
+ const words = text.split(/\s+/).filter(Boolean);
3930
+ useEffect9(() => {
3931
+ const section = sectionRef.current;
3932
+ const wordEls = wordsRef.current.filter(Boolean);
3933
+ if (!section || wordEls.length === 0) return;
3934
+ const isMobile = window.matchMedia("(max-width: 767px)").matches;
3935
+ const startValue = isMobile ? "top 35%" : "top center";
3936
+ const endValue = isMobile ? "bottom 90%" : "bottom center";
3937
+ const rafId = requestAnimationFrame(() => {
3938
+ gsap.set(wordEls, { opacity: 0.2 });
3939
+ const tl = gsap.timeline({
3940
+ scrollTrigger: {
3941
+ trigger: section,
3942
+ start: startValue,
3943
+ end: endValue,
3944
+ scrub: 2
3945
+ }
3946
+ });
3947
+ tl.to(wordEls, {
3948
+ opacity: 1,
3949
+ stagger: 0.1,
3950
+ ease: "none"
3951
+ });
3952
+ section._tl = tl;
3953
+ });
3954
+ return () => {
3955
+ cancelAnimationFrame(rafId);
3956
+ const tl = section._tl;
3957
+ if (tl) {
3958
+ tl.scrollTrigger?.kill();
3959
+ tl.kill();
3960
+ }
3961
+ gsap.set(wordEls, { clearProps: "opacity" });
3962
+ };
3963
+ }, [text]);
3964
+ return /* @__PURE__ */ jsx31(
3965
+ "section",
3966
+ {
3967
+ ref: sectionRef,
3968
+ className: ["ts", className].filter(Boolean).join(" "),
3969
+ children: /* @__PURE__ */ jsx31("div", { className: "ts__inner", children: /* @__PURE__ */ jsx31("p", { className: "ts__text", "aria-label": text, children: words.map((word, i) => /* @__PURE__ */ jsxs28(
3970
+ "span",
3971
+ {
3972
+ ref: (el) => {
3973
+ if (el) wordsRef.current[i] = el;
3974
+ },
3975
+ className: "ts__word",
3976
+ "aria-hidden": "true",
3977
+ children: [
3978
+ word,
3979
+ i < words.length - 1 ? " " : ""
3980
+ ]
3981
+ },
3982
+ i
3983
+ )) }) })
3984
+ }
3985
+ );
3986
+ };
3489
3987
  export {
3490
3988
  AVATAR_DATA,
3491
3989
  Accordion,
@@ -3499,25 +3997,28 @@ export {
3499
3997
  Chip,
3500
3998
  ChipDropdown,
3501
3999
  DayNightTransition,
4000
+ DotLottieInView,
3502
4001
  DownloadBadge,
3503
4002
  DownloadBanner,
4003
+ FEATURE_SCROLL_DATA,
3504
4004
  FeatureCards,
3505
4005
  FeatureCardsSecondary,
4006
+ FeatureScroll,
3506
4007
  Footer,
3507
4008
  Hero,
3508
4009
  Link,
3509
4010
  LogoMarquee,
3510
4011
  Navbar,
3511
4012
  Pagination,
3512
- SCROLLYTELLING_DATA,
3513
4013
  STEPS_DATA,
3514
- Scrollytelling,
3515
4014
  SearchField,
3516
4015
  Stats,
3517
4016
  Steps,
3518
4017
  StickyStackedCards,
3519
4018
  TEXT_CONTENT,
3520
4019
  Tag,
3521
- TextField
4020
+ TextField,
4021
+ TextScroll,
4022
+ dayNightTransitionV2Preset
3522
4023
  };
3523
4024
  //# sourceMappingURL=index.mjs.map