Kedhareswer Naidu

Guilloche Enamel Hero Background

Heroes 4

About

Guilloche enamel hero background: an engine-turned silver plate under translucent fired enamel, the haute-horlogerie dial finish, cut and lit per pixel in a WebGL shader. The pointer is the lamp, so glints sweep across the rose-engine grooves as you move; on load the enamel fires across bare silver. Forest, cobalt, salmon and argenté finishes or any colours. The demo is a full luxury watchmaker hero with live enamel swatches. React only, no assets.

Built with React and Tailwind. Copy the prompt and paste it into Claude Code, Cursor or Lovable: your agent adds Guilloche Enamel Hero Background to your project and fits it to your theme.

Code

How Guilloche Enamel Hero Background is used: the demo's code. The component's own source comes with a free account.

Usage.tsx

"use client"

import * as React from "react"
import GuillocheEnamel, { type GuillochePreset } from "@/components/ui/guilloche-enamel"

// A watchmaker's hero: the enamelled plate is the dial being sold, and the
// swatches change its enamel live.
const ENAMELS = [
  { key: "forest", label: "Forest", swatch: "#2f6b4c" },
  { key: "cobalt", label: "Cobalt", swatch: "#2d4fb0" },
  { key: "salmon", label: "Salmon", swatch: "#e39a80" },
  { key: "argent", label: "Argenté", swatch: "#c9ccd1" },
] as { key: GuillochePreset; label: string; swatch: string }[]

export default function Demo() {
  const [enamel, setEnamel] = React.useState("forest" as GuillochePreset)
  const current = ENAMELS.find((e) => e.key === enamel) ?? ENAMELS[0]

  return (
    <div className="w-full">
      <GuillocheEnamel preset={enamel}>
        <div className="pointer-events-none relative flex h-full w-full flex-col bg-gradient-to-t from-black/80 via-black/25 to-black/30 text-white sm:bg-gradient-to-r sm:from-black/70 sm:via-black/25 sm:to-transparent">
          <header className="pointer-events-auto flex items-center justify-between px-5 pt-5 sm:px-[6vw] sm:pt-7">
            <a href="#" className="flex items-baseline gap-2 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white">
              <span className="text-[15px] font-semibold tracking-[0.32em]">HALDEN</span>
              <span className="text-[11px] tracking-[0.18em] text-white/55 uppercase">Genève</span>
            </a>
            <nav aria-label="Main" className="hidden items-center gap-8 text-[14px] text-white/75 md:flex">
              {["Collections", "Atelier", "Enamels", "Boutiques"].map((l) => (
                <a key={l} href="#" className="transition-colors duration-150 hover:text-white focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white">
                  {l}
                </a>
              ))}
            </nav>
            <a
              href="#"
              className="inline-flex min-h-10 items-center rounded-full border border-white/35 px-4 text-[13px] font-medium transition-colors duration-150 hover:bg-white/10 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white"
            >
              Book a viewing
            </a>
          </header>

          <div className="flex flex-1 items-end px-5 pb-8 sm:items-center sm:px-[6vw] sm:pb-0">
            <div className="pointer-events-auto max-w-[30rem]">
              <p className="text-[12px] font-medium tracking-[0.16em] text-white/65 uppercase">Ref. 3170 · Grand-feu flinqué</p>
              <h1 className="mt-4 text-[clamp(2.3rem,4.6vw,4rem)] leading-[1.02] font-semibold tracking-[-0.03em] text-balance">
                Cut by hand. Fired eighteen times.
              </h1>
              <p className="mt-5 max-w-[24rem] text-[16px] leading-relaxed text-white/75 sm:text-[17px]">
                Every dial is engine-turned on a 1912 rose engine, then fired under translucent enamel until the guilloché glows through. Move your cursor to turn it in the light.
              </p>

              <div className="mt-7">
                <p id="enamel-label" className="text-[12px] tracking-[0.12em] text-white/60 uppercase">
                  Enamel · <span className="text-white">{current.label}</span>
                </p>
                <div role="radiogroup" aria-labelledby="enamel-label" className="mt-3 flex gap-2.5">
                  {ENAMELS.map((e) => (
                    <button
                      key={e.key}
                      type="button"
                      role="radio"
                      aria-checked={enamel === e.key}
                      aria-label={e.label}
                      onClick={() => setEnamel(e.key)}
                      className={
                        "size-9 rounded-full border transition-transform duration-150 ease-out hover:scale-105 active:scale-95 motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white " +
                        (enamel === e.key ? "border-white ring-2 ring-white/40" : "border-white/30")
                      }
                      style={{ background: e.swatch }}
                    />
                  ))}
                </div>
              </div>

              <div className="mt-8 flex flex-wrap items-center gap-x-6 gap-y-3">
                <a
                  href="#"
                  className="inline-flex min-h-11 items-center rounded-full bg-white px-6 text-[15px] font-semibold text-neutral-950 transition-transform duration-150 ease-out hover:-translate-y-px active:scale-[0.97] motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white"
                >
                  Reserve the 3170
                </a>
                <a href="#" className="text-[15px] text-white/80 underline-offset-4 transition-colors duration-150 hover:text-white hover:underline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white">
                  Watch a dial being made →
                </a>
              </div>
            </div>
          </div>

          <dl className="pointer-events-auto hidden grid-cols-4 gap-8 border-t border-white/15 px-[6vw] py-5 text-[13px] sm:grid">
            {[
              ["Case", "38 mm white gold"],
              ["Movement", "Hand-wound, 72 h"],
              ["Dial", "18 layers of enamel"],
              ["Edition", "Each one numbered"],
            ].map(([k, v]) => (
              <div key={k}>
                <dt className="text-white/50">{k}</dt>
                <dd className="mt-1 text-white/90">{v}</dd>
              </div>
            ))}
          </dl>
        </div>
      </GuillocheEnamel>
    </div>
  )
}

More by Kedhareswer Naidu

View all
  • Glassmorphism Folder Cards

    Glassmorphism Folder Cards

    2.6K
  • GitHub Contribution Graph 3D Heatmap

    GitHub Contribution Graph 3D Heatmap

    1.8K
  • Morph Gallery

    Morph Gallery

    1.4K
  • Halftone Wordmark Footer

    Halftone Wordmark Footer

    1.2K
  • Hanging Polaroid Image Carousel

    Hanging Polaroid Image Carousel

    720
  • Glass Cards

    Glass Cards

    716
  • Particle Animation

    Particle Animation

    645
  • Tiger Tear Reveal

    Tiger Tear Reveal

    638

More in Heroes

View all
  • SaaS Template

    SaaS Template

    2.4K
  • Responsive Hero Banner

    Responsive Hero Banner

    2K
  • Hero

    Hero

    1.2K
  • Centered Hero with Image Fan

    Centered Hero with Image Fan

    931
  • Editorial Collage Hero

    Editorial Collage Hero

    430
  • Glass Fold

    Glass Fold

    212
  • Minimalist Hero Fashion

    Minimalist Hero Fashion

    285
  • HeroSectionWithGradient

    HeroSectionWithGradient

    336