# Contact

> Contact variant for block.

A shadcn/ui block from the [@uiable](https://uiable.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/uiable/block-contact).

- Page, with a live preview: https://shadcn.exchange/r/uiable/block-contact
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/uiable/block-contact-light-d230ad76a1335b02.png
- Registry item: https://uiable.com/r/block-contact.json
- Categories: landing
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://uiable.com/r/block-contact.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `sonner`
- Registry items: `@uiable/button`, `@uiable/input`

## Files

### `src/components/uiable/blocks/landing/contact/Contact.tsx`

```tsx
"use client"

import { SyntheticEvent, useState } from "react"

// shadcn
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"

// third-party
import { toast } from "sonner"

// project-imports
import LightFav from "@/images/brand/light-fav"
import ContactLeftGrid from "@/images/svg/landing/contact-left-grid"
import ContactRightGrid from "@/images/svg/landing/contact-right-grid"

//  ------------------------------ | CONTACT | ------------------------------  //

export default function Contact({
  group_name = "uiable_landing",
}: {
  group_name?: string
}) {
  const [email, setEmail] = useState("")
  const [loading, setLoading] = useState(false)

  const handleSubmit = async (e: SyntheticEvent<HTMLFormElement>) => {
    e.preventDefault()

    if (!email) return

    setLoading(true)
    try {
      const response = await fetch("/api/subscribe", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ email, group_name }),
      })

      const data = await response.json()

      if (response.ok) {
        toast.success(data.message || "Subscribed successfully!")
        setEmail("")
      } else {
        toast.error(data.error || "Failed to subscribe")
      }
    } catch {
      toast.error("Something went wrong. Please try again.")
    } finally {
      setLoading(false)
    }
  }

  return (
    <section className="mx-auto w-full px-4 py-24 sm:px-8">
      <div className="relative overflow-hidden rounded-lg border border-border bg-slate-950">
        {/* BLUE GLOW */}
        <div
          className="absolute inset-0 z-10"
          style={{
            background:
              "linear-gradient(95.43deg, var(--primary) 0.51%, transparent 84.32%)",
          }}
        />

        {/* LEFT GRID */}
        <div className="pointer-events-none absolute -top-5 -left-5 z-20 select-none sm:-top-7.5 sm:-left-7.5 lg:-top-12.5 lg:-left-12.5">
          <ContactLeftGrid className="h-45 w-45 sm:h-65 sm:w-65 lg:h-93 lg:w-93" />
        </div>

        {/* RIGHT GRID */}
        <div className="pointer-events-none absolute -right-5 -bottom-5 z-20 select-none sm:-right-7.5 sm:-bottom-7.5 lg:-right-12.5 lg:-bottom-12.5">
          <ContactRightGrid className="h-45 w-45 sm:h-65 sm:w-65 lg:h-93 lg:w-93" />
        </div>

        {/* CONTENT */}
        <div className="relative z-30 mx-auto flex max-w-3xl flex-col items-center gap-10 py-16 text-center">
          {/* LOGO */}
          <div className="flex items-center justify-center">
            <LightFav width={84} height={80} />
          </div>

          {/* HEADING */}
          <div className="flex flex-col items-center gap-3.5">
            <h2 className="text-4xl leading-none font-semibold text-white">
              Get product updates and new releases
            </h2>

            {/* SUBTEXT */}
            <p className="max-w-lg text-base leading-5 font-normal text-white">
              Be the first to know about new components, application blocks,
              templates, and upcoming releases.
            </p>
          </div>

          {/* INPUT */}
          <form
            onSubmit={handleSubmit}
            className="flex w-full max-w-xl flex-col gap-3 border border-white/10 bg-white/5 p-2 backdrop-blur sm:flex-row sm:items-center sm:rounded-full sm:p-1.5"
          >
            <Input
              type="email"
              required
              value={email}
              onChange={(e) => setEmail(e.target.value)}
              placeholder="Enter your email"
              className="h-12 flex-1 rounded-none border-none bg-transparent px-5 py-3 text-base leading-5 text-white outline-none placeholder:text-white/50 focus:border-none"
            />

            <Button
              type="submit"
              className="rounded-full"
              size="lg"
              disabled={loading}
            >
              {loading ? "Subscribing..." : "Subscribe"}
            </Button>
          </form>
        </div>
      </div>
    </section>
  )
}
```

### `src/images/brand/light-fav.tsx`

```tsx
import { SVGAttributes } from "react"

//  ------------------------------ | LIGHT FAVICON | ------------------------------  //

export default function LightFav({
  width = "130",
  height = "124",
  preserveAspectRatio = "none",
  ...props
}: SVGAttributes<SVGElement>) {
  return (
    <svg
      width={width}
      height={height}
      viewBox="0 0 130 124"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      preserveAspectRatio={preserveAspectRatio}
      {...props}
    >
      <g clipPath="url(#clip0_3410_1450)">
        <path
          d="M0 34C0 15.2223 15.2223 0 34 0H96C114.778 0 130 15.2223 130 34V90C130 108.778 114.778 124 96 124H34C15.2223 124 0 108.778 0 90V34Z"
          fill="#030712"
        />
        <path
          d="M0 34C0 15.2223 15.2223 0 34 0H96C114.778 0 130 15.2223 130 34V90C130 108.778 114.778 124 96 124H34C15.2223 124 0 108.778 0 90V34Z"
          fill="url(#paint0_linear_3410_1450)"
          fillOpacity="0.3"
        />
        <mask
          id="mask0_3410_1450"
          style={{ maskType: "alpha" }}
          maskUnits="userSpaceOnUse"
          x="0"
          y="0"
          width="130"
          height="124"
        >
          <path
            d="M0 34C0 15.2223 15.2223 0 34 0H96C114.778 0 130 15.2223 130 34V90C130 108.778 114.778 124 96 124H34C15.2223 124 0 108.778 0 90V34Z"
            fill="#030712"
          />
          <path
            d="M0 34C0 15.2223 15.2223 0 34 0H96C114.778 0 130 15.2223 130 34V90C130 108.778 114.778 124 96 124H34C15.2223 124 0 108.778 0 90V34Z"
            fill="url(#paint1_linear_3410_1450)"
            fillOpacity="0.3"
          />
        </mask>
        <g mask="url(#mask0_3410_1450)">
          <g filter="url(#filter0_f_3410_1450)">
            <path
              d="M96 123V124H34V123H96ZM129 90V34C129 15.7746 114.225 1 96 1H34C15.7746 1 1 15.7746 1 34V90C1 108.225 15.7746 123 34 123V124L33.1221 123.989C15.0419 123.531 0.469004 108.958 0.0107422 90.8779L0 90V34C0 15.5158 14.7501 0.476391 33.1221 0.0107422L34 0H96L96.8779 0.0107422C115.25 0.476394 130 15.5158 130 34V90L129.989 90.8779C129.531 108.958 114.958 123.531 96.8779 123.989L96 124V123C114.225 123 129 108.225 129 90Z"
              fill="url(#paint2_linear_3410_1450)"
              fillOpacity="0.8"
            />
          </g>
        </g>
        <g opacity="0.5" filter="url(#filter1_f_3410_1450)">
          <path
            d="M37.4692 67.0009C37.4692 69.9576 38.2094 72.2339 39.6898 73.8296C41.1702 75.4253 43.3431 76.2231 46.2084 76.2231C49.0736 76.2231 51.2703 75.4252 52.7985 73.8296C54.3267 72.2339 55.0908 69.9576 55.0908 67.0009V37.434H67.34V66.9306C67.34 71.3421 66.3848 75.0732 64.4746 78.1237C62.5644 81.1743 59.9857 83.474 56.7384 85.0228C53.5388 86.5715 49.9572 87.3459 45.9936 87.3459C42.0299 87.3459 38.4719 86.5949 35.3201 85.0931C32.2161 83.5444 29.7568 81.2448 27.9421 78.1943C26.1274 75.0968 25.22 71.3422 25.22 66.9306V37.434H37.4692V67.0009ZM87.18 87.3459H75.22V37.434H87.18V87.3459ZM100.395 73.3082C102.423 73.3082 104.083 73.9875 105.374 75.3459C106.711 76.7044 107.38 78.3899 107.38 80.4024C107.38 82.3646 106.711 84.0251 105.374 85.3835C104.083 86.6917 102.423 87.3459 100.395 87.3459C98.3197 87.3459 96.6137 86.6917 95.2765 85.3835C93.9855 84.0251 93.34 82.3647 93.34 80.4024C93.34 78.3899 93.9855 76.7044 95.2765 75.3459C96.6137 73.9875 98.3197 73.3082 100.395 73.3082Z"
            fill="#030712"
          />
        </g>
        <g opacity="0.6" filter="url(#filter2_f_3410_1450)">
          <path
            d="M36.1692 66.7409C36.1692 69.6976 36.9095 71.9739 38.3899 73.5696C39.8703 75.1652 42.0432 75.963 44.9084 75.963C47.7737 75.963 49.9704 75.1652 51.4986 73.5696C53.0267 71.9739 53.7908 69.6976 53.7908 66.7409V37.174H66.04V66.6706C66.04 71.0821 65.0849 74.8132 63.1747 77.8637C61.2645 80.9143 58.6858 83.214 55.4384 84.7628C52.2389 86.3115 48.6573 87.0859 44.6936 87.0859C40.73 87.0859 37.172 86.3349 34.0202 84.8331C30.9162 83.2844 28.4568 80.9848 26.6422 77.9343C24.8275 74.8368 23.92 71.0821 23.92 66.6706V37.174H36.1692V66.7409ZM85.88 87.0859H73.92V37.174H85.88V87.0859Z"
            fill="#ffffff"
          />
        </g>
        <path
          d="M99.0946 87.086C97.0197 87.086 95.3137 86.4319 93.9766 85.1237C92.6856 83.7652 92.04 82.1048 92.04 80.1426C92.04 78.13 92.6856 76.4444 93.9766 75.086C95.3137 73.7275 97.0197 73.0482 99.0946 73.0482C101.123 73.0482 102.783 73.7275 104.074 75.086C105.411 76.4444 106.08 78.13 106.08 80.1426C106.08 82.1048 105.411 83.7652 104.074 85.1237C102.783 86.4319 101.123 87.086 99.0946 87.086Z"
          fill="var(--primary)"
        />
        <path
          d="M36.1692 66.7409C36.1692 69.6976 36.9095 71.9739 38.3899 73.5696C39.8703 75.1652 42.0432 75.963 44.9084 75.963C47.7737 75.963 49.9704 75.1652 51.4986 73.5696C53.0267 71.9739 53.7908 69.6976 53.7908 66.7409V37.174H66.04V66.6706C66.04 71.0821 65.0849 74.8132 63.1747 77.8637C61.2645 80.9143 58.6858 83.214 55.4384 84.7628C52.2389 86.3115 48.6573 87.0859 44.6936 87.0859C40.73 87.0859 37.172 86.3349 34.0202 84.8331C30.9162 83.2844 28.4568 80.9848 26.6422 77.9343C24.8275 74.8368 23.92 71.0821 23.92 66.6706V37.174H36.1692V66.7409ZM85.88 87.0859H73.92V37.174H85.88V87.0859Z"
          fill="url(#paint3_linear_3410_1450)"
        />
        <mask
          id="mask1_3410_1450"
          style={{ maskType: "alpha" }}
          maskUnits="userSpaceOnUse"
          x="23"
          y="37"
          width="84"
          height="51"
        >
          <path
            d="M36.1691 66.7409C36.1691 69.6976 36.9094 71.9739 38.3898 73.5696C39.8702 75.1652 42.043 75.963 44.9083 75.963C47.7736 75.963 49.9703 75.1652 51.4985 73.5696C53.0266 71.9739 53.7907 69.6976 53.7907 66.7409V37.174H66.0399V66.6706C66.0399 71.0821 65.0848 74.8132 63.1746 77.8637C61.2644 80.9143 58.6857 83.214 55.4383 84.7628C52.2388 86.3115 48.6572 87.0859 44.6935 87.0859C40.7298 87.0859 37.1719 86.3349 34.0201 84.8331C30.9161 83.2844 28.4567 80.9848 26.6421 77.9343C24.8274 74.8368 23.9199 71.0821 23.9199 66.6706V37.174H36.1691V66.7409ZM85.8799 87.0859H73.9199V37.174H85.8799V87.0859ZM99.0945 73.0482C101.123 73.0482 102.783 73.7274 104.074 75.0859C105.411 76.4444 106.08 78.1299 106.08 80.1424C106.08 82.1046 105.411 83.765 104.074 85.1235C102.783 86.4317 101.123 87.0859 99.0945 87.0859C97.0196 87.0859 95.3136 86.4317 93.9765 85.1235C92.6855 83.765 92.0399 82.1047 92.0399 80.1424C92.0399 78.1299 92.6855 76.4444 93.9765 75.0859C95.3136 73.7275 97.0196 73.0482 99.0945 73.0482Z"
            fill="url(#paint4_linear_3410_1450)"
          />
        </mask>
        <g mask="url(#mask1_3410_1450)">
          <g opacity="0.6">
            <path
              d="M105.82 80.1424C105.82 78.1939 105.175 76.5751 103.889 75.2682L103.887 75.2667L103.886 75.2649C102.648 73.9627 101.058 73.3081 99.0945 73.3081C97.0825 73.3081 95.4455 73.9641 94.1618 75.2682C92.9224 76.574 92.2999 78.1927 92.2999 80.1424C92.2999 82.0398 92.9211 83.6339 94.1616 84.941C95.4441 86.1941 97.0812 86.8259 99.0945 86.8259V87.0859C97.0196 87.0859 95.3136 86.4317 93.9765 85.1235C92.6855 83.765 92.0399 82.1047 92.0399 80.1424C92.0399 78.1927 92.6458 76.55 93.8574 75.2141L93.9765 75.0859C95.3136 73.7275 97.0196 73.0482 99.0945 73.0482C101.123 73.0482 102.783 73.7274 104.074 75.0859C105.411 76.4444 106.08 78.1299 106.08 80.1424C106.08 82.1046 105.411 83.765 104.074 85.1235L103.952 85.2444C102.679 86.4721 101.06 87.0859 99.0945 87.0859V86.8259C101.062 86.8259 102.652 86.1943 103.889 84.941C105.177 83.6328 105.82 82.0386 105.82 80.1424Z"
              fill="#ffffff"
            />
            <path
              d="M65.7799 66.6706V37.4339H54.0507V66.7409C54.0507 69.7413 53.2747 72.0908 51.6863 73.7493C50.0957 75.4102 47.8224 76.223 44.9083 76.223C41.9947 76.223 39.743 75.4103 38.1991 73.7463C36.6602 72.0875 35.9091 69.7392 35.9091 66.7409V37.4339H24.1799V66.6706C24.1799 71.0465 25.08 74.7534 26.8665 77.8028C28.6554 80.8095 31.0761 83.0728 34.132 84.5985L34.4248 84.7354C37.4646 86.1274 40.8861 86.8259 44.6935 86.8259V87.0859C40.7298 87.0859 37.1719 86.3349 34.0201 84.8331C30.9161 83.2844 28.4567 80.9848 26.6421 77.9343C24.8274 74.8368 23.9199 71.0821 23.9199 66.6706V37.174H36.1691V66.7409C36.1691 69.6976 36.9094 71.9739 38.3898 73.5696C39.8702 75.1652 42.043 75.963 44.9083 75.963C47.7736 75.963 49.9703 75.1652 51.4985 73.5696C53.0266 71.9739 53.7907 69.6976 53.7907 66.7409V37.174H66.0399V66.6706C66.0399 71.0821 65.0848 74.8132 63.1746 77.8637C61.2644 80.9143 58.6857 83.214 55.4383 84.7628C52.2388 86.3115 48.6572 87.0859 44.6935 87.0859V86.8259C48.6225 86.8259 52.1647 86.0585 55.3251 84.5287L55.3263 84.5282C58.529 83.0008 61.0702 80.7346 62.9542 77.7259C64.8332 74.7251 65.7799 71.0444 65.7799 66.6706ZM85.8799 37.174V87.0859H73.9199V37.174H85.8799ZM74.1799 86.8259H85.6199V37.4339H74.1799V86.8259Z"
              fill="#ffffff"
            />
          </g>
          <g opacity="0.4" filter="url(#filter3_f_3410_1450)">
            <path
              d="M100.49 74.218C97.786 73.2821 94.9433 74.6079 93.86 75.3878C95.628 72.3723 99.19 72.1383 100.75 72.3983C106.262 73.6461 107.38 78.3773 107.25 80.5869L104.39 86.0461L103.74 85.0062C106.99 79.937 103.87 75.3878 100.49 74.218Z"
              fill="#030712"
            />
            <path
              d="M35.36 37.8238H23.66L21.71 35.3542H37.18V67.719L42.25 74.7379L49.4 75.2578C47.19 76.4276 42.6324 77.3895 39.39 75.5178C36.1476 73.6461 35.36 69.7987 35.36 67.719V37.8238Z"
              fill="#030712"
            />
            <path
              d="M65.26 37.8238H53.17V36.1341H67.34V68.7589C67.34 76.3496 63.7866 79.1139 62.01 79.5471C64.61 75.4918 65.26 70.6652 65.26 68.7589V37.8238Z"
              fill="#030712"
            />
            <path
              d="M85.02 37.9538H73.32L72.15 36.0041H87.1V87.7358H85.02V37.9538Z"
              fill="#030712"
            />
          </g>
          <g opacity="0.3" filter="url(#filter4_f_3410_1450)">
            <path
              d="M97.7698 85.3962C100.474 86.3321 103.316 85.0063 104.4 84.2264C103.61 87.4759 99.84 88.9057 98.28 88.6457C92.768 87.3979 89.96 81.2369 90.09 79.0272L93.34 72.7882L94.5198 74.608C91.2698 79.6771 94.3898 84.2264 97.7698 85.3962Z"
              fill="#ffffff"
            />
            <path
              d="M25.09 66.5492V36.914C25.09 35.9781 23.4433 35.8308 22.62 35.8741V66.5492C22.62 84.5383 35.7067 88.9489 42.25 88.9056C57.642 92.0251 65.13 78.9405 66.95 72.0083L66.04 70.8385C63.7 80.9769 56.29 86.8259 41.34 85.0062C29.38 83.5505 25.5233 72.095 25.09 66.5492Z"
              fill="#ffffff"
            />
            <path
              d="M75.27 85.6562V37.304C75.27 35.2243 73.97 35.8309 73.32 36.3941V88.1258H86.97V85.6562H75.27Z"
              fill="#ffffff"
            />
          </g>
        </g>
      </g>
      <defs>
        <filter
          id="filter0_f_3410_1450"
          x="-2"
          y="-2"
          width="134"
          height="128"
          filterUnits="userSpaceOnUse"
          colorInterpolationFilters="sRGB"
        >
          <feFlood floodOpacity="0" result="BackgroundImageFix" />
          <feBlend
            mode="normal"
            in="SourceGraphic"
            in2="BackgroundImageFix"
            result="shape"
          />
          <feGaussianBlur
            stdDeviation="1"
            result="effect1_foregroundBlur_3410_1450"
          />
        </filter>
        <filter
          id="filter1_f_3410_1450"
          x="17.22"
          y="29.434"
          width="98.16"
          height="65.912"
          filterUnits="userSpaceOnUse"
          colorInterpolationFilters="sRGB"
        >
          <feFlood floodOpacity="0" result="BackgroundImageFix" />
          <feBlend
            mode="normal"
            in="SourceGraphic"
            in2="BackgroundImageFix"
            result="shape"
          />
          <feGaussianBlur
            stdDeviation="4"
            result="effect1_foregroundBlur_3410_1450"
          />
        </filter>
        <filter
          id="filter2_f_3410_1450"
          x="15.92"
          y="29.174"
          width="77.96"
          height="65.912"
          filterUnits="userSpaceOnUse"
          colorInterpolationFilters="sRGB"
        >
          <feFlood floodOpacity="0" result="BackgroundImageFix" />
          <feBlend
            mode="normal"
            in="SourceGraphic"
            in2="BackgroundImageFix"
            result="shape"
          />
          <feGaussianBlur
            stdDeviation="0"
            result="effect1_foregroundBlur_3410_1450"
          />
        </filter>
        <filter
          id="filter3_f_3410_1450"
          x="20.71"
          y="34.3542"
          width="87.5498"
          height="54.3816"
          filterUnits="userSpaceOnUse"
          colorInterpolationFilters="sRGB"
        >
          <feFlood floodOpacity="0" result="BackgroundImageFix" />
          <feBlend
            mode="normal"
            in="SourceGraphic"
            in2="BackgroundImageFix"
            result="shape"
          />
          <feGaussianBlur
            stdDeviation="0.5"
            result="effect1_foregroundBlur_3410_1450"
          />
        </filter>
        <filter
          id="filter4_f_3410_1450"
          x="21.62"
          y="34.8546"
          width="83.7798"
          height="55.5237"
          filterUnits="userSpaceOnUse"
          colorInterpolationFilters="sRGB"
        >
          <feFlood floodOpacity="0" result="BackgroundImageFix" />
          <feBlend
            mode="normal"
            in="SourceGraphic"
            in2="BackgroundImageFix"
            result="shape"
          />
          <feGaussianBlur
            stdDeviation="0.5"
            result="effect1_foregroundBlur_3410_1450"
          />
        </filter>
        <linearGradient
          id="paint0_linear_3410_1450"
          x1="65"
          y1="-20.5367"
          x2="65"
          y2="111.422"
          gradientUnits="userSpaceOnUse"
        >
          <stop stopColor="#f3f4f6" />
          <stop offset="1" stopColor="#030712" />
        </linearGradient>
        <linearGradient
          id="paint1_linear_3410_1450"
          x1="65"
          y1="-20.5367"
          x2="65"
          y2="111.422"
          gradientUnits="userSpaceOnUse"
        >
          <stop stopColor="#f3f4f6" />
          <stop offset="1" stopColor="#030712" />
        </linearGradient>
        <linearGradient
          id="paint2_linear_3410_1450"
          x1="65"
          y1="0"
          x2="65"
          y2="124"
          gradientUnits="userSpaceOnUse"
        >
          <stop stopColor="#ffffff" />
          <stop offset="0.2" stopColor="#ffffff" stopOpacity="0" />
          <stop offset="0.8" stopColor="#ffffff" stopOpacity="0" />
          <stop offset="1" stopColor="#ffffff" />
        </linearGradient>
        <linearGradient
          id="paint3_linear_3410_1450"
          x1="54.86"
          y1="62.1299"
          x2="54.86"
          y2="99.1739"
          gradientUnits="userSpaceOnUse"
        >
          <stop stopColor="#ffffff" />
          <stop offset="1" stopColor="#030712" />
        </linearGradient>
        <linearGradient
          id="paint4_linear_3410_1450"
          x1="64.9469"
          y1="62.1299"
          x2="64.9469"
          y2="99.1739"
          gradientUnits="userSpaceOnUse"
        >
          <stop stopColor="#ffffff" />
          <stop offset="1" stopColor="#030712" />
        </linearGradient>
        <clipPath id="clip0_3410_1450">
          <rect width="130" height="124" fill="#ffffff" />
        </clipPath>
      </defs>
    </svg>
  )
}
```

### `src/images/svg/landing/contact-left-grid.tsx`

```tsx
// types
import type { SVGAttributes } from "react"

//  ------------------------------ | SVG - CONTACT LEFT GRID | ------------------------------  //

export default function ContactLeftGrid(props: SVGAttributes<SVGElement>) {
  return (
    <svg
      viewBox="0 0 292 262"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      {...props}
    >
      <path
        d="M-3.02246 171.021C4.7095 171.021 10.9775 177.29 10.9775 185.021V248C10.9774 255.732 4.70941 262 -3.02246 262H-66C-73.7319 262 -79.9998 255.732 -80 248V185.021C-79.9999 177.29 -73.732 171.021 -66 171.021H-3.02246ZM90.6514 171.021C98.3833 171.021 104.651 177.29 104.651 185.021V248C104.651 255.732 98.3832 262 90.6514 262H27.6738C19.9419 262 13.674 255.732 13.6738 248V185.021C13.6739 177.29 19.9419 171.021 27.6738 171.021H90.6514ZM184.325 171.021C192.057 171.021 198.325 177.29 198.325 185.021V248C198.325 255.732 192.057 262 184.325 262H121.348C113.616 262 107.348 255.732 107.348 248V185.021C107.348 177.29 113.616 171.021 121.348 171.021H184.325ZM277.999 171.021C285.731 171.021 291.999 177.29 291.999 185.021V248C291.999 255.732 285.731 262 277.999 262H215.021C207.289 262 201.021 255.732 201.021 248V185.021C201.021 177.29 207.289 171.022 215.021 171.021H277.999ZM-3.02246 77.3477C4.70947 77.3477 10.9774 83.6158 10.9775 91.3477V154.326C10.9774 162.058 4.70944 168.326 -3.02246 168.326H-66C-73.7319 168.326 -79.9999 162.058 -80 154.326V91.3477C-79.9999 83.6158 -73.7319 77.3477 -66 77.3477H-3.02246ZM90.6514 77.3477C98.3833 77.3477 104.651 83.6158 104.651 91.3477V154.326C104.651 162.058 98.3833 168.326 90.6514 168.326H27.6738C19.9419 168.326 13.674 162.058 13.6738 154.326V91.3477C13.6739 83.6158 19.9419 77.3477 27.6738 77.3477H90.6514ZM184.325 77.3477C192.057 77.3477 198.325 83.6158 198.325 91.3477V154.326C198.325 162.058 192.057 168.326 184.325 168.326H121.348C113.616 168.326 107.348 162.058 107.348 154.326V91.3477C107.348 83.6158 113.616 77.3477 121.348 77.3477H184.325ZM277.999 77.3477C285.731 77.3477 291.999 83.6158 291.999 91.3477V154.326C291.999 162.058 285.731 168.326 277.999 168.326H215.021C207.289 168.326 201.021 162.058 201.021 154.326V91.3477C201.021 83.6159 207.289 77.3479 215.021 77.3477H277.999ZM-3.02246 -16.3262C4.70944 -16.3262 10.9774 -10.058 10.9775 -2.32617V60.6523C10.9774 68.3842 4.70947 74.6523 -3.02246 74.6523H-66C-73.7319 74.6523 -79.9999 68.3843 -80 60.6523V-2.32617C-79.9999 -10.058 -73.7319 -16.3262 -66 -16.3262H-3.02246ZM90.6514 -16.3262C98.3833 -16.3262 104.651 -10.058 104.651 -2.32617V60.6523C104.651 68.3842 98.3833 74.6523 90.6514 74.6523H27.6738C19.9419 74.6523 13.6739 68.3843 13.6738 60.6523V-2.32617C13.674 -10.058 19.9419 -16.3262 27.6738 -16.3262H90.6514ZM184.325 -16.3262C192.057 -16.3262 198.325 -10.058 198.325 -2.32617V60.6523C198.325 68.3842 192.057 74.6523 184.325 74.6523H121.348C113.616 74.6523 107.348 68.3843 107.348 60.6523V-2.32617C107.348 -10.058 113.616 -16.3262 121.348 -16.3262H184.325ZM277.999 -16.3262C285.731 -16.3262 291.999 -10.058 291.999 -2.32617V60.6523C291.999 68.3842 285.731 74.6523 277.999 74.6523H215.021C207.289 74.6521 201.021 68.3841 201.021 60.6523V-2.32617C201.021 -10.0579 207.289 -16.3259 215.021 -16.3262H277.999ZM-3.02246 -110C4.70941 -110 10.9774 -103.732 10.9775 -96V-33.0215C10.9775 -25.2895 4.7095 -19.0215 -3.02246 -19.0215H-66C-73.732 -19.0215 -80 -25.2895 -80 -33.0215V-96C-79.9998 -103.732 -73.7319 -110 -66 -110H-3.02246ZM90.6514 -110C98.3832 -110 104.651 -103.732 104.651 -96V-33.0215C104.651 -25.2895 98.3833 -19.0215 90.6514 -19.0215H27.6738C19.9419 -19.0215 13.6739 -25.2895 13.6738 -33.0215V-96C13.674 -103.732 19.942 -110 27.6738 -110H90.6514ZM184.325 -110C192.057 -110 198.325 -103.732 198.325 -96V-33.0215C198.325 -25.2895 192.057 -19.0215 184.325 -19.0215H121.348C113.616 -19.0215 107.348 -25.2895 107.348 -33.0215V-96C107.348 -103.732 113.616 -110 121.348 -110H184.325ZM277.999 -110C285.731 -110 291.999 -103.732 291.999 -96V-33.0215C291.999 -25.2895 285.731 -19.0215 277.999 -19.0215H215.021C207.289 -19.0217 201.021 -25.2897 201.021 -33.0215V-96C201.021 -103.732 207.289 -110 215.021 -110H277.999Z"
        fill="url(#paint0_radial_2109_1930)"
      />
      <defs>
        <radialGradient
          id="paint0_radial_2109_1930"
          cx="0"
          cy="0"
          r="1"
          gradientUnits="userSpaceOnUse"
          gradientTransform="translate(106 76) rotate(90) scale(166.456 166.455)"
        >
          <stop stopColor="var(--primary)" />
          <stop offset="1" stopColor="var(--primary)" stopOpacity="0" />
        </radialGradient>
      </defs>
    </svg>
  )
}
```

### `src/images/svg/landing/contact-right-grid.tsx`

```tsx
// types
import type { SVGAttributes } from "react"

//  ------------------------------ | SVG - CONTACT RIGHT GRID | ------------------------------  //

export default function ContactRightGrid(props: SVGAttributes<SVGElement>) {
  return (
    <svg
      viewBox="0 0 283 280"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      {...props}
    >
      <path
        opacity="0.3"
        d="M76.9775 281.021C84.7095 281.021 90.9775 287.29 90.9775 295.021V358C90.9774 365.732 84.7094 372 76.9775 372H14C6.26812 372 0.000173569 365.732 0 358V295.021C5.72205e-05 287.29 6.26805 281.021 14 281.021H76.9775ZM170.651 281.021C178.383 281.021 184.651 287.29 184.651 295.021V358C184.651 365.732 178.383 372 170.651 372H107.674C99.9419 372 93.674 365.732 93.6738 358V295.021C93.6739 287.29 99.9419 281.021 107.674 281.021H170.651ZM264.325 281.021C272.057 281.021 278.325 287.29 278.325 295.021V358C278.325 365.732 272.057 372 264.325 372H201.348C193.616 372 187.348 365.732 187.348 358V295.021C187.348 287.29 193.616 281.021 201.348 281.021H264.325ZM357.999 281.021C365.731 281.021 371.999 287.29 371.999 295.021V358C371.999 365.732 365.731 372 357.999 372H295.021C287.289 372 281.021 365.732 281.021 358V295.021C281.021 287.29 287.289 281.022 295.021 281.021H357.999ZM76.9775 187.348C84.7095 187.348 90.9774 193.616 90.9775 201.348V264.326C90.9774 272.058 84.7094 278.326 76.9775 278.326H14C6.2681 278.326 0.000131607 272.058 0 264.326V201.348C9.91821e-05 193.616 6.26807 187.348 14 187.348H76.9775ZM170.651 187.348C178.383 187.348 184.651 193.616 184.651 201.348V264.326C184.651 272.058 178.383 278.326 170.651 278.326H107.674C99.9419 278.326 93.674 272.058 93.6738 264.326V201.348C93.6739 193.616 99.9419 187.348 107.674 187.348H170.651ZM264.325 187.348C272.057 187.348 278.325 193.616 278.325 201.348V264.326C278.325 272.058 272.057 278.326 264.325 278.326H201.348C193.616 278.326 187.348 272.058 187.348 264.326V201.348C187.348 193.616 193.616 187.348 201.348 187.348H264.325ZM357.999 187.348C365.731 187.348 371.999 193.616 371.999 201.348V264.326C371.999 272.058 365.731 278.326 357.999 278.326H295.021C287.289 278.326 281.021 272.058 281.021 264.326V201.348C281.021 193.616 287.289 187.348 295.021 187.348H357.999ZM76.9775 93.6738C84.7094 93.6738 90.9774 99.942 90.9775 107.674V170.652C90.9774 178.384 84.7095 184.652 76.9775 184.652H14C6.26807 184.652 8.58307e-05 178.384 0 170.652V107.674C0.000143051 99.942 6.2681 93.6738 14 93.6738H76.9775ZM170.651 93.6738C178.383 93.6738 184.651 99.942 184.651 107.674V170.652C184.651 178.384 178.383 184.652 170.651 184.652H107.674C99.9419 184.652 93.6739 178.384 93.6738 170.652V107.674C93.674 99.942 99.9419 93.6738 107.674 93.6738H170.651ZM264.325 93.6738C272.057 93.6738 278.325 99.942 278.325 107.674V170.652C278.325 178.384 272.057 184.652 264.325 184.652H201.348C193.616 184.652 187.348 178.384 187.348 170.652V107.674C187.348 99.942 193.616 93.6738 201.348 93.6738H264.325ZM357.999 93.6738C365.731 93.6738 371.999 99.942 371.999 107.674V170.652C371.999 178.384 365.731 184.652 357.999 184.652H295.021C287.289 184.652 281.021 178.384 281.021 170.652V107.674C281.021 99.9421 287.289 93.6741 295.021 93.6738H357.999ZM76.9775 0C84.7094 0 90.9774 6.26817 90.9775 14V76.9785C90.9775 84.7105 84.7095 90.9785 76.9775 90.9785H14C6.26804 90.9785 4.3869e-05 84.7105 0 76.9785V14C0.000185013 6.26817 6.26813 0 14 0H76.9775ZM170.651 0C178.383 0 184.651 6.26817 184.651 14V76.9785C184.651 84.7105 178.383 90.9785 170.651 90.9785H107.674C99.9419 90.9785 93.6739 84.7105 93.6738 76.9785V14C93.674 6.26817 99.942 0 107.674 0H170.651ZM264.325 0C272.057 0 278.325 6.26817 278.325 14V76.9785C278.325 84.7105 272.057 90.9785 264.325 90.9785H201.348C193.616 90.9785 187.348 84.7105 187.348 76.9785V14C187.348 6.26817 193.616 0 201.348 0H264.325ZM357.999 0C365.731 0 371.999 6.26817 371.999 14V76.9785C371.999 84.7105 365.731 90.9785 357.999 90.9785H295.021C287.289 90.9783 281.021 84.7103 281.021 76.9785V14C281.021 6.26831 287.289 0.000231417 295.021 0H357.999Z"
        fill="url(#paint0_radial_2109_1960)"
      />
      <defs>
        <radialGradient
          id="paint0_radial_2109_1960"
          cx="0"
          cy="0"
          r="1"
          gradientUnits="userSpaceOnUse"
          gradientTransform="translate(159 166) rotate(82.5686) scale(162.364 162.363)"
        >
          <stop stopColor="var(--primary)" stopOpacity="0.5" />
          <stop offset="1" stopColor="var(--primary)" stopOpacity="0" />
        </radialGradient>
      </defs>
    </svg>
  )
}
```
