@deriv-web-design/ui 0.0.4 → 0.0.6

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
@@ -1028,9 +1028,9 @@ var FeatureCards = ({
1028
1028
  ] }) });
1029
1029
  };
1030
1030
 
1031
- // templates/Footer/Footer.tsx
1031
+ // components/Footer/Footer.tsx
1032
1032
  import { useState as useState5 } from "react";
1033
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
1033
+ import { Fragment as Fragment2, jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
1034
1034
  var ExternalLinkIcon = () => /* @__PURE__ */ jsx17(
1035
1035
  "svg",
1036
1036
  {
@@ -1078,40 +1078,42 @@ var DerivGoBadges = ({
1078
1078
  appStoreBadge,
1079
1079
  huaweiBadge,
1080
1080
  availabilityNote
1081
- }) => /* @__PURE__ */ jsxs16("div", { className: "footer__app-badges", children: [
1082
- googlePlayBadge && /* @__PURE__ */ jsx17(
1083
- "a",
1084
- {
1085
- href: googlePlayBadge.href,
1086
- className: googlePlayBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1087
- "aria-label": googlePlayBadge.imageAlt,
1088
- target: "_blank",
1089
- rel: "noopener noreferrer",
1090
- children: googlePlayBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: googlePlayBadge.imageSrc, alt: googlePlayBadge.imageAlt })
1091
- }
1092
- ),
1093
- appStoreBadge && /* @__PURE__ */ jsx17(
1094
- "a",
1095
- {
1096
- href: appStoreBadge.href,
1097
- className: appStoreBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1098
- "aria-label": appStoreBadge.imageAlt,
1099
- target: "_blank",
1100
- rel: "noopener noreferrer",
1101
- children: appStoreBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: appStoreBadge.imageSrc, alt: appStoreBadge.imageAlt })
1102
- }
1103
- ),
1104
- huaweiBadge && /* @__PURE__ */ jsx17(
1105
- "a",
1106
- {
1107
- href: huaweiBadge.href,
1108
- className: huaweiBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1109
- "aria-label": huaweiBadge.imageAlt,
1110
- target: "_blank",
1111
- rel: "noopener noreferrer",
1112
- children: huaweiBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: huaweiBadge.imageSrc, alt: huaweiBadge.imageAlt })
1113
- }
1114
- ),
1081
+ }) => /* @__PURE__ */ jsxs16(Fragment2, { children: [
1082
+ /* @__PURE__ */ jsxs16("div", { className: "footer__app-badges", children: [
1083
+ googlePlayBadge && /* @__PURE__ */ jsx17(
1084
+ "a",
1085
+ {
1086
+ href: googlePlayBadge.href,
1087
+ className: googlePlayBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1088
+ "aria-label": googlePlayBadge.imageAlt,
1089
+ target: "_blank",
1090
+ rel: "noopener noreferrer",
1091
+ children: googlePlayBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: googlePlayBadge.imageSrc, alt: googlePlayBadge.imageAlt })
1092
+ }
1093
+ ),
1094
+ appStoreBadge && /* @__PURE__ */ jsx17(
1095
+ "a",
1096
+ {
1097
+ href: appStoreBadge.href,
1098
+ className: appStoreBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1099
+ "aria-label": appStoreBadge.imageAlt,
1100
+ target: "_blank",
1101
+ rel: "noopener noreferrer",
1102
+ children: appStoreBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: appStoreBadge.imageSrc, alt: appStoreBadge.imageAlt })
1103
+ }
1104
+ ),
1105
+ huaweiBadge && /* @__PURE__ */ jsx17(
1106
+ "a",
1107
+ {
1108
+ href: huaweiBadge.href,
1109
+ className: huaweiBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1110
+ "aria-label": huaweiBadge.imageAlt,
1111
+ target: "_blank",
1112
+ rel: "noopener noreferrer",
1113
+ children: huaweiBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: huaweiBadge.imageSrc, alt: huaweiBadge.imageAlt })
1114
+ }
1115
+ )
1116
+ ] }),
1115
1117
  availabilityNote && /* @__PURE__ */ jsx17("p", { className: "footer__app-note", children: availabilityNote })
1116
1118
  ] });
1117
1119
  var NavLink = ({ label, href, isExternal, onClick }) => /* @__PURE__ */ jsxs16(
@@ -1176,11 +1178,10 @@ var Footer = ({
1176
1178
  "a",
1177
1179
  {
1178
1180
  href: item.href,
1179
- className: "footer__ai-icon",
1180
1181
  "aria-label": item.imageAlt,
1181
1182
  target: "_blank",
1182
1183
  rel: "noopener noreferrer",
1183
- children: /* @__PURE__ */ jsx17("img", { src: item.imageSrc, alt: item.imageAlt })
1184
+ children: /* @__PURE__ */ jsx17("img", { className: "footer__ai-icon", src: item.imageSrc, alt: item.imageAlt })
1184
1185
  },
1185
1186
  i
1186
1187
  )) })
@@ -1204,11 +1205,10 @@ var Footer = ({
1204
1205
  "a",
1205
1206
  {
1206
1207
  href: item.href,
1207
- className: "footer__ai-icon",
1208
1208
  "aria-label": item.imageAlt,
1209
1209
  target: "_blank",
1210
1210
  rel: "noopener noreferrer",
1211
- children: /* @__PURE__ */ jsx17("img", { src: item.imageSrc, alt: item.imageAlt })
1211
+ children: /* @__PURE__ */ jsx17("img", { className: "footer__ai-icon", src: item.imageSrc, alt: item.imageAlt })
1212
1212
  },
1213
1213
  i
1214
1214
  )) })
@@ -1249,7 +1249,7 @@ var Footer = ({
1249
1249
  className: "footer__deriv-go-qr-img"
1250
1250
  }
1251
1251
  ),
1252
- /* @__PURE__ */ jsx17("span", { className: "footer__deriv-go-qr-label", children: "Scan to download" })
1252
+ /* @__PURE__ */ jsx17("span", { className: "footer__deriv-go-qr-label", children: derivGo.scanToDownloadLabel ?? "Scan to download" })
1253
1253
  ] }),
1254
1254
  /* @__PURE__ */ jsx17(
1255
1255
  DerivGoBadges,
@@ -1935,153 +1935,240 @@ var SPRING = { stiffness: 80, damping: 30, restDelta: 1e-3 };
1935
1935
  var LOCK_AT = 0.5;
1936
1936
  var PLACEHOLDER_URL = "https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86ce1a_footer-member-5.webp";
1937
1937
  var AVATAR_DATA = [
1938
- /* ── Rank 0 — bottom-centre-ish (dist 285) ─── */
1938
+ /* ── Rank 0 — top-centre (col 6, row 1) ─────── */
1939
1939
  {
1940
- id: 11,
1940
+ id: 12,
1941
1941
  staggerRank: 0,
1942
1942
  imageUrl: PLACEHOLDER_URL,
1943
- desktopPos: { left: "45.7%", top: "84.9%" },
1944
- mobilePos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "81.8%" },
1943
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 6)", top: "calc(var(--ctab-grid-cell) * 1)" },
1944
+ mobilePos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "calc(var(--ctab-grid-cell) * 1)" },
1945
1945
  mobileVisible: true
