proNew253 lines · framer-motion
Footer Big Wordmark
A footer the brand actually fills. An editorial footer dominated by a huge gradient-shimmer wordmark, with a brand blurb and abstract social icons beside a few columns of simple link groups, and a bottom legal row.
- Use it for
- The final section of a marketing site or product page, where the brand name deserves one last, unmissable moment before the legal fine print.
- Themes
- Light + dark
- License
- Commercial use
tsx
"use client";
import * as React from "react";
import { motion, useInView, useReducedMotion } from "framer-motion";
import { cn } from "@/lib/utils";
function useReducedMotionSafe() {
const prefersReduced = useReducedMotion();
const [mounted, setMounted] = React.useState(false);
React.useEffect(() => setMounted(true), []);
return mounted ? !!prefersReduced : false;
}
/**
* Editorial footer dominated by a huge animated-gradient wordmark. Above it,
* a brand blurb + abstract social icons sit beside a few columns of simple
* link groups; below it, a bottom legal row with copyright and Terms/Privacy.
*/
export interface FooterLink {
label: string;
href?: string;The rest is in Pro.
Full source, the rebuild prompt and registry install unlock with Pro or Lifetime.
Get ProHow it behaves
- →The wordmark is a bg-clip-text gradient (muted-foreground → signal → muted-foreground) whose background-position animates back and forth on an infinite loop using framer-motion, reading colour straight from CSS vars so it needs no theme JS.
- →The shimmer is gated on three things: animated prop, useInView on the wordmark's own wrapper (IntersectionObserver, pauses when scrolled offscreen), and a visibilitychange listener (pauses when the tab is hidden); it resolves to a single static gradient frame when any of those is false.
- →prefers-reduced-motion freezes the gradient at a fixed background-position instead of animating it.
- →showSocials toggles the row of abstract hand-drawn SVG icons (orbit, wave, beacon, mesh — no real platform logos).
- →Copyright year is computed once in a useEffect after mount (never during render) so there's no hydration mismatch.
- →All footer links use href="#" with onClick preventDefault so nothing jumps or reloads the page.
Accessibility
- ✓The decorative huge wordmark is `aria-hidden`; a `sr-only` span carries the brand name once for screen readers instead of being announced twice.
- ✓Social icons are real `<a>` elements with descriptive `aria-label`s (e.g. "Orbit feed"), not icon-only buttons with no name.
- ✓Link groups are plain `<ul>`/`<li>` lists under a labelled `<h3>` per column, so the footer reads as structured navigation.
- ✓Animation fully respects `prefers-reduced-motion` and never relies on colour alone to convey meaning.
- ✓Honours prefers-reduced-motion.