cat-framework-core 0.1.6

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/README.md ADDED
@@ -0,0 +1,73 @@
1
+ # Welcome to your Lovable project
2
+
3
+ ## Project info
4
+
5
+ **URL**: https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID
6
+
7
+ ## How can I edit this code?
8
+
9
+ There are several ways of editing your application.
10
+
11
+ **Use Lovable**
12
+
13
+ Simply visit the [Lovable Project](https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID) and start prompting.
14
+
15
+ Changes made via Lovable will be committed automatically to this repo.
16
+
17
+ **Use your preferred IDE**
18
+
19
+ If you want to work locally using your own IDE, you can clone this repo and push changes. Pushed changes will also be reflected in Lovable.
20
+
21
+ The only requirement is having Node.js & npm installed - [install with nvm](https://github.com/nvm-sh/nvm#installing-and-updating)
22
+
23
+ Follow these steps:
24
+
25
+ ```sh
26
+ # Step 1: Clone the repository using the project's Git URL.
27
+ git clone <YOUR_GIT_URL>
28
+
29
+ # Step 2: Navigate to the project directory.
30
+ cd <YOUR_PROJECT_NAME>
31
+
32
+ # Step 3: Install the necessary dependencies.
33
+ npm i
34
+
35
+ # Step 4: Start the development server with auto-reloading and an instant preview.
36
+ npm run dev
37
+ ```
38
+
39
+ **Edit a file directly in GitHub**
40
+
41
+ - Navigate to the desired file(s).
42
+ - Click the "Edit" button (pencil icon) at the top right of the file view.
43
+ - Make your changes and commit the changes.
44
+
45
+ **Use GitHub Codespaces**
46
+
47
+ - Navigate to the main page of your repository.
48
+ - Click on the "Code" button (green button) near the top right.
49
+ - Select the "Codespaces" tab.
50
+ - Click on "New codespace" to launch a new Codespace environment.
51
+ - Edit files directly within the Codespace and commit and push your changes once you're done.
52
+
53
+ ## What technologies are used for this project?
54
+
55
+ This project is built with:
56
+
57
+ - Vite
58
+ - TypeScript
59
+ - React
60
+ - shadcn-ui
61
+ - Tailwind CSS
62
+
63
+ ## How can I deploy this project?
64
+
65
+ Simply open [Lovable](https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID) and click on Share -> Publish.
66
+
67
+ ## Can I connect a custom domain to my Lovable project?
68
+
69
+ Yes, you can!
70
+
71
+ To connect a domain, navigate to Project > Settings > Domains and click Connect Domain.
72
+
73
+ Read more here: [Setting up a custom domain](https://docs.lovable.dev/features/custom-domain#custom-domain)
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),$=require("clsx"),Q=require("tailwind-merge"),P=require("class-variance-authority"),h=require("react"),A=require("@radix-ui/react-slot"),z=require("framer-motion"),X=require("@radix-ui/react-accordion"),b=require("lucide-react");require("react-dom");function F(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(s,r,n.get?n:{enumerable:!0,get:()=>t[r]})}}return s.default=t,Object.freeze(s)}const y=F(h),v=F(X);function l(...t){return Q.twMerge($.clsx(t))}const U=P.cva("",{variants:{variant:{h1:"font-display text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl",h2:"font-display text-3xl font-bold tracking-tight sm:text-4xl",h3:"font-display text-2xl font-semibold tracking-tight",h4:"font-display text-xl font-semibold",h5:"font-display text-lg font-semibold",h6:"font-display text-base font-semibold",body:"font-body text-base leading-relaxed","body-sm":"font-body text-sm leading-relaxed","body-lg":"font-body text-lg leading-relaxed",caption:"font-body text-xs text-muted-foreground",overline:"font-body text-xs font-semibold uppercase tracking-widest text-muted-foreground"},color:{default:"text-foreground",muted:"text-muted-foreground",primary:"text-primary",accent:"text-accent",destructive:"text-destructive"}},defaultVariants:{variant:"body",color:"default"}}),Y={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",body:"p","body-sm":"p","body-lg":"p",caption:"span",overline:"span"},c=h.forwardRef(({className:t,variant:s="body",tone:r="default",as:n,children:i,...a},o)=>{const u=n||Y[s]||"p";return e.jsx(u,{ref:o,className:l(U({variant:s,color:r,className:t})),...a,children:i})});c.displayName="Typography";const ee=P.cva("inline-flex items-center rounded-full px-3 py-0.5 font-body text-xs font-medium transition-fast",{variants:{variant:{default:"bg-primary/10 text-primary",secondary:"bg-secondary/20 text-secondary",success:"bg-success/10 text-success",warning:"bg-warning/10 text-warning",destructive:"bg-destructive/10 text-destructive",outline:"border border-border text-foreground"}},defaultVariants:{variant:"default"}}),D=h.forwardRef(({className:t,variant:s,...r},n)=>e.jsx("span",{ref:n,className:l(ee({variant:s,className:t})),...r}));D.displayName="Badge";const re=P.cva("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",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary-hover",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-muted hover:text-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-muted hover:text-foreground",link:"text-primary underline-offset-4 hover:underline",success:"bg-success text-success-foreground hover:bg-success/90",warning:"bg-warning text-warning-foreground hover:bg-warning/90"},size:{default:"h-10 px-4 py-2 text-sm",sm:"h-8 rounded-lg px-3 text-xs",lg:"h-12 rounded-xl px-8 text-base",xl:"h-14 rounded-xl px-10 text-lg",icon:"h-10 w-10 rounded-xl"}},defaultVariants:{variant:"default",size:"default"}}),f=y.forwardRef(({className:t,variant:s,size:r,asChild:n=!1,...i},a)=>{const o=n?A.Slot:"button";return e.jsx(o,{className:l(re({variant:s,size:r,className:t})),ref:a,...i})});f.displayName="Button";const te=({headline:t,headlineMobile:s,subheadline:r,subheadlineMobile:n,ctaLabel:i,ctaHref:a="#",secondaryCtaLabel:o,secondaryCtaHref:u="#",backgroundImage:m,backgroundImageMobile:g,imageAlt:x="",className:N,...C})=>e.jsxs("section",{className:l("relative overflow-hidden",N),...C,children:[e.jsxs("div",{className:"hidden md:flex relative min-h-[420px] md:min-h-[420px] lg:min-h-[600px]",children:[m&&e.jsx("img",{src:m,alt:x,className:"absolute inset-0 h-full w-full object-cover object-right",loading:"eager"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-black/80 via-black/50 to-transparent"}),e.jsx("div",{className:"relative z-10 flex items-center w-full pl-8 lg:pl-16",children:e.jsxs(z.motion.div,{initial:{opacity:0,y:16},animate:{opacity:1,y:0},transition:{duration:.4,ease:"easeOut"},className:"px-6 py-16 lg:px-8 lg:py-20 max-w-[500px] lg:max-w-[480px]",children:[e.jsx(c,{variant:"h1",className:"text-white drop-shadow-lg",as:"h1",children:t}),r&&e.jsx(c,{variant:"body-lg",className:"mt-4 text-white/85 drop-shadow-md",children:r}),(i||o)&&e.jsxs("div",{className:"mt-8 flex flex-wrap gap-4",children:[i&&e.jsx(f,{size:"lg",className:"bg-primary text-primary-foreground hover:bg-primary/90 shadow-lg",asChild:!0,children:e.jsx("a",{href:a,children:i})}),o&&e.jsx(f,{size:"lg",variant:"outline",className:"border-white/40 text-foreground bg-white/90 hover:bg-white shadow-lg",asChild:!0,children:e.jsx("a",{href:u,children:o})})]})]})})]}),e.jsxs("div",{className:"block md:hidden relative min-h-[85vh] flex flex-col",children:[(g||m)&&e.jsx("img",{src:g||m,alt:x,className:"absolute inset-0 h-full w-full object-cover object-center",loading:"eager"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-black/70 via-transparent to-black/80"}),e.jsxs("div",{className:"relative z-10 flex flex-1 flex-col justify-between px-5 py-10",children:[e.jsxs(z.motion.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{duration:.4},children:[e.jsx(c,{variant:"h2",className:"text-white drop-shadow-lg",as:"h1",children:s||t}),(n||r)&&e.jsx(c,{variant:"body-lg",className:"mt-3 text-white/90 drop-shadow-lg font-medium leading-relaxed",children:n||r})]}),e.jsx("div",{className:"flex-1"}),(i||o)&&e.jsxs(z.motion.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{duration:.4,delay:.15},className:"flex flex-col gap-3",children:[i&&e.jsx(f,{size:"lg",className:"w-full bg-primary text-primary-foreground hover:bg-primary/90 shadow-lg",asChild:!0,children:e.jsx("a",{href:a,children:i})}),o&&e.jsx(f,{size:"lg",variant:"outline",className:"w-full border-white/40 text-foreground bg-white/90 hover:bg-white shadow-lg",asChild:!0,children:e.jsx("a",{href:u,children:o})})]})]})]})]}),se=({heading:t,text:s,imageSrc:r,imageAlt:n,ctaLabel:i,ctaHref:a="#",imagePosition:o="left",className:u,...m})=>e.jsx("section",{className:l("section-padding",u),...m,children:e.jsxs("div",{className:l("container-wide grid items-center gap-8 md:grid-cols-2 lg:gap-16",o==="right"&&"md:[&>*:first-child]:order-2"),children:[e.jsx("div",{className:"overflow-hidden rounded-2xl",children:e.jsx("img",{src:r,alt:n,className:"h-full w-full object-cover",loading:"lazy"})}),e.jsxs("div",{children:[e.jsx(c,{variant:"h2",children:t}),e.jsx(c,{variant:"body",color:"muted",className:"mt-4",children:s}),i&&e.jsx(f,{className:"mt-6",asChild:!0,children:e.jsx("a",{href:a,children:i})})]})]})}),ae=({heading:t,text:s,imageSrc:r,imageAlt:n="",tag:i,href:a,className:o,...u})=>{const m=a?"a":"div",g=a?{href:a}:{};return e.jsx("article",{className:l("group overflow-hidden rounded-2xl border border-border bg-card shadow-sm transition-fast hover:shadow-lg",a&&"cursor-pointer",o),...u,children:e.jsxs(m,{...g,className:"block",children:[r&&e.jsx("div",{className:"aspect-video overflow-hidden",children:e.jsx("img",{src:r,alt:n,className:"h-full w-full object-cover transition-fast group-hover:scale-105",loading:"lazy"})}),e.jsxs("div",{className:"p-6",children:[i&&e.jsx(c,{variant:"overline",className:"mb-2",children:i}),e.jsx(c,{variant:"h4",className:"group-hover:text-primary transition-fast",children:t}),e.jsx(c,{variant:"body-sm",color:"muted",className:"mt-2 line-clamp-3",children:s})]})]})})},ne=v.Root,M=y.forwardRef(({className:t,...s},r)=>e.jsx(v.Item,{ref:r,className:l("border-b",t),...s}));M.displayName="AccordionItem";const T=y.forwardRef(({className:t,children:s,...r},n)=>e.jsx(v.Header,{className:"flex",children:e.jsxs(v.Trigger,{ref:n,className:l("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",t),...r,children:[s,e.jsx(b.ChevronDown,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})}));T.displayName=v.Trigger.displayName;const R=y.forwardRef(({className:t,children:s,...r},n)=>e.jsx(v.Content,{ref:n,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...r,children:e.jsx("div",{className:l("pb-4 pt-0",t),children:s})}));R.displayName=v.Content.displayName;const ie=({heading:t,items:s,className:r,...n})=>{const i={"@context":"https://schema.org","@type":"FAQPage",mainEntity:s.map(a=>({"@type":"Question",name:a.question,acceptedAnswer:{"@type":"Answer",text:a.answer}}))};return e.jsx("section",{className:l("section-padding",r),...n,children:e.jsxs("div",{className:"container-narrow",children:[t&&e.jsx(c,{variant:"h2",className:"mb-8 text-center",children:t}),e.jsx(ne,{type:"single",collapsible:!0,className:"w-full",children:s.map((a,o)=>e.jsxs(M,{value:`item-${o}`,children:[e.jsx(T,{className:"font-display text-left font-semibold",children:a.question}),e.jsx(R,{className:"font-body text-muted-foreground",children:a.answer})]},o))}),e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(i)}})]})})},k=y.forwardRef(({className:t,type:s,...r},n)=>e.jsx("input",{type:s,className:l("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",t),ref:n,...r}));k.displayName="Input";const V=y.forwardRef(({className:t,...s},r)=>e.jsx("textarea",{className:l("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",t),ref:r,...s}));V.displayName="Textarea";var oe=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],de=oe.reduce((t,s)=>{const r=A.createSlot(`Primitive.${s}`),n=y.forwardRef((i,a)=>{const{asChild:o,...u}=i,m=o?r:s;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),e.jsx(m,{...u,ref:a})});return n.displayName=`Primitive.${s}`,{...t,[s]:n}},{}),le="Label",q=y.forwardRef((t,s)=>e.jsx(de.label,{...t,ref:s,onMouseDown:r=>{var i;r.target.closest("button, input, select, textarea")||((i=t.onMouseDown)==null||i.call(t,r),!r.defaultPrevented&&r.detail>1&&r.preventDefault())}}));q.displayName=le;var H=q;const ce=P.cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),w=y.forwardRef(({className:t,...s},r)=>e.jsx(H,{ref:r,className:l(ce(),t),...s}));w.displayName=H.displayName;const me=({heading:t="Kontakt",description:s,onSubmit:r,className:n,...i})=>{const[a,o]=h.useState({name:"",email:"",message:""}),[u,m]=h.useState(!1),g=x=>{x.preventDefault(),r==null||r(a),m(!0)};return e.jsx("section",{className:l("section-padding",n),...i,children:e.jsxs("div",{className:"container-narrow",children:[e.jsx(c,{variant:"h2",className:"mb-2",children:t}),s&&e.jsx(c,{variant:"body",color:"muted",className:"mb-8",children:s}),u?e.jsxs("div",{className:"rounded-lg border border-success/30 bg-success/5 p-8 text-center",children:[e.jsx(c,{variant:"h4",color:"accent",children:"Vielen Dank für Ihre Nachricht!"}),e.jsx(c,{variant:"body-sm",color:"muted",className:"mt-2",children:"Wir melden uns in Kürze bei Ihnen."})]}):e.jsxs("form",{onSubmit:g,className:"space-y-6",children:[e.jsxs("div",{className:"grid gap-6 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(w,{htmlFor:"name",children:"Name"}),e.jsx(k,{id:"name",required:!0,value:a.name,onChange:x=>o({...a,name:x.target.value}),placeholder:"Max Mustermann"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(w,{htmlFor:"email",children:"E-Mail"}),e.jsx(k,{id:"email",type:"email",required:!0,value:a.email,onChange:x=>o({...a,email:x.target.value}),placeholder:"max@beispiel.de"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(w,{htmlFor:"message",children:"Nachricht"}),e.jsx(V,{id:"message",required:!0,rows:5,value:a.message,onChange:x=>o({...a,message:x.target.value}),placeholder:"Ihre Nachricht..."})]}),e.jsx(f,{type:"submit",size:"lg",children:"Nachricht senden"})]})]})})},ue=({brand:t,items:s,ctaLabel:r,ctaHref:n="#",className:i,...a})=>{const[o,u]=h.useState(!1);return e.jsxs("header",{className:l("sticky top-0 z-50 border-b border-primary/20 bg-primary text-primary-foreground backdrop-blur",i),...a,children:[e.jsxs("nav",{className:"container-wide flex h-16 items-center justify-between px-4 sm:px-6 lg:px-8","aria-label":"Main",children:[e.jsx("a",{href:"/",className:"font-display text-lg font-bold text-primary-foreground",children:t}),e.jsxs("ul",{className:"hidden items-center gap-1 md:flex",children:[s.map(m=>e.jsx("li",{children:e.jsx("a",{href:m.href,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",children:m.label})},m.href)),r&&e.jsx("li",{className:"ml-4",children:e.jsx(f,{size:"sm",className:"bg-primary-foreground text-primary hover:bg-primary-foreground/90",asChild:!0,children:e.jsx("a",{href:n,children:r})})})]}),e.jsx("button",{className:"md:hidden rounded-full p-2 text-primary-foreground/80 hover:bg-primary-foreground/10",onClick:()=>u(!o),"aria-label":"Menu",children:o?e.jsx(b.X,{size:20}):e.jsx(b.Menu,{size:20})})]}),o&&e.jsx("div",{className:"border-t border-primary-foreground/20 bg-primary md:hidden",children:e.jsxs("ul",{className:"container-wide space-y-1 px-4 py-4",children:[s.map(m=>e.jsx("li",{children:e.jsx("a",{href:m.href,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",onClick:()=>u(!1),children:m.label})},m.href)),r&&e.jsx("li",{className:"pt-2",children:e.jsx(f,{size:"sm",className:"w-full bg-primary-foreground text-primary hover:bg-primary-foreground/90",asChild:!0,children:e.jsx("a",{href:n,children:r})})})]})})]})},he=({brand:t,columns:s,copyright:r,className:n,...i})=>e.jsx("footer",{className:l("border-t border-border bg-muted section-padding",n),...i,children:e.jsxs("div",{className:"container-wide",children:[e.jsxs("div",{className:"grid gap-8 sm:grid-cols-2 lg:grid-cols-4",children:[e.jsx("div",{children:e.jsx(c,{variant:"h5",children:t})}),s.map(a=>e.jsxs("div",{children:[e.jsx(c,{variant:"overline",className:"mb-4",children:a.heading}),e.jsx("ul",{className:"space-y-2",children:a.links.map(o=>e.jsx("li",{children:e.jsx("a",{href:o.href,className:"font-body text-sm text-muted-foreground transition-fast hover:text-foreground",children:o.label})},o.href))})]},a.heading))]}),r&&e.jsx("div",{className:"mt-12 border-t border-border pt-6",children:e.jsx(c,{variant:"caption",children:r})})]})}),O=h.forwardRef(({className:t,onSearch:s,...r},n)=>e.jsxs("div",{className:l("relative",t),children:[e.jsx(b.Search,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(k,{ref:n,className:"pl-10",placeholder:"Suchen...",onChange:i=>s==null?void 0:s(i.target.value),...r})]}));O.displayName="SearchBar";const xe=({items:t,className:s,...r})=>{const n={"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:t.map((i,a)=>({"@type":"ListItem",position:a+1,name:i.label,...i.href?{item:i.href}:{}}))};return e.jsxs("nav",{"aria-label":"Breadcrumb",className:l("font-body text-sm",s),...r,children:[e.jsx("ol",{className:"flex items-center gap-1",children:t.map((i,a)=>e.jsxs("li",{className:"flex items-center gap-1",children:[a>0&&e.jsx(b.ChevronRight,{className:"h-3 w-3 text-muted-foreground"}),i.href&&a<t.length-1?e.jsx("a",{href:i.href,className:"text-muted-foreground transition-fast hover:text-foreground",children:i.label}):e.jsx("span",{className:"text-foreground font-medium",children:i.label})]},a))}),e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(n)}})]})},fe=[{id:"50gb",storage:"50 GB",monthlyPrice:1.29,yearlyPrice:.99,hidden:!0,features:["10.000 Fotos, 4h Videomaterial","Fotos und Dokumente sichern und teilen","Hoher deutscher Datenschutz","Automatische Synchronisation"],ctaLabel:"Zum Angebot",ctaHref:"#"},{id:"100gb",storage:"100 GB",monthlyPrice:2.49,yearlyPrice:1.99,features:["20.000 Fotos, 8h Videomaterial","Fotos und Dokumente sichern und teilen","Hoher deutscher Datenschutz","Premium-Kunden-Vorteil: 25% günstiger"],ctaLabel:"Zum Angebot",ctaHref:"#"},{id:"200gb",storage:"200 GB",monthlyPrice:3.49,yearlyPrice:2.99,features:["40.000 Fotos, 16h Videomaterial","Fotos und Dokumente sichern und teilen","Hoher deutscher Datenschutz","Premium-Kunden-Vorteil: 17% günstiger"],ctaLabel:"Zum Angebot",ctaHref:"#"},{id:"500gb",storage:"500 GB",monthlyPrice:5.49,yearlyPrice:4.99,hidden:!0,features:["100.000 Fotos, 40h Videomaterial","Fotos und Dokumente sichern und teilen","Hoher deutscher Datenschutz","Premium-Kunden-Vorteil: 10% günstiger"],ctaLabel:"Zum Angebot",ctaHref:"#"},{id:"1tb",storage:"1 TB",monthlyPrice:10.99,yearlyPrice:9.99,features:["200.000 Fotos, 80h Videomaterial","Fotos und Dokumente sichern und teilen","Hoher deutscher Datenschutz","Premium-Kunden-Vorteil: 10% günstiger"],badge:"Meistgewählt",ctaLabel:"Zum Angebot",ctaHref:"#"}],ge=({heading:t="Cloud-Speicher erweitern",subheading:s="Wählen Sie den passenden Tarif für Ihre Bedürfnisse",plans:r=fe,defaultOpenId:n="100gb",defaultBilling:i="yearly",className:a,...o})=>{const[u,m]=h.useState(n),[g,x]=h.useState(i),[N,C]=h.useState(!1),E=r.some(d=>d.hidden),K=N?r:r.filter(d=>!d.hidden),W=d=>{m(p=>p===d?null:d)},G=d=>g==="yearly"?d.yearlyPrice:d.monthlyPrice,Z=d=>{const p=d.monthlyPrice-d.yearlyPrice;return p>0?Math.round(p/d.monthlyPrice*100):0};return e.jsx("section",{className:l("section-padding",a),...o,children:e.jsxs("div",{className:"container-narrow",children:[t&&e.jsx(c,{variant:"h2",className:"mb-2 text-center",children:t}),s&&e.jsx(c,{variant:"body",tone:"muted",className:"mb-8 text-center",children:s}),e.jsx("div",{className:"flex items-center justify-center mb-8",children:e.jsxs("div",{className:"inline-flex rounded-xl border border-border bg-muted p-1 gap-1",children:[e.jsx("button",{onClick:()=>x("monthly"),className:l("rounded-lg px-5 py-2.5 font-body text-sm font-medium transition-fast",g==="monthly"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"Monatlich kündbar"}),e.jsx("button",{onClick:()=>x("yearly"),className:l("rounded-lg px-5 py-2.5 font-body text-sm font-medium transition-fast",g==="yearly"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"12 Monate Laufzeit"})]})}),e.jsx("div",{className:"space-y-3",children:K.map(d=>{const p=u===d.id,J=G(d),B=Z(d);return e.jsxs("div",{className:l("rounded-2xl border transition-fast overflow-hidden",p?"border-primary bg-card shadow-md ring-1 ring-primary/20":"border-border bg-card hover:border-primary/40 hover:shadow-sm"),children:[e.jsxs("div",{className:"flex items-center gap-4 px-5 py-4 cursor-pointer select-none",onClick:()=>W(d.id),children:[e.jsx("div",{className:l("flex h-10 w-10 shrink-0 items-center justify-center rounded-xl transition-fast",p?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground"),children:e.jsx(b.Cloud,{className:"h-5 w-5"})}),e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsx(c,{variant:"h4",className:"whitespace-nowrap",children:d.storage}),d.badge&&e.jsxs("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",children:[e.jsx(b.Star,{className:"h-3 w-3"}),d.badge]})]}),e.jsxs("div",{className:"ml-auto flex items-center gap-3",children:[e.jsxs("div",{className:"text-right",children:[e.jsxs("span",{className:"font-display text-xl font-bold text-foreground",children:[J.toFixed(2).replace(".",",")," €"]}),e.jsx("span",{className:"text-sm text-muted-foreground",children:"/Monat"})]}),!p&&d.ctaHref&&e.jsx("a",{href:d.ctaHref,onClick:S=>S.stopPropagation(),className:"hidden sm:inline-flex",children:e.jsx(f,{size:"sm",variant:"outline",children:d.ctaLabel||"Auswählen"})}),e.jsx(b.ChevronDown,{className:l("h-5 w-5 shrink-0 text-muted-foreground transition-transform duration-200",p&&"rotate-180")})]})]}),e.jsx("div",{className:l("grid transition-all duration-200 ease-in-out",p?"grid-rows-[1fr]":"grid-rows-[0fr]"),children:e.jsx("div",{className:"overflow-hidden",children:e.jsxs("div",{className:"px-5 pb-5 pt-1",children:[g==="monthly"&&B>0&&e.jsxs(c,{variant:"body-sm",className:"mb-4 text-primary font-medium",children:["Sparen Sie ",B,"% im Jahresabo"]}),e.jsx("ul",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2 mb-5",children:d.features.map((S,L)=>e.jsxs("li",{className:"flex items-start gap-2 font-body text-sm text-muted-foreground",children:[e.jsx(b.Check,{className:"h-4 w-4 mt-0.5 shrink-0 text-primary"}),S]},L))}),d.ctaHref&&e.jsx("a",{href:d.ctaHref,children:e.jsx(f,{className:"w-full sm:w-auto",size:"lg",children:d.ctaLabel||"Jetzt buchen"})})]})})})]},d.id)})}),E&&e.jsx("div",{className:"flex justify-center mt-4",children:e.jsxs(f,{variant:"ghost",size:"sm",onClick:()=>C(d=>!d),className:"gap-1.5 text-muted-foreground",children:[N?"Weniger Tarife":"Weitere Tarife",e.jsx(b.ChevronDown,{className:l("h-4 w-4 transition-transform duration-200",N&&"rotate-180")})]})}),e.jsx(c,{variant:"caption",className:"mt-6 block text-center",children:"Alle Preise inkl. MwSt. Kündigung bis 4 Wochen zum Ende der Vertragslaufzeit möglich."})]})})},j=[{id:"default",name:"Core Framework"},{id:"webde",name:"WEB.DE"},{id:"gmx",name:"GMX"}],I=h.createContext({brand:j[0],setBrand:()=>{}}),_=()=>h.useContext(I),pe=({children:t,defaultBrand:s="default"})=>{const[r,n]=h.useState(j.find(a=>a.id===s)||j[0]),i=h.useCallback(a=>{const o=j.find(u=>u.id===a);o&&n(o)},[]);return h.useEffect(()=>{const a=document.documentElement;return r.id==="default"?a.removeAttribute("data-brand"):a.setAttribute("data-brand",r.id),()=>a.removeAttribute("data-brand")},[r]),e.jsx(I.Provider,{value:{brand:r,setBrand:i},children:t})},be=({className:t})=>{const{brand:s,setBrand:r}=_();return e.jsx("div",{className:l("flex items-center gap-1 rounded-xl border border-border bg-muted p-1",t),children:j.map(n=>e.jsx("button",{onClick:()=>r(n.id),className:l("rounded-lg px-3 py-1.5 font-body text-xs font-medium transition-fast",s.id===n.id?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-background"),children:n.name},n.id))})};exports.Badge=D;exports.BrandProvider=pe;exports.BrandSwitcher=be;exports.Breadcrumb=xe;exports.ContactForm=me;exports.ContentCard=ae;exports.FaqAccordion=ie;exports.Footer=he;exports.Hero=te;exports.ImageTextTeaser=se;exports.Navbar=ue;exports.SearchBar=O;exports.TariffSelect=ge;exports.Typography=c;exports.brands=j;exports.useBrand=_;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","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","../node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-label/dist/index.mjs","../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/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 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 on the right side */\n backgroundImage?: string;\n /** Mobile: tall portrait image with cat centered */\n backgroundImageMobile?: string;\n imageAlt?: string;\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 imageAlt = \"\",\n className,\n ...props\n}) => {\n return (\n <section className={cn(\"relative overflow-hidden\", className)} {...props}>\n\n {/* ═══ DESKTOP / TABLET (md+): fullscreen image, text left ═══ */}\n <div className=\"hidden md:flex relative min-h-[420px] md:min-h-[420px] lg:min-h-[600px]\">\n {/* Fullscreen background image */}\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 )}\n {/* Gradient overlay: strong left for text, transparent right for cat */}\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 image, text top, cat middle, buttons bottom ═══ */}\n <div className=\"block md:hidden relative min-h-[85vh] flex flex-col\">\n {/* Background image */}\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 )}\n {/* Gradient overlays: stronger at top and bottom for text readability */}\n <div className=\"absolute inset-0 bg-gradient-to-b from-black/70 via-transparent to-black/80\" />\n\n {/* Content layered over image */}\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 – cat is visible in the image */}\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","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\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 { 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","Comp","Slot","Hero","headline","headlineMobile","subheadline","subheadlineMobile","ctaLabel","ctaHref","secondaryCtaLabel","secondaryCtaHref","backgroundImage","backgroundImageMobile","imageAlt","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","NODES","Primitive","primitive","node","createSlot","Node","forwardedRef","primitiveProps","NAME","Label","event","_a","Root","labelVariants","LabelPrimitive.Root","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","brands","BrandContext","createContext","useBrand","useContext","BrandProvider","defaultBrand","setBrandState","b","setBrand","useCallback","found","useEffect","root","BrandSwitcher"],"mappings":"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","x_google_ignoreList":[11,12]}