');position:absolute;cursor:pointer;z-index:1;filter:grayscale(100%);transition:filter .1s cubic-bezier(0,0,.2,1);border:0}lite-youtube:hover>.lty-playbtn,lite-youtube .lty-playbtn:focus{filter:none}lite-youtube.lyt-activated{cursor:unset}lite-youtube.lyt-activated:before,lite-youtube.lyt-activated>.lty-playbtn{opacity:0;pointer-events:none}.lyt-visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}lite-youtube>iframe{all:unset!important;width:100%!important;height:100%!important;position:absolute!important;inset:0!important;border:0!important}
.author[data-astro-cid-2ri7i3m6]{--sidebar-gap: var(--space-xs);--sidebar-min: 70%;--sidebar-direction: row;flex:1 0;align-items:center;font-size:var(--author-font-size, var(--step--1))}.author-title[data-astro-cid-2ri7i3m6] span[data-astro-cid-2ri7i3m6]{display:block}.avatar[data-astro-cid-2ri7i3m6]{width:100%;height:auto;aspect-ratio:1;max-inline-size:var(--avatar-size, 3rem);object-fit:cover;border-radius:var(--radius-circle);background-color:var(--neutral-dark-100)}.author[data-astro-cid-2ri7i3m6][data-size-variant=large] .avatar[data-astro-cid-2ri7i3m6]{--avatar-size: 4.375rem}.author[data-astro-cid-2ri7i3m6][data-size-variant=large]{--author-font-size: var(--step-0)}.author[data-astro-cid-2ri7i3m6][data-size-variant=inline] .avatar[data-astro-cid-2ri7i3m6]{--avatar-size: 3rem}.author[data-astro-cid-2ri7i3m6][data-size-variant=inline] .author-title[data-astro-cid-2ri7i3m6]{font-weight:var(--font-weight-regular)}.author[data-astro-cid-2ri7i3m6][data-size-variant=inline] :is(.author-name,.author-title,.author-title span)[data-astro-cid-2ri7i3m6]{display:inline-block}.inline-quote[data-astro-cid-w6zxjwyn]{display:grid;grid-template-columns:4px 1fr;grid-column-gap:var(--space-l);grid-row-gap:var(--space-s)}.inline-quote[data-astro-cid-w6zxjwyn]:before{content:"";height:100%;display:inline-block;width:4px;background:var(--gradient-quote-vertical);grid-column:1;grid-row:1 / 3}.inline-quote[data-astro-cid-w6zxjwyn]>[data-astro-cid-w6zxjwyn]{grid-column:2}
img[data-astro-cid-jbhojhg7]{width:100%}
.logo-marquee[data-astro-cid-h2jlyvcc]{--_speed: 60s;--_gap: var(--logo-marquee-gap, 3rem);display:flex;flex-wrap:nowrap;overflow:hidden;gap:var(--_gap);-webkit-mask-image:linear-gradient(90deg,rgba(0,0,0,0) 0%,rgba(0,0,0,1) 15%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 100%)}.logo-marquee[data-astro-cid-h2jlyvcc] :is(picture,img,svg){width:clamp(8rem,1.2vw,10rem);height:100%;max-height:var(--logo-height, 4rem);object-fit:contain;filter:var(--filter-invert)}.logo-marquee[data-astro-cid-h2jlyvcc] ul[data-astro-cid-h2jlyvcc]{flex-shrink:0;display:flex;align-items:center;justify-content:space-around;flex-wrap:nowrap;gap:var(--_gap);min-width:100%;animation:ticker var(--_speed) linear infinite}.logo-marquee[data-astro-cid-h2jlyvcc]:where(.reverse) ul[data-astro-cid-h2jlyvcc]{animation-direction:reverse}@keyframes ticker{0%{transform:translate(calc(var(--_gap) * -1))}to{transform:translate(calc(-100% - var(--_gap) * 2))}}
.logo-wall[data-astro-cid-6y2sa4q5]{--grid-min: 10rem;--grid-gap: 2rem;--grid-justify: center;display:grid;grid-template-columns:repeat(var(--repeat, var(--count, 6)),1fr);gap:clamp(var(--space-m),4vw,var(--space-xl));margin-inline:auto;inline-size:fit-content}.logo-wall[data-astro-cid-6y2sa4q5] :is(picture,img,svg){width:min(10rem,100%);height:min(5rem,100%);aspect-ratio:5/3;object-fit:contain}@media (max-width: 30rem){.sm-wrap[data-astro-cid-6y2sa4q5]{--repeat: 3;padding-inline:var(--space-l)}}
.yt-wrapper[data-astro-cid-aomsn35f]{width:100%;position:relative;isolation:isolate}lite-youtube[data-astro-cid-aomsn35f]{border-radius:var(--border-radius);border:1px solid var(--border-color);max-width:none}lite-youtube[data-astro-cid-aomsn35f]:before{display:none}lite-youtube[data-astro-cid-aomsn35f]>.lty-playbtn{position:absolute;inset:0;margin:auto;height:auto;filter:none;width:min(100px,12vw);aspect-ratio:1;isolation:isolate;background-color:var(--neutral-light-000);background-size:40%;background-repeat:no-repeat;background-position:calc(50% + 2px) center;border-radius:var(--radius-circle);background-image:var(--play-btn-svg);box-shadow:0 0 15px var(--neutral-dark-200);transform:scale(1);transition:transform .4s var(--ease-out)}lite-youtube[data-astro-cid-aomsn35f]:hover .lty-playbtn{transform:scale(1.05)}.caption[data-astro-cid-aomsn35f]{color:var(--color-text-2)}
.astro-code{background-color:var(--blue-900)!important;padding:var(--space-m);border-radius:var(--radius-m);outline-offset:-2px;font-size:var(--step-0)}
.prose[data-astro-cid-cnvtppup]{max-width:var(--prose-max-width, 100%)}
.cta-group[data-astro-cid-sc466a3x]{align-items:var(--ctas-align, center)}.button[data-astro-cid-sc466a3x]{width:var(--cta-min-width)}
.cta-arrow-link:hover{--_icon-x: 2px}.cta-arrow-link svg{--button-icon-size: .7em;transform:rotate(var(--_icon-rotate, 0)) translate(var(--_icon-x, 0));transition:transform .2s var(--ease-out)}.cta-arrow-link[href*="http://"]:not([href*="netlify.com"]){--_icon-rotate: -45deg}.cta-arrow-link[href^="#"]{--_icon-rotate: 90deg}
.button[data-astro-cid-tcbm7f7q][data-icon-name=arrow][data-icon-position=inline-end]:hover{--_icon-x: 2px}.button[data-astro-cid-tcbm7f7q][data-icon-name=arrow] svg[data-astro-cid-tcbm7f7q]{--button-icon-size: .7em;transform:rotate(var(--_icon-rotate, 0)) translate(var(--_icon-x, 0));transition:transform .2s var(--ease-out)}.button[data-astro-cid-tcbm7f7q][data-icon-name=arrow][data-icon-position=inline-end][href*="http://"]:not([href*="netlify.com"]){--_icon-rotate: -45deg}.button[data-astro-cid-tcbm7f7q][data-icon-name=arrow][data-icon-position=inline-end][href^="#"]{--_icon-rotate: 90deg}.button[data-astro-cid-tcbm7f7q]::-webkit-details-marker{display:none}
Push your ideas to the web Deploy any modern frontend stack, from marketing sites to AI apps. Join millions of developers and teams shipping faster on Netlify.
Build & integrate Experiment faster Build any frontend app with your favorite stack and more flexible serverless infrastructure than anywhere else - from edge functions to background jobs.
Deploy & collaborate Iterate together Turn every Git push into a production-ready release. Get instant deploy previews and keep your team in sync without managing configs, variables, or staging servers.
Run & scale Scale automatically Deliver sub-second experiences globally with granular cache and routing controls. Go from zero to enterprise-level traffic with built-in security.
Ship your e-commerce site in just a few clicks Create a new project or connect an existing one to explore features like rollbacks, CI/CD, edge functions, collaborative deploy previews, and more.
e-commerce site AI chatbot landing page edge function export function CartMain ({ layout , cart } : CartMainProps ) {
const linesCount = Boolean (cart?.lines?.nodes?.length || 0 );
const withDiscount =
cart &&
Boolean (cart.discountCodes. filter (( code ) => code.applicable).length);
const className = `cart-main ${ withDiscount ? ' with-discount ' : '' } ` ;
return (
< div className ={ className } >
< CartEmpty hidden ={ linesCount } layout ={ layout } />
< CartDetails cart ={ cart } layout ={ layout } />
</ div >
);
}
const stream = await getChatStream (
{
... appConfig.apiConfig,
user : context.ip,
messages : [{ role : " system " , content : prompt }, ... messages],
},
appConfig. OPENAI_API_KEY ?? ""
);
return new Response (stream, {
headers : { " Content-Type " : " text/plain " },
});
---
const homepage = await getEntryBySlug ( " homepage " , " index " );
const { banner, key_features, service, testimonial } = homepage.data;
---
< Base >
< Banner banner ={ banner } />
< KeyFeatures key_features ={ key_features } />
< Service service ={ service } />
< Testimonial testimonial ={ testimonial } />
< Cta />
</ Base >
import type { Config, Context } from " @netlify/edge-functions " ;
export default async ( request : Request , context : Context ) => {
return Response. json ({ geo : context.geo });
};
export const config : Config = {
path : " /geolocation " ,
};