Skip to content

Components / Sections

Footer Label

The foot of a maker's site, made like the label sewn into what they make: a panel in a colour block with a stitched edge, the name large (a second part in the emphasis face), the link columns, a row of care symbols drawn as line icons with their words (how to wash it, that it goes in the oven, that it is mended for free) and a few small lines in the mono face. Zero JavaScript.

Live demo

Sitename studio

  • Dishwasher safe
  • Plates oven safe
  • Vases by hand
  • Chips mended

Thrown by hand

Fired in small batches

Live, from the library itself, at full size: scroll, hover, navigate away and back. The demo is never gated.

Variants · each row writes the attribute the prop writes; the section's own CSS answers

columns

Measured

JavaScript of its own

0 B

CSS 9.6 kB raw including the base tokens. Measured from a production build, and again in CI for every change that can move it.

Browser support

Baseline · widely available

every browser.

Install Pro

The demo above is never gated; the source is. With a key in components.json (see account), the registry serves it like any other item:

terminal
npx shadcn@latest add @moonarc-pro/footer-label
src/pages/index.astro
---
import FooterLabel from '@/components/moonarc/pro/FooterLabel.astro';
---
<FooterLabel
  name="Sitename"
  nameEm="studio"
  columns={[{ title: 'Explore', links: [{ href: '/pieces/', label: 'Pieces' }, { href: '/visit/', label: 'Visit' }] }]}
  care={[{ icon: 'dishwasher', label: 'Dishwasher safe' }, { icon: 'mend', label: 'Chips mended' }]}
  lines={['Thrown by hand', 'Fired in small batches']}
/>

Without a key the registry answers 401 with an upgrade message.

Props

PropTypeDefaultDescription
namestringnoneThe name, set large in the display face.
nameEmstringnoneA second part of the name, set in the emphasis face and colour after a space.
columns{ title: string; links: { href: string; label: string }[] }[]noneThe link columns, each a nav named by its title.
care{ icon: 'wash' | 'hand' | 'iron' | 'air' | 'oven' | 'dishwasher' | 'mend' | 'recycle' | 'leaf' | 'cold'; label: string }[]noneCare symbols with their words, a list named by careLabel.
linesstring[]noneSmall lines at the foot, in the mono face: where it is made, the year.
careLabelstring'Care'Accessible name of the care symbols' list.
block1 | 2 | 3 | 4 | 55The colour block the panel paints.

Theming and overrides

The section reads the theme contract (shadcn's variable names with the base tokens as fallback), so a pasted theme or one --ma-brand recolours it. Its class names are the override surface and stay stable; a named slot replaces the matching prop with your own markup.

Classes

.ma-label.ma-label__care.ma-label__column.ma-label__columns.ma-label__lines.ma-label__name.ma-label__panel.ma-label__title

Slots

none

Reduced motion

The links' underline appears without its sweep.

With ClientRouter

CSS only; nothing to rebind.

Why it is built this way

Replaces: Footers (Framer templates). See the migration table.

Product Art

Backgrounds

A product drawn flat, for a shop slot that has no photograph yet: 29 drawings in six sets (clothes, ceramics, coffee, skincare, furniture and objects, bakery).

every browserhover

A site footer: brand and blurb, link columns revealed with a stagger, a legal row, and a dot field fading up from the bottom edge.

every browserscroll

A footer for a studio or a person: a line and the email address to write to, columns of links, and the name set across the whole width at the bottom.

every browserscroll

Where to find a studio, a shop or a counter, as one card in a colour block: a drawn map with a pin, the address with a directions link, the opening hours for the week, the ways to get in touch, and above them a live line that says whether it is open now and until when (or when it opens next), with the time where the place is.

every browserload

Also: view transitions · how costs are measured · browser support · accessibility policy · five-minute setup · MCP for agents · this page as Markdown