1946
1946
  },
1947
- /* ── Rank 1 — top-centre (dist 293) ────────── */
1947
+ /* ── Rank 1 — bot-centre (col 6, row 7) ─────── */
1948
1948
  {
1949
- id: 12,
1949
+ id: 11,
1950
1950
  staggerRank: 1,
1951
1951
  imageUrl: PLACEHOLDER_URL,
1952
- desktopPos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "0%" },
1953
- mobilePos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "9.2%" },
1954
- mobileVisible: true
1952
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 6)", top: "calc(var(--ctab-grid-cell) * 7)" },
1953
+ mobilePos: null,
1954
+ mobileVisible: false
1955
1955
  },
1956
- /* ── Rank 2 — right mid-lower (dist 341) ───── */
1956
+ /* ── Rank 2 — upper-inner-left (col 3, row 2) ── */
1957
1957
  {
1958
- id: 10,
1958
+ id: 3,
1959
1959
  staggerRank: 2,
1960
1960
  imageUrl: PLACEHOLDER_URL,
1961
- desktopPos: { left: "68.5%", top: "70.7%" },
1962
- mobilePos: null,
1963
- mobileVisible: false
1961
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 3)", top: "calc(var(--ctab-grid-cell) * 2)" },
1962
+ mobilePos: { left: "0", top: "calc(var(--ctab-grid-cell) * 2)" },
1963
+ mobileVisible: true
1964
1964
  },
1965
- /* ── Rank 3 — left mid-lower (dist 342) ────── */
1965
+ /* ── Rank 3 — upper-inner-right (col 9, row 2) ── */
1966
1966
  {
1967
- id: 1,
1967
+ id: 6,
1968
1968
  staggerRank: 3,
1969
1969
  imageUrl: PLACEHOLDER_URL,
1970
- desktopPos: { left: "24.0%", top: "70.7%" },
1971
- mobilePos: null,
1972
- mobileVisible: false
1970
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 9)", top: "calc(var(--ctab-grid-cell) * 2)" },
1971
+ mobilePos: { right: "0", top: "calc(var(--ctab-grid-cell) * 2)" },
1972
+ mobileVisible: true
1973
1973
  },
1974
- /* ── Rank 4 — left upper (dist 345) ────────── */
1974
+ /* ── Rank 4 — lower-inner-left (col 3, row 6) ── */
1975
1975
  {
1976
- id: 3,
1976
+ id: 1,
1977
1977
  staggerRank: 4,
1978
1978
  imageUrl: PLACEHOLDER_URL,
1979
- desktopPos: { left: "24.0%", top: "14.4%" },
1980
- mobilePos: { left: "8.3%", top: "18.2%" },
1979
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 3)", top: "calc(var(--ctab-grid-cell) * 6)" },
1980
+ mobilePos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "calc(var(--ctab-grid-cell) * 9)" },
1981
1981
  mobileVisible: true
1982
1982
  },
1983
- /* ── Rank 5 — right upper (dist 345) ───────── */
1983
+ /* ── Rank 5 — lower-inner-right (col 9, row 6) ── */
1984
1984
  {
1985
- id: 6,
1985
+ id: 10,
1986
1986
  staggerRank: 5,
1987
1987
  imageUrl: PLACEHOLDER_URL,
1988
- desktopPos: { left: "68.5%", top: "14.4%" },
1989
- mobilePos: { right: "7.8%", top: "18.3%" },
1990
- mobileVisible: true
1988
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 9)", top: "calc(var(--ctab-grid-cell) * 6)" },
1989
+ mobilePos: null,
1990
+ mobileVisible: false
1991
1991
  },
1992
- /* ── Rank 6 — far-right middle (dist 572) ──── */
1992
+ /* ── Rank 6 — mid-left (col 0, row 4) ──────── */
1993
1993
  {
1994
- id: 8,
1994
+ id: 5,
1995
1995
  staggerRank: 6,
1996
1996
  imageUrl: PLACEHOLDER_URL,
1997
- desktopPos: { left: "91.0%", top: "43.0%" },
1998
- mobilePos: { right: "7.8%", top: "77.2%" },
1997
+ desktopPos: { left: "0", top: "calc(var(--ctab-grid-cell) * 4)" },
1998
+ mobilePos: { left: "0", top: "calc(var(--ctab-grid-cell) * 8)" },
1999
1999
  mobileVisible: true
2000
2000
  },
2001
- /* ── Rank 7 — far-left middle (dist 577) ───── */
2001
+ /* ── Rank 7 — mid-right (col 12, row 4) ────── */
2002
2002
  {
2003
- id: 5,
2003
+ id: 8,
2004
2004
  staggerRank: 7,
2005
2005
  imageUrl: PLACEHOLDER_URL,
2006
- desktopPos: { left: "1.25%", top: "43.0%" },
2007
- mobilePos: { left: "8.6%", top: "72.8%" },
2006
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 12)", top: "calc(var(--ctab-grid-cell) * 4)" },
2007
+ mobilePos: { right: "0", top: "calc(var(--ctab-grid-cell) * 8)" },
2008
2008
  mobileVisible: true
2009
2009
  },
2010
- /* ── Rank 8 — far-right bottom (dist 639) ──── */
2010
+ /* ── Rank 8 — top-left corner (col 0, row 1) ── */
2011
2011
  {
2012
- id: 9,
2012
+ id: 4,
2013
2013
  staggerRank: 8,
2014
2014
  imageUrl: PLACEHOLDER_URL,
2015
- desktopPos: { left: "91.0%", top: "84.9%" },
2015
+ desktopPos: { left: "0", top: "calc(var(--ctab-grid-cell) * 1)" },
2016
2016
  mobilePos: null,
2017
2017
  mobileVisible: false
2018
2018
  },
2019
- /* ── Rank 9 — far-right top (dist 642) ─────── */
2019
+ /* ── Rank 9 — top-right corner (col 12, row 1) ── */
2020
2020
  {
2021
2021
  id: 7,
2022
2022
  staggerRank: 9,
2023
2023
  imageUrl: PLACEHOLDER_URL,
2024
- desktopPos: { left: "91.0%", top: "0%" },
2024
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 12)", top: "calc(var(--ctab-grid-cell) * 1)" },
2025
2025
  mobilePos: null,
2026
2026
  mobileVisible: false
2027
2027
  },
2028
- /* ── Rank 10 — far-left bottom (dist 643) ──── */
2028
+ /* ── Rank 10 — bot-left corner (col 0, row 7) ── */
2029
2029
  {
2030
2030
  id: 2,
2031
2031
  staggerRank: 10,
2032
2032
  imageUrl: PLACEHOLDER_URL,
2033
- desktopPos: { left: "1.25%", top: "84.9%" },
2033
+ desktopPos: { left: "0", top: "calc(var(--ctab-grid-cell) * 7)" },
2034
2034
  mobilePos: null,
2035
2035
  mobileVisible: false
2036
2036
  },
