cat-framework-core 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +169 -171
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/lib/utils.ts","../src/components/framework/Typography.tsx","../src/components/framework/Badge.tsx","../src/components/ui/button.tsx","../src/components/framework/Hero.tsx","../src/components/framework/ImageTextTeaser.tsx","../src/components/framework/ContentCard.tsx","../src/components/ui/accordion.tsx","../src/components/framework/FaqAccordion.tsx","../src/components/ui/input.tsx","../src/components/ui/textarea.tsx","../src/components/ui/label.tsx","../src/components/framework/ContactForm.tsx","../src/components/framework/Navbar.tsx","../src/components/framework/Footer.tsx","../src/components/framework/SearchBar.tsx","../src/components/framework/Breadcrumb.tsx","../src/components/framework/TariffSelect.tsx","../src/components/framework/Tabs.tsx","../src/components/framework/BrandProvider.tsx","../src/components/framework/BrandSwitcher.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport React from \"react\";\n\nconst typographyVariants = cva(\"\", {\n variants: {\n variant: {\n h1: \"font-display text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl\",\n h2: \"font-display text-3xl font-bold tracking-tight sm:text-4xl\",\n h3: \"font-display text-2xl font-semibold tracking-tight\",\n h4: \"font-display text-xl font-semibold\",\n h5: \"font-display text-lg font-semibold\",\n h6: \"font-display text-base font-semibold\",\n body: \"font-body text-base leading-relaxed\",\n \"body-sm\": \"font-body text-sm leading-relaxed\",\n \"body-lg\": \"font-body text-lg leading-relaxed\",\n caption: \"font-body text-xs text-muted-foreground\",\n overline: \"font-body text-xs font-semibold uppercase tracking-widest text-muted-foreground\",\n },\n color: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"body\",\n color: \"default\",\n },\n});\n\nconst elementMap: Record<string, keyof JSX.IntrinsicElements> = {\n h1: \"h1\", h2: \"h2\", h3: \"h3\", h4: \"h4\", h5: \"h5\", h6: \"h6\",\n body: \"p\", \"body-sm\": \"p\", \"body-lg\": \"p\",\n caption: \"span\", overline: \"span\",\n};\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLElement> {\n variant?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"body\" | \"body-sm\" | \"body-lg\" | \"caption\" | \"overline\";\n tone?: \"default\" | \"muted\" | \"primary\" | \"accent\" | \"destructive\";\n as?: keyof JSX.IntrinsicElements;\n}\n\nexport const Typography = React.forwardRef<HTMLElement, TypographyProps>(\n ({ className, variant = \"body\", tone = \"default\", as, children, ...props }, ref) => {\n const Component = (as || elementMap[variant] || \"p\") as any;\n return (\n <Component\n ref={ref}\n className={cn(typographyVariants({ variant, color: tone, className }))}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\nTypography.displayName = \"Typography\";\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport React from \"react\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full px-3 py-0.5 font-body text-xs font-medium transition-fast\",\n {\n variants: {\n variant: {\n default: \"bg-primary/10 text-primary\",\n secondary: \"bg-secondary/20 text-secondary\",\n success: \"bg-success/10 text-success\",\n warning: \"bg-warning/10 text-warning\",\n destructive: \"bg-destructive/10 text-destructive\",\n outline: \"border border-border text-foreground\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, className }))} {...props} />\n )\n);\nBadge.displayName = \"Badge\";\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl font-medium font-body transition-fast focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-muted hover:text-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-muted hover:text-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n success: \"bg-success text-success-foreground hover:bg-success/90\",\n warning: \"bg-warning text-warning-foreground hover:bg-warning/90\",\n },\n size: {\n default: \"h-10 px-4 py-2 text-sm\",\n sm: \"h-8 rounded-lg px-3 text-xs\",\n lg: \"h-12 rounded-xl px-8 text-base\",\n xl: \"h-14 rounded-xl px-10 text-lg\",\n icon: \"h-10 w-10 rounded-xl\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />;\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport { motion } from \"framer-motion\";\nimport React, { useRef, useEffect } from \"react\";\n\nexport interface HeroProps extends React.HTMLAttributes<HTMLElement> {\n headline: string;\n /** Shorter mobile headline (optional, fallback: headline) */\n headlineMobile?: string;\n subheadline?: string;\n /** Shorter mobile subheadline (optional, fallback: subheadline) */\n subheadlineMobile?: string;\n ctaLabel?: string;\n ctaHref?: string;\n secondaryCtaLabel?: string;\n secondaryCtaHref?: string;\n /** Desktop/tablet: shown as background (image or video) */\n backgroundImage?: string;\n /** Mobile: portrait background (image or video) */\n backgroundImageMobile?: string;\n /** Desktop/tablet: looping muted video background (mp4). Takes priority over backgroundImage when provided. */\n backgroundVideo?: string;\n /** Mobile: looping muted video background (mp4). Takes priority over backgroundImageMobile when provided. */\n backgroundVideoMobile?: string;\n imageAlt?: string;\n}\n\n/** Inline video component – autoplay, muted, loop, no controls */\nconst HeroVideo: React.FC<{ src: string; className?: string; poster?: string }> = ({\n src,\n className,\n poster,\n}) => {\n const ref = useRef<HTMLVideoElement>(null);\n\n useEffect(() => {\n // Ensure autoplay even if browser blocks attribute-based autoplay\n ref.current?.play().catch(() => {});\n }, [src]);\n\n return (\n <video\n ref={ref}\n src={src}\n poster={poster}\n autoPlay\n loop\n muted\n playsInline\n className={className}\n />\n );\n};\n\nexport const Hero: React.FC<HeroProps> = ({\n headline,\n headlineMobile,\n subheadline,\n subheadlineMobile,\n ctaLabel,\n ctaHref = \"#\",\n secondaryCtaLabel,\n secondaryCtaHref = \"#\",\n backgroundImage,\n backgroundImageMobile,\n backgroundVideo,\n backgroundVideoMobile,\n imageAlt = \"\",\n className,\n ...props\n}) => {\n const desktopHasVideo = !!backgroundVideo;\n const mobileHasVideo = !!(backgroundVideoMobile || backgroundVideo);\n\n return (\n <section className={cn(\"relative overflow-hidden\", className)} {...props}>\n\n {/* ═══ DESKTOP / TABLET (md+): fullscreen media, text left ═══ */}\n <div className=\"hidden md:flex relative min-h-[420px] md:min-h-[420px] lg:min-h-[600px]\">\n {/* Background media */}\n {desktopHasVideo ? (\n <HeroVideo\n src={backgroundVideo!}\n poster={backgroundImage}\n className=\"absolute inset-0 h-full w-full object-cover object-right\"\n />\n ) : backgroundImage ? (\n <img\n src={backgroundImage}\n alt={imageAlt}\n className=\"absolute inset-0 h-full w-full object-cover object-right\"\n loading=\"eager\"\n />\n ) : null}\n {/* Gradient overlay */}\n <div className=\"absolute inset-0 bg-gradient-to-r from-black/80 via-black/50 to-transparent\" />\n\n {/* Text content – left aligned */}\n <div className=\"relative z-10 flex items-center w-full pl-8 lg:pl-16\">\n <motion.div\n initial={{ opacity: 0, y: 16 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4, ease: \"easeOut\" }}\n className=\"px-6 py-16 lg:px-8 lg:py-20 max-w-[500px] lg:max-w-[480px]\"\n >\n <Typography variant=\"h1\" className=\"text-white drop-shadow-lg\" as=\"h1\">\n {headline}\n </Typography>\n {subheadline && (\n <Typography variant=\"body-lg\" className=\"mt-4 text-white/85 drop-shadow-md\">\n {subheadline}\n </Typography>\n )}\n {(ctaLabel || secondaryCtaLabel) && (\n <div className=\"mt-8 flex flex-wrap gap-4\">\n {ctaLabel && (\n <Button\n size=\"lg\"\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 shadow-lg\"\n asChild\n >\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n )}\n {secondaryCtaLabel && (\n <Button\n size=\"lg\"\n variant=\"outline\"\n className=\"border-white/40 text-foreground bg-white/90 hover:bg-white shadow-lg\"\n asChild\n >\n <a href={secondaryCtaHref}>{secondaryCtaLabel}</a>\n </Button>\n )}\n </div>\n )}\n </motion.div>\n </div>\n </div>\n\n {/* ═══ MOBILE (< md): fullscreen media, text top, buttons bottom ═══ */}\n <div className=\"block md:hidden relative min-h-[85vh] flex flex-col\">\n {/* Background media */}\n {mobileHasVideo ? (\n <HeroVideo\n src={backgroundVideoMobile || backgroundVideo!}\n poster={backgroundImageMobile || backgroundImage}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n />\n ) : (backgroundImageMobile || backgroundImage) ? (\n <img\n src={backgroundImageMobile || backgroundImage}\n alt={imageAlt}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n loading=\"eager\"\n />\n ) : null}\n {/* Gradient overlays */}\n <div className=\"absolute inset-0 bg-gradient-to-b from-black/70 via-transparent to-black/80\" />\n\n {/* Content layered over media */}\n <div className=\"relative z-10 flex flex-1 flex-col justify-between px-5 py-10\">\n {/* Top: headline + subheadline */}\n <motion.div\n initial={{ opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4 }}\n >\n <Typography variant=\"h2\" className=\"text-white drop-shadow-lg\" as=\"h1\">\n {headlineMobile || headline}\n </Typography>\n {(subheadlineMobile || subheadline) && (\n <Typography variant=\"body-lg\" className=\"mt-3 text-white/90 drop-shadow-lg font-medium leading-relaxed\">\n {subheadlineMobile || subheadline}\n </Typography>\n )}\n </motion.div>\n\n {/* Middle: spacer */}\n <div className=\"flex-1\" />\n\n {/* Bottom: buttons */}\n {(ctaLabel || secondaryCtaLabel) && (\n <motion.div\n initial={{ opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4, delay: 0.15 }}\n className=\"flex flex-col gap-3\"\n >\n {ctaLabel && (\n <Button\n size=\"lg\"\n className=\"w-full bg-primary text-primary-foreground hover:bg-primary/90 shadow-lg\"\n asChild\n >\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n )}\n {secondaryCtaLabel && (\n <Button\n size=\"lg\"\n variant=\"outline\"\n className=\"w-full border-white/40 text-foreground bg-white/90 hover:bg-white shadow-lg\"\n asChild\n >\n <a href={secondaryCtaHref}>{secondaryCtaLabel}</a>\n </Button>\n )}\n </motion.div>\n )}\n </div>\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport React from \"react\";\n\nexport interface ImageTextTeaserProps extends React.HTMLAttributes<HTMLElement> {\n heading: string;\n text: string;\n imageSrc: string;\n imageAlt: string;\n ctaLabel?: string;\n ctaHref?: string;\n imagePosition?: \"left\" | \"right\";\n}\n\nexport const ImageTextTeaser: React.FC<ImageTextTeaserProps> = ({\n heading,\n text,\n imageSrc,\n imageAlt,\n ctaLabel,\n ctaHref = \"#\",\n imagePosition = \"left\",\n className,\n ...props\n}) => {\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div\n className={cn(\n \"container-wide grid items-center gap-8 md:grid-cols-2 lg:gap-16\",\n imagePosition === \"right\" && \"md:[&>*:first-child]:order-2\"\n )}\n >\n <div className=\"overflow-hidden rounded-2xl\">\n <img\n src={imageSrc}\n alt={imageAlt}\n className=\"h-full w-full object-cover\"\n loading=\"lazy\"\n />\n </div>\n <div>\n <Typography variant=\"h2\">{heading}</Typography>\n <Typography variant=\"body\" color=\"muted\" className=\"mt-4\">\n {text}\n </Typography>\n {ctaLabel && (\n <Button className=\"mt-6\" asChild>\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n )}\n </div>\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport React from \"react\";\n\nexport interface ContentCardProps extends React.HTMLAttributes<HTMLElement> {\n heading: string;\n text: string;\n imageSrc?: string;\n imageAlt?: string;\n tag?: string;\n href?: string;\n}\n\nexport const ContentCard: React.FC<ContentCardProps> = ({\n heading,\n text,\n imageSrc,\n imageAlt = \"\",\n tag,\n href,\n className,\n ...props\n}) => {\n const Wrapper = href ? \"a\" : \"div\";\n const wrapperProps = href ? { href } : {};\n\n return (\n <article\n className={cn(\n \"group overflow-hidden rounded-2xl border border-border bg-card shadow-sm transition-fast hover:shadow-lg\",\n href && \"cursor-pointer\",\n className\n )}\n {...props}\n >\n <Wrapper {...(wrapperProps as any)} className=\"block\">\n {imageSrc && (\n <div className=\"aspect-video overflow-hidden\">\n <img\n src={imageSrc}\n alt={imageAlt}\n className=\"h-full w-full object-cover transition-fast group-hover:scale-105\"\n loading=\"lazy\"\n />\n </div>\n )}\n <div className=\"p-6\">\n {tag && (\n <Typography variant=\"overline\" className=\"mb-2\">\n {tag}\n </Typography>\n )}\n <Typography variant=\"h4\" className=\"group-hover:text-primary transition-fast\">\n {heading}\n </Typography>\n <Typography variant=\"body-sm\" color=\"muted\" className=\"mt-2 line-clamp-3\">\n {text}\n </Typography>\n </div>\n </Wrapper>\n </article>\n );\n};\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDown } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn(\"border-b\", className)} {...props} />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { Typography } from \"./Typography\";\nimport { cn } from \"@/lib/utils\";\nimport React from \"react\";\n\nexport interface FaqItem {\n question: string;\n answer: string;\n}\n\nexport interface FaqAccordionProps extends React.HTMLAttributes<HTMLElement> {\n heading?: string;\n items: FaqItem[];\n}\n\nexport const FaqAccordion: React.FC<FaqAccordionProps> = ({\n heading,\n items,\n className,\n ...props\n}) => {\n // Generate JSON-LD for SEO\n const jsonLd = {\n \"@context\": \"https://schema.org\",\n \"@type\": \"FAQPage\",\n mainEntity: items.map((item) => ({\n \"@type\": \"Question\",\n name: item.question,\n acceptedAnswer: { \"@type\": \"Answer\", text: item.answer },\n })),\n };\n\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div className=\"container-narrow\">\n {heading && (\n <Typography variant=\"h2\" className=\"mb-8 text-center\">\n {heading}\n </Typography>\n )}\n <Accordion type=\"single\" collapsible className=\"w-full\">\n {items.map((item, i) => (\n <AccordionItem key={i} value={`item-${i}`}>\n <AccordionTrigger className=\"font-display text-left font-semibold\">\n {item.question}\n </AccordionTrigger>\n <AccordionContent className=\"font-body text-muted-foreground\">\n {item.answer}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}\n />\n </div>\n </section>\n );\n};\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Label } from \"@/components/ui/label\";\nimport React, { useState } from \"react\";\n\nexport interface ContactFormProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSubmit'> {\n heading?: string;\n description?: string;\n onSubmit?: (data: { name: string; email: string; message: string }) => void;\n}\n\nexport const ContactForm: React.FC<ContactFormProps> = ({\n heading = \"Kontakt\",\n description,\n onSubmit,\n className,\n ...props\n}) => {\n const [form, setForm] = useState({ name: \"\", email: \"\", message: \"\" });\n const [submitted, setSubmitted] = useState(false);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.(form);\n setSubmitted(true);\n };\n\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div className=\"container-narrow\">\n <Typography variant=\"h2\" className=\"mb-2\">\n {heading}\n </Typography>\n {description && (\n <Typography variant=\"body\" color=\"muted\" className=\"mb-8\">\n {description}\n </Typography>\n )}\n {submitted ? (\n <div className=\"rounded-lg border border-success/30 bg-success/5 p-8 text-center\">\n <Typography variant=\"h4\" color=\"accent\">\n Vielen Dank für Ihre Nachricht!\n </Typography>\n <Typography variant=\"body-sm\" color=\"muted\" className=\"mt-2\">\n Wir melden uns in Kürze bei Ihnen.\n </Typography>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div className=\"grid gap-6 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"name\">Name</Label>\n <Input\n id=\"name\"\n required\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n placeholder=\"Max Mustermann\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">E-Mail</Label>\n <Input\n id=\"email\"\n type=\"email\"\n required\n value={form.email}\n onChange={(e) => setForm({ ...form, email: e.target.value })}\n placeholder=\"max@beispiel.de\"\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"message\">Nachricht</Label>\n <Textarea\n id=\"message\"\n required\n rows={5}\n value={form.message}\n onChange={(e) => setForm({ ...form, message: e.target.value })}\n placeholder=\"Ihre Nachricht...\"\n />\n </div>\n <Button type=\"submit\" size=\"lg\">\n Nachricht senden\n </Button>\n </form>\n )}\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { Menu, X } from \"lucide-react\";\nimport React, { useState } from \"react\";\n\nexport interface NavItem {\n label: string;\n href: string;\n}\n\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {\n brand: string;\n items: NavItem[];\n ctaLabel?: string;\n ctaHref?: string;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n brand,\n items,\n ctaLabel,\n ctaHref = \"#\",\n className,\n ...props\n}) => {\n const [open, setOpen] = useState(false);\n\n return (\n <header\n className={cn(\n \"sticky top-0 z-50 border-b border-primary/20 bg-primary text-primary-foreground backdrop-blur\",\n className\n )}\n {...props}\n >\n <nav className=\"container-wide flex h-16 items-center justify-between px-4 sm:px-6 lg:px-8\" aria-label=\"Main\">\n <a href=\"/\" className=\"font-display text-lg font-bold text-primary-foreground\">\n {brand}\n </a>\n\n {/* Desktop */}\n <ul className=\"hidden items-center gap-1 md:flex\">\n {items.map((item) => (\n <li key={item.href}>\n <a\n href={item.href}\n className=\"rounded-full px-4 py-2 font-body text-sm text-primary-foreground/80 transition-fast hover:bg-primary-foreground/10 hover:text-primary-foreground\"\n >\n {item.label}\n </a>\n </li>\n ))}\n {ctaLabel && (\n <li className=\"ml-4\">\n <Button size=\"sm\" className=\"bg-primary-foreground text-primary hover:bg-primary-foreground/90\" asChild>\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n </li>\n )}\n </ul>\n\n {/* Mobile toggle */}\n <button\n className=\"md:hidden rounded-full p-2 text-primary-foreground/80 hover:bg-primary-foreground/10\"\n onClick={() => setOpen(!open)}\n aria-label=\"Menu\"\n >\n {open ? <X size={20} /> : <Menu size={20} />}\n </button>\n </nav>\n\n {/* Mobile menu */}\n {open && (\n <div className=\"border-t border-primary-foreground/20 bg-primary md:hidden\">\n <ul className=\"container-wide space-y-1 px-4 py-4\">\n {items.map((item) => (\n <li key={item.href}>\n <a\n href={item.href}\n className=\"block rounded-xl px-4 py-2 font-body text-sm text-primary-foreground/80 transition-fast hover:bg-primary-foreground/10 hover:text-primary-foreground\"\n onClick={() => setOpen(false)}\n >\n {item.label}\n </a>\n </li>\n ))}\n {ctaLabel && (\n <li className=\"pt-2\">\n <Button size=\"sm\" className=\"w-full bg-primary-foreground text-primary hover:bg-primary-foreground/90\" asChild>\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n </li>\n )}\n </ul>\n </div>\n )}\n </header>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport React from \"react\";\n\nexport interface FooterColumn {\n heading: string;\n links: { label: string; href: string }[];\n}\n\nexport interface FooterProps extends React.HTMLAttributes<HTMLElement> {\n brand: string;\n columns: FooterColumn[];\n copyright?: string;\n}\n\nexport const Footer: React.FC<FooterProps> = ({\n brand,\n columns,\n copyright,\n className,\n ...props\n}) => {\n return (\n <footer className={cn(\"border-t border-border bg-muted section-padding\", className)} {...props}>\n <div className=\"container-wide\">\n <div className=\"grid gap-8 sm:grid-cols-2 lg:grid-cols-4\">\n <div>\n <Typography variant=\"h5\">{brand}</Typography>\n </div>\n {columns.map((col) => (\n <div key={col.heading}>\n <Typography variant=\"overline\" className=\"mb-4\">\n {col.heading}\n </Typography>\n <ul className=\"space-y-2\">\n {col.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"font-body text-sm text-muted-foreground transition-fast hover:text-foreground\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n {copyright && (\n <div className=\"mt-12 border-t border-border pt-6\">\n <Typography variant=\"caption\">{copyright}</Typography>\n </div>\n )}\n </div>\n </footer>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Input } from \"@/components/ui/input\";\nimport { Search } from \"lucide-react\";\nimport React from \"react\";\n\nexport interface SearchBarProps extends React.InputHTMLAttributes<HTMLInputElement> {\n onSearch?: (value: string) => void;\n}\n\nexport const SearchBar = React.forwardRef<HTMLInputElement, SearchBarProps>(\n ({ className, onSearch, ...props }, ref) => {\n return (\n <div className={cn(\"relative\", className)}>\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n ref={ref}\n className=\"pl-10\"\n placeholder=\"Suchen...\"\n onChange={(e) => onSearch?.(e.target.value)}\n {...props}\n />\n </div>\n );\n }\n);\nSearchBar.displayName = \"SearchBar\";\n","import { cn } from \"@/lib/utils\";\nimport { ChevronRight } from \"lucide-react\";\nimport React from \"react\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, className, ...props }) => {\n const jsonLd = {\n \"@context\": \"https://schema.org\",\n \"@type\": \"BreadcrumbList\",\n itemListElement: items.map((item, i) => ({\n \"@type\": \"ListItem\",\n position: i + 1,\n name: item.label,\n ...(item.href ? { item: item.href } : {}),\n })),\n };\n\n return (\n <nav aria-label=\"Breadcrumb\" className={cn(\"font-body text-sm\", className)} {...props}>\n <ol className=\"flex items-center gap-1\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n {i > 0 && <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />}\n {item.href && i < items.length - 1 ? (\n <a href={item.href} className=\"text-muted-foreground transition-fast hover:text-foreground\">\n {item.label}\n </a>\n ) : (\n <span className=\"text-foreground font-medium\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}\n />\n </nav>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport { Check, ChevronDown, Cloud, Star } from \"lucide-react\";\nimport React, { useState } from \"react\";\n\nexport interface TariffPlan {\n id: string;\n storage: string;\n monthlyPrice: number;\n yearlyPrice: number;\n features: string[];\n badge?: string;\n highlight?: boolean;\n /** If true, this plan is hidden behind \"Weitere Tarife\" toggle */\n hidden?: boolean;\n ctaLabel?: string;\n ctaHref?: string;\n}\n\nexport interface TariffSelectProps extends React.HTMLAttributes<HTMLElement> {\n heading?: string;\n subheading?: string;\n plans?: TariffPlan[];\n /** ID of the plan that should be expanded by default */\n defaultOpenId?: string;\n /** \"monthly\" | \"yearly\" */\n defaultBilling?: \"monthly\" | \"yearly\";\n}\n\nconst defaultPlans: TariffPlan[] = [\n {\n id: \"50gb\",\n storage: \"50 GB\",\n monthlyPrice: 1.29,\n yearlyPrice: 0.99,\n hidden: true,\n features: [\n \"10.000 Fotos, 4h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Automatische Synchronisation\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"100gb\",\n storage: \"100 GB\",\n monthlyPrice: 2.49,\n yearlyPrice: 1.99,\n features: [\n \"20.000 Fotos, 8h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 25% günstiger\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"200gb\",\n storage: \"200 GB\",\n monthlyPrice: 3.49,\n yearlyPrice: 2.99,\n features: [\n \"40.000 Fotos, 16h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 17% günstiger\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"500gb\",\n storage: \"500 GB\",\n monthlyPrice: 5.49,\n yearlyPrice: 4.99,\n hidden: true,\n features: [\n \"100.000 Fotos, 40h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 10% günstiger\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"1tb\",\n storage: \"1 TB\",\n monthlyPrice: 10.99,\n yearlyPrice: 9.99,\n features: [\n \"200.000 Fotos, 80h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 10% günstiger\",\n ],\n badge: \"Meistgewählt\",\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n];\n\nexport const TariffSelect: React.FC<TariffSelectProps> = ({\n heading = \"Cloud-Speicher erweitern\",\n subheading = \"Wählen Sie den passenden Tarif für Ihre Bedürfnisse\",\n plans = defaultPlans,\n defaultOpenId = \"100gb\",\n defaultBilling = \"yearly\",\n className,\n ...props\n}) => {\n const [openId, setOpenId] = useState<string | null>(defaultOpenId);\n const [billing, setBilling] = useState<\"monthly\" | \"yearly\">(defaultBilling);\n const [showAll, setShowAll] = useState(false);\n\n const hasHidden = plans.some((p) => p.hidden);\n const visiblePlans = showAll ? plans : plans.filter((p) => !p.hidden);\n\n const togglePlan = (id: string) => {\n setOpenId((prev) => (prev === id ? null : id));\n };\n\n const getPrice = (plan: TariffPlan) =>\n billing === \"yearly\" ? plan.yearlyPrice : plan.monthlyPrice;\n\n const getSavings = (plan: TariffPlan) => {\n const diff = plan.monthlyPrice - plan.yearlyPrice;\n return diff > 0 ? Math.round((diff / plan.monthlyPrice) * 100) : 0;\n };\n\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div className=\"container-narrow\">\n {heading && (\n <Typography variant=\"h2\" className=\"mb-2 text-center\">\n {heading}\n </Typography>\n )}\n {subheading && (\n <Typography variant=\"body\" tone=\"muted\" className=\"mb-8 text-center\">\n {subheading}\n </Typography>\n )}\n\n {/* Billing Toggle */}\n <div className=\"flex items-center justify-center mb-8\">\n <div className=\"inline-flex rounded-xl border border-border bg-muted p-1 gap-1\">\n <button\n onClick={() => setBilling(\"monthly\")}\n className={cn(\n \"rounded-lg px-5 py-2.5 font-body text-sm font-medium transition-fast\",\n billing === \"monthly\"\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n Monatlich kündbar\n </button>\n <button\n onClick={() => setBilling(\"yearly\")}\n className={cn(\n \"rounded-lg px-5 py-2.5 font-body text-sm font-medium transition-fast\",\n billing === \"yearly\"\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n 12 Monate Laufzeit\n </button>\n </div>\n </div>\n\n {/* Tariff Cards */}\n <div className=\"space-y-3\">\n {visiblePlans.map((plan) => {\n const isOpen = openId === plan.id;\n const price = getPrice(plan);\n const savings = getSavings(plan);\n\n return (\n <div\n key={plan.id}\n className={cn(\n \"rounded-2xl border transition-fast overflow-hidden\",\n isOpen\n ? \"border-primary bg-card shadow-md ring-1 ring-primary/20\"\n : \"border-border bg-card hover:border-primary/40 hover:shadow-sm\"\n )}\n >\n {/* Header – always visible */}\n <div\n className=\"flex items-center gap-4 px-5 py-4 cursor-pointer select-none\"\n onClick={() => togglePlan(plan.id)}\n >\n {/* Cloud icon */}\n <div\n className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl transition-fast\",\n isOpen\n ? \"bg-primary text-primary-foreground\"\n : \"bg-muted text-muted-foreground\"\n )}\n >\n <Cloud className=\"h-5 w-5\" />\n </div>\n\n {/* Storage + badge */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <Typography variant=\"h4\" className=\"whitespace-nowrap\">\n {plan.storage}\n </Typography>\n {plan.badge && (\n <span className=\"hidden sm:inline-flex items-center gap-1 rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary\">\n <Star className=\"h-3 w-3\" />\n {plan.badge}\n </span>\n )}\n </div>\n\n {/* Price + CTA (collapsed) + chevron */}\n <div className=\"ml-auto flex items-center gap-3\">\n <div className=\"text-right\">\n <span className=\"font-display text-xl font-bold text-foreground\">\n {price.toFixed(2).replace(\".\", \",\")} €\n </span>\n <span className=\"text-sm text-muted-foreground\">/Monat</span>\n </div>\n\n {/* Inline CTA when collapsed */}\n {!isOpen && plan.ctaHref && (\n <a\n href={plan.ctaHref}\n onClick={(e) => e.stopPropagation()}\n className=\"hidden sm:inline-flex\"\n >\n <Button size=\"sm\" variant=\"outline\">\n {plan.ctaLabel || \"Auswählen\"}\n </Button>\n </a>\n )}\n\n <ChevronDown\n className={cn(\n \"h-5 w-5 shrink-0 text-muted-foreground transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </div>\n </div>\n\n {/* Expanded Content */}\n <div\n className={cn(\n \"grid transition-all duration-200 ease-in-out\",\n isOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\"\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-5 pb-5 pt-1\">\n {/* Savings hint */}\n {billing === \"monthly\" && savings > 0 && (\n <Typography\n variant=\"body-sm\"\n className=\"mb-4 text-primary font-medium\"\n >\n Sparen Sie {savings}% im Jahresabo\n </Typography>\n )}\n\n {/* Features */}\n <ul className=\"grid grid-cols-1 sm:grid-cols-2 gap-2 mb-5\">\n {plan.features.map((f, i) => (\n <li\n key={i}\n className=\"flex items-start gap-2 font-body text-sm text-muted-foreground\"\n >\n <Check className=\"h-4 w-4 mt-0.5 shrink-0 text-primary\" />\n {f}\n </li>\n ))}\n </ul>\n\n {/* CTA */}\n {plan.ctaHref && (\n <a href={plan.ctaHref}>\n <Button className=\"w-full sm:w-auto\" size=\"lg\">\n {plan.ctaLabel || \"Jetzt buchen\"}\n </Button>\n </a>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Show more / less toggle */}\n {hasHidden && (\n <div className=\"flex justify-center mt-4\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowAll((v) => !v)}\n className=\"gap-1.5 text-muted-foreground\"\n >\n {showAll ? \"Weniger Tarife\" : \"Weitere Tarife\"}\n <ChevronDown\n className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n showAll && \"rotate-180\"\n )}\n />\n </Button>\n </div>\n )}\n\n {/* Legal note */}\n <Typography variant=\"caption\" className=\"mt-6 block text-center\">\n Alle Preise inkl. MwSt. Kündigung bis 4 Wochen zum Ende der Vertragslaufzeit möglich.\n </Typography>\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport React, { useState } from \"react\";\n\nexport interface TabItem {\n id: string;\n label: string;\n content: React.ReactNode;\n}\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n items: TabItem[];\n defaultActiveId?: string;\n variant?: \"underline\" | \"pills\" | \"enclosed\";\n onTabChange?: (id: string) => void;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n defaultActiveId,\n variant = \"underline\",\n onTabChange,\n className,\n ...props\n}) => {\n const [activeId, setActiveId] = useState(defaultActiveId || items[0]?.id);\n\n const handleChange = (id: string) => {\n setActiveId(id);\n onTabChange?.(id);\n };\n\n const activeItem = items.find((i) => i.id === activeId);\n\n const tabStyles = {\n underline: {\n list: \"border-b border-border\",\n tab: (active: boolean) =>\n cn(\n \"relative px-4 py-2.5 font-body text-sm font-medium transition-fast -mb-px\",\n active\n ? \"text-primary border-b-2 border-primary\"\n : \"text-muted-foreground hover:text-foreground\"\n ),\n },\n pills: {\n list: \"gap-1 bg-muted rounded-lg p-1\",\n tab: (active: boolean) =>\n cn(\n \"px-4 py-2 rounded-md font-body text-sm font-medium transition-fast\",\n active\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n ),\n },\n enclosed: {\n list: \"border-b border-border\",\n tab: (active: boolean) =>\n cn(\n \"px-4 py-2.5 font-body text-sm font-medium transition-fast border border-transparent rounded-t-lg -mb-px\",\n active\n ? \"bg-background text-foreground border-border border-b-background\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted/50\"\n ),\n },\n };\n\n const styles = tabStyles[variant];\n\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n <div\n role=\"tablist\"\n className={cn(\"flex items-center\", styles.list)}\n >\n {items.map((item) => (\n <button\n key={item.id}\n role=\"tab\"\n aria-selected={item.id === activeId}\n aria-controls={`tabpanel-${item.id}`}\n onClick={() => handleChange(item.id)}\n className={styles.tab(item.id === activeId)}\n >\n {item.label}\n </button>\n ))}\n </div>\n <div\n role=\"tabpanel\"\n id={`tabpanel-${activeId}`}\n className=\"pt-4\"\n >\n {activeItem?.content}\n </div>\n </div>\n );\n};\n","import { createContext, useContext, useState, useCallback, useEffect } from \"react\";\n\nexport type BrandId = \"default\" | \"webde\" | \"gmx\";\n\nexport interface BrandConfig {\n id: BrandId;\n name: string;\n logo?: string;\n}\n\nexport const brands: BrandConfig[] = [\n { id: \"default\", name: \"Core Framework\" },\n { id: \"webde\", name: \"WEB.DE\" },\n { id: \"gmx\", name: \"GMX\" },\n];\n\ninterface BrandContextValue {\n brand: BrandConfig;\n setBrand: (id: BrandId) => void;\n}\n\nconst BrandContext = createContext<BrandContextValue>({\n brand: brands[0],\n setBrand: () => {},\n});\n\nexport const useBrand = () => useContext(BrandContext);\n\nexport const BrandProvider: React.FC<{ children: React.ReactNode; defaultBrand?: BrandId }> = ({\n children,\n defaultBrand = \"default\",\n}) => {\n const [brand, setBrandState] = useState<BrandConfig>(\n brands.find((b) => b.id === defaultBrand) || brands[0]\n );\n\n const setBrand = useCallback((id: BrandId) => {\n const found = brands.find((b) => b.id === id);\n if (found) setBrandState(found);\n }, []);\n\n useEffect(() => {\n const root = document.documentElement;\n if (brand.id === \"default\") {\n root.removeAttribute(\"data-brand\");\n } else {\n root.setAttribute(\"data-brand\", brand.id);\n }\n return () => root.removeAttribute(\"data-brand\");\n }, [brand]);\n\n return (\n <BrandContext.Provider value={{ brand, setBrand }}>\n {children}\n </BrandContext.Provider>\n );\n};\n","import { useBrand, brands, type BrandId } from \"@/components/framework/BrandProvider\";\nimport { cn } from \"@/lib/utils\";\n\nexport const BrandSwitcher: React.FC<{ className?: string }> = ({ className }) => {\n const { brand, setBrand } = useBrand();\n\n return (\n <div className={cn(\"flex items-center gap-1 rounded-xl border border-border bg-muted p-1\", className)}>\n {brands.map((b) => (\n <button\n key={b.id}\n onClick={() => setBrand(b.id)}\n className={cn(\n \"rounded-lg px-3 py-1.5 font-body text-xs font-medium transition-fast\",\n brand.id === b.id\n ? \"bg-primary text-primary-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground hover:bg-background\"\n )}\n >\n {b.name}\n </button>\n ))}\n </div>\n );\n};\n"],"names":["cn","inputs","twMerge","clsx","typographyVariants","cva","elementMap","Typography","React","className","variant","tone","as","children","props","ref","Component","jsx","badgeVariants","Badge","buttonVariants","Button","size","asChild","Slot","HeroVideo","src","poster","useRef","useEffect","_a","Hero","headline","headlineMobile","subheadline","subheadlineMobile","ctaLabel","ctaHref","secondaryCtaLabel","secondaryCtaHref","backgroundImage","backgroundImageMobile","backgroundVideo","backgroundVideoMobile","imageAlt","desktopHasVideo","mobileHasVideo","jsxs","motion","ImageTextTeaser","heading","text","imageSrc","imagePosition","ContentCard","tag","href","Wrapper","wrapperProps","Accordion","AccordionPrimitive","AccordionItem","AccordionTrigger","ChevronDown","AccordionContent","FaqAccordion","items","jsonLd","item","i","Input","type","Textarea","labelVariants","Label","LabelPrimitive","ContactForm","description","onSubmit","form","setForm","useState","submitted","setSubmitted","handleSubmit","e","Navbar","brand","open","setOpen","X","Menu","Footer","columns","copyright","col","link","SearchBar","onSearch","Search","Breadcrumb","ChevronRight","defaultPlans","TariffSelect","subheading","plans","defaultOpenId","defaultBilling","openId","setOpenId","billing","setBilling","showAll","setShowAll","hasHidden","p","visiblePlans","togglePlan","id","prev","getPrice","plan","getSavings","diff","isOpen","price","savings","Cloud","Star","f","Check","v","Tabs","defaultActiveId","onTabChange","activeId","setActiveId","handleChange","activeItem","styles","active","brands","BrandContext","createContext","useBrand","useContext","BrandProvider","defaultBrand","setBrandState","b","setBrand","useCallback","found","root","BrandSwitcher"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/lib/utils.ts","../src/components/framework/Typography.tsx","../src/components/framework/Badge.tsx","../src/components/ui/button.tsx","../src/components/framework/Hero.tsx","../src/components/framework/ImageTextTeaser.tsx","../src/components/framework/ContentCard.tsx","../src/components/ui/accordion.tsx","../src/components/framework/FaqAccordion.tsx","../src/components/ui/input.tsx","../src/components/ui/textarea.tsx","../src/components/ui/label.tsx","../src/components/framework/ContactForm.tsx","../src/components/framework/Navbar.tsx","../src/components/framework/Footer.tsx","../src/components/framework/SearchBar.tsx","../src/components/framework/Breadcrumb.tsx","../src/components/framework/TariffSelect.tsx","../src/components/framework/Tabs.tsx","../src/components/framework/BrandProvider.tsx","../src/components/framework/BrandSwitcher.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport React from \"react\";\n\nconst typographyVariants = cva(\"\", {\n variants: {\n variant: {\n h1: \"font-display text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl\",\n h2: \"font-display text-3xl font-bold tracking-tight sm:text-4xl\",\n h3: \"font-display text-2xl font-semibold tracking-tight\",\n h4: \"font-display text-xl font-semibold\",\n h5: \"font-display text-lg font-semibold\",\n h6: \"font-display text-base font-semibold\",\n body: \"font-body text-base leading-relaxed\",\n \"body-sm\": \"font-body text-sm leading-relaxed\",\n \"body-lg\": \"font-body text-lg leading-relaxed\",\n caption: \"font-body text-xs text-muted-foreground\",\n overline: \"font-body text-xs font-semibold uppercase tracking-widest text-muted-foreground\",\n },\n color: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"body\",\n color: \"default\",\n },\n});\n\nconst elementMap: Record<string, keyof JSX.IntrinsicElements> = {\n h1: \"h1\", h2: \"h2\", h3: \"h3\", h4: \"h4\", h5: \"h5\", h6: \"h6\",\n body: \"p\", \"body-sm\": \"p\", \"body-lg\": \"p\",\n caption: \"span\", overline: \"span\",\n};\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLElement> {\n variant?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"body\" | \"body-sm\" | \"body-lg\" | \"caption\" | \"overline\";\n tone?: \"default\" | \"muted\" | \"primary\" | \"accent\" | \"destructive\";\n as?: keyof JSX.IntrinsicElements;\n}\n\nexport const Typography = React.forwardRef<HTMLElement, TypographyProps>(\n ({ className, variant = \"body\", tone = \"default\", as, children, ...props }, ref) => {\n const Component = (as || elementMap[variant] || \"p\") as any;\n return (\n <Component\n ref={ref}\n className={cn(typographyVariants({ variant, color: tone, className }))}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\nTypography.displayName = \"Typography\";\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport React from \"react\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full px-3 py-0.5 font-body text-xs font-medium transition-fast\",\n {\n variants: {\n variant: {\n default: \"bg-primary/10 text-primary\",\n secondary: \"bg-secondary/20 text-secondary\",\n success: \"bg-success/10 text-success\",\n warning: \"bg-warning/10 text-warning\",\n destructive: \"bg-destructive/10 text-destructive\",\n outline: \"border border-border text-foreground\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, className }))} {...props} />\n )\n);\nBadge.displayName = \"Badge\";\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl font-medium font-body transition-fast focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-muted hover:text-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-muted hover:text-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n success: \"bg-success text-success-foreground hover:bg-success/90\",\n warning: \"bg-warning text-warning-foreground hover:bg-warning/90\",\n },\n size: {\n default: \"h-10 px-4 py-2 text-sm\",\n sm: \"h-8 rounded-lg px-3 text-xs\",\n lg: \"h-12 rounded-xl px-8 text-base\",\n xl: \"h-14 rounded-xl px-10 text-lg\",\n icon: \"h-10 w-10 rounded-xl\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />;\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport { motion } from \"framer-motion\";\nimport React, { useRef, useEffect, useState } from \"react\";\n\nexport interface HeroProps extends React.HTMLAttributes<HTMLElement> {\n headline: string;\n /** Shorter mobile headline (optional, fallback: headline) */\n headlineMobile?: string;\n subheadline?: string;\n /** Shorter mobile subheadline (optional, fallback: subheadline) */\n subheadlineMobile?: string;\n ctaLabel?: string;\n ctaHref?: string;\n secondaryCtaLabel?: string;\n secondaryCtaHref?: string;\n /** Desktop/tablet: shown as background (image or video) */\n backgroundImage?: string;\n /** Mobile: portrait background (image or video) */\n backgroundImageMobile?: string;\n /** Desktop/tablet: looping muted video background (mp4). Takes priority over backgroundImage when provided. */\n backgroundVideo?: string;\n /** Mobile: looping muted video background (mp4). Takes priority over backgroundImageMobile when provided. */\n backgroundVideoMobile?: string;\n imageAlt?: string;\n}\n\n/** Inline video component – autoplay, muted, loop, no controls */\nconst HeroVideo: React.FC<{ src: string; className?: string; poster?: string }> = ({\n src,\n className,\n}) => {\n const ref = useRef<HTMLVideoElement>(null);\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n setReady(false);\n ref.current?.play().catch(() => {});\n }, [src]);\n\n return (\n <video\n ref={ref}\n src={src}\n autoPlay\n loop\n muted\n playsInline\n onCanPlay={() => setReady(true)}\n className={cn(className, ready ? \"opacity-100\" : \"opacity-0\")}\n style={{ transition: \"opacity 0.3s ease-in\" }}\n />\n );\n};\n\nexport const Hero: React.FC<HeroProps> = ({\n headline,\n headlineMobile,\n subheadline,\n subheadlineMobile,\n ctaLabel,\n ctaHref = \"#\",\n secondaryCtaLabel,\n secondaryCtaHref = \"#\",\n backgroundImage,\n backgroundImageMobile,\n backgroundVideo,\n backgroundVideoMobile,\n imageAlt = \"\",\n className,\n ...props\n}) => {\n const desktopHasVideo = !!backgroundVideo;\n const mobileHasVideo = !!(backgroundVideoMobile || backgroundVideo);\n\n return (\n <section className={cn(\"relative overflow-hidden\", className)} {...props}>\n\n {/* ═══ DESKTOP / TABLET (md+): fullscreen media, text left ═══ */}\n <div className=\"hidden md:flex relative min-h-[420px] md:min-h-[420px] lg:min-h-[600px]\">\n {/* Background media */}\n {desktopHasVideo ? (\n <HeroVideo\n src={backgroundVideo!}\n className=\"absolute inset-0 h-full w-full object-cover object-right\"\n />\n ) : backgroundImage ? (\n <img\n src={backgroundImage}\n alt={imageAlt}\n className=\"absolute inset-0 h-full w-full object-cover object-right\"\n loading=\"eager\"\n />\n ) : null}\n {/* Gradient overlay */}\n <div className=\"absolute inset-0 bg-gradient-to-r from-black/80 via-black/50 to-transparent\" />\n\n {/* Text content – left aligned */}\n <div className=\"relative z-10 flex items-center w-full pl-8 lg:pl-16\">\n <motion.div\n initial={{ opacity: 0, y: 16 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4, ease: \"easeOut\" }}\n className=\"px-6 py-16 lg:px-8 lg:py-20 max-w-[500px] lg:max-w-[480px]\"\n >\n <Typography variant=\"h1\" className=\"text-white drop-shadow-lg\" as=\"h1\">\n {headline}\n </Typography>\n {subheadline && (\n <Typography variant=\"body-lg\" className=\"mt-4 text-white/85 drop-shadow-md\">\n {subheadline}\n </Typography>\n )}\n {(ctaLabel || secondaryCtaLabel) && (\n <div className=\"mt-8 flex flex-wrap gap-4\">\n {ctaLabel && (\n <Button\n size=\"lg\"\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 shadow-lg\"\n asChild\n >\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n )}\n {secondaryCtaLabel && (\n <Button\n size=\"lg\"\n variant=\"outline\"\n className=\"border-white/40 text-foreground bg-white/90 hover:bg-white shadow-lg\"\n asChild\n >\n <a href={secondaryCtaHref}>{secondaryCtaLabel}</a>\n </Button>\n )}\n </div>\n )}\n </motion.div>\n </div>\n </div>\n\n {/* ═══ MOBILE (< md): fullscreen media, text top, buttons bottom ═══ */}\n <div className=\"block md:hidden relative min-h-[85vh] flex flex-col\">\n {/* Background media */}\n {mobileHasVideo ? (\n <HeroVideo\n src={backgroundVideoMobile || backgroundVideo!}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n />\n ) : (backgroundImageMobile || backgroundImage) ? (\n <img\n src={backgroundImageMobile || backgroundImage}\n alt={imageAlt}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n loading=\"eager\"\n />\n ) : null}\n {/* Gradient overlays */}\n <div className=\"absolute inset-0 bg-gradient-to-b from-black/70 via-transparent to-black/80\" />\n\n {/* Content layered over media */}\n <div className=\"relative z-10 flex flex-1 flex-col justify-between px-5 py-10\">\n {/* Top: headline + subheadline */}\n <motion.div\n initial={{ opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4 }}\n >\n <Typography variant=\"h2\" className=\"text-white drop-shadow-lg\" as=\"h1\">\n {headlineMobile || headline}\n </Typography>\n {(subheadlineMobile || subheadline) && (\n <Typography variant=\"body-lg\" className=\"mt-3 text-white/90 drop-shadow-lg font-medium leading-relaxed\">\n {subheadlineMobile || subheadline}\n </Typography>\n )}\n </motion.div>\n\n {/* Middle: spacer */}\n <div className=\"flex-1\" />\n\n {/* Bottom: buttons */}\n {(ctaLabel || secondaryCtaLabel) && (\n <motion.div\n initial={{ opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4, delay: 0.15 }}\n className=\"flex flex-col gap-3\"\n >\n {ctaLabel && (\n <Button\n size=\"lg\"\n className=\"w-full bg-primary text-primary-foreground hover:bg-primary/90 shadow-lg\"\n asChild\n >\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n )}\n {secondaryCtaLabel && (\n <Button\n size=\"lg\"\n variant=\"outline\"\n className=\"w-full border-white/40 text-foreground bg-white/90 hover:bg-white shadow-lg\"\n asChild\n >\n <a href={secondaryCtaHref}>{secondaryCtaLabel}</a>\n </Button>\n )}\n </motion.div>\n )}\n </div>\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport React from \"react\";\n\nexport interface ImageTextTeaserProps extends React.HTMLAttributes<HTMLElement> {\n heading: string;\n text: string;\n imageSrc: string;\n imageAlt: string;\n ctaLabel?: string;\n ctaHref?: string;\n imagePosition?: \"left\" | \"right\";\n}\n\nexport const ImageTextTeaser: React.FC<ImageTextTeaserProps> = ({\n heading,\n text,\n imageSrc,\n imageAlt,\n ctaLabel,\n ctaHref = \"#\",\n imagePosition = \"left\",\n className,\n ...props\n}) => {\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div\n className={cn(\n \"container-wide grid items-center gap-8 md:grid-cols-2 lg:gap-16\",\n imagePosition === \"right\" && \"md:[&>*:first-child]:order-2\"\n )}\n >\n <div className=\"overflow-hidden rounded-2xl\">\n <img\n src={imageSrc}\n alt={imageAlt}\n className=\"h-full w-full object-cover\"\n loading=\"lazy\"\n />\n </div>\n <div>\n <Typography variant=\"h2\">{heading}</Typography>\n <Typography variant=\"body\" color=\"muted\" className=\"mt-4\">\n {text}\n </Typography>\n {ctaLabel && (\n <Button className=\"mt-6\" asChild>\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n )}\n </div>\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport React from \"react\";\n\nexport interface ContentCardProps extends React.HTMLAttributes<HTMLElement> {\n heading: string;\n text: string;\n imageSrc?: string;\n imageAlt?: string;\n tag?: string;\n href?: string;\n}\n\nexport const ContentCard: React.FC<ContentCardProps> = ({\n heading,\n text,\n imageSrc,\n imageAlt = \"\",\n tag,\n href,\n className,\n ...props\n}) => {\n const Wrapper = href ? \"a\" : \"div\";\n const wrapperProps = href ? { href } : {};\n\n return (\n <article\n className={cn(\n \"group overflow-hidden rounded-2xl border border-border bg-card shadow-sm transition-fast hover:shadow-lg\",\n href && \"cursor-pointer\",\n className\n )}\n {...props}\n >\n <Wrapper {...(wrapperProps as any)} className=\"block\">\n {imageSrc && (\n <div className=\"aspect-video overflow-hidden\">\n <img\n src={imageSrc}\n alt={imageAlt}\n className=\"h-full w-full object-cover transition-fast group-hover:scale-105\"\n loading=\"lazy\"\n />\n </div>\n )}\n <div className=\"p-6\">\n {tag && (\n <Typography variant=\"overline\" className=\"mb-2\">\n {tag}\n </Typography>\n )}\n <Typography variant=\"h4\" className=\"group-hover:text-primary transition-fast\">\n {heading}\n </Typography>\n <Typography variant=\"body-sm\" color=\"muted\" className=\"mt-2 line-clamp-3\">\n {text}\n </Typography>\n </div>\n </Wrapper>\n </article>\n );\n};\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDown } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn(\"border-b\", className)} {...props} />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { Typography } from \"./Typography\";\nimport { cn } from \"@/lib/utils\";\nimport React from \"react\";\n\nexport interface FaqItem {\n question: string;\n answer: string;\n}\n\nexport interface FaqAccordionProps extends React.HTMLAttributes<HTMLElement> {\n heading?: string;\n items: FaqItem[];\n}\n\nexport const FaqAccordion: React.FC<FaqAccordionProps> = ({\n heading,\n items,\n className,\n ...props\n}) => {\n // Generate JSON-LD for SEO\n const jsonLd = {\n \"@context\": \"https://schema.org\",\n \"@type\": \"FAQPage\",\n mainEntity: items.map((item) => ({\n \"@type\": \"Question\",\n name: item.question,\n acceptedAnswer: { \"@type\": \"Answer\", text: item.answer },\n })),\n };\n\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div className=\"container-narrow\">\n {heading && (\n <Typography variant=\"h2\" className=\"mb-8 text-center\">\n {heading}\n </Typography>\n )}\n <Accordion type=\"single\" collapsible className=\"w-full\">\n {items.map((item, i) => (\n <AccordionItem key={i} value={`item-${i}`}>\n <AccordionTrigger className=\"font-display text-left font-semibold\">\n {item.question}\n </AccordionTrigger>\n <AccordionContent className=\"font-body text-muted-foreground\">\n {item.answer}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}\n />\n </div>\n </section>\n );\n};\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Label } from \"@/components/ui/label\";\nimport React, { useState } from \"react\";\n\nexport interface ContactFormProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSubmit'> {\n heading?: string;\n description?: string;\n onSubmit?: (data: { name: string; email: string; message: string }) => void;\n}\n\nexport const ContactForm: React.FC<ContactFormProps> = ({\n heading = \"Kontakt\",\n description,\n onSubmit,\n className,\n ...props\n}) => {\n const [form, setForm] = useState({ name: \"\", email: \"\", message: \"\" });\n const [submitted, setSubmitted] = useState(false);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.(form);\n setSubmitted(true);\n };\n\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div className=\"container-narrow\">\n <Typography variant=\"h2\" className=\"mb-2\">\n {heading}\n </Typography>\n {description && (\n <Typography variant=\"body\" color=\"muted\" className=\"mb-8\">\n {description}\n </Typography>\n )}\n {submitted ? (\n <div className=\"rounded-lg border border-success/30 bg-success/5 p-8 text-center\">\n <Typography variant=\"h4\" color=\"accent\">\n Vielen Dank für Ihre Nachricht!\n </Typography>\n <Typography variant=\"body-sm\" color=\"muted\" className=\"mt-2\">\n Wir melden uns in Kürze bei Ihnen.\n </Typography>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div className=\"grid gap-6 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"name\">Name</Label>\n <Input\n id=\"name\"\n required\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n placeholder=\"Max Mustermann\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">E-Mail</Label>\n <Input\n id=\"email\"\n type=\"email\"\n required\n value={form.email}\n onChange={(e) => setForm({ ...form, email: e.target.value })}\n placeholder=\"max@beispiel.de\"\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"message\">Nachricht</Label>\n <Textarea\n id=\"message\"\n required\n rows={5}\n value={form.message}\n onChange={(e) => setForm({ ...form, message: e.target.value })}\n placeholder=\"Ihre Nachricht...\"\n />\n </div>\n <Button type=\"submit\" size=\"lg\">\n Nachricht senden\n </Button>\n </form>\n )}\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { Menu, X } from \"lucide-react\";\nimport React, { useState } from \"react\";\n\nexport interface NavItem {\n label: string;\n href: string;\n}\n\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {\n brand: string;\n items: NavItem[];\n ctaLabel?: string;\n ctaHref?: string;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n brand,\n items,\n ctaLabel,\n ctaHref = \"#\",\n className,\n ...props\n}) => {\n const [open, setOpen] = useState(false);\n\n return (\n <header\n className={cn(\n \"sticky top-0 z-50 border-b border-primary/20 bg-primary text-primary-foreground backdrop-blur\",\n className\n )}\n {...props}\n >\n <nav className=\"container-wide flex h-16 items-center justify-between px-4 sm:px-6 lg:px-8\" aria-label=\"Main\">\n <a href=\"/\" className=\"font-display text-lg font-bold text-primary-foreground\">\n {brand}\n </a>\n\n {/* Desktop */}\n <ul className=\"hidden items-center gap-1 md:flex\">\n {items.map((item) => (\n <li key={item.href}>\n <a\n href={item.href}\n className=\"rounded-full px-4 py-2 font-body text-sm text-primary-foreground/80 transition-fast hover:bg-primary-foreground/10 hover:text-primary-foreground\"\n >\n {item.label}\n </a>\n </li>\n ))}\n {ctaLabel && (\n <li className=\"ml-4\">\n <Button size=\"sm\" className=\"bg-primary-foreground text-primary hover:bg-primary-foreground/90\" asChild>\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n </li>\n )}\n </ul>\n\n {/* Mobile toggle */}\n <button\n className=\"md:hidden rounded-full p-2 text-primary-foreground/80 hover:bg-primary-foreground/10\"\n onClick={() => setOpen(!open)}\n aria-label=\"Menu\"\n >\n {open ? <X size={20} /> : <Menu size={20} />}\n </button>\n </nav>\n\n {/* Mobile menu */}\n {open && (\n <div className=\"border-t border-primary-foreground/20 bg-primary md:hidden\">\n <ul className=\"container-wide space-y-1 px-4 py-4\">\n {items.map((item) => (\n <li key={item.href}>\n <a\n href={item.href}\n className=\"block rounded-xl px-4 py-2 font-body text-sm text-primary-foreground/80 transition-fast hover:bg-primary-foreground/10 hover:text-primary-foreground\"\n onClick={() => setOpen(false)}\n >\n {item.label}\n </a>\n </li>\n ))}\n {ctaLabel && (\n <li className=\"pt-2\">\n <Button size=\"sm\" className=\"w-full bg-primary-foreground text-primary hover:bg-primary-foreground/90\" asChild>\n <a href={ctaHref}>{ctaLabel}</a>\n </Button>\n </li>\n )}\n </ul>\n </div>\n )}\n </header>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport React from \"react\";\n\nexport interface FooterColumn {\n heading: string;\n links: { label: string; href: string }[];\n}\n\nexport interface FooterProps extends React.HTMLAttributes<HTMLElement> {\n brand: string;\n columns: FooterColumn[];\n copyright?: string;\n}\n\nexport const Footer: React.FC<FooterProps> = ({\n brand,\n columns,\n copyright,\n className,\n ...props\n}) => {\n return (\n <footer className={cn(\"border-t border-border bg-muted section-padding\", className)} {...props}>\n <div className=\"container-wide\">\n <div className=\"grid gap-8 sm:grid-cols-2 lg:grid-cols-4\">\n <div>\n <Typography variant=\"h5\">{brand}</Typography>\n </div>\n {columns.map((col) => (\n <div key={col.heading}>\n <Typography variant=\"overline\" className=\"mb-4\">\n {col.heading}\n </Typography>\n <ul className=\"space-y-2\">\n {col.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"font-body text-sm text-muted-foreground transition-fast hover:text-foreground\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n {copyright && (\n <div className=\"mt-12 border-t border-border pt-6\">\n <Typography variant=\"caption\">{copyright}</Typography>\n </div>\n )}\n </div>\n </footer>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Input } from \"@/components/ui/input\";\nimport { Search } from \"lucide-react\";\nimport React from \"react\";\n\nexport interface SearchBarProps extends React.InputHTMLAttributes<HTMLInputElement> {\n onSearch?: (value: string) => void;\n}\n\nexport const SearchBar = React.forwardRef<HTMLInputElement, SearchBarProps>(\n ({ className, onSearch, ...props }, ref) => {\n return (\n <div className={cn(\"relative\", className)}>\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n ref={ref}\n className=\"pl-10\"\n placeholder=\"Suchen...\"\n onChange={(e) => onSearch?.(e.target.value)}\n {...props}\n />\n </div>\n );\n }\n);\nSearchBar.displayName = \"SearchBar\";\n","import { cn } from \"@/lib/utils\";\nimport { ChevronRight } from \"lucide-react\";\nimport React from \"react\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, className, ...props }) => {\n const jsonLd = {\n \"@context\": \"https://schema.org\",\n \"@type\": \"BreadcrumbList\",\n itemListElement: items.map((item, i) => ({\n \"@type\": \"ListItem\",\n position: i + 1,\n name: item.label,\n ...(item.href ? { item: item.href } : {}),\n })),\n };\n\n return (\n <nav aria-label=\"Breadcrumb\" className={cn(\"font-body text-sm\", className)} {...props}>\n <ol className=\"flex items-center gap-1\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n {i > 0 && <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />}\n {item.href && i < items.length - 1 ? (\n <a href={item.href} className=\"text-muted-foreground transition-fast hover:text-foreground\">\n {item.label}\n </a>\n ) : (\n <span className=\"text-foreground font-medium\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}\n />\n </nav>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"@/components/ui/button\";\nimport { Check, ChevronDown, Cloud, Star } from \"lucide-react\";\nimport React, { useState } from \"react\";\n\nexport interface TariffPlan {\n id: string;\n storage: string;\n monthlyPrice: number;\n yearlyPrice: number;\n features: string[];\n badge?: string;\n highlight?: boolean;\n /** If true, this plan is hidden behind \"Weitere Tarife\" toggle */\n hidden?: boolean;\n ctaLabel?: string;\n ctaHref?: string;\n}\n\nexport interface TariffSelectProps extends React.HTMLAttributes<HTMLElement> {\n heading?: string;\n subheading?: string;\n plans?: TariffPlan[];\n /** ID of the plan that should be expanded by default */\n defaultOpenId?: string;\n /** \"monthly\" | \"yearly\" */\n defaultBilling?: \"monthly\" | \"yearly\";\n}\n\nconst defaultPlans: TariffPlan[] = [\n {\n id: \"50gb\",\n storage: \"50 GB\",\n monthlyPrice: 1.29,\n yearlyPrice: 0.99,\n hidden: true,\n features: [\n \"10.000 Fotos, 4h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Automatische Synchronisation\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"100gb\",\n storage: \"100 GB\",\n monthlyPrice: 2.49,\n yearlyPrice: 1.99,\n features: [\n \"20.000 Fotos, 8h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 25% günstiger\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"200gb\",\n storage: \"200 GB\",\n monthlyPrice: 3.49,\n yearlyPrice: 2.99,\n features: [\n \"40.000 Fotos, 16h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 17% günstiger\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"500gb\",\n storage: \"500 GB\",\n monthlyPrice: 5.49,\n yearlyPrice: 4.99,\n hidden: true,\n features: [\n \"100.000 Fotos, 40h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 10% günstiger\",\n ],\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n {\n id: \"1tb\",\n storage: \"1 TB\",\n monthlyPrice: 10.99,\n yearlyPrice: 9.99,\n features: [\n \"200.000 Fotos, 80h Videomaterial\",\n \"Fotos und Dokumente sichern und teilen\",\n \"Hoher deutscher Datenschutz\",\n \"Premium-Kunden-Vorteil: 10% günstiger\",\n ],\n badge: \"Meistgewählt\",\n ctaLabel: \"Zum Angebot\",\n ctaHref: \"#\",\n },\n];\n\nexport const TariffSelect: React.FC<TariffSelectProps> = ({\n heading = \"Cloud-Speicher erweitern\",\n subheading = \"Wählen Sie den passenden Tarif für Ihre Bedürfnisse\",\n plans = defaultPlans,\n defaultOpenId = \"100gb\",\n defaultBilling = \"yearly\",\n className,\n ...props\n}) => {\n const [openId, setOpenId] = useState<string | null>(defaultOpenId);\n const [billing, setBilling] = useState<\"monthly\" | \"yearly\">(defaultBilling);\n const [showAll, setShowAll] = useState(false);\n\n const hasHidden = plans.some((p) => p.hidden);\n const visiblePlans = showAll ? plans : plans.filter((p) => !p.hidden);\n\n const togglePlan = (id: string) => {\n setOpenId((prev) => (prev === id ? null : id));\n };\n\n const getPrice = (plan: TariffPlan) =>\n billing === \"yearly\" ? plan.yearlyPrice : plan.monthlyPrice;\n\n const getSavings = (plan: TariffPlan) => {\n const diff = plan.monthlyPrice - plan.yearlyPrice;\n return diff > 0 ? Math.round((diff / plan.monthlyPrice) * 100) : 0;\n };\n\n return (\n <section className={cn(\"section-padding\", className)} {...props}>\n <div className=\"container-narrow\">\n {heading && (\n <Typography variant=\"h2\" className=\"mb-2 text-center\">\n {heading}\n </Typography>\n )}\n {subheading && (\n <Typography variant=\"body\" tone=\"muted\" className=\"mb-8 text-center\">\n {subheading}\n </Typography>\n )}\n\n {/* Billing Toggle */}\n <div className=\"flex items-center justify-center mb-8\">\n <div className=\"inline-flex rounded-xl border border-border bg-muted p-1 gap-1\">\n <button\n onClick={() => setBilling(\"monthly\")}\n className={cn(\n \"rounded-lg px-5 py-2.5 font-body text-sm font-medium transition-fast\",\n billing === \"monthly\"\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n Monatlich kündbar\n </button>\n <button\n onClick={() => setBilling(\"yearly\")}\n className={cn(\n \"rounded-lg px-5 py-2.5 font-body text-sm font-medium transition-fast\",\n billing === \"yearly\"\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n 12 Monate Laufzeit\n </button>\n </div>\n </div>\n\n {/* Tariff Cards */}\n <div className=\"space-y-3\">\n {visiblePlans.map((plan) => {\n const isOpen = openId === plan.id;\n const price = getPrice(plan);\n const savings = getSavings(plan);\n\n return (\n <div\n key={plan.id}\n className={cn(\n \"rounded-2xl border transition-fast overflow-hidden\",\n isOpen\n ? \"border-primary bg-card shadow-md ring-1 ring-primary/20\"\n : \"border-border bg-card hover:border-primary/40 hover:shadow-sm\"\n )}\n >\n {/* Header – always visible */}\n <div\n className=\"flex items-center gap-4 px-5 py-4 cursor-pointer select-none\"\n onClick={() => togglePlan(plan.id)}\n >\n {/* Cloud icon */}\n <div\n className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl transition-fast\",\n isOpen\n ? \"bg-primary text-primary-foreground\"\n : \"bg-muted text-muted-foreground\"\n )}\n >\n <Cloud className=\"h-5 w-5\" />\n </div>\n\n {/* Storage + badge */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <Typography variant=\"h4\" className=\"whitespace-nowrap\">\n {plan.storage}\n </Typography>\n {plan.badge && (\n <span className=\"hidden sm:inline-flex items-center gap-1 rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary\">\n <Star className=\"h-3 w-3\" />\n {plan.badge}\n </span>\n )}\n </div>\n\n {/* Price + CTA (collapsed) + chevron */}\n <div className=\"ml-auto flex items-center gap-3\">\n <div className=\"text-right\">\n <span className=\"font-display text-xl font-bold text-foreground\">\n {price.toFixed(2).replace(\".\", \",\")} €\n </span>\n <span className=\"text-sm text-muted-foreground\">/Monat</span>\n </div>\n\n {/* Inline CTA when collapsed */}\n {!isOpen && plan.ctaHref && (\n <a\n href={plan.ctaHref}\n onClick={(e) => e.stopPropagation()}\n className=\"hidden sm:inline-flex\"\n >\n <Button size=\"sm\" variant=\"outline\">\n {plan.ctaLabel || \"Auswählen\"}\n </Button>\n </a>\n )}\n\n <ChevronDown\n className={cn(\n \"h-5 w-5 shrink-0 text-muted-foreground transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </div>\n </div>\n\n {/* Expanded Content */}\n <div\n className={cn(\n \"grid transition-all duration-200 ease-in-out\",\n isOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\"\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-5 pb-5 pt-1\">\n {/* Savings hint */}\n {billing === \"monthly\" && savings > 0 && (\n <Typography\n variant=\"body-sm\"\n className=\"mb-4 text-primary font-medium\"\n >\n Sparen Sie {savings}% im Jahresabo\n </Typography>\n )}\n\n {/* Features */}\n <ul className=\"grid grid-cols-1 sm:grid-cols-2 gap-2 mb-5\">\n {plan.features.map((f, i) => (\n <li\n key={i}\n className=\"flex items-start gap-2 font-body text-sm text-muted-foreground\"\n >\n <Check className=\"h-4 w-4 mt-0.5 shrink-0 text-primary\" />\n {f}\n </li>\n ))}\n </ul>\n\n {/* CTA */}\n {plan.ctaHref && (\n <a href={plan.ctaHref}>\n <Button className=\"w-full sm:w-auto\" size=\"lg\">\n {plan.ctaLabel || \"Jetzt buchen\"}\n </Button>\n </a>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Show more / less toggle */}\n {hasHidden && (\n <div className=\"flex justify-center mt-4\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowAll((v) => !v)}\n className=\"gap-1.5 text-muted-foreground\"\n >\n {showAll ? \"Weniger Tarife\" : \"Weitere Tarife\"}\n <ChevronDown\n className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n showAll && \"rotate-180\"\n )}\n />\n </Button>\n </div>\n )}\n\n {/* Legal note */}\n <Typography variant=\"caption\" className=\"mt-6 block text-center\">\n Alle Preise inkl. MwSt. Kündigung bis 4 Wochen zum Ende der Vertragslaufzeit möglich.\n </Typography>\n </div>\n </section>\n );\n};\n","import { cn } from \"@/lib/utils\";\nimport React, { useState } from \"react\";\n\nexport interface TabItem {\n id: string;\n label: string;\n content: React.ReactNode;\n}\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n items: TabItem[];\n defaultActiveId?: string;\n variant?: \"underline\" | \"pills\" | \"enclosed\";\n onTabChange?: (id: string) => void;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n defaultActiveId,\n variant = \"underline\",\n onTabChange,\n className,\n ...props\n}) => {\n const [activeId, setActiveId] = useState(defaultActiveId || items[0]?.id);\n\n const handleChange = (id: string) => {\n setActiveId(id);\n onTabChange?.(id);\n };\n\n const activeItem = items.find((i) => i.id === activeId);\n\n const tabStyles = {\n underline: {\n list: \"border-b border-border\",\n tab: (active: boolean) =>\n cn(\n \"relative px-4 py-2.5 font-body text-sm font-medium transition-fast -mb-px\",\n active\n ? \"text-primary border-b-2 border-primary\"\n : \"text-muted-foreground hover:text-foreground\"\n ),\n },\n pills: {\n list: \"gap-1 bg-muted rounded-lg p-1\",\n tab: (active: boolean) =>\n cn(\n \"px-4 py-2 rounded-md font-body text-sm font-medium transition-fast\",\n active\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n ),\n },\n enclosed: {\n list: \"border-b border-border\",\n tab: (active: boolean) =>\n cn(\n \"px-4 py-2.5 font-body text-sm font-medium transition-fast border border-transparent rounded-t-lg -mb-px\",\n active\n ? \"bg-background text-foreground border-border border-b-background\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted/50\"\n ),\n },\n };\n\n const styles = tabStyles[variant];\n\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n <div\n role=\"tablist\"\n className={cn(\"flex items-center\", styles.list)}\n >\n {items.map((item) => (\n <button\n key={item.id}\n role=\"tab\"\n aria-selected={item.id === activeId}\n aria-controls={`tabpanel-${item.id}`}\n onClick={() => handleChange(item.id)}\n className={styles.tab(item.id === activeId)}\n >\n {item.label}\n </button>\n ))}\n </div>\n <div\n role=\"tabpanel\"\n id={`tabpanel-${activeId}`}\n className=\"pt-4\"\n >\n {activeItem?.content}\n </div>\n </div>\n );\n};\n","import { createContext, useContext, useState, useCallback, useEffect } from \"react\";\n\nexport type BrandId = \"default\" | \"webde\" | \"gmx\";\n\nexport interface BrandConfig {\n id: BrandId;\n name: string;\n logo?: string;\n}\n\nexport const brands: BrandConfig[] = [\n { id: \"default\", name: \"Core Framework\" },\n { id: \"webde\", name: \"WEB.DE\" },\n { id: \"gmx\", name: \"GMX\" },\n];\n\ninterface BrandContextValue {\n brand: BrandConfig;\n setBrand: (id: BrandId) => void;\n}\n\nconst BrandContext = createContext<BrandContextValue>({\n brand: brands[0],\n setBrand: () => {},\n});\n\nexport const useBrand = () => useContext(BrandContext);\n\nexport const BrandProvider: React.FC<{ children: React.ReactNode; defaultBrand?: BrandId }> = ({\n children,\n defaultBrand = \"default\",\n}) => {\n const [brand, setBrandState] = useState<BrandConfig>(\n brands.find((b) => b.id === defaultBrand) || brands[0]\n );\n\n const setBrand = useCallback((id: BrandId) => {\n const found = brands.find((b) => b.id === id);\n if (found) setBrandState(found);\n }, []);\n\n useEffect(() => {\n const root = document.documentElement;\n if (brand.id === \"default\") {\n root.removeAttribute(\"data-brand\");\n } else {\n root.setAttribute(\"data-brand\", brand.id);\n }\n return () => root.removeAttribute(\"data-brand\");\n }, [brand]);\n\n return (\n <BrandContext.Provider value={{ brand, setBrand }}>\n {children}\n </BrandContext.Provider>\n );\n};\n","import { useBrand, brands, type BrandId } from \"@/components/framework/BrandProvider\";\nimport { cn } from \"@/lib/utils\";\n\nexport const BrandSwitcher: React.FC<{ className?: string }> = ({ className }) => {\n const { brand, setBrand } = useBrand();\n\n return (\n <div className={cn(\"flex items-center gap-1 rounded-xl border border-border bg-muted p-1\", className)}>\n {brands.map((b) => (\n <button\n key={b.id}\n onClick={() => setBrand(b.id)}\n className={cn(\n \"rounded-lg px-3 py-1.5 font-body text-xs font-medium transition-fast\",\n brand.id === b.id\n ? \"bg-primary text-primary-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground hover:bg-background\"\n )}\n >\n {b.name}\n </button>\n ))}\n </div>\n );\n};\n"],"names":["cn","inputs","twMerge","clsx","typographyVariants","cva","elementMap","Typography","React","className","variant","tone","as","children","props","ref","Component","jsx","badgeVariants","Badge","buttonVariants","Button","size","asChild","Slot","HeroVideo","src","useRef","ready","setReady","useState","useEffect","_a","Hero","headline","headlineMobile","subheadline","subheadlineMobile","ctaLabel","ctaHref","secondaryCtaLabel","secondaryCtaHref","backgroundImage","backgroundImageMobile","backgroundVideo","backgroundVideoMobile","imageAlt","desktopHasVideo","mobileHasVideo","jsxs","motion","ImageTextTeaser","heading","text","imageSrc","imagePosition","ContentCard","tag","href","Wrapper","wrapperProps","Accordion","AccordionPrimitive","AccordionItem","AccordionTrigger","ChevronDown","AccordionContent","FaqAccordion","items","jsonLd","item","i","Input","type","Textarea","labelVariants","Label","LabelPrimitive","ContactForm","description","onSubmit","form","setForm","submitted","setSubmitted","handleSubmit","e","Navbar","brand","open","setOpen","X","Menu","Footer","columns","copyright","col","link","SearchBar","onSearch","Search","Breadcrumb","ChevronRight","defaultPlans","TariffSelect","subheading","plans","defaultOpenId","defaultBilling","openId","setOpenId","billing","setBilling","showAll","setShowAll","hasHidden","p","visiblePlans","togglePlan","id","prev","getPrice","plan","getSavings","diff","isOpen","price","savings","Cloud","Star","f","Check","v","Tabs","defaultActiveId","onTabChange","activeId","setActiveId","handleChange","activeItem","styles","active","brands","BrandContext","createContext","useBrand","useContext","BrandProvider","defaultBrand","setBrandState","b","setBrand","useCallback","found","root","BrandSwitcher"],"mappings":"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"}
|