@aws505/sheetsite 1.0.2 → 1.0.4

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/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __esm = (fn, res) => function __init() {
7
9
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
@@ -18,6 +20,14 @@ var __copyProps = (to, from, except, desc) => {
18
20
  }
19
21
  return to;
20
22
  };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
21
31
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
32
 
23
33
  // src/theme/colors.ts
@@ -3894,6 +3904,7 @@ var import_jsx_runtime2 = require("react/jsx-runtime");
3894
3904
  var defaultNavigation = [
3895
3905
  { label: "Home", href: "/" },
3896
3906
  { label: "Services", href: "/#services" },
3907
+ { label: "Gallery", href: "/#gallery" },
3897
3908
  { label: "Hours", href: "/#hours" },
3898
3909
  { label: "Reviews", href: "/#reviews" },
3899
3910
  { label: "FAQ", href: "/#faq" }
@@ -4152,6 +4163,15 @@ function Footer({
4152
4163
 
4153
4164
  // src/components/sections/Hero.tsx
4154
4165
  var import_jsx_runtime4 = require("react/jsx-runtime");
4166
+ var defaultTrustSignals = {
4167
+ salon: ["Expert Stylists", "Walk-Ins Welcome", "Quality Products"],
4168
+ restaurant: ["Fresh Ingredients", "Family Recipes", "Friendly Service"],
4169
+ repair: ["Certified Technicians", "Honest Estimates", "Quality Parts"],
4170
+ tailor: ["Expert Craftsmanship", "Perfect Fit Guaranteed", "Quick Turnaround"],
4171
+ professional: ["Quality Work", "Fair Prices", "Fast Service"],
4172
+ retail: ["Quality Products", "Great Selection", "Friendly Service"],
4173
+ default: ["Quality Work", "Fair Prices", "Fast Service"]
4174
+ };
4155
4175
  function Hero({
4156
4176
  business,
4157
4177
  variant = "centered",
@@ -4160,8 +4180,11 @@ function Hero({
4160
4180
  todayHours,
4161
4181
  backgroundImage,
4162
4182
  overlay = true,
4163
- className = ""
4183
+ className = "",
4184
+ trustSignals
4164
4185
  }) {
4186
+ const businessType = business.type || "default";
4187
+ const signals = trustSignals || defaultTrustSignals[businessType] || defaultTrustSignals.default;
4165
4188
  const bgStyle = backgroundImage ? { backgroundImage: `url(${backgroundImage})` } : void 0;
4166
4189
  const handleCallClick = () => {
4167
4190
  if (business.phone) {
@@ -4241,8 +4264,8 @@ function Hero({
4241
4264
  ) }),
4242
4265
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-4", children: business.name }),
4243
4266
  business.tagline && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-xl md:text-2xl text-white/90 mb-6", children: business.tagline }),
4244
- business.aboutShort && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-lg text-white/80 mb-8 max-w-xl", children: business.aboutShort }),
4245
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex flex-wrap justify-center gap-4 mb-8", children: ["Quality Work", "Fair Prices", "Fast Service"].map((signal) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center text-white/90", children: [
4267
+ business.aboutShort && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: `text-lg text-white/80 mb-8 max-w-xl ${variant === "centered" ? "mx-auto" : ""}`, children: business.aboutShort }),
4268
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: `flex flex-wrap gap-4 mb-8 ${variant === "centered" ? "justify-center" : ""}`, children: signals.map((signal) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center text-white/90", children: [
4246
4269
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { className: "w-5 h-5 text-accent-400 mr-2", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
4247
4270
  "path",
4248
4271
  {
@@ -4316,7 +4339,7 @@ function Services({
4316
4339
  4: "md:grid-cols-2 lg:grid-cols-4"
4317
4340
  };
4318
4341
  if (variant === "list") {
4319
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4342
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4320
4343
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeader, { title, subtitle }),
4321
4344
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "max-w-3xl mx-auto divide-y divide-gray-200", children: displayedServices.map((service) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
4322
4345
  ServiceListItem,
@@ -4330,7 +4353,7 @@ function Services({
4330
4353
  ] }) });
4331
4354
  }
4332
4355
  if (variant === "minimal") {
4333
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4356
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4334
4357
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeader, { title, subtitle }),
4335
4358
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
4336
4359
  ServiceMinimalCard,
@@ -4342,7 +4365,7 @@ function Services({
4342
4365
  )) })
4343
4366
  ] }) });