2037
- /* ── Rank 11 — far-left top (dist 647) ─────── */
2037
+ /* ── Rank 11 — bot-right corner (col 12, row 7) ── */
2038
2038
  {
2039
- id: 4,
2039
+ id: 9,
2040
2040
  staggerRank: 11,
2041
2041
  imageUrl: PLACEHOLDER_URL,
2042
- desktopPos: { left: "1.25%", top: "0%" },
2042
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 12)", top: "calc(var(--ctab-grid-cell) * 7)" },
2043
+ mobilePos: null,
2044
+ mobileVisible: false
2045
+ }
2046
+ ];
2047
+ var COMPACT_AVATAR_DATA = [
2048
+ /* ── Rank 0 — top-centre (col ~6, row 1) ── */
2049
+ {
2050
+ id: 12,
2051
+ staggerRank: 0,
2052
+ imageUrl: PLACEHOLDER_URL,
2053
+ desktopPos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "calc(var(--ctab-grid-cell) * 1)" },
2054
+ mobilePos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "calc(var(--ctab-grid-cell) * 1)" },
2055
+ mobileVisible: true
2056
+ },
2057
+ /* ── Rank 1 — top-left (col 2, row 1) ───── */
2058
+ {
2059
+ id: 3,
2060
+ staggerRank: 1,
2061
+ imageUrl: PLACEHOLDER_URL,
2062
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 2)", top: "calc(var(--ctab-grid-cell) * 1)" },
2063
+ mobilePos: { left: "0", top: "calc(var(--ctab-grid-cell) * 2)" },
2064
+ mobileVisible: true
2065
+ },
2066
+ /* ── Rank 2 — top-right (col 10, row 1) ─── */
2067
+ {
2068
+ id: 6,
2069
+ staggerRank: 2,
2070
+ imageUrl: PLACEHOLDER_URL,
2071
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 10)", top: "calc(var(--ctab-grid-cell) * 1)" },
2072
+ mobilePos: { right: "0", top: "calc(var(--ctab-grid-cell) * 2)" },
2073
+ mobileVisible: true
2074
+ },
2075
+ /* ── Rank 3 — mid-left (col 0, row 3) ────── */
2076
+ {
2077
+ id: 5,
2078
+ staggerRank: 3,
2079
+ imageUrl: PLACEHOLDER_URL,
2080
+ desktopPos: { left: "0", top: "calc(var(--ctab-grid-cell) * 3)" },
2081
+ mobilePos: { left: "0", top: "calc(var(--ctab-grid-cell) * 8)" },
2082
+ mobileVisible: true
2083
+ },
2084
+ /* ── Rank 4 — mid-right (col 12, row 3) ──── */
2085
+ {
2086
+ id: 8,
2087
+ staggerRank: 4,
2088
+ imageUrl: PLACEHOLDER_URL,
2089
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 12)", top: "calc(var(--ctab-grid-cell) * 3)" },
2090
+ mobilePos: { right: "0", top: "calc(var(--ctab-grid-cell) * 8)" },
2091
+ mobileVisible: true
2092
+ },
2093
+ /* ── Rank 5 — bot-left (col 2, row 5) ────── */
2094
+ {
2095
+ id: 1,
2096
+ staggerRank: 5,
2097
+ imageUrl: PLACEHOLDER_URL,
2098
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 2)", top: "calc(var(--ctab-grid-cell) * 5)" },
2099
+ mobilePos: { left: "calc(50% - var(--ctab-avatar-size) / 2)", top: "calc(var(--ctab-grid-cell) * 9)" },
2100
+ mobileVisible: true
2101
+ },
2102
+ /* ── Rank 6 — bot-right (col 10, row 5) — desktop only ─── */
2103
+ {
2104
+ id: 11,
2105
+ staggerRank: 6,
2106
+ imageUrl: PLACEHOLDER_URL,
2107
+ desktopPos: { left: "calc(var(--ctab-grid-cell) * 10)", top: "calc(var(--ctab-grid-cell) * 5)" },
2043
2108
  mobilePos: null,
2044
2109
  mobileVisible: false
2045
2110
  }
2046
2111
  ];
2047
2112
  function useAvatarYValues(smooth) {
2048
- const y0 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.near, 0]);
2049
- const y1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]);
2050
- const y2 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2051
- const y3 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2052
- const y4 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2053
- const y5 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2113
+ const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]);
2114
+ const y1 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.near, 0]);
2115
+ const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2116
+ const y3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2117
+ const y4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2118
+ const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2054
2119
  const y6 = useTransform(smooth, [0, LOCK_AT], [0, 0]);
2055
2120
  const y7 = useTransform(smooth, [0, LOCK_AT], [0, 0]);
2056
- const y8 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]);
2121
+ const y8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]);
2057
2122
  const y9 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]);
2058
2123
  const y10 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]);
2059
- const y11 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]);
2124
+ const y11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]);
2060
2125
  return [y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11];
2061
2126
  }
2062
2127
  function useAvatarXValues(smooth) {
2063
2128
  const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]);
2064
2129
  const x1 = useTransform(smooth, [0, LOCK_AT], [0, 0]);
2065
- const x2 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2066
- const x3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2130
+ const x2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2131
+ const x3 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2067
2132
  const x4 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2068
2133
  const x5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2069
- const x6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]);
2070
- const x7 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]);
2071
- const x8 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]);
2134
+ const x6 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]);
2135
+ const x7 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]);
2136
+ const x8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]);
2072
2137
  const x9 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]);
2073
2138
  const x10 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]);
2074
- const x11 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]);
2139
+ const x11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]);
2075
2140
  return [x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11];
2076
2141
  }
