1<!DOCTYPE html><html class="2xl:text-[20px]" dir="ltr" lang="en"><head><meta charset="UTF-8"><meta content="width=device-width,initial-scale=1" name="viewport"><link href="https://widget.clutch.co" rel="preconnect"><link href="https://www.googletagmanager.com" rel="preconnect"><link href="https://cdnjs.cloudflare.com" rel="preconnect"><link href="https://images.unsplash.com" rel="dns-prefetch"><link href="/sitemap-index.xml" rel="sitemap"><link href="/favicon.ico" rel="shortcut icon"><link href="/favicon.ico" rel="icon" type="image/png"><link href="/favicon.ico" rel="mask-icon" color="#8D46E7"><link href="/favicon.ico" rel="apple-touch-icon" sizes="180x180"><style>:root{--aw-font-sans:'Inter Variable';--aw-font-serif:'Inter Variable';--aw-font-heading:'Inter Variable';--aw-color-primary:rgb(1 97 239);--aw-color-secondary:rgb(1 84 207);--aw-color-accent:rgb(109 40 217);--aw-color-text-heading:rgb(0 0 0);--aw-color-text-default:rgb(16 16 16);--aw-color-text-muted:rgb(16 16 16 / 66%);--aw-color-bg-page:rgb(255 255 255);--aw-color-bg-page-dark:rgb(3 6 32)}.dark{--aw-font-sans:'Inter Variable';--aw-font-serif:'Inter Variable';--aw-font-heading:'Inter Variable';--aw-color-primary:rgb(1 97 239);--aw-color-secondary:rgb(1 84 207);--aw-color-accent:rgb(109 40 217);--aw-color-text-heading:rgb(247, 248, 248);--aw-color-text-default:rgb(229 236 246);--aw-color-text-muted:rgb(229 236 246 / 66%);--aw-color-bg-page:rgb(3 6 32)}</style>
1<script>!function(){const e="system";function t(e){"dark"===e?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark");const t=document.querySelectorAll("[data-aw-toggle-color-scheme] > input");t&&t.length&&t.forEach((t=>{t.checked="dark"!==e}))}e&&e.endsWith(":only")||(localStorage.theme,0)?t(e.replace(":only","")):"dark"===localStorage.theme||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):t("light")}()</script>
1<title>Contact â Let's Connect! | Prairie Giraffe â Prairie Giraffe</title><meta content="Ready to make tech work for your business? Get in touch for AI automation, websites, SEO, and digital marketing solutions. Based in Gillette, WY." name="description"><meta content="index,follow" name="robots"><link href="https://prairiegiraffe.com/contact" rel="canonical"><meta content="Contact â Let's Connect! | Prairie Giraffe" property="og:title"><meta content="Ready to make tech work for your business? Get in touch for AI automation, websites, SEO, and digital marketing solutions. Based in Gillette, WY." property="og:description"><meta content="https://prairiegiraffe.com/contact" property="og:url"><meta content="website" property="og:type"><meta content="https://prairiegiraffe.com/_astro/default.CZ816Hke_2bosb5.jpg" property="og:image"><meta content="1200" property="og:image:width"><meta content="628" property="og:image:height"><meta content="en" property="og:locale"><meta content="Prairie Giraffe" property="og:site_name"><meta content="summary_large_image" name="twitter:card"><meta content="@prairiegiraffe" name="twitter:site"><meta content="@prairiegiraffe" name="twitter:creator"><meta content="orcPxI47GSa-cRvY11tUe6iGg2IO_RPvnA1q95iEM3M" name="google-site-verification">
vendor: 79 bytes, line 1
1<script type="text/partytown" src="https://www.googletagmanager.com/gtag/js?id=
1G-WBJBL71JWF
vendor: 17 bytes, line 1
1" async></script>
1<script type="text/partytown">(function(){const id = "G-WBJBL71JWF"; 2 3 window.dataLayer = window.dataLayer || []; 4 function gtag() { 5 window.dataLayer.push(arguments); 6 } 7 gtag("js", new Date()); 8 gtag("config", id); 9})();</script>
vendor: 57 bytes, line 9
9<script src="https://www.googletagmanager.com/gtag/js?id=
9G-WBJBL71JWF
vendor: 17 bytes, line 9
9" async></script>
9<script>!function(){function a(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],a("js",new Date),a("config","G-WBJBL71JWF")}()</script>
9<script type="application/ld+json">{ "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Prairie Giraffe", "alternateName": "Prairie Giraffe Digital Marketing", "description": "AI automation, website development, and SEO services for businesses. Stop struggling with marketing and business tech.", "url": "https://prairiegiraffe.com", "telephone": "+1-307-XXX-XXXX", "email": "[email protected]", "founder": { "@type": "Person", "name": "Kellee Carroll" }, "address": { "@type": "PostalAddress", "addressLocality": "Gillette", "addressRegion": "WY", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 44.2911, "longitude": -105.5022 }, "areaServed": { "@type": "State", "name": "Wyoming" }, "serviceType": [ "AI Automation", "Website Development", "SEO Services", "Digital Marketing" ], "offers": [ { "@type": "Service", "name": "AI Automation Services", "description": "Custom AI automation solutions that save 10+ hours per week" }, { "@type": "Service", "name": "Website Development", "description": "Fast, beautiful websites that actually bring in business" }, { "@type": "Service", "name": "One-Page SEO Plan", "description": "Simple SEO strategies for both Google and AI search platforms" } ], "sameAs": [ "https://www.instagram.com/prairiegiraffe/", "https://www.facebook.com/prairiegiraffe/", "https://twitter.com/prairiegiraffe", "https://www.linkedin.com/in/kelleecarroll/" ], "aggregateRating": { "@type": "AggregateRating", "ratingValue": "5.0", "reviewCount": "4" } }</script>
9<meta content="true" name="astro-view-transitions-enabled"><meta content="swap" name="astro-view-transitions-fallback">
9<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.elfUsALL.js"></script>
9<link href="/_astro/privacy.TTm_MCD8.css" rel="stylesheet"></head><body class="antialiased bg-page text-default tracking-tight"><header data-devtools-partial="header" class="mx-auto w-full border-b border-gray-50/0 ease-in-out flex-none sticky top-0 transition-[opacity] z-40" data-aw-sticky-header="true" id="header"><div class="inset-0 absolute"></div><div class="mx-auto relative md:px-6 text-default max-w-7xl md:grid md:grid-cols-3 md:items-center px-3 py-3 w-full"><div class="flex justify-between"><a class="flex items-center" href="/"><div class="flex items-center"><img data-dt-edit="pxdjcuu" alt="Prairie Giraffe Logo" class="h-10 w-10 mr-2" src="/images/logos/PG-outline-logo-Cropped.svg"> <span data-dt-edit="pyd2xko" class="font-bold dark:text-white text-2xl text-gray-900 md:text-xl self-center whitespace-nowrap">Prairie Giraffe</span></div></a><div class="flex items-center md:hidden"><button aria-label="Toggle Menu" class="flex items-center justify-center cursor-pointer flex-col group h-12 rounded w-12" type="button" data-aw-toggle-menu><span class="sr-only">Toggle Menu</span> <span class="dark:bg-white bg-black duration-200 ease h-0.5 my-1 opacity-80 rounded-full transform transition w-6 group-[.expanded]:rotate-45 group-[.expanded]:translate-y-2.5" aria-hidden="true"></span> <span class="dark:bg-white bg-black duration-200 ease h-0.5 my-1 opacity-80 rounded-full transform transition w-6 group-[.expanded]:opacity-0" aria-hidden="true"></span> <span class="dark:bg-white bg-black duration-200 ease h-0.5 my-1 opacity-80 rounded-full transform transition w-6 group-[.expanded]:-rotate-45 group-[.expanded]:-translate-y-2.5" aria-hidden="true"></span></button></div></div><nav aria-label="Main navigation" class="items-center md:w-auto w-full hidden md:flex md:justify-self-center md:mx-5 md:overflow-x-auto md:overflow-y-visible overflow-x-hidden overflow-y-auto text-default"><ul class="flex flex-col font-medium md:flex-row md:justify-center md:self-center md:text-[0.9375rem] md:w-auto text-xl tracking-[0.01rem] w-full"><li class><a class="flex items-center dark:hover:text-white hover:text-link px-4 py-3 whitespace-nowrap" href="/">Home</a></li><li class="dropdown"><a class="flex items-center dark:hover:text-white hover:text-link px-4 py-3 whitespace-nowrap" href="/services">Services <svg class="rtl:ml-0 h-3.5 hidden md:inline ml-0.5 rtl:mr-0.5 w-3.5" data-icon="tabler:chevron-down" height="1em" width="1em"><symbol id="ai:tabler:chevron-down" viewBox="0 0 24 24"><path d="m6 9l6 6l6-6" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" fill="none" stroke="currentColor"/></symbol><use href="#ai:tabler:chevron-down"></use></svg></a><ul class="font-medium dark:md:bg-dark drop-shadow-xl dropdown-menu md:absolute md:backdrop-blur-md md:bg-white/90 md:hidden md:min-w-[200px] md:pl-0 pl-4 rounded"><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/local-geo">Local GEO - AI Search Optimization</a></li><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/local-seo-contractors">Local SEO for Contractors</a></li><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/ai-automation">AI Automation</a></li><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/ai-automation-contractors">AI Automation for Contractors</a></li><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/website-development">Website Development</a></li><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/seo-plan">SEO Services</a></li></ul></li><li class>
9<a class="flex items-center dark:hover:text-white hover:text-link px-4 py-3 whitespace-nowrap" href="/about">About</a></li><li class="dropdown"><a class="flex items-center dark:hover:text-white hover:text-link px-4 py-3 whitespace-nowrap">Resources <svg class="rtl:ml-0 h-3.5 hidden md:inline ml-0.5 rtl:mr-0.5 w-3.5" data-icon="tabler:chevron-down" height="1em" width="1em" viewBox="0 0 24 24"><use href="#ai:tabler:chevron-down"></use></svg></a><ul class="font-medium dark:md:bg-dark drop-shadow-xl dropdown-menu md:absolute md:backdrop-blur-md md:bg-white/90 md:hidden md:min-w-[200px] md:pl-0 pl-4 rounded"><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/blog">Blog</a></li><li><a class="dark:hover:text-white hover:text-link block dark:hover:bg-gray-700 first:rounded-t last:rounded-b md:hover:bg-gray-100 px-5 py-2 whitespace-no-wrap" href="/resources">Free Resources</a></li></ul></li><li class><a class="flex items-center dark:hover:text-white hover:text-link px-4 py-3 whitespace-nowrap" href="/contact">Contact</a></li></ul></nav><div class="items-center md:w-auto w-full hidden md:flex bottom-0 fixed justify-end left-0 md:justify-self-end md:mb-0 md:p-0 md:self-center md:static p-3 rtl:left-auto rtl:right-0"><div class="flex items-center justify-between md:w-auto w-full"><div class="flex"><button aria-label="Toggle between Dark and Light mode" class="items-center rounded-lg dark:focus:ring-gray-700 dark:hover:bg-gray-700 dark:text-gray-400 focus:outline-none focus:ring-4 focus:ring-gray-200 hover:bg-gray-100 inline-flex p-2.5 text-muted text-sm" type="button" data-aw-toggle-color-scheme><svg class="w-6 h-6 md:h-5 md:inline-block md:w-5" data-icon="tabler:sun" height="1em" width="1em"><symbol id="ai:tabler:sun" viewBox="0 0 24 24"><path d="M8 12a4 4 0 1 0 8 0a4 4 0 1 0-8 0m-5 0h1m8-9v1m8 8h1m-9 8v1M5.6 5.6l.7.7m12.1-.7l-.7.7m0 11.4l.7.7m-12.1-.7l-.7.7" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" fill="none" stroke="currentColor"/></symbol><use href="#ai:tabler:sun"></use></svg></button></div><span class="rtl:ml-0 ml-4 rtl:mr-4"><a class="font-semibold text-sm btn-secondary md:px-6 ml-2 px-5.5 py-2.5 shadow-none w-auto" href="/contact">Schedule a Call</a></span></div></div></div>
9<script data-dt-current>(function(){var r=document.currentScript&&document.currentScript.parentElement;if(!r)return;var n=function(p){p=p.replace(/[/]index[.]html$/,'').replace(/[.]html$/,'').replace(/[/]+$/,'');return p||'/';};var here=n(location.pathname);var m=[["a","aw-link-active"]];r.querySelectorAll('a[href]').forEach(function(a){var u;try{u=new URL(a.getAttribute('href'),location.href);}catch(e){return;}if(u.origin!==location.origin||n(u.pathname)!==here)return;m.forEach(function(x){var el=x[0]==='li'?a.closest('li'):a;if(!el)return;if(x[1]==='aria-current')el.setAttribute('aria-current','page');else el.classList.add(x[1]);});});})();</script>
9</header><main><section class="relative md:-mt-[76px] not-prose"><div class="absolute inset-0 pointer-events-none" aria-hidden="true"></div><div class="mx-auto px-4 sm:px-6 max-w-7xl relative"><div class="pointer-events-none md:pt-[76px] pt-0"></div><div class="md:pb-8 md:py-20 pb-8 py-12"><div class="mx-auto text-center max-w-5xl"><p data-dt-edit="psp8rlv" class="font-bold intersect-once intersect-quarter motion-safe:md:intersect:animate-fade motion-safe:md:opacity-0 dark:text-blue-200 text-base text-secondary tracking-wide uppercase">Contact</p><h1 data-dt-edit="pbi5ay4" class="mb-4 font-bold dark:text-gray-200 font-heading intersect-once intersect-quarter leading-tighter md:text-6xl motion-safe:md:intersect:animate-fade motion-safe:md:opacity-0 text-5xl tracking-tighter">Let's Connect!</h1><div class="mx-auto max-w-3xl"><p data-dt-edit="py456lb" class="mb-6 dark:text-slate-300 intersect-once intersect-quarter motion-safe:md:intersect:animate-fade motion-safe:md:opacity-0 text-muted text-xl">Whether you need help with AI automation, websites, SEO, or other digital marketing challenges, I'm here to help make tech work for your business.</p><div class="flex flex-col gap-4 sm:flex-row flex-nowrap intersect-once intersect-quarter m-auto max-w-xs motion-safe:md:intersect:animate-fade motion-safe:md:opacity-0 sm:justify-center sm:max-w-md"></div></div></div></div></div></section><div class="bg-white dark:bg-gray-900 py-16"><div class="mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl"><div class="mb-12 text-center"><h2 data-dt-edit="ps6n9h2" class="mb-4 font-bold md:text-4xl text-3xl">Get in touch</h2><p data-dt-edit="p8yrp8t" class="dark:text-gray-300 text-gray-600 text-xl">How to Reach Me</p></div><div class="grid gap-8 lg:grid-cols-3 mb-16"><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-8 text-center"><div class="mb-4 text-4xl">ð</div><h3 data-dt-edit="przkthw" class="mb-4 font-bold text-xl">Schedule a Call</h3><p data-dt-edit="pb7klgw" class="dark:text-gray-300 text-gray-600 mb-6">Let's talk about your business goals!<br><br>Book a time that works for you, and we'll discuss how to make your tech work better.</p><a class="items-center py-3 duration-300 font-semibold inline-flex justify-center px-6 rounded-lg text-white transition-colors bg-blue-600 hover:bg-blue-700" href="#schedule">Schedule a Call</a></div><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-8 text-center"><div class="mb-4 text-4xl">ð§</div><h3 data-dt-edit="pg9noht" class="mb-4 font-bold text-xl">Send Me a Message</h3><p data-dt-edit="pf3xt4z" class="dark:text-gray-300 text-gray-600 mb-6">Quick questions or project ideas?<br><br>Drop me a line and I'll get back to you within 24 hours.</p><a data-dt-edit="p2ut97b" class="items-center py-3 duration-300 font-semibold inline-flex justify-center px-6 rounded-lg text-white transition-colors bg-green-600 hover:bg-green-700" href="mailto:[email protected]">[email protected]</a></div><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-8 text-center"><div class="mb-4 text-4xl">
9ð¬</div><h3 data-dt-edit="pe1zrsf" class="mb-4 font-bold text-xl">Connect on LinkedIn</h3><p data-dt-edit="p11didn" class="dark:text-gray-300 text-gray-600 mb-6">Professional networking and industry insights<br><br>Let's connect and share business growth strategies.</p><a class="items-center py-3 duration-300 font-semibold inline-flex justify-center px-6 rounded-lg text-white transition-colors bg-blue-700 hover:bg-blue-800" href="https://linkedin.com/in/kelleecarroll" target="_blank">Connect on LinkedIn</a></div></div></div></div><div class="dark:bg-gray-800 bg-gray-50 py-16"><div class="mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl"><div class="mb-12 text-center"><h2 data-dt-edit="pth410t" class="font-bold md:text-4xl text-3xl mb-6">Tell Me About Your Business Challenge</h2><p data-dt-edit="pjv1bm4" class="dark:text-gray-300 text-gray-600 mb-8 text-lg">I specialize in helping small businesses automate their processes, improve their online presence, and grow through smart technology solutions.</p><div class="rounded-lg p-6 bg-white dark:bg-gray-900 mb-8"><h3 data-dt-edit="p24ysbu" class="mb-4 font-bold text-xl">What I Can Help With:</h3><ul class="dark:text-gray-300 text-gray-600 gap-2 grid grid-cols-1 md:grid-cols-2 text-left"><li data-dt-edit="pdrbec1" class="flex items-center"><span class="mr-2 text-blue-500">â</span> AI automation for repetitive tasks</li><li data-dt-edit="pg0ro4f" class="flex items-center"><span class="mr-2 text-blue-500">â</span> Website development and optimization</li><li data-dt-edit="pmxghm3" class="flex items-center"><span class="mr-2 text-blue-500">â</span> SEO and local search optimization</li><li data-dt-edit="pz1h81h" class="flex items-center"><span class="mr-2 text-blue-500">â</span> Digital marketing strategy</li><li data-dt-edit="pfhcp2l" class="flex items-center"><span class="mr-2 text-blue-500">â</span> Business process automation</li><li data-dt-edit="pz2oo7s" class="flex items-center"><span class="mr-2 text-blue-500">â</span> Tech stack consulting and planning</li></ul></div></div><div class="grid gap-8 lg:grid-cols-3"><div class="lg:col-span-1"><div class="rounded-lg p-6 bg-white dark:bg-gray-900 mb-6"><h3 data-dt-edit="pnxlyju" class="mb-4 font-bold text-xl">Location</h3><p data-dt-edit="p1mov8w" class="dark:text-gray-300 text-gray-600">Based in <strong>Gillette, WY</strong><br>Serving businesses across Wyoming and beyond</p></div><div class="rounded-lg p-6 bg-white dark:bg-gray-900"><h3 data-dt-edit="pcixb4c" class="mb-4 font-bold text-xl">Response Time</h3><div class="flex items-center mb-2"><span class="mr-2 text-green-500 text-xl">â¡</span> <strong data-dt-edit="pn12iqz">Quick Response</strong></div><p data-dt-edit="pb6bq15" class="dark:text-gray-300 text-gray-600">I'll get back to you within 24 hours</p></div></div><div class="lg:col-span-2"><form class="rounded-lg bg-white dark:bg-gray-900 shadow-lg p-8" id="contact-form"><div class="mb-6 gap-6 grid grid-cols-1 md:grid-cols-2"><div><label class="dark:text-gray-300 block font-medium mb-2 text-gray-700 text-sm" for="firstName">First Name *</label> <input id="firstName" name="firstName" type="text" class="rounded-lg dark:bg-gray-800 border border-gray-300 dark:border-gray-600 dark:text-white focus:border-transparent focus:ring-2 focus:ring-blue-500 px-4 py-3 w-full" placeholder="Your First Name" required></div><div><label class="dark:text-gray-300 block font-medium mb-2 text-gray-700 text-sm" for="lastName">Last Name</label> <input id="lastName" name="lastName" type="text" class="rounded-lg dark:bg-gray-800 border border-gray-300 dark:border-gray-600 dark:text-white focus:border-transparent focus:ring-2 focus:ring-blue-500 px-4 py-3 w-full" placeholder="Your Last Name"></div></div><div class="mb-6"><label class="dark:text-gray-300 block font-medium mb-2 text-gray-700 text-sm" for="email">Email Address *</label> <input id="email" name="email" type="email" class="rounded-lg dark:bg-gray-800 border border-gray-300 dark:border-gray-600 dark:text-white focus:border-transparent focus:ring-2 focus:ring-blue-500 px-4 py-3 w-full" placeholder="[email protected]" required></div><div class="mb-6 gap-6 grid grid-cols-1 md:grid-cols-2"><div><label class="dark:text-gray-300 block font-medium mb-2 text-gray-700 text-sm" for="business">Business/Company</label> <input id="business" name="business" type="text" class="rounded-lg dark:bg-gray-800 border border-gray-300 dark:border-gray-600 dark:text-white focus:border-transparent focus:ring-2 focus:ring-blue-500 px-4 py-3 w-full" placeholder="Your Business N
9ame"></div><div><label class="dark:text-gray-300 block font-medium mb-2 text-gray-700 text-sm" for="budget">Project Budget</label> <select class="rounded-lg dark:bg-gray-800 border border-gray-300 dark:border-gray-600 dark:text-white focus:border-transparent focus:ring-2 focus:ring-blue-500 px-4 py-3 w-full" id="budget" name="budget"><option value="">Select Budget Range</option><option value="under-2k">Under $2,000</option><option value="2k-5k">$2,000 - $5,000</option><option value="5k-10k">$5,000 - $10,000</option><option value="10k-25k">$10,000 - $25,000</option><option value="25k-plus">$25,000+</option><option value="ongoing">Ongoing Monthly Service</option><option value="not-sure">Not Sure / Let's Discuss</option></select></div></div><div class="mb-6"><label class="dark:text-gray-300 block font-medium mb-2 text-gray-700 text-sm" for="service">What service are you interested in? *</label> <select class="rounded-lg dark:bg-gray-800 border border-gray-300 dark:border-gray-600 dark:text-white focus:border-transparent focus:ring-2 focus:ring-blue-500 px-4 py-3 w-full" id="service" name="service" required><option value="">Choose Primary Interest</option><option value="ai-automation">AI Automation</option><option value="website-development">Website Development</option><option value="seo-services">SEO Services</option><option value="digital-marketing">Digital Marketing Strategy</option><option value="consulting">Tech Consulting</option><option value="multiple">Multiple Services</option><option value="not-sure">Not Sure / General Consultation</option></select></div><div class="mb-6"><label class="dark:text-gray-300 block font-medium mb-2 text-gray-700 text-sm" for="challenge">Tell me about your biggest business challenge *</label> <textarea class="rounded-lg dark:bg-gray-800 border border-gray-300 dark:border-gray-600 dark:text-white focus:border-transparent focus:ring-2 focus:ring-blue-500 px-4 py-3 w-full resize-vertical" id="challenge" name="challenge" placeholder="What's keeping you up at night when it comes to your business technology, marketing, or growth? The more details you share, the better I can help you." required rows="5"></textarea></div><input id="website" name="website" type="text" aria-hidden="true" autocomplete="off" style="position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden" tabindex="-1"> <input id="formTimestamp" name="formTimestamp" type="hidden"><div class="mb-6"><div class="cf-turnstile" data-sitekey="0x4AAAAAAAcDt_1R9QkkIQ0f" data-theme="light"></div></div><div class="mb-6"><p class="text-sm text-gray-500 dark:text-gray-400">* Required fields. I respect your privacy and will never share your information.</p></div><button class="font-semibold duration-300 text-white bg-gradient-to-r from-blue-600 hover:from-blue-700 hover:scale-105 hover:to-purple-700 px-8 py-4 rounded-full to-purple-600 transform transition-all w-full" type="submit">Send My Message</button></form></div></div></div></div><div class="bg-white dark:bg-gray-900 py-16"><div class="mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl"><div class="mb-12 text-center"><h2 data-dt-edit="pb22mig" class="mb-4 font-bold md:text-4xl text-3xl">Frequently Asked Questions</h2><p data-dt-edit="px3zinh" class="dark:text-gray-300 text-gray-600 mb-8 text-xl">Got questions? Here are some of the most common ones I get from business owners like you.</p><p data-dt-edit="pt00nlj" class="font-semibold text-blue-600">Still have questions? <a class="hover:text-blue-800 underline" href="#form">Get in touch</a></p></div><div class="space-y-6"><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-6"><h3 data-dt-edit="pjbj1ea" class="font-bold mb-3 text-lg">Do you work with businesses outside of Wyoming?</h3><p data-dt-edit="p48czj6" class="dark:text-gray-300 text-gray-600">Absolutely! While I'm based in Gillette, WY, I work with businesses across the United States. Most of my work can be done remotely, and I'm always happy to schedule video calls to discuss your project.</p></div><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-6"><h3 data-dt-edit="pputcat" class="font-bold mb-3 text-lg">How quickly can you start working on my project?</h3><p data-dt-edit="px8meo1" class="dark:text-gray-300 text-gray-600">It depends on my current workload and the scope of your project. For smaller projects, I can often start within a week. Larger projects may require 2-3 weeks lead time. I'll give you a clear timeline during our initial consultation.</p></div><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-6"><h3 data-dt-edit="pq0rsfv" class="font-bold mb-3 text-lg">Do you offer ongoing support after a project is completed?</h3><p data-dt-edit="p78zxgz" class="dark:text-gray-300 text-gray-600">Yes! I offer ongoing support packages for websites, SEO services, and automation systems. I believe in building long-term relationships and helping your business continue to grow.</p></div><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-6"><h3 data-dt-edit="p596gsl" class="font-bold mb-3 text-lg">What if I'm not sure what I need?</h3><p data-dt-edit="pw73ts6" class="dark:text-gray-300 text-gray-600">That's perfectly fine! I offer free consultations to help you identify your biggest opportunities. We'll discuss your current challenges and I'll recommend the best solutions for your specific situation.</p></div><div class="rounded-lg dark:bg-gray-800 bg-gray-50 p-6"><h3 data-dt-edit="p73mk2e" class="font-bold mb-3 text-lg">How do you handle project payments?</h3><p data-dt-edit="pr3rto1" class="dark:text-gray-300 text-gray-600">For most projects, I require 50% upfront and 50% upon completion. For ongoing services like SEO, payments are monthly. I accept bank transfers, checks, and most major payment methods. All terms are clearly outlined in our agreement.</p></div></div></div></div><div class="dark:bg-gray-800 py-16 bg-blue-50" id="schedule"><div class="mx-auto px-4 max-w-4xl text-center"><h2 data-dt-edit="pig31kd" class="font-bold md:text-4xl text-3xl mb-6">Schedule Your Free Consultation</h2><p data-dt-edit="p0xap3k" class="dark:text-gray-300 text-gray-600 mb-8 text-xl">Let's discuss your business challenges and how I can help you grow through smart technology solutions.</p><div class="rounded-lg bg-white dark:bg-gray-900 shadow-lg p-4"><div data-fillout-dynamic-resize data-fillout-embed-type="standard" data-fillout-id="4AGkrPhbePus" data-fillout-inherit-parameters style="width:100%;height:500px"></div>
9<script type="module">document.addEventListener("DOMContentLoaded",(function(){const e=document.getElementById("contact-form");if(!e)return;const t=document.getElementById("formTimestamp");t&&(t.value=Date.now().toString());const n=e.querySelector('button[type="submit"]'),r=n.textContent;function o(t,n){const r=document.querySelector(".form-message");r&&r.remove();const o=document.createElement("div");o.className="form-message p-4 rounded-lg mb-6 "+("success"===t?"bg-green-100 text-green-800 border border-green-200":"bg-red-100 text-red-800 border border-red-200"),o.textContent=n,e.parentNode.insertBefore(o,e),setTimeout((()=>{o.parentNode&&o.remove()}),1e4),o.scrollIntoView({behavior:"smooth",block:"center"})}e.addEventListener("submit",(async function(t){t.preventDefault();const s=document.querySelector('[name="cf-turnstile-response"]');if(s&&s.value){n.disabled=!0,n.innerHTML='\n <svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white inline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">\n <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>\n <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>\n </svg>\n Sending Message...\n ';try{const t=new FormData(e),n=Object.fromEntries(t.entries()),r=await fetch("/api/contact",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),s=await r.json();r.ok?(o("success",s.message||"Message sent successfully! You should receive a confirmation email shortly."),e.reset()):o("error",s.message||"Failed to send message. Please try again.")}catch(e){console.error("Form submission error:",e),o("error","Failed to send message. Please try emailing [email protected] directly.")}finally{n.disabled=!1,n.textContent=r}}else o("error","Please complete the security check.")}))}))</script>
9</div></div></div></main><footer data-devtools-partial="footer" class="border-gray-200 bg-white border-t dark:bg-gray-900 dark:border-gray-700"><div class="mx-auto w-full lg:py-8 max-w-screen-xl p-4 py-6"><div class="md:flex md:justify-between"><div class="mb-6 md:mb-0"><a class="flex items-center mb-4" href="/"><span data-dt-edit="pdjcwyn" class="font-semibold dark:text-white self-center text-2xl whitespace-nowrap">Prairie Giraffe</span></a><div class="dark:bg-white bg-white border border-gray-200 max-w-xs p-4 rounded-lg shadow-sm"><div class="flex items-center flex-col gap-4"><div class="clutch-widget" data-clutchcompany-id="788972" data-expandifr="true" data-height="63" data-nofollow="true" data-scale="140" data-url="https://widget.clutch.co" data-widget-type="2"></div><a href="https://upcity.com/profiles/prairie-giraffe" aria-label="UpCity Profile"><img data-dt-edit="pysgpuv" alt="UpCity Badge" class="w-auto h-16" src="/images/UpCity-Badge.svg" loading="lazy" height="64" width="120"></a></div></div></div><div class="grid gap-8 grid-cols-2 sm:gap-6 sm:grid-cols-3"><div><h2 data-dt-edit="ppgue4z" class="font-semibold dark:text-white mb-6 text-gray-900 text-sm uppercase">Services</h2><ul class="font-medium dark:text-gray-400 text-gray-500"><li class="mb-4"><a class="hover:underline" href="/local-geo">Local GEO/AI Search</a></li><li class="mb-4"><a class="hover:underline" href="/local-seo-contractors">Local SEO for Contractors</a></li><li class="mb-4"><a class="hover:underline" href="/ai-automation">AI Automation</a></li><li class="mb-4"><a class="hover:underline" href="/ai-automation-contractors">AI Automation for Contractors</a></li><li class="mb-4"><a class="hover:underline" href="/website-development">Website Development</a></li><li><a class="hover:underline" href="/seo-plan">SEO Services</a></li></ul></div><div><h2 data-dt-edit="p7oaywr" class="font-semibold dark:text-white mb-6 text-gray-900 text-sm uppercase">Company</h2><ul class="font-medium dark:text-gray-400 text-gray-500"><li class="mb-4"><a class="hover:underline" href="/about">About</a></li><li><a class="hover:underline" href="/contact">Contact</a></li></ul></div><div><h2 data-dt-edit="p78oqh9" class="font-semibold dark:text-white mb-6 text-gray-900 text-sm uppercase">Resources</h2><ul class="font-medium dark:text-gray-400 text-gray-500"><li class="mb-4"><a class="hover:underline" href="/blog">Blog</a></li><li><a class="hover:underline" href="/services">All Services</a></li></ul></div></div></div><hr class="border-gray-200 dark:border-gray-700 lg:my-8 my-6 sm:mx-auto"><div class="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"><div class="flex flex-col gap-4 sm:flex-row sm:items-center"><span data-dt-edit="p29o6mk" class="text-sm text-gray-500 dark:text-gray-400">© 2025 <a class="hover:underline" href="/">Prairie Giraffe</a>. All Rights Reserved.</span><a class="flex items-center dark:hover:text-white dark:text-gray-400 duration-150 ease-in-out hover:text-gray-900 space-x-2 text-gray-500 transition" href="https://everyoneiswelcome.club/" aria-label="Everyone Is Welcome"><img alt="Everyone Is Welcome" class="w-auto h-6" src="/images/everyone-is-welcome.svg" loading="lazy" height="24" width="120"> <span data-dt-edit="pq1vhwm" class="font-medium text-xs">Everyone Is Welcome</span></a><div class="flex items-center space-x-4 text-gray-400 text-xs"><a class="dark:hover:text-gray-300 hover:text-gray-600" href="/sitemap-index.xml">Sitemap</a> <a class="dark:hover:text-gray-300 hover:text-gray-600" href="/llms.txt">LLMs.txt</a></div></div><div class="flex space-x-5"><a class="dark:hover:text-white hover:text-gray-900 text-gray-500" href="https://www.instagram.com/prairiegiraffe/" aria-label="Instagram"><svg class="h-4 w-4" data-icon="tabler:brand-instagram" height="1em" width="1em"><symbol id="ai:tabler:brand-instagram" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M4 8a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v8a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4z"/><path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0m7.5-4.5v.01"/></g></symbol><use href="#ai:tabler:brand-instagram"></use></svg> </a><a class="dark:hover:text-white hover:text-gray-900 text-gray-500" href="https://www.facebook.com/prairiegiraffe/" aria-label="Facebook"><svg class="h-4 w-4" data-icon="tabler:brand-facebook" height="1em" width="1em">
9<symbol id="ai:tabler:brand-facebook" viewBox="0 0 24 24"><path d="M7 10v4h3v7h4v-7h3l1-4h-4V8a1 1 0 0 1 1-1h3V3h-3a5 5 0 0 0-5 5v2z" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" fill="none" stroke="currentColor"/></symbol><use href="#ai:tabler:brand-facebook"></use></svg> </a><a class="dark:hover:text-white hover:text-gray-900 text-gray-500" href="https://twitter.com/prairiegiraffe" aria-label="Twitter"><svg class="h-4 w-4" data-icon="tabler:brand-twitter" height="1em" width="1em"><symbol id="ai:tabler:brand-twitter" viewBox="0 0 24 24"><path d="M22 4.01c-1 .49-1.98.689-3 .99c-1.121-1.265-2.783-1.335-4.38-.737S11.977 6.323 12 8v1c-3.245.083-6.135-1.395-8-4c0 0-4.182 7.433 4 11c-1.872 1.247-3.739 2.088-6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58-1.04 6.522-3.723 7.651-7.742a13.8 13.8 0 0 0 .497-3.753c0-.249 1.51-2.772 1.818-4.013z" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" fill="none" stroke="currentColor"/></symbol><use href="#ai:tabler:brand-twitter"></use></svg> </a><a class="dark:hover:text-white hover:text-gray-900 text-gray-500" href="https://www.linkedin.com/in/kelleecarroll/" aria-label="LinkedIn"><svg class="h-4 w-4" data-icon="tabler:brand-linkedin" height="1em" width="1em"><symbol id="ai:tabler:brand-linkedin" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M8 11v5m0-8v.01M12 16v-5m4 5v-3a2 2 0 1 0-4 0"/><path d="M3 7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4z"/></g></symbol><use href="#ai:tabler:brand-linkedin"></use></svg> </a><a class="dark:hover:text-white hover:text-gray-900 text-gray-500" href="mailto:[email protected]" aria-label="Email"><svg class="h-4 w-4" data-icon="tabler:mail" height="1em" width="1em"><symbol id="ai:tabler:mail" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M3 7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="m3 7l9 6l9-6"/></g></symbol><use href="#ai:tabler:mail"></use></svg></a></div></div></div></footer>
9<script type="module">document.addEventListener("DOMContentLoaded",(function(){if(!document.querySelector('script[src*="widget.clutch.co"]')){const t=document.createElement("script");t.src="https://widget.clutch.co/static/js/widget.js",t.async=!0,document.head.appendChild(t)}}))</script>
9<script>!function(){const e="system";if(window.basic_script)return;function t(e){"dark"===e?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}window.basic_script=!0;const a=function(){e&&e.endsWith(":only")||(localStorage.theme,0)?t(e.replace(":only","")):"dark"===localStorage.theme||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):t("light")};function d(e,t,a){const d="string"==typeof e?document.querySelectorAll(e):e;d&&d.length&&d.forEach((e=>{e.addEventListener(t,(t=>a(t,e)),!1)}))}a();const o=function(){let t=window.scrollY,a=!0;d("#header nav","click",(function(){document.querySelector("[data-aw-toggle-menu]")?.classList.remove("expanded"),document.body.classList.remove("overflow-hidden"),document.getElementById("header")?.classList.remove("h-screen"),document.getElementById("header")?.classList.remove("expanded"),document.getElementById("header")?.classList.remove("bg-page"),document.querySelector("#header nav")?.classList.add("hidden"),document.querySelector("#header > div > div:last-child")?.classList.add("hidden")})),d("[data-aw-toggle-menu]","click",(function(e,t){t.classList.toggle("expanded"),document.body.classList.toggle("overflow-hidden"),document.getElementById("header")?.classList.toggle("h-screen"),document.getElementById("header")?.classList.toggle("expanded"),document.getElementById("header")?.classList.toggle("bg-page"),document.querySelector("#header nav")?.classList.toggle("hidden"),document.querySelector("#header > div > div:last-child")?.classList.toggle("hidden")})),d("[data-aw-toggle-color-scheme]","click",(function(){e.endsWith(":only")||(Observer.removeAnimationDelay(),document.documentElement.classList.toggle("dark"),localStorage.theme=document.documentElement.classList.contains("dark")?"dark":"light")})),d("[data-aw-social-share]","click",(function(e,t){const a=t.getAttribute("data-aw-social-share"),d=encodeURIComponent(t.getAttribute("data-aw-url")),o=encodeURIComponent(t.getAttribute("data-aw-text"));let n;switch(a){case"facebook":n=`https://www.facebook.com/sharer.php?u=${d}`;break;case"twitter":n=`https://twitter.com/intent/tweet?url=${d}&text=${o}`;break;case"linkedin":n=`https://www.linkedin.com/shareArticle?mini=true&url=${d}&title=${o}`;break;case"whatsapp":n=`https://wa.me/?text=${o}%20${d}`;break;case"mail":n=`mailto:?subject=%22${o}%22&body=${o}%20${d}`;break;default:return}const c=document.createElement("a");c.target="_blank",c.href=n,c.click()}));function o(){const e=document.querySelector("#header[data-aw-sticky-header]");e&&(t>60&&!e.classList.contains("scroll")?e.classList.add("scroll"):t<=60&&e.classList.contains("scroll")&&e.classList.remove("scroll"),a=!1)}window.matchMedia("(max-width: 767px)").addEventListener("change",(function(){document.querySelector("[data-aw-toggle-menu]")?.classList.remove("expanded"),document.body.classList.remove("overflow-hidden"),document.getElementById("header")?.classList.remove("h-screen"),document.getElementById("header")?.classList.remove("expanded"),document.getElementById("header")?.classList.remove("bg-page"),document.querySelector("#header nav")?.classList.add("hidden"),document.querySelector("#header > div > div:last-child")?.classList.add("hidden")})),o(),d([document],"scroll",(function(){t=window.scrollY,a||(window.requestAnimationFrame((()=>{o()})),a=!0)}))},n=function(){document.documentElement.classList.add("motion-safe:scroll-smooth");const e=document.querySelector("[data-aw-toggle-menu]");e&&e.classList.remove("expanded"),document.body.classList.remove("overflow-hidden"),document.getElementById("header")?.classList.remove("h-screen"),document.getElementById("header")?.classList.remove("expanded"),document.querySelector("#header nav")?.classList.add("hidden")};window.onload=o,window.onpageshow=n,document.addEventListener("astro:after-swap",(()=>{a(),o(),n()}))}()</script>
9<script>const Observer={observer:null,delayBetweenAnimations:50,animationCounter:0,elements:null,start(){this.elements=Array.from(document.querySelectorAll(['[class*=" intersect:"]','[class*=":intersect:"]','[class^="intersect:"]','[class="intersect"]','[class*=" intersect "]','[class^="intersect "]','[class$=" intersect"]'].join(",")));this.elements.forEach((t=>{var e;t.setAttribute("no-intersect",""),t._intersectionThreshold=(e=t).classList.contains("intersect-full")?.99:e.classList.contains("intersect-half")?.5:e.classList.contains("intersect-quarter")?.25:0}));this.observer=new IntersectionObserver((t=>{t.forEach((t=>{requestAnimationFrame((()=>{const e=t.target,s=t.intersectionRatio,n=e._intersectionThreshold;if(e.classList.contains("intersect-no-queue"))t.isIntersecting?(e.removeAttribute("no-intersect"),e.classList.contains("intersect-once")&&this.observer.unobserve(e)):e.setAttribute("no-intersect","");else if(s>=n){if(!e.hasAttribute("data-animated")){e.removeAttribute("no-intersect"),e.setAttribute("data-animated","true");const t=this.animationCounter*this.delayBetweenAnimations;this.animationCounter++,e.style.transitionDelay=`${t}ms`,e.style.animationDelay=`${t}ms`,e.classList.contains("intersect-once")&&this.observer.unobserve(e)}}else e.setAttribute("no-intersect",""),e.removeAttribute("data-animated"),e.style.transitionDelay="",e.style.animationDelay="",this.animationCounter=0}))}))}).bind(this),{threshold:[0,.25,.5,.99]}),this.elements.forEach((t=>{this.observer.observe(t)}))},removeAnimationDelay(){this.elements.forEach((t=>{"true"===t.getAttribute("data-animated")&&(t.style.transitionDelay="",t.style.animationDelay="")}))}};Observer.start(),document.addEventListener("astro:after-swap",(()=>{Observer.start()}))</script>
9 10<!-- Preserved scripts from original site -->
11<script>!function(){const e="system";function t(e){"dark"===e?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark");const t=document.querySelectorAll("[data-aw-toggle-color-scheme] > input");t&&t.length&&t.forEach((t=>{t.checked="dark"!==e}))}e&&e.endsWith(":only")||(localStorage.theme,0)?t(e.replace(":only","")):"dark"===localStorage.theme||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):t("light")}()</script>
vendor: 1 bytes, line 11
11
12<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjietpxi0nl9.bin" type="text/partytown" async></script>
vendor: 1 bytes, line 12
12
13<script type="text/partytown">(function(){const id = "G-WBJBL71JWF"; 14 15 window.dataLayer = window.dataLayer || []; 16 function gtag() { 17 window.dataLayer.push(arguments); 18 } 19 gtag("js", new Date()); 20 gtag("config", id); 21})();</script>
vendor: 1 bytes, line 21
21
22<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjietpxi0nl9.bin" async></script>
vendor: 1 bytes, line 22
22
23<script>!function(){function a(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],a("js",new Date),a("config","G-WBJBL71JWF")}()</script>
vendor: 1 bytes, line 23
23
24<script type="application/ld+json">{ "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Prairie Giraffe", "alternateName": "Prairie Giraffe Digital Marketing", "description": "AI automation, website development, and SEO services for businesses. Stop struggling with marketing and business tech.", "url": "https://prairiegiraffe.com", "telephone": "+1-307-XXX-XXXX", "email": "[email protected]", "founder": { "@type": "Person", "name": "Kellee Carroll" }, "address": { "@type": "PostalAddress", "addressLocality": "Gillette", "addressRegion": "WY", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 44.2911, "longitude": -105.5022 }, "areaServed": { "@type": "State", "name": "Wyoming" }, "serviceType": [ "AI Automation", "Website Development", "SEO Services", "Digital Marketing" ], "offers": [ { "@type": "Service", "name": "AI Automation Services", "description": "Custom AI automation solutions that save 10+ hours per week" }, { "@type": "Service", "name": "Website Development", "description": "Fast, beautiful websites that actually bring in business" }, { "@type": "Service", "name": "One-Page SEO Plan", "description": "Simple SEO strategies for both Google and AI search platforms" } ], "sameAs": [ "https://www.instagram.com/prairiegiraffe/", "https://www.facebook.com/prairiegiraffe/", "https://twitter.com/prairiegiraffe", "https://www.linkedin.com/in/kelleecarroll/" ], "aggregateRating": { "@type": "AggregateRating", "ratingValue": "5.0", "reviewCount": "4" } }</script>
vendor: 1 bytes, line 24
24
25<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjif8tkvc541.js" type="module"></script>
vendor: 1 bytes, line 25
25
26<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjifjmvejni0.js" async></script>
vendor: 1 bytes, line 26
26
27<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjifvgrzr7n1.js"></script>
vendor: 1 bytes, line 27
27
28<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjig5hfy0flh.js"></script>
vendor: 1 bytes, line 28
28
29<script type="module">const n=e=>new Promise(((o,t)=>{const n=document.createElement("script");n.src=e,n.onload=o,n.onerror=t,document.head.appendChild(n)}));let e;const a=async()=>{try{setTimeout((async()=>{window.THREE||await n("/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjifvgrzr7n1.js"),window.VANTA||await n("/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjig5hfy0flh.js"),await s()}),1e3)}catch(e){console.error("Failed to initialize Vanta.js:",e)}},s=async()=>{try{const o=document.getElementById("vanta-background");if(!o)return void console.error("Vanta background element not found");e&&e.destroy(),e=VANTA.DOTS({el:o,mouseControls:!0,touchControls:!0,gyroControls:!1,minHeight:200,minWidth:200,scale:1,scaleMobile:1,size:5,color:3900150,color2:9133302,backgroundColor:0,showLines:!0}),console.log("Vanta.js animation initialized successfully")}catch(e){console.error("Failed to initialize Vanta.js:",e)}};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",a):a(),document.addEventListener("astro:before-swap",(()=>{e&&e.destroy()}))</script>
vendor: 1 bytes, line 29
29
30<script type="module">document.addEventListener("DOMContentLoaded",(function(){if(!document.querySelector('script[src*="widget.clutch.co"]')){const t=document.createElement("script");t.src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjifjmvejni0.js",t.async=!0,document.head.appendChild(t)}}))</script>
vendor: 1 bytes, line 30
30
31<script>!function(){const e="system";if(window.basic_script)return;function t(e){"dark"===e?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}window.basic_script=!0;const a=function(){e&&e.endsWith(":only")||(localStorage.theme,0)?t(e.replace(":only","")):"dark"===localStorage.theme||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):t("light")};function d(e,t,a){const d="string"==typeof e?document.querySelectorAll(e):e;d&&d.length&&d.forEach((e=>{e.addEventListener(t,(t=>a(t,e)),!1)}))}a();const o=function(){let t=window.scrollY,a=!0;d("#header nav","click",(function(){document.querySelector("[data-aw-toggle-menu]")?.classList.remove("expanded"),document.body.classList.remove("overflow-hidden"),document.getElementById("header")?.classList.remove("h-screen"),document.getElementById("header")?.classList.remove("expanded"),document.getElementById("header")?.classList.remove("bg-page"),document.querySelector("#header nav")?.classList.add("hidden"),document.querySelector("#header > div > div:last-child")?.classList.add("hidden")})),d("[data-aw-toggle-menu]","click",(function(e,t){t.classList.toggle("expanded"),document.body.classList.toggle("overflow-hidden"),document.getElementById("header")?.classList.toggle("h-screen"),document.getElementById("header")?.classList.toggle("expanded"),document.getElementById("header")?.classList.toggle("bg-page"),document.querySelector("#header nav")?.classList.toggle("hidden"),document.querySelector("#header > div > div:last-child")?.classList.toggle("hidden")})),d("[data-aw-toggle-color-scheme]","click",(function(){e.endsWith(":only")||(Observer.removeAnimationDelay(),document.documentElement.classList.toggle("dark"),localStorage.theme=document.documentElement.classList.contains("dark")?"dark":"light")})),d("[data-aw-social-share]","click",(function(e,t){const a=t.getAttribute("data-aw-social-share"),d=encodeURIComponent(t.getAttribute("data-aw-url")),o=encodeURIComponent(t.getAttribute("data-aw-text"));let n;switch(a){case"facebook":n=`https://www.facebook.com/sharer.php?u=${d}`;break;case"twitter":n=`https://twitter.com/intent/tweet?url=${d}&text=${o}`;break;case"linkedin":n=`https://www.linkedin.com/shareArticle?mini=true&url=${d}&title=${o}`;break;case"whatsapp":n=`https://wa.me/?text=${o}%20${d}`;break;case"mail":n=`mailto:?subject=%22${o}%22&body=${o}%20${d}`;break;default:return}const c=document.createElement("a");c.target="_blank",c.href=n,c.click()}));function o(){const e=document.querySelector("#header[data-aw-sticky-header]");e&&(t>60&&!e.classList.contains("scroll")?e.classList.add("scroll"):t<=60&&e.classList.contains("scroll")&&e.classList.remove("scroll"),a=!1)}window.matchMedia("(max-width: 767px)").addEventListener("change",(function(){document.querySelector("[data-aw-toggle-menu]")?.classList.remove("expanded"),document.body.classList.remove("overflow-hidden"),document.getElementById("header")?.classList.remove("h-screen"),document.getElementById("header")?.classList.remove("expanded"),document.getElementById("header")?.classList.remove("bg-page"),document.querySelector("#header nav")?.classList.add("hidden"),document.querySelector("#header > div > div:last-child")?.classList.add("hidden")})),o(),d([document],"scroll",(function(){t=window.scrollY,a||(window.requestAnimationFrame((()=>{o()})),a=!0)}))},n=function(){document.documentElement.classList.add("motion-safe:scroll-smooth");const e=document.querySelector("[data-aw-toggle-menu]");e&&e.classList.remove("expanded"),document.body.classList.remove("overflow-hidden"),document.getElementById("header")?.classList.remove("h-screen"),document.getElementById("header")?.classList.remove("expanded"),document.querySelector("#header nav")?.classList.add("hidden")};window.onload=o,window.onpageshow=n,document.addEventListener("astro:after-swap",(()=>{a(),o(),n()}))}()</script>
vendor: 1 bytes, line 31
31
32<script>const Observer={observer:null,delayBetweenAnimations:50,animationCounter:0,elements:null,start(){this.elements=Array.from(document.querySelectorAll(['[class*=" intersect:"]','[class*=":intersect:"]','[class^="intersect:"]','[class="intersect"]','[class*=" intersect "]','[class^="intersect "]','[class$=" intersect"]'].join(",")));this.elements.forEach((t=>{var e;t.setAttribute("no-intersect",""),t._intersectionThreshold=(e=t).classList.contains("intersect-full")?.99:e.classList.contains("intersect-half")?.5:e.classList.contains("intersect-quarter")?.25:0}));this.observer=new IntersectionObserver((t=>{t.forEach((t=>{requestAnimationFrame((()=>{const e=t.target,s=t.intersectionRatio,n=e._intersectionThreshold;if(e.classList.contains("intersect-no-queue"))t.isIntersecting?(e.removeAttribute("no-intersect"),e.classList.contains("intersect-once")&&this.observer.unobserve(e)):e.setAttribute("no-intersect","");else if(s>=n){if(!e.hasAttribute("data-animated")){e.removeAttribute("no-intersect"),e.setAttribute("data-animated","true");const t=this.animationCounter*this.delayBetweenAnimations;this.animationCounter++,e.style.transitionDelay=`${t}ms`,e.style.animationDelay=`${t}ms`,e.classList.contains("intersect-once")&&this.observer.unobserve(e)}}else e.setAttribute("no-intersect",""),e.removeAttribute("data-animated"),e.style.transitionDelay="",e.style.animationDelay="",this.animationCounter=0}))}))}).bind(this),{threshold:[0,.25,.5,.99]}),this.elements.forEach((t=>{this.observer.observe(t)}))},removeAnimationDelay(){this.elements.forEach((t=>{"true"===t.getAttribute("data-animated")&&(t.style.transitionDelay="",t.style.animationDelay="")}))}};Observer.start(),document.addEventListener("astro:after-swap",(()=>{Observer.start()}))</script>
vendor: 1 bytes, line 32
32
33<script type="module">!function(){function t(){document.querySelectorAll(".accordion-button").forEach((function(t){t.removeEventListener("click",e),t.addEventListener("click",e)}))}function e(t){t.preventDefault();const e=this.getAttribute("data-target"),n=document.getElementById(e),d=this.querySelector(".accordion-icon");!n||!d||(n.classList.contains("hidden")?(n.classList.remove("hidden"),d.style.transform="rotate(180deg)",this.setAttribute("aria-expanded","true")):(n.classList.add("hidden"),d.style.transform="rotate(0deg)",this.setAttribute("aria-expanded","false")))}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",t):t()}()</script>
vendor: 1 bytes, line 33
33
34<script type="module">!function(){function t(){document.querySelectorAll(".accordion-button").forEach((function(t){t.removeEventListener("click",e),t.addEventListener("click",e)}))}function e(t){t.preventDefault();const e=this.getAttribute("data-target"),n=document.getElementById(e),o=this.querySelector(".accordion-icon");if(!n||!o)return;const c=document.querySelectorAll(".accordion-content"),i=document.querySelectorAll(".accordion-icon"),a=document.querySelectorAll(".accordion-button");c.forEach((function(t){t.id!==e&&t.classList.add("hidden")})),i.forEach((function(t){t!==o&&t.classList.remove("rotate-180")})),a.forEach((function(t){t!==this&&t.setAttribute("aria-expanded","false")})),n.classList.contains("hidden")?(n.classList.remove("hidden"),o.classList.add("rotate-180"),this.setAttribute("aria-expanded","true")):(n.classList.add("hidden"),o.classList.remove("rotate-180"),this.setAttribute("aria-expanded","false"))}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",t):t()}()</script>
vendor: 1 bytes, line 34
34
35<script type="module">document.addEventListener("DOMContentLoaded",(function(){const e=document.getElementById("contact-form");if(!e)return;const t=document.getElementById("formTimestamp");t&&(t.value=Date.now().toString());const n=e.querySelector('button[type="submit"]'),r=n.textContent;function o(t,n){const r=document.querySelector(".form-message");r&&r.remove();const o=document.createElement("div");o.className="form-message p-4 rounded-lg mb-6 "+("success"===t?"bg-green-100 text-green-800 border border-green-200":"bg-red-100 text-red-800 border border-red-200"),o.textContent=n,e.parentNode.insertBefore(o,e),setTimeout((()=>{o.parentNode&&o.remove()}),1e4),o.scrollIntoView({behavior:"smooth",block:"center"})}e.addEventListener("submit",(async function(t){t.preventDefault();const s=document.querySelector('[name="cf-turnstile-response"]');if(s&&s.value){n.disabled=!0,n.innerHTML='\n <svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white inline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">\n <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>\n <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>\n </svg>\n Sending Message...\n ';try{const t=new FormData(e),n=Object.fromEntries(t.entries()),r=await fetch("/api/contact",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),s=await r.json();r.ok?(o("success",s.message||"Message sent successfully! You should receive a confirmation email shortly."),e.reset()):o("error",s.message||"Failed to send message. Please try again.")}catch(e){console.error("Form submission error:",e),o("error","Failed to send message. Please try emailing [email protected] directly.")}finally{n.disabled=!1,n.textContent=r}}else o("error","Please complete the security check.")}))}))</script>
vendor: 1 bytes, line 35
35
36<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjkjwk8egeak.js" type="module"></script>
vendor: 1 bytes, line 36
36
37<script src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjk0kgxyx6jx.js"></script>
vendor: 1 bytes, line 37
37
38<script type="module">const o=new IntersectionObserver((e=>{e.forEach((e=>{e.isIntersecting&&(a(),o.unobserve(e.target))}))}),{threshold:.1}),n=document.getElementById("vanta-bg");function a(){const e=document.createElement("script");e.src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjifvgrzr7n1.js",e.onload=()=>{window.THREE=THREE;const e=document.createElement("script");e.src="/api/files/sites/proj_lx51l29e/1773082443983/scripts/mmjjk0kgxyx6jx.js",e.onload=()=>{typeof VANTA<"u"&&window.THREE&&VANTA.NET({el:"#vanta-bg",mouseControls:!0,touchControls:!0,gyroControls:!1,minHeight:200,minWidth:200,scale:1,scaleMobile:1,color:5195978,backgroundColor:984094})},document.head.appendChild(e)},document.head.appendChild(e)}n&&o.observe(n)</script>
vendor: 1 bytes, line 38
38
39<script>window.__DEVTOOLS_PROJECT="proj_lx51l29e";window.__DEVTOOLS_API="https://devtools.prairiegiraffe.com";</script>
39 40 41<style data-devtools-slider-css> 42[data-devtools-slider]{position:relative;width:100%;overflow:hidden;--dt-slider-gap:0px;--dt-arrow-color:#fff;--dt-arrow-bg:rgba(0,0,0,.45);--dt-arrow-bg-hover:rgba(0,0,0,.7);--dt-arrow-size:40px;} 43[data-devtools-slider] .devtools-slider-viewport{position:relative;width:100%;overflow:hidden;} 44[data-devtools-slider] .devtools-slider-track{display:flex;width:100%;gap:var(--dt-slider-gap);transition:transform .5s ease;will-change:transform;} 45[data-devtools-slider] .devtools-slider-slide{position:relative;box-sizing:border-box;} 46[data-devtools-slider] .devtools-slider-slide img{display:block;width:100%;height:auto;} 47[data-devtools-slider][data-devtools-slider-skin="fade"] .devtools-slider-track{display:block;position:relative;} 48[data-devtools-slider][data-devtools-slider-skin="fade"] .devtools-slider-slide{position:absolute;inset:0;width:100%;opacity:0;transition:opacity .6s ease;} 49[data-devtools-slider][data-devtools-slider-skin="fade"] .devtools-slider-slide:first-child{position:relative;} 50[data-devtools-slider][data-devtools-slider-skin="card"] .devtools-slider-slide{padding:0 8px;} 51[data-devtools-slider][data-devtools-slider-skin="marquee"]{cursor:grab;} 52[data-devtools-slider][data-devtools-slider-skin="marquee"].dt-grabbing{cursor:grabbing;} 53[data-devtools-slider][data-devtools-slider-skin="marquee"] .devtools-slider-track{transition:none;width:max-content;} 54[data-devtools-slider][data-devtools-slider-skin="marquee"] .devtools-slider-slide{flex:0 0 auto;} 55[data-devtools-slider] .devtools-slider-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:5;width:var(--dt-arrow-size);height:var(--dt-arrow-size);border:none;border-radius:9999px;background:var(--dt-arrow-bg);color:var(--dt-arrow-color);font-size:22px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s,opacity .2s;} 56[data-devtools-slider] .devtools-slider-nav:hover{background:var(--dt-arrow-bg-hover);} 57[data-devtools-slider] .devtools-slider-prev{left:10px;} 58[data-devtools-slider] .devtools-slider-next{right:10px;} 59[data-devtools-slider][data-dt-arrows="outside"]{overflow:visible;} 60[data-devtools-slider][data-dt-arrows="outside"] .devtools-slider-viewport{overflow:hidden;} 61[data-devtools-slider][data-dt-arrows="outside"] .devtools-slider-prev{left:-46px;} 62[data-devtools-slider][data-dt-arrows="outside"] .devtools-slider-next{right:-46px;} 63[data-devtools-slider][data-dt-arrow-style="minimal"] .devtools-slider-nav{background:transparent;width:auto;height:auto;font-size:30px;font-weight:300;} 64[data-devtools-slider][data-dt-arrow-style="minimal"] .devtools-slider-nav:hover{background:transparent;opacity:.6;} 65[data-devtools-slider] .devtools-slider-dots{display:flex;gap:8px;justify-content:center;padding:14px 0 4px;} 66[data-devtools-slider] .devtools-slider-dot{width:10px;height:10px;padding:0;border:none;border-radius:9999px;background:rgba(0,0,0,.25);cursor:pointer;transition:background .2s,transform .2s;} 67[data-devtools-slider] .devtools-slider-dot.active{background:rgba(0,0,0,.7);transform:scale(1.2);} 68[data-devtools-slider] .devtools-slider-thumbs{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;padding:14px 0 4px;} 69[data-devtools-slider] .devtools-slider-thumb{flex:0 0 auto;width:96px;height:64px;padding:0;border:2px solid transparent;border-radius:6px;background:#e5e7eb;cursor:pointer;overflow:hidden;opacity:.6;transition:opacity .2s,border-color .2s;display:flex;align-items:center;justify-content:center;font-size:13px;color:#374151;} 70[data-devtools-slider] .devtools-slider-thumb img{width:100%;height:100%;object-fit:cover;display:block;} 71[data-devtools-slider] .devtools-slider-thumb:hover{opacity:.9;} 72[data-devtools-slider] .devtools-slider-thumb.active{opacity:1;border-color:var(--dt-arrow-bg,#1B3A5C);} 73@media (max-width:640px){[data-devtools-slider] .devtools-slider-thumb{width:64px;height:44px;}} 74.devtools-slide-body{padding:18px 20px;} 75.devtools-slide-title{font-size:1.5rem;font-weight:700;margin:0 0 .35rem;} 76.devtools-slide-subtitle{font-size:1rem;opacity:.85;margin:0 0 .5rem;} 77.devtools-slide-text{margin:0 0 .75rem;line-height:1.6;} 78.devtools-slide-actions{display:flex;flex-wrap:wrap;gap:10px;} 79.devtools-slide-btn{display:inline-block;padding:.55rem 1.1rem;border-radius:6px;background:#1B3A5C;color:#fff;text-decoration:none;font-weight:600;font-size:.95rem;} 80.devtools-slide-btn--ghost{background:transparent;border:1px solid currentColor;} 81@media (max-width:640px){[data-devtools-slider][data-devtools-slider-skin="card"] .devtools-slider-slide{flex:0 0 100% !important;max-width:100% !important;}} 82.dsm_open_icon span,.dsm_close_icon span,.dsm_faq-item-open_icon span,.dsm_faq-item-close_icon span{font-size:0 !important;position:relative;display:inline-block;min-width:1em;} 83.dsm_open_icon span::before,.dsm_close_icon span::before,.dsm_faq-item-open_icon span::before,.dsm_faq-item-close_icon span::before{font-size:30px;line-height:1;color:inherit;} 84.dsm_open_icon span::before,.dsm_faq-item-open_icon span::before{content:"+";} 85.dsm_close_icon span::before,.dsm_faq-item-close_icon span::before{content:"\2212";} 86</style>
87<script data-devtools-interactivity> 88(function() { 89 'use strict'; 90 // Hamburger / Mobile Nav Toggle 91 // Kept in sync with interactivity-script.ts. Divi (.mobile_menu_bar) + Bricks 92 // (.bricks-mobile-menu-toggle) MUST be here: their menu JS is stripped at 93 // capture, so without this the hamburger is dead on the deployed site (a 94 // migrated Divi site's mobile menu won't open â the reason this branch exists). 95 document.querySelectorAll('.hamburger, .menu-toggle, .navbar-toggler, .bricks-mobile-menu-toggle, .mobile_menu_bar, [data-toggle="collapse"]').forEach(function(btn) { 96 btn.style.cursor = 'pointer'; 97 btn.addEventListener('click', function(e) { 98 e.preventDefault(); 99 e.stopPropagation(); 100 btn.classList.toggle('open'); 101 btn.classList.toggle('is-active'); 102 var expanded = btn.getAttribute('aria-expanded'); 103 if (expanded !== null) btn.setAttribute('aria-expanded', expanded === 'true' ? 'false' : 'true'); 104 105 // --- Divi pattern --- 106 // The toggle sits near a ul.et_mobile_menu that Divi hides with 107 // 'display:none' and revealed via jQuery. Capture flattens the structure, 108 // so look for the menu next to the toggle, then in the header, then anywhere. 109 if (btn.classList.contains('mobile_menu_bar')) { 110 var mobileNav = btn.closest('.mobile_nav'); 111 if (mobileNav) { 112 var isOpened = mobileNav.classList.contains('opened'); 113 mobileNav.classList.toggle('opened', !isOpened); 114 mobileNav.classList.toggle('closed', isOpened); 115 } 116 var dmenu = (btn.parentElement && btn.parentElement.querySelector('.et_mobile_menu')) 117 || (btn.closest('.et_pb_menu, .et-menu-nav, #et_mobile_nav_menu, .et_mobile_nav_menu, header, nav') || document).querySelector('.et_mobile_menu') 118 || document.querySelector('.et_mobile_menu'); 119 if (dmenu) { 120 var dHidden = getComputedStyle(dmenu).display === 'none'; 121 dmenu.style.display = dHidden ? 'block' : 'none'; 122 } 123 document.body.classList.toggle('mobile-nav-open'); 124 return; 125 } 126 127 // --- Bricks Builder pattern --- 128 var bricksNav = btn.closest('.brxe-nav-menu'); 129 if (bricksNav) { 130 bricksNav.classList.toggle('show-mobile-menu'); 131 var overlay = bricksNav.querySelector('.bricks-mobile-menu-overlay'); 132 if (overlay) overlay.classList.toggle('is-visible'); 133 document.body.classList.toggle('mobile-nav-open'); 134 return; 135 } 136 137 // --- Generic pattern --- 138 var target = null; 139 var targetId = btn.getAttribute('aria-controls') || btn.getAttribute('data-target'); 140 if (targetId) target = document.querySelector('#' + targetId.replace('#', '')); 141 if (!target) { 142 var parent = btn.closest('.navigation-mobile, .navbar, .nav-wrapper, .header-mobile, nav, header, #et_mobile_nav_menu'); 143 if (parent) target = parent.querySelector('.mobile-nav, .navbar-collapse, .nav-menu, .mobile-menu, .menu-items, .et_mobile_menu'); 144 } 145 if (target) { 146 var isHidden = target.style.display === 'none' || getComputedStyle(target).display === 'none'; 147 target.style.display = isHidden ? 'block' : 'none'; 148 document.body.classList.toggle('mobile-nav-open', isHidden); 149 document.documentElement.classList.toggle('mobile-nav-open', isHidden); 150 } 151 }); 152 }); 153 // Accordion / Expandable Sections 154 document.querySelectorAll('.nav_line > h3, .nav_line > h4, .accordion-header, [data-toggle="accordion"]').forEach(function(heading) { 155 heading.style.cursor = 'pointer'; 156 heading.addEventListener('click', function(e) { 157 e.preventDefault(); 158 e.stopPropagation(); 159 var parent = heading.closest('.nav_line, .accordion-item, .accordion-section'); 160 if (parent) { parent.classList.toggle('expand'); parent.classList.toggle('active'); } 161 var panel = heading.nextElementSibling; 162 if (!panel) panel = (parent || heading.parentElement).querySelector('ul, .accordion-body, .accordion-content, .panel'); 163 if (panel && panel !== heading) { 164 var isHidden = panel.style.display === 'none' || getComputedStyle(panel).display === 'none'; 165 panel.style.display = isHidden ? 'block' : 'none'; 166 } 167 }); 168 }); 169 // Desktop Dropdown Menus 170 document.querySelectorAll('.has-dropdown, .menu-item-has-children, .dropdown').forEach(function(item) { 171 var dropdown = item.querySelector('.dropdown-menu, .sub-menu, .submenu'); 172 if (!dropdown) return; 173 item.addEventListener('mouseenter', function() { dropdown.classList.add('hover'); dropdown.style.display = 'block'; }); 174 item.addEventListener('mouseleave', function() { dropdown.classList.remove('hover'); dropdown.style.display = ''; }); 175 }); 176 // Popup / Modal Toggle 177 document.querySelectorAll('.popup--button').forEach(function(btn
177) { 178 btn.style.cursor = 'pointer'; 179 btn.addEventListener('click', function() { 180 var popup = btn.closest('.popup-wrapper') || btn.parentElement; 181 var target = popup.querySelector('.popup'); 182 if (target) target.classList.toggle('active'); 183 }); 184 }); 185 document.querySelectorAll('.popup--close').forEach(function(closeBtn) { 186 closeBtn.style.cursor = 'pointer'; 187 closeBtn.addEventListener('click', function() { 188 var popup = closeBtn.closest('.popup'); 189 if (popup) popup.classList.remove('active'); 190 }); 191 }); 192 // Smooth Scroll for Anchor Links 193 document.querySelectorAll('a[href^="#"]').forEach(function(link) { 194 link.addEventListener('click', function(e) { 195 var href = link.getAttribute('href'); 196 if (!href || href === '#') return; 197 var target = document.querySelector(href); 198 if (target) { e.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } 199 }); 200 }); 201 // DevTools Controlled Sliders (skins: slide|fade|card). Kept in sync with interactivity-script.ts. 202 document.querySelectorAll('[data-devtools-slider]').forEach(function(container) { 203 if (container.getAttribute('data-dt-slider-wired')) return; 204 var track = container.querySelector('.devtools-slider-track'); 205 if (!track) return; 206 var slides = Array.from(track.querySelectorAll(':scope > .devtools-slider-slide')); 207 if (slides.length < 2) { container.setAttribute('data-dt-slider-wired', '1'); return; } 208 container.setAttribute('data-dt-slider-wired', '1'); 209 var skin = container.getAttribute('data-devtools-slider-skin') || 'slide'; 210 var autoplay = container.getAttribute('data-devtools-slider-autoplay') !== 'false'; 211 var interval = parseInt(container.getAttribute('data-devtools-slider-interval') || '5000', 10); 212 if (skin === 'marquee') { 213 var mShow = parseInt(container.getAttribute('data-devtools-slider-show') || '6', 10); 214 var vw = container.clientWidth || container.offsetWidth || 1000; 215 var gap = parseFloat(getComputedStyle(track).gap) || 0; 216 var slideW = Math.max(40, (vw - gap * (mShow - 1)) / mShow); 217 var origCount = slides.length; 218 slides.forEach(function(s) { s.style.width = slideW + 'px'; }); 219 var stagger = parseFloat(container.getAttribute('data-devtools-slider-stagger') || '0'); 220 function applyStagger(list) { if (!stagger) return; list.forEach(function(s, i) { s.style.transform = 'translateY(' + ((i % 2) ? stagger : -stagger) + 'px)'; }); } 221 applyStagger(slides); 222 var setWidth = origCount * (slideW + gap); 223 var sets = 1; 224 while (setWidth * sets < vw * 2 + setWidth) { 225 var clones = []; 226 for (var ci = 0; ci < origCount; ci++) { var cl = slides[ci].cloneNode(true); cl.style.width = slideW + 'px'; track.appendChild(cl); clones.push(cl); } 227 applyStagger(clones); 228 sets++; 229 } 230 var speed = parseFloat(container.getAttribute('data-devtools-slider-speed') || '40'); 231 var offset = 0, paused = false, dragging = false, lastX = 0, raf = null, lastT = 0; 232 function wrap() { if (offset >= setWidth) offset -= setWidth; if (offset < 0) offset += setWidth; } 233 function tick(t) { 234 if (!lastT) lastT = t; 235 var dt = (t - lastT) / 1000; lastT = t; 236 if (!paused && !dragging) { offset += speed * dt; } 237 wrap(); 238 track.style.transform = 'translateX(' + (-offset) + 'px)'; 239 raf = requestAnimationFrame(tick); 240 } 241 if (autoplay) raf = requestAnimationFrame(tick); 242 container.addEventListener('mouseenter', function() { paused = true; }); 243 container.addEventListener('mouseleave', function() { paused = false; }); 244 function mdown(x) { dragging = true; lastX = x; container.classList.add('dt-grabbing'); } 245 function mmove(x) { if (!dragging) return; offset -= (x - lastX); lastX = x; wrap(); track.style.transform = 'translateX(' + (-offset) + 'px)'; } 246 function mup() { dragging = false; container.classList.remove('dt-grabbing'); } 247 container.addEventListener('mousedown', function(e) { e.preventDefault(); mdown(e.clientX); }); 248 window.addEventListener('mousemove', function(e) { mmove(e.clientX); }); 249 window.addEventListener('mouseup', mup); 250 container.addEventListener('touchstart', function(e) { mdown(e.touches[0].clientX); }, { passive: true }); 251 container.addEventListener('touchmove', function(e) { mmove(e.touches[0].clientX); }, { passive: true }); 252 container.addEventListener('touchend', mup); 253 return; 254 } 255 var slidesToShow = skin === 'card' ? parseInt(container.getAttribute('data-devtools-slider-show') || '3', 10) : 1; 256 if (skin === 'fade') slidesToShow = 1; 257 var loop = container.getAttribute('data-devtools-slider-loop') !== 'false';
258 slides.forEach(function(slide) { 259 var oc = slide.getAttribute('data-devtools-slide-classes'); 260 if (oc) oc.split(' ').forEach(function(c) { if (c) slide.classList.add(c); }); 261 var os = slide.getAttribute('data-devtools-slide-style'); 262 if (os) { 263 var cs = slide.getAttribute('style') || ''; 264 var sep = cs && !cs.trim().endsWith(';') ? '; ' : ''; 265 slide.setAttribute('style', cs + sep + os); 266 } 267 }); 268 var pct = 100 / slidesToShow; 269 if (skin !== 'fade') { slides.forEach(function(s) { s.style.flex = '0 0 ' + pct + '%'; s.style.maxWidth = pct + '%'; }); } 270 var cur = 0, max = skin === 'fade' ? slides.length - 1 : Math.max(0, slides.length - slidesToShow); 271 var step = (skin !== 'fade' && slidesToShow > 1) ? slidesToShow : 1; 272 var pageCount = skin === 'fade' ? slides.length : Math.max(1, Math.ceil((slides.length - slidesToShow + 1) / step)); 273 function render() { 274 if (skin === 'fade') { 275 slides.forEach(function(s, i) { s.style.opacity = i === cur ? '1' : '0'; s.style.zIndex = i === cur ? '2' : '1'; }); 276 } else { 277 track.style.transform = 'translateX(-' + (cur * pct) + '%)'; 278 } 279 var dots = container.querySelectorAll('.devtools-slider-dot'); 280 var cp = Math.round(cur / step); 281 for (var d = 0; d < dots.length; d++) { if (d === cp) dots[d].classList.add('active'); else dots[d].classList.remove('active'); } 282 if (thumbEls && thumbEls.length) { for (var t = 0; t < thumbEls.length; t++) { if (t === cur) thumbEls[t].classList.add('active'); else thumbEls[t].classList.remove('active'); } } 283 } 284 function goTo(idx) { 285 if (loop) { if (idx > max) idx = 0; else if (idx < 0) idx = max; } 286 else idx = Math.max(0, Math.min(idx, max)); 287 cur = idx; render(); 288 } 289 var noArrows = container.getAttribute('data-dt-arrow-style') === 'none'; 290 if (!noArrows) { 291 var pb = document.createElement('button'); pb.className = 'devtools-slider-nav devtools-slider-prev'; pb.type = 'button'; pb.innerHTML = '‹'; pb.setAttribute('aria-label','Previous'); 292 pb.addEventListener('click', function(e) { e.preventDefault(); goTo(cur - step); ra(); }); 293 var nb = document.createElement('button'); nb.className = 'devtools-slider-nav devtools-slider-next'; nb.type = 'button'; nb.innerHTML = '›'; nb.setAttribute('aria-label','Next'); 294 nb.addEventListener('click', function(e) { e.preventDefault(); goTo(cur + step); ra(); }); 295 container.appendChild(pb); container.appendChild(nb); 296 } 297 var dc = document.createElement('div'); dc.className = 'devtools-slider-dots'; 298 for (var i = 0; i < pageCount; i++) { (function(pi) { 299 var dot = document.createElement('button'); dot.type = 'button'; dot.className = 'devtools-slider-dot' + (pi===0?' active':''); dot.setAttribute('aria-label','Go to slide '+(pi+1)); 300 dot.addEventListener('click', function(e) { e.preventDefault(); goTo(Math.min(pi * step, max)); ra(); }); dc.appendChild(dot); 301 })(i); } 302 if (pageCount > 1) container.appendChild(dc); 303 var thumbsOn = container.getAttribute('data-devtools-slider-thumbs') === 'true'; 304 var thumbEls = []; 305 if (thumbsOn) { 306 if (dc) dc.style.display = 'none'; 307 var tc = document.createElement('div'); tc.className = 'devtools-slider-thumbs'; 308 slides.forEach(function(s, ti) { 309 var thumbImg = s.querySelector('img'); 310 var thumbSrc = thumbImg ? (thumbImg.currentSrc || thumbImg.src) : ''; 311 if (!thumbSrc) { var bm = (s.style.backgroundImage || '').match(/url\(["']?([^"')]+)/); if (bm) thumbSrc = bm[1]; } 312 var btn = document.createElement('button'); btn.type = 'button'; 313 btn.className = 'devtools-slider-thumb' + (ti === 0 ? ' active' : ''); 314 btn.setAttribute('aria-label', 'Go to slide ' + (ti + 1)); 315 if (thumbSrc) { var im = document.createElement('img'); im.src = thumbSrc; im.alt = ''; im.loading = 'lazy'; btn.appendChild(im); } 316 else { btn.textContent = String(ti + 1); } 317 btn.addEventListener('click', function(e) { e.preventDefault(); goTo(Math.min(ti, max)); ra(); }); 318 tc.appendChild(btn); thumbEls.push(btn); 319 }); 320 container.appendChild(tc); 321 } 322 var at = null; 323 function sa() { if (!autoplay || slides.length <= slidesToShow) return; so(); at = setInterval(function() { goTo(cur+step); }, interval); } 324 function so() { if (at) { clearInterval(at); at = null; } } 325 function ra() { so(); sa(); } 326 container.addEventListener('mouseenter', so); container.addEventListener('mouseleave', sa); 327 var tsx = 0, td = 0, sw = false;
328 container.addEventListener('touchstart', function(e) { tsx = e.touches[0].clientX; td = 0; sw = false; so(); }, {passive:true}); 329 container.addEventListener('touchmove', function(e) { var dx = e.touches[0].clientX - tsx; if (!sw && Math.abs(dx) > 10) sw = true; if (sw) td = dx; }, {passive:true}); 330 container.addEventListener('touchend', function() { if (sw && Math.abs(td) > 50) { if (td < 0) goTo(cur+step); else goTo(cur-step); } sa(); }); 331 render(); sa(); 332 }); 333 // Form Submission Wiring â intercept all forms and POST to DevTools submissions API 334 var pk = window.__DEVTOOLS_PROJECT; 335 var apiBase = window.__DEVTOOLS_API; 336 if (pk && apiBase) { 337 document.querySelectorAll('form').forEach(function(form) { 338 // Skip search forms and forms already wired to a live backend 339 if (form.getAttribute('role') === 'search') return; 340 var action = form.getAttribute('action') || ''; 341 // Skip forms that explicitly point to a third-party live endpoint 342 if (action.startsWith('http') && !action.includes(location.hostname) && !action.includes('devtools')) return; 343 form.addEventListener('submit', function(e) { 344 e.preventDefault(); 345 var fd = new FormData(form); 346 var data = {}; 347 var custom = {}; 348 fd.forEach(function(v, k) { 349 var key = k.toLowerCase().replace(/[^a-z0-9_]/g, '_'); 350 if (key === 'name' || key === 'full_name' || key === 'your_name') data.name = v; 351 else if (key === 'email' || key === 'your_email' || key === 'email_address') data.email = v; 352 else if (key === 'phone' || key === 'telephone' || key === 'phone_number') data.phone = v; 353 else if (key === 'company' || key === 'organization') data.company = v; 354 else if (key === 'subject') data.subject = v; 355 else if (key === 'message' || key === 'comments' || key === 'your_message') data.message = v; 356 else custom[k] = v; 357 }); 358 data.form_type = form.getAttribute('data-form-type') || form.getAttribute('name') || 'contact'; 359 // Stable form identity for durable recipient routing (falls back to 360 // form_type when a form has no slug). 361 var formSlug = form.getAttribute('data-form-slug'); 362 if (formSlug) data.form_slug = formSlug; 363 data.page_url = location.href; 364 if (Object.keys(custom).length > 0) data.custom_fields = custom; 365 var btn = form.querySelector('[type="submit"], button:not([type])'); 366 var origText = btn ? btn.textContent : ''; 367 if (btn) { btn.disabled = true; btn.textContent = 'Sending...'; } 368 fetch(apiBase + '/api/projects/' + pk + '/submissions', { 369 method: 'POST', 370 headers: { 'Content-Type': 'application/json' }, 371 body: JSON.stringify(data), 372 }).then(function(res) { 373 if (res.ok) { 374 form.innerHTML = '<div style="padding:2rem;text-align:center"><p style="font-size:1.25rem;font-weight:600;margin-bottom:0.5rem">Thank you!</p><p style="color:#64748b">Your message has been sent. We will be in touch soon.</p></div>'; 375 } else { 376 if (btn) { btn.disabled = false; btn.textContent = origText; } 377 alert('Something went wrong. Please try again.'); 378 } 379 }).catch(function() { 380 if (btn) { btn.disabled = false; btn.textContent = origText; } 381 alert('Could not send. Please check your connection and try again.'); 382 }); 383 }); 384 }); 385 } 386})(); 387</script>
387 388
389<script data-devtools-reveal> 390(function(){var c=new IntersectionObserver(function(e){e.forEach(function(t){t.isIntersecting&&(t.target.classList.add("is-visible"),c.unobserve(t.target))})},{threshold:.15});document.querySelectorAll(".reveal, .reveal--left, .reveal--right, .reveal--scale, .reveal-stagger").forEach(function(e){c.observe(e)});var a=new IntersectionObserver(function(e){e.forEach(function(t){if(!t.isIntersecting)return;var r=t.target,l=parseInt(r.dataset.target||"0"),i=r.dataset.suffix||"",d=r.dataset.prefix||"",u=2e3,g=performance.now();function s(f){var h=f-g,o=Math.min(h/u,1),v=1-Math.pow(1-o,3),m=Math.round(v*l);r.textContent=d+m.toLocaleString()+i,o<1&&requestAnimationFrame(s)}requestAnimationFrame(s),a.unobserve(r)})},{threshold:.5});document.querySelectorAll("[data-target]").forEach(function(e){a.observe(e)});})(); 391</script>
391 392</body></html>
392<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer="defer"></script>
392<script type="module" src="/_astro/contact.astro_astro_type_script_index_1_lang.CLomzufD.js"></script>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.