1<!doctype html><html lang="en"><head> 2 3 4 5
5<script> 6 (function (w, d) { 7 w.dataLayer = w.dataLayer || []; 8 w.gtag = w.gtag || function () { w.dataLayer.push(arguments); }; 9 10 var prefs = null; 11 try { 12 var match = d.cookie.match(/(?:^|;\s*)pd_consent_prefs=([^;]*)/); 13 if (match) { 14 var parsed = JSON.parse(decodeURIComponent(match[1])); 15 if (parsed && parsed.v === 1) { prefs = parsed; } 16 } 17 } catch (e) { /* Invalid or unavailable cookie: retain denied defaults. */ } 18 19 w.gtag('consent', 'default', { 20 ad_storage: prefs && prefs.advertising ? 'granted' : 'denied', 21 analytics_storage: prefs && prefs.analytics ? 'granted' : 'denied', 22 ad_user_data: prefs && prefs.advertising ? 'granted' : 'denied', 23 ad_personalization: prefs && prefs.advertising ? 'granted' : 'denied', 24 functionality_storage: prefs && prefs.functional ? 'granted' : 'denied', 25 personalization_storage: prefs && prefs.functional ? 'granted' : 'denied', 26 security_storage: 'granted' 27 }); 28 29 w._hsGoogleConsentRunOnce = true; 30 w.gtag('set', 'ads_data_redaction', true); 31 w.gtag('set', 'url_passthrough', true); 32 33 34 var _hsp = w._hsp = w._hsp || []; 35 var choice = prefs; 36 37 /* Global Privacy Control: a GPC signal with no stored choice is treated 38 as a rejection of analytics and advertising, persisted with the same 39 cookie schema the consent module writes so the decision is stable 40 across pages and sessions. A stored choice, accept or reject, wins 41 over the signal. The consent module deletes _fbp and _fbc on this same 42 page load once it reads the persisted rejection; cookies that live on 43 third-party domains cannot be cleared from first-party code. */ 44 try { 45 if (!choice && w.navigator && w.navigator.globalPrivacyControl) { 46 choice = { v: 1, gpc: true, necessary: true, functional: false, 47 analytics: false, advertising: false }; 48 w.gtag('consent', 'update', { 49 ad_storage: 'denied', 50 analytics_storage: 'denied', 51 ad_user_data: 'denied', 52 ad_personalization: 'denied' 53 }); 54 var gpcVal = encodeURIComponent(JSON.stringify({ v: 1, 55 ts: new Date().toISOString(), gpc: true, necessary: true, 56 functional: false, analytics: false, advertising: false })); 57 var gpcExp = new Date(Date.now() + 365 * 864e5).toUTCString(); 58 var gpcSec = w.location && w.location.protocol === 'https:' ? ';Secure' : ''; 59 d.cookie = 'pd_consent_prefs=' + gpcVal + ';expires=' + gpcExp + 60 ';path=/;SameSite=Lax' + gpcSec; 61 d.cookie = 'pd_consent=rejected;expires=' + gpcExp + 62 ';path=/;SameSite=Lax' + gpcSec; 63 } 64 } catch (e) { /* Cookies blocked: the denied defaults above still hold. */ } 65 66 /* Re-push the stored or GPC-derived choice into HubSpot on every load so 67 HubSpot-injected tags are gated for returning visitors. No choice: 68 push nothing, HubSpot keeps its account-level default (S0 analysis in 69 docs/site-consistency/compliance/build/consent-gate.diff.md). */ 70 try { 71 if (choice) { 72 _hsp.push(['setHubSpotConsent', { 73 analytics: !!choice.analytics, 74 advertisement: !!choice.advertising, 75 functionality: true 76 }]); 77 } 78 } catch (e) { /* A consent push failure must never break the page. */ } 79 })(window, document); 80 </script>
80 81 <!-- Google Tag Manager --> 82 83
83<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 84 new Date().getTime(),event:'gtm.js'});var done=false, 85 ev=[['pointerdown',true],['keydown',true],['touchstart',true],['scroll',false]]; 86 function go(){if(done){return;}done=true; 87 for(var k=0;k<ev.length;k++){w.removeEventListener(ev[k][0],go,ev[k][1]);} 88 var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:''; 89 j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; 90 f.parentNode.insertBefore(j,f);} 91 w.__pdGtmLoad=go; 92 if(d.readyState==='complete'){go();return;} 93 w.addEventListener('load',go); 94 for(var k=0;k<ev.length;k++){w.addEventListener(ev[k][0],go,{capture:ev[k][1],passive:true});} 95 d.addEventListener('DOMContentLoaded',function(){setTimeout(go,3500);}); 96 })(window,document,'script','dataLayer','GTM-KPNVSHQ9');</script>
96 97 <!-- End Google Tag Manager --> 98 99 <!-- OpenAI Ads pixel --> 100
100<script> 101 (function (w, d) { 102 var loaded = false; 103 function advertisingOptedOut(prefs) { 104 return !!(prefs && prefs.v === 1 && !prefs.advertising); 105 } 106 function storedPrefs() { 107 try { 108 var match = d.cookie.match(/(?:^|;\s*)pd_consent_prefs=([^;]*)/); 109 return match ? JSON.parse(decodeURIComponent(match[1])) : null; 110 } catch (e) { return null; } 111 } 112 function measurePageView() { 113 var path = w.location.pathname; 114 w.oaiq("measure", "page_viewed", { type: "contents", contents: [ 115 { id: path, name: d.title || path, content_type: "page" } 116 ] }); 117 } 118 function load(prefs) { 119 if (loaded) { return; } 120 loaded = true; 121 !function(w,d,s,u){if(w.oaiq)return;var q=function(){q.q.push(arguments)};q.q=[];w.oaiq=q;var j=d.createElement(s);j.async=1;j.src=u;var f=d.getElementsByTagName(s)[0];f.parentNode.insertBefore(j,f)}(w,d,"script","https://bzrcdn.openai.com/sdk/oaiq.min.js"); 122 /* An explicit stored acceptance clears any denial the SDK persisted 123 from an earlier rejection. Consent is set before init per the SDK docs. */ 124 if (prefs && prefs.advertising) { w.oaiq("consent", true); } 125 w.oaiq("init",{pixelId:"BwCNu9crhitKbxVPqTtBZe",debug:true}); 126 /* Wait for <title> so the page name in OpenAI's reports is readable. */ 127 if (d.readyState === 'loading') { 128 d.addEventListener('DOMContentLoaded', measurePageView); 129 } else { measurePageView(); } 130 } 131 var stored = storedPrefs(); 132 if (!advertisingOptedOut(stored)) { load(stored); } 133 d.addEventListener('pd:consent-changed', function (event) { 134 var prefs = event && event.detail && event.detail.consent; 135 if (!prefs) { return; } 136 if (prefs.advertising) { 137 if (loaded) { w.oaiq("consent", true); } else { load(prefs); } 138 } else if (loaded) { 139 w.oaiq("consent", false); 140 } 141 }); 142 143 /* ---- Conversion mapping (site data-layer event -> OpenAI event) ---- */ 144 var LEAD_VALUE_CENTS = 10000; 145 function cents(value) { 146 return Math.max(0, Math.round((Number(value) || 0) * 100)); 147 } 148 function contentsFrom(ecommerce) { 149 var items = (ecommerce && ecommerce.items) || []; 150 var out = []; 151 for (var i = 0; i < items.length && i < 50; i++) { 152 var item = items[i] || {}; 153 out.push({ 154 id: String(item.item_id || ''), 155 name: String(item.item_name || ''), 156 content_type: 'product', 157 quantity: Math.max(1, Math.round(Number(item.quantity) || 1)), 158 amount: cents(item.price), 159 currency: 'USD' 160 }); 161 } 162 return out; 163 } 164 function custom(name, opts) { 165 opts.custom_event_name = name; 166 w.oaiq('measure', 'custom', { type: 'custom' }, opts); 167 } 168 function measureFromSite(payload) { 169 if (!payload || typeof payload.event !== 'string') { return; } 170 var opts = payload.event_id ? { event_id: String(payload.event_id) } : {}; 171 var eco = payload.ecommerce || null; 172 switch (payload.event) { 173 case 'generate_lead': 174 w.oaiq('measure', 'lead_created', 175 { type: 'customer_action', amount: LEAD_VALUE_CENTS, currency: 'USD' }, opts); 176 break; 177 case 'meeting_booked': 178 case 'scheduler_booked': 179 w.oaiq('measure', 'appointment_scheduled', { type: 'customer_action' }, opts); 180 break; 181 case 'newsletter_signup': 182 custom('newsletter_signup', opts); 183 break; 184 case 'phone_click': 185 custom('phone_click', opts); 186 break; 187 case 'view_item': 188 w.oaiq('measure', 'contents_viewed', 189 { type: 'contents', contents: contentsFrom(eco) }, opts); 190 break; 191 case 'add_to_cart': 192 w.oaiq('measure', 'items_added', 193 { type: 'contents', amount: cents(eco && eco.value), currency: 'USD', 194 contents: contentsFrom(eco) }, opts); 195 break; 196 case 'begin_checkout': 197 w.oaiq('measure', 'checkout_started', 198 { type: 'contents', amount: cents(eco && eco.value), currency: 'USD', 199 contents: contentsFrom(eco) }, opts); 200 break; 201 } 202 } 203 d.addEventListener('pd:measure', function (event) { 204 /* Opted-out visitors never loaded the SDK: nothing is sent. */ 205 if (!loaded) { return; }
206 try { measureFromSite(event.detail); } catch (e) { /* never break the page */ } 207 }); 208 })(window, document); 209 </script>
209 210 <!-- End OpenAI Ads pixel --> 211 212
212<script src="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/218469975421/1789757128570/template_measurement.min.js"></script>
212 213 <meta charset="utf-8"> 214 215
215<script> 216 (function () { 217 try { 218 window.hsConversationsSettings = window.hsConversationsSettings || {}; 219 window.hsConversationsSettings.loadImmediately = false; 220 var DELAY = ['connect.facebook.net', 'hsadspixel.net', 221 'apigateway.co', 'usemessages.com']; 222 var held = [], fired = false; 223 window.__pdHeld = held; 224 function shouldDelay(s) { return !!s && DELAY.some(function (h) { return s.indexOf(h) !== -1; }); } 225 function neutralize(node) { 226 if (fired || !node || node.nodeName !== 'SCRIPT') return; 227 var src = node.src || (node.getAttribute && node.getAttribute('src')); 228 if (src && shouldDelay(src)) { 229 held.push(src); 230 try { node.removeAttribute('src'); } catch (e) {} 231 try { node.type = 'javascript/pd-delayed'; } catch (e) {} 232 } 233 } 234 var oAppend = Node.prototype.appendChild; 235 Node.prototype.appendChild = function (n) { neutralize(n); return oAppend.call(this, n); }; 236 var oInsert = Node.prototype.insertBefore; 237 Node.prototype.insertBefore = function (n, r) { neutralize(n); return oInsert.call(this, n, r); }; 238 function fire() { 239 if (fired) return; fired = true; 240 window.__pdFired = true; 241 try { Node.prototype.appendChild = oAppend; Node.prototype.insertBefore = oInsert; } catch (e) {} 242 held.forEach(function (src) { 243 try { var s = document.createElement('script'); s.src = src; s.async = true; (document.head || document.documentElement).appendChild(s); } catch (e) {} 244 }); 245 function loadChat() { if (window.HubSpotConversations && window.HubSpotConversations.widget) { try { window.HubSpotConversations.widget.load(); } catch (e) {} } } 246 if (window.HubSpotConversations) { loadChat(); } 247 else { window.hsConversationsOnReady = (window.hsConversationsOnReady || []); window.hsConversationsOnReady.push(loadChat); } 248 } 249 ['scroll', 'mousemove', 'touchstart', 'keydown', 'click', 'pointerdown', 'wheel'].forEach(function (e) { 250 window.addEventListener(e, fire, { once: true, passive: true }); 251 }); 252 setTimeout(fire, 4000); 253 } catch (e) {} 254 })(); 255 </script>
255 256 257
257<script> 258 (function () { 259 var BLOCK_COUNTRY = 'SG'; 260 function showBlock() { 261 try { document.title = 'Not available in your region'; } catch (e) {} 262 var overlay = document.createElement('div'); 263 overlay.id = 'pd-geo-block'; 264 overlay.setAttribute('role', 'alertdialog'); 265 overlay.setAttribute('aria-label', 'Site not available in your region'); 266 overlay.style.cssText = 'position:fixed;inset:0;z-index:2147483647;display:flex;' 267 + 'align-items:center;justify-content:center;padding:24px;background:#022d41;' 268 + 'color:#fff;font-family:Montserrat,system-ui,sans-serif;text-align:center;'; 269 overlay.innerHTML = '<div style="max-width:560px;">' 270 + '<h1 style="font-family:\'M PLUS Rounded 1c\',system-ui,sans-serif;font-size:28px;line-height:1.25;margin:0 0 12px;">' 271 + 'This site isnât available in your region</h1>' 272 + '<p style="font-size:16px;line-height:1.6;margin:0;color:#cfe3e8;">' 273 + 'Weâre sorry, but Partners Dogs is not currently available in your location.</p>' 274 + '</div>'; 275 function mount() { 276 (document.body || document.documentElement).appendChild(overlay); 277 document.documentElement.style.overflow = 'hidden'; 278 } 279 if (document.body) { mount(); } 280 else { document.addEventListener('DOMContentLoaded', mount); } 281 } 282 try { 283 fetch('/cdn-cgi/trace', { cache: 'no-store' }) 284 .then(function (r) { return r.ok ? r.text() : ''; }) 285 .then(function (txt) { 286 var m = /(?:^|\n)loc=([A-Z]{2})/.exec(txt || ''); 287 if (m && m[1] === BLOCK_COUNTRY) { showBlock(); } 288 }) 289 .catch(function () { /* fail open */ }); 290 } catch (e) { /* fail open */ } 291 })(); 292 </script>
292 293 294 295 296<title>About Us: Family-Owned in Arizona Since 1997 | Partners Dogs</title> 297<meta name="description" content="Father and son owned since 1997. Two Arizona campuses, 70,000+ dogs trained, 4.8 stars across 2,000+ Google reviews. Meet the family behind the results."> 298<meta property="og:title" content="About Us: Family-Owned in Arizona Since 1997 | Partners Dogs"> 299<meta property="og:description" content="Father and son owned since 1997. Two Arizona campuses, 70,000+ dogs trained, 4.8 stars across 2,000+ Google reviews. Meet the family behind the results."> 300<meta property="og:type" content="website"> 301<meta property="og:url" content="https://partnersdogs.com/about"> 302<meta property="og:image" content="https://partnersdogs.com/hubfs/2026%20Website%20Images/OG%20Cards/og-en-about-1200x630.jpg"> 303<meta property="og:image:alt" content="A promotional card for Partners Dogs showing company milestones and a photo of a trainer working with a dog on grass."> 304<meta name="twitter:card" content="summary_large_image"> 305 306 307 308 309<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Caveat:wght@600;700&display=swap" onload="this.onload=null;this.rel='stylesheet'"> 310<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Caveat:wght@600;700&display=swap"></noscript> 311 312 313 314 315<meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1"> 316 317 318 319 320 321 322 323 324 325 326 327 <meta name="viewport" content="width=device-width, initial-scale=1"> 328 329 330 331 332 333 334 335 336 337 338 339 <style> 340a.cta_button{-moz-box-sizing:content-box !important;-webkit-box-sizing:content-box !important;box-sizing:content-box !important;vertical-align:middle}.hs-breadcrumb-menu{list-style-type:none;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px}.hs-breadcrumb-menu-item{float:left;padding:10px 0px 10px 10px}.hs-breadcrumb-menu-divider:before{content:'âº';padding-left:10px}.hs-featured-image-link{border:0}.hs-featured-image{float:right;margin:0 0 20px 20px;max-width:50%}@media (max-width: 568px){.hs-featured-image{float:none;margin:0;width:100%;max-width:100%}}.hs-screen-reader-text{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px} 341</style> 342 343<link rel="stylesheet" href="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/213017371456/1789567127338/template_main.min.css"> 344<link rel="stylesheet" href="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/213014624115/1790293392165/template_theme-overrides.min.css"> 345<link rel="stylesheet" href="https://partnersdogs.com/hubfs/hub_generated/module_assets/1/209480012724/1789756263892/module_cookie-consent.min.css"> 346<link rel="stylesheet" href="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/215368105652/1790713272176/template_dynamic-pages.min.css"> 347<link rel="stylesheet" href="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/216630628647/1789567128879/template_pd-ds2-scoped.min.css"> 348 349 350 351 352 353 <link rel="canonical" href="https://partnersdogs.com/about"> 354 355 356 357 358 359 360 361 362 363 364 365<meta http-equiv="content-language" content="en"> 366 367 368 369 370 371 372 373 <link rel="preconnect" href="https://fonts.googleapis.com"> 374 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 375 <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&
375family=Roboto:wght@400;500;700&display=swap" onload="this.onload=null;this.rel='stylesheet'"> 376 <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&family=Roboto:wght@400;500;700&display=swap"></noscript> 377 378 <style> 379@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGEAYIAV6gnpUpoWwNkYvrugw9RuPWDzrkC76y6xQwhKyPOzVM3THyvqCUY2X5AHDM.58.woff2) format('woff2');unicode-range:U+2105,U+2109-210a,U+210f,U+2116,U+2121,U+2126-2127,U+212b,U+212e,U+2135,U+213b,U+2194-2199,U+21b8-21b9,U+21c4-21c6,U+21cb-21cc,U+21d0,U+21e6-21e9,U+21f5,U+2202-2203,U+2205-2206,U+2208-220b,U+220f,U+2211,U+2213,U+2215,U+221a,U+221d,U+2220,U+2223,U+2225-2226,U+2228,U+222a-222e,U+2234-2237,U+223d,U+2243,U+2245,U+2248,U+224c,U+2260,U+2262,U+2264-2265,U+226e-226f,U+2272-2273,U+2276-2277,U+2283-2287,U+228a-228b,U+2295-2299,U+22a0,U+22a5,U+22bf,U+22da-22db,U+22ef,U+2305-2307,U+2318,U+2329-232a,U+23b0-23b1,U+23be-23cc,U+23ce,U+23da-23db,U+2423,U+2469-24d0;} 380@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGEAYIAV6gnpUpoWwNkYvrugw9RuPWDzrkC76y6xQwhKyPOzVM3THyvqCUY2X5AHDM.94.woff2) format('woff2');unicode-range:U+2015,U+2190,U+4e43,U+5019,U+5247,U+52e7,U+5438,U+54b2,U+55ab,U+57f7,U+5bd2,U+5e8a,U+5ef6,U+6016,U+60b2,U+6162,U+6319,U+6551,U+6607,U+66b4,U+675f,U+67d4,U+6b20,U+6b53,U+6ce3,U+719f,U+75b2,U+770b,U+7720,U+77ac,U+79d2,U+7af9,U+7d05,U+7dca,U+8056,U+80f8,U+81f3,U+8352,U+885d,U+8a70,U+8aa4,U+8cbc,U+900f,U+9084,U+91e3,U+9451,U+96c4,U+99c6,U+9ad4,U+ff70;} 381@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGEAYIAV6gnpUpoWwNkYvrugw9RuPWDzrkC76y6xQwhKyPOzVM3THyvqCUY2X5AHDM.107.woff2) format('woff2');unicode-range:U+23,U+3c,U+2192,U+4e45,U+4efb,U+4f50,U+4f8b,U+4fc2,U+5024,U+5150,U+5272,U+5370,U+53bb,U+542b,U+56db,U+56e3,U+57ce,U+5bc4,U+5bcc,U+5f71,U+60aa,U+6238,U+6280,U+629c,U+6539,U+66ff,U+670d,U+677e-677f,U+6839,U+69cb,U+6b4c,U+6bb5,U+6e96,U+6f14,U+72ec,U+7389,U+7814,U+79cb,U+79d1,U+79fb,U+7a0e,U+7d0d,U+85e4,U+8d64,U+9632,U+96e2,U+9805,U+99ac,U+ff1e;} 382@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGEAYIAV6gnpUpoWwNkYvrugw9RuPWDzrkC76y6xQwhKyPOzVM3THyvqCUY2X5AHDM.108.woff2) format('woff2');unicode-range:U+2605-2606,U+301c,U+4e57,U+4fee,U+5065,U+52df,U+533b,U+5357,U+57df,U+58eb,U+58f0,U+591c,U+592a-592b,U+5948,U+5b85,U+5d0e,U+5ea7,U+5ff5,U+6025,U+63a1,U+63a5,U+63db,U+643a,U+65bd,U+671d,U+68ee,U+6982,U+6b73,U+6bd4,U+6d88,U+7570,U+7b11,U+7d76,U+8077,U+8217,U+8c37,U+8c61,U+8cc7,U+8d85,U+901f,U+962a,U+9802,U+9806,U+9854,U+98f2,U+9928,U+99c5,U+9ed2;} 383@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGEAYIAV6gnpUpoWwNkYvrugw9RuMWPxL4g7eau9x0.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} 384@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGEAYIAV6gnpUpoWwNkYvrugw9RuMWBxL4g7eau.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} 385@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM064ZsPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.58.woff2) format('woff2');unicode-range:U+2105,U+2109-210a,U+210f,U+2116,U+2121,U+2126-2127,U+212b,U+212e,U+2135,U+213b,U+2194-2199,U+21b8-21b9,U+21c4-21c6,U+21cb-21cc,U+21d0,U+21e6-21e9,U+21f5,U+2202-2203,U+2205-2206,U+2208-220b,U+220f,U+2211,U+2213,U+2215,U+221a,U+221d,U+2220,U+2223,U+2225-2226,U+2228,U+222a-222e,U+2234-2237,U+223d,U+2243,U+2245,U+2248,U+224c,U+2260,U+2262,U+2264-2265,U+226e-226f,U+2272-2273,U+2276-2277,U+2283-2287,U+228a-228b,U+2295-2299,U+22a0,U+22a5,U+22bf,U+22da-22db,U+22ef,U+2305-2307,U+2318,U+2329-232a,U+23b0-23b1,U+23be-23cc,U+23ce,U+23da-23db,U+2423,U+2469-24d0;} 386@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:700;font-display:swap;
386src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM064ZsPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.94.woff2) format('woff2');unicode-range:U+2015,U+2190,U+4e43,U+5019,U+5247,U+52e7,U+5438,U+54b2,U+55ab,U+57f7,U+5bd2,U+5e8a,U+5ef6,U+6016,U+60b2,U+6162,U+6319,U+6551,U+6607,U+66b4,U+675f,U+67d4,U+6b20,U+6b53,U+6ce3,U+719f,U+75b2,U+770b,U+7720,U+77ac,U+79d2,U+7af9,U+7d05,U+7dca,U+8056,U+80f8,U+81f3,U+8352,U+885d,U+8a70,U+8aa4,U+8cbc,U+900f,U+9084,U+91e3,U+9451,U+96c4,U+99c6,U+9ad4,U+ff70;} 387@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM064ZsPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.107.woff2) format('woff2');unicode-range:U+23,U+3c,U+2192,U+4e45,U+4efb,U+4f50,U+4f8b,U+4fc2,U+5024,U+5150,U+5272,U+5370,U+53bb,U+542b,U+56db,U+56e3,U+57ce,U+5bc4,U+5bcc,U+5f71,U+60aa,U+6238,U+6280,U+629c,U+6539,U+66ff,U+670d,U+677e-677f,U+6839,U+69cb,U+6b4c,U+6bb5,U+6e96,U+6f14,U+72ec,U+7389,U+7814,U+79cb,U+79d1,U+79fb,U+7a0e,U+7d0d,U+85e4,U+8d64,U+9632,U+96e2,U+9805,U+99ac,U+ff1e;} 388@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM064ZsPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.108.woff2) format('woff2');unicode-range:U+2605-2606,U+301c,U+4e57,U+4fee,U+5065,U+52df,U+533b,U+5357,U+57df,U+58eb,U+58f0,U+591c,U+592a-592b,U+5948,U+5b85,U+5d0e,U+5ea7,U+5ff5,U+6025,U+63a1,U+63a5,U+63db,U+643a,U+65bd,U+671d,U+68ee,U+6982,U+6b73,U+6bd4,U+6d88,U+7570,U+7b11,U+7d76,U+8077,U+8217,U+8c37,U+8c61,U+8cc7,U+8d85,U+901f,U+962a,U+9802,U+9806,U+9854,U+98f2,U+9928,U+99c5,U+9ed2;} 389@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM064asDz-uEzRRLclI.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} 390@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM064asNz-uEzRRL.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} 391@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0m4psPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.58.woff2) format('woff2');unicode-range:U+2105,U+2109-210a,U+210f,U+2116,U+2121,U+2126-2127,U+212b,U+212e,U+2135,U+213b,U+2194-2199,U+21b8-21b9,U+21c4-21c6,U+21cb-21cc,U+21d0,U+21e6-21e9,U+21f5,U+2202-2203,U+2205-2206,U+2208-220b,U+220f,U+2211,U+2213,U+2215,U+221a,U+221d,U+2220,U+2223,U+2225-2226,U+2228,U+222a-222e,U+2234-2237,U+223d,U+2243,U+2245,U+2248,U+224c,U+2260,U+2262,U+2264-2265,U+226e-226f,U+2272-2273,U+2276-2277,U+2283-2287,U+228a-228b,U+2295-2299,U+22a0,U+22a5,U+22bf,U+22da-22db,U+22ef,U+2305-2307,U+2318,U+2329-232a,U+23b0-23b1,U+23be-23cc,U+23ce,U+23da-23db,U+2423,U+2469-24d0;} 392@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0m4psPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.94.woff2) format('woff2');unicode-range:U+2015,U+2190,U+4e43,U+5019,U+5247,U+52e7,U+5438,U+54b2,U+55ab,U+57f7,U+5bd2,U+5e8a,U+5ef6,U+6016,U+60b2,U+6162,U+6319,U+6551,U+6607,U+66b4,U+675f,U+67d4,U+6b20,U+6b53,U+6ce3,U+719f,U+75b2,U+770b,U+7720,U+77ac,U+79d2,U+7af9,U+7d05,U+7dca,U+8056,U+80f8,U+81f3,U+8352,U+885d,U+8a70,U+8aa4,U+8cbc,U+900f,U+9084,U+91e3,U+9451,U+96c4,U+99c6,U+9ad4,U+ff70;} 393@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:800;font-display:swap;
393src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0m4psPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.107.woff2) format('woff2');unicode-range:U+23,U+3c,U+2192,U+4e45,U+4efb,U+4f50,U+4f8b,U+4fc2,U+5024,U+5150,U+5272,U+5370,U+53bb,U+542b,U+56db,U+56e3,U+57ce,U+5bc4,U+5bcc,U+5f71,U+60aa,U+6238,U+6280,U+629c,U+6539,U+66ff,U+670d,U+677e-677f,U+6839,U+69cb,U+6b4c,U+6bb5,U+6e96,U+6f14,U+72ec,U+7389,U+7814,U+79cb,U+79d1,U+79fb,U+7a0e,U+7d0d,U+85e4,U+8d64,U+9632,U+96e2,U+9805,U+99ac,U+ff1e;} 394@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0m4psPxeymz15fQEPFwkYlR0a4qBwdyXRVeV9klkI.108.woff2) format('woff2');unicode-range:U+2605-2606,U+301c,U+4e57,U+4fee,U+5065,U+52df,U+533b,U+5357,U+57df,U+58eb,U+58f0,U+591c,U+592a-592b,U+5948,U+5b85,U+5d0e,U+5ea7,U+5ff5,U+6025,U+63a1,U+63a5,U+63db,U+643a,U+65bd,U+671d,U+68ee,U+6982,U+6b73,U+6bd4,U+6d88,U+7570,U+7b11,U+7d76,U+8077,U+8217,U+8c37,U+8c61,U+8cc7,U+8d85,U+901f,U+962a,U+9802,U+9806,U+9854,U+98f2,U+9928,U+99c5,U+9ed2;} 395@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0m4qsDz-uEzRRLclI.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;} 396@font-face {font-family:'M PLUS Rounded 1c';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/mplusrounded1c/v22/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0m4qsNz-uEzRRL.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;} 397 </style> 398 399 <style> 400 @font-face { 401 font-family: 'M PLUS Rounded 1c Fallback'; 402 src: local('Arial'), local('Helvetica'); 403 size-adjust: 108%; 404 ascent-override: 108%; 405 descent-override: 27%; 406 line-gap-override: 0%; 407 } 408 @font-face { 409 font-family: 'Montserrat Fallback'; 410 src: local('Arial'), local('Helvetica'); 411 size-adjust: 112%; 412 ascent-override: 96.8%; 413 descent-override: 25.1%; 414 line-gap-override: 0%; 415 } 416 @font-face { 417 font-family: 'Roboto Fallback'; 418 src: local('Arial'), local('Helvetica'); 419 size-adjust: 100.6%; 420 ascent-override: 92.7%; 421 descent-override: 24.4%; 422 line-gap-override: 0%; 423 } 424 </style> 425 426 427 428 429 430 431 <link rel="preload" as="style" href="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/215676889161/1789567121674/template_motion.min.css" onload="this.onload=null;this.rel='stylesheet'"> 432 <noscript><link rel="stylesheet" href="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/215676889161/1789567121674/template_motion.min.css"></noscript> 433 434 435 <link rel="icon" type="image/png" sizes="32x32" href="https://partnersdogs.com/hs-fs/hubfs/partners-dogs-favicon-32.png"> 436 <link rel="icon" type="image/png" sizes="192x192" href="https://partnersdogs.com/hs-fs/hubfs/partners-dogs-favicon-192.png"> 437 <link rel="apple-touch-icon" sizes="180x180" href="https://partnersdogs.com/hs-fs/hubfs/partners-dogs-apple-touch-180.png"> 438 439 440 441 442 <!-- VERIFY-VS-GBP: Scottsdale GeoCoordinates below (33.5733, -111.8917) are the 443 repo-canonical values, chosen as the single source over the two conflicting 444 legacy values (33.5908,-111.8893 and 33.5811,-111.8957). Owner: confirm this 445 pin matches the Google Business Profile listing for 8642 E Shea Blvd, 446 Scottsdale AZ 85260 before treating it as verified. Cave Creek 447 (33.8322, -111.9516) is consistent across all sources. --> 448
448<script type="application/ld+json"> 449 { 450 "@context": "https://schema.org", 451 "@graph": [ 452 { 453 "@type": "Organization", 454 "@id": "https://partnersdogs.com/#organization", 455 "additionalType": ["https://schema.org/PetStore"], 456 "name": "Partners Dog School", 457 "alternateName": "Partners Dogs", 458 "description": "Arizona's highest-rated dog training school. 70,000+ dogs trained over 28 years.", 459 "url": "https://partnersdogs.com", 460 "logo": "https://partnersdogs.com/hubfs/partners-dogs-logo.png", 461 "image": "https://partnersdogs.com/hubfs/2026%20Website%20Images/OG%20Cards/og-en-about-1200x630.jpg", 462 "telephone": "+14805956700", 463 "email": "[email protected]", 464 "foundingDate": "1997", 465 "subOrganization": [ 466 {"@id": "https://partnersdogs.com/#scottsdale"}, 467 {"@id": "https://partnersdogs.com/#cave-creek"} 468 ], 469 "areaServed": [ 470 "Scottsdale, AZ", 471 "Cave Creek, AZ", 472 "Phoenix, AZ", 473 "Paradise Valley, AZ", 474 "Tempe, AZ", 475 "Mesa, AZ", 476 "Anthem, AZ", 477 "Fountain Hills, AZ", 478 "Chandler, AZ", 479 "Gilbert, AZ" 480 ], 481 482 "sameAs": [ 483 "https://www.facebook.com/PartnersDogTrainingSchool/", 484 "https://www.instagram.com/partnersdogs/", 485 "https://www.youtube.com/@partnersdogs", 486 "https://www.tiktok.com/@partnersdogs" 487 ], 488 "contactPoint": [ 489 { 490 "@type": "ContactPoint", 491 "telephone": "+14805956700", 492 "email": "[email protected]", 493 "contactType": "customer service", 494 "areaServed": "US", 495 "availableLanguage": ["English"] 496 } 497 ], 498 "numberOfEmployees": {"@type": "QuantitativeValue", "value": 20}, 499 "priceRange": "$$", 500 "hasOfferCatalog": { 501 "@type": "OfferCatalog", 502 "name": "Dog Training Services", 503 "itemListElement": [ 504 { 505 "@type": "Service", 506 "name": "Board & Train", 507 "serviceType": "Residential Dog Training", 508 "provider": {"@id": "https://partnersdogs.com/#organization"}, 509 "url": "https://partnersdogs.com/training-camp" 510 }, 511 { 512 "@type": "Service", 513 "name": "Behavior Camp", 514 "serviceType": "Behavior Modification Program", 515 "provider": {"@id": "https://partnersdogs.com/#organization"}, 516 "url": "https://partnersdogs.com/behavior-camp" 517 }, 518 { 519 "@type": "Service", 520 "name": "Transform Camp", 521 "serviceType": "Intensive Training Camp", 522 "provider": {"@id": "https://partnersdogs.com/#organization"}, 523 "url": "https://partnersdogs.com/transform-camp" 524 }, 525 { 526 "@type": "Service", 527 "name": "Group Classes", 528 "serviceType": "Group Dog Training Classes", 529 "provider": {"@id": "https://partnersdogs.com/#organization"}, 530 "url": "https://partnersdogs.com/group-classes" 531 }, 532 { 533 "@type": "Service", 534 "name": "Private Lessons", 535 "serviceType": "Private Dog Training Lessons", 536 "provider": {"@id": "https://partnersdogs.com/#organization"}, 537 "url": "https://partnersdogs.com/private-lessons" 538 }, 539 { 540 "@type": "Service", 541 "name": "DaySchool", 542 "alternateName": "Daycare", 543 "serviceType": "Dog Daycare / DaySchool", 544 "provider": {"@id": "https://partnersdogs.com/#organization"}, 545 "url": "https://partnersdogs.com/daycare" 546 }, 547 { 548 "@type": "Service", 549 "name": "Boarding", 550 "serviceType": "Dog Boarding", 551 "provider": {"@id": "https://partnersdogs.com/#organization"}, 552 "url": "https://partnersdogs.com/en/dog-boarding" 553 }, 554 { 555 "@type": "Service", 556 "name": "Snake Avoidance", 557 "serviceType": "Snake Avoidance Training", 558 "provider": {"@id": "https://partnersdogs.com/#organization"}, 559 "url": "https://partnersdogs.com/snake-avoidance" 560 }, 561 { 562 "@type": "Service", 563 "name": "PD360 Assessment", 564 "serviceType": "Dog Behavior Assessment", 565 "provider": {"@id": "https://partnersdogs.com/#organization"}, 566 "url": "https://partnersdogs.com/pd360-assessment" 567 } 568 ] 569 }, 570 "aggregateRating": { 571 "@type": "AggregateRating", 572 "ratingValue": "4.8", 573 "reviewCount": "2000", 574 "bestRating": "5", 575 "worstRating": "1" 576 } 577 }, 578 { 579 "@type": "LocalBusiness", 580 "@id": "https://partnersdogs.com/#scottsdale", 581 "name": "Partners Dog School, Scottsdale", 582 "parentOrganization": {"@id": "https://partnersdogs.com/#organization"}, 583 "url": "https://partnersdogs.com/scottsdale", 584 "image": "https://partnersdogs.com/hubfs/2026%20Website%20Images/OG%20Cards/og-en-about-1200x630.jpg", 585 "telephone": "+14805956700", 586 "email": "[email protected]", 587 "priceRange": "$$", 588 "areaServed": [ 589 "Scottsdale, AZ", 590 "Cave Creek, AZ", 591 "Phoenix, AZ", 592 "Paradise Valley, AZ", 593 "Tempe, AZ", 594 "Mesa, AZ", 595 "Anthem, AZ", 596 "Fountain Hills, AZ", 597 "Chandler, AZ", 598 "Gilbert, AZ" 599 ], 600 "address": { 601 "@type": "PostalAddress", 602 "streetAddress": "8642 E Shea Blvd", 603 "addressLocality": "Scottsdale", 604 "addressRegion": "AZ", 605 "postalCode": "85260", 606 "addressCountry": "US" 607 }, 608 "geo": { 609 "@type": "GeoCoordinates", 610 "latitude": 33.5733, 611 "longitude": -111.8917 612 }, 613 "openingHoursSpecification": [ 614 {"@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Frid
614ay"], "opens": "08:00", "closes": "17:00"}, 615 {"@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "08:00", "closes": "14:00"} 616 ], 617 "department": { 618 "@type": "LocalBusiness", 619 "@id": "https://partnersdogs.com/#scottsdale-dayschool", 620 "name": "Partners Dog School Scottsdale, DaySchool & Daycare", 621 "telephone": "+14805956700", 622 "openingHoursSpecification": [ 623 {"@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "07:00", "closes": "18:00"}, 624 {"@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "08:00", "closes": "16:00"} 625 ] 626 } 627 }, 628 { 629 "@type": "LocalBusiness", 630 "@id": "https://partnersdogs.com/#cave-creek", 631 "name": "Partners Dog School, Cave Creek", 632 "parentOrganization": {"@id": "https://partnersdogs.com/#organization"}, 633 "url": "https://partnersdogs.com/cave-creek", 634 "image": "https://partnersdogs.com/hubfs/2026%20Website%20Images/OG%20Cards/og-en-about-1200x630.jpg", 635 "telephone": "+14805956700", 636 "email": "[email protected]", 637 "priceRange": "$$", 638 "areaServed": [ 639 "Scottsdale, AZ", 640 "Cave Creek, AZ", 641 "Phoenix, AZ", 642 "Paradise Valley, AZ", 643 "Tempe, AZ", 644 "Mesa, AZ", 645 "Anthem, AZ", 646 "Fountain Hills, AZ", 647 "Chandler, AZ", 648 "Gilbert, AZ" 649 ], 650 "address": { 651 "@type": "PostalAddress", 652 "streetAddress": "4640 E Forest Pleasant Pl", 653 "addressLocality": "Cave Creek", 654 "addressRegion": "AZ", 655 "postalCode": "85331", 656 "addressCountry": "US" 657 }, 658 "geo": { 659 "@type": "GeoCoordinates", 660 "latitude": 33.8322, 661 "longitude": -111.9516 662 }, 663 "openingHoursSpecification": [ 664 {"@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "08:00", "closes": "17:00"}, 665 {"@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "08:00", "closes": "14:00"} 666 ], 667 "department": { 668 "@type": "LocalBusiness", 669 "@id": "https://partnersdogs.com/#cave-creek-dayschool", 670 "name": "Partners Dog School Cave Creek, DaySchool & Daycare", 671 "telephone": "+14805956700", 672 "openingHoursSpecification": [ 673 {"@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "07:00", "closes": "18:00"}, 674 {"@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "08:00", "closes": "16:00"} 675 ] 676 } 677 }, 678 { 679 "@type": "WebSite", 680 "@id": "https://partnersdogs.com/#website", 681 "name": "Partners Dog School", 682 "url": "https://partnersdogs.com", 683 "publisher": {"@id": "https://partnersdogs.com/#organization"} 684 685 } 686 ] 687 } 688 </script>
688 689<meta name="generator" content="HubSpot"></head> 690<body class="pd-site-body"> 691 <!-- Google Tag Manager (noscript) -->
vendor: 70 bytes, lines 691-692
691 692 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
692GTM-KPNVSHQ9
vendor: 85 bytes, lines 692-693
692" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 693
693<!-- End Google Tag Manager (noscript) --> 694 695 <link rel="preload" as="image" imagesrcset="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=480 480w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=640 640w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=828 828w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=1080 1080w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=1280 1280w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=1600 1600w" imagesizes="100vw" fetchpriority="high"> 696 697 698 <div id="pd-page-loader" class="pd-page-loader" aria-hidden="true" role="status"> 699 <div class="pd-page-loader__card"> 700 <div class="pd-page-loader__paws" aria-hidden="true"> 701 <span class="pd-page-loader__paw"></span> 702 <span class="pd-page-loader__paw"></span> 703 <span class="pd-page-loader__paw"></span> 704 <span class="pd-page-loader__paw"></span> 705 </div> 706 <p class="pd-page-loader__msg" id="pd-page-loader-msg">Fetching the good stuff.</p> 707 <div class="pd-page-loader__bar" aria-hidden="true"></div> 708 </div> 709 </div> 710 711
711<script> 712 (function () { 713 var el = document.getElementById('pd-page-loader'); 714 var msgEl = document.getElementById('pd-page-loader-msg'); 715 if (!el) return; 716 717 var messages = [ 718 'Fetching the good stuff.', 719 'Wagging through the page.', 720 'Sniffing out what you need.', 721 'Almost there.', 722 'Rounding up the page.' 723 ]; 724 var hideTimer = null; 725 var showTimer = null; 726 727 function hide() { 728 el.classList.remove('is-active'); 729 el.setAttribute('aria-hidden', 'true'); 730 if (hideTimer) { clearTimeout(hideTimer); hideTimer = null; } 731 if (showTimer) { clearTimeout(showTimer); showTimer = null; } 732 } 733 function show() { 734 if (msgEl) msgEl.textContent = messages[Math.floor(Math.random() * messages.length)]; 735 el.classList.add('is-active'); 736 el.setAttribute('aria-hidden', 'false'); 737 if (hideTimer) clearTimeout(hideTimer); 738 hideTimer = setTimeout(hide, 6000); // failsafe 739 } 740 // Grace delay (2026-08-18, owner: loader showed for too long): fast 741 // navigations paint the next page before this fires, so the overlay 742 // only ever appears on genuinely slow loads. 743 function scheduleShow() { 744 if (showTimer) clearTimeout(showTimer); 745 showTimer = setTimeout(show, 300); 746 } 747 748 // Hide on initial page show + bfcache restore 749 window.addEventListener('pageshow', hide); 750 window.addEventListener('load', hide); 751 752 // Click handler: detect internal-link navigation and show the overlay 753 document.addEventListener('click', function (e) { 754 // Bail on modifier-clicks (open-in-new-tab, etc.) 755 if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return; 756 if (e.defaultPrevented) return; 757 758 var a = e.target && e.target.closest && e.target.closest('a'); 759 if (!a || !a.href) return; 760 // Skip new-tab / download / non-http 761 if (a.target && a.target !== '' && a.target !== '_self') return; 762 if (a.hasAttribute('download')) return; 763 var href = a.getAttribute('href') || ''; 764 if (!href || href.charAt(0) === '#') return; // same-page anchor 765 if (/^(mailto:|tel:|sms:|javascript:)/i.test(href)) return; 766 767 // Internal vs external 768 var host; 769 try { host = new URL(a.href).hostname; } catch (_) { return; } 770 var sameOrigin = host === window.location.hostname; 771 if (!sameOrigin) return; 772 773 // Skip same-path navigations (just hash/query changes) 774 var nextPath = new URL(a.href).pathname; 775 if (nextPath === window.location.pathname) return; 776 777 scheduleShow(); 778 }, true); 779 780 // Show on form submits that target a different page 781 document.addEventListener('submit', function (e) { 782 var f = e.target; 783 if (!f || f.tagName !== 'FORM') return; 784 if (f.target && f.target !== '_self') return; 785 show(); 786 }, true); 787 })(); 788 </script>
788 789 790 <a class="pd-skip-link" href="#main-content">Skip to content</a> 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829<style> 830/* ============================================================ 831 PARTNERS DOGS - HEADER v2 (self-contained) 832 Sticky chrome. Navy utility bar, mega-menu nav, mobile drawer. 833 834 COLOR PAIRS + AA CONTRAST (recomputed 2026-08-18 from WCAG 2.1 relative 835 luminance; the three values marked CORRECTED were overstated in the table 836 this replaces - all still pass at the level now shown, nothing regressed): 837 navy #022D41 on white #FFFFFF ................ 14.4:1 AAA 838 white #FFFFFF on navy #022D41 ................ 14.4:1 AAA 839 rgba(255,255,255,.85) on navy ................ 10.8:1 AAA 840 rgba(255,255,255,.72) on navy (icons) ........ 8.1:1 AAA (3:1 needed) 841 teal #34C6B9 on navy (icon hover) ............ 6.8:1 AA CORRECTED (was 7.6 AAA) 842 navy on yellow #FFDE59 (pills, primary CTA) .. 10.9:1 AAA 843 navy on yellow-hover #E8C427 ................. 8.5:1 AAA 844 navy on teal #34C6B9 (panel CTA button) ...... 6.8:1 AA CORRECTED (was 7.6 AAA) 845 navy on teal-hover #2BA79C ................... 4.9:1 AA 846 teal-ink #16776F on white (labels, hover) .... 5.4:1 AA 847 slate #6B7280 on white (sublabels) ........... 4.8:1 AA 848 navy on header bg #FBFAF5 .................... 13.8:1 AAA 849 The two 6.8:1 pairs are icon and large-button surfaces, so they clear their 850 real requirement (3:1 non-text, 4.5:1 normal text) with room. Do not "fix" 851 them by darkening the teal: that would move the brand colour, not the ratio 852 that matters. 853 NOTE: v1 used #1A8F85 for label + hover text on white (3.95:1, FAILS AA for 854 normal text). v2 darkens it to #16776F (5.4:1). Visually near-identical. 855 #1A8F85 is ALSO the current global --pd-teal-accessible value, which is why 856 the token bridge below deliberately does NOT point --pdh-teal-ink at it. 857 NOTE: v1's mobile primary CTA was white on a teal gradient (1.9:1, FAILS). 858 v2 uses the same yellow/navy pill as the desktop primary (10.9:1). 859 ============================================================ */ 860 861/* Scoped border-box reset. The header is self-contained by contract, so it 862 cannot assume main.css has applied a global box-sizing rule. Without this the 863 panels render 46px wider than their declared width (22px padding each side 864 plus 1px border), which defeats the min(96vw, Npx) viewport guard: a panel 865 capped at 96vw would still paint 96vw + 46px and run off screen. */ 866.pdh, .pdh *, .pdh *::before, .pdh *::after { box-sizing: border-box; } 867 868/* ============================================================ 869 TOKEN BRIDGE (2026-08-18). Every colour, font, radius and shadow the 870 header paints is declared ONCE here and consumed as var(--pdh-*) 871 below, so a brand change lands in one block instead of ~145 call 872 sites. Nothing about the rendered result changed when this landed: 873 every value below is byte-identical to the literal it replaced. 874 875 Two declaration forms are used, deliberately: 876 877 var(--pd-*, <literal>) a global theme token carries this exact 878 value today, so the header follows a DS 879 repaint automatically. The literal is the 880 self-containment fallback - the header 881 still paints correctly if main.css never 882 loads, which is this partial's standing 883 contract (see the file header). 884 <literal> only no global token carries this value. Keeping 885 it scoped and named makes it traceable and 886 one-line changeable, instead of pretending 887 a token exists or snapping the header onto 888 a near-miss token and shifting the pixels. 889 890 VERIFIED against the live main.css bundle on 2026-08-18: 891 --pd-navy #022d41 · --pd-teal #34c6b9 · --pd-yellow #ffde59 892 --pd-lightest-grey #ebeded · --pd-soft-grey-accessible #6b7280 893 --pd-white #fff · --radius-full 999px · --radius-sm 8px 894 --radius-md 12px · --pd-container-pad 24px 895 Re-verify these before assuming a substitution below is still inert. 896 ============================================================ */ 897.pdh { 898 /* ---- Brand, straight off the global scale ---- */ 899 --pdh-navy: var(--pd-navy, #022D41); 900 --pdh-teal: var(--pd-teal, #34C6B9); 901 --pdh-yellow: var(--pd-yellow, #FFDE59); 902 --pdh-white: var(--pd-white, #ffffff); 903 --pdh-rule: var(--pd-lightest-grey, #ebeded); 904 --pdh-sublabel: var(--pd-soft-grey-accessible, #6B7280); 905 906 /* ---- Teal ink: teal used as TEXT on a light ground ---- 907 Deliberately NOT var(--pd-teal-accessible): that token is #1A8F85 908 globally, which is 3.95:1 on white and fails AA for normal text - 909 it is the exact value header v2 moved away from (see the NOTE in 910 the block above). The DS2 canon is #147468 (--pd-teal-600 in 911 pd-tokens-2.0.css, 5.6:1) but that file is .pd-ds2-scoped and never 912 reaches the header, and main.css's own --pd-teal-600 is still 913 #1A8F85. So the header keeps its AA-verified #16776F (5.4:1) until 914 a GLOBAL --pd-teal-ink exists at :root, then adopts it with no 915 further edit here. To converge on the DS2 value immediately, 916 change the fallback below to #147468 - both are AA on white and the 917 two are visually indistinguishable (delta E under 2). */ 918 --pdh-teal-ink: var(--pd-teal-ink, #16776F); 919 920 /* ---- Hover shades ---- 921 No global token carries either. Both are hand-tuned one-step-darker 922 versions of teal/yellow, picked so navy label text stays AA on top 923 (4.9:1 and 8.5:1 respectively). */ 924 --pdh-teal-hover: #2BA79C; 925 --pdh-yellow-hover: #E8C427; 926 927 /* ---- Chrome ground ---- 928 Warm off-white, distinct from --pd-cream (#f6f0e6) by design: this 929 is the sticky chrome ground, not a page section ground. The three 930 alpha variants are what the translucent bar actually paints. */ 931 --pdh-surface: #FBFAF5; 932 --pdh-surface-94: rgba(251, 250, 245, 0.94); 933 --pdh-surface-86: rgba(251, 250, 245, 0.86); 934 --pdh-surface-97: rgba(251, 250, 245, 0.97); 935 --pdh-rule-soft: #f5f5f5; 936 937 /* ---- Alpha tints ---- 938 CSS cannot alpha-composite a hex custom property without 939 color-mix(), which would change the computed value, so these stay 940 literal and named. Channels track navy 2,45,65 / teal 52,198,185 / 941 white 255,255,255 - if a brand colour ever moves, these move by 942 hand, and that is the point of listing them in one place. */ 943 --pdh-on-navy: rgba(255,255,255,0.85); 944 --pdh-on-navy-strong: rgba(255,255,255,0.92); 945 --pdh-on-navy-icon: rgba(255,255,255,0.72); 946 --pdh-on-navy-rule: rgba(255,255,255,0.22); 947 --pdh-on-navy-dot: rgba(255,255,255,0.32); 948 --pdh-on-navy-wash: rgba(255,255,255,0.08); 949 --pdh-tint-teal-40: rgba(52,198,185,0.4); 950 --pdh-tint-teal-25: rgba(52,198,185,0.25); 951 --pdh-tint-teal-22: rgba(52,198,185,0.22); 952 --pdh-tint-teal-12: rgba(52,198,185,0.12); 953 --pdh-tint-teal-10: rgba(52,198,185,0.10); 954 --pdh-hairline: rgba(2,45,65,0.06); 955 --pdh-hairline-soft: rgba(2,45,65,0.04); 956 --pdh-hairline-btn: rgba(2,45,65,0.12); 957 --pdh-hairline-cta: rgba(2, 45, 65, 0.08); 958 959 /* ---- Shadows ---- 960 None of main.css's --shadow-* / --pd-shadow-* scale matches these 961 values, so they stay header-scoped rather than being snapped onto a 962 near-miss token and moving the chrome. */ 963 --pdh-shadow-scrolled: 0 4px 14px rgba(2,45,65,0.06); 964 --pdh-shadow-panel: 0 16px 40px rgba(2,45,65,0.14); 965 --pdh-shadow-search: 0 18px 44px rgba(2,45,65,0.16); 966 --pdh-shadow-drawer: 0 16px 32px rgba(2,45,65,0.12); 967 --pdh-shadow-pill: 0 4px 14px rgba(2,45,65,.12); 968 --pdh-shadow-pill-hi: 0 8px 22px rgba(2,45,65,.20); 969 --pdh-shadow-cta: 0 -6px 18px rgba(2, 45, 65, 0.08); 970 --pdh-shadow-cta-btn: 0 4px 14px rgba(2, 45, 65, 0.14); 971 972 /* ---- Type ---- 973 --pd-font-headings / --pd-font-ui are the theme-settings tokens 974 defined by theme-overrides.css. That file currently ships NO :root 975 block on live, so both resolve to the literal stacks below and
976 nothing moves. If the theme-settings block is ever restored the 977 header follows it, and the primary family is the same either way. */ 978 --pdh-font-head: var(--pd-font-headings, 'M PLUS Rounded 1c', system-ui, sans-serif); 979 --pdh-font-ui: var(--pd-font-ui, 'Roboto', system-ui, sans-serif); 980 981 /* ---- Geometry ---- 982 Only exact matches are wired to the global scale. This is a NEW 983 coupling: a DS shape-track change (e.g. --radius-sm moving off 8px) 984 will now reach the header's nav links, toggle and search results, 985 which is the intended fix for "a DS button change silently misses 986 every page's header". Unpick by inlining the literals here if that 987 coupling is ever unwanted. --pdh-radius-panel/-card have no token 988 match and stay literal. */ 989 --pdh-radius-pill: var(--radius-full, 999px); 990 --pdh-radius-sm: var(--radius-sm, 8px); 991 --pdh-radius-md: var(--radius-md, 12px); 992 --pdh-radius-panel: 14px; 993 --pdh-radius-card: 10px; 994 --pdh-gutter: var(--pd-container-pad, 24px); 995 --pdh-container: 1280px; 996} 997 998.pdh { 999 position: sticky; top: 0; z-index: 500; 1000 font-family: var(--pdh-font-ui); 1001 background: var(--pdh-surface-94); 1002 backdrop-filter: saturate(160%) blur(8px); 1003 -webkit-backdrop-filter: saturate(160%) blur(8px); 1004 border-bottom: 1px solid var(--pdh-hairline); 1005 transition: box-shadow 0.2s ease, background 0.2s ease, border-color 0.2s ease; 1006} 1007.pdh.is-scrolled { 1008 background: var(--pdh-surface-86); 1009 box-shadow: var(--pdh-shadow-scrolled); 1010 border-color: var(--pdh-hairline-soft); 1011} 1012 1013/* ---------- Top utility bar ---------- */ 1014.pdh-bar { 1015 background: var(--pdh-navy); color: var(--pdh-on-navy); font-size: 13px; 1016 max-height: 80px; overflow: hidden; 1017 transition: max-height 0.25s ease, padding 0.25s ease, opacity 0.2s ease; 1018} 1019.pdh.is-scrolled .pdh-bar { max-height: 0; opacity: 0; padding: 0; } 1020.pdh-bar__inner { 1021 max-width: var(--pdh-container); margin: 0 auto; padding: 7px var(--pdh-gutter); 1022 display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; 1023} 1024.pdh-bar__left, .pdh-bar__right { display: flex; align-items: center; gap: 10px; min-width: 0; } 1025.pdh-bar__left { flex-wrap: wrap; } 1026 1027/* Social row. Muted white at rest (8.1:1 on navy), teal on hover (7.6:1). */ 1028.pdh-social { list-style: none; display: flex; align-items: center; gap: 2px; margin: 0; padding: 0; } 1029.pdh-social__link { 1030 display: inline-flex; align-items: center; justify-content: center; 1031 width: 28px; height: 28px; border-radius: var(--pdh-radius-pill); 1032 color: var(--pdh-on-navy-icon); text-decoration: none; 1033 transition: color 0.15s ease, background 0.15s ease; 1034} 1035.pdh-social__link:hover, .pdh-social__link:focus-visible { color: var(--pdh-teal); background: var(--pdh-on-navy-wash); } 1036.pdh-social__link svg { width: 16px; height: 16px; display: block; } 1037 1038.pdh-bar__divider { display: inline-block; width: 1px; height: 16px; background: var(--pdh-on-navy-rule); margin: 0 4px; } 1039.pdh-bar__snip { color: var(--pdh-on-navy); white-space: nowrap; } 1040.pdh-bar__dot { display: inline-block; width: 3px; height: 3px; border-radius: 50%; background: var(--pdh-on-navy-dot); vertical-align: middle; } 1041 1042.pdh-bar__phone { 1043 display: inline-flex; align-items: center; gap: 7px; 1044 color: var(--pdh-on-navy-strong); text-decoration: none; font-weight: 600; white-space: nowrap; 1045 transition: color 0.15s ease; 1046} 1047.pdh-bar__phone:hover { color: var(--pdh-yellow); } 1048.pdh-bar__phone svg { width: 14px; height: 14px; display: block; flex-shrink: 0; } 1049 1050/* Yellow portal pill. navy on #FFDE59 = 10.9:1. */ 1051.pdh-bar__portal { 1052 display: inline-flex; align-items: center; gap: 7px; 1053 background: var(--pdh-yellow); color: var(--pdh-navy); text-decoration: none; 1054 padding: 5px 14px; border-radius: var(--pdh-radius-pill); 1055 font-family: var(--pdh-font-head); 1056 font-weight: 800; font-size: 12.5px; line-height: 1.4; white-space: nowrap; 1057 transition: background 0.15s ease, transform 0.15s ease; 1058} 1059.pdh-bar__portal:hover { background: var(--pdh-yellow-hover); color: var(--pdh-navy); transform: translateY(-1px); } 1060.pdh-bar__portal svg { width: 14px; height: 14px; display: block; flex-shrink: 0; } 1061 1062/* ---------- Main nav row ---------- */ 1063.pdh-main { 1064 position: relative; /* containing block for the mega panels */ 1065 max-width: var(--pdh-container); margin: 0 auto; padding: 10px var(--pdh-gutter); 1066 display: flex; align-items: center; gap: 20px; 1067 transition: padding 0.2s ease; 1068} 1069.pdh.is-scrolled .pdh-main { padding: 6px 24px; } 1070.pdh-logo { 1071 flex-shrink: 0; font-family: var(--pdh-font-head); 1072 font-weight: 800; font-size: 18px; color: var(--pdh-navy); text-decoration: none; letter-spacing: -0.01em; 1073 display: inline-flex !important; 1074 align-items: center !important; 1075 /* Hard cap container: explicit width AND height so the runtime-injected img 1076 can never push the box past these bounds on ANY screen size. */ 1077 height: 48px !important; 1078 max-height: 48px !important; 1079 width: auto !important; 1080 max-width: 220px !important; 1081 overflow: hidden !important; 1082 transition: height 0.2s ease, max-height 0.2s ease, max-width 0.2s ease; 1083} 1084.pdh.is-scrolled .pdh-logo { 1085 height: 38px !important; 1086 max-height: 38px !important; 1087 max-width: 180px !important; 1088}
1089/* The HubSpot logo wrapper span: fill the constrained parent, never grow it. */ 1090.pdh-logo .hs_cos_wrapper, 1091.pdh-logo .hs_cos_wrapper_type_logo, 1092.pdh-logo > span { 1093 display: inline-flex !important; 1094 align-items: center !important; 1095 height: 100% !important; 1096 max-height: 100% !important; 1097 width: auto !important; 1098 max-width: 100% !important; 1099 overflow: hidden !important; 1100 line-height: 0 !important; 1101} 1102/* Force the injected img to scale to the container height, never to width. */ 1103.pdh-logo img, 1104.pdh-logo span img, 1105.pdh-logo a img, 1106.pdh-logo .hs_cos_wrapper img, 1107.pdh-logo .hs_cos_wrapper_type_logo img { 1108 height: 100% !important; 1109 max-height: 100% !important; 1110 width: auto !important; 1111 max-width: 100% !important; 1112 display: block !important; 1113 object-fit: contain !important; 1114 object-position: left center !important; 1115 transition: height 0.2s ease, max-height 0.2s ease; 1116} 1117@media (max-width: 1040px) { 1118 .pdh-logo { height: 42px !important; max-height: 42px !important; max-width: 200px !important; } 1119 .pdh.is-scrolled .pdh-logo { height: 36px !important; max-height: 36px !important; max-width: 170px !important; } 1120} 1121 1122.pdh-nav { flex: 1; display: flex; justify-content: center; } 1123.pdh-nav__list { list-style: none; margin: 0; padding: 0; display: flex; gap: 2px; align-items: center; } 1124.pdh-nav__item { position: relative; padding-bottom: 0; } 1125/* Mega panels anchor to .pdh-main (not to the item) so a 940px panel under the 1126 leftmost tab can never run off the left edge of the viewport. The Shop panel 1127 keeps item-relative positioning so it anchors to its own tab, and right- 1128 anchors because Shop is the rightmost tab. */ 1129.pdh-nav__item--mega { position: static; } 1130.pdh-nav__link { 1131 display: inline-flex; align-items: center; gap: 6px; 1132 padding: 10px 12px; border-radius: var(--pdh-radius-sm); 1133 color: var(--pdh-navy); text-decoration: none; font-weight: 600; font-size: 15px; 1134 background: transparent; border: none; cursor: pointer; font-family: inherit; 1135 white-space: nowrap; 1136 transition: background 0.15s ease, color 0.15s ease; 1137} 1138.pdh-nav__link:hover, .pdh-nav__link[aria-expanded="true"] { background: var(--pdh-tint-teal-12); color: var(--pdh-teal-ink); } 1139.pdh-nav__item:hover > .pdh-nav__link { background: var(--pdh-tint-teal-12); color: var(--pdh-teal-ink); } 1140.pdh-caret { width: 10px; height: 6px; transition: transform 0.18s ease; } 1141.pdh-nav__item:hover .pdh-caret, .pdh-nav__link[aria-expanded="true"] .pdh-caret { transform: rotate(180deg); } 1142 1143/* ---------- Dropdown panels ---------- */ 1144.pdh-dd { 1145 position: absolute; top: 100%; left: 50%; transform: translateX(-50%); 1146 background: var(--pdh-white); 1147 border: 1px solid var(--pdh-rule); 1148 border-radius: var(--pdh-radius-panel); 1149 box-shadow: var(--pdh-shadow-panel); 1150 padding: 22px; 1151 margin-top: 6px; 1152 max-width: min(96vw, 1000px); 1153 opacity: 0; visibility: hidden; pointer-events: none; 1154 transform-origin: top center; 1155 /* Slight delay on close so a brief mouse-out does not snap it shut. */ 1156 transition: opacity 0.18s ease, visibility 0s linear 0.18s, transform 0.18s ease; 1157 z-index: 600; 1158} 1159/* Invisible hover bridge: extends the panel hit area UP across the gap between
1160 the nav button and the panel so the mouse can travel in without leaving the 1161 hover chain. */ 1162.pdh-dd::before { 1163 content: ""; 1164 position: absolute; 1165 top: -14px; 1166 left: 0; right: 0; 1167 height: 14px; 1168 background: transparent; 1169 pointer-events: inherit; /* clickable only while the panel is open */ 1170} 1171/* Mega panels hang off .pdh-main, so the gap is the row padding (10px) plus the 1172 panel margin (6px). Widen the bridge to match. */ 1173.pdh-dd--mega::before { top: -17px; height: 17px; } 1174 1175/* Open on HOVER + focus-within (desktop) AND on click via JS data-open 1176 (touch + keyboard). */ 1177.pdh-nav__item:hover .pdh-dd, 1178.pdh-nav__item:focus-within .pdh-dd, 1179.pdh-dd:hover, 1180.pdh-dd[data-open="true"] { 1181 opacity: 1; visibility: visible; pointer-events: auto; 1182 transition: opacity 0.15s ease, visibility 0s, transform 0.15s ease; 1183} 1184 1185/* Panel widths. min(96vw, Npx) guarantees no horizontal viewport overflow at 1186 any width down to the 1041px desktop floor: at 1041px, 96vw = 999px, so even 1187 the widest panel (Resources, 940px) still clears once centred on .pdh-main. 1188 Round 4: Programs is back to 3 program-only columns (mega3); the Curriculum 1189 trio lives in Resources, which grows to portal card + 3 columns at the same 1190 proven 940px ceiling the old 4-col Programs used. Locations and Shop are 1191 single-column narrow panels. */ 1192.pdh-dd--mega3 { width: min(96vw, 720px); } 1193.pdh-dd--portal { width: min(96vw, 940px); } 1194.pdh-dd--locations { width: min(96vw, 400px); } 1195.pdh-dd--shop { width: min(96vw, 620px); } 1196/* Right-anchor the rightmost tab (Shop) so its panel opens leftward and never 1197 runs off the right edge. */ 1198.pdh-dd--right { left: auto; right: 0; transform: none; } 1199 1200.pdh-dd__grid { display: grid; gap: 18px 26px; } 1201.pdh-dd--mega3 .pdh-dd__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } 1202.pdh-dd--portal .pdh-dd__grid { grid-template-columns: 210px repeat(3, minmax(0, 1fr)); } 1203.pdh-dd--locations .pdh-dd__grid, 1204.pdh-dd--shop .pdh-dd__grid { grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); } 1205@media (max-width: 700px) { .pdh-dd--shop .pdh-dd__grid { grid-template-columns: minmax(0, 1fr); } } 1206 1207 1208.pdh-dd__col { display: flex; flex-direction: column; gap: 6px; min-width: 0; } 1209/* a11y: group labels are <p>, never headings, so the nav injects no heading 1210 ahead of the page h1. teal-ink #16776F on white = 5.4:1 (AA). */ 1211.pdh-dd__col .pdh-dd__label { 1212 font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; 1213 font-family: var(--pdh-font-head); font-weight: 700; 1214 color: var(--pdh-teal-ink); margin: 0 0 4px; padding-bottom: 6px; 1215 border-bottom: 1px solid var(--pdh-tint-teal-25); 1216} 1217.pdh-dd__link { 1218 display: block; padding: 6px 4px; border-radius: 6px; 1219 color: var(--pdh-navy); text-decoration: none; font-size: 14px; font-weight: 500; 1220 transition: background 0.12s ease, color 0.12s ease, padding-left 0.12s ease; 1221} 1222.pdh-dd__link:hover, .pdh-dd__link:focus-visible { background: var(--pdh-tint-teal-10); color: var(--pdh-teal-ink); padding-left: 10px; } 1223.pdh-dd__link strong { font-weight: 600; } 1224/* #6B7280 on white = 4.9:1 (AA). */ 1225.pdh-dd__link small { display: block; font-size: 12px; color: var(--pdh-sublabel); font-weight: 400; margin-top: 2px; } 1226 1227.pdh-dd__cta { 1228 grid-column: 1 / -1; margin-top: 14px; padding-top: 14px; 1229 border-top: 1px solid var(--pdh-rule); 1230 display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; 1231} 1232.pdh-dd__cta-btn { 1233 background: var(--pdh-teal); color: var(--pdh-navy); padding: 10px 18px; 1234 border-radius: var(--pdh-radius-pill); text-decoration: none; font-weight: 700; 1235 font-family: var(--pdh-font-head); font-size: 14px; 1236 transition: background 0.15s ease; 1237} 1238.pdh-dd__cta-btn:hover { background: var(--pdh-teal-hover); color: var(--pdh-navy); } 1239.pdh-dd__cta-link { color: var(--pdh-teal-ink); font-weight: 600; text-decoration: none; font-size: 14px; } 1240.pdh-dd__cta-link:hover { text-decoration: underline; } 1241 1242/* Parent Portal card: bold, easy-to-find highlight in the Resources panel. */ 1243.pdh-dd__col--portal { justify-content: flex-start; } 1244.pdh-dd__portal-btn { 1245 display: block; background: var(--pdh-yellow); color: var(--pdh-navy); border-radius: var(--pdh-radius-card); 1246 padding: 14px 16px; text-decoration: none; font-weight: 800; line-height: 1.25; 1247 box-shadow: var(--pdh-shadow-pill); 1248 transition: transform .15s ease, box-shadow .15s ease; 1249} 1250.pdh-dd__portal-btn:hover { transform: translateY(-2px); box-shadow: var(--pdh-shadow-pill-hi); background: var(--pdh-yellow); color: var(--pdh-navy); } 1251.pdh-dd__portal-btn small { display: block; font-weight: 500; font-size: 12px; color: var(--pdh-navy); margin-top: 4px; } 1252.pdh-mobile__portal-btn { 1253 display: block; background: var(--pdh-yellow); color: var(--pdh-navy); border-radius: var(--pdh-radius-card); 1254 padding: 14px 16px; text-decoration: none; font-weight: 800; line-height: 1.25; 1255 margin-bottom: 6px; 1256} 1257.pdh-mobile__portal-btn small { display: block; font-weight: 500; font-size: 12px; color: var(--pdh-navy); margin-top: 3px; } 1258 1259/* ---------- Actions cluster ---------- 1260 The header keeps its own .pdh-btn skin rather than composing .pd-btn: 1261 the chrome is self-contained by contract and must paint correctly with 1262 main.css absent, and the owner keeps the current header design. What 1263 changed in the 2026-08-18 retokenization is the INPUT: every header 1264 button surface - .pdh-btn--ghost / --primary here, .pdh-bar__portal, 1265 .pdh-dd__cta-btn, .pdh-dd__portal-btn, .pdh-mobile__tab-cta-btn and 1266 .pdh-mobile__cta a - now draws its fill, ink, hover and radius from the
1267 same six bridge tokens (--pdh-navy / -yellow / -teal / -yellow-hover / 1268 -teal-hover / -radius-pill) instead of six independent copies of the 1269 same hex. A brand or shape change reaches all of them at once. Keep it 1270 that way: new header buttons read the bridge, never a fresh literal. */ 1271.pdh-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } 1272.pdh-btn { 1273 display: inline-flex; align-items: center; gap: 6px; 1274 padding: 10px 16px; border-radius: var(--pdh-radius-pill); 1275 font-family: var(--pdh-font-head); 1276 font-weight: 700; font-size: 14px; text-decoration: none; white-space: nowrap; 1277 transition: background 0.15s ease, transform 0.15s ease, color 0.15s ease; 1278} 1279.pdh-btn svg { width: 15px; height: 15px; display: block; flex-shrink: 0; } 1280.pdh-btn--ghost { background: transparent; color: var(--pdh-navy); border: 1px solid var(--pdh-navy); } 1281.pdh-btn--ghost:hover { background: var(--pdh-navy); color: var(--pdh-white); } 1282.pdh-btn--primary { background: var(--pdh-yellow); color: var(--pdh-navy); } 1283.pdh-btn--primary:hover { background: var(--pdh-yellow-hover); color: var(--pdh-navy); transform: translateY(-1px); } 1284 1285/* ---------- Mobile toggle ---------- */ 1286.pdh-toggle { 1287 display: none; background: transparent; border: none; cursor: pointer; 1288 padding: 8px; border-radius: var(--pdh-radius-sm); align-items: center; gap: 8px; 1289 font-weight: 700; color: var(--pdh-navy); font-family: inherit; font-size: 14px; 1290} 1291.pdh-toggle span.bars { display: inline-flex; flex-direction: column; gap: 4px; width: 22px; } 1292.pdh-toggle span.bars::before, .pdh-toggle span.bars::after, .pdh-toggle span.bars i { 1293 content: ""; display: block; height: 2px; width: 22px; background: var(--pdh-navy); border-radius: 2px; 1294} 1295 1296/* ============================================================ 1297 RESPONSIVE. Breakpoint history: v1 was 980/981, v2.1 raised it to 1298 1150/1151 for six top-level items, and the round-3 trim to FOUR 1299 tabs lowers it to 1040/1041. Fit math for the 1041px floor is in 1300 the DESKTOP FIT TIERS comment below. Every max-width:1040 / 1301 min-width:1041 pair in this file moves together. 1302 ============================================================ */ 1303@media (max-width: 1040px) { 1304 .pdh-bar__inner { font-size: 12px; padding: 7px 16px; } 1305 .pdh-main { padding: 12px 16px; gap: 12px; } 1306 .pdh-nav, .pdh-actions { display: none; } 1307 .pdh-toggle { display: inline-flex; margin-left: auto; } 1308 /* Desktop-only top bar snippets. Kept: "Family-owned - Est. 1997". */ 1309 .pdh-bar__snip--desk, .pdh-bar__divider, .pdh-bar__dot { display: none; } 1310 1311 .pdh-mobile { display: none; } 1312 .pdh.is-open .pdh-mobile { 1313 display: block !important; 1314 /* Explicit longhand instead of `inset:` shorthand for older-browser safety. */ 1315 position: fixed !important; 1316 top: 0 !important; 1317 left: 0 !important; 1318 right: 0 !important; 1319 bottom: 0 !important; 1320 /* Two height declarations: older browsers honour 100vh, newer ones use 1321 100dvh which respects mobile address-bar collapse. */ 1322 width: 100% !important; 1323 height: 100vh !important; 1324 height: 100dvh !important; 1325 max-width: 100vw !important; 1326 margin: 0 !important; 1327 background: var(--pdh-white) !important; 1328 /* Top padding leaves a gutter for the header (which stays on top via 1329 z-index) so drawer content does not slide UNDER the visible header. */ 1330 padding: 140px 20px 0 !important; 1331 overflow-y: auto !important; 1332 overflow-x: hidden !important; 1333 -webkit-overflow-scrolling: touch; 1334 box-shadow: var(--pdh-shadow-drawer); 1335 z-index: 499; /* just under .pdh (z:500) so the hamburger stays clickable */ 1336 } 1337 /* Once scrolled, the utility bar collapses and the header shrinks: shrink the 1338 drawer's top gutter to match so there is no blank band at the top. */ 1339 .pdh.is-open.is-scrolled .pdh-mobile { padding-top: 68px !important; } 1340 /* Keep the utility bar + main row visually ON TOP of the open drawer. The 1341 drawer is a child of the header (its own stacking context), so the drawer's 1342 z-index:499 would otherwise paint over its siblings. */ 1343 .pdh.is-open .pdh-bar, 1344 .pdh.is-open .pdh-main { position: relative; z-index: 600; } 1345 /* CRITICAL: when the menu is open, force the header to position:fixed and 1346 strip backdrop-filter. Two reasons: 1347 1. body { overflow: hidden } (below) breaks position:sticky, so the header 1348 would fall back to its document position and vanish if the user had 1349 scrolled before opening the menu. 1350 2. backdrop-filter on .pdh creates a containing block for position:fixed 1351 descendants, so the drawer would be fixed relative to .pdh instead of 1352 the viewport and would scroll away with the broken sticky header. */ 1353 .pdh.is-open { 1354 position: fixed !important; 1355 top: 0 !important; 1356 left: 0 !important; 1357 right: 0 !important; 1358 backdrop-filter: none !important; 1359 -webkit-backdrop-filter: none !important; 1360 } 1361 /* Allow vertical scrolling INSIDE the drawer even though touch-action is 1362 none on body. */ 1363 .pdh.is-open .pdh-mobile { touch-action: pan-y !important; } 1364 /* Lock background page scroll while the drawer is open. */ 1365 body.pdh-menu-open { overflow: hidden !important; touch-action: none; } 1366 html.pdh-menu-open { overflow: hidden !important; } 1367 1368 .pdh-mobile__group { padding: 10px 0; border-bottom: 1px solid var(--pdh-rule-soft); } 1369 .pdh-mobile__group:last-child { border: none; } 1370 /* a11y: <p>, not a heading. teal-ink #16776F on white = 5.4:1 (AA). */ 1371 .pdh-mobile__group .pdh-mobile__label { 1372 margin: 0 0 6px; font-size: 11px; text-transform: uppercase; letter-spacing: 0.14em; 1373 color: var(--pdh-teal-ink); font-family: var(--pdh-font-head); font-weight: 700; 1374 } 1375 .pdh-mobile__group a { 1376 display: block; padding: 8px 0; color: var(--pdh-navy); text-decoration: none; 1377 font-weight: 600; font-size: 14px; 1378 } 1379 .pdh-mobile__group a small { 1380 display: block; font-size: 12px; color: var(--pdh-sublabel); font-weight: 400; margin-top: 2px; 1381 } 1382 .pdh-mobile__group a:hover { color: var(--pdh-teal-ink); } 1383 1384 /* Top-level mobile tabs mirror the desktop nav 1:1. Each is a native 1385 <details> accordion; sub-groups inside reuse .pdh-mobile__group. */ 1386 .pdh-mobile__tab { border-bottom: 1px solid var(--pdh-rule); } 1387 .pdh-mobile__tab[open] { padding-bottom: 6px; } 1388 .pdh-mobile__tab-head { 1389 list-style: none; 1390 cursor: pointer; 1391 padding: 16px 4px; 1392 display: flex; align-items: center; justify-content: space-between; 1393 font-family: var(--pdh-font-head); 1394 font-weight: 800; font-size: 16px; color: var(--pdh-navy); 1395 } 1396 .pdh-mobile__tab-head::-webkit-details-marker { display: none; } 1397 .pdh-mobile__tab-head::after { 1398 content: ""; width: 10px; height: 10px; 1399 border-right: 2px solid var(--pdh-navy); border-bottom: 2px solid var(--pdh-navy); 1400 transform: rotate(45deg); transform-origin: 70% 70%; 1401 transition: transform 0.18s ease; 1402 } 1403 .pdh-mobile__tab[open] > .pdh-mobile__tab-head::after { transform: rotate(-135deg); } 1404 .pdh-mobile__tab-head:hover { color: var(--pdh-teal-ink); } 1405 .pdh-mobile__tab-head:hover::after { border-color: var(--pdh-teal-ink); } 1406 .pdh-mobile__tab-body { padding: 0 4px 10px; } 1407 .pdh-mobile__tab-body .pdh-mobile__group:last-child { border-bottom: 1px solid var(--pdh-rule-soft); } 1408 .pdh-mobile__tab-body .pdh-mobile__group:last-of-type { border-bottom: none; } 1409 1410 /* Top-level standalone link (Home): same weight as a tab head, no accordion. */ 1411 .pdh-mobile__top-link { 1412 display: block; 1413 padding: 16px 4px; 1414 border-bottom: 1px solid var(--pdh-rule); 1415 font-family: var(--pdh-font-head); 1416 font-weight: 800; font-size: 16px; color: var(--pdh-navy); 1417 text-decoration: none; 1418 } 1419 .pdh-mobile__top-link:hover { color: var(--pdh-teal-ink); } 1420 1421 /* CTA row inside a mobile tab (mirrors the desktop .pdh-dd__cta). */ 1422 .pdh-mobile__tab-cta { 1423 display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; 1424 margin-top: 12px; padding-top: 14px; 1425 border-top: 1px solid var(--pdh-rule); 1426 } 1427 .pdh-mobile__tab-cta-btn { 1428 background: var(--pdh-teal); color: var(--pdh-navy) !important; 1429 padding: 10px 16px; border-radius: var(--pdh-radius-pill); 1430 text-decoration: none; font-weight: 700; font-size: 14px; 1431 font-family: var(--pdh-font-head); 1432 } 1433 .pdh-mobile__tab-cta-btn:hover { background: var(--pdh-teal-hover); } 1434 .pdh-mobile__tab-cta-link { color: var(--pdh-teal-ink) !important; font-weight: 600; text-decoration: none; font-size: 14px; } 1435 .pdh-mobile__tab-cta-link:hover { text-decoration: underline; } 1436 1437 /* Bottom CTA bar: STICKY to the bottom of the scrolling drawer so Call and 1438 Request A Quote are always one tap away however far the user scrolls. 1439 (v1 declared position:static here, which made the "sticky" comment a lie.) */ 1440 .pdh-mobile__cta { 1441 position: sticky; 1442 bottom: 0; 1443 display: flex; 1444 gap: 10px; 1445 padding: 14px 16px calc(14px + env(safe-area-inset-bottom, 0)); 1446 margin: 16px -20px 0; 1447 flex-wrap: nowrap; 1448 background: var(--pdh-surface-97); 1449 backdrop-filter: blur(8px); 1450 -webkit-backdrop-filter: blur(8px); 1451 border-top: 1px solid var(--pdh-hairline-cta); 1452 box-shadow: var(--pdh-shadow-cta); 1453 z-index: 2; 1454 } 1455 .pdh-mobile__cta a { 1456 flex: 1; 1457 min-width: 0; 1458 display: inline-flex; align-items: center; justify-content: center; gap: 6px; 1459 text-align: center; 1460 padding: 12px 12px; 1461 border-radius: var(--pdh-radius-card); 1462 font-weight: 700; 1463 font-size: 14px; 1464 text-decoration: none; 1465 transition: transform 0.15s ease, box-shadow 0.15s ease; 1466 } 1467 .pdh-mobile__cta a.pdh-btn--ghost { 1468 background: var(--pdh-white); 1469 color: var(--pdh-navy); 1470 border: 1.5px solid var(--pdh-navy); /* navy on white = 14.4:1 */ 1471 } 1472 .pdh-mobile__cta a.pdh-btn--primary { 1473 background: var(--pdh-yellow); 1474 color: var(--pdh-navy); /* navy on yellow = 10.9:1 */ 1475 box-shadow: var(--pdh-shadow-cta-btn); 1476 } 1477 .pdh-mobile__cta a:active { transform: translateY(1px); } 1478} 1479@media (min-width: 1041px) { 1480 .pdh-mobile { display: none; } 1481} 1482 1483/* ------------------------------------------------------------------ 1484 DESKTOP FIT TIERS. .pdh-nav is flex:1 with flex-basis 0 and every 1485 top-level label is nowrap, so anything over budget does not wrap: it 1486 overflows and gives the whole page a horizontal scrollbar. The tiers 1487 below shave the row down so that never happens. 1488 1489 ROUND-3 BUDGET (four tabs: Programs, Locations, Resources, Shop). 1490 Derived from the v2.1 in-browser measurement recorded here before the 1491 trim: the SIX-item nav list measured 624px and the actions cluster 1492 396px. Each button is its label plus 24px side padding, plus a 6px 1493 gap and 10px caret when it has a dropdown, so the two tabs round 3 1494 removed cost: 1495 Home 24 + 0 + ~40 = 64 (plain link, no caret)
1496 Curriculum 24 + 16 + ~85 = 125 1497 nav list 624 - 64 - 125 - 2 x 2px gaps = ~431px for four tabs. 1498 .pdh-main padding 24 + 24 = 48 1499 logo cap 175 + two 20px flex gaps = 215 1500 nav list = 431 1501 actions (search 42 + Call + Quote + 2 gaps) = 396 1502 FULL-SIZE ROW TOTAL = 1090px 1503 That ~76px off the nav list is what lets the mobile switch fall from 1504 1150px to 1040px. 1505 1506 1100px to 1199px: mild. Tighten gaps and tab padding only (-38px: 1507 -12 main gaps, -6 list gaps, -16 tab padding, -4 actions gaps), so 1508 the row lands at ~1052px and clears 1100px with ~48px to spare. The 1509 phone number stays visible, which is the point: 1280px is the most 1510 common desktop width and the theme container's own max-width, and 1511 full size fits there with ~190px of slack. 1512 1513 1041px to 1099px: condensed. Also drop a type step, tighten the row 1514 padding to 16px, and collapse the Call button to its icon (-132px on 1515 its own), bringing the row to ~876px so it clears the 1041px desktop 1516 floor with ~165px of slack for a wider logo or wider font metrics. 1517 The accessible name survives via aria-label on the anchor, so the 1518 button still announces as "Call 480-595-6700" with the visible label 1519 hidden. 1520 1521 Why 1040 and not lower: the condensed row would technically survive 1522 to ~900px, but the drawer is the better experience once the row has 1523 no breathing room, and 1040 keeps the switch clear of common tablet 1524 landscape widths. Raise the floor, never the ceiling, if the actions 1525 cluster ever grows. 1526 ------------------------------------------------------------------ */ 1527@media (min-width: 1100px) and (max-width: 1199px) { 1528 .pdh-main { gap: 14px; } 1529 .pdh-nav__list { gap: 0; } 1530 .pdh-nav__link { padding: 10px 10px; } 1531 .pdh-actions { gap: 6px; } 1532} 1533@media (min-width: 1041px) and (max-width: 1099px) { 1534 .pdh-main { gap: 12px; padding-left: 16px; padding-right: 16px; } 1535 .pdh-nav__list { gap: 0; } 1536 .pdh-nav__link { padding: 10px 9px; font-size: 14px; } 1537 .pdh-actions { gap: 6px; } 1538 .pdh-actions .pdh-btn--ghost { padding: 10px 12px; } 1539 .pdh-actions .pdh-btn--ghost .pdh-btn__label { display: none; } 1540} 1541 1542/* Hide the social row on the narrowest phones: the top bar has to carry the 1543 phone number and the portal pill first. */ 1544@media (max-width: 639px) { 1545 .pdh-social { display: none; } 1546} 1547 1548/* ============================================================ 1549 HubSpot logo-widget guard. Inert while the plain <img> below is 1550 in use (no #hs-link-site_logo is emitted), kept in case a portal 1551 setting ever forces the widget wrapper back. 1552 ============================================================ */ 1553.pdh-main #hs-link-site_logo, 1554.pdh-main span#hs_cos_wrapper_site_logo { 1555 display: inline-flex !important; 1556 align-items: center !important; 1557 max-height: 52px !important; 1558 max-width: 240px !important; 1559} 1560.pdh-main #hs-link-site_logo img, 1561.pdh-main .hs-image-widget, 1562.pdh-main span#hs_cos_wrapper_site_logo img { 1563 height: auto !important; 1564 max-height: 52px !important; 1565 width: auto !important; 1566 max-width: 100% !important; 1567 object-fit: contain !important; 1568} 1569@media (max-width: 1040px) { 1570 .pdh-main { padding: 8px 16px !important; gap: 12px !important; } 1571 .pdh-main #hs-link-site_logo, 1572 .pdh-main span#hs_cos_wrapper_site_logo { max-height: 50px !important; max-width: 150px !important; } 1573 .pdh-main #hs-link-site_logo img, 1574 .pdh-main .hs-image-widget, 1575 .pdh-main span#hs_cos_wrapper_site_logo img { max-height: 50px !important; } 1576 .pdh-bar__inner { padding: 6px 16px !important; gap: 8px !important; font-size: 12px !important; } 1577 .pdh-toggle { font-size: 14px !important; } 1578} 1579@media (max-width: 640px) { 1580 .pdh-main #hs-link-site_logo, 1581 .pdh-main span#hs_cos_wrapper_site_logo { max-height: 45px !important; max-width: 135px !important; } 1582 .pdh-main #hs-link-site_logo img, 1583 .pdh-main .hs-image-widget, 1584 .pdh-main span#hs_cos_wrapper_site_logo img { max-height: 45px !important; } 1585 .pdh-bar__portal { padding: 5px 11px; font-size: 12px; } 1586} 1587 1588/* ============================================================ 1589 SITE SEARCH: desktop icon + floating panel, mobile inline. 1590 Live results from HubSpot's public Content Search API 1591 (contentsearch/v2/search), which indexes every published site 1592 page / landing page / blog post in the portal. Carried over 1593 from v1 wholesale; only the breakpoints changed. 1594 ============================================================ */ 1595.pdh-search { display: flex; align-items: center; position: relative; } 1596.pdh-search__btn { 1597 display: inline-flex; align-items: center; justify-content: center; 1598 width: 42px; height: 42px; border-radius: var(--pdh-radius-pill); 1599 color: var(--pdh-navy); background: transparent; cursor: pointer; 1600 border: 1px solid var(--pdh-hairline-btn); 1601 transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease; 1602} 1603.pdh-search__btn:hover, .pdh-search__btn[aria-expanded="true"] { 1604 background: var(--pdh-tint-teal-12); color: var(--pdh-teal-ink); border-color: var(--pdh-tint-teal-40); 1605}
1606.pdh-search__btn svg { width: 20px; height: 20px; display: block; } 1607 1608.pdh-search__panel { 1609 position: absolute; left: 0; right: 0; top: 100%; 1610 background: var(--pdh-white); border-bottom: 1px solid var(--pdh-rule); 1611 box-shadow: var(--pdh-shadow-panel); 1612 z-index: 620; padding: 18px 0; 1613} 1614.pdh-search__panel[hidden] { display: none; } 1615.pdh-search__inner { max-width: 760px; margin: 0 auto; padding: 0 var(--pdh-gutter); } 1616 1617.pdh-search__form { 1618 display: flex; align-items: center; gap: 10px; 1619 border: 2px solid var(--pdh-rule); border-radius: var(--pdh-radius-md); 1620 padding: 10px 14px; background: var(--pdh-surface); 1621 transition: border-color 0.15s ease, background 0.15s ease; 1622} 1623.pdh-search__form:focus-within { border-color: var(--pdh-teal); background: var(--pdh-white); } 1624.pdh-search__form > svg { width: 20px; height: 20px; flex-shrink: 0; color: var(--pdh-teal-ink); } 1625.pdh-search__input { 1626 flex: 1; min-width: 0; border: none; background: transparent; outline: none; 1627 font-family: var(--pdh-font-ui); font-size: 16px; color: var(--pdh-navy); 1628} 1629.pdh-search__status { font-size: 13px; color: var(--pdh-sublabel); padding: 10px 4px 0; min-height: 1px; } 1630.pdh-search__results { list-style: none; margin: 8px 0 0; padding: 0; max-height: 60vh; overflow-y: auto; } 1631.pdh-search__result a { 1632 display: block; padding: 10px 12px; border-radius: var(--pdh-radius-sm); 1633 text-decoration: none; color: var(--pdh-navy); 1634 transition: background 0.12s ease, color 0.12s ease; 1635} 1636.pdh-search__result a:hover, .pdh-search__result a:focus { background: var(--pdh-tint-teal-10); color: var(--pdh-teal-ink); } 1637.pdh-search__type { 1638 display: inline-block; font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; 1639 color: var(--pdh-teal-ink); font-weight: 700; margin-bottom: 2px; 1640} 1641.pdh-search__result strong { display: block; font-weight: 600; font-size: 15px; } 1642.pdh-search__hl { background: var(--pdh-tint-teal-22); color: inherit; border-radius: 3px; padding: 0 1px; } 1643.pdh-search__result small { 1644 display: block; font-size: 12px; color: var(--pdh-sublabel); margin-top: 2px; 1645 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 1646} 1647 1648.pdh-search--mobile { display: none; } 1649@media (max-width: 1040px) { 1650 .pdh-search--mobile { display: block; margin-bottom: 14px; } 1651 .pdh-search--mobile .pdh-search__results { max-height: none; } 1652} 1653@media (min-width: 1041px) { 1654 .pdh-search--mobile { display: none; } 1655} 1656 1657/* Desktop: float the search as a compact card anchored to the magnifier, 1658 revealed on hover/focus (and on click for keyboard), instead of a full-width 1659 bar dropping below the navbar. */ 1660@media (min-width: 1041px) { 1661 /* The [hidden] attribute (JS click state) would force display:none; neutralize 1662 it on desktop and drive visibility with opacity/visibility so hover and 1663 focus can reveal the panel without fighting the attribute. */ 1664 .pdh-search__panel { display: block !important; } 1665 .pdh-search__panel { 1666 position: absolute; 1667 top: calc(100% + 12px); 1668 right: 0; left: auto; 1669 width: min(380px, 92vw); 1670 border: 1px solid var(--pdh-rule); 1671 border-radius: var(--pdh-radius-panel); 1672 box-shadow: var(--pdh-shadow-search); 1673 padding: 14px; 1674 opacity: 0; visibility: hidden; pointer-events: none; 1675 transform: translateY(-6px); 1676 transition: opacity 0.16s ease, transform 0.16s ease, visibility 0s linear 0.16s; 1677 }
1678 /* Invisible hover bridge across the 12px gap so the mouse can travel from the 1679 icon down into the panel without breaking the hover chain. */ 1680 .pdh-search__panel::before { 1681 content: ""; position: absolute; top: -14px; left: 0; right: 0; height: 14px; 1682 } 1683 .pdh-search:hover .pdh-search__panel, 1684 .pdh-search:focus-within .pdh-search__panel, 1685 .pdh-search.is-open .pdh-search__panel { 1686 opacity: 1; visibility: visible; pointer-events: auto; transform: none; 1687 transition: opacity 0.16s ease, transform 0.16s ease, visibility 0s; 1688 } 1689 .pdh-search__panel .pdh-search__inner { max-width: none; margin: 0; padding: 0; } 1690} 1691 1692/* Reduced motion: keep every state change instant. */ 1693@media (prefers-reduced-motion: reduce) { 1694 .pdh, .pdh-bar, .pdh-main, .pdh-logo, .pdh-logo img, 1695 .pdh-dd, .pdh-dd__link, .pdh-btn, .pdh-bar__portal, 1696 .pdh-caret, .pdh-search__panel, .pdh-mobile__tab-head::after { 1697 transition: none !important; 1698 } 1699 .pdh-btn--primary:hover, .pdh-bar__portal:hover, .pdh-dd__portal-btn:hover { transform: none !important; } 1700} 1701</style> 1702 1703 1704<header class="pdh" data-pdh> 1705 1706 1707 1708 <div class="pdh-bar"> 1709 <div class="pdh-bar__inner"> 1710 <div class="pdh-bar__left"> 1711 <ul class="pdh-social" aria-label="Partners Dogs on social media"> 1712 <li> 1713 <a class="pdh-social__link" href="https://www.facebook.com/PartnersDogTrainingSchool/" target="_blank" rel="noopener noreferrer" aria-label="Partners Dogs on Facebook" data-track="social:topbar:facebook"> 1714 <svg viewbox="0 0 24 24" aria-hidden="true" fill="currentColor"><path d="M22 12.06C22 6.5 17.52 2 12 2S2 6.5 2 12.06c0 5 3.66 9.15 8.44 9.94v-7.03H7.9v-2.91h2.54V9.85c0-2.52 1.5-3.91 3.77-3.91 1.09 0 2.24.2 2.24.2v2.46h-1.26c-1.24 0-1.63.78-1.63 1.57v1.89h2.78l-.45 2.91h-2.33V22c4.78-.79 8.44-4.93 8.44-9.94z" /></svg> 1715 </a> 1716 </li> 1717 <li> 1718 <a class="pdh-social__link" href="https://www.instagram.com/partnersdogs/" target="_blank" rel="noopener noreferrer" aria-label="Partners Dogs on Instagram" data-track="social:topbar:instagram"> 1719 <svg viewbox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="3" y="3" width="18" height="18" rx="5.2" /><circle cx="12" cy="12" r="4" /><circle cx="17.2" cy="6.8" r="1.15" fill="currentColor" stroke="none" /></svg> 1720 </a> 1721 </li> 1722 <li> 1723 <a class="pdh-social__link" href="https://www.youtube.com/@partnersdogs" target="_blank" rel="noopener noreferrer" aria-label="Partners Dogs on YouTube" data-track="social:topbar:youtube"> 1724 <svg viewbox="0 0 24 24" aria-hidden="true" fill="currentColor"><path d="M23 12s0-3.2-.41-4.74a2.5 2.5 0 0 0-1.76-1.77C19.29 5.08 12 5.08 12 5.08s-7.29 0-8.83.41a2.5 2.5 0 0 0-1.76 1.77C1 8.8 1 12 1 12s0 3.2.41 4.74a2.5 2.5 0 0 0 1.76 1.77c1.54.41 8.83.41 8.83.41s7.29 0 8.83-.41a2.5 2.5 0 0 0 1.76-1.77C23 15.2 23 12 23 12zM9.75 15.02V8.98L15.5 12l-5.75 3.02z" /></svg> 1725 </a> 1726 </li> 1727 <li> 1728 <a class="pdh-social__link" href="https://www.tiktok.com/@partnersdogs" target="_blank" rel="noopener noreferrer" aria-label="Partners Dogs on TikTok" data-track="social:topbar:tiktok"> 1729 <svg viewbox="0 0 24 24" aria-hidden="true" fill="currentColor"><path d="M16.6 5.82A4.28 4.28 0 0 1 15.54 3h-3.1v12.4a2.59 2.59 0 0 1-2.6 2.5 2.6 2.6 0 1 1 .8-5.07V9.66a5.7 5.7 0 0 0-.8-.06 5.7 5.7 0 1 0 5.7 5.7V9.01a7.35 7.35 0 0 0 4.3 1.38V7.3a4.3 4.3 0 0 1-3.24-1.48z" /></svg> 1730 </a> 1731 </li> 1732 </ul> 1733 1734 <span class="pdh-bar__divider" aria-hidden="true"></span> 1735 1736 <span class="pdh-bar__snip">Family-owned · Est. 1997</span> 1737 <span class="pdh-bar__dot pdh-bar__snip--desk" aria-hidden="true"></span> 1738 <span class="pdh-bar__snip pdh-bar__snip--desk">70,000+ dogs trained</span> 1739 <span class="pdh-bar__dot pdh-bar__snip--desk" aria-hidden="true"></span> 1740 <span class="pdh-bar__snip pdh-bar__snip--desk">4.8 stars · 2,000+ parent reviews</span> 1741 </div> 1742 1743 <div class="pdh-bar__right"> 1744 <a class="pdh-bar__phone" href="tel:+14805956700" data-track="cta:topbar:phone"> 1745 <svg viewbox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9
17451.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z" /></svg> 1746 <span>480-595-6700</span> 1747 </a> 1748 <a class="pdh-bar__portal" href="https://partnersdogs.portal.gingrapp.com/public/login" target="_blank" rel="noopener noreferrer" data-track="cta:topbar:parent-portal"> 1749 <svg viewbox="0 0 24 24" aria-hidden="true" fill="currentColor"><ellipse cx="7" cy="9" rx="2" ry="2.6" /><ellipse cx="11.1" cy="6.6" rx="2" ry="2.8" /><ellipse cx="15.3" cy="7.2" rx="2" ry="2.7" /><ellipse cx="18.7" cy="10.4" rx="1.9" ry="2.4" /><path d="M12.4 12.1c2.8 0 5.6 2.4 5.6 5 0 2-1.6 3.2-3.5 3.2-1.1 0-1.6-.4-2.7-.4s-1.6.4-2.7.4c-1.9 0-3.5-1.2-3.5-3.2 0-2.6 2.8-5 5.6-5z" /></svg> 1750 <span>Parent Portal â</span> 1751 </a> 1752 </div> 1753 </div> 1754 </div> 1755 1756 1757 1758 <div class="pdh-main"> 1759 <a href="/" class="pdh-logo" aria-label="Partners Dogs Home"> 1760 1761 <img src="https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=100&height=100&name=PD-logo-2024-3.png" alt="Partners Dogs" width="100" height="100" loading="eager" fetchpriority="high" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=50&height=50&name=PD-logo-2024-3.png 50w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=100&height=100&name=PD-logo-2024-3.png 100w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=150&height=150&name=PD-logo-2024-3.png 150w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=200&height=200&name=PD-logo-2024-3.png 200w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=250&height=250&name=PD-logo-2024-3.png 250w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=300&height=300&name=PD-logo-2024-3.png 300w" sizes="(max-width: 100px) 100vw, 100px"> 1762 </a> 1763 1764 <nav class="pdh-nav" aria-label="Primary"> 1765 <ul class="pdh-nav__list"> 1766 1767 1768 1769 1770 <li class="pdh-nav__item pdh-nav__item--mega"> 1771 <button class="pdh-nav__link" type="button" aria-haspopup="true" aria-expanded="false" aria-controls="pdh-dd-programs"> 1772 Programs 1773 <svg class="pdh-caret" viewbox="0 0 12 8" aria-hidden="true"><path d="M1 1l5 5 5-5" stroke="currentColor" fill="none" stroke-width="1.6" stroke-linecap="round" /></svg> 1774 </button> 1775 <div class="pdh-dd pdh-dd--mega pdh-dd--mega3" id="pdh-dd-programs"> 1776 <div class="pdh-dd__grid"> 1777 <div class="pdh-dd__col"> 1778 <p class="pdh-dd__label">Essential</p> 1779 <a class="pdh-dd__link" href="/pd360-assessment"><strong>PD360 Assessment</strong><small>Your dog's personalized starting point</small></a> 1780 <a class="pdh-dd__link" href="/en/dog-boarding"><strong>Dog Boarding</strong><small>Overnight stays with trained care</small></a> 1781 <a class="pdh-dd__link" href="/snake-avoidance"><strong>Snake Avoidance</strong><small>Rattlesnake safety training</small></a> 1782 <a class="pdh-dd__link" href="/grooming"><strong>Grooming</strong><small>Low-stress bath, brush-out & nails</small></a> 1783 </div> 1784 <div class="pdh-dd__col"> 1785 <p class="pdh-dd__label">Foundational</p> 1786 <a class="pdh-dd__link" href="/training-camp"><strong>Foundation Camp</strong><small>14-night basics + manners</small></a> 1787 <a class="pdh-dd__link" href="/daycare"><strong>DaySchool</strong><small>Daily training + structured enrichment</small></a> 1788 <a class="pdh-dd__link" href="/private-lessons"><strong>Private Lessons</strong><small>1-on-1 coaching for you + your dog</small></a> 1789 <a class="pdh-dd__link" href="/group-classes"><strong>Group Classes</strong><small>Weekly skills in a social setting</small></a> 1790 </div> 1791 <div class="pdh-dd__col"> 1792 <p class="pdh-dd__label">Behavioral</p> 1793 <a class="pdh-dd__link" href="/daycamp"><strong>DayCamp</strong><small>Behavior-focused daily program</small></a> 1794 <a class="pdh-dd__link" href="/behavior-camp"><strong>Behavior Camp</strong><small>21-night reactivity + anxiety</small></a> 1795 <a class="pdh-dd__link" href="/transform-camp"><strong>Transform Camp</strong><small>28-night aggression + advanced</small></a> 1796 </div> 1797 <div class="pdh-dd__cta"> 1798 <a class="pdh-dd__cta-btn" href="/quiz" data-track="cta:header:programs-quiz">Not sure? Take the 2-minute quiz</a> 1799 <a class="pdh-dd__cta-link" href="/program-comparison" data-track="cta:header:programs-compare">Compare all programs</a> 1800 </div> 1801 </div> 1802 </div> 1803 </li> 1804 1805 1806 1807 1808 1809 <li class="pdh-nav__item pdh-nav__item--mega"> 1810 <button class="pdh-nav__link" type="button" aria-haspopup="true" aria-expanded="false" aria-controls="pdh-dd-locations"> 1811 Locations 1812 <svg class="pdh-caret" viewbox="0 0 12 8" aria-hidden="true"><path d="M1 1l5 5 5-5" stroke="currentColor" fill="none" stroke-width="1.6" stroke-linecap="round" /></svg> 1813 </button> 1814 <div class="pdh-dd pdh-dd--mega pdh-dd--locations" id="pdh-dd-locations"> 1815 <div class="pdh-dd__grid"> 1816 <div class="pdh-dd__col"> 1817 <p class="pdh-dd__label">Our Facilities</p> 1818 <a class="pdh-dd__link" href="/scottsdale"><strong>Scottsdale</strong><small>8642 E Shea Blvd, 85260</small></a> 1819 <a class="pdh-dd__link" href="/cave-creek"><strong>Cave Creek</strong><small>4640 E Forest Pleasant Pl, 85331</small></a> 1820 <a class="pdh-dd__link" href="/service-areas"><strong>Service Areas</strong><small>Serving the Phoenix Valley</small></a> 1821 </div> 1822 </div> 1823 </div> 1824 </li> 1825 1826 1827 1828 <li class="pdh-nav__item pdh-nav__item--mega"> 1829 <button class="pdh-nav__link" type="button" aria-haspopup="true" aria-expanded="false" aria-controls="pdh-dd-resources"> 1830 Resources 1831 <svg class="pdh-caret" viewbox="0 0 12 8" aria-hidden="true"><path d="M1 1l5 5 5-5" stroke="currentColor" fill="none" stroke-width="1.6" stroke-linecap="round" /></svg> 1832 </button> 1833 <div class="pdh-dd pdh-dd--mega pdh-dd--portal" id="pdh-dd-resources"> 1834 <div class="pdh-dd__grid"> 1835 <div class="pdh-dd__col pdh-dd__col--portal"> 1836 <p class="pdh-dd__label">Pet Parent Portal</p> 1837 <a class="pdh-dd__portal-btn" href="https://partnersdogs.portal.gingrapp.com/public/login" target="_blank" rel="noopener noreferrer" data-track="cta:header:parent-portal"><strong>Open Parent Portal â</strong><small>Bookings, vaccinations & invoices</small></a> 1838 </div> 1839 <div class="pdh-dd__col"> 1840 <p class="pdh-dd__label">Curriculum</p> 1841 <a class="pdh-dd__link" href="/group-classes"><strong>Grade-Level Curriculum</strong><small>8 grades from Pre-School Puppy to Dogtorate</small></a> 1842 <a class="pdh-dd__link" href="/training-journey"><strong>Training Journey</strong><small>What progress looks like, week by week</small></a> 1843 <a class="pdh-dd__link" href="/our-methodology"><strong>Our Methodology</strong><small>How we train and why it lasts</small></a> 1844 </div> 1845 <div class="pdh-dd__col"> 1846 <p class="pdh-dd__label">About Partners</p> 1847 <a class="pdh-dd__link" href="/en/about"><strong>About Us</strong><small>Family-owned · since 1997</small></a> 1848 <a class="pdh-dd__link" href="/team"><strong>Meet the Team</strong><small>The trainers behind the results</small></a> 1849 <a class="pdh-dd__link" href="/reviews"><strong>Parent Reviews</strong><small>What dog families are saying</small></a> 1850 <a class="pdh-dd__link" href="/contact-us"><strong>Contact Us</strong><small>Hours, addresses, contact form</small></a> 1851 </div> 1852 <div class="pdh-dd__col"> 1853 <p class="pdh-dd__label">Helpful Pages</p> 1854 <a class="pdh-dd__link" href="/en/faq"><strong>FAQ</strong><small>Answers to common questions</small></a> 1855 <a class="pdh-dd__link" href="https://blog.partnersdogs.com/" rel="noopener"><strong>Blog & Training Tips</strong><small>Guides, advice & dog news</small></a> 1856 </div> 1857 </div> 1858 </div> 1859 </li> 1860 1861 1862 1863 <li class="pdh-nav__item"> 1864 <button class="pdh-nav__link" type="button" aria-haspopup="true" aria-expanded="false" aria-controls="pdh-dd-shop"> 1865 Shop 1866 <svg class="pdh-caret" viewbox="0 0 12 8" aria-hidden="true"><path d="M1 1l5 5 5-5" stroke="currentColor" fill="none" stroke-width="1.6" stroke-linecap="round" /></svg> 1867 </button> 1868 1869 <div class="pdh-dd pdh-dd--shop pdh-dd--right" id="pdh-dd-shop"> 1870 <div class="pdh-dd__grid"> 1871 <div class="pdh-dd__col"> 1872 <p class="pdh-dd__label">Shop by Category</p> 1873 <a class="pdh-dd__link" href="/shop"><strong>Shop All Products</strong><small>The full Partners Dogs store</small></a> 1874 <a class="pdh-dd__link" href="/shop?category=Training%20Tools"><strong>Training Tools</strong><small>
1874Leashes, collars, long lines & more</small></a> 1875 <a class="pdh-dd__link" href="/shop?category=Toys%20%26%20Enrichment"><strong>Toys & Enrichment</strong><small>Chews, puzzles & play</small></a> 1876 <a class="pdh-dd__link" href="/shop?category=Other"><strong>Supplements & Care</strong><small>Vitamins, balms, wipes & grooming</small></a> 1877 <a class="pdh-dd__link" href="/shop?category=Apparel%20%26%20Accessories"><strong>Apparel & Accessories</strong><small>Wearables & everyday carry</small></a> 1878 </div> 1879 <div class="pdh-dd__col"> 1880 <p class="pdh-dd__label">Gifts & Orders</p> 1881 <a class="pdh-dd__link" href="/gift-cards"><strong>Gift Cards</strong><small>Training and care, gifted</small></a> 1882 <a class="pdh-dd__link" href="/cart"><strong>Cart</strong><small>Review your items & check out</small></a> 1883 <a class="pdh-dd__link" href="/shipping"><strong>Shipping & Returns</strong><small>Cutoffs, rates & order protection</small></a> 1884 <a class="pdh-dd__link" href="/shop/reviews"><strong>Shop Reviews</strong><small>What buyers say</small></a> 1885 </div> 1886 </div> 1887 </div> 1888 </li> 1889 1890 1891 </ul> 1892 </nav> 1893 1894 1895 <div class="pdh-actions"> 1896 <div class="pdh-search" data-pdh-search> 1897 <button class="pdh-search__btn" type="button" aria-label="Search the site" aria-expanded="false" aria-controls="pdh-search-panel" data-search-toggle> 1898 <svg viewbox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg> 1899 </button> 1900 1901 <div class="pdh-search__panel" id="pdh-search-panel" hidden> 1902 <div class="pdh-search__inner" data-search-scope> 1903 <form class="pdh-search__form" role="search" onsubmit="return false;"> 1904 <svg viewbox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg> 1905 <input type="search" class="pdh-search__input" placeholder="Search pages" autocomplete="off" aria-label="Search the site" data-search-input> 1906 </form> 1907 <div class="pdh-search__status" aria-live="polite" data-search-status></div> 1908 <ul class="pdh-search__results" data-search-results></ul> 1909 </div> 1910 </div> 1911 </div> 1912 1913 <a href="tel:+14805956700" class="pdh-btn pdh-btn--ghost" aria-label="Call 480-595-6700" data-track="cta:header:call"> 1914 <svg viewbox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z" /></svg> 1915 <span class="pdh-btn__label">Call 480-595-6700</span> 1916 </a> 1917 <a href="/quote" class="pdh-btn pdh-btn--primary" data-track="cta:header:quote">Request A Quote</a> 1918 </div> 1919 1920 1921 <button class="pdh-toggle" type="button" aria-controls="pdh-mobile" aria-expanded="false" data-pdh-toggle> 1922 <span class="bars" aria-hidden="true"><i></i></span> 1923 Menu 1924 </button> 1925 </div> 1926 1927 1928 1929 <div class="pdh-mobile" id="pdh-mobile"> 1930 1931 1932 <div class="pdh-search--mobile" data-search-scope> 1933 <form class="pdh-search__form" role="search" onsubmit="return false;"> 1934 <svg viewbox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg> 1935 <input type="search" class="pdh-search__input" placeholder="Search pages" autocomplete="off" aria-label="Search the site" data-search-input> 1936 </form>
1937 <div class="pdh-search__status" aria-live="polite" data-search-status></div> 1938 <ul class="pdh-search__results" data-search-results></ul> 1939 </div> 1940 1941 1942 <a href="/" class="pdh-mobile__top-link">Home</a> 1943 1944 <details class="pdh-mobile__tab" name="pdh-mobile-tab"> 1945 <summary class="pdh-mobile__tab-head">Programs</summary> 1946 <div class="pdh-mobile__tab-body"> 1947 <div class="pdh-mobile__group"> 1948 <p class="pdh-mobile__label">Essential</p> 1949 <a href="/pd360-assessment"><strong>PD360 Assessment</strong><small>Your dog's personalized starting point</small></a> 1950 <a href="/en/dog-boarding"><strong>Dog Boarding</strong><small>Overnight stays with trained care</small></a> 1951 <a href="/snake-avoidance"><strong>Snake Avoidance</strong><small>Rattlesnake safety training</small></a> 1952 <a href="/grooming"><strong>Grooming</strong><small>Low-stress bath, brush-out & nails</small></a> 1953 </div> 1954 <div class="pdh-mobile__group"> 1955 <p class="pdh-mobile__label">Foundational</p> 1956 <a href="/training-camp"><strong>Foundation Camp</strong><small>14-night basics + manners</small></a> 1957 <a href="/daycare"><strong>DaySchool</strong><small>Daily training + structured enrichment</small></a> 1958 <a href="/private-lessons"><strong>Private Lessons</strong><small>1-on-1 coaching for you + your dog</small></a> 1959 <a href="/group-classes"><strong>Group Classes</strong><small>Weekly skills in a social setting</small></a> 1960 </div> 1961 <div class="pdh-mobile__group"> 1962 <p class="pdh-mobile__label">Behavioral</p> 1963 <a href="/daycamp"><strong>DayCamp</strong><small>Behavior-focused daily program</small></a> 1964 <a href="/behavior-camp"><strong>Behavior Camp</strong><small>21-night reactivity + anxiety</small></a> 1965 <a href="/transform-camp"><strong>Transform Camp</strong><small>28-night aggression + advanced</small></a> 1966 </div> 1967 <div class="pdh-mobile__tab-cta"> 1968 <a class="pdh-mobile__tab-cta-btn" href="/quiz" data-track="cta:header-mobile:programs-quiz">Not sure? Take the 2-minute quiz</a> 1969 <a class="pdh-mobile__tab-cta-link" href="/program-comparison" data-track="cta:header-mobile:programs-compare">Compare all programs</a> 1970 </div> 1971 </div> 1972 </details> 1973 1974 <details class="pdh-mobile__tab" name="pdh-mobile-tab"> 1975 <summary class="pdh-mobile__tab-head">Locations</summary> 1976 <div class="pdh-mobile__tab-body"> 1977 <div class="pdh-mobile__group"> 1978 <p class="pdh-mobile__label">Our Facilities</p> 1979 <a href="/scottsdale"><strong>Scottsdale</strong><small>8642 E Shea Blvd, 85260</small></a> 1980 <a href="/cave-creek"><strong>Cave Creek</strong><small>4640 E Forest Pleasant Pl, 85331</small></a> 1981 <a href="/service-areas"><strong>Service Areas</strong><small>Serving the Phoenix Valley</small></a> 1982 </div> 1983 </div> 1984 </details> 1985 1986 <details class="pdh-mobile__tab" name="pdh-mobile-tab"> 1987 <summary class="pdh-mobile__tab-head">Resources</summary> 1988 <div class="pdh-mobile__tab-body"> 1989 1990 <a class="pdh-mobile__portal-btn" href="https://partnersdogs.portal.gingrapp.com/public/login" target="_blank" rel="noopener noreferrer" data-track="cta:header-mobile:parent-portal"><strong>Open Parent Portal â</strong><small>Bookings, vaccinations & invoices</small></a> 1991 <div class="pdh-mobile__group"> 1992 <p class="pdh-mobile__label">Curriculum</p> 1993 <a href="/group-classes"><strong>Grade-Level Curriculum</strong><small>8 grades from Pre-School Puppy to Dogtorate</small></a> 1994 <a href="/training-journey"><strong>Training Journey</strong><small>What progress looks like, week by week</small></a> 1995 <a href="/our-methodology"><strong>Our Methodology</strong><small>How we train and why it lasts</small></a> 1996 </div> 1997 <div class="pdh-mobile__group"> 1998 <p class="pdh-mobile__label">About Partners</p> 1999 <a href="/en/about"><strong>About Us</strong><small>Family-owned · since 1997</small></a> 2000 <a href="/team"><strong>Meet the Team</strong><small>The trainers behind the results</small></a> 2001 <a href="/reviews"><strong>Parent Reviews</strong><small>What dog families are saying</small></a> 2002 <a href="/contact-us"><strong>Contact Us</strong><small>Hours, addresses, contact form</small></a> 2003 </div> 2004 <div class="pdh-mobile__group"> 2005 <p class="pdh-mobile__label">Helpful Pages</p> 2006 <a href="/en/faq"><strong>FAQ</strong><small>Answers to common questions</small></a> 2007 <a href="https://blog.partnersdogs.com/" rel="noopener"><strong>Blog & Training Tips</strong><small>Guides, advice & dog news</small></a> 2008 </div> 2009 </div> 2010 </details> 2011 2012 <details class="pdh-mobile__tab" name="pdh-mobile-tab"> 2013 <summary class="pdh-mobile__tab-head">Shop</summary> 2014 <div class="pdh-mobile__tab-body"> 2015 <div class="pdh-mobile__group"> 2016 <p class="pdh-mobile__label">Shop by Category</p> 2017 <a href="/shop"><strong>Shop All Products</strong><small>The full Partners Dogs store</small></a> 2018 <a href="/shop?category=Training%20Tools"><strong>Training Tools</strong><small>
2018Leashes, collars, long lines & more</small></a> 2019 <a href="/shop?category=Toys%20%26%20Enrichment"><strong>Toys & Enrichment</strong><small>Chews, puzzles & play</small></a> 2020 <a href="/shop?category=Other"><strong>Supplements & Care</strong><small>Vitamins, balms, wipes & grooming</small></a> 2021 <a href="/shop?category=Apparel%20%26%20Accessories"><strong>Apparel & Accessories</strong><small>Wearables & everyday carry</small></a> 2022 </div> 2023 <div class="pdh-mobile__group"> 2024 <p class="pdh-mobile__label">Gifts & Orders</p> 2025 <a href="/gift-cards"><strong>Gift Cards</strong><small>Training and care, gifted</small></a> 2026 <a href="/cart"><strong>Cart</strong><small>Review your items & check out</small></a> 2027 <a href="/shipping"><strong>Shipping & Returns</strong><small>Cutoffs, rates & order protection</small></a> 2028 <a href="/shop/reviews"><strong>Shop Reviews</strong><small>What buyers say</small></a> 2029 </div> 2030 </div> 2031 </details> 2032 2033 <div class="pdh-mobile__cta"> 2034 <a href="tel:+14805956700" class="pdh-btn pdh-btn--ghost" data-track="cta:header-mobile:call"> 2035 <svg viewbox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z" /></svg> 2036 Call 480-595-6700 2037 </a> 2038 <a href="/quote" class="pdh-btn pdh-btn--primary" data-track="cta:header-mobile:quote">Request A Quote</a> 2039 </div> 2040 2041 </div> 2042</header> 2043
2044<script> 2045(function(){ 2046 var root = document.querySelector('[data-pdh]'); 2047 if (!root) return; 2048 2049 // ---------------------------------------------------------------------- 2050 // Shrink + condense the header once the page has scrolled past the utility 2051 // bar. rAF-throttled, passive listener, so no scroll jank. 2052 // 2053 // HYSTERESIS (fixes the "header blinks at a certain height" bug): .pdh-bar 2054 // collapses to max-height:0 when .is-scrolled is set. Because the whole header 2055 // is position:sticky (in normal flow), collapsing it shortens the document by 2056 // the bar's height. With a SINGLE threshold, the scroll position could land 2057 // right where collapsing drops it back under the line: expand, re-cross, 2058 // collapse, forever. So we use two thresholds with a gap WIDER than the bar: 2059 // collapse only after scrolling down past COLLAPSE_AT, re-expand only after 2060 // coming back up under EXPAND_AT. 2061 // ---------------------------------------------------------------------- 2062 var ticking = false; 2063 var COLLAPSE_AT = 140; 2064 var EXPAND_AT = 40; 2065 function applyScrollState() { 2066 var y = window.scrollY || window.pageYOffset || 0; 2067 if (root.classList.contains('is-scrolled')) { 2068 if (y < EXPAND_AT) root.classList.remove('is-scrolled'); 2069 } else if (y > COLLAPSE_AT) { 2070 root.classList.add('is-scrolled'); 2071 } 2072 ticking = false; 2073 } 2074 window.addEventListener('scroll', function(){ 2075 if (!ticking) { requestAnimationFrame(applyScrollState); ticking = true; } 2076 }, { passive: true }); 2077 applyScrollState(); 2078 2079 // ---------------------------------------------------------------------- 2080 // Mobile drawer toggle. 2081 // ---------------------------------------------------------------------- 2082 var toggle = root.querySelector('[data-pdh-toggle]'); 2083 function setDrawer(open) { 2084 root.classList.toggle('is-open', open); 2085 if (toggle) toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); 2086 // Lock background-page scrolling so the fixed full-screen drawer does not 2087 // let touch swipes scroll the page underneath it on iOS. Lock BOTH <html> 2088 // and <body>: iOS Safari ignores a body-only lock. 2089 document.documentElement.classList.toggle('pdh-menu-open', open); 2090 document.body.classList.toggle('pdh-menu-open', open); 2091 } 2092 if (toggle) { 2093 toggle.addEventListener('click', function(){ 2094 setDrawer(!root.classList.contains('is-open')); 2095 }); 2096 } 2097 2098 // ---------------------------------------------------------------------- 2099 // Desktop dropdowns. Hover and focus-within are pure CSS; this adds 2100 // click-to-toggle so touch and keyboard users can open a panel, and keeps 2101 // aria-expanded in sync with the click state. 2102 // ---------------------------------------------------------------------- 2103 function closeAllPanels() { 2104 root.querySelectorAll('.pdh-dd[data-open="true"]').forEach(function(o){ o.removeAttribute('data-open'); }); 2105 root.querySelectorAll('.pdh-nav__link[aria-expanded="true"]').forEach(function(b){ b.setAttribute('aria-expanded','false'); }); 2106 } 2107 root.querySelectorAll('.pdh-nav__item > button.pdh-nav__link').forEach(function(btn){ 2108 btn.addEventListener('click', function(e){ 2109 e.preventDefault(); 2110 var dd = btn.parentElement.querySelector('.pdh-dd'); 2111 if (!dd) return; 2112 var opening = dd.getAttribute('data-open') !== 'true'; 2113 closeAllPanels(); 2114 if (opening) { 2115 dd.setAttribute('data-open','true'); 2116 btn.setAttribute('aria-expanded','true'); 2117 } 2118 }); 2119 }); 2120 // Close on outside click. 2121 document.addEventListener('click', function(e){ 2122 if (!root.contains(e.target)) closeAllPanels(); 2123 }); 2124 2125 // ---------------------------------------------------------------------- 2126 // SITE SEARCH. Live results from HubSpot's public Content Search API, which 2127 // indexes every published site page / landing page / blog post in the portal. 2128 // CORS-enabled and unauthenticated (the same endpoint HubSpot's own search 2129 // module uses). Wires BOTH the desktop panel and the mobile drawer input, 2130 // each marked with [data-search-scope]. 2131 // ---------------------------------------------------------------------- 2132 var HUB_ID = '21344124'; 2133 var SEARCH_TYPES = ['SITE_PAGE', 'LANDING_PAGE', 'BLOG_POST', 'LISTING_PAGE']; 2134 2135 function escapeHtml(s){ 2136 return String(s == null ? '' : s).replace(/[&<>"']/g, function(c){ 2137 return { '&':'&', '<':'<', '>':'>', '"':'"', "'":''' }[c]; 2138 }); 2139 } 2140 // The contentsearch API returns titles/descriptions CONTAINING its own 2141 // <span class="hs-search-highlight"> markup; escaping that raw string printed 2142 // the tags literally. Strip ALL tags first (never trust API markup), escape, 2143 // then re-highlight the term safely with <mark>. 2144 function stripTags(s){ return String(s == null ? '' : s).replace(/<[^>]*>/g, ''); } 2145 function highlightSafe(raw, term){ 2146 var text = escapeHtml(stripTags(raw)); 2147 var t = String(term || '').trim(); 2148 if (!t) return text; 2149 var safe = escapeHtml(t).replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); 2150 return text.replace(new RegExp('(' + safe + ')', 'ig'), '<mark class="pdh-search__hl">$1</mark>'); 2151 } 2152 function prettyType(t){ return String(t || 'page').replace(/_/g, ' ').toLowerCase(); } 2153 2154 function setupSearchScope(scope){ 2155 var input = scope.querySelector('[data-search-input]'); 2156 var results = scope.querySelector('[data-search-results]'); 2157 var status = scope.querySelector('[data-search-status]'); 2158 if (!input || !results) return; 2159 var debounce = null; 2160 2161 function render(items, term){ 2162 results.innerHTML = ''; 2163 if (!items.length){ 2164 if (status) status.textContent = term ? 'No pages found for "' + term + '".' : ''; 2165 return; 2166 } 2167 if (status) status.textContent = items.length + ' result' + (items.length > 1 ? 's' : '');
2168 items.forEach(function(it){ 2169 var li = document.createElement('li'); 2170 li.className = 'pdh-search__result'; 2171 var a = document.createElement('a'); 2172 a.href = it.url || '#'; 2173 a.innerHTML = 2174 '<span class="pdh-search__type">' + escapeHtml(prettyType(it.type)) + '</span>' + 2175 '<strong>' + highlightSafe(it.title || it.url || 'Untitled', term) + '</strong>' + 2176 (it.description ? '<small>' + highlightSafe(it.description, term) + '</small>' : ''); 2177 li.appendChild(a); 2178 results.appendChild(li); 2179 }); 2180 } 2181 2182 function doSearch(term){ 2183 var url = 'https://api.hubapi.com/contentsearch/v2/search' 2184 + '?portalId=' + encodeURIComponent(HUB_ID) 2185 + '&term=' + encodeURIComponent(term) 2186 + '&' + SEARCH_TYPES.map(function(t){ return 'type=' + t; }).join('&') 2187 + '&limit=8'; 2188 fetch(url, { headers: { 'Accept': 'application/json' } }) 2189 .then(function(r){ return r.ok ? r.json() : { results: [] }; }) 2190 .then(function(data){ 2191 // Ignore stale responses if the user kept typing. 2192 if (input.value.trim() !== term) return; 2193 render((data && data.results) || [], term); 2194 }) 2195 .catch(function(){ if (status) status.textContent = 'Search is unavailable right now.'; }); 2196 } 2197 2198 input.addEventListener('input', function(){ 2199 var term = input.value.trim(); 2200 if (debounce) clearTimeout(debounce); 2201 if (term.length < 2){ results.innerHTML = ''; if (status) status.textContent = ''; return; } 2202 if (status) status.textContent = 'Searching'; 2203 debounce = setTimeout(function(){ doSearch(term); }, 250); 2204 }); 2205 input.addEventListener('keydown', function(e){ 2206 if (e.key === 'Enter'){ 2207 e.preventDefault(); 2208 var term = input.value.trim(); 2209 if (term.length >= 2){ if (debounce) clearTimeout(debounce); doSearch(term); } 2210 } 2211 }); 2212 } 2213 2214 root.querySelectorAll('[data-search-scope]').forEach(setupSearchScope); 2215 2216 // Desktop: the magnifier toggles the floating panel. 2217 var searchToggle = root.querySelector('[data-search-toggle]'); 2218 var searchPanel = root.querySelector('#pdh-search-panel'); 2219 var searchBox = root.querySelector('[data-pdh-search]'); 2220 function openSearch(){ 2221 if (!searchPanel) return; 2222 searchPanel.hidden = false; 2223 if (searchBox) searchBox.classList.add('is-open'); 2224 if (searchToggle) searchToggle.setAttribute('aria-expanded', 'true'); 2225 var i = searchPanel.querySelector('[data-search-input]'); 2226 if (i) i.focus(); 2227 } 2228 function closeSearch(){ 2229 if (!searchPanel) return; 2230 searchPanel.hidden = true; 2231 if (searchBox) searchBox.classList.remove('is-open'); 2232 if (searchToggle) searchToggle.setAttribute('aria-expanded', 'false'); 2233 } 2234 if (searchToggle){ 2235 searchToggle.addEventListener('click', function(){ 2236 if (searchPanel && searchPanel.hidden) openSearch(); else closeSearch(); 2237 }); 2238 } 2239 // Close the desktop panel on outside click. 2240 document.addEventListener('click', function(e){ 2241 if (!searchPanel || searchPanel.hidden) return; 2242 if (searchPanel.contains(e.target)) return; 2243 if (searchToggle && searchToggle.contains(e.target)) return; 2244 closeSearch(); 2245 }); 2246 2247 // Escape closes, in order of what is actually open: search panel, dropdown 2248 // panels, mobile drawer. Focus returns to the hamburger when the drawer closes. 2249 document.addEventListener('keydown', function(e){ 2250 if (e.key !== 'Escape') return; 2251 closeSearch(); 2252 closeAllPanels(); 2253 if (root.classList.contains('is-open')) { 2254 setDrawer(false); 2255 if (toggle) toggle.focus(); 2256 } 2257 }); 2258})(); 2259</script>
2259 2260 2261 2262 2263 2264 2265 2266 2267 2268
2268<script type="application/ld+json"> 2269 { 2270 "@context": "https://schema.org", 2271 "@type": "BreadcrumbList", 2272 "itemListElement": [ 2273 { 2274 "@type": "ListItem", 2275 "position": 1, 2276 "name": "Home", 2277 "item": "https://partnersdogs.com/" 2278 }, 2279 { 2280 "@type": "ListItem", 2281 "position": 2, 2282 "name": "About Partners Dogs", 2283 "item": "https://partnersdogs.com/about" 2284 } 2285 ] 2286 } 2287 </script>
2287 2288 2289 2290 <main id="main-content" class="pd-main" tabindex="-1"> 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301<div class="pd-main-content pd-dyn pd-ds2" data-pd-ds2-build="w3pc-2026-07-07" data-pd-motion-build="pilot-2026-07-01"> 2302 2303 2304 <section class="pd-section pd-section--navy pd-hero-module pd-hero-module--image pd-hero-module--treatment-gradient_mask"> 2305 <div class="pd-hero-module__overlay" aria-hidden="true"></div> 2306 2307 <div class="pd-hero-module__treatment-overlay" aria-hidden="true" style="background:#022D41;opacity:0.65;"></div> 2308 <div class="pd-hero-module__scrim" aria-hidden="true" style="position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(90deg,rgba(2,45,65,.72),rgba(2,45,65,.25) 60%,transparent);"></div> 2309 <div class="pd-container"> 2310 <p class="pd-eyebrow">About Partners Dogs</p> 2311 2312 <h1 class="pd-h1">About Partners Dogs: Family-Owned in Arizona Since 1997</h1> 2313 <div class="pd-lede"><p>Two Arizona campuses, one family, and 70,000+ dogs trained since 1997. Whether you want to stop problem behaviors, improve your dog's manners, take a few classes, socialize your dog in daycare, or just get a bit of exercise in agility, we have a number of programs to suit all of your interests and goals.</p></div> 2314 <div class="pd-btn-row"> 2315 <a href="/schedule-call" class="pd-btn pd-btn--accent" data-track="cta:primary">Schedule a Free Consultation</a> 2316 <a href="/team" class="pd-btn pd-btn--outline-white" data-track="cta:secondary">Meet Our Team</a> 2317 </div> 2318 2319 </div> 2320 <img class="pd-hero-module__bgimg-dyn" src="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=1600" srcset="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=480 480w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=640 640w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=828 828w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=1080 1080w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=1280 1280w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Play/Trixie_Cave-Creek_20251014_play-with-dogs_56b0e4-enhanced-v1.jpg?width=1600 1600w" sizes="100vw" alt="Two dogs interacting in an outdoor play yard with agility equipment at a training and daycare facility." style="--pd-fp:32% 38%" loading="eager" fetchpriority="high" decoding="async"> 2321 </section> 2322 2323<div class="pd2-statfloat" data-pd-ds2="herostats" role="region" aria-label="Why families choose Partners Dogs" style="position:relative;z-index:6;margin-top:clamp(-78px,-6vw,-44px);padding:0 24px;"> 2324 <div style="max-width:1140px;margin:0 auto;"> 2325 <div class="pd2-statfloat__card" style="position:relative;background:#fff;border-radius:var(--pd-radius-xl);box-shadow:var(--pd-shadow-xl);padding:26px 24px;overflow:hidden;"> 2326 <span aria-hidden="true" style="position:absolute;top:0;left:0;right:0;height:5px;background:linear-gradient(90deg,var(--pd-teal-500),var(--pd-yellow-500));"></span> 2327 <span><b>70,000+</b> dogs trained</span><span><b>28+</b> years in Arizona</span><span><b>2</b> Arizona campuses</span><span><b>4.8â </b> across 2,000+ Google reviews</span> 2328 </div> 2329 </div> 2330</div> 2331 2332 2333 2334 2335 <section class="pd-section pd-section--white"> 2336 <div class="pd-container pd-container--narrow"> 2337 <div class="pd-text-section pd-text-section--centered"> 2338 <div class="pd-centered-content pd-centered-content--center pd-lede-card pd-lede-card--long"> 2339 <h2 class="pd-section-heading pd-section-heading--underline is-centered">Family owned since 1997</h2> 2340 <div class="pd-centered-content__body pd-measure pd-lede-intro"><p>Partners Dog School is a family-owned training school with campuses in Scottsdale and Cave Creek. Founder Leighton Oosthuisen still lives on the original Cave Creek property, and the same family holds the standard at both locations. We built this place to do what a lot of trainers will not: take the difficult dogs, work the behavior other people gave up on, and teach the owner right alongside the dog. That is the whole idea here. Training changes both ends of the leash, and the calm, confident life you want with your dog starts with a plan built around the dog in front of us.</p><p><a class="pd-btn pd-btn--outline pd-btn--sm" href="/team">Meet the team</a></p></div> 2341 2342 2343 2344 <div class="pd-btn-row pd-lede-card__cta" style="justify-content:center;"> 2345 <a href="/schedule-call" class="pd-btn pd-btn--gradient" data-track="cta:intro">Schedule a Free Consultation</a> 2346 <a href="/team" class="pd-btn pd-btn--outline" data-track="cta:intro-2">Meet Our Team</a> 2347 </div> 2348 2349 </div> 2350 </div> 2351 </div> 2352 </section> 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886<section class="pd-section pd-section--white pd2-sec pd2-sec--media" data-pd-ds2="media"> 2887 <div class="pd-container"> 2888 <div class="pd2-media pd2-media--reverse" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(28px,4vw,56px);align-items:center;"> 2889 2890 <figure class="pd2-media__figure pd-glow-card pd-img-zoom" data-pd-reveal="fade-right" data-pd-reveal-delay="100" style="margin:0;border-radius:var(--pd-radius-xl);overflow:hidden;aspect-ratio:4 / 5;"> 2891 <img src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/cc-staff-training-outdoor-field-selfie-01.jpg?width=880&height=1100&name=cc-staff-training-outdoor-field-selfie-01.jpg" alt="Leighton Oosthuisen with the Partners Dogs team and a Belgian Malinois on the outdoor training yard" loading="lazy" decoding="async" width="880" height="1100" style="width:100%;height:100%;object-fit:cover;display:block;" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/cc-staff-training-outdoor-field-selfie-01.jpg?width=440&height=550&name=cc-staff-training-outdoor-field-selfie-01.jpg 440w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/cc-staff-training-outdoor-field-selfie-01.jpg?width=880&height=1100&name=cc-staff-training-outdoor-field-selfie-01.jpg 880w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/cc-staff-training-outdoor-field-selfie-01.jpg?width=1320&height=1650&name=cc-staff-training-outdoor-field-selfie-01.jpg 1320w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/cc-staff-training-outdoor-field-selfie-01.jpg?width=1760&height=2200&name=cc-staff-training-outdoor-field-selfie-01.jpg 1760w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/cc-staff-training-outdoor-field-selfie-01.jpg?width=2200&height=2750&name=cc-staff-training-outdoor-field-selfie-01.jpg 2200w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/cc-staff-training-outdoor-field-selfie-01.jpg?width=2640&height=3300&name=cc-staff-training-outdoor-field-selfie-01.jpg 2640w" sizes="(max-width: 880px) 100v
2891w, 880px"> 2892 </figure> 2893 2894 <div class="pd2-media__text" data-pd-reveal="fade-left"> 2895 <p class="pd-eyebrow">Our story</p> 2896 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">How It All Started</h2> 2897 <div class="pd-centered-content__body pd2-media__body"><p>Leighton Oosthuisen started training dogs at age 10 in South Africa. By his early twenties he was a K9 handler working bomb, drug, and Search and Rescue dogs, and competing at the highest levels of French Ring, Schutzhund, Agility, and Dock Diving.</p><p>In 1992 he emigrated to the United States. Five years later he bought an old racehorse training facility in Cave Creek called Lone Tree Ranch, and Partners Dog Training School was born. The Lone Tree still stands on the main training field today.</p><p>One trainer who took the dogs nobody else would has grown into Arizona's largest and highest-rated dog training school: two campuses, a team of 50+ professionals, and more than 70,000 dogs whose families got their normal life back. The mission has not changed.</p></div> 2898 2899 <div class="pd-btn-row"><a href="/programs" class="pd-btn pd-btn--accent" data-track="cta:media">Explore our programs</a></div> 2900 </div> 2901 2902 </div> 2903 </div> 2904</section> 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987<section class="pd-section pd-section--navy pd2-sec pd2-sec--richtext" data-pd-ds2="richtext"> 2988 <div class="pd-container pd-container--narrow pd-sec--pullquote"> 2989 <div class="pd-centered-content pd-centered-content--left pd2-rich"> 2990 2991 2992 <div class="pd-centered-content__body pd2-rich__body"><blockquote>We still take the dogs nobody else will, because training changes both ends of the leash.<cite>Leighton Oosthuisen, Founder</cite></blockquote></div> 2993 2994 </div> 2995 </div> 2996</section> 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137<section class="pd-section pd-section--light pd2-sec pd2-sec--richtext" data-pd-ds2="richtext"> 3138 <div class="pd-container pd-sec--timeline"> 3139 <div class="pd-centered-content pd-centered-content--left pd2-rich"> 3140 <p class="pd-eyebrow pd-centered-content__eyebrow">Our journey</p> 3141 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">The Partners Story, Year by Year</h2> 3142 <div class="pd-centered-content__body pd2-rich__body"><p>Five decades, two countries, and tens of thousands of dogs. Here is how Partners became the school it is today.</p><p><strong>1973 · A passion begins.</strong> At ten years old, Leighton Oosthuisen starts training dogs in South Africa. The childhood obsession becomes a lifelong calling.</p><p><strong>The K9 years · Apprentice to head trainer.</strong> Leighton rises from apprentice to head trainer at a professional school while working as a K9 handler on bomb, narcotics, and Search and Rescue dogs, and competing in French Ring, Agility, Dock Diving, and Schutzhund.</p><p><strong>1992 · A new country.</strong> Leighton emigrates to the United States, bringing decades of behavior work and competitive sport experience with him.</p><p><strong>1997 · Lone Tree Ranch.</strong> He buys an old racehorse training facility in Cave Creek and founds Partners Dog School. The iconic Lone Tree still stands on the main field. From day one the mission is set: train the dog and the owner together.</p><p><strong>A field built for the desert.</strong> Partners opens a purpose-built Cave Creek facility with large indo
3142or training areas, zoned air conditioning, and a 15,000 square foot training field made for the Arizona heat.</p><p><strong>DaySchool arrives.</strong> A full-scale DaySchool program opens with 12,000 square feet of indoor and outdoor play, 10-to-1 dog-to-staff ratios, and structured positive play. It quickly becomes the most popular program.</p><p><strong>Luxury boarding.</strong> Boarding is rebuilt around luxury suites, tiled floors, and industry-leading cleaning, setting a new standard for overnight care in Arizona.</p><p><strong>Scottsdale opens.</strong> A second campus opens in Scottsdale, a 23,000 square foot resort and training school. The team grows past 50 trainers and staff.</p><p><strong>2022 · 25 years and Partners University.</strong> On its 25th anniversary, Partners launches Partners University so owners can learn the methodology that has shaped tens of thousands of dogs.</p><p><strong>Today · Still taking the hard cases.</strong> The Partners Dogs Foundation supports rescue rehabilitation and access for families who need it, while the school keeps doing what it has since 1997: taking the dogs nobody else will.</p></div> 3143 <div class="pd-btn-row"><a href="/team/leighton-oosthuisen" class="pd-btn pd-btn--accent" data-track="cta:section">Meet Leighton</a></div> 3144 </div> 3145 </div> 3146</section> 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419<section class="pd-section pd-section--white pd2-sec pd2-sec--media" data-pd-ds2="media"> 3420 <div class="pd-container"> 3421 <div class="pd2-media" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(28px,4vw,56px);align-items:center;"> 3422 3423 <div class="pd2-media__text" data-pd-reveal="fade-right"> 3424 <p class="pd-eyebrow">What we believe</p> 3425 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">Our Training Philosophy</h2> 3426 <div class="pd-centered-content__body pd2-media__body"><p>We are balanced, tool-agnostic trainers. Treats, markers, slip leads, prong collars, e-collars, place work, whatever earns the best result for the dog and the strongest relationship for the owner. Tools do not cause harm. People do. Our job is knowing which tool fits which dog, and when.</p><p>Every session is built around where a behavior sits in our four-stage approach:</p><ul class="pd-checklist"><li><strong>Teaching:</strong> introducing the concept</li><li><strong>Reinforcing:</strong> building consistency</li><li><strong>Proofing:</strong> holding up under real distractions</li><li><strong>Maintenance:</strong> keeping it for life</li></ul><p>The real philosophy is simple. Training changes both ends of the leash. We train your dog and coach you, because the relationship between the two of you is what makes it last.</p></div> 3427 3428 <div class="pd-btn-row"><a href="/our-methodology" class="pd-btn pd-btn--accent" data-track="cta:media">See our methodology</a></div> 3429 </div> 3430 3431 <figure class="pd2-media__figure pd-glow-card pd-img-zoom" data-pd-reveal="fade-left" data-pd-reveal-delay="100" style="margin:0;border-radius:var(--pd-radius-xl);overflow:hidden;aspect-ratio:4 / 5;--pd-fp:36% 38%;"> 3432 <img src="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Scottsdale/Place%20Cot/Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg?width=880&height=1100&name=Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg" alt="A golden doodle practicing impulse control and place training on an elevated cot next to a pile of kibble treats." loading="lazy" decoding="async" width="880" height="1100" style="width:100%;height:100%;object-fit:cover;display:block;" srcset="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Scottsdale/Place%20Cot/Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg?width=440&height=550&name=Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg 440w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Scottsdale/Place%20Cot/Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg?width=880&height=1100&name=Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg 880w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Scottsdale/Place%20Cot/Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg?width=1320&height=1650&name=Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg 1320w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Scottsdale/Place%20Cot/Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg?width=1760&height=2200&name=Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg 1760w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Scottsdale/Place%20Cot/Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg?width=2200&height=2750&name=Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg 2200w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Scottsdale/Place%20Cot/Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg?width=2640&height=3300&name=Chloe_Scottsdale_20260728_place-or-cot_aae09e-enhanced-v1.jpg 2640w" sizes="(max-width: 880px) 100v
3432w, 880px"> 3433 </figure> 3434 3435 </div> 3436 </div> 3437</section> 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618<section class="pd-section pd-section--light pd2-sec pd2-sec--media" data-pd-ds2="media"> 3619 <div class="pd-container"> 3620 <div class="pd2-media pd2-media--reverse" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(28px,4vw,56px);align-items:center;"> 3621 3622 <figure class="pd2-media__figure pd-glow-card pd-img-zoom" data-pd-reveal="fade-right" data-pd-reveal-delay="100" style="margin:0;border-radius:var(--pd-radius-xl);overflow:hidden;aspect-ratio:4 / 5;"> 3623 <img src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/pd-outdoor-dog-training-heelwork-field-01.png?width=880&height=1100&name=pd-outdoor-dog-training-heelwork-field-01.png" alt="Leighton Oosthuisen heeling a tan Belgian Malinois at an outdoor dog sport competition" loading="lazy" decoding="async" width="880" height="1100" style="width:100%;height:100%;object-fit:cover;display:block;" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/pd-outdoor-dog-training-heelwork-field-01.png?width=440&height=550&name=pd-outdoor-dog-training-heelwork-field-01.png 440w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/pd-outdoor-dog-training-heelwork-field-01.png?width=880&height=1100&name=pd-outdoor-dog-training-heelwork-field-01.png 880w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/pd-outdoor-dog-training-heelwork-field-01.png?width=1320&height=1650&name=pd-outdoor-dog-training-heelwork-field-01.png 1320w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/pd-outdoor-dog-training-heelwork-field-01.png?width=1760&height=2200&name=pd-outdoor-dog-training-heelwork-field-01.png 1760w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/pd-outdoor-dog-training-heelwork-field-01.png?width=2200&height=2750&name=pd-outdoor-dog-training-heelwork-field-01.png 2200w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/2022%20Design/pd-outdoor-dog-training-heelwork-field-01.png?width=2640&height=3300&name=pd-outdoor-dog-training-heelwork-field-01.png 2640w" sizes="(max-width: 880px) 100vw, 880px"> 3624 </figure> 3625 3626 <div class="pd2-media__text" data-pd-reveal="fade-left"> 3627 <p class="pd-eyebrow">Meet our founders</p> 3628 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">Leighton Oosthuisen</h2> 3629 <div class="pd-centered-content__body pd2-media__body"><p class="pd-role">Training Director and Founder</p><p>Leighton started training dogs in South Africa in 1973, at age 10. A former K9 handler who worked bomb, drug, and Search and Rescue dogs, he has competed and titled at the highest levels of French Ring, Schutzhund, Agility, and Dock Diving. With more than 50 years at the end of a leash and 30+ years specializing in behavior modification, his balanced, personalized approach is the foundation of every Partners program.</p><p>He still lives on the Cave Creek property with his family, which is why an owner is on site overnight for every boarding guest. Away from the training field he is a World Champion target pistol shooter who has represented the USA at three World Pistol Championships.</p><p><em>"Give me the dog other people gave up on, and give the family a real plan. That is
3629where the good work starts."</em></p></div> 3630 3631 <div class="pd-btn-row"><a href="/team/leighton-oosthuisen" class="pd-btn pd-btn--accent" data-track="cta:media">View full profile</a></div> 3632 </div> 3633 3634 </div> 3635 </div> 3636</section> 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785<section class="pd-section pd-section--white pd2-sec pd2-sec--media" data-pd-ds2="media"> 3786 <div class="pd-container"> 3787 <div class="pd2-media" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(28px,4vw,56px);align-items:center;"> 3788 3789 <div class="pd2-media__text" data-pd-reveal="fade-right"> 3790 3791 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">Christopher Oosthuisen</h2> 3792 <div class="pd-centered-content__body pd2-media__body"><p class="pd-role">Chief Operating Officer</p><p>Christopher oversees operations across both campuses, Partners Dogs University, and the Partners Dogs Foundation. In more than a decade at Partners he has worked with well over 10,000 dogs across behavior modification, confidence building, protection, and competition agility and obedience. His focus: make sure every family leaves with the tools, confidence, and daily habits to keep progressing long after the program ends.</p><p>Like his father, Christopher competes for the USA in target pistol shooting, ranking in the top 50 in the world, and he trains and competes in French Ring.</p><p><em>"My goal is to inspire every family to make training a daily part of life with their dog."</em></p></div> 3793 3794 <div class="pd-btn-row"><a href="/team/christopher-oosthuisen" class="pd-btn pd-btn--accent" data-track="cta:media">View full profile</a></div> 3795 </div> 3796 3797 <figure class="pd2-media__figure pd-glow-card pd-img-zoom" data-pd-reveal="fade-left" data-pd-reveal-delay="100" style="margin:0;border-radius:var(--pd-radius-xl);overflow:hidden;aspect-ratio:4 / 5;"> 3798 <img src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=880&height=1100&name=Christopher_ChiefOperatingOfficer.png" alt="Christopher Oosthuisen, Chief Operating Officer at Partners Dogs" loading="lazy" decoding="async" width="880" height="1100" style="width:100%;height:100%;object-fit:cover;display:block;" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=440&height=550&name=Christopher_ChiefOperatingOfficer.png 440w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=880&height=1100&name=Christopher_ChiefOperatingOfficer.png 880w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=1320&height=1650&name=Christopher_ChiefOperatingOfficer.png 1320w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=1760&height=2200&name=Christopher_ChiefOperatingOfficer.png 1760w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=2200&height=2750&name=Christopher_ChiefOperatingOfficer.png 2200w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=2640&height=3300&name=Christopher_ChiefOperatingOfficer.png 2640w" sizes="(max-width: 880px) 100vw, 880px"> 3799 </figure> 3800 3801 </div> 3802 </div> 3803</section> 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976<section class="pd-section pd-section--white pd2-sec pd2-sec--richtext" data-pd-ds2="richtext"> 3977 <div class="pd-container pd-sec--cards--glow pd-sec--leadercards"> 3978 <div class="pd-centered-content pd-centered-content--left pd2-rich"> 3979 <p class="pd-eyebrow pd-centered-content__eyebrow">Scottsdale campus</p> 3980 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">Meet Our Scottsdale Leaders</h2> 3981 <div class="pd-centered-content__body pd2-rich__body"><ul><li class="pd-leader"><img class="pd-leader__photo" src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=112&height=112&name=Hannah_Scottsdale_HeadTrainer.png" alt="Hannah Kochman, Head Trainer at the Scottsdale campus" width="112" height="112" loading="lazy" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=56&height=56&name=Hannah_Scottsdale_HeadTrainer.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=112&height=112&name=Hannah_Scottsdale_HeadTrainer.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=168&height=168&name=Hannah_Scottsdale_HeadTrainer.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=224&height=224&name=Hannah_Scottsdale_HeadTrainer.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=280&height=280&name=Hannah_Scottsdale_HeadTrainer.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=336&height=336&name=Hannah_Scottsdale_HeadTrainer.png 336w" sizes="(max-width: 112px) 100vw, 112px"><strong>Hannah Kochman</strong><span class="pd-leader__role">Head Trainer and Location Manager</span><span class="pd-leader__meta">At Partners since 2017</span>
3981<p class="pd-leader__bio">Hannah specializes in anxious, insecure, and quirky dogs, guiding thousands of them from Pre-School Puppy through advanced behavior modification and snake avoidance.</p><span class="pd-leader__cred">AKC CGC Evaluator · Pet CPR + First Aid · Partners Dogs University</span><a class="pd-leader__cta" href="/team/hannah-kochman">View Profile</a></li><li class="pd-leader"><img class="pd-leader__photo" src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=112&height=112&name=Nicole_Scottsdale_DaySchool_Manager.png" alt="Nicole Colasacco, DaySchool Manager at the Scottsdale campus" width="112" height="112" loading="lazy" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=56&height=56&name=Nicole_Scottsdale_DaySchool_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=112&height=112&name=Nicole_Scottsdale_DaySchool_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=168&height=168&name=Nicole_Scottsdale_DaySchool_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=224&height=224&name=Nicole_Scottsdale_DaySchool_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=280&height=280&name=Nicole_Scottsdale_DaySchool_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=336&height=336&name=Nicole_Scottsdale_DaySchool_Manager.png 336w" sizes="(max-width: 112px) 100vw, 112px"><strong>Nicole Colasacco</strong><span class="pd-leader__role">DaySchool Manager</span><span class="pd-leader__meta">At Partners since 2021</span><p class="pd-leader__bio">Nicole runs the Scottsdale DaySchool floor and teaches Pre-School Puppy and foundation manners, turning big daycare energy into calm, polite habits that carry home.</p><span class="pd-leader__cred">Partners Dogs University · Pet CPR + First Aid · Dog Gurus</span><a class="pd-leader__cta" href="/team/nicole-colasacco">View Profile</a></li><li class="pd-leader"><img class="pd-leader__photo" src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Emma%20Badoni_Scottsdale_Boarding_Manager.png?width=112&height=112&name=Emma%20Badoni_Scottsdale_Boarding_Manager.png" alt="Emma Badoni, Boarding Manager at the Scottsdale campus" width="112" height="112" loading="lazy" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Emma%20Badoni_Scottsdale_Boarding_Manager.png?width=56&height=56&name=Emma%20Badoni_Scottsdale_Boarding_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Emma%20Badoni_Scottsdale_Boarding_Manager.png?width=112&height=112&name=Emma%20Badoni_Scottsdale_Boarding_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Emma%20Badoni_Scottsdale_Boarding_Manager.png?width=168&height=168&name=Emma%20Badoni_Scottsdale_Boarding_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Emma%20Badoni_Scottsdale_Boarding_Manager.png?width=224&height=224&name=Emma%20Badoni_Scottsdale_Boarding_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Emma%20Badoni_Scottsdale_Boarding_Manager.png?width=280&height=280&name=Emma%20Badoni_Scottsdale_Boarding_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Emma%20Badoni_Scottsdale_Boarding_Manager.png?width=336&height=336&name=Emma%20Badoni_Scottsdale_Boarding_Manager.png 336w" sizes="(max-width: 112px) 100vw, 112px"><strong>Emma Badoni</strong><span class="pd-leader__role">Boarding Manager</span><span class="pd-leader__meta">Scottsdale boarding lead</span>
3981<p class="pd-leader__bio">Emma runs Scottsdale boarding so every overnight guest keeps their structure, enrichment, and training momentum while you are away.</p><span class="pd-leader__cred">K9 Nutrition · Pet CPR + First Aid · Partners Dogs University</span><a class="pd-leader__cta" href="/team/emma-badoni">View Profile</a></li><li class="pd-leader"><img class="pd-leader__photo" src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=112&height=112&name=Chase_Scottsdale_TeamSuccess_Manager.png" alt="Chase Larson, Team Success Manager at the Scottsdale campus" width="112" height="112" loading="lazy" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=56&height=56&name=Chase_Scottsdale_TeamSuccess_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=112&height=112&name=Chase_Scottsdale_TeamSuccess_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=168&height=168&name=Chase_Scottsdale_TeamSuccess_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=224&height=224&name=Chase_Scottsdale_TeamSuccess_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=280&height=280&name=Chase_Scottsdale_TeamSuccess_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=336&height=336&name=Chase_Scottsdale_TeamSuccess_Manager.png 336w" sizes="(max-width: 112px) 100vw, 112px"><strong>Chase Larson</strong><span class="pd-leader__role">Team Success Manager</span><span class="pd-leader__meta">9+ years working with dogs</span><p class="pd-leader__bio">Chase coaches both ends of the leash, taking reactive and hard-to-place dogs and building the structure that turns them into calm, trustworthy companions.</p><span class="pd-leader__cred">Partners Dogs University · Pet CPR + First Aid · Dog Gurus</span><a class="pd-leader__cta" href="/team/chase-larson">View Profile</a></li></ul></div> 3982 3983 </div> 3984 </div> 3985</section> 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106<section class="pd-section pd-section--light pd2-sec pd2-sec--richtext" data-pd-ds2="richtext"> 4107 <div class="pd-container pd-sec--cards--glow pd-sec--leadercards"> 4108 <div class="pd-centered-content pd-centered-content--left pd2-rich"> 4109 <p class="pd-eyebrow pd-centered-content__eyebrow">Cave Creek campus</p> 4110 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">Meet Our Cave Creek Leaders</h2> 4111 <div class="pd-centered-content__body pd2-rich__body"><ul><li class="pd-leader"><img class="pd-leader__photo" src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=112&height=112&name=Megan_CaveCreek_HeadTrainer.png" alt="Megan Fiedler, Head Trainer at the Cave Creek campus" width="112" height="112" loading="lazy" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=56&height=56&name=Megan_CaveCreek_HeadTrainer.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=112&height=112&name=Megan_CaveCreek_HeadTrainer.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=168&height=168&name=Megan_CaveCreek_HeadTrainer.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=224&height=224&name=Megan_CaveCreek_HeadTrainer.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=280&height=280&name=Megan_CaveCreek_HeadTrainer.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=336&height=336&name=Megan_CaveCreek_HeadTrainer.png 336w" sizes="(max-width: 112px) 100vw, 112px"><strong>Megan Fiedler</strong><span class="pd-leader__role">Head Trainer and Location Manager</span><span class="pd-leader__meta">At Partners since 2016</span>
4111<p class="pd-leader__bio">Megan runs the Cave Creek campus and takes on most of its behavior modification cases, from misunderstood rescues to the dogs other trainers turn away.</p><span class="pd-leader__cred">AKC CGC Evaluator · IACP Professional Member · Pet CPR + First Aid</span><a class="pd-leader__cta" href="/team/megan-fiedler">View Profile</a></li><li class="pd-leader"><img class="pd-leader__photo" src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=112&height=112&name=Monica_CaveCreek_BoardingDaySchool_Manager.png" alt="Monica Jensen, Boarding and DaySchool Manager at the Cave Creek campus" width="112" height="112" loading="lazy" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=56&height=56&name=Monica_CaveCreek_BoardingDaySchool_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=112&height=112&name=Monica_CaveCreek_BoardingDaySchool_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=168&height=168&name=Monica_CaveCreek_BoardingDaySchool_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=224&height=224&name=Monica_CaveCreek_BoardingDaySchool_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=280&height=280&name=Monica_CaveCreek_BoardingDaySchool_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=336&height=336&name=Monica_CaveCreek_BoardingDaySchool_Manager.png 336w" sizes="(max-width: 112px) 100vw, 112px"><strong>Monica Jensen</strong><span class="pd-leader__role">Boarding and DaySchool Manager</span><span class="pd-leader__meta">At Partners since 2021</span><p class="pd-leader__bio">Monica builds confidence in growing puppies through socialization done right, and teaches Pre-School Puppy and Zoomers Agility.</p><span class="pd-leader__cred">Partners Dogs University · Pet CPR + First Aid · Dog Gurus</span><a class="pd-leader__cta" href="/team/monica-jensen">View Profile</a></li><li class="pd-leader"><img class="pd-leader__photo" src="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=112&height=112&name=Noa_CaveCreek_TeamSuccess_Manager.png" alt="Noa Holt-Shannon, Team Success Manager at the Cave Creek campus" width="112" height="112" loading="lazy" decoding="async" srcset="https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=56&height=56&name=Noa_CaveCreek_TeamSuccess_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=112&height=112&name=Noa_CaveCreek_TeamSuccess_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=168&height=168&name=Noa_CaveCreek_TeamSuccess_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=224&height=224&name=Noa_CaveCreek_TeamSuccess_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=280&height=280&name=Noa_CaveCreek_TeamSuccess_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=336&height=336&name=Noa_CaveCreek_TeamSuccess_Manager.png 336w" sizes="(max-width: 112px) 100vw, 112px"><strong>Noa Holt-Shannon</strong><span class="pd-leader__role">Team Success Manager</span><span class="pd-leader__meta">At Partners since 2018</span><p class="pd-leader__bio">Noa coaches trainers, pet parents, and dogs alike, from first puppies to intense behavior cases, so results hold long after class ends.</p><span class="pd-leader__cred">CGC Evaluator · Pet CPR + First Aid · Partners Dogs University</span>
4111<a class="pd-leader__cta" href="/team/noa-holt-shannon">View Profile</a></li></ul></div> 4112 4113 </div> 4114 </div> 4115</section> 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216<section class="pd-section pd-section--white pd2-sec pd2-sec--media" data-pd-ds2="media"> 4217 <div class="pd-container"> 4218 <div class="pd2-media pd2-media--reverse" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(28px,4vw,56px);align-items:center;"> 4219 4220 <figure class="pd2-media__figure pd-glow-card pd-img-zoom" data-pd-reveal="fade-right" data-pd-reveal-delay="100" style="margin:0;border-radius:var(--pd-radius-xl);overflow:hidden;aspect-ratio:4 / 5;--pd-fp:81% 34%;"> 4221 <img src="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Training/Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg?width=880&height=1100&name=Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg" alt="German Shepherd puppy working on a long line across the training room floor at Partners Dogs." loading="lazy" decoding="async" width="880" height="1100" style="width:100%;height:100%;object-fit:cover;display:block;" srcset="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Training/Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg?width=440&height=550&name=Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg 440w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Training/Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg?width=880&height=1100&name=Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg 880w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Training/Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg?width=1320&height=1650&name=Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg 1320w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Training/Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg?width=1760&height=2200&name=Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg 1760w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Training/Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg?width=2200&height=2750&name=Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg 2200w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Training/Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg?width=2640&height=3300&name=Bella_Cave-Creek_20260914_training-obedience_df1c12-enhanced-v1.jpg 2640w" sizes="(max-width: 880px) 100vw, 880px"> 4222 </figure> 4223 4224 <div class="pd2-media__text" data-pd-reveal="fade-left"> 4225 <p class="pd-eyebrow">Beyond training</p> 4226 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">Our Commitment to the Community</h2> 4227 <div class="pd-centered-content__body pd2-media__body"><p>Partners Dogs has always been more than a business. We are part of the fabric of the Scottsdale and Cave Creek communities, and we take that seriously.</p><p>Our trainers pursue continuing education year round, attending conferences, earning certifications, and staying current with the evolving science of canine behavior. We partner with local rescue organizations to rehabilitate dogs that might otherwise be unadoptable, and we work to keep professional training within reach for families across the Valley.</p><p>Better-trained dogs make better communities. Fewer surrenders, fewer bites, and more families actually enjoying their dogs instead of struggling with them. That is the world we are building, one dog at a time.</p></div> 4228 4229 <div class="pd-btn-row"><a href="/team" class="pd-btn pd-btn--accent" data-track="cta:media">Meet the team</a></div> 4230 </div> 4231 4232 </div> 4233 </div> 4234</section> 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303<section class="pd-section pd-section--navy pd2-sec pd2-sec--media" data-pd-ds2="media"> 4304 <div class="pd-container"> 4305 <div class="pd2-media" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(28px,4vw,56px);align-items:center;"> 4306 4307 <div class="pd2-media__text" data-pd-reveal="fade-right"> 4308 <p class="pd-eyebrow">See it for yourself</p> 4309 <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">The Next Chapter Is Your Dog's Story</h2> 4310 <div class="pd-centered-content__body pd2-media__body"><p>Walk either campus, watch training in action, and meet the trainers you just read about. Walk-ins are welcome during office hours, or start with a free call and we will map the right program before you ever visit.</p></div> 4311 4312 <div class="pd-btn-row"><a href="/locations" class="pd-btn pd-btn--accent" data-track="cta:media">Visit a Campus</a><a href="/schedule-call?hsLang=en" class="pd-btn pd-btn--outline-white" data-track="cta:media-2">Book a Free Call</a></div> 4313 </div> 4314 4315 <figure class="pd2-media__figure pd-glow-card pd-img-zoom" data-pd-reveal="fade-left" data-pd-reveal-delay="100" style="margin:0;border-radius:var(--pd-radius-xl);overflow:hidden;aspect-ratio:4 / 5;--pd-fp:62% 1%;"> 4316 <img src="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Portraits/Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg?width=880&height=1100&name=Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg" alt="A black German Shepherd lying down attentively on an indoor training mat with a blue slip lead." loading="lazy" decoding="async" width="880" height="1100" style="width:100%;height:100%;object-fit:cover;display:block;" srcset="https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Portraits/Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg?width=440&height=550&name=Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg 440w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Portraits/Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg?width=880&height=1100&name=Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg 880w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Portraits/Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg?width=1320&height=1650&name=Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg 1320w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Portraits/Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg?width=1760&height=2200&name=Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg 1760w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Portraits/Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg?width=2200&height=2750&name=Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg 2200w, https://partnersdogs.com/hs-fs/hubfs/Adventure%20Albums/Enhanced/Cave%20Creek/Portraits/Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg?width=2640&height=3300&name=Ari_Cave-Creek_20260724_portrait-pose_eb3039-enhanced-v1.jpg 2640w" sizes="(max-width: 880px) 100v
4316w, 880px"> 4317 </figure> 4318 4319 </div> 4320 </div> 4321</section> 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 <section class="pd-section pd-section--light pd-faq-dynamic-section"> 4336 <div class="pd-container pd-container--narrow"> 4337 <h2 class="pd-section-heading pd-section-heading--underline pd-text-center">Frequently Asked Questions</h2> 4338 4339 <div class="pd-faq-dynamic pd-faq-dynamic--cols" data-pd-faq-enhance> 4340 <div class="pd-rich-text pd-faq-dynamic__source" data-pd-faq-source><h3>How long has Partners Dog School been in business?</h3><p>Partners Dog School was founded in 1997, which means we have been training dogs in the Scottsdale and Cave Creek area for over 28 years. In that time we have trained more than 70,000 dogs across every breed, temperament, and behavior challenge you can imagine. What started as a single trainer with a passion for working with dogs other trainers wouldn't take has grown into a two-campus school with a team of 50+ professionals. Our longevity speaks for itself, families trust us because we have the track record to back up every promise we make.</p><h3>What training methods do you use?</h3><p>We are balanced trainers and we are tool-agnostic. We do not subscribe to any single ideology, we subscribe to outcomes for the dog and the family. Treats, markers, leash pressure, place training, slip leads, prong collars, e-collars, bark collars: we use whatever fits the dog in front of us and improves the relationship long-term. After 28 years and 70,000+ dogs trained, we have learned that limiting ourselves by equipment limits the outcome. Tools do not cause harm or pain, people do. The trainer's understanding, timing, and pairing are what make a tool safe and effective. Our staff attend conferences, pursue certifications, and constantly refine their craft. If you would like to walk through how we would approach your dog, schedule a free consultation.</p><h3>Are your trainers certified?</h3><p>Yes. Our trainers pursue ongoing certifications and continuing education year-round. More importantly, every trainer at Partners has been mentored internally through thousands of real-world cases, from basic puppy manners to severe aggression. We believe that certifications matter, but hands-on experience under expert mentorship is what truly makes a great trainer. Our head trainers have each worked with thousands of dogs individually, and many of our team members have been with Partners for five or more years. You can meet our team to learn more about each trainer's background and specialties.</p><h3>Do you work with all breeds and sizes?</h3><p>Absolutely. We work with every breed, size, and temperament, from eight-pound Chihuahuas to 150-pound Cane Corsos and everything in between. We also work with dogs of all ages, from young puppies in Pre-School Puppy to senior dogs who need a refresher or a behavior adjustment. At Partners, we factor in your dog's breed tendencies, personality, age, and history to develop a training plan tailored specifically to them. No two dogs get the same cookie-cutter approach because no two dogs are the same.</p><h3>What makes Partners different from other trainers?</h3><p>Three things set us apart: depth of experience, comprehensive follow-through, and genuine honesty. With over 70,000 dogs trained, there is virtually no behavioral scenario we have not seen and successfully addressed. But training your dog is only half the job, every program includes extensive owner education through private lessons and group classes so the results actually last when your dog goes home. And we will always be straight with you about what your dog needs, even if it means recommending a different program than the one you called about. We would rather match you with the right solution than sell you the wrong one. That integrity is why 40+ veterinary practices across the Phoenix metro area refer families to us.</p></div> 4341 </div> 4342 4343 <div class="pd-faqd__more"><a class="pd-btn pd-btn--outline" href="/en/faq" data-track="cta:faq-all">Browse All FAQs</a></div> 4344 4345 <noscript><style>[data-pd-faq-source] > * { display: block !important; }</style></noscript> 4346 </div> 4347 </section> 4348 4349 4350</div> 4351 4352
4353<script type="application/ld+json"> 4354{"@context":"https://schema.org","@type":"Service","name":"About Partners Dogs","description":"Father and son owned since 1997. Two Arizona campuses, 70,000+ dogs trained, 4.8 stars across 2,000+ Google reviews. Meet the family behind the results.","provider":{"@type":"LocalBusiness","name":"Partners Dog School","url":"https://partnersdogs.com"},"areaServed":["Scottsdale, AZ","Cave Creek, AZ","Phoenix, AZ"],"url":"https://partnersdogs.com/about"} 4355</script>
4355 4356 4357 4358
4359<script type="application/ld+json"> 4360{"@context":"https://schema.org","@type":"WebPage","url":"https://partnersdogs.com/about","name":"About Us: Family-Owned in Arizona Since 1997 | Partners Dogs","speakable":{"@type":"SpeakableSpecification","cssSelector":[".pd-h1",".pd-lede-intro"]}} 4361</script>
4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403
4404<script type="application/ld+json"> 4405{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"How long has Partners Dog School been in business?","acceptedAnswer":{"@type":"Answer","text":"Partners Dog School was founded in 1997, which means we have been training dogs in the Scottsdale and Cave Creek area for over 28 years. In that time we have trained more than 70,000 dogs across every breed, temperament, and behavior challenge you can imagine. What started as a single trainer with a passion for working with dogs other trainers wouldn't take has grown into a two-campus school with a team of 50+ professionals. Our longevity speaks for itself, families trust us because we have the track record to back up every promise we make."}},{"@type":"Question","name":"What training methods do you use?","acceptedAnswer":{"@type":"Answer","text":"We are balanced trainers and we are tool-agnostic. We do not subscribe to any single ideology, we subscribe to outcomes for the dog and the family. Treats, markers, leash pressure, place training, slip leads, prong collars, e-collars, bark collars: we use whatever fits the dog in front of us and improves the relationship long-term. After 28 years and 70,000+ dogs trained, we have learned that limiting ourselves by equipment limits the outcome. Tools do not cause harm or pain, people do. The trainer's understanding, timing, and pairing are what make a tool safe and effective. Our staff attend conferences, pursue certifications, and constantly refine their craft. If you would like to walk through how we would approach your dog, schedule a free consultation."}},{"@type":"Question","name":"Are your trainers certified?","acceptedA
4405nswer":{"@type":"Answer","text":"Yes. Our trainers pursue ongoing certifications and continuing education year-round. More importantly, every trainer at Partners has been mentored internally through thousands of real-world cases, from basic puppy manners to severe aggression. We believe that certifications matter, but hands-on experience under expert mentorship is what truly makes a great trainer. Our head trainers have each worked with thousands of dogs individually, and many of our team members have been with Partners for five or more years. You can meet our team to learn more about each trainer's background and specialties."}},{"@type":"Question","name":"Do you work with all breeds and sizes?","acceptedAnswer":{"@type":"Answer","text":"Absolutely. We work with every breed, size, and temperament, from eight-pound Chihuahuas to 150-pound Cane Corsos and everything in between. We also work with dogs of all ages, from young puppies in Pre-School Puppy to senior dogs who need a refresher or a behavior adjustment. At Partners, we factor in your dog's breed tendencies, personality, age, and history to develop a training plan tailored specifically to them. No two dogs get the same cookie-cutter approach because no two dogs are the same."}},{"@type":"Question","name":"What makes Partners different from other trainers?","acceptedA
4405nswer":{"@type":"Answer","text":"Three things set us apart: depth of experience, comprehensive follow-through, and genuine honesty. With over 70,000 dogs trained, there is virtually no behavioral scenario we have not seen and successfully addressed. But training your dog is only half the job, every program includes extensive owner education through private lessons and group classes so the results actually last when your dog goes home. And we will always be straight with you about what your dog needs, even if it means recommending a different program than the one you called about. We would rather match you with the right solution than sell you the wrong one. That integrity is why 40+ veterinary practices across the Phoenix metro area refer families to us."}}]} 4406</script>
4406 4407 4408 4409 4410
4411<script> 4412(function () { 4413 function enhance(block) { 4414 if (block.getAttribute('data-pd-faq-enhanced') === 'true') return; 4415 var source = block.querySelector('[data-pd-faq-source]') || block; 4416 var nodes = Array.prototype.slice.call(source.childNodes); 4417 var pairs = [], cur = null; 4418 nodes.forEach(function (n) { 4419 var isH = n.nodeType === 1 && /^H[2-4]$/.test(n.tagName); 4420 if (isH) { cur = { q: (n.textContent || '').trim(), a: [] }; pairs.push(cur); } 4421 else if (cur) { 4422 if (n.nodeType === 1) cur.a.push(n.outerHTML); 4423 else if (n.nodeType === 3 && n.nodeValue.trim()) cur.a.push('<p>' + n.nodeValue.trim() + '</p>'); 4424 } 4425 }); 4426 if (!pairs.length) { block.setAttribute('data-pd-faq-enhanced', 'true'); return; } 4427 var frag = document.createDocumentFragment(); 4428 pairs.forEach(function (p) { 4429 var d = document.createElement('details'); d.className = 'pd-faqd__item'; 4430 var s = document.createElement('summary'); s.className = 'pd-faqd__q'; 4431 var tx = document.createElement('span'); tx.className = 'pd-faqd__q-text'; tx.textContent = p.q; 4432 var ic = document.createElement('span'); ic.className = 'pd-faqd__icon'; ic.setAttribute('aria-hidden', 'true'); 4433 s.appendChild(tx); s.appendChild(ic); 4434 var a = document.createElement('div'); a.className = 'pd-faqd__a'; a.innerHTML = p.a.join(''); 4435 d.appendChild(s); d.appendChild(a); frag.appendChild(d); 4436 }); 4437 if (source !== block) source.parentNode.removeChild(source); 4438 else while (block.firstChild) block.removeChild(block.firstChild); 4439 block.appendChild(frag); 4440 var dItems = block.querySelectorAll('.pd-faqd__item'); 4441 Array.prototype.forEach.call(dItems, function (det) { 4442 det.addEventListener('toggle', function () { 4443 if (det.open) { Array.prototype.forEach.call(dItems, function (o) { if (o !== det && o.open) o.open = false; }); } 4444 }); 4445 }); 4446 block.setAttribute('data-pd-faq-enhanced', 'true'); 4447 } 4448 function run() { Array.prototype.forEach.call(document.querySelectorAll('[data-pd-faq-enhance]'), enhance); } 4449 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run(); 4450})(); 4451</script>
4451 4452 4453
4454<script> 4455(function () { 4456 function run() { 4457 var items = document.querySelectorAll('[data-pd-video-facade] .pd-sec--video__item[data-video-id]'); 4458 Array.prototype.forEach.call(items, function (item) { 4459 if (item.getAttribute('data-pd-video-ready') === 'true') return; 4460 item.setAttribute('data-pd-video-ready', 'true'); 4461 item.addEventListener('click', function () { 4462 var id = item.getAttribute('data-video-id'); 4463 if (!id) return; 4464 var el; 4465 if (/^https?:\/\//i.test(id) || /\.(mp4|webm|mov|m4v)(\?|$)/i.test(id)) { 4466 // Self-hosted (HubSpot File Manager) video -> native HTML5 player 4467 el = document.createElement('video'); 4468 el.src = id; el.controls = true; el.autoplay = true; el.setAttribute('playsinline', ''); 4469 el.setAttribute('controlslist', 'nodownload'); 4470 el.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;border:0;background:#000;object-fit:cover;z-index:3;'; 4471 } else { 4472 // YouTube id -> embed 4473 el = document.createElement('iframe'); 4474 el.src = 'https://www.youtube.com/embed/' + id + '?autoplay=1&rel=0'; 4475 el.title = (item.querySelector('img') && item.querySelector('img').alt) || 'Video'; 4476 el.allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share'; 4477 el.allowFullscreen = true; 4478 } 4479 item.innerHTML = ''; 4480 item.appendChild(el); 4481 }); 4482 }); 4483 } 4484 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run(); 4485})(); 4486</script>
4486 4487 4488
4489<script> 4490(function () { 4491 if (window.__pdDs2Boot) { return; } window.__pdDs2Boot = true; 4492 4493 function playFacade(card) { 4494 if (!card || card.classList.contains('is-playing')) { return; } 4495 var id = card.getAttribute('data-yt-facade'); 4496 if (!id) { return; } 4497 var el; 4498 if (/^https?:\/\//i.test(id) || /\.(mp4|webm|mov|m4v)(\?|$)/i.test(id)) { 4499 // Self-hosted (HubSpot File Manager) video -> native HTML5 player (v1 parity) 4500 el = document.createElement('video'); 4501 el.src = id; el.controls = true; el.autoplay = true; el.setAttribute('playsinline', ''); 4502 el.setAttribute('controlslist', 'nodownload'); 4503 el.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;border:0;background:#000;object-fit:cover;z-index:3;'; 4504 } else { 4505 // YouTube id -> privacy-enhanced embed, autoplay on inject (contract: facades only) 4506 el = document.createElement('iframe'); 4507 el.src = 'https://www.youtube-nocookie.com/embed/' + id + '?autoplay=1&rel=0'; 4508 el.title = card.getAttribute('data-yt-title') || 'Video'; 4509 el.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share'); 4510 el.setAttribute('allowfullscreen', ''); 4511 } 4512 card.appendChild(el); 4513 card.classList.add('is-playing'); 4514 } 4515 4516 function scrollRail(name, dir) { 4517 var rail = document.querySelector('[data-scroller="' + name + '"]'); 4518 if (!rail) { return; } 4519 var first = rail.firstElementChild; 4520 var step = first ? (first.getBoundingClientRect().width + 20) * 2 : rail.clientWidth * 0.8; 4521 var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 4522 rail.scrollBy({ left: dir * step, behavior: reduce ? 'auto' : 'smooth' }); 4523 } 4524 4525 document.addEventListener('click', function (e) { 4526 if (!e.target || !e.target.closest) { return; } 4527 var card = e.target.closest('[data-yt-facade]'); 4528 if (card) { playFacade(card); return; } 4529 var nav = e.target.closest('[data-pd-rail-nav]'); 4530 if (nav) { scrollRail(nav.getAttribute('data-pd-rail-nav'), nav.getAttribute('data-dir') === 'back' ? -1 : 1); } 4531 }); 4532 4533 document.addEventListener('keydown', function (e) { 4534 if (e.key !== 'Enter' && e.key !== ' ') { return; } 4535 if (!e.target || !e.target.closest) { return; } 4536 var card = e.target.closest('[data-yt-facade]'); 4537 if (card) { e.preventDefault(); playFacade(card); } 4538 }); 4539})(); 4540</script>
4540 4541 4542 4543 </main> 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655<style> 4656/* ============================================================ 4657 Footer v2 layout. Surviving v1 elements reuse the main.css 4658 .pd-footer__* system; everything below is either the v1 shell 4659 override (background) or NEW v2 layout that main.css does not 4660 know about. Loaded after main.css, so equal-specificity rules 4661 here win by document order. 4662 ============================================================ */ 4663/* Round 4 (owner): smaller footer logo. Width cap + auto height; the v1 4664 max-height:none escape stays so the theme-overrides 56px cap cannot shrink 4665 the mark below the intended display size. */ 4666.pd-footer__brand img { max-height: none; } 4667/* The logo widget emits an inline style (width:200px) on its img, so the cap 4668 needs !important to win. Scoped to the brand column, which contains the 4669 logo regardless of how the widget nests its anchor/span wrappers. */ 4670.pd-footer__brand img { 4671 max-width: 132px !important; 4672 width: auto !important; 4673 height: auto !important; 4674} 4675 4676.pd-footer { 4677 background: radial-gradient(circle at top left, rgba(47, 184, 170, .16), transparent 32%), linear-gradient(136deg, #3FD9CE, #071C2F, #071C2F); 4678} 4679 4680/* ----- Single band: brand rail + 3 link columns + connect rail ----- 4681 v2.2 owner fix ("footer has too much blank space"): the old two-band layout 4682 left a full-width void because the link columns ended ~300px above the brand 4683 rail while Visit Us / Talk To Us sat in their own row below. The connect 4684 block now lives INSIDE the grid as a right-hand rail with the location cards 4685 stacked, so all four regions run to roughly the same depth and the void is 4686 gone. 4687 4688 The v2.0 type squeeze (0.88rem links, 7px list gap) and the two-line heading 4689 reservation are all deleted: three columns have room for main.css's own 4690 0.93rem / 8px gap, and every heading here is a single short line. */ 4691.pd-footer__grid { 4692 display: grid; 4693 grid-template-columns: minmax(220px, 1.05fr) minmax(0, 2.45fr) minmax(250px, 1.15fr); 4694 gap: 36px 44px; 4695 align-items: start; 4696 padding-top: 34px; 4697 padding-bottom: 26px; 4698} 4699 4700.pd-footer__cols { 4701 display: grid; 4702 grid-template-columns: repeat(3, minmax(0, 1fr)); 4703 gap: 26px 24px; 4704} 4705 4706/* Round 6 (owner): stacked columns dissolved into SIX standalone groups in a 4707 3x2 row-aligned grid (Training Programs / Care & Services / Curriculum on 4708 row 1, Get Started / About / Follow Us on row 2). Rows align headings, so 4709 columns read uniform; on mobile the 2-up grid fills 2x3 with no empty cell, 4710 which kills the blank space the stacked layout left. */ 4711 4712/* ----- Social row (replaces the v1 Call Now / Take Quiz buttons) ----- */ 4713.pd-footer__social { 4714 display: flex; 4715 flex-wrap: wrap; 4716 gap: 10px; 4717 margin-top: 2px; 4718} 4719 4720.pd-footer__social a { 4721 display: inline-flex; 4722 align-items: center; 4723 justify-content: center; 4724 width: 38px; 4725 height: 38px; 4726 border-radius: 999px; 4727 background: rgba(255, 255, 255, 0.08); 4728 box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.14); 4729 color: rgba(255, 255, 255, 0.88); 4730 transition: background 200ms ease, color 200ms ease, transform 200ms ease; 4731} 4732 4733/* Hover pair: #022D41 navy glyph on #34C6B9 teal = 6.8:1 (computed), clearing 4734 AA for text (4.5:1) and non-text contrast (3:1). Default state is a near 4735 white glyph on the dark footer, which is well past both. */ 4736.pd-footer__social a:hover, 4737.pd-footer__social a:focus-visible { 4738 background: var(--pd-teal, #34C6B9); 4739 color: var(--pd-navy, #022D41); 4740 transform: translateY(-2px); 4741} 4742 4743.pd-footer__social svg { 4744 width: 18px; 4745 height: 18px; 4746 display: block; 4747 fill: currentColor; 4748} 4749 4750@media (prefers-reduced-motion: reduce) { 4751 .pd-footer__social a { transition: none; } 4752 .pd-footer__social a:hover, 4753 .pd-footer__social a:focus-visible { transform: none; } 4754} 4755 4756/* ----- Connect rail: Visit Us + Talk To Us (grid child, desktop) ----- */ 4757.pd-footer__connect { 4758 display: block; 4759} 4760 4761/* Talk To Us stacks under the two location cards with the same 18px offset the 4762 stacked link-column headings use. Cards stack vertically in the rail. */
4763.pd-footer__connect .pd-footer__contact { 4764 margin-top: 18px; 4765} 4766 4767.pd-footer__location-grid--pair { 4768 grid-template-columns: minmax(0, 1fr); 4769 gap: 12px; 4770} 4771 4772/* The postal address now sits in its own <address> inside the card, so it needs 4773 the paragraph treatment main.css gives .pd-footer__location-card p, plus the 4774 italic reset that the card class used to supply when it WAS the <address>. */ 4775.pd-footer__location-card address { 4776 margin: 0 0 8px; 4777 font-style: normal; 4778 font-size: 0.88rem; 4779 line-height: 1.6; 4780} 4781 4782/* Small in-card link under each address (360 tour). The v2.0 "Book a tour" 4783 sibling was removed in the v2.1 owner trim; the rule stays a flex row so a 4784 future approved second link needs no CSS change. */ 4785.pd-footer__card-links { 4786 display: flex; 4787 flex-wrap: wrap; 4788 gap: 6px 14px; 4789 margin-top: 12px; 4790 padding-top: 10px; 4791 border-top: 1px solid rgba(255, 255, 255, 0.12); 4792} 4793 4794/* #34C6B9 on the card surface (white 6% over the footer gradient) = 6.2:1. */ 4795.pd-footer__card-links a { 4796 font-size: 0.8rem; 4797 font-weight: 700; 4798 color: var(--pd-teal, #34C6B9); 4799} 4800 4801.pd-footer__card-links a:hover, 4802.pd-footer__card-links a:focus-visible { 4803 color: var(--pd-yellow, #FFDE59); 4804} 4805 4806/* ----- Round 4 (owner): tighter vertical rhythm, the footer ran too long. 4807 Same-specificity overrides of main.css values win by document order. ----- */ 4808/* main.css puts the band's padding on __cta-inner (48px/36px base). */ 4809.pd-footer__cta-inner { padding-top: 30px; padding-bottom: 24px; gap: 18px 32px; } 4810.pd-footer__cta-copy h2 { margin: 6px 0 10px; } 4811.pd-footer__tagline { margin: 12px 0 4px; } 4812.pd-footer__service-areas { margin: 0 0 10px; font-size: 0.85rem; } 4813.pd-footer__highlights { gap: 6px; margin-bottom: 2px; } 4814.pd-footer .pd-chip--soft { font-size: 10.5px; padding: 5px 10px; line-height: 1.35; } 4815.pd-footer__social { margin-top: 10px; } 4816.pd-footer__location-card { padding: 12px 14px; } 4817.pd-footer__contact-card { padding: 12px 14px; } 4818.pd-footer__hours { margin-top: 8px; } 4819.pd-footer__hours-row { margin-top: 6px; } 4820.pd-footer__bottom { padding-top: 16px; padding-bottom: 16px; } 4821 4822/* ----- Round 5 (owner, 2026-08-18): sharpen the pre-footer CTA band. 4823 Same markup, CSS only: teal glow, centered vertical rhythm, clearer 4824 copy contrast, button lift on hover, full-width buttons on phones. ----- */ 4825.pd-footer__cta-band { 4826 background: 4827 radial-gradient(110% 150% at 100% 0%, rgba(52, 198, 185, 0.16), transparent 52%); 4828} 4829.pd-footer__cta-inner { align-items: center; } 4830.pd-footer__cta-copy h2 { font-size: clamp(1.7rem, 3vw, 2.3rem); line-height: 1.12; } 4831.pd-footer__cta-copy p { color: rgba(255, 255, 255, 0.85); } 4832.pd-footer__cta-actions .pd-btn { transition: transform 0.18s ease, box-shadow 0.18s ease; } 4833.pd-footer__cta-actions .pd-btn:hover { transform: translateY(-2px); box-shadow: 0 12px 28px rgba(1, 20, 30, 0.4); } 4834@media (max-width: 640px) { 4835 .pd-footer__cta-actions { width: 100%; flex-wrap: wrap; gap: 10px; } 4836 .pd-footer__cta-actions .pd-btn { flex: 1 1 100%; text-align: center; } 4837} 4838 4839/* ----- Responsive ----- */ 4840/* Brand drops above the links and takes the full row width, matching the v1 4841 breakpoint where .pd-footer__brand spanned 1 / -1. The connect rail becomes 4842 a full-width row again: location cards 2-up beside the Talk card. */ 4843@media (max-width: 1100px) { 4844 .pd-footer__grid { 4845 grid-template-columns: minmax(0, 1fr); 4846 gap: 30px; 4847 } 4848 .pd-footer__connect { 4849 display: grid; 4850 grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); 4851 gap: 24px 32px; 4852 align-items: start; 4853 } 4854 .pd-footer__connect .pd-footer__contact { 4855 margin-top: 0; 4856 } 4857 .pd-footer__location-grid--pair { 4858 grid-template-columns: repeat(2, minmax(0, 1fr)); 4859 gap: 16px; 4860 } 4861} 4862 4863@media (max-width: 820px) { 4864 .pd-footer__cols { 4865 grid-template-columns: repeat(2, minmax(0, 1fr)); 4866 gap: 24px 18px; 4867 } 4868 .pd-footer__connect { 4869 grid-template-columns: minmax(0, 1fr); 4870 } 4871} 4872 4873@media (max-width: 560px) { 4874 .pd-footer__grid { 4875 padding-top: 32px; 4876 } 4877 .pd-footer__cols { 4878 grid-template-columns: repeat(2, minmax(0, 1fr)); 4879 gap: 22px 14px; 4880 }
4881 .pd-footer__cols .pd-footer__nav-group a { 4882 font-size: 0.85rem; 4883 } 4884 .pd-footer__location-grid--pair { 4885 grid-template-columns: minmax(0, 1fr); 4886 } 4887} 4888</style> 4889 4890<footer class="pd-footer pd-footer--v2" role="contentinfo"> 4891 4892 4893 <section class="pd-footer__cta-band"> 4894 <div class="pd-container pd-footer__cta-inner"> 4895 <div class="pd-footer__cta-copy"> 4896 <p class="pd-eyebrow pd-eyebrow--light">Build the right next step</p> 4897 <h2>Ready to build a clear plan for your dog?</h2> 4898 <p>Tell us what is happening at home and we will recommend the right training path, timeline, and next step.</p> 4899 </div> 4900 <div class="pd-footer__cta-actions"> 4901 4902 <a href="/pd360-assessment" class="pd-btn pd-btn--accent pd-btn--lg" data-track="cta:footer:pd360">Schedule a PD360 Assessment</a> 4903 <a href="/contact-us" class="pd-btn pd-btn--outline-white pd-btn--lg" data-track="cta:footer:message">Send a Message</a> 4904 4905 </div> 4906 </div> 4907 </section> 4908 4909 4910 <div class="pd-container pd-footer__grid"> 4911 4912 <div class="pd-footer__brand"> 4913 <a href="/" class="pd-footer__logo" aria-label="Partners Dogs homepage"> 4914 4915 <span id="hs_cos_wrapper_footer_logo" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_logo" style="" data-hs-cos-general-type="widget" data-hs-cos-type="logo"></span></a><a href="https://PartnersDogs.com" id="hs-link-footer_logo" style="border-width:0px;border:0px;"><img src="https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=200&height=200&name=PD-logo-2024-3.png" class="hs-image-widget " height="200" style="height: auto;width:200px;border-width:0px;border:0px;" width="200" alt="Partners Dogs" title="Partners Dogs" loading="lazy" srcset="https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=100&height=100&name=PD-logo-2024-3.png 100w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=200&height=200&name=PD-logo-2024-3.png 200w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=300&height=300&name=PD-logo-2024-3.png 300w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=400&height=400&name=PD-logo-2024-3.png 400w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=500&height=500&name=PD-logo-2024-3.png 500w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=600&height=600&name=PD-logo-2024-3.png 600w" sizes="(max-width: 200px) 100vw, 200px"></a> 4916 4917 <p class="pd-footer__tagline">Transforming dogs. Enriching lives.</p> 4918 <p class="pd-footer__service-areas">Serving Cave Creek | Anthem | Scottsdale | Paradise Valley | Phoenix | Mesa | Tempe</p> 4919 <div class="pd-footer__highlights"> 4920 <span class="pd-chip pd-chip--soft">Behavior support from mild frustration to severe cases</span> 4921 <span class="pd-chip pd-chip--soft">Programs spanning private lessons, camps, and day school</span> 4922 <span class="pd-chip pd-chip--soft">Owner coaching that carries progress back home</span> 4923 </div> 4924 </div> 4925 4926 <div class="pd-footer__cols"> 4927 4928 4929 4930 <nav class="pd-footer__nav-group" aria-label="Training Programs"> 4931 <p class="pd-footer__section-heading">Training Programs</p> 4932 4933 <ul> 4934 <li><a href="/training-camp">Foundation Camp</a></li> 4935 <li><a href="/behavior-camp">Behavior Camp</a></li> 4936 <li><a href="/transform-camp">Transform Camp</a></li> 4937 <li><a href="/private-lessons">Private Lessons</a></li> 4938 <li><a href="/group-classes">Group Classes</a></li> 4939 </ul> 4940 4941 </nav> 4942 4943 <nav class="pd-footer__nav-group" aria-label="Care & Services"> 4944 <p class="pd-footer__section-heading">Care & Services</p> 4945 4946 <ul> 4947 <li><a href="/daycare">DaySchool & DayCamp</a></li> 4948 <li><a href="/en/dog-boarding">Dog Boarding</a></li> 4949 <li><a href="/snake-avoidance">Snake Avoidance</a></li> 4950 <li><a href="/en/puppy-program">Puppy Program</a></li> 4951 </ul> 4952 4953 </nav> 4954 4955 <nav class="pd-footer__nav-group" aria-label="Curriculum"> 4956 <p class="pd-footer__section-heading">Curriculum</p> 4957 4958 <ul> 4959 4960 <li><a href="/group-classes">Grade-Level Curriculum</a></li> 4961 <li><a href="/training-journey">Training Journey</a></li> 4962 <li><a href="/our-methodology">Our Methodology</a></li> 4963 </ul> 4964 4965 </nav> 4966 4967 <nav class="pd-footer__nav-group" aria-label="Get Started"> 4968 <p class="pd-footer__section-heading">Get Started</p> 4969 4970 <ul> 4971 4972 <li><a href="/quote">Get a Quote</a></li> 4973 <li><a href="/pd360-assessment">PD360 Assessment</a></li> 4974 <li><a href="/schedule-call">Schedule a Call</a></li> 4975 </ul> 4976 4977 </nav> 4978 4979 <nav class="pd-footer__nav-group" aria-label="About"> 4980 <p class="pd-footer__section-heading">About</p> 4981 4982 <ul> 4983 <li><a href="/en/about">About Partners Dogs</a></li> 4984 <li><a href="/reviews">Reviews</a></li> 4985 <li><a href="/en/faq">FAQ</a></li> 4986 4987 <li><a href="https://blog.partnersdogs.com/" rel="noopener" data-track="footer:blog">Training Tips & Blog</a></li> 4988 </ul> 4989 4990 </nav> 4991 4992 <div class="pd-footer__nav-group" aria-label="Follow Us" role="group"> 4993 <p class="pd-footer__section-heading">Follow Us</p> 4994 <div class="pd-footer__social"> 4995 4996 <a href="https://www.facebook.com/PartnersDogTrainingSchool/" aria-label="Partners Dogs on Facebook" rel="noopener" target="_blank" data-track="footer:social:facebook"> 4997 <svg viewbox="0 0 24 24" aria-hidden="true" focusable="false">
4997<path d="M22 12.06C22 6.5 17.52 2 12 2S2 6.5 2 12.06c0 5 3.66 9.15 8.44 9.94v-7.03H7.9v-2.91h2.54V9.85c0-2.51 1.49-3.9 3.77-3.9 1.09 0 2.24.2 2.24.2v2.46h-1.26c-1.24 0-1.63.78-1.63 1.57v1.88h2.78l-.45 2.91h-2.33V22c4.78-.79 8.44-4.94 8.44-9.94z" /></svg> 4998 </a> 4999 <a href="https://www.instagram.com/partnersdogs/" aria-label="Partners Dogs on Instagram" rel="noopener" target="_blank" data-track="footer:social:instagram"> 5000 <svg viewbox="0 0 24 24" aria-hidden="true" focusable="false"><path fill-rule="evenodd" d="M12 2c2.72 0 3.06.01 4.12.06 1.07.05 1.79.22 2.43.47.66.26 1.22.6 1.77 1.15.55.55.89 1.11 1.15 1.77.25.64.42 1.36.47 2.43.05 1.06.06 1.4.06 4.12s-.01 3.06-.06 4.12c-.05 1.07-.22 1.79-.47 2.43-.26.66-.6 1.22-1.15 1.77-.55.55-1.11.89-1.77 1.15-.64.25-1.36.42-2.43.47-1.06.05-1.4.06-4.12.06s-3.06-.01-4.12-.06c-1.07-.05-1.79-.22-2.43-.47a4.9 4.9 0 0 1-1.77-1.15 4.9 4.9 0 0 1-1.15-1.77c-.25-.64-.42-1.36-.47-2.43C2.01 15.06 2 14.72 2 12s.01-3.06.06-4.12c.05-1.07.22-1.79.47-2.43.26-.66.6-1.22 1.15-1.77a4.9 4.9 0 0 1 1.77-1.15c.64-.25 1.36-.42 2.43-.47C8.94 2.01 9.28 2 12 2zm0 1.8c-2.67 0-2.99.01-4.04.06-.98.04-1.5.2-1.86.34-.47.18-.8.4-1.15.75-.35.35-.57.68-.75 1.15-.14.36-.3.88-.34 1.86-.05 1.05-.06 1.37-.06 4.04s.01 2.99.06 4.04c.04.98.2 1.5.34 1.86.18.47.4.8.75 1.15.35.35.68.57 1.15.75.36.14.88.3 1.86.34 1.05.05 1.37.06 4.04.06s2.99-.01 4.04-.06c.98-.04 1.5-.2 1.86-.34.47-.18.8-.4 1.15-.75.35-.35.57-.68.75-1.15.14-.36.3-.88.34-1.86.05-1.05.06-1.37.06-4.04s-.01-2.99-.06-4.04c-.04-.98-.2-1.5-.34-1.86a3.1 3.1 0 0 0-.75-1.15 3.1 3.1 0 0 0-1.15-.75c-.36-.14-.88-.3-1.86-.34-1.05-.05-1.37-.06-4.04-.06zm0 3.07a5.13 5.13 0 1 1 0 10.26 5.13 5.13 0 0 1 0-10.26zm0 1.8a3.33 3.33 0 1 0 0 6.66 3.33 3.33 0 0 0 0-6.66zm5.34-3.2a1.2 1.2 0 1 1 0 2.4 1.2 1.2 0 0 1 0-2.4z" /></svg> 5001 </a> 5002 <a href="https://www.youtube.com/@partnersdogs" aria-label="Partners Dogs on YouTube" rel="noopener" target="_blank" data-track="footer:social:youtube"> 5003 <svg viewbox="0 0 24 24" aria-hidden="true" focusable="false"><path fill-rule="evenodd" d="M23.5 6.9a3.02 3.02 0 0 0-2.12-2.14C19.5 4.25 12 4.25 12 4.25s-7.5 0-9.38.51A3.02 3.02 0 0 0 .5 6.9C0 8.79 0 12 0 12s0 3.21.5 5.1a3.02 3.02 0 0 0 2.12 2.14c1.88.51 9.38.51 9.38.51s7.5 0 9.38-.51a3.02 3.02 0 0 0 2.12-2.14c.5-1.89.5-5.1.5-5.1s0-3.21-.5-5.1zM9.55 15.57V8.43L15.82 12l-6.27 3.57z" /></svg> 5004 </a> 5005 <a href="https://www.tiktok.com/@partnersdogs" aria-label="Partners Dogs on TikTok" rel="noopener" target="_blank" data-track="footer:social:tiktok"> 5006 <svg viewbox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M16.6 5.82A4.28 4.28 0 0 1 15.54 3h-3.09v12.4a2.59 2.59 0 0 1-2.59 2.5 2.59 2.59 0 0 1-2.59-2.59 2.59 2.59 0 0 1 3.17-2.53v-3.1a5.66 5.66 0 0 0-.58-.03A5.69 5.69 0 0 0 4.17 15.3 5.69 5.69 0 0 0 9.86 21a5.69 5.69 0 0 0 5.69-5.69V9.01a7.35 7.35 0 0 0 4.3 1.38V7.3a4.28 4.28 0 0 1-3.25-1.48z" /></svg> 5007 </a> 5008 5009 </div> 5010 </div> 5011 5012 </div> 5013 5014 5015 <div class="pd-footer__connect"> 5016 5017 <div class="pd-footer__visit"> 5018 <p class="pd-footer__section-heading">Visit Us</p> 5019 5020 <div class="pd-footer__location-grid pd-footer__location-grid--pair"> 5021 <div class="pd-footer__location-card"> 5022 <p class="pd-footer__location-title">Scottsdale</p> 5023 <address>8642 E Shea Blvd, Scottsdale, AZ 85260</address> 5024 5025 <nav class="pd-footer__card-links" aria-label="Scottsdale campus links"> 5026 5027 <a href="/scottsdale-virtual-tour">360 tour</a> 5028 5029 </nav> 5030 </div> 5031 <div class="pd-footer__location-card"> 5032 <p class="pd-footer__location-title">Cave Creek</p> 5033 <address>4640 E Forest Pleasant Pl, Cave Creek, AZ 85331</address> 5034 5035 <nav class="pd-footer__card-links" aria-label="Cave Creek campus links"> 5036 5037 <a href="/cave-creek-virtual-tour">360 tour</a> 5038 5039 </nav> 5040 </div> 5041 </div> 5042 </div> 5043 5044 <div class="pd-footer__contact"> 5045 <p class="pd-footer__section-heading">Talk To Us</p>
5046 <div class="pd-footer__contact-card"> 5047 5048 <p><a href="tel:+14805956700" data-track="cta:footer:phone">480-595-6700</a></p> 5049 <p><a href="mailto:[email protected]" data-track="cta:footer:email">[email protected]</a></p> 5050 <div class="pd-footer__hours"> 5051 5052 <div class="pd-footer__hours-row"><span>Office</span><strong>Mon-Fri: 8am-5pm | Sat: 8am-2pm | Sunday: Closed</strong></div> 5053 <div class="pd-footer__hours-row"><span>DaySchool</span><strong>Mon-Fri: 7am-6pm | Sat: 8am-4pm | Sunday: Closed</strong></div> 5054 </div> 5055 </div> 5056 </div> 5057 5058 </div> 5059 </div> 5060 5061 5062 <div class="pd-container pd-footer__bottom"> 5063 <p>© 2026 Partners Dogs. All rights reserved.</p> 5064 <nav class="pd-footer__legal" aria-label="Footer utility and legal links"> 5065 5066 5067 <a href="/careers">Careers</a> 5068 <span aria-hidden="true">·</span> 5069 <a href="/parent-portal">Parent Portal</a> 5070 <span aria-hidden="true">·</span> 5071 <a href="/privacy-policy">Privacy Policy</a> 5072 <span aria-hidden="true">·</span> 5073 <a href="/terms-and-conditions">Terms of Service</a> 5074 5075 </nav> 5076 </div> 5077</footer> 5078 5079 5080 5081 <div id="hs_cos_wrapper_cookie_consent" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module" style="" data-hs-cos-general-type="widget" data-hs-cos-type="module">
5082<script> 5083(function () { 5084 try { 5085 var m = document.cookie.match(/(?:^|;\s*)pd_consent_prefs=([^;]*)/); 5086 if (m && decodeURIComponent(m[1]).indexOf('"v":1') !== -1) { 5087 document.documentElement.classList.add('pd-consent-stored'); 5088 } 5089 } catch (e) { /* fail open: banner stays visible */ } 5090})(); 5091</script>
5091 5092 5093<noscript><style>#pd-cookie-consent { display: none !important; }</style></noscript> 5094<div id="pd-cookie-consent" class="pd-cookie-consent" role="dialog" aria-label="Cookie consent" aria-describedby="pd-cookie-message"> 5095 <div class="pd-cookie-consent__inner"> 5096 <p id="pd-cookie-message" class="pd-cookie-consent__message"> 5097 We use cookies to improve your experience. By continuing, you consent to our use of cookies. 5098 5099 5100 <a href="https://partnersdogs.com/privacy-policy" class="pd-cookie-consent__link">Privacy Policy</a> 5101 5102 </p> 5103 <div class="pd-cookie-consent__actions"> 5104 <button type="button" class="pd-btn pd-btn--accent pd-cookie-consent__accept" id="pd-cookie-accept"> 5105 Accept 5106 </button> 5107 <button type="button" class="pd-btn pd-btn--outline-white pd-cookie-consent__decline" id="pd-cookie-decline"> 5108 Decline 5109 </button> 5110 <button type="button" class="pd-cookie-consent__manage" id="pd-cookie-manage" aria-haspopup="dialog" aria-controls="pd-cookie-prefs"> 5111 Manage Preferences 5112 </button> 5113 </div> 5114 </div> 5115</div> 5116 5117<div id="pd-cookie-prefs-backdrop" class="pd-cookie-prefs-backdrop" hidden></div> 5118 5119<div id="pd-cookie-prefs" class="pd-cookie-prefs" role="dialog" aria-modal="true" aria-labelledby="pd-cookie-prefs-title" aria-hidden="true" hidden> 5120 <div class="pd-cookie-prefs__panel"> 5121 <div class="pd-cookie-prefs__header"> 5122 <h2 id="pd-cookie-prefs-title" class="pd-cookie-prefs__title">Manage Cookie Preferences</h2> 5123 <button type="button" class="pd-cookie-prefs__close" id="pd-cookie-prefs-close" aria-label="Close cookie preferences">Ã</button> 5124 </div> 5125 5126 <p class="pd-cookie-prefs__intro"> 5127 We respect your right to privacy. You can opt out of any non-essential category below. Strictly necessary cookies are always active because the site cannot function without them. For more information see our 5128 5129 5130 <a href="https://partnersdogs.com/privacy-policy" class="pd-cookie-consent__link">Privacy Policy</a> 5131 5132 </p> 5133 5134 <ul class="pd-cookie-prefs__list"> 5135 <li class="pd-cookie-prefs__category"> 5136 <div class="pd-cookie-prefs__category-text"> 5137 <span class="pd-cookie-prefs__category-name">Strictly Necessary</span> 5138 <span class="pd-cookie-prefs__category-desc">Required for the website to function, such as security, navigation and remembering your cookie choices. These cannot be switched off.</span> 5139 </div> 5140 <label class="pd-cookie-toggle pd-cookie-toggle--locked"> 5141 <input type="checkbox" data-pd-cookie-category="necessary" checked disabled> 5142 <span class="pd-cookie-toggle__track" aria-hidden="true"></span> 5143 <span class="pd-cookie-toggle__status">Always Active</span> 5144 </label> 5145 </li> 5146 5147 <li class="pd-cookie-prefs__category"> 5148 <div class="pd-cookie-prefs__category-text"> 5149 <span class="pd-cookie-prefs__category-name">Functional</span> 5150 <span class="pd-cookie-prefs__category-desc">Enable enhanced functionality and personalization, such as remembering your preferences and progress.</span> 5151 </div> 5152 <label class="pd-cookie-toggle"> 5153 <input type="checkbox" data-pd-cookie-category="functional"> 5154 <span class="pd-cookie-toggle__track" aria-hidden="true"></span> 5155 </label> 5156 </li> 5157 5158 <li class="pd-cookie-prefs__category"> 5159 <div class="pd-cookie-prefs__category-text"> 5160 <span class="pd-cookie-prefs__category-name">Analytics & Performance</span> 5161 <span class="pd-cookie-prefs__category-desc">Help us understand how visitors use the site so we can measure and improve performance. All information is aggregated and anonymous.</span> 5162 </div> 5163 <label class="pd-cookie-toggle"> 5164 <input type="checkbox" data-pd-cookie-category="analytics"> 5165 <span class="pd-cookie-toggle__track" aria-hidden="true"></span> 5166 </label> 5167 </li> 5168 5169 <li class="pd-cookie-prefs__category"> 5170 <div class="pd-cookie-prefs__category-text">
5171 <span class="pd-cookie-prefs__category-name">Advertising & Sharing</span> 5172 <span class="pd-cookie-prefs__category-desc">Used to deliver relevant ads and measure campaigns. Declining opts you out of the sale or sharing of your personal information.</span> 5173 </div> 5174 <label class="pd-cookie-toggle"> 5175 <input type="checkbox" data-pd-cookie-category="advertising"> 5176 <span class="pd-cookie-toggle__track" aria-hidden="true"></span> 5177 </label> 5178 </li> 5179 </ul> 5180 5181 <div class="pd-cookie-prefs__actions"> 5182 <button type="button" class="pd-btn pd-btn--outline pd-cookie-prefs__reject" id="pd-cookie-prefs-reject"> 5183 Decline 5184 </button> 5185 <button type="button" class="pd-btn pd-btn--accent pd-cookie-prefs__save" id="pd-cookie-prefs-save"> 5186 Save Preferences 5187 </button> 5188 </div> 5189 </div> 5190</div></div> 5191 5192 5193 5194 5195<!-- HubSpot performance collection script -->
5196<script defer src="/hs/hsstatic/content-cwv-embed/static-1.1293/embed.js"></script>
vendor: 1 bytes, line 5196
5196
5197<script> 5198var hsVars = hsVars || {}; hsVars['language'] = 'en'; 5199</script>
5199 5200
5201<script src="/hs/hsstatic/cos-i18n/static-1.53/bundles/project.js"></script>
vendor: 1 bytes, line 5201
5201
5202<script defer src="https://partnersdogs.com/hubfs/hub_generated/module_assets/1/209480012724/1789756263892/module_cookie-consent.min.js"></script>
5202 5203 5204 5205<!-- Start of HubSpot Analytics Code -->
5206<script type="text/javascript"> 5207var _hsq = _hsq || []; 5208_hsq.push(["setContentType", "standard-page"]); 5209_hsq.push(["setCanonicalUrl", "https:\/\/partnersdogs.com\/about"]); 5210_hsq.push(["setPageId", "213019395101"]); 5211_hsq.push(["setContentMetadata", { 5212 "contentPageId": 213019395101, 5213 "legacyPageId": "213019395101", 5214 "contentFolderId": null, 5215 "contentGroupId": null, 5216 "abTestId": null, 5217 "languageVariantId": 213019395101, 5218 "languageCode": "en", 5219 5220 5221}]); 5222</script>
5222 5223
5224<script type="text/javascript" id="hs-script-loader" async defer src="/hs/scriptloader/21344124.js"></script>
5224 5225<!-- End of HubSpot Analytics Code --> 5226 5227
5228<script type="text/javascript"> 5229var hsVars = { 5230 render_id: "9a4cf08e-54cc-4ac1-ab47-c762f5d3cdb2", 5231 ticks: 1791005038823, 5232 page_id: 213019395101, 5233 5234 content_group_id: 0, 5235 portal_id: 21344124, 5236 app_hs_base_url: "https://app.hubspot.com", 5237 cp_hs_base_url: "https://cp.hubspot.com", 5238 language: "en", 5239 analytics_page_type: "standard-page", 5240 scp_content_type: "", 5241 5242 analytics_page_id: "213019395101", 5243 category_id: 1, 5244 folder_id: 0, 5245 is_hubspot_user: false 5246} 5247</script>
5247 5248 5249
5250<script defer src="/hs/hsstatic/HubspotToolsMenu/static-1.640/js/index.js"></script>
5250 5251 5252 5253<style> 5254 main{ 5255 background-color: white; 5256 } 5257</style> 5258 5259 5260
5260<script defer src="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/208849758517/1789567121090/template_theme.min.js"></script>
5260 5261 5262 5263
5263<script defer src="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/215678661045/1789567122529/template_motion.min.js"></script>
5263 5264 5265 5266
5266<script defer src="https://partnersdogs.com/hubfs/hub_generated/template_assets/1/216847189019/1789567125120/template_rail.min.js"></script>
5266 5267 5268 5269</body></html>
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.