2142
+ function useCompactAvatarYValues(smooth) {
2143
+ const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]);
2144
+ const y1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2145
+ const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2146
+ const y3 = useTransform(smooth, [0, LOCK_AT], [0, 0]);
2147
+ const y4 = useTransform(smooth, [0, LOCK_AT], [0, 0]);
2148
+ const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2149
+ const y6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2150
+ return [y0, y1, y2, y3, y4, y5, y6];
2151
+ }
2152
+ function useCompactAvatarXValues(smooth) {
2153
+ const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]);
2154
+ const x1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2155
+ const x2 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2156
+ const x3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]);
2157
+ const x4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]);
2158
+ const x5 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]);
2159
+ const x6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]);
2160
+ return [x0, x1, x2, x3, x4, x5, x6];
2161
+ }
2077
2162
  var CTABanner = ({
2078
- headline = "Join 3M+ global traders",
2163
+ headline = "Short section title goes here",
2079
2164
  ctaLabel = "Open account",
2080
2165
  ctaHref = "#",
2081
- avatars = AVATAR_DATA,
2166
+ avatars,
2167
+ variant = "standard",
2082
2168
  className,
2083
2169
  ...props
2084
2170
  }) => {
2171
+ const resolvedAvatars = avatars ?? (variant === "compact" ? COMPACT_AVATAR_DATA : AVATAR_DATA);
2085
2172
  const sectionRef = useRef6(null);
2086
2173
  const { scrollYProgress } = useScroll({
2087
2174
  target: sectionRef,
@@ -2094,13 +2181,17 @@ var CTABanner = ({
2094
2181
  const avatarOpacity = useTransform(smooth, [0, 0.25], [0, 1]);
2095
2182
  const blurPx = useTransform(smooth, [0, 0.3, 0.7, 1], [ENTRANCE.blurStart, 0, 0, ENTRANCE.blurStart]);
2096
2183
  const avatarFilter = useMotionTemplate`blur(${blurPx}px)`;
2097
- const avatarYValues = useAvatarYValues(smooth);
2098
- const avatarXValues = useAvatarXValues(smooth);
2184
+ const standardYValues = useAvatarYValues(smooth);
2185
+ const standardXValues = useAvatarXValues(smooth);
2186
+ const compactYValues = useCompactAvatarYValues(smooth);
2187
+ const compactXValues = useCompactAvatarXValues(smooth);
2188
+ const avatarYValues = variant === "compact" ? compactYValues : standardYValues;
2189
+ const avatarXValues = variant === "compact" ? compactXValues : standardXValues;
2099
2190
  return /* @__PURE__ */ jsxs21(
2100
2191
  "section",
2101
2192
  {
2102
2193
  ref: sectionRef,
2103
- className: ["ctab", className].filter(Boolean).join(" "),
2194
+ className: ["ctab", variant === "compact" ? "ctab--compact" : "", className].filter(Boolean).join(" "),
2104
2195
  ...props,
2105
2196
  children: [
2106
2197
  /* @__PURE__ */ jsx22(
@@ -2112,7 +2203,7 @@ var CTABanner = ({
2112
2203
  }
2113
2204
  ),
2114
2205
  /* @__PURE__ */ jsx22("div", { className: "ctab__inner", children: /* @__PURE__ */ jsxs21("div", { className: "ctab__stage", children: [
2115
- avatars.map((avatar, index) => {
2206
+ resolvedAvatars.map((avatar, index) => {
2116
2207
  const posStyle = {};
2117
2208
  if (avatar.desktopPos.left) posStyle["--av-d-left"] = avatar.desktopPos.left;
2118
2209
  if (avatar.desktopPos.right) posStyle["--av-d-right"] = avatar.desktopPos.right;
@@ -2154,7 +2245,7 @@ var CTABanner = ({
2154
2245
  style: { y: heroY, opacity: heroOpacity },
2155
2246
  children: [
2156
2247
  /* @__PURE__ */ jsx22("h2", { className: "ctab__headline", children: headline }),
2157
- /* @__PURE__ */ jsx22("a", { href: ctaHref, className: "ctab__btn", children: ctaLabel })
2248
+ /* @__PURE__ */ jsx22("a", { href: ctaHref, children: /* @__PURE__ */ jsx22(Button, { colorScheme: "black", variant: "primary", label: ctaLabel }) })
2158
2249
  ]
2159
2250
  }
2160
2251
  )
@@ -2164,16 +2255,464 @@ var CTABanner = ({
2164
2255
  );
2165
2256
  };
2166
2257
 
2258
+ // components/Navbar/Navbar.tsx
2259
+ import { useRef as useRef7, useState as useState8, useEffect as useEffect6, useCallback as useCallback2 } from "react";
2260
+ import { motion as motion2, AnimatePresence } from "framer-motion";
2261
+
2262
+ // assets/icon-globe.svg
2263
+ var icon_globe_default = "./icon-globe-S54WYYEK.svg";
2264
+
2265
+ // components/Navbar/Navbar.tsx
2266
+ import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
2267
+ var EASE_OUT_EXPO = [0.16, 1, 0.3, 1];
2268
+ var dropdownVariants = {
2269
+ hidden: { opacity: 0, scale: 0.96, y: -8 },
2270
+ visible: { opacity: 1, scale: 1, y: 0 }
2271
+ };
2272
+ var drawerVariants = {
2273
+ hidden: { y: "-100%" },
2274
+ visible: { y: 0 }
2275
+ };
2276
+ var accordionVariants = {
2277
+ hidden: { height: 0, opacity: 0 },
2278
+ visible: { height: "auto", opacity: 1 }
2279
+ };
2280
+ var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ jsx23(
2281
+ "svg",
2282
+ {
2283
+ className,
2284
+ width: "14",
2285
+ height: "14",
2286
+ viewBox: "0 0 14 14",
2287
+ fill: "none",
2288
+ "aria-hidden": "true",
2289
+ children: /* @__PURE__ */ jsx23(
2290
+ "path",
2291
+ {
2292
+ d: "M2.625 4.8125L7 9.1875L11.375 4.8125",
2293
+ stroke: "currentColor",
2294
+ strokeWidth: "1.5",
2295
+ strokeLinecap: "round",
2296
+ strokeLinejoin: "round"
2297
+ }
2298
+ )
2299
+ }
2300
+ );
2301
+ var ArrowRightIcon = () => /* @__PURE__ */ jsx23("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2302
+ "path",
2303
+ {
2304
+ d: "M2.625 7H11.375M11.375 7L7.875 3.5M11.375 7L7.875 10.5",
2305
+ stroke: "currentColor",
2306
+ strokeWidth: "1.5",
2307
+ strokeLinecap: "round",
2308
+ strokeLinejoin: "round"
2309
+ }
2310
+ ) });
2311
+ var ArrowUpRightIcon = () => /* @__PURE__ */ jsx23("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2312
+ "path",
2313
+ {
2314
+ d: "M4.5 11.5L11.5 4.5M11.5 4.5H5.5M11.5 4.5V10.5",
2315
+ stroke: "currentColor",
2316
+ strokeWidth: "1.5",
2317
+ strokeLinecap: "round",
2318
+ strokeLinejoin: "round"
2319
+ }
2320
+ ) });
2321
+ var BarsIcon = () => /* @__PURE__ */ jsx23("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2322
+ "path",
2323
+ {
2324
+ d: "M2.5 5H17.5M2.5 10H17.5M2.5 15H17.5",
2325
+ stroke: "currentColor",
2326
+ strokeWidth: "1.75",
2327
+ strokeLinecap: "round"
2328
+ }
2329
+ ) });
2330
+ var XMarkIcon2 = () => /* @__PURE__ */ jsx23("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2331
+ "path",
2332
+ {
2333
+ d: "M15 5L5 15M5 5L15 15",
2334
+ stroke: "currentColor",
2335
+ strokeWidth: "1.75",
2336
+ strokeLinecap: "round"
2337
+ }
2338
+ ) });
2339
+ var GlobeIcon = ({ className }) => /* @__PURE__ */ jsx23("img", { src: icon_globe_default, alt: "", "aria-hidden": "true", width: "20", height: "20", className });
2340
+ var DropdownPanel = ({ item, onMouseEnter, onMouseLeave }) => {
2341
+ const { dropdown } = item;
2342
+ if (!dropdown) return null;
2343
+ return /* @__PURE__ */ jsx23(
2344
+ motion2.div,
2345
+ {
2346
+ className: "navbar__dropdown",
2347
+ variants: dropdownVariants,
2348
+ initial: "hidden",
2349
+ animate: "visible",
2350
+ exit: "hidden",
2351
+ transition: { duration: 0.18, ease: EASE_OUT_EXPO },
2352
+ onMouseEnter,
2353
+ onMouseLeave,
2354
+ children: /* @__PURE__ */ jsxs22("div", { className: "navbar__dropdown-inner", children: [
2355
+ /* @__PURE__ */ jsx23("div", { className: "navbar__dropdown-left", children: dropdown.columns.map((col) => /* @__PURE__ */ jsx23("div", { className: "navbar__dropdown-col", children: /* @__PURE__ */ jsxs22("div", { className: "navbar__dropdown-col-list", children: [
2356
+ /* @__PURE__ */ jsx23("p", { className: "navbar__dropdown-col-title", children: col.title }),
2357
+ col.items.map((link) => /* @__PURE__ */ jsxs22(
2358
+ "a",
2359
+ {
2360
+ href: link.href,
2361
+ className: "navbar__dropdown-link",
2362
+ target: link.external ? "_blank" : void 0,
2363
+ rel: link.external ? "noopener noreferrer" : void 0,
2364
+ children: [
2365
+ link.label,
2366
+ link.external ? /* @__PURE__ */ jsx23(ArrowUpRightIcon, {}) : /* @__PURE__ */ jsx23(ArrowRightIcon, {})
2367
+ ]
2368
+ },
2369
+ link.href
2370
+ ))
2371
+ ] }) }, col.title)) }),
2372
+ dropdown.feature && /* @__PURE__ */ jsx23("div", { className: "navbar__dropdown-right", children: /* @__PURE__ */ jsx23(FeatureCard, { feature: dropdown.feature }) })
2373
+ ] })
2374
+ }
2375
+ );
2376
+ };
2377
+ var FeatureCard = ({ feature, mobile }) => /* @__PURE__ */ jsxs22(
2378
+ "div",
2379
+ {
2380
+ className: mobile ? "navbar__drawer-feature" : "navbar__dropdown-feature",
2381
+ style: feature.backgroundImageUrl ? { backgroundImage: `url(${feature.backgroundImageUrl})` } : void 0,
2382
+ children: [
2383
+ feature.backgroundImageUrl && /* @__PURE__ */ jsx23(
2384
+ "img",
2385
+ {
2386
+ src: feature.backgroundImageUrl,
2387
+ alt: "",
2388
+ className: mobile ? "navbar__drawer-feature-img" : "navbar__dropdown-feature-img",
2389
+ "aria-hidden": "true"
2390
+ }
2391
+ ),
2392
+ /* @__PURE__ */ jsx23("div", { className: mobile ? "navbar__drawer-feature-overlay" : "navbar__dropdown-feature-overlay", "aria-hidden": "true" }),
2393
+ /* @__PURE__ */ jsxs22("div", { className: mobile ? "navbar__drawer-feature-content" : "navbar__dropdown-feature-content", children: [
2394
+ /* @__PURE__ */ jsxs22("div", { children: [
2395
+ /* @__PURE__ */ jsx23("p", { className: mobile ? "navbar__drawer-feature-title" : "navbar__dropdown-feature-title", children: feature.title }),
2396
+ /* @__PURE__ */ jsx23("p", { className: mobile ? "navbar__drawer-feature-desc" : "navbar__dropdown-feature-desc", children: feature.description })
2397
+ ] }),
2398
+ /* @__PURE__ */ jsxs22(
2399
+ "a",
2400
+ {
2401
+ href: feature.ctaHref,
2402
+ className: mobile ? "navbar__drawer-feature-cta" : "navbar__dropdown-feature-cta",
2403
+ children: [
2404
+ feature.ctaLabel,
2405
+ /* @__PURE__ */ jsx23(ArrowRightIcon, {})
2406
+ ]
2407
+ }
2408
+ )
2409
+ ] })
2410
+ ]
2411
+ }
2412
+ );
2413
+ var DrawerAccordion = ({ item, isOpen, onToggle }) => {
2414
+ const { dropdown } = item;
2415
+ return /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-item", children: [
2416
+ /* @__PURE__ */ jsxs22(
2417
+ "button",
2418
+ {
2419
+ className: `navbar__drawer-trigger ${isOpen ? "navbar__drawer-trigger--open" : ""}`,
2420
+ onClick: onToggle,
2421
+ "aria-expanded": isOpen,
2422
+ children: [
2423
+ item.label,
2424
+ /* @__PURE__ */ jsx23(ChevronDownIcon3, { className: "navbar__drawer-trigger__chevron" })
2425
+ ]
2426
+ }
2427
+ ),
2428
+ /* @__PURE__ */ jsx23(AnimatePresence, { initial: false, children: isOpen && dropdown && /* @__PURE__ */ jsx23(
2429
+ motion2.div,
2430
+ {
2431
+ className: "navbar__drawer-panel",
2432
+ variants: accordionVariants,
2433
+ initial: "hidden",
2434
+ animate: "visible",
2435
+ exit: "hidden",
2436
+ transition: { duration: 0.22, ease: EASE_OUT_EXPO },
2437
+ children: /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-panel-inner", children: [
2438
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-panel-cols", children: [0, 1].map((colIdx) => {
2439
+ const colItems = dropdown.columns.filter((_, i) => i % 2 === colIdx);
2440
+ if (colItems.length === 0) return null;
2441
+ return /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-panel-col", children: colItems.map((col) => /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-col-section", children: [
2442
+ /* @__PURE__ */ jsx23("p", { className: "navbar__drawer-col-title", children: col.title }),
2443
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-col-links", children: col.items.map((link) => /* @__PURE__ */ jsx23(
2444
+ "a",
2445
+ {
2446
+ href: link.href,
2447
+ className: "navbar__drawer-link",
2448
+ target: link.external ? "_blank" : void 0,
2449
+ rel: link.external ? "noopener noreferrer" : void 0,
2450
+ children: link.label
2451
+ },
2452
+ link.href
2453
+ )) })
2454
+ ] }, col.title)) }, colIdx);
2455
+ }) }),
2456
+ dropdown.feature && /* @__PURE__ */ jsx23(FeatureCard, { feature: dropdown.feature, mobile: true })
2457
+ ] })
2458
+ }
2459
+ ) })
2460
+ ] });
2461
+ };
2462
+ var Navbar = ({
2463
+ theme = "dark",
2464
+ logoSrc,
2465
+ logoSrcDark,
2466
+ logoHref = "/",
2467
+ navItems = [],
2468
+ loginLabel = "Log in",
2469
+ loginHref,
2470
+ ctaLabel = "Open account",
2471
+ ctaHref,
2472
+ languageLabel,
2473
+ onLanguageClick,
2474
+ className,
2475
+ ...props
2476
+ }) => {
2477
+ const [openDropdown, setOpenDropdown] = useState8(null);
2478
+ const [mobileOpen, setMobileOpen] = useState8(false);
2479
+ const [mobileExpanded, setMobileExpanded] = useState8(null);
2480
+ const [scrolled, setScrolled] = useState8(false);
2481
+ const hoverTimeoutRef = useRef7(null);
2482
+ const pillAreaRef = useRef7(null);
2483
+ const resolvedLogo = theme === "light" ? logoSrcDark ?? logoSrc : logoSrc;
2484
+ useEffect6(() => {
2485
+ const onScroll = () => setScrolled(window.scrollY > 0);
2486
+ window.addEventListener("scroll", onScroll, { passive: true });
2487
+ return () => window.removeEventListener("scroll", onScroll);
2488
+ }, []);
2489
+ useEffect6(() => {
2490
+ const onKey = (e) => {
2491
+ if (e.key === "Escape") {
2492
+ setOpenDropdown(null);
2493
+ setMobileOpen(false);
2494
+ }
2495
+ };
2496
+ document.addEventListener("keydown", onKey);
2497
+ return () => document.removeEventListener("keydown", onKey);
2498
+ }, []);
2499
+ useEffect6(() => {
2500
+ document.body.style.overflow = mobileOpen ? "hidden" : "";
2501
+ return () => {
2502
+ document.body.style.overflow = "";
2503
+ };
2504
+ }, [mobileOpen]);
2505
+ useEffect6(() => {
2506
+ if (!openDropdown) return;
2507
+ const onPointerDown = (e) => {
2508
+ if (pillAreaRef.current && !pillAreaRef.current.contains(e.target)) {
2509
+ setOpenDropdown(null);
2510
+ }
2511
+ };
2512
+ document.addEventListener("pointerdown", onPointerDown);
2513
+ return () => document.removeEventListener("pointerdown", onPointerDown);
2514
+ }, [openDropdown]);
2515
+ const clearHoverTimeout = useCallback2(() => {
2516
+ if (hoverTimeoutRef.current) {
2517
+ clearTimeout(hoverTimeoutRef.current);
2518
+ hoverTimeoutRef.current = null;
2519
+ }
2520
+ }, []);
2521
+ const handleNavEnter = useCallback2((label) => {
2522
+ clearHoverTimeout();
2523
+ setOpenDropdown(label);
2524
+ }, [clearHoverTimeout]);
2525
+ const handleNavLeave = useCallback2(() => {
2526
+ clearHoverTimeout();
2527
+ hoverTimeoutRef.current = setTimeout(() => setOpenDropdown(null), 120);
2528
+ }, [clearHoverTimeout]);
2529
+ const activeDropdownItem = navItems.find((item) => item.label === openDropdown);
2530
+ return /* @__PURE__ */ jsxs22(
2531
+ "nav",
2532
+ {
2533
+ className: ["navbar", `navbar--${theme}`, scrolled && "navbar--scrolled", mobileOpen && "navbar--menu-open", className].filter(Boolean).join(" "),
2534
+ ...props,
2535
+ children: [
2536
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__bar", children: [
2537
+ /* @__PURE__ */ jsx23("a", { href: logoHref, className: "navbar__logo", "aria-label": "Home", children: /* @__PURE__ */ jsx23("img", { src: resolvedLogo, alt: "Logo" }) }),
2538
+ /* @__PURE__ */ jsx23("div", { className: "navbar__nav-center", ref: pillAreaRef, children: /* @__PURE__ */ jsxs22("div", { className: "navbar__pill", children: [
2539
+ /* @__PURE__ */ jsx23("a", { href: logoHref, className: "navbar__pill-logo", "aria-label": "Home", children: /* @__PURE__ */ jsx23("img", { src: logoSrcDark ?? logoSrc, alt: "Logo" }) }),
2540
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__nav-group", children: [
2541
+ navItems.map((item) => {
2542
+ if (item.external) {
2543
+ return /* @__PURE__ */ jsxs22(
2544
+ "a",
2545
+ {
2546
+ href: item.href,
2547
+ className: "navbar__nav-item",
2548
+ target: "_blank",
2549
+ rel: "noopener noreferrer",
2550
+ children: [
2551
+ item.label,
2552
+ /* @__PURE__ */ jsx23(ArrowUpRightIcon, {})
2553
+ ]
2554
+ },
2555
+ item.label
2556
+ );
2557
+ }
2558
+ if (item.dropdown) {
2559
+ return /* @__PURE__ */ jsxs22(
2560
+ "button",
2561
+ {
2562
+ className: [
2563
+ "navbar__nav-item",
2564
+ openDropdown === item.label ? "navbar__nav-item--open" : ""
2565
+ ].filter(Boolean).join(" "),
2566
+ onMouseEnter: () => handleNavEnter(item.label),
2567
+ onMouseLeave: handleNavLeave,
2568
+ "aria-expanded": openDropdown === item.label,
2569
+ "aria-haspopup": "true",
2570
+ children: [
2571
+ item.label,
2572
+ /* @__PURE__ */ jsx23(ChevronDownIcon3, { className: "navbar__nav-item__chevron" })
2573
+ ]
2574
+ },
2575
+ item.label
2576
+ );
2577
+ }
2578
+ return /* @__PURE__ */ jsx23("a", { href: item.href, className: "navbar__nav-item", children: item.label }, item.label);
2579
+ }),
2580
+ languageLabel && /* @__PURE__ */ jsxs22("button", { className: "navbar__nav-item navbar__lang-btn", onClick: onLanguageClick, children: [
2581
+ /* @__PURE__ */ jsx23(GlobeIcon, { className: "navbar__lang-globe" }),
2582
+ languageLabel
2583
+ ] })
2584
+ ] }),
2585
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__pill-actions", children: [
2586
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "black", variant: "secondary", label: loginLabel }) }),
2587
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2588
+ ] })
2589
+ ] }) }),
2590
+ /* @__PURE__ */ jsx23(AnimatePresence, { children: openDropdown && activeDropdownItem?.dropdown && /* @__PURE__ */ jsx23(
2591
+ DropdownPanel,
2592
+ {
2593
+ item: activeDropdownItem,
2594
+ onMouseEnter: clearHoverTimeout,
2595
+ onMouseLeave: handleNavLeave
2596
+ },
2597
+ openDropdown
2598
+ ) }),
2599
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__actions", children: [
2600
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, className: "navbar__actions-login", children: /* @__PURE__ */ jsx23(
2601
+ Button,
2602
+ {
2603
+ colorScheme: theme === "dark" ? "white" : "black",
2604
+ variant: "secondary",
2605
+ label: loginLabel
2606
+ }
2607
+ ) }),
2608
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2609
+ ] }),
2610
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__mobile-actions", children: [
2611
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, children: /* @__PURE__ */ jsx23(
2612
+ Button,
2613
+ {
2614
+ colorScheme: scrolled || theme === "light" ? "black" : "white",
2615
+ variant: "secondary",
2616
+ label: loginLabel
2617
+ }
2618
+ ) }),
2619
+ /* @__PURE__ */ jsx23(
2620
+ "button",
2621
+ {
2622
+ className: "navbar__mobile-trigger",
2623
+ onClick: () => setMobileOpen((o) => !o),
2624
+ "aria-label": mobileOpen ? "Close navigation menu" : "Open navigation menu",
2625
+ children: mobileOpen ? /* @__PURE__ */ jsx23(XMarkIcon2, {}) : /* @__PURE__ */ jsx23(BarsIcon, {})
2626
+ }
2627
+ )
2628
+ ] })
2629
+ ] }),
2630
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-clip", children: /* @__PURE__ */ jsx23(AnimatePresence, { children: mobileOpen && /* @__PURE__ */ jsxs22(
2631
+ motion2.div,
2632
+ {
2633
+ className: "navbar__drawer",
2634
+ variants: drawerVariants,
2635
+ initial: "hidden",
2636
+ animate: "visible",
2637
+ exit: "hidden",
2638
+ transition: { duration: 0.3, ease: EASE_OUT_EXPO },
2639
+ "aria-modal": "true",
2640
+ role: "dialog",
2641
+ "aria-label": "Navigation menu",
2642
+ children: [
2643
+ /* @__PURE__ */ jsxs22("nav", { className: "navbar__drawer-nav", children: [
2644
+ navItems.map((item) => {
2645
+ if (item.dropdown) {
2646
+ return /* @__PURE__ */ jsx23(
2647
+ DrawerAccordion,
2648
+ {
2649
+ item,
2650
+ isOpen: mobileExpanded === item.label,
2651
+ onToggle: () => setMobileExpanded(
2652
+ (prev) => prev === item.label ? null : item.label
2653
+ )
2654
+ },
2655
+ item.label
2656
+ );
2657
+ }
2658
+ return /* @__PURE__ */ jsxs22(
2659
+ "a",
2660
+ {
2661
+ href: item.href,
2662
+ className: "navbar__drawer-single",
2663
+ target: item.external ? "_blank" : void 0,
2664
+ rel: item.external ? "noopener noreferrer" : void 0,
2665
+ children: [
2666
+ item.label,
2667
+ item.external && /* @__PURE__ */ jsx23(ArrowUpRightIcon, {})
2668
+ ]
2669
+ },
2670
+ item.label
2671
+ );
2672
+ }),
2673
+ languageLabel && /* @__PURE__ */ jsxs22("button", { className: "navbar__drawer-lang", onClick: onLanguageClick, children: [
2674
+ /* @__PURE__ */ jsx23(GlobeIcon, { className: "navbar__lang-globe" }),
2675
+ languageLabel
2676
+ ] })
2677
+ ] }),
2678
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-footer", children: [
2679
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, style: { display: "block" }, children: /* @__PURE__ */ jsx23(
2680
+ Button,
2681
+ {
2682
+ colorScheme: "black",
2683
+ variant: "secondary",
2684
+ label: loginLabel,
2685
+ fullWidth: true
2686
+ }
2687
+ ) }),
2688
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, style: { display: "block" }, children: /* @__PURE__ */ jsx23(
2689
+ Button,
2690
+ {
2691
+ colorScheme: "coral",
2692
+ variant: "primary",
2693
+ label: ctaLabel,
2694
+ fullWidth: true
2695
+ }
2696
+ ) })
2697
+ ] })
2698
+ ]
2699
+ }
2700
+ ) }) })
2701
+ ]
2702
+ }
2703
+ );
2704
+ };
2705
+
2167
2706
  // templates/DayNightTransition/DayNightTransition.tsx