4344
4367
  }
4345
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4368
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 scroll-mt-20 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4346
4369
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeader, { title, subtitle }),
4347
4370
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
4348
4371
  ServiceCard,
@@ -4425,7 +4448,7 @@ function Testimonials({
4425
4448
  2: "md:grid-cols-2 max-w-4xl mx-auto",
4426
4449
  3: "md:grid-cols-2 lg:grid-cols-3"
4427
4450
  };
4428
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "container mx-auto px-4", children: [
4451
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "container mx-auto px-4", children: [
4429
4452
  /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "text-center mb-12", children: [
4430
4453
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4431
4454
  subtitle && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
@@ -4545,18 +4568,18 @@ function FAQ({
4545
4568
  }
4546
4569
  };
4547
4570
  if (variant === "cards") {
4548
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4571
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4549
4572
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionHeader2, { title, subtitle }),
4550
4573
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "grid md:grid-cols-2 gap-6 max-w-4xl mx-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(FAQCard, { item }, item.id || item.question)) })
4551
4574
  ] }) });
4552
4575
  }
4553
4576
  if (variant === "simple") {
4554
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4577
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4555
4578
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionHeader2, { title, subtitle }),
4556
4579
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "max-w-3xl mx-auto space-y-8", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(FAQSimple, { item }, item.id || item.question)) })
4557
4580
  ] }) });
4558
4581
  }
4559
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4582
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 scroll-mt-20 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4560
4583
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionHeader2, { title, subtitle }),
4561
4584
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "max-w-3xl mx-auto", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
4562
4585
  FAQAccordionItem,
@@ -4768,53 +4791,155 @@ function Gallery({
4768
4791
  columns = 3,
4769
4792
  variant = "grid",
4770
4793
  showCaptions = true,
4794
+ enableLightbox = true,
4771
4795
  limit,
4772
- className = ""
4796
+ className = "",
4797
+ id = "gallery"
4773
4798
  }) {
4774
4799
  const displayedItems = limit ? items.slice(0, limit) : items;
4775
4800
  const [failedImages, setFailedImages] = (0, import_react3.useState)(/* @__PURE__ */ new Set());
4776
- const handleImageError = (id) => {
4777
- setFailedImages((prev) => new Set(prev).add(id));
4801
+ const [lightboxIndex, setLightboxIndex] = (0, import_react3.useState)(null);
4802
+ const handleImageError = (id2) => {
4803
+ setFailedImages((prev) => new Set(prev).add(id2));
4778
4804
  };
4779
4805
  const gridCols = {
4780
4806
  2: "grid-cols-1 sm:grid-cols-2",
4781
4807
  3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
4782
4808
  4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
4783
4809
  };
4784
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "container mx-auto px-4", children: [
4785
- (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "text-center mb-12", children: [
4786
- title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4787
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
4810
+ const openLightbox = (index) => {
4811
+ if (enableLightbox) {
4812
+ setLightboxIndex(index);
4813
+ }
4814
+ };
4815
+ const closeLightbox = () => setLightboxIndex(null);
4816
+ const goToPrevious = () => {
4817
+ if (lightboxIndex !== null) {
4818
+ setLightboxIndex(lightboxIndex === 0 ? displayedItems.length - 1 : lightboxIndex - 1);
4819
+ }
4820
+ };
4821
+ const goToNext = () => {
4822
+ if (lightboxIndex !== null) {
4823
+ setLightboxIndex(lightboxIndex === displayedItems.length - 1 ? 0 : lightboxIndex + 1);
4824
+ }
4825
+ };
4826
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: [
4827
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "container mx-auto px-4", children: [
4828
+ (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "text-center mb-12", children: [
4829
+ title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4830
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
4831
+ ] }),
4832
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: `grid gap-4 ${gridCols[columns]}`, children: displayedItems.map((item, index) => {
4833
+ const itemId = item.id || item.imageUrl;
4834
+ const hasFailed = failedImages.has(itemId);
4835
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4836
+ "div",
4837
+ {
4838
+ className: `group relative aspect-square overflow-hidden rounded-lg bg-gray-100 ${enableLightbox ? "cursor-pointer" : ""}`,
4839
+ onClick: () => openLightbox(index),
4840
+ role: enableLightbox ? "button" : void 0,
4841
+ tabIndex: enableLightbox ? 0 : void 0,
4842
+ onKeyDown: enableLightbox ? (e) => e.key === "Enter" && openLightbox(index) : void 0,
4843
+ children: hasFailed ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute inset-0 flex items-center justify-center text-gray-400", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "Image unavailable" }) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
4844
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4845
+ "img",
4846
+ {
4847
+ src: item.imageUrl,
4848
+ alt: item.alt || "",
4849
+ loading: "lazy",
4850
+ className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",
4851
+ onError: () => handleImageError(itemId)
4852
+ }
4853
+ ),
4854
+ enableLightbox && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute inset-0 bg-black/30 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-10 h-10 text-white", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7" }) }) }),
4855
+ showCaptions && item.caption && !enableLightbox && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute bottom-0 left-0 right-0 p-4", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-white text-sm", children: item.caption }) }) })
4856
+ ] })
4857
+ },
4858
+ itemId
4859
+ );
4860
+ }) })
4788
4861
  ] }),
