Automate Flows w/ Troy

Liquid Glass Wordmark Footer

Footers

About

An adjustable liquid-glass footer with refractive 3D lettering, a single cursor lens, spring-driven edges, and click or tap ripples. Includes responsive navigation, an optional signup form, host-theme support, reduced-motion behavior, and editable glass, lettering, and ripple settings.

Built with React and Tailwind. Copy the prompt and paste it into Claude Code, Cursor or Lovable: your agent adds Liquid Glass Wordmark Footer to your project and fits it to your theme.

Code

How Liquid Glass Wordmark Footer is used: the demo's code. The component's own source comes with a free account.

Usage.tsx

"use client";
import { useEffect, useRef, useState } from "react";
import { LiquidGlassWordmarkFooter } from "@/components/ui/liquid-glass-wordmark-footer";
import "@fontsource-variable/manrope";

const settings = {
  wordmark: "Flows",
  headline: "Make room for what matters.",
  useHostTheme: true,
  frost: 20,
  opacity: 0.24,
  saturation: 1.3,
  edgeLight: 0.8,
  refraction: 36,
  glassTint: "#eee9df",
  accentColor: "#9af1d6",
  letterDepth: 0.3,
  motionAmount: 1,
  rippleStrength: 1,
  motion: true,
  showSignup: true,
};
// Kevin Lieder / Unsplash, source https://unsplash.com/photos/5T_XETRABHs.
// Same licensed photograph as the approved preview, hosted with the 21st demo.
const photograph="https://cdn.21st.dev/assets/mirror/86/86a2007848781c48142219e11781c67e391ed15072e1df35b5c7146261ca1649.jpg";
const demoCSS=`
.lgwf-demo{position:relative;isolation:isolate;width:100%;min-width:0;min-height:100svh;display:flex;align-items:flex-end;overflow:hidden;font-family:'Manrope Variable',sans-serif;color-scheme:light;}
.lgwf-demo[data-dark=true]{color-scheme:dark;}
.lgwf-demo-scene{position:absolute;inset:0;z-index:-3;background-size:cover;background-position:50% 30%;}
.lgwf-demo-shade{position:absolute;inset:0;z-index:-2;pointer-events:none;}
.lgwf-demo-footer{width:min(1120px,calc(100% - 96px));margin:130px auto 48px;}
.lgwf-demo .g-wordmark-canvas{height:clamp(180px,20vw,270px);}
.lgwf-demo-credit{position:absolute;right:16px;bottom:12px;font-size:8px;color:white;text-shadow:0 1px 4px #000;}
@media(min-width:1600px){.lgwf-demo .g-wordmark-canvas{height:340px;}}
@media(min-width:801px) and (max-width:1190px){.lgwf-demo .g-footer-content{grid-template-columns:1fr;gap:12px;}.lgwf-demo .g-footer-links{grid-template-columns:repeat(3,1fr);}}
@media(max-width:600px){.lgwf-demo-footer{width:calc(100% - 48px);margin:80px 24px 32px;}.lgwf-demo .g-wordmark-canvas{height:148px;}.lgwf-demo-credit{font-size:7px;right:12px;bottom:10px;}}
@media(max-width:540px){.lgwf-demo-scene{bottom:-42%;background-position:50% 0%;}}
`;

/** Demo-only photography, branded copy and local form feedback. */
export default function LiquidGlassFooterDemo(props: Partial< typeof settings>) {
  const s={...settings,...props};
  const photo=useRef< HTMLDivElement>(null);
  const [dark,setDark]=useState(false);
  useEffect(()=>{
    const root=document.documentElement,media=matchMedia('(prefers-color-scheme:dark)');
    const update=()=>setDark(root.classList.contains('dark')||root.dataset.theme==='dark'||(!root.classList.contains('light')&&root.dataset.theme!=='light'&&media.matches));
    const observer=new MutationObserver(update);observer.observe(root,{attributes:true,attributeFilter:['class','data-theme']});media.addEventListener('change',update);update();
    return()=>{observer.disconnect();media.removeEventListener('change',update);};
  },[]);
  const shade=dark?'rgba(9,15,12,.42)':'rgba(250,244,233,.22)';
  return <div className="lgwf-demo" data-dark={dark}>
    <style>{demoCSS}</style>
    <div ref={photo} className="lgwf-demo-scene" style={{backgroundImage:`url("${photograph}")`}} aria-hidden="true"/>
    <div className="lgwf-demo-shade" style={{background:shade}} aria-hidden="true"/>
    <div className="lgwf-demo-footer"><LiquidGlassWordmarkFooter
      wordmark={s.wordmark} title={s.headline} brand="Automate Flows" brandHref="https://automateflows.io/"
      brandIcon={<img src="https://cdn.21st.dev/assets/mirror/33/3314e81c65ee88c42385123033c6796eb61d5ba4bf1412ba011feb156013144c.png" alt=""/>}
      description="Thoughtful ideas for a more connected business."
      theme={s.useHostTheme?undefined:dark?'dark':'light'}
      glass={{blur:s.frost,opacity:s.opacity,saturation:s.saturation,edge:s.edgeLight,distortion:s.refraction,tint:s.glassTint}}
      accent={s.useHostTheme?undefined:s.accentColor} depth={s.letterDepth} motionIntensity={s.motionAmount} rippleStrength={s.rippleStrength} motion={s.motion}
      refractionImage={photograph} refractionTargetRef={photo} refractionOverlay={shade}
      groups={[
        {title:'Explore',links:[{label:'Home',href:'https://automateflows.io/'},{label:'Workflows',href:'https://automateflows.io/workflows'},{label:'Pricing',href:'https://automateflows.io/pricing'}]},
        {title:'Build with us',links:[{label:'Web development',href:'https://automateflows.io/services/web-development'},{label:'Talk about a project',href:'https://automateflows.io/#contact'}]},
        {title:'Our work',links:[{label:'21st collection',href:'https://21st.dev/@automate_flows'},{label:'useKnockout',href:'https://useknockout.com'},{label:'YourPeptideIQ',href:'https://yourpeptideiq.com'}]},
      ]}
      copyright="© 2026 Automate Flows" subscriptionNote="Demo form. Nothing is sent or subscribed."
      onSubscribe={s.showSignup?async()=>{await new Promise(resolve=>setTimeout(resolve,450));}:undefined}
    /></div>
    <span className="lgwf-demo-credit">Photography by Kevin Lieder / Unsplash</span>
  </div>;
}

Dependencies

More by Automate Flows w/ Troy

View all
  • Adjustable Glass Dashboard

    Adjustable Glass Dashboard

    244
  • Glassy Coverflow Carousel

    Glassy Coverflow Carousel

    242
  • Interactive Workflow Blueprint

    Interactive Workflow Blueprint

    104
  • Dimensional Workflow Hero

    Dimensional Workflow Hero

    61
  • Spatial Orbit Gallery

    Spatial Orbit Gallery

More in Footers

View all
  • Footer 7

    Footer 7

    588
  • Footer section

    Footer section

    1.9K
  • Stacked Circular Footer

    Stacked Circular Footer

    443
  • Hills Landscape Footer with Call to Action

    Hills Landscape Footer with Call to Action

    78
  • Footer column

    Footer column

    316
  • Ruixen Footer 03

    Ruixen Footer 03

    70
  • Footer

    Footer

    453
  • Footer

    Footer

    559