PageSourceSearch

https://partnersdogs.com/about

html partnersdogs.com collected 2026-10-08 09:08:37 UTC 216,413 bytes, 5,269 lines download raw bytes

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&amp;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&amp;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&amp;
375family=Roboto:wght@400;500;700&amp;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&amp;family=Roboto:wght@400;500;700&amp;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&amp;height=100&amp;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&amp;height=50&amp;name=PD-logo-2024-3.png 50w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=100&amp;height=100&amp;name=PD-logo-2024-3.png 100w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=150&amp;height=150&amp;name=PD-logo-2024-3.png 150w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=200&amp;height=200&amp;name=PD-logo-2024-3.png 200w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=250&amp;height=250&amp;name=PD-logo-2024-3.png 250w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=300&amp;height=300&amp;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 &amp; 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 &amp; 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 &amp; Training Tips</strong><small>Guides, advice &amp; 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 &amp; more</small></a>
1875                <a class="pdh-dd__link" href="/shop?category=Toys%20%26%20Enrichment"><strong>Toys &amp; Enrichment</strong><small>Chews, puzzles &amp; play</small></a>
1876                <a class="pdh-dd__link" href="/shop?category=Other"><strong>Supplements &amp; Care</strong><small>Vitamins, balms, wipes &amp; grooming</small></a>
1877                <a class="pdh-dd__link" href="/shop?category=Apparel%20%26%20Accessories"><strong>Apparel &amp; Accessories</strong><small>Wearables &amp; everyday carry</small></a>
1878              </div>
1879              <div class="pdh-dd__col">
1880                <p class="pdh-dd__label">Gifts &amp; 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 &amp; check out</small></a>
1883                <a class="pdh-dd__link" href="/shipping"><strong>Shipping &amp; Returns</strong><small>Cutoffs, rates &amp; 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 &amp; 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 &amp; 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 &amp; Training Tips</strong><small>Guides, advice &amp; 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 &amp; more</small></a>
2019          <a href="/shop?category=Toys%20%26%20Enrichment"><strong>Toys &amp; Enrichment</strong><small>Chews, puzzles &amp; play</small></a>
2020          <a href="/shop?category=Other"><strong>Supplements &amp; Care</strong><small>Vitamins, balms, wipes &amp; grooming</small></a>
2021          <a href="/shop?category=Apparel%20%26%20Accessories"><strong>Apparel &amp; Accessories</strong><small>Wearables &amp; everyday carry</small></a>
2022        </div>
2023        <div class="pdh-mobile__group">
2024          <p class="pdh-mobile__label">Gifts &amp; 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 &amp; check out</small></a>
2027          <a href="/shipping"><strong>Shipping &amp; Returns</strong><small>Cutoffs, rates &amp; 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 { '&':'&amp;', '<':'&lt;', '>':'&gt;', '"':'&quot;', "'":'&#39;' }[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&amp;height=1100&amp;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&amp;height=550&amp;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&amp;height=1100&amp;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&amp;height=1650&amp;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&amp;height=2200&amp;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&amp;height=2750&amp;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&amp;height=3300&amp;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&nbsp;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&nbsp;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&amp;height=1100&amp;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&amp;height=550&amp;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&amp;height=1100&amp;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&amp;height=1650&amp;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&amp;height=2200&amp;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&amp;height=2750&amp;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&amp;height=3300&amp;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&amp;height=1100&amp;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&amp;height=550&amp;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&amp;height=1100&amp;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&amp;height=1650&amp;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&amp;height=2200&amp;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&amp;height=2750&amp;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&amp;height=3300&amp;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&amp;height=1100&amp;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&amp;height=550&amp;name=Christopher_ChiefOperatingOfficer.png 440w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=880&amp;height=1100&amp;name=Christopher_ChiefOperatingOfficer.png 880w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=1320&amp;height=1650&amp;name=Christopher_ChiefOperatingOfficer.png 1320w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=1760&amp;height=2200&amp;name=Christopher_ChiefOperatingOfficer.png 1760w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=2200&amp;height=2750&amp;name=Christopher_ChiefOperatingOfficer.png 2200w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Christopher_ChiefOperatingOfficer.png?width=2640&amp;height=3300&amp;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&nbsp;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&amp;height=112&amp;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&amp;height=56&amp;name=Hannah_Scottsdale_HeadTrainer.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=112&amp;height=112&amp;name=Hannah_Scottsdale_HeadTrainer.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=168&amp;height=168&amp;name=Hannah_Scottsdale_HeadTrainer.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=224&amp;height=224&amp;name=Hannah_Scottsdale_HeadTrainer.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=280&amp;height=280&amp;name=Hannah_Scottsdale_HeadTrainer.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Hannah_Scottsdale_HeadTrainer.png?width=336&amp;height=336&amp;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&amp;height=112&amp;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&amp;height=56&amp;name=Nicole_Scottsdale_DaySchool_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=112&amp;height=112&amp;name=Nicole_Scottsdale_DaySchool_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=168&amp;height=168&amp;name=Nicole_Scottsdale_DaySchool_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=224&amp;height=224&amp;name=Nicole_Scottsdale_DaySchool_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=280&amp;height=280&amp;name=Nicole_Scottsdale_DaySchool_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Nicole_Scottsdale_DaySchool_Manager.png?width=336&amp;height=336&amp;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&amp;height=112&amp;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&amp;height=56&amp;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&amp;height=112&amp;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&amp;height=168&amp;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&amp;height=224&amp;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&amp;height=280&amp;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&amp;height=336&amp;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&amp;height=112&amp;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&amp;height=56&amp;name=Chase_Scottsdale_TeamSuccess_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=112&amp;height=112&amp;name=Chase_Scottsdale_TeamSuccess_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=168&amp;height=168&amp;name=Chase_Scottsdale_TeamSuccess_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=224&amp;height=224&amp;name=Chase_Scottsdale_TeamSuccess_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=280&amp;height=280&amp;name=Chase_Scottsdale_TeamSuccess_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Chase_Scottsdale_TeamSuccess_Manager.png?width=336&amp;height=336&amp;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&nbsp;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&amp;height=112&amp;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&amp;height=56&amp;name=Megan_CaveCreek_HeadTrainer.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=112&amp;height=112&amp;name=Megan_CaveCreek_HeadTrainer.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=168&amp;height=168&amp;name=Megan_CaveCreek_HeadTrainer.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=224&amp;height=224&amp;name=Megan_CaveCreek_HeadTrainer.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=280&amp;height=280&amp;name=Megan_CaveCreek_HeadTrainer.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Megan_CaveCreek_HeadTrainer.png?width=336&amp;height=336&amp;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&amp;height=112&amp;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&amp;height=56&amp;name=Monica_CaveCreek_BoardingDaySchool_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=112&amp;height=112&amp;name=Monica_CaveCreek_BoardingDaySchool_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=168&amp;height=168&amp;name=Monica_CaveCreek_BoardingDaySchool_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=224&amp;height=224&amp;name=Monica_CaveCreek_BoardingDaySchool_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=280&amp;height=280&amp;name=Monica_CaveCreek_BoardingDaySchool_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Monica_CaveCreek_BoardingDaySchool_Manager.png?width=336&amp;height=336&amp;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&amp;height=112&amp;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&amp;height=56&amp;name=Noa_CaveCreek_TeamSuccess_Manager.png 56w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=112&amp;height=112&amp;name=Noa_CaveCreek_TeamSuccess_Manager.png 112w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=168&amp;height=168&amp;name=Noa_CaveCreek_TeamSuccess_Manager.png 168w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=224&amp;height=224&amp;name=Noa_CaveCreek_TeamSuccess_Manager.png 224w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=280&amp;height=280&amp;name=Noa_CaveCreek_TeamSuccess_Manager.png 280w, https://partnersdogs.com/hs-fs/hubfs/2026%20Website%20Images/Headshots/Noa_CaveCreek_TeamSuccess_Manager.png?width=336&amp;height=336&amp;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&amp;height=1100&amp;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&amp;height=550&amp;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&amp;height=1100&amp;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&amp;height=1650&amp;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&amp;height=2200&amp;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&amp;height=2750&amp;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&amp;height=3300&amp;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&nbsp;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&nbsp;yourself</p>
4309        <h2 class="pd-section-heading pd-section-heading--underline" data-pd-reveal="fade-up">The Next Chapter Is Your Dog's&nbsp;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&amp;height=1100&amp;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&amp;height=550&amp;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&amp;height=1100&amp;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&amp;height=1650&amp;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&amp;height=2200&amp;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&amp;height=2750&amp;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&amp;height=3300&amp;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&amp;height=200&amp;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&amp;height=100&amp;name=PD-logo-2024-3.png 100w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=200&amp;height=200&amp;name=PD-logo-2024-3.png 200w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=300&amp;height=300&amp;name=PD-logo-2024-3.png 300w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=400&amp;height=400&amp;name=PD-logo-2024-3.png 400w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=500&amp;height=500&amp;name=PD-logo-2024-3.png 500w, https://partnersdogs.com/hs-fs/hubfs/PD-logo-2024-3.png?width=600&amp;height=600&amp;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 &amp; Services">
4944        <p class="pd-footer__section-heading">Care &amp; Services</p>
4945        
4946        <ul>
4947          <li><a href="/daycare">DaySchool &amp; 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 &amp; 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 &amp; 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 &amp; 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.