4789
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: `grid gap-4 ${gridCols[columns]}`, children: displayedItems.map((item) => {
4790
- const itemId = item.id || item.imageUrl;
4791
- const hasFailed = failedImages.has(itemId);
4792
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4793
- "div",
4794
- {
4795
- className: "group relative aspect-square overflow-hidden rounded-lg bg-gray-100",
4796
- children: hasFailed ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute inset-0 flex items-center justify-center text-gray-400", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "Image unavailable" }) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
4797
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4798
- "img",
4799
- {
4800
- src: item.imageUrl,
4801
- alt: item.alt || "",
4802
- loading: "lazy",
4803
- className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",
4804
- onError: () => handleImageError(itemId)
4805
- }
4806
- ),
4807
- showCaptions && item.caption && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute bottom-0 left-0 right-0 p-4", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-white text-sm", children: item.caption }) }) })
4862
+ enableLightbox && lightboxIndex !== null && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4863
+ "div",
4864
+ {
4865
+ className: "fixed inset-0 z-50 bg-black/90 flex items-center justify-center",
4866
+ onClick: closeLightbox,
4867
+ children: [
4868
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4869
+ "button",
4870
+ {
4871
+ onClick: closeLightbox,
4872
+ className: "absolute top-4 right-4 text-white hover:text-gray-300 transition-colors z-10",
4873
+ "aria-label": "Close lightbox",
4874
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-8 h-8", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
4875
+ }
4876
+ ),
4877
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4878
+ "button",
4879
+ {
4880
+ onClick: (e) => {
4881
+ e.stopPropagation();
4882
+ goToPrevious();
4883
+ },
4884
+ className: "absolute left-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10",
4885
+ "aria-label": "Previous image",
4886
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-10 h-10", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
4887
+ }
4888
+ ),
4889
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4890
+ "button",
4891
+ {
4892
+ onClick: (e) => {
4893
+ e.stopPropagation();
4894
+ goToNext();
4895
+ },
4896
+ className: "absolute right-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10",
4897
+ "aria-label": "Next image",
4898
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-10 h-10", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
4899
+ }
4900
+ ),
4901
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4902
+ "div",
4903
+ {
4904
+ className: "max-w-5xl max-h-[85vh] mx-4",
4905
+ onClick: (e) => e.stopPropagation(),
4906
+ children: [
4907
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4908
+ "img",
4909
+ {
4910
+ src: displayedItems[lightboxIndex].imageUrl,
4911
+ alt: displayedItems[lightboxIndex].alt || "",
4912
+ className: "max-w-full max-h-[85vh] object-contain"
4913
+ }
4914
+ ),
4915
+ showCaptions && displayedItems[lightboxIndex].caption && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-white text-center mt-4 text-lg", children: displayedItems[lightboxIndex].caption })
4916
+ ]
4917
+ }
4918
+ ),
4919
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 text-white text-sm", children: [
4920
+ lightboxIndex + 1,
4921
+ " / ",
4922
+ displayedItems.length
4808
4923
  ] })
