Barbier-Website für Amin B. Ahmadi (Kaiserslautern)

One-Pager mit Vite, React, Tailwind und Motion: WebGL-Seidenhintergrund,
Chrom-Wortmarke, Scroll-Laufband, Preisliste mit Direktbuchung pro Leistung
(Setmore-Deep-Links), Team-Raster mit Farb-Spotlight, Öffnungszeiten mit
Live-Status sowie Impressum und Datenschutz. Logo ist ein Platzhalter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KBHsCnWNXAB2Le3gAEsivF
This commit is contained in:
Claude committed 2026-09-29 12:03:55 +00:00
commit 61a40437d2
51 files changed
+4278

No files matched your search

+53
View File
@@ -0,0 +1,53 @@
import type { SVGProps } from 'react'
type IconProps = SVGProps<SVGSVGElement>
const base = {
width: 24,
height: 24,
viewBox: '0 0 24 24',
fill: 'none',
stroke: 'currentColor',
strokeWidth: 1.6,
strokeLinecap: 'round',
strokeLinejoin: 'round',
'aria-hidden': true,
} as const
export const ArrowUpRight = (p: IconProps) => (
<svg {...base} {...p}>
<path d="M7 17 17 7M8 7h9v9" />
</svg>
)
export const ArrowDown = (p: IconProps) => (
<svg {...base} {...p}>
<path d="M12 5v14M6 13l6 6 6-6" />
</svg>
)
export const Phone = (p: IconProps) => (
<svg {...base} {...p}>
<path d="M5 4h3.5l1.8 4.5-2.3 1.4a11 11 0 0 0 6.1 6.1l1.4-2.3L20 15.5V19a1.5 1.5 0 0 1-1.6 1.5A16.5 16.5 0 0 1 3.5 5.6 1.5 1.5 0 0 1 5 4Z" />
</svg>
)
export const Pin = (p: IconProps) => (
<svg {...base} {...p}>
<path d="M12 21s-6.5-5.6-6.5-11a6.5 6.5 0 0 1 13 0c0 5.4-6.5 11-6.5 11Z" />
<circle cx="12" cy="10" r="2.3" />
</svg>
)
export const Mail = (p: IconProps) => (
<svg {...base} {...p}>
<rect x="3.5" y="5.5" width="17" height="13" rx="2" />
<path d="m4 7 8 6 8-6" />
</svg>
)
export const Facebook = (p: IconProps) => (
<svg {...base} {...p}>
<path d="M14.5 8.5H16V5.2a17 17 0 0 0-2.3-.2c-2.3 0-3.8 1.4-3.8 4v2.4H7.4v3.7h2.5V21h3.1v-5.9h2.5l.4-3.7H13V9.3c0-.5.3-.8 1.5-.8Z" />
</svg>
)