> ## Documentation Index
> Fetch the complete documentation index at: https://anvil.servicetitan.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Foundations

export const OverviewGrid = ({description, items}) => {
  const hasImages = items?.some(item => item.image || item.darkImage);
  return <div className="my-10">
      <p className="mt-2 text-lg text-gray-600 dark:text-gray-400">
        {description}
      </p>

      <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8 mt-12">
        {items && items.length > 0 ? items.map(item => hasImages ? <a key={item.title} href={item.href} className="group block border-0 hover:no-underline">
                  <div className="flex items-center justify-center rounded-xl bg-gray-100 border border-gray-200 dark:border-neutral-800 group-hover:border-blue-500 dark:group-hover:border-blue-600 transition-colors overflow-hidden">
                    <div className="w-full bg-gray-100 dark:bg-gray-800 relative" style={{
    aspectRatio: "16/9"
  }}>
                      {item.image && <img src={item.image} alt={item.title} onLoad={() => <div>test</div>} className={`w-full object-contain m-0 block${item.darkImage ? " dark:hidden" : ""}`} />}
                      {item.darkImage && <img src={item.darkImage} alt={item.title} className="w-full object-contain hidden dark:block m-0" />}
                    </div>
                  </div>
                  <h4 className="mt-2 text-center text-gray-800 dark:text-gray-200 group-hover:text-blue-500 dark:group-hover:text-blue-400 transition-colors">
                    {item.title}
                  </h4>
                </a> : <Card key={item.title} title={item.title} href={item.href}>
                  {item.description}
                </Card>) : null}
      </div>
    </div>;
};

<OverviewGrid
  description="Foundations are the visual, atomic elements that bring together a UI."
  items={[
{
title: "Colors",
href: "/docs/web/foundations/colors",
image: "/images/docs/web/foundations/colors/overview-image.png",
darkImage: "/images/docs/web/foundations/colors/overview-image-dark.png",
},
{
title: "Content",
href: "/docs/web/foundations/content",
image: "/images/docs/web/foundations/content/overview-image.png",
darkImage: "/images/docs/web/foundations/content/overview-image-dark.png",
},
{
title: "Iconography",
href: "/docs/web/foundations/iconography",
image: "/images/docs/web/foundations/iconography/overview-image.png",
darkImage: "/images/docs/web/foundations/iconography/overview-image-dark.png",
},
{
title: "Sizing",
href: "/docs/web/foundations/sizing",
image: "/images/docs/web/foundations/sizing/overview-image.png",
darkImage: "/images/docs/web/foundations/sizing/overview-image-dark.png",
},
{
title: "Spacing",
href: "/docs/web/foundations/spacing",
image: "/images/docs/web/foundations/spacing/overview-image.png",
darkImage: "/images/docs/web/foundations/spacing/overview-image-dark.png",
},
{
title: "Theming",
href: "/docs/web/foundations/theming",
image: "/images/docs/web/foundations/theming/overview-image.png",
darkImage: "/images/docs/web/foundations/theming/overview-image-dark.png",
},
{
title: "Typography",
href: "/docs/web/foundations/typography",
image: "/images/docs/web/foundations/typography/overview-image.png",
darkImage: "/images/docs/web/foundations/typography/overview-image-dark.png",
},
]}
/>
