"use client"; import { memo } from "react"; import { useTranslation } from "../../contexts/MessagesContext"; import Link from "next/link"; import Logo from "../asset/Logo"; import Divider from "../utility/Divider"; import { getAssetPath, ASSETS } from "../../../lib/assetUtils"; /** * Figma: "Navigation / Footer" (18411-62917). * Tiers: smallest viewports (below `md`), `md` through `lg`, `lg` and up. * Matches `--breakpoint-md: 640px`, `--breakpoint-lg: 1024px` in `app/tailwind.css`. */ const Footer = memo(() => { const t = useTranslation("footer"); const tChrome = useTranslation("controlsChrome"); const linkFocusClass = "hover:opacity-80 active:opacity-60 focus:opacity-80 focus:outline-none focus:ring-2 focus:ring-[var(--color-content-default-primary)] focus:ring-offset-2 focus:ring-offset-[var(--color-surface-default-primary)] transition-opacity"; const bodyTextClass = "text-[var(--color-content-default-primary)] font-inter text-base font-medium leading-5 tracking-[0%] lg:text-2xl lg:font-normal lg:leading-7"; /** Figma 18411:62925 (1024+): org name is one line, `w-full whitespace-nowrap`. */ const orgNameClass = `${bodyTextClass} lg:whitespace-nowrap`; const primaryLinkClass = `text-[var(--color-content-default-primary)] font-inter text-base font-medium leading-5 tracking-[0%] ${linkFocusClass} p-2 -m-2 cursor-pointer lg:text-2xl lg:font-normal lg:leading-7`; /** Figma 18411:62944: 40px gaps, w-[396px] link block; `p-2` on links overruns 396px—tighten x at `md+` row. */ const legalLinkClass = `text-[var(--color-content-default-secondary)] font-inter text-sm font-normal leading-5 tracking-[0%] ${linkFocusClass} p-2 -m-2 cursor-pointer underline decoration-solid [text-decoration-skip-ink:none] md:px-0 md:py-1 md:mx-0 md:text-xs md:leading-4 md:whitespace-nowrap md:no-underline md:text-[var(--color-content-default-primary)] lg:text-sm lg:leading-5 lg:text-[var(--color-content-default-primary)]`; // Schema markup for organization information const schemaData = { "@context": "https://schema.org", "@type": "Organization", name: t("organization.name"), email: t("organization.email"), url: t("organization.url"), sameAs: [t("social.bluesky.url"), t("social.gitlab.url")], }; return ( <> > ); }); Footer.displayName = "Footer"; export default Footer;