2168
- import { useRef as useRef7 } from "react";
2707
+ import { useRef as useRef8 } from "react";
2169
2708
  import {
2170
- motion as motion2,
2709
+ motion as motion3,
2171
2710
  useScroll as useScroll2,
2172
2711
  useSpring as useSpring2,
2173
2712
  useTransform as useTransform2,
2174
2713
  useMotionTemplate as useMotionTemplate2
2175
2714
  } from "framer-motion";
2176
- import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
2715
+ import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2177
2716
  var SPRING2 = { stiffness: 80, damping: 30, restDelta: 1e-3 };
2178
2717
  var FADE_START = 0.35;
2179
2718
  var FADE_END = 0.65;
@@ -2193,7 +2732,7 @@ var DayNightTransition = ({
2193
2732
  className,
2194
2733
  ...props
2195
2734
  }) => {
2196
- const wrapperRef = useRef7(null);
2735
+ const wrapperRef = useRef8(null);
2197
2736
  const { scrollYProgress } = useScroll2({
2198
2737
  target: wrapperRef,
2199
2738
  offset: ["start end", "end start"]
@@ -2205,14 +2744,14 @@ var DayNightTransition = ({
2205
2744
  const dayOpacity = useTransform2(smooth, [WORD_START, WORD_END], [1, 0]);
2206
2745
  const nightOpacity2 = useTransform2(smooth, [WORD_START, WORD_END], [0, 1]);
2207
2746
  const hasDescription = Boolean(dayDescription || nightDescription);
2208
- return /* @__PURE__ */ jsx23(
2747
+ return /* @__PURE__ */ jsx24(
2209
2748
  "div",
2210
2749
  {
2211
2750
  ref: wrapperRef,
2212
2751
  className: ["dnt", className].filter(Boolean).join(" "),
2213
2752
  ...props,
2214
- children: /* @__PURE__ */ jsxs22("div", { className: "dnt__sticky", children: [
2215
- /* @__PURE__ */ jsx23(
2753
+ children: /* @__PURE__ */ jsxs23("div", { className: "dnt__sticky", children: [
2754
+ /* @__PURE__ */ jsx24(
2216
2755
  "img",
2217
2756
  {
2218
2757
  className: "dnt__bg dnt__bg--day",
@@ -2222,8 +2761,8 @@ var DayNightTransition = ({
2222
2761
  draggable: false
2223
2762
  }
2224
2763
  ),
2225
- /* @__PURE__ */ jsx23(
2226
- motion2.img,
2764
+ /* @__PURE__ */ jsx24(
2765
+ motion3.img,
2227
2766
  {
2228
2767
  className: "dnt__bg dnt__bg--night",
2229
2768
  src: nightImageUrl,
@@ -2233,23 +2772,23 @@ var DayNightTransition = ({
2233
2772
  style: { opacity: nightOpacity }
2234
2773
  }
2235
2774
  ),
2236
- /* @__PURE__ */ jsx23("div", { className: "dnt__content", children: /* @__PURE__ */ jsxs22(
2237
- motion2.div,
2775
+ /* @__PURE__ */ jsx24("div", { className: "dnt__content", children: /* @__PURE__ */ jsxs23(
2776
+ motion3.div,
2238
2777
  {
2239
2778
  className: "dnt__text-wrap",
2240
2779
  style: { color: textColor },
2241
2780
  children: [
2242
- /* @__PURE__ */ jsxs22("div", { className: "dnt__crossfade-wrap", children: [
2243
- /* @__PURE__ */ jsx23(
2244
- motion2.h2,
2781
+ /* @__PURE__ */ jsxs23("div", { className: "dnt__crossfade-wrap", children: [
2782
+ /* @__PURE__ */ jsx24(
2783
+ motion3.h2,
2245
2784
  {
2246
2785
  className: "dnt__headline",
2247
2786
  style: { opacity: dayOpacity },
2248
2787
  children: dayHeadline
2249
2788
  }
2250
2789
  ),
2251
- /* @__PURE__ */ jsx23(
2252
- motion2.h2,
2790
+ /* @__PURE__ */ jsx24(
2791
+ motion3.h2,
2253
2792
  {
2254
2793
  className: "dnt__headline",
2255
2794
  "aria-hidden": "true",
@@ -2258,17 +2797,17 @@ var DayNightTransition = ({
2258
2797
  }
2259
2798
  )
2260
2799
  ] }),
2261
- hasDescription && /* @__PURE__ */ jsxs22("div", { className: "dnt__crossfade-wrap", children: [
2262
- /* @__PURE__ */ jsx23(
2263
- motion2.p,
2800
+ hasDescription && /* @__PURE__ */ jsxs23("div", { className: "dnt__crossfade-wrap", children: [
2801
+ /* @__PURE__ */ jsx24(
2802
+ motion3.p,
2264
2803
  {
2265
2804
  className: "dnt__description",
2266
2805
  style: { opacity: dayOpacity },
2267
2806
  children: dayDescription ?? ""
2268
2807
  }
2269
2808
  ),
2270
- /* @__PURE__ */ jsx23(
2271
- motion2.p,
2809
+ /* @__PURE__ */ jsx24(
2810
+ motion3.p,
2272
2811
  {
2273
2812
  className: "dnt__description",
2274
2813
  "aria-hidden": "true",
@@ -2277,7 +2816,7 @@ var DayNightTransition = ({
2277
2816
  }
2278
2817
  )
2279
2818
  ] }),
2280
- /* @__PURE__ */ jsx23("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
2819
+ /* @__PURE__ */ jsx24("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
2281
2820
  ]
2282
2821
  }
2283
2822
  ) })
@@ -2287,15 +2826,15 @@ var DayNightTransition = ({
2287
2826
  };
2288
2827
 
2289
2828
  // templates/PaymentMethods/PaymentMethods.tsx
2290
- import { useRef as useRef8 } from "react";
2829
+ import { useRef as useRef9 } from "react";
2291
2830
  import {
2292
- motion as motion3,
2831
+ motion as motion4,
2293
2832
  useScroll as useScroll3,
2294
2833
  useVelocity,
2295
2834
  useAnimationFrame,
2296
2835
  useMotionValue
2297
2836
  } from "framer-motion";
2298
- import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2837
+ import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
2299
2838
  function modWrap(min, max, v) {
2300
2839
  const range = max - min;
2301
2840
  return ((v - min) % range + range) % range + min;
@@ -2352,8 +2891,8 @@ var PaymentMethods = ({
2352
2891
  const scrollVelocity = useVelocity(scrollY);
2353
2892
  const col1Y = useMotionValue(0);
2354
2893
  const col2Y = useMotionValue(0);
2355
- const col1Ref = useRef8(null);
2356
- const col2Ref = useRef8(null);
2894
+ const col1Ref = useRef9(null);
2895
+ const col2Ref = useRef9(null);
2357
2896
  useAnimationFrame((_, delta) => {
2358
2897
  const raw = scrollVelocity.get();
2359
2898
  if (Math.abs(raw) < DEADZONE) return;
@@ -2366,21 +2905,21 @@ var PaymentMethods = ({
2366
2905
  });
2367
2906
  const track1 = [...col1Logos, ...col1Logos];
2368
2907
  const track2 = [...col2Logos, ...col2Logos];
2369
- return /* @__PURE__ */ jsx24(
2908
+ return /* @__PURE__ */ jsx25(
2370
2909
  "section",
2371
2910
  {
2372
2911
  className: ["pm", className].filter(Boolean).join(" "),
2373
2912
  ...props,
2374
- children: /* @__PURE__ */ jsxs23("div", { className: "pm__inner", children: [
2375
- /* @__PURE__ */ jsx24("div", { className: "pm__media", children: /* @__PURE__ */ jsxs23("div", { className: "pm__carousel", children: [
2376
- /* @__PURE__ */ jsx24("div", { className: "pm__fade pm__fade--top", "aria-hidden": "true" }),
2377
- /* @__PURE__ */ jsx24(
2378
- motion3.div,
2913
+ children: /* @__PURE__ */ jsxs24("div", { className: "pm__inner", children: [
2914
+ /* @__PURE__ */ jsx25("div", { className: "pm__media", children: /* @__PURE__ */ jsxs24("div", { className: "pm__carousel", children: [
2915
+ /* @__PURE__ */ jsx25("div", { className: "pm__fade pm__fade--top", "aria-hidden": "true" }),
2916
+ /* @__PURE__ */ jsx25(
2917
+ motion4.div,
2379
2918
  {
2380
2919
  ref: col1Ref,
2381
2920
  className: "pm__col",
2382
2921
  style: { y: col1Y },
2383
- children: track1.map((logo, i) => /* @__PURE__ */ jsx24("div", { className: "pm__card", children: /* @__PURE__ */ jsx24("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx24(
2922
+ children: track1.map((logo, i) => /* @__PURE__ */ jsx25("div", { className: "pm__card", children: /* @__PURE__ */ jsx25("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx25(
2384
2923
  "img",
2385
2924
  {
2386
2925
  src: logo.url,
@@ -2391,13 +2930,13 @@ var PaymentMethods = ({
2391
2930
  ) }) }, `c1-${i}`))
2392
2931
  }
2393
2932
  ),
2394
- /* @__PURE__ */ jsx24(
2395
- motion3.div,
2933
+ /* @__PURE__ */ jsx25(
2934
+ motion4.div,
2396
2935
  {
2397
2936
  ref: col2Ref,
2398
2937
  className: "pm__col",
2399
2938
  style: { y: col2Y },
2400
- children: track2.map((logo, i) => /* @__PURE__ */ jsx24("div", { className: "pm__card", children: /* @__PURE__ */ jsx24("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx24(
2939
+ children: track2.map((logo, i) => /* @__PURE__ */ jsx25("div", { className: "pm__card", children: /* @__PURE__ */ jsx25("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx25(
2401
2940
  "img",
2402
2941
  {
2403
2942
  src: logo.url,
@@ -2408,17 +2947,17 @@ var PaymentMethods = ({
2408
2947
  ) }) }, `c2-${i}`))
2409
2948
  }
2410
2949
  ),
2411
- /* @__PURE__ */ jsx24("div", { className: "pm__fade pm__fade--bottom", "aria-hidden": "true" })
2950
+ /* @__PURE__ */ jsx25("div", { className: "pm__fade pm__fade--bottom", "aria-hidden": "true" })
2412
2951
  ] }) }),
2413
- /* @__PURE__ */ jsxs23("div", { className: "pm__content", children: [
2414
- /* @__PURE__ */ jsx24("h2", { className: "pm__headline", children: headline }),
2415
- /* @__PURE__ */ jsxs23("div", { className: "pm__text-group", children: [
2416
- /* @__PURE__ */ jsx24("p", { className: "pm__body", children: body }),
2417
- /* @__PURE__ */ jsx24("p", { className: "pm__disclaimer", children: disclaimer })
2952
+ /* @__PURE__ */ jsxs24("div", { className: "pm__content", children: [
2953
+ /* @__PURE__ */ jsx25("h2", { className: "pm__headline", children: headline }),
2954
+ /* @__PURE__ */ jsxs24("div", { className: "pm__text-group", children: [
2955
+ /* @__PURE__ */ jsx25("p", { className: "pm__body", children: body }),
2956
+ /* @__PURE__ */ jsx25("p", { className: "pm__disclaimer", children: disclaimer })
2418
2957
  ] }),
2419
- /* @__PURE__ */ jsxs23("a", { href: ctaHref, className: "pm__link", children: [
2958
+ /* @__PURE__ */ jsxs24("a", { href: ctaHref, className: "pm__link", children: [
2420
2959
  ctaLabel,
2421
- /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", children: "\u2192" })
2960
+ /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", children: "\u2192" })
2422
2961
  ] })
2423
2962
  ] })
2424
2963
  ] })
@@ -2442,6 +2981,7 @@ export {
2442
2981
  Footer,
2443
2982
  Hero,
2444
2983
  Link,
2984
+ Navbar,
2445
2985
  Pagination,
2446
2986
  PaymentMethods,
2447
2987
  SCROLLYTELLING_DATA,