import { useQuery, queryOptions, QueryClientProvider, QueryClient } from "@tanstack/react-query";
import { Link, useNavigate, useRouterState, createRootRouteWithContext, useRouter, Outlet, HeadContent, Scripts, createFileRoute, lazyRouteComponent, redirect, notFound, createRouter } from "@tanstack/react-router";
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
import * as React from "react";
import { X, Search, Truck, Phone, MessageCircle, ChevronDown, FileText, Menu, Mail, MapPin } from "lucide-react";
import { Slot } from "@radix-ui/react-slot";
import { cva } from "class-variance-authority";
import { clsx } from "clsx";
import { twMerge } from "tailwind-merge";
import { Command as Command$1 } from "cmdk";
import * as DialogPrimitive from "@radix-ui/react-dialog";
import { createClient } from "@supabase/supabase-js";
import { Toaster as Toaster$1 } from "sonner";
const appCss = "/assets/styles-BIz4a8Bj.css";
const logo = "/assets/logo-8UdovybS.png";
function Logo({ className = "h-14 w-auto" }) {
  return /* @__PURE__ */ jsx(Link, { to: "/", className: "flex items-center", "aria-label": "Aquadent Supplies — Home", children: /* @__PURE__ */ jsx("img", { src: logo, alt: "Aquadent Supplies", className, width: 400, height: 80 }) });
}
function cn(...inputs) {
  return twMerge(clsx(inputs));
}
const buttonVariants = cva(
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
  {
    variants: {
      variant: {
        default: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
        destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
        outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
        secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
        ghost: "hover:bg-accent hover:text-accent-foreground",
        link: "text-primary underline-offset-4 hover:underline"
      },
      size: {
        default: "h-9 px-4 py-2",
        sm: "h-8 rounded-md px-3 text-xs",
        lg: "h-10 rounded-md px-8",
        icon: "h-9 w-9"
      }
    },
    defaultVariants: {
      variant: "default",
      size: "default"
    }
  }
);
const Button = React.forwardRef(
  ({ className, variant, size, asChild = false, ...props }, ref) => {
    const Comp = asChild ? Slot : "button";
    return /* @__PURE__ */ jsx(Comp, { className: cn(buttonVariants({ variant, size, className })), ref, ...props });
  }
);
Button.displayName = "Button";
const Ctx = React.createContext(null);
const KEY = "aquadent.quote.v1";
function QuoteProvider({ children }) {
  const [items, setItems] = React.useState([]);
  React.useEffect(() => {
    try {
      const raw = localStorage.getItem(KEY);
      if (raw) {
        const ids = JSON.parse(raw);
        Promise.resolve().then(() => catalog).then(({ productsBySlug: productsBySlug2 }) => {
          const next = [];
          for (const i of ids) {
            const product = productsBySlug2[i.id];
            if (product) next.push({ product, quantity: i.quantity });
          }
          setItems(next);
        });
      }
    } catch {
    }
  }, []);
  React.useEffect(() => {
    localStorage.setItem(
      KEY,
      JSON.stringify(items.map((i) => ({ id: i.product.id, quantity: i.quantity })))
    );
  }, [items]);
  const value = {
    items,
    add: (p, qty = 1) => setItems((prev) => {
      const i = prev.findIndex((x) => x.product.id === p.id);
      if (i >= 0) {
        const next = [...prev];
        next[i] = { ...next[i], quantity: next[i].quantity + qty };
        return next;
      }
      return [...prev, { product: p, quantity: qty }];
    }),
    remove: (id) => setItems((prev) => prev.filter((x) => x.product.id !== id)),
    setQty: (id, qty) => setItems(
      (prev) => prev.map((x) => x.product.id === id ? { ...x, quantity: Math.max(1, qty) } : x)
    ),
    clear: () => setItems([]),
    count: items.reduce((s, i) => s + i.quantity, 0),
    total: items.reduce((s, i) => s + i.quantity * i.product.price, 0)
  };
  return /* @__PURE__ */ jsx(Ctx.Provider, { value, children });
}
function useQuote() {
  const ctx = React.useContext(Ctx);
  if (!ctx) throw new Error("useQuote must be used inside QuoteProvider");
  return ctx;
}
const Dialog = DialogPrimitive.Root;
const DialogPortal = DialogPrimitive.Portal;
const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  DialogPrimitive.Overlay,
  {
    ref,
    className: cn(
      "fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
      className
    ),
    ...props
  }
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
const DialogContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
  /* @__PURE__ */ jsx(DialogOverlay, {}),
  /* @__PURE__ */ jsxs(
    DialogPrimitive.Content,
    {
      ref,
      className: cn(
        "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg",
        className
      ),
      ...props,
      children: [
        children,
        /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background cursor-pointer transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
          /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
          /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
        ] })
      ]
    }
  )
] }));
DialogContent.displayName = DialogPrimitive.Content.displayName;
const DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
DialogHeader.displayName = "DialogHeader";
const DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
  "div",
  {
    className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className),
    ...props
  }
);
DialogFooter.displayName = "DialogFooter";
const DialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  DialogPrimitive.Title,
  {
    ref,
    className: cn("text-lg font-semibold leading-none tracking-tight", className),
    ...props
  }
));
DialogTitle.displayName = DialogPrimitive.Title.displayName;
const DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  DialogPrimitive.Description,
  {
    ref,
    className: cn("text-sm text-muted-foreground", className),
    ...props
  }
));
DialogDescription.displayName = DialogPrimitive.Description.displayName;
const Command = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  Command$1,
  {
    ref,
    className: cn(
      "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
      className
    ),
    ...props
  }
));
Command.displayName = Command$1.displayName;
const CommandDialog = ({ children, ...props }) => {
  return /* @__PURE__ */ jsx(Dialog, { ...props, children: /* @__PURE__ */ jsx(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) }) });
};
const CommandInput = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
  /* @__PURE__ */ jsx(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
  /* @__PURE__ */ jsx(
    Command$1.Input,
    {
      ref,
      className: cn(
        "flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
        className
      ),
      ...props
    }
  )
] }));
CommandInput.displayName = Command$1.Input.displayName;
const CommandList = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  Command$1.List,
  {
    ref,
    className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className),
    ...props
  }
));
CommandList.displayName = Command$1.List.displayName;
const CommandEmpty = React.forwardRef((props, ref) => /* @__PURE__ */ jsx(Command$1.Empty, { ref, className: "py-6 text-center text-sm", ...props }));
CommandEmpty.displayName = Command$1.Empty.displayName;
const CommandGroup = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  Command$1.Group,
  {
    ref,
    className: cn(
      "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
      className
    ),
    ...props
  }
));
CommandGroup.displayName = Command$1.Group.displayName;
const CommandSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  Command$1.Separator,
  {
    ref,
    className: cn("-mx-1 h-px bg-border", className),
    ...props
  }
));
CommandSeparator.displayName = Command$1.Separator.displayName;
const CommandItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
  Command$1.Item,
  {
    ref,
    className: cn(
      "relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
      className
    ),
    ...props
  }
));
CommandItem.displayName = Command$1.Item.displayName;
const chairs = "/assets/cat-chairs-CxyjMO0k.jpg";
const ortho = "/assets/cat-orthodontics-Ys4vSyhe.jpg";
const implants = "/assets/cat-implants-0fbOu53d.jpg";
const prosthetics = "/assets/cat-prosthetics-Cg5xquSf.jpg";
const consumables = "/assets/cat-consumables-DD8oghkg.jpg";
const surgical = "/assets/cat-surgical-Bojbwka4.jpg";
const lab = "/assets/cat-laboratory-iDHcyhYH.jpg";
const whitening = "/assets/cat-whitening-D_heY-f4.jpg";
const clinical = "/assets/cat-clinical-DBLVtDnL.jpg";
const CATEGORY_IDS = [
  "dental-chairs",
  "orthodontics",
  "implants",
  "prosthetics",
  "consumables",
  "surgical-instruments",
  "laboratory-equipment",
  "whitening-kits",
  "clinical-materials"
];
const CATEGORIES = [
  {
    id: "dental-chairs",
    slug: "dental-chairs",
    name: "Dental Chairs & Units",
    image: chairs,
    title: "Dental Chairs & Units in Kenya | Aquadent Supplies",
    metaDescription: "Buy premium dental chairs and treatment units in Kenya — electric, programmable models with LED lights, delivery units and warranty. Nationwide delivery.",
    h1: "Dental Chairs & Units",
    intro: "Equip your clinic with reliable, ergonomic dental chairs designed for long clinical days. Aquadent supplies fully programmable electric dental units with LED operating lights, integrated delivery systems and assistant arms — installed and supported nationwide across Kenya.",
    highlights: [
      "Programmable electric chairs with memory positions",
      "LED operating lights with shadowless illumination",
      "Integrated delivery units and spittoons",
      "Installation, training and 1-year warranty"
    ],
    uses: [
      { t: "Private practices", d: "Single-chair clinics in Nairobi, Mombasa, Kisumu or Eldoret upgrading from manual units." },
      { t: "Hospitals & SACCOs", d: "Multi-chair fit-outs with consistent build quality and shared parts inventory." },
      { t: "Dental schools", d: "Training units that mirror real-world clinic workflows." }
    ],
    faqs: [
      { q: "Do you deliver dental chairs across Kenya?", a: "Yes — we ship from Eldoret to every county in Kenya and arrange installation in major cities." },
      { q: "Is installation included?", a: "Installation, on-site setup and operator training are included for chairs purchased through Aquadent." },
      { q: "What warranty do dental chairs come with?", a: "A 1-year structural warranty plus extended support on motors, upholstery and electronics." }
    ],
    keywords: ["dental chair Kenya", "dental unit Nairobi", "electric dental chair price Kenya"]
  },
  {
    id: "orthodontics",
    slug: "orthodontics",
    name: "Orthodontics",
    image: ortho,
    title: "Orthodontic Brackets, Wires & Kits in Kenya | Aquadent",
    metaDescription: "Shop MBT and Roth orthodontic brackets, NiTi & stainless wires, bands, modules and tools for Kenyan orthodontists. Authentic stock, fast delivery.",
    h1: "Orthodontics — Brackets, Wires & Kits",
    intro: "From bracket kits to arch wires, bands and elastomeric modules — we stock the orthodontic essentials Kenyan practitioners use every day. Reliable inventory, authentic brands, and chairside-friendly packaging.",
    highlights: [
      "MBT and Roth prescription bracket kits",
      "NiTi, stainless steel and beta-titanium wires",
      "Bands, buccal tubes and ligature modules",
      "Pliers and instruments for daily use"
    ],
    uses: [
      { t: "Fixed appliance therapy", d: "Complete kits for MBT 0.022 fixed appliance treatment." },
      { t: "Routine adjustments", d: "Modules, ligatures and replacement wires kept in stock." },
      { t: "Clinical training", d: "Educational kits for orthodontic residents and dental schools." }
    ],
    faqs: [
      { q: "Do you stock MBT 0.022 brackets?", a: "Yes — MBT 0.022 with hooks on 3, 4, 5 is a staple of our orthodontics line." },
      { q: "Can I order partial kits?", a: "Yes — bands, modules, wires and individual brackets are available as separates." }
    ],
    keywords: ["orthodontic brackets Kenya", "MBT 0.022 Nairobi", "orthodontic wires Kenya"]
  },
  {
    id: "implants",
    slug: "implants",
    name: "Implants",
    image: implants,
    title: "Dental Implants in Kenya — Titanium Implants & Abutments | Aquadent",
    metaDescription: "Grade-IV titanium dental implants with SLA surface, healing abutments and prosthetic components. Trusted implant systems for Kenyan clinics.",
    h1: "Dental Implants & Components",
    intro: "Predictable osseointegration starts with quality components. Aquadent stocks grade-IV titanium implants with sandblasted, large-grit, acid-etched surfaces — plus healing abutments, cover screws and prosthetic parts to support your full implant workflow.",
    highlights: [
      "Grade-IV commercially pure titanium",
      "SLA surface for rapid osseointegration",
      "Healing abutments and cover screws included",
      "Compatible prosthetic components"
    ],
    uses: [
      { t: "Single-tooth replacement", d: "Routine posterior and anterior single-implant cases." },
      { t: "Multi-unit restorations", d: "Bridges and partial restorations on implants." },
      { t: "Full-arch rehabilitation", d: "Components for hybrid and overdenture solutions." }
    ],
    faqs: [
      { q: "What surface treatment do your implants use?", a: "Sandblasted, large-grit, acid-etched (SLA) surface — the clinical standard for rapid osseointegration." },
      { q: "Are healing abutments included?", a: "Yes — every implant ships with a matched healing abutment." }
    ],
    keywords: ["dental implants Kenya", "titanium implant Nairobi", "implant abutment Kenya"]
  },
  {
    id: "prosthetics",
    slug: "prosthetics",
    name: "Prosthetics",
    image: prosthetics,
    title: "Dental Prosthetics — Dentures, Crowns & Bridges in Kenya | Aquadent",
    metaDescription: "Flexible dentures, crowns, bridges and prosthetic materials for Kenyan dental practices. Premium fabrication and metal-free options.",
    h1: "Dental Prosthetics",
    intro: "Whether you fabricate in-house or outsource, our prosthetic line covers flexible complete and partial dentures, crown & bridge work and the materials behind them. Hypoallergenic, natural-looking and built to last.",
    highlights: [
      "Flexible complete and partial dentures",
      "Metal-free, hypoallergenic resins",
      "Crown & bridge materials",
      "Made to precise measurements"
    ],
    uses: [
      { t: "Edentulous patients", d: "Comfortable, lightweight complete dentures, upper and lower." },
      { t: "Partial replacements", d: "Aesthetic flexible partials without metal clasps." },
      { t: "Fixed prosthetics", d: "Crown and bridge solutions for routine restorations." }
    ],
    faqs: [
      { q: "Are your dentures metal-free?", a: "Yes — our flexible dentures use hypoallergenic resin without metal frameworks." },
      { q: "Can I order single-jaw dentures?", a: "Yes — upper or lower jaws can be ordered individually or as a pair." }
    ],
    keywords: ["flexible dentures Kenya", "dental crown Nairobi", "prosthodontics Kenya"]
  },
  {
    id: "consumables",
    slug: "consumables",
    name: "Consumables",
    image: consumables,
    title: "Dental Consumables — GIC, Composites & Gloves in Kenya | Aquadent",
    metaDescription: "Glass ionomer cements, composites, gloves, masks, burs and the day-to-day consumables every Kenyan dental clinic needs. Bulk pricing available.",
    h1: "Dental Consumables",
    intro: "Keep your clinic stocked with reliable everyday consumables — glass ionomer cements, composite restoratives, gloves and PPE. We carry trusted global brands and offer practice-friendly bulk pricing.",
    highlights: [
      "3M Ketac and Prevest glass ionomers",
      "Nano-hybrid composite kits",
      "Powder-free nitrile examination gloves",
      "Burs, matrices and routine disposables"
    ],
    uses: [
      { t: "Restorative dentistry", d: "Composite and GIC restorations on permanent and primary teeth." },
      { t: "Infection control", d: "PPE and disposables to maintain a safe operatory." },
      { t: "Daily clinical workflow", d: "High-turnover items always in stock." }
    ],
    faqs: [
      { q: "Do you offer bulk discounts?", a: "Yes — multi-box and account pricing is available for clinics and hospitals." },
      { q: "Are your products genuine?", a: "All consumables are sourced directly from authorised distributors of trusted global manufacturers." }
    ],
    keywords: ["dental consumables Kenya", "glass ionomer Nairobi", "nitrile gloves Kenya"]
  },
  {
    id: "surgical-instruments",
    slug: "surgical-instruments",
    name: "Surgical Instruments",
    image: surgical,
    title: "Dental Surgical Instruments in Kenya | Aquadent Supplies",
    metaDescription: "Forceps, elevators, surgical extraction sets and oral surgery instruments — German stainless steel, autoclavable, lifetime structural warranty.",
    h1: "Surgical Instruments",
    intro: "Precision-forged surgical instruments built to last. Our extraction and oral surgery sets are made from German stainless steel, autoclavable and backed by a lifetime structural warranty.",
    highlights: [
      "German-grade stainless steel",
      "Autoclavable & corrosion-resistant",
      "Complete extraction sets",
      "Lifetime structural warranty"
    ],
    uses: [
      { t: "Routine extractions", d: "Upper and lower forceps for every quadrant." },
      { t: "Surgical extractions", d: "Elevators and luxators for complex cases." },
      { t: "Oral surgery", d: "Foundational instruments for surgical procedures." }
    ],
    faqs: [
      { q: "Are these instruments autoclavable?", a: "Yes — all surgical instruments tolerate standard steam autoclave cycles." },
      { q: "Do you sell individual instruments?", a: "Yes — instruments are available as complete sets or as singles." }
    ],
    keywords: ["dental forceps Kenya", "extraction set Nairobi", "oral surgery instruments Kenya"]
  },
  {
    id: "laboratory-equipment",
    slug: "laboratory-equipment",
    name: "Laboratory Equipment",
    image: lab,
    title: "Dental Laboratory Equipment in Kenya | Aquadent",
    metaDescription: "Model trimmers, lathes, vibrators and dental lab equipment for prosthetics and orthodontic model work. Built for Kenyan labs.",
    h1: "Dental Laboratory Equipment",
    intro: "Outfit your dental lab with hard-wearing equipment for model and prosthetic work. From wet model trimmers with diamond discs to vibrators, lathes and finishing tools — chosen for durability in busy Kenyan labs.",
    highlights: [
      "Wet model trimmers with diamond discs",
      "1/3 HP motors built for daily use",
      "Splash guards and water-spray systems",
      "Compatible with standard lab workflows"
    ],
    uses: [
      { t: "Prosthetic fabrication", d: "Trimming and finishing of denture models." },
      { t: "Orthodontic models", d: "Precise study and working models." },
      { t: "Crown & bridge work", d: "Foundation equipment for fixed prosthetic labs." }
    ],
    faqs: [
      { q: "Is installation supported in Nairobi?", a: "Yes — installation and operator orientation are arranged for major Kenyan cities." },
      { q: "What voltage do the machines run on?", a: "Our equipment ships in 220–240V variants suited to Kenyan mains supply." }
    ],
    keywords: ["dental lab equipment Kenya", "model trimmer Nairobi", "dental laboratory Kenya"]
  },
  {
    id: "whitening-kits",
    slug: "whitening-kits",
    name: "Whitening Kits",
    image: whitening,
    title: "Teeth Whitening Kits in Kenya — In-Office HP Gel | Aquadent",
    metaDescription: "In-office 35% hydrogen peroxide whitening kits with gingival barrier, shade guides and consumables. For Kenyan dental clinics.",
    h1: "Professional Teeth Whitening Kits",
    intro: "Deliver fast, visible aesthetic results with our professional in-office whitening systems. Each kit ships with high-strength HP gel, gingival barrier and shade guide so you can run sessions straight out of the box.",
    highlights: [
      "35% hydrogen peroxide gel",
      "Multi-syringe value packs",
      "Gingival barrier included",
      "Shade guide for case planning"
    ],
    uses: [
      { t: "In-office whitening", d: "Single-visit whitening sessions for adult patients." },
      { t: "Pre-wedding aesthetics", d: "Quick aesthetic enhancements before special events." },
      { t: "Combination treatment", d: "In-office boosting paired with at-home maintenance." }
    ],
    faqs: [
      { q: "How many sessions per kit?", a: "A typical 6-syringe kit covers multiple in-office whitening sessions, depending on patient case." },
      { q: "Is the gingival barrier included?", a: "Yes — every kit ships with a light-cure gingival barrier." }
    ],
    keywords: ["teeth whitening Kenya", "in-office whitening Nairobi", "HP gel Kenya"]
  },
  {
    id: "clinical-materials",
    slug: "clinical-materials",
    name: "Clinical Materials",
    image: clinical,
    title: "Clinical Dental Materials in Kenya — Composites & Trays | Aquadent",
    metaDescription: "Light-cure composites, impression trays, bonding agents and core clinical materials for Kenyan dental practices.",
    h1: "Clinical Materials",
    intro: "The clinical materials behind beautiful restorations — nano-hybrid composites, bonding systems and accurate impression trays. Stocked for everyday clinical work.",
    highlights: [
      "Nano-hybrid light-cure composites",
      "Multi-shade restorative kits",
      "Bonding agents included",
      "Anatomically contoured impression trays"
    ],
    uses: [
      { t: "Aesthetic restorations", d: "Polishable composites in a full shade range." },
      { t: "Impression-taking", d: "Autoclavable trays in upper and lower sizes." },
      { t: "Adhesive dentistry", d: "Bonding systems compatible with modern composites." }
    ],
    faqs: [
      { q: "Are impression trays autoclavable?", a: "Yes — our special impression trays are designed for repeated autoclave cycles." },
      { q: "Do composite kits include a bonding agent?", a: "Yes — our nano-hybrid composite kits ship with a compatible bonding agent." }
    ],
    keywords: ["dental composite Kenya", "impression trays Nairobi", "bonding agent Kenya"]
  }
];
const PRODUCTS = [
  {
    id: "special-trays",
    slug: "special-trays",
    name: "Special Impression Trays",
    lot: "—",
    price: 600,
    categoryId: "clinical-materials",
    image: clinical,
    short: "Custom-fit impression trays for accurate dental impressions.",
    description: "High-quality special trays designed for precise dental impressions. Ideal for prosthodontic work and orthodontic record-taking.",
    features: ["Autoclavable", "Anatomically contoured", "Upper & lower sizes"]
  },
  {
    id: "ketac-molar",
    slug: "ketac-molar",
    name: "Glass Ionomer (KETAC Molar)",
    lot: "11400989-122407",
    price: 7e3,
    categoryId: "consumables",
    image: consumables,
    badge: "Hot",
    short: "3M Ketac Molar — restorative glass ionomer cement.",
    description: "3M ESPE Ketac Molar Easymix glass ionomer restorative material. Excellent fluoride release, high compressive strength and easy mixing.",
    features: ["15g powder + 7.5ml liquid", "Fluoride releasing", "Tooth-coloured"]
  },
  {
    id: "micron-superior-2",
    slug: "micron-superior-2",
    name: "Micron Superior 2",
    lot: "PK2526169",
    price: 5e3,
    categoryId: "consumables",
    image: consumables,
    short: "Aesthetic fine particle glass ionomer restorative.",
    description: "Prevest DenPro Micron Superior aesthetic glass ionomer for permanent restorations. Superior aesthetics and bonding.",
    features: ["15g powder + 10ml liquid", "High translucency", "Long working time"]
  },
  {
    id: "flexible-dentures",
    slug: "flexible-dentures",
    name: "Complete Flexible Dentures (Both Jaws)",
    price: 11250,
    categoryId: "prosthetics",
    image: prosthetics,
    badge: "New",
    short: "Lightweight flexible complete dentures, upper and lower.",
    description: "Premium flexible complete dentures fabricated to precise measurements. Comfortable, durable, and natural-looking.",
    features: ["Both upper & lower", "Metal-free", "Hypoallergenic resin"]
  },
  {
    id: "dental-chair-unit",
    slug: "dental-chair-unit",
    name: "Premium Dental Chair Unit",
    sku: "DCU-A1",
    price: 385e3,
    categoryId: "dental-chairs",
    image: chairs,
    badge: "Hot",
    short: "Full-featured electric dental chair with LED light.",
    description: "Programmable electric dental chair with integrated delivery unit, LED operating light, assistant arm and ergonomic upholstery.",
    features: ["LED operating light", "Memory positions", "Built-in spittoon", "1-year warranty"]
  },
  {
    id: "ortho-bracket-kit",
    slug: "ortho-bracket-kit",
    name: "Orthodontic Bracket Kit (MBT 0.022)",
    sku: "ORT-MBT22",
    price: 4500,
    categoryId: "orthodontics",
    image: ortho,
    short: "Complete MBT prescription bracket kit, 20 pieces.",
    description: "Stainless steel MBT 0.022 slot bracket kit with hooks on 3,4,5. Laser-marked for chair-side identification.",
    features: ["20-piece kit", "MBT prescription", "Hooks on 3-4-5"]
  },
  {
    id: "implant-kit",
    slug: "implant-kit",
    name: "Titanium Dental Implant",
    sku: "IMP-TI-10",
    price: 12500,
    categoryId: "implants",
    image: implants,
    short: "Grade-IV titanium implant with healing abutment.",
    description: "High-purity grade-IV titanium dental implant. Sandblasted, large-grit, acid-etched surface for rapid osseointegration.",
    features: ["Grade IV titanium", "SLA surface", "Healing abutment included"]
  },
  {
    id: "surgical-extraction-set",
    slug: "surgical-extraction-set",
    name: "Surgical Extraction Set (8 pcs)",
    sku: "SUR-EXT-8",
    price: 18500,
    categoryId: "surgical-instruments",
    image: surgical,
    short: "German stainless steel extraction forceps & elevators.",
    description: "Eight-piece surgical extraction set, German stainless steel, autoclavable. Includes upper/lower forceps and elevators.",
    features: ["8 pieces", "German SS", "Lifetime structural warranty"]
  },
  {
    id: "whitening-kit",
    slug: "whitening-kit",
    name: "Professional Teeth Whitening Kit",
    sku: "WHT-PRO-6",
    price: 8500,
    categoryId: "whitening-kits",
    image: whitening,
    badge: "Sale",
    short: "In-office whitening kit with 35% HP gel, 6 syringes.",
    description: "Professional in-office whitening system. 35% hydrogen peroxide, gingival barrier and shade guide included.",
    features: ["35% HP", "6 × 3ml syringes", "Gingival barrier"]
  },
  {
    id: "lab-trimmer",
    slug: "lab-trimmer",
    name: "Dental Model Trimmer",
    sku: "LAB-MT-01",
    price: 65e3,
    categoryId: "laboratory-equipment",
    image: lab,
    short: "Heavy-duty wet model trimmer with diamond disc.",
    description: "Heavy-duty dental model trimmer with diamond wheel, splash guard and water spray. Ideal for prosthetics and orthodontic models.",
    features: ["Diamond disc", "Water spray", "1/3 HP motor"]
  },
  {
    id: "exam-gloves",
    slug: "exam-gloves",
    name: "Nitrile Exam Gloves (Box of 100)",
    sku: "CON-GLV-N",
    price: 1200,
    categoryId: "consumables",
    image: consumables,
    short: "Powder-free nitrile gloves, medical grade.",
    description: "Medical-grade powder-free nitrile examination gloves. Textured fingertips, ambidextrous, latex-free.",
    features: ["Powder-free", "Box of 100", "Sizes S–XL"]
  },
  {
    id: "composite-kit",
    slug: "composite-kit",
    name: "Nano-Hybrid Composite Kit",
    sku: "CLM-CMP-K",
    price: 9800,
    categoryId: "clinical-materials",
    image: clinical,
    short: "Light-cure composite, 8 shades + bonding agent.",
    description: "Nano-hybrid light-cure composite kit. Excellent polishability, low shrinkage and natural fluorescence.",
    features: ["8 shades", "Bonding agent included", "4g syringes"]
  }
];
const categoriesById = CATEGORIES.reduce(
  (acc, c) => {
    acc[c.id] = c;
    return acc;
  },
  {}
);
const categoriesBySlug = CATEGORIES.reduce(
  (acc, c) => {
    acc[c.slug] = c;
    return acc;
  },
  {}
);
const productsBySlug = PRODUCTS.reduce(
  (acc, p) => {
    acc[p.slug] = p;
    return acc;
  },
  {}
);
const productsByCategoryId = CATEGORY_IDS.reduce(
  (acc, id) => {
    acc[id] = [];
    return acc;
  },
  {}
);
for (const p of PRODUCTS) productsByCategoryId[p.categoryId].push(p);
function getCategoryBySlug(slug) {
  return categoriesBySlug[slug];
}
function getProductBySlug(slug) {
  return productsBySlug[slug];
}
function categoryOf(product) {
  return categoriesById[product.categoryId];
}
function formatKsh(n) {
  return "Ksh " + n.toLocaleString("en-KE", { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}
const catalog = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
  __proto__: null,
  CATEGORIES,
  CATEGORY_IDS,
  PRODUCTS,
  categoriesById,
  categoriesBySlug,
  categoryOf,
  formatKsh,
  getCategoryBySlug,
  getProductBySlug,
  productsByCategoryId,
  productsBySlug
}, Symbol.toStringTag, { value: "Module" }));
function SearchCommand() {
  const [open, setOpen] = React.useState(false);
  const navigate = useNavigate();
  React.useEffect(() => {
    function onKey(e) {
      if ((e.key === "k" || e.key === "K") && (e.metaKey || e.ctrlKey)) {
        e.preventDefault();
        setOpen((v) => !v);
      }
    }
    window.addEventListener("keydown", onKey);
    return () => window.removeEventListener("keydown", onKey);
  }, []);
  function go(to) {
    setOpen(false);
    to();
  }
  return /* @__PURE__ */ jsxs(Fragment, { children: [
    /* @__PURE__ */ jsxs(
      "button",
      {
        type: "button",
        onClick: () => setOpen(true),
        "aria-label": "Search products",
        className: "inline-flex h-10 items-center gap-2 rounded-md border border-border bg-card px-3 text-sm text-muted-foreground transition hover:border-brand-bright hover:text-foreground",
        children: [
          /* @__PURE__ */ jsx(Search, { className: "h-4 w-4" }),
          /* @__PURE__ */ jsx("span", { className: "hidden md:inline", children: "Search…" }),
          /* @__PURE__ */ jsx("kbd", { className: "hidden rounded border border-border bg-background px-1.5 py-0.5 font-mono text-[10px] font-medium text-muted-foreground md:inline", children: "⌘K" })
        ]
      }
    ),
    /* @__PURE__ */ jsxs(CommandDialog, { open, onOpenChange: setOpen, children: [
      /* @__PURE__ */ jsx(CommandInput, { placeholder: "Search products, categories, brands…" }),
      /* @__PURE__ */ jsxs(CommandList, { children: [
        /* @__PURE__ */ jsx(CommandEmpty, { children: "No results. Try a different keyword." }),
        /* @__PURE__ */ jsx(CommandGroup, { heading: "Products", children: PRODUCTS.map((p) => {
          const cat = categoryOf(p);
          return /* @__PURE__ */ jsxs(
            CommandItem,
            {
              value: `${p.name} ${p.short} ${p.sku ?? ""} ${cat.name}`,
              onSelect: () => go(
                () => navigate({ to: "/products/$slug", params: { slug: p.slug } })
              ),
              children: [
                /* @__PURE__ */ jsx(
                  "img",
                  {
                    src: p.image,
                    alt: "",
                    className: "mr-3 h-8 w-8 flex-none rounded object-cover"
                  }
                ),
                /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
                  /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-medium", children: p.name }),
                  /* @__PURE__ */ jsxs("p", { className: "truncate text-xs text-muted-foreground", children: [
                    cat.name,
                    " · ",
                    formatKsh(p.price)
                  ] })
                ] })
              ]
            },
            p.id
          );
        }) }),
        /* @__PURE__ */ jsx(CommandGroup, { heading: "Categories", children: CATEGORIES.map((c) => /* @__PURE__ */ jsxs(
          CommandItem,
          {
            value: `${c.name} category ${c.keywords.join(" ")}`,
            onSelect: () => go(
              () => navigate({ to: "/categories/$slug", params: { slug: c.slug } })
            ),
            children: [
              /* @__PURE__ */ jsx(Search, { className: "mr-3 h-4 w-4 text-muted-foreground" }),
              c.name
            ]
          },
          c.id
        )) })
      ] })
    ] })
  ] });
}
function createSupabaseClient() {
  const SUPABASE_URL = "https://jeeefwwpcfuydpqzdpta.supabase.co";
  const SUPABASE_PUBLISHABLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImplZWVmd3dwY2Z1eWRwcXpkcHRhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Nzk5NzM3MDgsImV4cCI6MjA5NTU0OTcwOH0.y4ktDOGEjm6IDn_P-PMlNzZA_XuSyY9WROfphrpg7CQ";
  return createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, {
    auth: {
      storage: typeof window !== "undefined" ? localStorage : void 0,
      persistSession: true,
      autoRefreshToken: true
    }
  });
}
let _supabase;
const supabase = new Proxy({}, {
  get(_, prop, receiver) {
    if (!_supabase) _supabase = createSupabaseClient();
    return Reflect.get(_supabase, prop, receiver);
  }
});
const SITE = {
  name: "Aquadent Supplies",
  tagline: "One Time, Every Time",
  phone: "+254796901382",
  phoneDisplay: "+254 796 901 382",
  whatsapp: "254796901382",
  email: "sales@aquadentsupplies.com",
  address: "Sagaas Business Center, 2nd Floor, Eldoret, Kenya",
  deliveryCities: [
    "Nairobi",
    "Mombasa",
    "Kisumu",
    "Eldoret",
    "Nakuru",
    "Kitale",
    "Kakamega",
    "Machakos"
  ],
  social: {
    instagram: "https://instagram.com/aquadentsupplies",
    facebook: "https://facebook.com/aquadentsupplies",
    linkedin: "https://linkedin.com/company/aquadent-supplies",
    tiktok: "https://tiktok.com/@aquadentsupplies"
  }
};
function waLink(message) {
  return `https://wa.me/${SITE.whatsapp}?text=${encodeURIComponent(message)}`;
}
function mailLink(subject, body = "") {
  return `mailto:${SITE.email}?subject=${encodeURIComponent(subject)}${body ? `&body=${encodeURIComponent(body)}` : ""}`;
}
const FALLBACK = {
  name: SITE.name,
  tagline: SITE.tagline,
  phone: SITE.phone,
  phoneDisplay: SITE.phoneDisplay,
  whatsapp: SITE.whatsapp,
  email: SITE.email,
  address: SITE.address,
  instagram: SITE.social.instagram,
  facebook: SITE.social.facebook,
  linkedin: SITE.social.linkedin,
  tiktok: SITE.social.tiktok,
  heroEyebrow: "",
  heroTitle: "",
  heroSubtitle: "",
  heroImageUrl: "",
  heroCtaPrimaryLabel: "",
  heroCtaPrimaryHref: "",
  heroCtaSecondaryLabel: "",
  heroCtaSecondaryHref: "",
  promoEnabled: false,
  promoText: "",
  promoLabel: "",
  promoHref: ""
};
function useSiteSettings() {
  const { data } = useQuery({
    queryKey: ["site_settings"],
    queryFn: async () => {
      const { data: data2, error } = await supabase.from("site_settings").select("*").eq("id", true).maybeSingle();
      if (error || !data2) return FALLBACK;
      return {
        name: data2.name || FALLBACK.name,
        tagline: data2.tagline || FALLBACK.tagline,
        phone: data2.phone || FALLBACK.phone,
        phoneDisplay: data2.phone_display || FALLBACK.phoneDisplay,
        whatsapp: data2.whatsapp || FALLBACK.whatsapp,
        email: data2.email || FALLBACK.email,
        address: data2.address || FALLBACK.address,
        instagram: data2.instagram || FALLBACK.instagram,
        facebook: data2.facebook || FALLBACK.facebook,
        linkedin: data2.linkedin || FALLBACK.linkedin,
        tiktok: data2.tiktok || FALLBACK.tiktok,
        heroEyebrow: data2.hero_eyebrow ?? "",
        heroTitle: data2.hero_title ?? "",
        heroSubtitle: data2.hero_subtitle ?? "",
        heroImageUrl: data2.hero_image_url ?? "",
        heroCtaPrimaryLabel: data2.hero_cta_primary_label ?? "",
        heroCtaPrimaryHref: data2.hero_cta_primary_href ?? "",
        heroCtaSecondaryLabel: data2.hero_cta_secondary_label ?? "",
        heroCtaSecondaryHref: data2.hero_cta_secondary_href ?? "",
        promoEnabled: !!data2.promo_enabled,
        promoText: data2.promo_text ?? "",
        promoLabel: data2.promo_label ?? "",
        promoHref: data2.promo_href ?? ""
      };
    },
    staleTime: 6e4
  });
  return data ?? FALLBACK;
}
function waLinkFor(whatsapp, message) {
  return `https://wa.me/${whatsapp}?text=${encodeURIComponent(message)}`;
}
const PRIMARY_LINKS = [
  { to: "/", label: "Home" },
  { to: "/products", label: "Products" },
  { to: "/categories", label: "Categories" },
  { to: "/brands", label: "Brands" },
  { to: "/locations", label: "Delivery" },
  { to: "/contact", label: "Contact" }
];
const MORE_LINKS = [
  { to: "/about", label: "About us" },
  { to: "/blog", label: "Blog & guides" },
  { to: "/faq", label: "FAQ" }
];
const ALL_MOBILE_LINKS = [...PRIMARY_LINKS, ...MORE_LINKS];
function Navbar() {
  const [open, setOpen] = React.useState(false);
  const [moreOpen, setMoreOpen] = React.useState(false);
  const { count } = useQuote();
  const { location } = useRouterState();
  const site = useSiteSettings();
  React.useEffect(() => {
    setOpen(false);
    setMoreOpen(false);
  }, [location.pathname]);
  return /* @__PURE__ */ jsxs("header", { className: "sticky top-0 z-40 w-full border-b border-border/60 bg-background/90 backdrop-blur-md", children: [
    /* @__PURE__ */ jsx("div", { className: "hidden border-b border-border/50 bg-brand text-brand-foreground md:block", children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto flex h-9 items-center justify-between gap-6 px-4 text-xs md:px-6", children: [
      /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-5", children: [
        /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-white/90", children: [
          /* @__PURE__ */ jsx(Truck, { className: "h-3.5 w-3.5" }),
          " Nationwide delivery from Eldoret"
        ] }),
        /* @__PURE__ */ jsx("span", { className: "hidden text-white/70 lg:inline", children: "Mon–Sat · 8:00–18:00 EAT" })
      ] }),
      /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-5", children: [
        /* @__PURE__ */ jsxs(
          "a",
          {
            href: `tel:${site.phone}`,
            className: "inline-flex items-center gap-1.5 font-medium text-white hover:text-white/80",
            children: [
              /* @__PURE__ */ jsx(Phone, { className: "h-3.5 w-3.5" }),
              " ",
              site.phoneDisplay
            ]
          }
        ),
        /* @__PURE__ */ jsxs(
          "a",
          {
            href: waLinkFor(site.whatsapp, `Hello ${site.name}, I'd like to enquire about dental supplies.`),
            target: "_blank",
            rel: "noopener noreferrer",
            className: "inline-flex items-center gap-1.5 font-medium text-white hover:text-white/80",
            children: [
              /* @__PURE__ */ jsx(MessageCircle, { className: "h-3.5 w-3.5" }),
              " WhatsApp"
            ]
          }
        )
      ] })
    ] }) }),
    /* @__PURE__ */ jsxs("div", { className: "container mx-auto flex h-16 items-center justify-between gap-4 px-4 md:h-20 md:px-6", children: [
      /* @__PURE__ */ jsx(Logo, { className: "h-12 w-auto md:h-14" }),
      /* @__PURE__ */ jsxs("nav", { className: "hidden items-center gap-1 lg:flex", children: [
        PRIMARY_LINKS.map((l) => /* @__PURE__ */ jsx(
          Link,
          {
            to: l.to,
            className: "rounded-md px-3 py-2 text-sm font-medium text-foreground/80 transition-colors hover:bg-secondary hover:text-foreground [&.active]:text-brand-bright [&.active]:bg-secondary",
            activeOptions: { exact: l.to === "/" },
            children: l.label
          },
          l.to
        )),
        /* @__PURE__ */ jsxs(
          "div",
          {
            className: "relative",
            onMouseEnter: () => setMoreOpen(true),
            onMouseLeave: () => setMoreOpen(false),
            children: [
              /* @__PURE__ */ jsxs(
                "button",
                {
                  type: "button",
                  onClick: () => setMoreOpen((v) => !v),
                  className: "inline-flex items-center gap-1 rounded-md px-3 py-2 text-sm font-medium text-foreground/80 transition-colors hover:bg-secondary hover:text-foreground",
                  "aria-haspopup": "menu",
                  "aria-expanded": moreOpen,
                  children: [
                    "More ",
                    /* @__PURE__ */ jsx(ChevronDown, { className: cn("h-4 w-4 transition", moreOpen && "rotate-180") })
                  ]
                }
              ),
              moreOpen && /* @__PURE__ */ jsx("div", { className: "absolute right-0 top-full min-w-[12rem] rounded-sm border border-border bg-card p-2 shadow-[var(--shadow-elevated)]", children: MORE_LINKS.map((l) => /* @__PURE__ */ jsx(
                Link,
                {
                  to: l.to,
                  className: "block rounded-md px-3 py-2 text-sm font-medium text-foreground/80 transition-colors hover:bg-secondary hover:text-foreground [&.active]:text-brand-bright",
                  children: l.label
                },
                l.to
              )) })
            ]
          }
        )
      ] }),
      /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
        /* @__PURE__ */ jsx(SearchCommand, {}),
        /* @__PURE__ */ jsxs(
          "a",
          {
            href: `tel:${site.phone}`,
            className: "hidden h-10 items-center gap-2 whitespace-nowrap rounded-md px-3 text-sm font-semibold text-brand hover:bg-secondary md:inline-flex",
            "aria-label": "Call us",
            children: [
              /* @__PURE__ */ jsx(Phone, { className: "h-4 w-4" }),
              /* @__PURE__ */ jsx("span", { className: "hidden xl:inline whitespace-nowrap", children: site.phoneDisplay })
            ]
          }
        ),
        /* @__PURE__ */ jsx(Link, { to: "/quote", className: "relative hidden md:inline-flex", children: /* @__PURE__ */ jsxs(
          Button,
          {
            size: "sm",
            className: "h-10 gap-2 bg-brand text-brand-foreground hover:bg-brand/90",
            children: [
              /* @__PURE__ */ jsx(FileText, { className: "h-4 w-4" }),
              /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "Request quote" }),
              count > 0 && /* @__PURE__ */ jsx("span", { className: "ml-1 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-white px-1.5 text-[11px] font-bold text-brand", children: count })
            ]
          }
        ) }),
        /* @__PURE__ */ jsx(
          "button",
          {
            type: "button",
            className: "inline-flex h-10 w-10 items-center justify-center rounded-md border border-border text-foreground lg:hidden",
            "aria-label": "Toggle menu",
            onClick: () => setOpen((v) => !v),
            children: open ? /* @__PURE__ */ jsx(X, { className: "h-5 w-5" }) : /* @__PURE__ */ jsx(Menu, { className: "h-5 w-5" })
          }
        )
      ] })
    ] }),
    /* @__PURE__ */ jsx(
      "div",
      {
        className: cn(
          "border-t border-border/60 bg-background lg:hidden",
          open ? "block" : "hidden"
        ),
        children: /* @__PURE__ */ jsxs("nav", { className: "container mx-auto flex flex-col px-4 py-2", children: [
          ALL_MOBILE_LINKS.map((l) => /* @__PURE__ */ jsx(
            Link,
            {
              to: l.to,
              className: "rounded-md px-3 py-3 text-sm font-medium text-foreground/80 hover:bg-secondary [&.active]:text-brand-bright",
              activeOptions: { exact: l.to === "/" },
              children: l.label
            },
            l.to
          )),
          /* @__PURE__ */ jsxs(
            "a",
            {
              href: `tel:${site.phone}`,
              className: "mt-2 inline-flex items-center gap-2 rounded-md bg-brand px-3 py-3 text-sm font-semibold text-brand-foreground",
              children: [
                /* @__PURE__ */ jsx(Phone, { className: "h-4 w-4" }),
                " Call ",
                site.phoneDisplay
              ]
            }
          )
        ] })
      }
    )
  ] });
}
function toCategory(row) {
  const seed = categoriesBySlug[row.slug];
  return {
    id: seed?.id ?? row.slug,
    slug: seed?.slug ?? row.slug,
    name: row.name,
    image: row.image_url || seed?.image || "",
    title: seed?.title ?? `${row.name} in Kenya | Aquadent Supplies`,
    metaDescription: row.description || seed?.metaDescription || row.name,
    h1: seed?.h1 ?? row.name,
    intro: seed?.intro ?? row.description ?? "",
    highlights: seed?.highlights ?? [],
    uses: seed?.uses ?? [],
    faqs: seed?.faqs ?? [],
    keywords: seed?.keywords ?? []
  };
}
function toProduct(row, catBySlug) {
  const catSlug = row.categories?.slug ?? "";
  const cat = catBySlug[catSlug];
  const seed = productsBySlug[row.slug];
  return {
    id: row.slug,
    slug: row.slug,
    name: row.name,
    sku: row.sku ?? void 0,
    lot: row.lot ?? void 0,
    price: Number(row.price_ksh) || 0,
    categoryId: catSlug || CATEGORY_IDS[0],
    image: row.image_url || seed?.image || cat?.image || "",
    badge: row.badge ?? void 0,
    short: row.short ?? "",
    description: row.description ?? "",
    features: row.features ?? [],
    brandId: row.brand_id ?? void 0,
    brandSlug: row.brands?.slug ?? void 0,
    isFeatured: !!row.is_featured,
    featuredOrder: row.featured_order ?? 0
  };
}
const categoriesQueryOptions = queryOptions({
  queryKey: ["pub_categories"],
  queryFn: async () => {
    const { data, error } = await supabase.from("categories").select("id,slug,name,description,image_url,sort_order").order("sort_order").order("name");
    if (error) throw error;
    return data.map(toCategory);
  }
});
const productsQueryOptions = queryOptions({
  queryKey: ["pub_products"],
  queryFn: async () => {
    const [catsRes, prodsRes] = await Promise.all([
      supabase.from("categories").select("id,slug,name,description,image_url,sort_order"),
      supabase.from("products").select(
        "id,slug,name,sku,lot,price_ksh,category_id,brand_id,image_url,badge,short,description,features,is_active,is_featured,featured_order, categories(slug,name), brands(slug,name)"
      ).eq("is_active", true).order("created_at", { ascending: false })
    ]);
    if (catsRes.error) throw catsRes.error;
    if (prodsRes.error) throw prodsRes.error;
    const catBySlug = {};
    for (const c of catsRes.data ?? []) {
      catBySlug[c.slug] = toCategory(c);
    }
    return (prodsRes.data ?? []).map((p) => toProduct(p, catBySlug));
  }
});
const brandsQueryOptions = queryOptions({
  queryKey: ["pub_brands"],
  queryFn: async () => {
    const { data, error } = await supabase.from("brands").select("id,slug,name,description,logo_url,sort_order").order("sort_order").order("name");
    if (error) throw error;
    return data ?? [];
  }
});
function useCategories() {
  return useQuery(categoriesQueryOptions);
}
function useProducts() {
  return useQuery(productsQueryOptions);
}
function useBrands() {
  return useQuery(brandsQueryOptions);
}
function useProductsByCategorySlug(slug) {
  const q = useProducts();
  return { ...q, data: q.data?.filter((p) => p.categoryId === slug) ?? [] };
}
function useFeaturedProducts(fallbackCount = 8) {
  const q = useProducts();
  const featured = (q.data ?? []).filter((p) => p.isFeatured).sort((a, b) => (a.featuredOrder ?? 0) - (b.featuredOrder ?? 0));
  const data = featured.length > 0 ? featured : (q.data ?? []).slice(0, fallbackCount);
  return { ...q, data };
}
const testimonialsQueryOptions = queryOptions({
  queryKey: ["pub_testimonials"],
  queryFn: async () => {
    const { data, error } = await supabase.from("testimonials").select("id,name,role,clinic,location,quote,rating,avatar_url,sort_order").eq("published", true).order("sort_order", { ascending: true }).order("created_at", { ascending: false });
    if (error) throw error;
    return (data ?? []).map((t) => ({
      id: t.id,
      name: t.name,
      role: t.role ?? "",
      clinic: t.clinic ?? "",
      location: t.location ?? "",
      quote: t.quote,
      rating: t.rating ?? 5,
      avatarUrl: t.avatar_url ?? null,
      sortOrder: t.sort_order ?? 0
    }));
  }
});
function useTestimonials() {
  return useQuery(testimonialsQueryOptions);
}
function InstagramIcon(props) {
  return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", ...props, children: [
    /* @__PURE__ */ jsx("rect", { width: "20", height: "20", x: "2", y: "2", rx: "5", ry: "5" }),
    /* @__PURE__ */ jsx("path", { d: "M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" }),
    /* @__PURE__ */ jsx("line", { x1: "17.5", x2: "17.51", y1: "6.5", y2: "6.5" })
  ] });
}
function FacebookIcon(props) {
  return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", ...props, children: /* @__PURE__ */ jsx("path", { d: "M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z" }) });
}
function LinkedInIcon(props) {
  return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", ...props, children: [
    /* @__PURE__ */ jsx("path", { d: "M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" }),
    /* @__PURE__ */ jsx("rect", { width: "4", height: "12", x: "2", y: "9" }),
    /* @__PURE__ */ jsx("circle", { cx: "4", cy: "4", r: "2" })
  ] });
}
function TikTokIcon(props) {
  return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", ...props, children: /* @__PURE__ */ jsx("path", { d: "M9 12a4 4 0 1 0 4 4V4a5 5 0 0 0 5 5" }) });
}
function Footer() {
  const site = useSiteSettings();
  const { data: categories } = useCategories();
  const socialLinks = [
    { name: "Instagram", href: site.instagram, Icon: InstagramIcon },
    { name: "Facebook", href: site.facebook, Icon: FacebookIcon },
    { name: "LinkedIn", href: site.linkedin, Icon: LinkedInIcon },
    { name: "TikTok", href: site.tiktok, Icon: TikTokIcon }
  ].filter((s) => s.href);
  const quickLinks = [
    { to: "/", label: "Home" },
    { to: "/products", label: "Products" },
    { to: "/categories", label: "Categories" },
    { to: "/brands", label: "Brands" },
    { to: "/blog", label: "Blog" },
    { to: "/faq", label: "FAQ" },
    { to: "/quote", label: "Request a Quote" },
    { to: "/about", label: "About Us" },
    { to: "/contact", label: "Contact" }
  ];
  return /* @__PURE__ */ jsxs("footer", { className: "mt-24 text-brand-foreground", style: { background: "var(--gradient-brand)" }, children: [
    /* @__PURE__ */ jsxs("div", { className: "container mx-auto grid gap-10 px-4 py-14 sm:grid-cols-2 md:px-6 lg:grid-cols-4", children: [
      /* @__PURE__ */ jsxs("div", { className: "sm:col-span-2 lg:col-span-1", children: [
        /* @__PURE__ */ jsx("h3", { className: "text-lg font-bold sm:text-center lg:text-left", children: "Aquadent Supplies Kenya" }),
        /* @__PURE__ */ jsxs("p", { className: "mt-4 text-sm leading-relaxed text-white/85 sm:text-center lg:text-left", children: [
          "Aquadent Supplies is a leading dental supplier in Kenya, providing high-quality",
          " ",
          /* @__PURE__ */ jsx("strong", { children: "dental equipment, instruments, and consumables" }),
          " to clinics, hospitals, and dental practitioners. Trusted nationwide for affordable prices, reliable delivery, and excellent after-sales support."
        ] }),
        /* @__PURE__ */ jsx("div", { className: "mt-5 flex gap-3 sm:justify-center lg:justify-start", children: socialLinks.map(({ name, href, Icon }) => /* @__PURE__ */ jsx(
          "a",
          {
            href,
            target: "_blank",
            rel: "noopener noreferrer",
            "aria-label": name,
            className: "inline-flex h-9 w-9 items-center justify-center rounded-full bg-white/10 text-white/90 transition hover:bg-white/20 hover:text-white",
            children: /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" })
          },
          name
        )) })
      ] }),
      /* @__PURE__ */ jsxs("div", { children: [
        /* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold uppercase tracking-wider text-white/70 sm:text-center lg:text-left", children: "Quick Links" }),
        /* @__PURE__ */ jsx("ul", { className: "mt-4 grid grid-cols-2 gap-x-4 gap-y-2 text-sm sm:grid-cols-1 md:grid-cols-1", children: quickLinks.map((l) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { to: l.to, className: "text-white/85 transition hover:text-white", children: l.label }) }, l.to)) })
      ] }),
      /* @__PURE__ */ jsxs("div", { children: [
        /* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold uppercase tracking-wider text-white/70 sm:text-center lg:text-left", children: "Popular Categories" }),
        /* @__PURE__ */ jsx("ul", { className: "mt-4 space-y-2 text-sm", children: (categories ?? []).slice(0, 7).map((c) => /* @__PURE__ */ jsx("li", { className: "sm:text-center lg:text-left", children: /* @__PURE__ */ jsx(
          Link,
          {
            to: "/categories/$slug",
            params: { slug: c.slug },
            className: "text-white/85 transition hover:text-white",
            children: c.name
          }
        ) }, c.id)) })
      ] }),
      /* @__PURE__ */ jsxs("div", { children: [
        /* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold uppercase tracking-wider text-white/70 sm:text-center lg:text-left", children: "Contact Us" }),
        /* @__PURE__ */ jsxs("ul", { className: "mt-4 space-y-3 text-sm sm:mx-auto sm:max-w-max lg:mx-0", children: [
          /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 sm:justify-center lg:justify-start", children: [
            /* @__PURE__ */ jsx(Phone, { className: "mt-0.5 h-4 w-4 flex-shrink-0" }),
            /* @__PURE__ */ jsx("a", { href: `tel:${site.phone}`, className: "text-white/90 hover:text-white", children: site.phoneDisplay })
          ] }),
          /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 sm:justify-center lg:justify-start", children: [
            /* @__PURE__ */ jsx(Mail, { className: "mt-0.5 h-4 w-4 flex-shrink-0" }),
            /* @__PURE__ */ jsx("a", { href: `mailto:${site.email}`, className: "text-white/90 hover:text-white", children: site.email })
          ] }),
          /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 sm:justify-center lg:justify-start", children: [
            /* @__PURE__ */ jsx(MapPin, { className: "mt-0.5 h-4 w-4 flex-shrink-0" }),
            /* @__PURE__ */ jsx("span", { className: "text-white/90", children: site.address })
          ] })
        ] }),
        /* @__PURE__ */ jsx("h4", { className: "mt-6 text-sm font-semibold uppercase tracking-wider text-white/70 sm:text-center lg:text-left", children: "We Deliver Across Kenya" }),
        /* @__PURE__ */ jsx("ul", { className: "mt-3 flex flex-wrap gap-x-3 gap-y-1 text-sm sm:justify-center lg:justify-start", children: SITE.deliveryCities.map((c) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
          Link,
          {
            to: "/locations/$city",
            params: { city: c.toLowerCase() },
            className: "text-white/85 hover:text-white",
            children: c
          }
        ) }, c)) })
      ] })
    ] }),
    /* @__PURE__ */ jsx("div", { className: "border-t border-white/15", children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto flex flex-col items-center justify-between gap-3 px-4 py-5 sm:flex-row md:px-6", children: [
      /* @__PURE__ */ jsxs("p", { className: "text-center text-xs text-white/75 sm:text-left", children: [
        "© ",
        (/* @__PURE__ */ new Date()).getFullYear(),
        " Aquadent Company Limited — Kenya's Trusted Dental Supplier"
      ] }),
      /* @__PURE__ */ jsx("div", { className: "flex gap-2", children: socialLinks.map(({ name, href, Icon }) => /* @__PURE__ */ jsx(
        "a",
        {
          href,
          target: "_blank",
          rel: "noopener noreferrer",
          "aria-label": name,
          className: "inline-flex h-8 w-8 items-center justify-center rounded-full bg-white/10 text-white/75 transition hover:bg-white/20 hover:text-white",
          children: /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5" })
        },
        name
      )) })
    ] }) })
  ] });
}
function FloatingWhatsApp() {
  const site = useSiteSettings();
  return /* @__PURE__ */ jsx("div", { className: "pointer-events-none fixed inset-x-0 bottom-5 z-50 hidden md:block", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto flex justify-end px-4 md:px-6", children: /* @__PURE__ */ jsxs(
    "a",
    {
      href: waLinkFor(site.whatsapp, `Hello ${site.name}, I'd like to enquire about your dental supplies.`),
      target: "_blank",
      rel: "noopener noreferrer",
      "aria-label": "Chat on WhatsApp",
      className: "pointer-events-auto relative inline-flex h-14 w-14 items-center justify-center rounded-full text-white shadow-[0_10px_30px_-6px_rgba(37,211,102,0.55)] transition hover:scale-105",
      style: { background: "#25D366" },
      children: [
        /* @__PURE__ */ jsx(MessageCircle, { className: "h-6 w-6", fill: "currentColor" }),
        /* @__PURE__ */ jsx("span", { className: "absolute inline-flex h-full w-full animate-ping rounded-full bg-[#25D366] opacity-30" })
      ]
    }
  ) }) });
}
function MobileCTABar() {
  const site = useSiteSettings();
  const { count } = useQuote();
  return /* @__PURE__ */ jsx("div", { className: "fixed inset-x-0 bottom-0 z-40 border-t border-border bg-background/95 px-3 py-2 shadow-[0_-6px_20px_-10px_rgba(0,0,0,0.25)] backdrop-blur md:hidden", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
    /* @__PURE__ */ jsxs(
      "a",
      {
        href: `tel:${site.phone}`,
        className: "inline-flex flex-col items-center justify-center gap-0.5 rounded-sm bg-brand py-2 text-[11px] font-semibold text-brand-foreground",
        "aria-label": "Call Aquadent Supplies",
        children: [
          /* @__PURE__ */ jsx(Phone, { className: "h-4 w-4" }),
          " Call"
        ]
      }
    ),
    /* @__PURE__ */ jsxs(
      "a",
      {
        href: waLinkFor(site.whatsapp, `Hello ${site.name}, I'd like to enquire about dental supplies.`),
        target: "_blank",
        rel: "noopener noreferrer",
        className: "inline-flex flex-col items-center justify-center gap-0.5 rounded-sm py-2 text-[11px] font-semibold text-white",
        style: { background: "#25D366" },
        children: [
          /* @__PURE__ */ jsx(MessageCircle, { className: "h-4 w-4" }),
          " WhatsApp"
        ]
      }
    ),
    /* @__PURE__ */ jsxs(
      Link,
      {
        to: "/quote",
        className: "relative inline-flex flex-col items-center justify-center gap-0.5 rounded-sm border border-brand/30 bg-card py-2 text-[11px] font-semibold text-brand",
        children: [
          /* @__PURE__ */ jsx(FileText, { className: "h-4 w-4" }),
          " Quote",
          count > 0 && /* @__PURE__ */ jsx("span", { className: "absolute -right-1 -top-1 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-brand px-1.5 text-[10px] font-bold text-brand-foreground", children: count })
        ]
      }
    )
  ] }) });
}
const Toaster = ({ ...props }) => {
  return /* @__PURE__ */ jsx(
    Toaster$1,
    {
      className: "toaster group",
      toastOptions: {
        classNames: {
          toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
          description: "group-[.toast]:text-muted-foreground",
          actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
          cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
        }
      },
      ...props
    }
  );
};
function Layout({ children }) {
  return /* @__PURE__ */ jsxs("div", { className: "flex min-h-screen flex-col", children: [
    /* @__PURE__ */ jsx(Navbar, {}),
    /* @__PURE__ */ jsx("main", { className: "flex-1 pb-16 md:pb-0", children }),
    /* @__PURE__ */ jsx(Footer, {}),
    /* @__PURE__ */ jsx(FloatingWhatsApp, {}),
    /* @__PURE__ */ jsx(MobileCTABar, {}),
    /* @__PURE__ */ jsx(Toaster, { richColors: true, position: "top-right" })
  ] });
}
const AuthContext = React.createContext(null);
function AuthProvider({ children }) {
  const [session, setSession] = React.useState(null);
  const [user, setUser] = React.useState(null);
  const [isAdmin, setIsAdmin] = React.useState(false);
  const [loading, setLoading] = React.useState(true);
  const checkAdmin = React.useCallback(async (uid) => {
    if (!uid) {
      setIsAdmin(false);
      return;
    }
    const { data } = await supabase.from("user_roles").select("role").eq("user_id", uid).eq("role", "admin").maybeSingle();
    setIsAdmin(!!data);
  }, []);
  React.useEffect(() => {
    const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, s) => {
      setSession(s);
      setUser(s?.user ?? null);
      setTimeout(() => {
        void checkAdmin(s?.user?.id);
      }, 0);
    });
    supabase.auth.getSession().then(({ data }) => {
      setSession(data.session);
      setUser(data.session?.user ?? null);
      void checkAdmin(data.session?.user?.id).finally(() => setLoading(false));
    });
    return () => subscription.unsubscribe();
  }, [checkAdmin]);
  const value = React.useMemo(
    () => ({
      session,
      user,
      isAdmin,
      loading,
      refreshRole: () => checkAdmin(user?.id),
      signOut: async () => {
        await supabase.auth.signOut();
      }
    }),
    [session, user, isAdmin, loading, checkAdmin]
  );
  return /* @__PURE__ */ jsx(AuthContext.Provider, { value, children });
}
function useAuth() {
  const ctx = React.useContext(AuthContext);
  if (!ctx) throw new Error("useAuth must be used within AuthProvider");
  return ctx;
}
function NotFoundComponent() {
  return /* @__PURE__ */ jsx("div", { className: "flex min-h-screen items-center justify-center bg-background px-4", children: /* @__PURE__ */ jsxs("div", { className: "max-w-md text-center", children: [
    /* @__PURE__ */ jsx("h1", { className: "text-7xl font-bold text-foreground", children: "404" }),
    /* @__PURE__ */ jsx("h2", { className: "mt-4 text-xl font-semibold text-foreground", children: "Page not found" }),
    /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "The page you're looking for doesn't exist or has been moved." }),
    /* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(
      Link,
      {
        to: "/",
        className: "inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90",
        children: "Go home"
      }
    ) })
  ] }) });
}
function ErrorComponent({ error, reset }) {
  console.error(error);
  const router2 = useRouter();
  return /* @__PURE__ */ jsx("div", { className: "flex min-h-screen items-center justify-center bg-background px-4", children: /* @__PURE__ */ jsxs("div", { className: "max-w-md text-center", children: [
    /* @__PURE__ */ jsx("h1", { className: "text-xl font-semibold tracking-tight text-foreground", children: "This page didn't load" }),
    /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "Something went wrong on our end. You can try refreshing or head back home." }),
    /* @__PURE__ */ jsxs("div", { className: "mt-6 flex flex-wrap justify-center gap-2", children: [
      /* @__PURE__ */ jsx(
        "button",
        {
          onClick: () => {
            router2.invalidate();
            reset();
          },
          className: "inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90",
          children: "Try again"
        }
      ),
      /* @__PURE__ */ jsx(
        "a",
        {
          href: "/",
          className: "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground transition-colors hover:bg-accent",
          children: "Go home"
        }
      )
    ] })
  ] }) });
}
const Route$h = createRootRouteWithContext()({
  head: () => ({
    meta: [
      { charSet: "utf-8" },
      { name: "viewport", content: "width=device-width, initial-scale=1" },
      { title: "Aquadent Supplies — Kenya's Trusted Dental Supplier" },
      {
        name: "description",
        content: "Kenya's trusted supplier of dental equipment, instruments, consumables, implants, orthodontics and lab products. Nationwide delivery."
      },
      { name: "author", content: "Aquadent Supplies" },
      { property: "og:title", content: "Aquadent Supplies — One Time, Every Time" },
      {
        property: "og:description",
        content: "Premium dental supplies for clinics, hospitals and dental practitioners across Kenya."
      },
      { property: "og:type", content: "website" },
      { property: "og:site_name", content: "Aquadent Supplies" },
      { property: "og:locale", content: "en_KE" },
      { name: "twitter:card", content: "summary_large_image" },
      { name: "theme-color", content: "#0b4f6c" }
    ],
    links: [
      {
        rel: "stylesheet",
        href: appCss
      }
    ],
    scripts: [
      {
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "Organization",
          name: "Aquadent Supplies",
          url: "/",
          slogan: "One Time, Every Time",
          email: "sales@aquadentsupplies.com",
          telephone: "+254796901382",
          address: {
            "@type": "PostalAddress",
            streetAddress: "Sagaas Business Center, 2nd Floor",
            addressLocality: "Eldoret",
            addressCountry: "KE"
          },
          areaServed: "KE",
          sameAs: [
            "https://instagram.com/aquadentsupplies",
            "https://facebook.com/aquadentsupplies",
            "https://linkedin.com/company/aquadent-supplies",
            "https://tiktok.com/@aquadentsupplies"
          ]
        })
      }
    ]
  }),
  shellComponent: RootShell,
  component: RootComponent,
  notFoundComponent: NotFoundComponent,
  errorComponent: ErrorComponent
});
function RootShell({ children }) {
  return /* @__PURE__ */ jsxs("html", { lang: "en", children: [
    /* @__PURE__ */ jsx("head", { children: /* @__PURE__ */ jsx(HeadContent, {}) }),
    /* @__PURE__ */ jsxs("body", { children: [
      children,
      /* @__PURE__ */ jsx(Scripts, {})
    ] })
  ] });
}
function RootComponent() {
  const { queryClient } = Route$h.useRouteContext();
  return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(AuthProvider, { children: /* @__PURE__ */ jsx(QuoteProvider, { children: /* @__PURE__ */ jsx(Layout, { children: /* @__PURE__ */ jsx(Outlet, {}) }) }) }) });
}
function createSupabaseAdminClient() {
  const SUPABASE_URL = process.env.SUPABASE_URL;
  const SUPABASE_SERVICE_ROLE_KEY = process.env.SUPABASE_SERVICE_ROLE_KEY;
  if (!SUPABASE_URL || !SUPABASE_SERVICE_ROLE_KEY) {
    const missing = [
      ...!SUPABASE_URL ? ["SUPABASE_URL"] : [],
      ...!SUPABASE_SERVICE_ROLE_KEY ? ["SUPABASE_SERVICE_ROLE_KEY"] : []
    ];
    const message = `Missing Supabase environment variable(s): ${missing.join(", ")}. Connect Supabase in Lovable Cloud.`;
    console.error(`[Supabase] ${message}`);
    throw new Error(message);
  }
  return createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, {
    auth: {
      storage: void 0,
      persistSession: false,
      autoRefreshToken: false
    }
  });
}
let _supabaseAdmin;
const supabaseAdmin = new Proxy({}, {
  get(_, prop, receiver) {
    if (!_supabaseAdmin) _supabaseAdmin = createSupabaseAdminClient();
    return Reflect.get(_supabaseAdmin, prop, receiver);
  }
});
const LOCATIONS = [
  // ── NAIROBI ────────────────────────────────────────────────────────────
  {
    slug: "nairobi",
    city: "Nairobi",
    region: "Nairobi Metropolitan",
    title: `Dental Supplies in Nairobi, Kenya — Equipment, Instruments & Consumables | ${SITE.name}`,
    metaDescription: "Buy dental chairs, implants, orthodontic kits, composites, PPE and lab equipment in Nairobi. Same-day pickup in Westlands & CBD, next-day delivery to Karen, Kilimani, Upper Hill and Lavington.",
    h1: "Dental Supplies in Nairobi",
    intro: "Nairobi's most-stocked dental supplier — chairs, implants and consumables delivered the next working day to every clinic in the city.",
    about: [
      "Nairobi is the heart of dentistry in East Africa, home to the country's largest concentration of private practices, hospital dental departments, training institutions and specialist clinics. From Westlands and Kilimani to Karen, Lavington, Upper Hill and the CBD, Nairobi dentists face the same daily pressure: full chairs, demanding patients and zero tolerance for stockouts. " + SITE.name + " was built around that pressure. We hold deep inventory of the products Nairobi clinics actually use — nano-hybrid composites, glass ionomers, MBT 0.022 brackets, titanium implants, surgical extraction sets, autoclave consumables and PPE — and dispatch to Nairobi every working day.",
      "Our Nairobi clients range from solo practitioners on Ngong Road to multi-chair groups in Upper Hill, university teaching hospitals and corporate dental schemes. We supply everything from a single box of nitrile gloves to a complete clinic fit-out: programmable electric dental chair, LED operating light, autoclave, X-ray, instruments, lab kit and consumables for the first six months. Quotes are formal, itemised and emailed within an hour of your request — no chasing, no guesswork.",
      "Because we know how Nairobi traffic works, urgent orders placed before 10:00 AM are dispatched the same day for next-day delivery anywhere within the Nairobi Metropolitan area. Bulk consumables and PPE are kept on hand specifically for our Nairobi accounts so you never have to delay a procedure waiting for stock."
    ],
    delivery: "Nairobi orders are dispatched daily from our Eldoret warehouse via overnight courier. Most consumables, instruments and small equipment reach Westlands, Karen, Kilimani, Upper Hill, Lavington, the CBD and Ruiru within 24 hours. Dental chairs, autoclaves and lab equipment are delivered on a scheduled date with full installation and on-site operator training included.",
    shipping: "Next-day delivery to all Nairobi neighbourhoods",
    serving: ["Westlands", "Karen", "Kilimani", "Lavington", "Upper Hill", "CBD", "Ngong Road", "Eastleigh", "Parklands", "Hurlingham", "Ruiru", "Kiambu", "Thika", "Kasarani"],
    landmarks: [
      "Nairobi Hospital",
      "Aga Khan University Hospital",
      "Kenyatta National Hospital",
      "MP Shah Hospital",
      "University of Nairobi Dental School",
      "Gertrude's Children's Hospital"
    ],
    highlights: [
      { t: "Same-day Nairobi dispatch", d: "Orders placed before 10:00 AM go out the same business day for next-morning delivery." },
      { t: "Dedicated Nairobi stock", d: "We ring-fence high-turnover Nairobi SKUs — gloves, composites, GIC, masks, burs — to prevent stockouts." },
      { t: "Clinic fit-outs", d: "Full new-clinic packages from chair and X-ray to first-month consumables, installed by our Nairobi technicians." },
      { t: "Account terms for hospitals", d: "Monthly invoicing and dedicated account management for Nairobi hospitals, SACCOs and dental chains." }
    ],
    topCategories: ["dental-chairs", "implants", "consumables", "orthodontics", "clinical-materials", "surgical-instruments"],
    testimonial: {
      quote: "We've ordered everything from gloves to a full chair installation from Aquadent. Same-day quotes, next-day delivery in Westlands and the techs actually know what they're installing.",
      name: "Dr. Achieng O.",
      clinic: "Westlands Smile Studio, Nairobi"
    },
    faqs: [
      { q: "Do you deliver dental supplies in Nairobi the same day?", a: "Yes — orders for in-stock consumables, instruments and PPE placed before 10:00 AM are dispatched the same day via overnight courier and arrive the next morning anywhere in Nairobi. Walk-in pickup can be arranged for urgent cases." },
      { q: "Where in Nairobi do you deliver?", a: "Every neighbourhood in the Nairobi Metropolitan area — Westlands, Karen, Kilimani, Upper Hill, Lavington, CBD, Ngong Road, Parklands, Hurlingham, Eastleigh, Ruiru, Kiambu, Thika and Kasarani — plus surrounding satellite towns." },
      { q: "Do you install dental chairs in Nairobi?", a: "Yes. Every dental chair, autoclave or laboratory unit delivered to Nairobi is installed on-site by our technicians, including plumbing, electrical hookup, calibration and operator training. Installation is included in the quoted price." },
      { q: "Can Nairobi hospitals open an account?", a: "Yes. Hospitals, SACCOs and multi-chair dental chains in Nairobi can apply for monthly invoicing with a dedicated account manager. Approval typically takes 2–3 business days." },
      { q: "What payment methods do you accept in Nairobi?", a: "M-Pesa, bank transfer, cheque and pay-on-delivery for verified clinics. Large equipment orders require a deposit; balance is due on installation." },
      { q: "Do you supply the University of Nairobi Dental School?", a: "Yes — we supply teaching consumables, orthodontic training kits and student instruments to dental schools and teaching hospitals in Nairobi." }
    ],
    keywords: [
      "dental supplies Nairobi",
      "dental equipment Nairobi",
      "dental chair price Nairobi",
      "dental implants Nairobi",
      "orthodontic brackets Nairobi",
      "dental consumables Nairobi Kenya"
    ]
  },
  // ── MOMBASA ────────────────────────────────────────────────────────────
  {
    slug: "mombasa",
    city: "Mombasa",
    region: "Coastal",
    title: `Dental Supplies in Mombasa & the Coast | ${SITE.name}`,
    metaDescription: "Dental equipment, instruments and consumables delivered to Mombasa, Nyali, Bamburi, Kilifi, Diani and Malindi. Corrosion-resistant instruments rated for coastal humidity.",
    h1: "Dental Supplies in Mombasa & the Kenyan Coast",
    intro: "Coastal-grade dental equipment and consumables, delivered island-side and to every coastal town from Likoni to Malindi.",
    about: [
      "The Kenyan coast presents a unique challenge for dental practices: salt air and persistent humidity attack metal instruments, electronics and chairs that weren't built for it. " + SITE.name + " supplies Mombasa clinics with corrosion-resistant German stainless instruments, sealed-bearing handpieces and dental chairs with protected electronics — chosen specifically for the coastal climate.",
      "We deliver across Mombasa Island, Nyali, Bamburi, Likoni and the wider coastal strip including Kilifi, Diani, Ukunda and Malindi. Our Mombasa clients include private practices in Nyali, hospital dental departments on the island, beach-resort clinics in Diani and outreach programmes serving Kilifi and Kwale.",
      "Coastal delivery uses overnight road freight from Eldoret with handover to a Mombasa-based courier for last-mile dispatch. Most orders reach the island within 48 hours; resort clinics in Diani and Watamu are scheduled with a same-day courier from our Mombasa partner."
    ],
    delivery: "Mombasa orders are consolidated into daily overnight runs and handed to our coastal courier partner for last-mile delivery to Mombasa Island, Nyali, Bamburi, Likoni, Kilifi, Diani and Malindi. Dental chairs are scheduled with installation by technicians who travel down from Nairobi or Eldoret.",
    shipping: "48-hour delivery to Mombasa and the coastal strip",
    serving: ["Mombasa Island", "Nyali", "Bamburi", "Likoni", "Mtwapa", "Kilifi", "Watamu", "Malindi", "Ukunda", "Diani", "Kwale"],
    landmarks: [
      "Coast General Teaching & Referral Hospital",
      "Aga Khan Hospital Mombasa",
      "Pandya Memorial Hospital",
      "Mombasa Hospital",
      "Diani Beach Hospital"
    ],
    highlights: [
      { t: "Coastal-grade instruments", d: "German stainless steel and sealed handpieces rated for high humidity and salt air." },
      { t: "48-hour island delivery", d: "Daily overnight freight to Mombasa with Mombasa-based last-mile courier." },
      { t: "Resort & outreach clinics", d: "We supply beach-resort dental clinics in Diani and Watamu and outreach programmes in Kilifi and Kwale." },
      { t: "Coastal warranty support", d: "Local field technician for warranty calls and repairs along the coastal strip." }
    ],
    topCategories: ["surgical-instruments", "consumables", "dental-chairs", "clinical-materials"],
    testimonial: {
      quote: "Other suppliers send us instruments that rust within months. Aquadent's coastal-grade forceps have lasted us three years on Mombasa Island.",
      name: "Dr. Hamisi K.",
      clinic: "Nyali Family Dental, Mombasa"
    },
    faqs: [
      { q: "How long does delivery to Mombasa take?", a: "Standard orders reach Mombasa within 48 hours via overnight road freight from Eldoret and a Mombasa-based last-mile courier. Urgent orders can be air-freighted on request." },
      { q: "Do you supply clinics in Diani and Malindi?", a: "Yes — Diani, Ukunda, Watamu, Kilifi and Malindi are all on our regular coastal delivery routes. Resort and outreach clinics receive next-day local courier delivery after the order reaches Mombasa." },
      { q: "Are your instruments suitable for coastal humidity?", a: "Yes. We stock German stainless-steel surgical instruments and sealed-bearing handpieces specifically rated for high-humidity environments like the Kenyan coast." },
      { q: "Can you service dental chairs in Mombasa?", a: "Yes — warranty service and repairs are handled by our coastal field technician, with parts shipped overnight from our Eldoret warehouse." }
    ],
    keywords: [
      "dental supplies Mombasa",
      "dental equipment Mombasa",
      "dental chair Mombasa",
      "dental consumables coast Kenya",
      "dental supplies Nyali Bamburi Diani"
    ]
  },
  // ── KISUMU ─────────────────────────────────────────────────────────────
  {
    slug: "kisumu",
    city: "Kisumu",
    region: "Western Kenya",
    title: `Dental Supplies in Kisumu & Lake Region | ${SITE.name}`,
    metaDescription: "Dental chairs, implants, orthodontic kits and consumables delivered to Kisumu, Kondele, Mamboleo, Maseno and Bondo. Trusted by Lake-region clinics, hospitals and dental schools.",
    h1: "Dental Supplies in Kisumu",
    intro: "The Lake region's reliable dental supplier — full catalogue delivered to Kisumu and the wider Western circuit.",
    about: [
      "Kisumu is the dental hub of the Lake region, serving patients from Siaya, Homa Bay, Migori and beyond. Demand has grown rapidly as private practices open in Milimani and around Mega Plaza, and as JOOTRH and county facilities expand their dental services. " + SITE.name + " keeps Kisumu clinics fully stocked with composites, GIC, gloves, instruments and equipment — delivered within two working days of Eldoret dispatch.",
      "Our Kisumu clients include private dental practices in Milimani and Kondele, mission and faith-based hospitals, county dental clinics and academic dental units at Maseno University. We supply the same brands we ship to Nairobi — at the same prices — so Lake-region practices never pay a premium for being upcountry.",
      "Because Eldoret is only a few hours by road, Kisumu enjoys some of our fastest delivery times outside Nairobi. Urgent orders can be on a clinic's doorstep within 24–48 hours, and dental chairs are installed by technicians who can drive down the same week."
    ],
    delivery: "Kisumu orders ship via direct road freight from Eldoret, with delivery to Milimani, Kondele, Mamboleo, Ahero, Maseno and Bondo within 24–48 hours. Chair and lab equipment installations are scheduled within the same week.",
    shipping: "24–48 hour delivery to Kisumu",
    serving: ["Milimani", "Kondele", "Mamboleo", "Nyalenda", "Ahero", "Maseno", "Bondo", "Siaya", "Homa Bay"],
    landmarks: [
      "Jaramogi Oginga Odinga Teaching & Referral Hospital (JOOTRH)",
      "Aga Khan Hospital Kisumu",
      "Maseno University Dental Unit",
      "Kisumu County Hospital"
    ],
    highlights: [
      { t: "24–48h Lake region delivery", d: "Direct road freight from our Eldoret warehouse — no Nairobi detour." },
      { t: "Same-as-Nairobi pricing", d: "Lake region clinics pay the same catalogue prices as Nairobi — no upcountry surcharge." },
      { t: "Maseno & JOOTRH support", d: "We supply academic and teaching consumables to dental units at Maseno University and JOOTRH." },
      { t: "Mission hospital accounts", d: "Monthly invoicing for faith-based and mission hospitals across the Lake region." }
    ],
    topCategories: ["consumables", "dental-chairs", "surgical-instruments", "clinical-materials"],
    testimonial: {
      quote: "Stock arrives in Kisumu faster from Aquadent than from suppliers based in Nairobi. Honest pricing and the chairs arrived installed.",
      name: "Dr. Otieno W.",
      clinic: "Lake Family Dental Clinic, Milimani"
    },
    faqs: [
      { q: "How long does delivery to Kisumu take?", a: "Standard orders reach Kisumu within 24–48 hours via direct road freight from our Eldoret warehouse — usually faster than Nairobi-based suppliers." },
      { q: "Do you deliver to Maseno, Bondo and Siaya?", a: "Yes — Maseno, Bondo, Siaya, Homa Bay and the wider Lake region are all on our standard Kisumu delivery route." },
      { q: "Do you charge upcountry surcharges to Kisumu?", a: "No. Kisumu clinics pay the same catalogue prices as our Nairobi accounts." }
    ],
    keywords: [
      "dental supplies Kisumu",
      "dental equipment Lake region",
      "dental chair Kisumu",
      "dental supplier Maseno Bondo"
    ]
  },
  // ── ELDORET ────────────────────────────────────────────────────────────
  {
    slug: "eldoret",
    city: "Eldoret",
    region: "Rift Valley",
    title: `Dental Supplies in Eldoret — Walk-in Warehouse | ${SITE.name}`,
    metaDescription: "Eldoret's home-base dental supplier. Walk-in warehouse at Sagaas Business Center serving MTRH, Moi University Dental School and clinics across the North Rift.",
    h1: "Dental Supplies in Eldoret",
    intro: "Our home base — a walk-in dental supply warehouse serving Eldoret, MTRH, Moi University and the entire North Rift.",
    about: [
      SITE.name + " is headquartered in Eldoret, on the 2nd floor of Sagaas Business Center. We're the only full-catalogue dental supplier with a walk-in warehouse in the North Rift, which means Eldoret clinics can pick up stock the same hour they need it — no waiting on a courier, no minimum order.",
      "Our Eldoret clients include MTRH dental department, Moi University Dental School, private practices in Pioneer, West Indies and Kapsoya, and outreach clinics across Uasin Gishu, Trans-Nzoia and Elgeyo-Marakwet. Because we're local, our team knows the clinicians personally and can drop off urgent orders by motorcycle the same morning.",
      "Being our headquarters also means Eldoret receives every new stock arrival first — composites, gloves, brackets, implants and chairs land at our Eldoret warehouse before anything is shipped onward. Eldoret clinics get first pick."
    ],
    delivery: "Same-day walk-in pickup at Sagaas Business Center, 2nd Floor. Free motorcycle delivery for urgent orders within Eldoret CBD, Pioneer, West Indies, Langas and Kapsoya. Larger equipment installed on-site within 48 hours.",
    shipping: "Same-day pickup or motorcycle delivery in Eldoret",
    serving: ["Eldoret CBD", "Pioneer", "West Indies", "Langas", "Kapsoya", "Kimumu", "Annex", "Moi University", "Iten", "Kapsabet"],
    landmarks: [
      "Moi Teaching & Referral Hospital (MTRH)",
      "Moi University School of Dentistry",
      "Eldoret Hospital",
      "Mediheal Hospital Eldoret",
      "Reale Hospital"
    ],
    highlights: [
      { t: "Walk-in warehouse", d: "Pick up your order from Sagaas Business Center, 2nd Floor — same hour you order." },
      { t: "Free local delivery", d: "Free motorcycle delivery for urgent orders inside Eldoret CBD, Pioneer, West Indies and Langas." },
      { t: "First access to new stock", d: "Every new shipment lands in Eldoret first — local clinics get first pick." },
      { t: "MTRH & Moi University", d: "Trusted supplier to MTRH dental department and Moi University Dental School." }
    ],
    topCategories: ["dental-chairs", "surgical-instruments", "consumables", "laboratory-equipment"],
    testimonial: {
      quote: "I order from Aquadent in the morning and pick up before my first afternoon patient. No other supplier in Eldoret can match that.",
      name: "Dr. Cherop K.",
      clinic: "Eldoret Family Dental, Pioneer"
    },
    faqs: [
      { q: "Where is your Eldoret warehouse?", a: `${SITE.address}. Walk-ins welcome during business hours.` },
      { q: "Can I pick up the same day I order?", a: "Yes — for any item in stock, walk-in pickup or motorcycle delivery happens within hours of your order being placed." },
      { q: "Do you supply MTRH and Moi University?", a: "Yes — we are a long-standing supplier to MTRH dental department and the Moi University School of Dentistry." }
    ],
    keywords: [
      "dental supplies Eldoret",
      "dental equipment Eldoret",
      "dental warehouse Eldoret",
      "MTRH dental supplier",
      "Moi University dental supplies"
    ]
  },
  // ── NAKURU ─────────────────────────────────────────────────────────────
  {
    slug: "nakuru",
    city: "Nakuru",
    region: "Rift Valley",
    title: `Dental Supplies in Nakuru, Naivasha & Central Rift | ${SITE.name}`,
    metaDescription: "Dental equipment, instruments and consumables for Nakuru, Naivasha, Gilgil and Njoro. Next-day delivery from our Eldoret warehouse to Kenya's fastest-growing dental market.",
    h1: "Dental Supplies in Nakuru",
    intro: "Next-day delivery to Nakuru, Naivasha, Gilgil and the wider Central Rift dental market.",
    about: [
      "Nakuru has become Kenya's fastest-growing private dental market, with new clinics opening every quarter in Milimani, Section 58 and along the Nakuru–Naivasha corridor. " + SITE.name + " supplies the city with the full range of dental chairs, instruments, consumables and laboratory equipment — delivered the next working day from our Eldoret warehouse.",
      "Our Nakuru clients include private practices in Milimani and Section 58, county dental clinics, faith-based hospitals and outreach programmes across Naivasha, Gilgil and Njoro. Nakuru's central location means we can also support clinicians in Nyahururu and Molo from the same delivery run.",
      "Because Nakuru sits on the Eldoret–Nairobi corridor, deliveries are scheduled with our daily freight movements — keeping costs low and timelines reliable."
    ],
    delivery: "Nakuru orders ride on our daily Eldoret–Nairobi corridor freight, with last-mile delivery to Milimani, Section 58, Naivasha, Gilgil and Njoro within 24 hours. Equipment installations are scheduled weekly.",
    shipping: "Next-day delivery to Nakuru and Central Rift",
    serving: ["Nakuru CBD", "Section 58", "Milimani", "Naivasha", "Gilgil", "Njoro", "Nyahururu", "Molo"],
    landmarks: [
      "Nakuru Provincial General Hospital",
      "War Memorial Hospital",
      "Naivasha Sub-County Hospital",
      "Mediheal Hospital Nakuru"
    ],
    highlights: [
      { t: "Next-day Nakuru delivery", d: "Daily freight on the Eldoret–Nairobi corridor means consistent next-day arrival." },
      { t: "Naivasha & Gilgil included", d: "Naivasha and Gilgil clinics receive the same next-day service as Nakuru CBD." },
      { t: "Growing-clinic packages", d: "Starter packages built around new private practices opening in Milimani and Section 58." },
      { t: "County hospital supply", d: "Trusted supplier to county and faith-based hospitals across the Central Rift." }
    ],
    topCategories: ["dental-chairs", "consumables", "orthodontics", "clinical-materials"],
    testimonial: {
      quote: "We opened our Section 58 clinic with Aquadent — chair, autoclave, X-ray and three months of consumables. One supplier, one quote, installed in a week.",
      name: "Dr. Wairimu M.",
      clinic: "Section 58 Dental, Nakuru"
    },
    faqs: [
      { q: "How fast is delivery to Nakuru?", a: "Next-day for standard orders, using our daily Eldoret–Nairobi corridor freight. Equipment installs are scheduled within the same week." },
      { q: "Do you deliver to Naivasha and Gilgil?", a: "Yes — Naivasha, Gilgil and Njoro receive the same next-day service as Nakuru CBD." }
    ],
    keywords: [
      "dental supplies Nakuru",
      "dental equipment Naivasha",
      "dental chair Nakuru",
      "dental supplier Central Rift"
    ]
  },
  // ── KITALE ─────────────────────────────────────────────────────────────
  {
    slug: "kitale",
    city: "Kitale",
    region: "Western Kenya",
    title: `Dental Supplies in Kitale & Trans-Nzoia | ${SITE.name}`,
    metaDescription: "Dental chairs, instruments and consumables delivered to Kitale, Endebess, Kapenguria and Trans-Nzoia clinics. Next-day delivery from neighbouring Eldoret.",
    h1: "Dental Supplies in Kitale",
    intro: "Next-door supplier — Eldoret-fast delivery to Kitale and the entire Trans-Nzoia region.",
    about: [
      "Kitale clinics enjoy some of our fastest delivery times because we're effectively next door. From our Eldoret warehouse, road freight to Kitale takes under two hours — urgent orders can be on a clinic's bench by the afternoon.",
      SITE.name + " supplies private practices in Kitale CBD and Milimani, the county dental clinic, faith-based hospitals and outreach programmes serving Endebess, Kapenguria and Cherangany. Our full catalogue of chairs, instruments, implants, orthodontic kits and consumables is available at Nairobi prices — no upcountry surcharge.",
      "Because we're local, we can also handle warranty service and repairs on dental chairs and lab equipment in Kitale without flying in technicians from Nairobi."
    ],
    delivery: "Sub-24-hour road freight from Eldoret to Kitale CBD, Milimani, Endebess, Kapenguria and surrounding Trans-Nzoia towns. Walk-in pickup available at our Eldoret warehouse for same-day collection.",
    shipping: "Same-day or next-morning delivery to Kitale",
    serving: ["Kitale CBD", "Milimani", "Kipsongo", "Endebess", "Kapenguria", "Cherangany", "Saboti"],
    landmarks: [
      "Kitale County Referral Hospital",
      "Mt Elgon Hospital",
      "Cherangany Nursing Home"
    ],
    highlights: [
      { t: "Sub-24-hour delivery", d: "Eldoret–Kitale road freight is under two hours — most orders arrive next morning." },
      { t: "Same-as-Nairobi pricing", d: "No upcountry surcharge for Trans-Nzoia clinics." },
      { t: "Local warranty service", d: "Chair and equipment warranty handled from Eldoret — no waiting on Nairobi technicians." },
      { t: "County & mission hospitals", d: "Account terms available for Kitale County Hospital and mission facilities." }
    ],
    topCategories: ["consumables", "surgical-instruments", "dental-chairs", "clinical-materials"],
    testimonial: {
      quote: "Aquadent is the only dental supplier that treats Kitale like a real market — same prices, same speed, same brands as Nairobi.",
      name: "Dr. Wekesa N.",
      clinic: "Trans-Nzoia Dental, Kitale"
    },
    faqs: [
      { q: "How long does delivery to Kitale take?", a: "Sub-24 hours via road freight from Eldoret. Urgent orders can be on a Kitale clinic's bench the same afternoon." },
      { q: "Do you cover Endebess and Kapenguria?", a: "Yes — Endebess, Kapenguria, Cherangany and Saboti are on our standard Trans-Nzoia delivery route." }
    ],
    keywords: [
      "dental supplies Kitale",
      "dental equipment Trans-Nzoia",
      "dental chair Kitale",
      "dental supplier Kapenguria"
    ]
  },
  // ── KAKAMEGA ───────────────────────────────────────────────────────────
  {
    slug: "kakamega",
    city: "Kakamega",
    region: "Western Kenya",
    title: `Dental Supplies in Kakamega, Bungoma & Western | ${SITE.name}`,
    metaDescription: "Dental chairs, instruments, implants and consumables delivered to Kakamega, Mumias, Bungoma, Webuye and Vihiga. Trusted supplier to Western Kenya clinics and hospitals.",
    h1: "Dental Supplies in Kakamega",
    intro: "Western Kenya's dental supply partner — full catalogue to Kakamega, Bungoma, Mumias and Vihiga.",
    about: [
      "Kakamega is the administrative and medical hub of Western Kenya, with Kakamega County Referral Hospital, Masinde Muliro University and a growing roster of private practices. " + SITE.name + " supplies the region with the full catalogue of dental equipment, instruments and consumables — delivered within 24–48 hours from our Eldoret warehouse.",
      "Our Western Kenya clients include private dental practices in Kakamega and Bungoma towns, county and sub-county hospitals, mission hospitals and outreach programmes serving Mumias, Webuye, Vihiga and Busia.",
      "Because the route from Eldoret to Kakamega runs through Kapsabet and Webuye, we can consolidate deliveries for clinics along the corridor — keeping freight costs low and lead times short."
    ],
    delivery: "Daily road freight from Eldoret via Kapsabet and Webuye, with last-mile delivery to Kakamega CBD, Mumias, Bungoma, Webuye, Vihiga and Busia within 24–48 hours.",
    shipping: "24–48 hour delivery to Western Kenya",
    serving: ["Kakamega CBD", "Mumias", "Bungoma", "Webuye", "Vihiga", "Busia", "Malava", "Khayega"],
    landmarks: [
      "Kakamega County Referral Hospital",
      "Bungoma County Referral Hospital",
      "Masinde Muliro University",
      "Mumias Sub-County Hospital"
    ],
    highlights: [
      { t: "24–48h Western delivery", d: "Daily freight from Eldoret keeps Western Kenya clinics restocked on a predictable schedule." },
      { t: "Consolidated corridor runs", d: "Clinics along the Eldoret–Kapsabet–Webuye–Kakamega route share freight costs." },
      { t: "County hospital terms", d: "Monthly invoicing for Kakamega and Bungoma County Referral Hospitals." },
      { t: "Mission hospital supply", d: "Trusted by faith-based and mission hospitals across Western Kenya." }
    ],
    topCategories: ["consumables", "surgical-instruments", "dental-chairs", "clinical-materials"],
    testimonial: {
      quote: "Aquadent delivers to our Kakamega clinic faster than any Nairobi-based supplier ever did. Stock, prices and service are all consistent.",
      name: "Dr. Mwangi K.",
      clinic: "Kakamega Smile Studio"
    },
    faqs: [
      { q: "How long does delivery to Kakamega take?", a: "24–48 hours via daily road freight from Eldoret through Kapsabet and Webuye." },
      { q: "Do you deliver to Bungoma and Mumias?", a: "Yes — Bungoma, Mumias, Webuye, Vihiga and Busia are all on our standard Western Kenya delivery route." }
    ],
    keywords: [
      "dental supplies Kakamega",
      "dental equipment Bungoma",
      "dental chair Kakamega",
      "dental supplier Western Kenya"
    ]
  },
  // ── MACHAKOS ───────────────────────────────────────────────────────────
  {
    slug: "machakos",
    city: "Machakos",
    region: "Eastern Kenya",
    title: `Dental Supplies in Machakos, Athi River & Kitengela | ${SITE.name}`,
    metaDescription: "Dental chairs, instruments and consumables delivered to Machakos, Athi River, Mlolongo, Kitengela and Wote. Trusted supplier to Eastern Kenya clinics and hospitals.",
    h1: "Dental Supplies in Machakos",
    intro: "Full dental catalogue delivered to Machakos, Athi River, Kitengela and the wider Eastern Kenya region.",
    about: [
      "Machakos and its growing peri-Nairobi belt — Athi River, Mlolongo, Kitengela — host a fast-expanding private dental market serving Nairobi commuters and a permanent local population. " + SITE.name + " supplies the region with the full catalogue of dental equipment, instruments and consumables, delivered within 24–48 hours from our Eldoret warehouse via our Nairobi corridor freight.",
      "Our Machakos clients include private practices in Machakos town and along the Mombasa Road belt, Machakos Level 5 Hospital, Machakos University dental teaching unit and outreach clinics serving Wote, Kangundo and Tala.",
      "Because Machakos sits at the edge of the Nairobi Metropolitan area, clinics in Athi River, Mlolongo and Kitengela enjoy the same next-day delivery service as Nairobi proper."
    ],
    delivery: "Machakos orders ride our daily Nairobi corridor freight, with last-mile delivery to Machakos CBD, Athi River, Mlolongo, Kitengela, Wote and Kangundo within 24–48 hours.",
    shipping: "Next-day delivery to Machakos and Athi River corridor",
    serving: ["Machakos CBD", "Athi River", "Mlolongo", "Kitengela", "Wote", "Kangundo", "Tala", "Matuu"],
    landmarks: [
      "Machakos Level 5 Hospital",
      "Machakos University Dental Teaching Unit",
      "Shalom Community Hospital, Athi River"
    ],
    highlights: [
      { t: "Next-day corridor delivery", d: "Athi River, Mlolongo and Kitengela receive the same next-day service as Nairobi." },
      { t: "Machakos University support", d: "We supply teaching consumables to the Machakos University Dental Teaching Unit." },
      { t: "Peri-Nairobi growth packages", d: "Starter kits for new clinics opening along the Mombasa Road corridor." },
      { t: "County hospital terms", d: "Account terms available for Machakos Level 5 and county facilities." }
    ],
    topCategories: ["dental-chairs", "consumables", "orthodontics", "clinical-materials"],
    testimonial: {
      quote: "Our Kitengela clinic gets next-day delivery just like our Nairobi colleagues. Aquadent doesn't treat us like an outlier.",
      name: "Dr. Ngugi K.",
      clinic: "Kitengela Dental Centre"
    },
    faqs: [
      { q: "How long does delivery to Machakos take?", a: "Next-day for Athi River, Mlolongo, Kitengela and Machakos CBD. 24–48 hours for Wote, Kangundo and Tala." },
      { q: "Do you supply Machakos Level 5 Hospital?", a: "Yes — Machakos Level 5 and other Eastern Kenya county hospitals are supplied on monthly account terms." }
    ],
    keywords: [
      "dental supplies Machakos",
      "dental equipment Athi River",
      "dental chair Kitengela",
      "dental supplier Eastern Kenya"
    ]
  }
];
function getLocationBySlug(slug) {
  return LOCATIONS.find((l) => l.slug === slug.toLowerCase());
}
const BASE_URL = "";
const Route$g = createFileRoute("/sitemap.xml")({
  server: {
    handlers: {
      GET: async () => {
        const staticPaths = [
          { path: "/", priority: "1.0", changefreq: "weekly" },
          { path: "/products", priority: "0.9", changefreq: "daily" },
          { path: "/categories", priority: "0.8", changefreq: "weekly" },
          { path: "/brands", priority: "0.7", changefreq: "monthly" },
          { path: "/blog", priority: "0.7", changefreq: "weekly" },
          { path: "/faq", priority: "0.6", changefreq: "monthly" },
          { path: "/about", priority: "0.5", changefreq: "yearly" },
          { path: "/contact", priority: "0.5", changefreq: "yearly" },
          { path: "/quote", priority: "0.5", changefreq: "monthly" },
          { path: "/locations", priority: "0.7", changefreq: "monthly" }
        ];
        const productPaths = PRODUCTS.map((p) => ({
          path: `/products/${p.slug}`,
          priority: "0.7",
          changefreq: "weekly"
        }));
        const categoryPaths = CATEGORIES.map((c) => ({
          path: `/categories/${c.slug}`,
          priority: "0.8",
          changefreq: "weekly"
        }));
        const locationPaths = LOCATIONS.map((l) => ({
          path: `/locations/${l.slug}`,
          priority: "0.7",
          changefreq: "monthly"
        }));
        const { data: blogRows } = await supabaseAdmin.from("blog_posts").select("slug,published_at,updated_at").eq("published", true);
        const blogPaths = (blogRows ?? []).map((p) => ({
          path: `/blog/${p.slug}`,
          priority: "0.6",
          changefreq: "monthly",
          lastmod: p.published_at ?? p.updated_at
        }));
        const entries = [...staticPaths, ...categoryPaths, ...locationPaths, ...productPaths, ...blogPaths];
        const urls = entries.map(
          (e) => [
            `  <url>`,
            `    <loc>${BASE_URL}${e.path}</loc>`,
            "lastmod" in e && e.lastmod ? `    <lastmod>${e.lastmod}</lastmod>` : null,
            `    <changefreq>${e.changefreq}</changefreq>`,
            `    <priority>${e.priority}</priority>`,
            `  </url>`
          ].filter(Boolean).join("\n")
        ).join("\n");
        const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
` + urls + `
</urlset>`;
        return new Response(xml, {
          headers: {
            "Content-Type": "application/xml",
            "Cache-Control": "public, max-age=3600"
          }
        });
      }
    }
  }
});
const $$splitComponentImporter$f = () => import("./quote-DmZoKBCE.js");
const Route$f = createFileRoute("/quote")({
  head: () => ({
    meta: [{
      title: "Request a Quote — Aquadent Supplies"
    }, {
      name: "description",
      content: "Build your dental supplies quote and we'll respond within one business day."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$f, "component")
});
const $$splitComponentImporter$e = () => import("./login-BTU5dmpx.js");
const Route$e = createFileRoute("/login")({
  beforeLoad: () => {
    throw redirect({
      to: "/admin",
      replace: true
    });
  },
  head: () => ({
    meta: [{
      name: "robots",
      content: "noindex"
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$e, "component")
});
const FAQS = [{
  cat: "delivery",
  q: "Do you deliver dental supplies across Kenya?",
  a: "Yes. Aquadent Supplies dispatches orders nationwide from our Eldoret hub, with reliable courier delivery to Nairobi, Mombasa, Kisumu, Nakuru, Kitale, Kakamega, Machakos and all major Kenyan cities — typically within 1–3 business days."
}, {
  cat: "delivery",
  q: "How much does delivery cost?",
  a: "Delivery within Eldoret town is free. Courier rates to other Kenyan cities depend on weight and dimensions — small consumable orders typically ship for KSh 350–800, while bulky equipment is quoted on request. Large equipment orders to major hubs often include free delivery."
}, {
  cat: "payment",
  q: "What payment methods do you accept?",
  a: "We accept M-Pesa, bank transfer (KCB, Equity, Co-op), and corporate cheques for registered clinics and hospitals. For large orders we can issue a proforma invoice on request."
}, {
  cat: "payment",
  q: "Do you offer credit terms for established clinics?",
  a: "Yes — after 3 months of regular ordering we extend 14- or 30-day credit terms to registered dental clinics and hospitals on application. Send us a short credit application and trade references and we'll respond within 5 working days."
}, {
  cat: "products",
  q: "Are your dental products authentic?",
  a: "Every product we sell is sourced directly from authorised global manufacturers or their accredited distributors. Items such as 3M Ketac Molar, Prevest DenPro and titanium implants ship with batch numbers and original packaging."
}, {
  cat: "products",
  q: "Do you stock dental implants and orthodontic systems?",
  a: "Yes. We carry a curated range of implant systems (Straumann-compatible, MIS, Osstem), orthodontic bracket kits in both MBT and Roth prescriptions, archwires, elastomerics and a full range of restorative, endodontic and prosthetic materials."
}, {
  cat: "warranty",
  q: "Do you offer warranties on dental chairs and equipment?",
  a: "Yes. All dental chairs, compressors, autoclaves and electronic equipment carry a minimum 12-month warranty against manufacturing defects, with on-site support in major Kenyan cities."
}, {
  cat: "warranty",
  q: "Do you provide installation and training?",
  a: "Yes. For dental chairs, compressors and lab equipment we include installation, commissioning and basic operator training in the order price within Kenya. We can extend training to additional staff on request."
}, {
  cat: "warranty",
  q: "What happens if my equipment breaks down?",
  a: "Call or WhatsApp us first. For warranty issues we dispatch a technician or arrange a courier exchange. For out-of-warranty items we quote a repair before any work is done — no surprise bills. Most common spares (compressor membranes, autoclave gaskets, chair upholstery) are kept in stock in Eldoret and Nairobi."
}, {
  cat: "ordering",
  q: "Can I get a quotation for a complete clinic setup?",
  a: "Absolutely. Add the items you need to your quote list, or contact us directly — we put together fully-costed clinic setup packages for new and expanding practices across Kenya."
}, {
  cat: "ordering",
  q: "Do you sell to individual practitioners or only to clinics?",
  a: "Both. We supply individual dentists, clinical officers, dental therapists, group practices, hospitals and dental schools."
}, {
  cat: "ordering",
  q: "How do I place an order?",
  a: "Browse the catalog, add items to a quote, and submit the form. You can also message us on WhatsApp at +254 796 901 382 or email sales@aquadentsupplies.com."
}, {
  cat: "ordering",
  q: "What's the minimum order value?",
  a: "There is no strict minimum — we'll happily process a single item if that's all you need. For free delivery outside Eldoret a typical threshold is KSh 5,000; smaller orders simply attract the standard courier fee."
}];
const $$splitComponentImporter$d = () => import("./faq-wHj49Cn4.js");
const Route$d = createFileRoute("/faq")({
  head: () => ({
    meta: [{
      title: "Dental Supplies FAQ — Aquadent Supplies Kenya"
    }, {
      name: "description",
      content: "Answers to common questions about ordering, payment, delivery and warranty for dental supplies and equipment in Kenya."
    }, {
      property: "og:title",
      content: "Frequently Asked Questions — Aquadent Supplies"
    }, {
      property: "og:description",
      content: "Delivery, payment, warranty and ordering FAQ for Kenyan dental clinics and practitioners."
    }],
    scripts: [{
      type: "application/ld+json",
      children: JSON.stringify({
        "@context": "https://schema.org",
        "@type": "FAQPage",
        mainEntity: FAQS.map((f) => ({
          "@type": "Question",
          name: f.q,
          acceptedAnswer: {
            "@type": "Answer",
            text: f.a
          }
        }))
      })
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$d, "component")
});
const $$splitComponentImporter$c = () => import("./contact-BYB1qnJv.js");
const Route$c = createFileRoute("/contact")({
  head: () => ({
    meta: [{
      title: "Contact — Aquadent Supplies"
    }, {
      name: "description",
      content: "Get in touch with Aquadent Supplies Kenya — phone, email, WhatsApp and Eldoret office."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$c, "component")
});
const $$splitComponentImporter$b = () => import("./brands-CBPchVuX.js");
const Route$b = createFileRoute("/brands")({
  head: () => ({
    meta: [{
      title: "Trusted Dental Brands in Kenya — Aquadent Supplies"
    }, {
      name: "description",
      content: "Aquadent Supplies stocks authentic dental brands from 3M, Prevest, GC, Dentsply Sirona, Ivoclar, NSK, W&H and more — delivered across Kenya."
    }, {
      property: "og:title",
      content: "Trusted Dental Brands — Aquadent Supplies Kenya"
    }, {
      property: "og:description",
      content: "Authentic dental materials, instruments and equipment from the world's leading dental manufacturers."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$b, "component")
});
const $$splitComponentImporter$a = () => import("./admin-DNzUgVHx.js");
const Route$a = createFileRoute("/admin")({
  head: () => ({
    meta: [{
      title: "Admin — Aquadent Supplies"
    }, {
      name: "robots",
      content: "noindex"
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$a, "component")
});
const $$splitComponentImporter$9 = () => import("./about-BBtN0JQg.js");
const Route$9 = createFileRoute("/about")({
  head: () => ({
    meta: [{
      title: "About — Aquadent Supplies"
    }, {
      name: "description",
      content: "Aquadent Supplies is a leading Kenyan dental supplier delivering quality equipment and consumables nationwide."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$9, "component")
});
const $$splitComponentImporter$8 = () => import("./index--pR9fPai.js");
const Route$8 = createFileRoute("/")({
  head: () => ({
    meta: [{
      title: "Aquadent Supplies — Kenya's Trusted Dental Supplier"
    }, {
      name: "description",
      content: "Premium dental equipment, instruments, implants and consumables for clinics across Kenya. Nationwide delivery, professional after-sales support."
    }, {
      property: "og:title",
      content: "Aquadent Supplies — One Time, Every Time"
    }, {
      property: "og:description",
      content: "Kenya's trusted dental supplier — equipment, implants, consumables and more."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$8, "component")
});
const $$splitComponentImporter$7 = () => import("./products.index-B8uMYP55.js");
const Route$7 = createFileRoute("/products/")({
  validateSearch: (s) => ({
    q: typeof s.q === "string" ? s.q : void 0,
    category: typeof s.category === "string" ? s.category : void 0,
    brand: typeof s.brand === "string" ? s.brand : void 0
  }),
  head: () => ({
    meta: [{
      title: "Products — Aquadent Supplies"
    }, {
      name: "description",
      content: "Browse dental chairs, implants, orthodontics, consumables and laboratory products from Aquadent Supplies Kenya."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
});
const $$splitComponentImporter$6 = () => import("./locations.index-BGQw3DIX.js");
const TITLE = `Areas We Deliver — Dental Supplies Across Kenya | ${SITE.name}`;
const DESC = `Explore the areas we deliver to. ${SITE.name} ships dental chairs, instruments, implants and consumables to Nairobi, Mombasa, Kisumu, Eldoret, Nakuru, Kitale, Kakamega, Machakos and every county in Kenya.`;
const Route$6 = createFileRoute("/locations/")({
  head: () => ({
    meta: [{
      title: TITLE
    }, {
      name: "description",
      content: DESC
    }, {
      property: "og:title",
      content: TITLE
    }, {
      property: "og:description",
      content: DESC
    }, {
      property: "og:url",
      content: "/locations"
    }],
    links: [{
      rel: "canonical",
      href: "/locations"
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
});
const $$splitComponentImporter$5 = () => import("./categories.index-C6RLlD-l.js");
const Route$5 = createFileRoute("/categories/")({
  head: () => ({
    meta: [{
      title: "Categories — Aquadent Supplies"
    }, {
      name: "description",
      content: "Explore every dental product category — chairs, orthodontics, implants, lab equipment and more."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
});
const $$splitComponentImporter$4 = () => import("./blog.index-4c8Xf2_H.js");
const Route$4 = createFileRoute("/blog/")({
  head: () => ({
    meta: [{
      title: "Dental Blog — Aquadent Supplies Kenya"
    }, {
      name: "description",
      content: "Buying guides, clinical protocols and equipment advice for dental practitioners, clinics and hospitals in Kenya."
    }, {
      property: "og:title",
      content: "Dental Blog — Aquadent Supplies"
    }, {
      property: "og:description",
      content: "Guides and protocols for Kenyan dentists — dental chairs, implants, orthodontics, whitening and clinic setup."
    }]
  }),
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
});
const WARRANTY_BY_CATEGORY = {
  "dental-chairs": "1-year manufacturer warranty",
  "orthodontics": "Batch quality guarantee",
  "implants": "10-year implant guarantee",
  "prosthetics": "6-month workmanship warranty",
  "consumables": "Batch quality guarantee",
  "surgical-instruments": "Lifetime structural warranty",
  "laboratory-equipment": "1-year manufacturer warranty",
  "whitening-kits": "Batch quality guarantee",
  "clinical-materials": "Batch quality guarantee"
};
const BRAND_BY_ID = {
  "ketac-molar": "3M ESPE",
  "micron-superior-2": "Prevest DenPro",
  "composite-kit": "Prevest DenPro",
  "exam-gloves": "SafeTouch",
  "whitening-kit": "BriteSmile Pro",
  "ortho-bracket-kit": "OrthoOne",
  "implant-kit": "OsteoSure",
  "surgical-extraction-set": "GermanSteel",
  "dental-chair-unit": "Aquadent Pro",
  "lab-trimmer": "Aquadent Lab",
  "special-trays": "Aquadent",
  "flexible-dentures": "Aquadent"
};
const OUT_OF_STOCK = /* @__PURE__ */ new Set();
Array.from(
  new Set(Object.values(BRAND_BY_ID))
).sort();
function getProductMeta(p) {
  const brand = BRAND_BY_ID[p.id] ?? "Aquadent";
  const inStock = !OUT_OF_STOCK.has(p.id);
  const warranty = WARRANTY_BY_CATEGORY[p.categoryId];
  const specs = [
    { label: "Brand", value: brand },
    ...p.sku ? [{ label: "SKU", value: p.sku }] : [],
    ...p.lot ? [{ label: "Lot", value: p.lot }] : [],
    ...p.features.map((f) => ({ label: "Feature", value: f })),
    { label: "Warranty", value: warranty },
    { label: "Delivery", value: "Nationwide, 2–5 business days" }
  ];
  return {
    brand,
    inStock,
    leadTimeDays: inStock ? 3 : 14,
    warranty,
    specs
  };
}
const $$splitComponentImporter$3 = () => import("./products._slug-DK6OSSxh.js");
const $$splitErrorComponentImporter$3 = () => import("./products._slug-B6U13trs.js");
const $$splitNotFoundComponentImporter$3 = () => import("./products._slug-DuBuhDn5.js");
const Route$3 = createFileRoute("/products/$slug")({
  loader: async ({
    params,
    context
  }) => {
    const [dbProducts, dbCategories] = await Promise.all([context.queryClient.ensureQueryData(productsQueryOptions).catch(() => []), context.queryClient.ensureQueryData(categoriesQueryOptions).catch(() => [])]);
    const staticProduct = getProductBySlug(params.slug);
    const dbProduct = dbProducts.find((p) => p.slug === params.slug);
    const product = dbProduct ?? staticProduct;
    if (!product) throw notFound();
    const dbCategory = dbCategories.find((c) => c.slug === product.categoryId);
    const category = dbCategory ?? categoryOf(product);
    const dbRelated = dbProducts.filter((p) => p.categoryId === product.categoryId && p.slug !== product.slug).slice(0, 4);
    const related = dbRelated.length > 0 ? dbRelated : (productsByCategoryId[product.categoryId] ?? []).filter((p) => p.id !== product.id).slice(0, 4);
    return {
      product,
      category,
      related
    };
  },
  head: ({
    params,
    loaderData
  }) => {
    if (!loaderData) return {
      meta: []
    };
    const {
      product,
      category
    } = loaderData;
    const url = `/products/${params.slug}`;
    const title = `${product.name} — ${category.name} in Kenya | ${SITE.name}`;
    const description = product.description.slice(0, 155);
    return {
      meta: [{
        title
      }, {
        name: "description",
        content: description
      }, {
        property: "og:title",
        content: title
      }, {
        property: "og:description",
        content: description
      }, {
        property: "og:type",
        content: "product"
      }, {
        property: "og:url",
        content: url
      }, {
        property: "og:image",
        content: product.image
      }, {
        name: "twitter:card",
        content: "summary_large_image"
      }, {
        name: "twitter:title",
        content: title
      }, {
        name: "twitter:description",
        content: description
      }, {
        name: "twitter:image",
        content: product.image
      }],
      links: [{
        rel: "canonical",
        href: url
      }],
      scripts: [{
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "Product",
          name: product.name,
          description: product.description,
          image: product.image,
          sku: product.sku ?? product.id,
          category: category.name,
          brand: {
            "@type": "Brand",
            name: getProductMeta(product).brand
          },
          offers: {
            "@type": "Offer",
            priceCurrency: "KES",
            price: product.price,
            availability: "https://schema.org/InStock",
            url,
            seller: {
              "@type": "Organization",
              name: SITE.name
            }
          }
        })
      }, {
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "BreadcrumbList",
          itemListElement: [{
            "@type": "ListItem",
            position: 1,
            name: "Home",
            item: "/"
          }, {
            "@type": "ListItem",
            position: 2,
            name: "Products",
            item: "/products"
          }, {
            "@type": "ListItem",
            position: 3,
            name: category.name,
            item: `/categories/${category.slug}`
          }, {
            "@type": "ListItem",
            position: 4,
            name: product.name,
            item: url
          }]
        })
      }]
    };
  },
  notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter$3, "notFoundComponent"),
  errorComponent: lazyRouteComponent($$splitErrorComponentImporter$3, "errorComponent"),
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
});
const $$splitComponentImporter$2 = () => import("./locations._city-CFbd-WtH.js");
const $$splitErrorComponentImporter$2 = () => import("./locations._city-B6U13trs.js");
const $$splitNotFoundComponentImporter$2 = () => import("./locations._city-CBe1mvPK.js");
const Route$2 = createFileRoute("/locations/$city")({
  loader: ({
    params
  }) => {
    const loc = getLocationBySlug(params.city);
    if (!loc) throw notFound();
    return {
      loc
    };
  },
  head: ({
    params,
    loaderData
  }) => {
    if (!loaderData) return {
      meta: []
    };
    const {
      loc
    } = loaderData;
    const url = `/locations/${params.city}`;
    return {
      meta: [{
        title: loc.title
      }, {
        name: "description",
        content: loc.metaDescription
      }, {
        name: "keywords",
        content: loc.keywords.join(", ")
      }, {
        property: "og:title",
        content: loc.title
      }, {
        property: "og:description",
        content: loc.metaDescription
      }, {
        property: "og:type",
        content: "website"
      }, {
        property: "og:url",
        content: url
      }, {
        name: "twitter:card",
        content: "summary_large_image"
      }],
      links: [{
        rel: "canonical",
        href: url
      }],
      scripts: [{
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "LocalBusiness",
          name: `${SITE.name} — ${loc.city}`,
          description: loc.metaDescription,
          url,
          telephone: SITE.phone,
          email: SITE.email,
          areaServed: {
            "@type": "City",
            name: loc.city
          },
          address: {
            "@type": "PostalAddress",
            streetAddress: SITE.address,
            addressCountry: "KE"
          }
        })
      }, {
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "BreadcrumbList",
          itemListElement: [{
            "@type": "ListItem",
            position: 1,
            name: "Home",
            item: "/"
          }, {
            "@type": "ListItem",
            position: 2,
            name: "Locations",
            item: "/locations"
          }, {
            "@type": "ListItem",
            position: 3,
            name: loc.city,
            item: url
          }]
        })
      }, {
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "FAQPage",
          mainEntity: loc.faqs.map((f) => ({
            "@type": "Question",
            name: f.q,
            acceptedAnswer: {
              "@type": "Answer",
              text: f.a
            }
          }))
        })
      }]
    };
  },
  notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter$2, "notFoundComponent"),
  errorComponent: lazyRouteComponent($$splitErrorComponentImporter$2, "errorComponent"),
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
});
const $$splitComponentImporter$1 = () => import("./categories._slug-BxKkFV-d.js");
const $$splitErrorComponentImporter$1 = () => import("./categories._slug-B6U13trs.js");
const $$splitNotFoundComponentImporter$1 = () => import("./categories._slug-CKefqB5y.js");
const Route$1 = createFileRoute("/categories/$slug")({
  loader: ({
    params
  }) => {
    const category = getCategoryBySlug(params.slug);
    if (!category) throw notFound();
    const products = productsByCategoryId[category.id];
    return {
      category,
      products
    };
  },
  head: ({
    params,
    loaderData
  }) => {
    if (!loaderData) return {
      meta: []
    };
    const {
      category,
      products
    } = loaderData;
    const url = `/categories/${params.slug}`;
    const image = category.image;
    return {
      meta: [{
        title: category.title
      }, {
        name: "description",
        content: category.metaDescription
      }, {
        name: "keywords",
        content: category.keywords.join(", ")
      }, {
        property: "og:title",
        content: category.title
      }, {
        property: "og:description",
        content: category.metaDescription
      }, {
        property: "og:type",
        content: "website"
      }, {
        property: "og:url",
        content: url
      }, {
        property: "og:image",
        content: image
      }, {
        name: "twitter:card",
        content: "summary_large_image"
      }, {
        name: "twitter:title",
        content: category.title
      }, {
        name: "twitter:description",
        content: category.metaDescription
      }, {
        name: "twitter:image",
        content: image
      }],
      links: [{
        rel: "canonical",
        href: url
      }],
      scripts: [{
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "CollectionPage",
          name: category.h1,
          description: category.metaDescription,
          url,
          image,
          isPartOf: {
            "@type": "WebSite",
            name: SITE.name
          },
          hasPart: products.map((p) => ({
            "@type": "Product",
            name: p.name,
            description: p.short,
            sku: p.sku ?? p.id,
            category: category.name,
            offers: {
              "@type": "Offer",
              priceCurrency: "KES",
              price: p.price,
              availability: "https://schema.org/InStock"
            }
          }))
        })
      }, {
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "BreadcrumbList",
          itemListElement: [{
            "@type": "ListItem",
            position: 1,
            name: "Home",
            item: "/"
          }, {
            "@type": "ListItem",
            position: 2,
            name: "Categories",
            item: "/categories"
          }, {
            "@type": "ListItem",
            position: 3,
            name: category.h1,
            item: url
          }]
        })
      }, {
        type: "application/ld+json",
        children: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "FAQPage",
          mainEntity: category.faqs.map((f) => ({
            "@type": "Question",
            name: f.q,
            acceptedAnswer: {
              "@type": "Answer",
              text: f.a
            }
          }))
        })
      }]
    };
  },
  notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter$1, "notFoundComponent"),
  errorComponent: lazyRouteComponent($$splitErrorComponentImporter$1, "errorComponent"),
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
});
const fallbackCover = "/assets/blog-clinic-CbsRgbSO.jpg";
function rowToPost(r) {
  return {
    slug: r.slug,
    title: r.title,
    excerpt: r.excerpt ?? "",
    date: r.published_at ?? r.created_at,
    readMin: r.read_min ?? 5,
    cover: r.cover_url || fallbackCover,
    body: r.body ?? ""
  };
}
async function fetchPublishedPosts() {
  const { data, error } = await supabase.from("blog_posts").select("slug,title,excerpt,body,cover_url,read_min,published_at,created_at").eq("published", true).order("published_at", { ascending: false, nullsFirst: false });
  if (error) throw error;
  return (data ?? []).map((r) => rowToPost(r));
}
async function fetchPostBySlug(slug) {
  const { data, error } = await supabase.from("blog_posts").select("slug,title,excerpt,body,cover_url,read_min,published,published_at,created_at").eq("slug", slug).maybeSingle();
  if (error) throw error;
  if (!data || !data.published) return null;
  return rowToPost(data);
}
const $$splitComponentImporter = () => import("./blog._slug-B7Xbd4da.js");
const $$splitErrorComponentImporter = () => import("./blog._slug-D0egeHF6.js");
const $$splitNotFoundComponentImporter = () => import("./blog._slug-DxAa39cO.js");
const Route = createFileRoute("/blog/$slug")({
  loader: async ({
    params
  }) => {
    const post = await fetchPostBySlug(params.slug);
    if (!post) throw notFound();
    const all = await fetchPublishedPosts();
    const related = all.filter((p) => p.slug !== post.slug).slice(0, 3);
    return {
      post,
      related
    };
  },
  head: ({
    loaderData
  }) => ({
    meta: loaderData ? [{
      title: `${loaderData.post.title} — Aquadent Supplies`
    }, {
      name: "description",
      content: loaderData.post.excerpt
    }, {
      property: "og:title",
      content: loaderData.post.title
    }, {
      property: "og:description",
      content: loaderData.post.excerpt
    }, {
      property: "og:type",
      content: "article"
    }, {
      property: "og:image",
      content: loaderData.post.cover
    }, {
      property: "article:published_time",
      content: loaderData.post.date
    }, {
      name: "twitter:card",
      content: "summary_large_image"
    }, {
      name: "twitter:title",
      content: loaderData.post.title
    }, {
      name: "twitter:description",
      content: loaderData.post.excerpt
    }, {
      name: "twitter:image",
      content: loaderData.post.cover
    }] : [],
    links: loaderData ? [{
      rel: "canonical",
      href: `/blog/${loaderData.post.slug}`
    }] : [],
    scripts: loaderData ? [{
      type: "application/ld+json",
      children: JSON.stringify({
        "@context": "https://schema.org",
        "@type": "Article",
        headline: loaderData.post.title,
        description: loaderData.post.excerpt,
        image: [loaderData.post.cover],
        datePublished: loaderData.post.date,
        dateModified: loaderData.post.date,
        author: {
          "@type": "Organization",
          name: SITE.name
        },
        publisher: {
          "@type": "Organization",
          name: SITE.name
        },
        mainEntityOfPage: {
          "@type": "WebPage",
          "@id": `/blog/${loaderData.post.slug}`
        }
      })
    }, {
      type: "application/ld+json",
      children: JSON.stringify({
        "@context": "https://schema.org",
        "@type": "BreadcrumbList",
        itemListElement: [{
          "@type": "ListItem",
          position: 1,
          name: "Home",
          item: "/"
        }, {
          "@type": "ListItem",
          position: 2,
          name: "Blog",
          item: "/blog"
        }, {
          "@type": "ListItem",
          position: 3,
          name: loaderData.post.title,
          item: `/blog/${loaderData.post.slug}`
        }]
      })
    }] : []
  }),
  notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
  errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),
  component: lazyRouteComponent($$splitComponentImporter, "component")
});
const SitemapDotxmlRoute = Route$g.update({
  id: "/sitemap.xml",
  path: "/sitemap.xml",
  getParentRoute: () => Route$h
});
const QuoteRoute = Route$f.update({
  id: "/quote",
  path: "/quote",
  getParentRoute: () => Route$h
});
const LoginRoute = Route$e.update({
  id: "/login",
  path: "/login",
  getParentRoute: () => Route$h
});
const FaqRoute = Route$d.update({
  id: "/faq",
  path: "/faq",
  getParentRoute: () => Route$h
});
const ContactRoute = Route$c.update({
  id: "/contact",
  path: "/contact",
  getParentRoute: () => Route$h
});
const BrandsRoute = Route$b.update({
  id: "/brands",
  path: "/brands",
  getParentRoute: () => Route$h
});
const AdminRoute = Route$a.update({
  id: "/admin",
  path: "/admin",
  getParentRoute: () => Route$h
});
const AboutRoute = Route$9.update({
  id: "/about",
  path: "/about",
  getParentRoute: () => Route$h
});
const IndexRoute = Route$8.update({
  id: "/",
  path: "/",
  getParentRoute: () => Route$h
});
const ProductsIndexRoute = Route$7.update({
  id: "/products/",
  path: "/products/",
  getParentRoute: () => Route$h
});
const LocationsIndexRoute = Route$6.update({
  id: "/locations/",
  path: "/locations/",
  getParentRoute: () => Route$h
});
const CategoriesIndexRoute = Route$5.update({
  id: "/categories/",
  path: "/categories/",
  getParentRoute: () => Route$h
});
const BlogIndexRoute = Route$4.update({
  id: "/blog/",
  path: "/blog/",
  getParentRoute: () => Route$h
});
const ProductsSlugRoute = Route$3.update({
  id: "/products/$slug",
  path: "/products/$slug",
  getParentRoute: () => Route$h
});
const LocationsCityRoute = Route$2.update({
  id: "/locations/$city",
  path: "/locations/$city",
  getParentRoute: () => Route$h
});
const CategoriesSlugRoute = Route$1.update({
  id: "/categories/$slug",
  path: "/categories/$slug",
  getParentRoute: () => Route$h
});
const BlogSlugRoute = Route.update({
  id: "/blog/$slug",
  path: "/blog/$slug",
  getParentRoute: () => Route$h
});
const rootRouteChildren = {
  IndexRoute,
  AboutRoute,
  AdminRoute,
  BrandsRoute,
  ContactRoute,
  FaqRoute,
  LoginRoute,
  QuoteRoute,
  SitemapDotxmlRoute,
  BlogSlugRoute,
  CategoriesSlugRoute,
  LocationsCityRoute,
  ProductsSlugRoute,
  BlogIndexRoute,
  CategoriesIndexRoute,
  LocationsIndexRoute,
  ProductsIndexRoute
};
const routeTree = Route$h._addFileChildren(rootRouteChildren)._addFileTypes();
const getRouter = () => {
  const queryClient = new QueryClient();
  const router2 = createRouter({
    routeTree,
    context: { queryClient },
    scrollRestoration: true,
    defaultPreloadStaleTime: 0
  });
  return router2;
};
const router = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
  __proto__: null,
  getRouter
}, Symbol.toStringTag, { value: "Module" }));
export {
  useSiteSettings as A,
  Button as B,
  CATEGORIES as C,
  Dialog as D,
  useTestimonials as E,
  FAQS as F,
  waLink as G,
  waLinkFor as H,
  LOCATIONS as L,
  Route$7 as R,
  SITE as S,
  CATEGORY_IDS as a,
  DialogContent as b,
  DialogDescription as c,
  DialogFooter as d,
  DialogHeader as e,
  DialogTitle as f,
  Route$3 as g,
  Route$2 as h,
  Route$1 as i,
  Route as j,
  categoriesById as k,
  categoryOf as l,
  cn as m,
  fetchPublishedPosts as n,
  formatKsh as o,
  getProductMeta as p,
  mailLink as q,
  router as r,
  supabase as s,
  useBrands as t,
  useAuth as u,
  useCategories as v,
  useFeaturedProducts as w,
  useProducts as x,
  useProductsByCategorySlug as y,
  useQuote as z
};
