-
- {REGIONS.map((region) => {
- const isActive = region === active;
- return (
- selectRegion(region)}
- className="flex shrink-0 items-center whitespace-nowrap font-semibold leading-[1.2] tracking-[-0.04em]"
- style={{
- fontSize: "var(--fs-body)",
- minHeight: "44px",
- padding: "8px 24px",
- borderRadius: "100px",
- cursor: "pointer",
- border: "none",
- background: isActive
- ? "linear-gradient(180deg, #151021 0%, #131E8F 100%)"
- : "transparent",
- color: isActive ? "#fff" : "#555",
- transition:
- "background 360ms cubic-bezier(0.34, 1.56, 0.64, 1), color 280ms ease-out",
- }}
- >
- {region}
-
- );
- })}
-
+ />
+ {TRACKS.map((track) => {
+ const isActive = track.id === active;
+ return (
+
setActive(track.id)}
+ className="relative z-10 flex items-center justify-center whitespace-nowrap px-3 font-semibold leading-[1.2] tracking-[-0.04em] text-[length:var(--fs-body-sm)] sm:px-4 sm:text-[length:var(--fs-body)]"
+ style={{
+ minHeight: "44px",
+ borderRadius: "100px",
+ cursor: "pointer",
+ border: "none",
+ background: "transparent",
+ color: isActive ? "#fff" : "#555",
+ transition: "color 280ms ease-out",
+ }}
+ >
+ {track.label}
+
+ );
+ })}
-
- {partners.length === 0 ? (
-
- We're actively expanding in this region. Check back soon.
+ {/* Swapping the panel changes the section height by ~1500px (4 cards vs 22). Doing
+ that in one frame, with an opacity-only fade and no exit phase, means the reader
+ sees a single layout change instead of a blank gap followed by a jump. */}
+
+ {showAlliances ? (
+
+ {ALLIANCES.map((partner) => (
+
+ ))}
) : (
- basePartners.map((p) => )
+
+ {CHANNEL.map((group) => (
+
+
+
+ {group.region}
+
+
+
+
+ {group.partners.map((partner) => (
+
+ ))}
+
+
+ ))}
+
)}
- {/* Mobile/tablet: show every partner up front — no View More toggle below lg. */}
-
- {extraPartners.map((p) => (
-
- ))}
-
- {/* Desktop (lg+): reveal the remaining partners via View More, with the spring entrance. */}
-
-
- {expanded &&
- extraPartners.map((p, i) => (
-
-
-
- ))}
-
-
-
-
- {partners.length > INITIAL_VISIBLE && (
-
- setExpanded((prev) => !prev)}
- aria-expanded={expanded}
- className="rounded-full px-6 py-3 text-[#0F123E] bg-white font-semibold hover:bg-white/90 transition-colors"
- style={{ fontSize: "var(--fs-body-sm)", minHeight: "44px" }}
- >
- {expanded ? "View Less" : "View More"}
-
-
- )}
+
);
}
-function PartnerCard({ partner }: { partner: Partner }): React.ReactElement {
+function PartnerCard({
+ partner,
+ headingLevel: NameTag,
+}: {
+ partner: Partner;
+ headingLevel: "h3" | "h4";
+}): React.ReactElement {
return (
-
+
{partner.logo.endsWith(".svg") ? (
// SVG logos render via plain
— next/image needs dangerouslyAllowSVG, and
// vectors gain nothing from the optimizer.
@@ -334,7 +333,7 @@ function PartnerCard({ partner }: { partner: Partner }): React.ReactElement {
height={36}
loading="lazy"
decoding="async"
- className="h-full w-auto object-contain object-left"
+ className="h-full w-auto max-w-full object-contain object-left"
style={partner.invertOnLight ? { filter: "brightness(0)" } : undefined}
/>
) : (
@@ -344,7 +343,7 @@ function PartnerCard({ partner }: { partner: Partner }): React.ReactElement {
width={partner.wordmark ? 36 : 160}
height={36}
sizes={partner.wordmark ? "36px" : "160px"}
- className="h-full w-auto object-contain object-left"
+ className="h-full w-auto max-w-full object-contain object-left"
style={partner.invertOnLight ? { filter: "brightness(0)" } : undefined}
/>
)}
@@ -358,12 +357,12 @@ function PartnerCard({ partner }: { partner: Partner }): React.ReactElement {
) : null}
-
{partner.name}
-
+
{partner.country}