4809
- },
4810
- itemId
4811
- );
4812
- }) })
4813
- ] }) });
4924
+ ]
4925
+ }
4926
+ )
4927
+ ] });
4814
4928
  }
4815
4929
 
4816
- // src/components/ui/Button.tsx
4930
+ // src/components/sections/Menu.tsx
4931
+ var import_react4 = require("react");
4817
4932
  var import_jsx_runtime10 = require("react/jsx-runtime");
4933
+
4934
+ // src/components/sections/TrustBadges.tsx
4935
+ var import_jsx_runtime11 = require("react/jsx-runtime");
4936
+
4937
+ // src/components/sections/BeforeAfter.tsx
4938
+ var import_react5 = require("react");
4939
+ var import_jsx_runtime12 = require("react/jsx-runtime");
4940
+
4941
+ // src/components/ui/Button.tsx
4942
+ var import_jsx_runtime13 = require("react/jsx-runtime");
4818
4943
  function getButtonClasses(props) {
4819
4944
  const { variant = "primary", size = "md", fullWidth, disabled } = props;
4820
4945
  const baseClasses = [
@@ -4856,16 +4981,16 @@ function Button({
4856
4981
  ...props
4857
4982
  }) {
4858
4983
  const classes = getButtonClasses({ variant, size, fullWidth, disabled: disabled || loading });
4859
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4984
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4860
4985
  "button",
4861
4986
  {
4862
4987
  className: `${classes} ${className}`,
4863
4988
  disabled: disabled || loading,
4864
4989
  ...props,
4865
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LoadingSpinner, { size }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
4866
- leftIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "mr-2", children: leftIcon }),
4990
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(LoadingSpinner, { size }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
4991
+ leftIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "mr-2", children: leftIcon }),
4867
4992
  children,
4868
- rightIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "ml-2", children: rightIcon })
4993
+ rightIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "ml-2", children: rightIcon })
4869
4994
  ] })
4870
4995
  }
4871
4996
  );
@@ -4876,7 +5001,7 @@ function LoadingSpinner({ size }) {
4876
5001
  md: "w-5 h-5",
4877
5002
  lg: "w-6 h-6"
4878
5003
  };
4879
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
5004
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
4880
5005
  "svg",
4881
5006
  {
4882
5007
  className: `animate-spin ${sizeClasses[size || "md"]}`,
@@ -4884,7 +5009,7 @@ function LoadingSpinner({ size }) {
4884
5009
  fill: "none",
4885
5010
  viewBox: "0 0 24 24",
4886
5011
  children: [
4887
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
5012
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4888
5013
  "circle",
4889
5014
  {
4890
5015
  className: "opacity-25",
@@ -4895,7 +5020,7 @@ function LoadingSpinner({ size }) {
4895
5020
  strokeWidth: "4"
4896
5021
  }
4897
5022
  ),
4898
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
5023
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4899
5024
  "path",
4900
5025
  {
4901
5026
  className: "opacity-75",
@@ -4918,15 +5043,15 @@ function ButtonLink({
4918
5043
  ...props
4919
5044
  }) {
4920
5045
  const classes = getButtonClasses({ variant, size, fullWidth, disabled: false });
4921
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("a", { className: `${classes} ${className}`, ...props, children: [
4922
- leftIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "mr-2", children: leftIcon }),
5046
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("a", { className: `${classes} ${className}`, ...props, children: [
5047
+ leftIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "mr-2", children: leftIcon }),
4923
5048
  children,
4924
- rightIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "ml-2", children: rightIcon })
5049
+ rightIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "ml-2", children: rightIcon })
4925
5050
  ] });
4926
5051
  }
4927
5052
 
4928
5053
  // src/components/ui/Card.tsx
4929
- var import_jsx_runtime11 = require("react/jsx-runtime");
5054
+ var import_jsx_runtime14 = require("react/jsx-runtime");
4930
5055
  function getCardClasses(props) {
4931
5056
  const { variant = "default", padding = "md", hover = false } = props;
4932
5057
  const baseClasses = ["rounded-lg", "overflow-hidden"];
@@ -4959,7 +5084,7 @@ function Card({
4959
5084
  ...props
4960
5085
  }) {
4961
5086
  const classes = getCardClasses({ variant, padding, hover });
4962
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `${classes} ${className}`, ...props, children });
5087
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `${classes} ${className}`, ...props, children });
4963
5088
  }
4964
5089
  function CardHeader({
4965
5090
  title,
@@ -4969,13 +5094,13 @@ function CardHeader({
4969
5094
  className = "",
4970
5095
  ...props
4971
5096
  }) {
4972
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: `flex items-start justify-between ${className}`, ...props, children: [
4973
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { children: [
4974
- title && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h3", { className: "text-lg font-semibold text-gray-900", children: title }),
4975
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "mt-1 text-sm text-gray-500", children: subtitle }),
5097
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: `flex items-start justify-between ${className}`, ...props, children: [
5098
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
5099
+ title && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h3", { className: "text-lg font-semibold text-gray-900", children: title }),
5100
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "mt-1 text-sm text-gray-500", children: subtitle }),
4976
5101
  children
4977
5102
  ] }),
4978
- action && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex-shrink-0 ml-4", children: action })
5103
+ action && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex-shrink-0 ml-4", children: action })
4979
5104
  ] });
4980
5105
  }
4981
5106
  function CardBody({
@@ -4983,14 +5108,14 @@ function CardBody({
4983
5108
  className = "",
4984
5109
  ...props
4985
5110
  }) {
4986
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `mt-4 ${className}`, ...props, children });
5111
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `mt-4 ${className}`, ...props, children });
4987
5112
  }
4988
5113
  function CardFooter({
4989
5114
  children,
4990
5115
  className = "",
4991
5116
  ...props
4992
5117
  }) {
4993
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `mt-4 pt-4 border-t border-gray-100 ${className}`, ...props, children });
5118
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `mt-4 pt-4 border-t border-gray-100 ${className}`, ...props, children });
4994
5119
  }
4995
5120
  function CardImage({
4996
5121
  aspectRatio = "video",
@@ -5004,7 +5129,7 @@ function CardImage({
5004
5129
  wide: "aspect-[2/1]",
5005
5130
  auto: ""
5006
5131
  };
5007
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
5132
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
5008
5133
  "img",
5009
5134
  {
5010
5135
  className: `w-full h-full object-cover ${className}`,
@@ -5014,6 +5139,14 @@ function CardImage({
5014
5139
  ) });
5015
5140
  }
5016
5141
 
5142
+ // src/components/ui/AnimatedSection.tsx
5143
+ var import_react6 = __toESM(require("react"));
5144
+ var import_jsx_runtime15 = require("react/jsx-runtime");
5145
+
5146
+ // src/components/ui/FloatingClaimBanner.tsx
5147
+ var import_react7 = require("react");
5148
+ var import_jsx_runtime16 = require("react/jsx-runtime");
5149
+
5017
5150
  // src/seo/index.ts
5018
5151
  function generateMetadata(business, pageTitle, pageDescription, options = {}) {
5019
5152
  const { titleTemplate = "%s", baseUrl } = options;