PageSourceSearch

https://www.jillianmichaels.com/cart

html jillianmichaels.com collected 2026-10-02 03:24:15 UTC 49,505 bytes, 932 lines download raw bytes

1<!DOCTYPE html>
2<html class="w-mod-js" lang="en" data-wf-page="694982bd2608af05ee3a3af8" data-wf-site="68e57f3a62c4bf057fb2e9ed">
3<head>
4  <title>
5    Jillian Michaels
6  </title>
7  <meta name="viewport" content="width=device-width,initial-scale=1">
8  <meta charset=utf-8 />
9  <meta name="csrf-param" content="authenticity_token" />
10<meta name="csrf-token" content="qHZETsyaUxn-fFqVDl0yMaxokdHzrZAqYm3j4DKTNkFfV8YtSCIZ0QvBqlXBG1XrZCatrT2kzeUIZlidpgnz0A" />
11  <link rel="icon" type="image/x-icon" href="https://favicons.fitbox.io/jm/favicon.ico" />
12
13  <link rel="stylesheet" href="/org/jm/css/normalize.css">
14  <link rel="stylesheet" href="/org/jm/css/webflow.css">
15  <link rel="stylesheet" href="/org/jm/css/jillian-michaels-2025.webflow.css">
16  <link rel="stylesheet" href="https://use.typekit.net/xqk8lnt.css">
17  <link rel="stylesheet" href="/org/jm/css/canela.css">
18  <link rel="stylesheet" href="/org/jm/css/tokens.css?v=1790629836">
19  
19<script>!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
19
20  <style>
21  .no-scrollbar {
22    overflow-x: auto;
23    scrollbar-width: none; /* Firefox */
24  }
25  .no-scrollbar::-webkit-scrollbar {
26    display: none; /* Chrome, Safari */
27  }
28</style>
29<style>
30@media (max-width: 991px) {
31  /* 1. Keep 'Learn' aligned with list items and bundle the text + chevron close together */
32  .w-dropdown-toggle,
33  .w-dropdown-toggle.w--open,
34  div[class*="Dropdown"].w-dropdown-toggle {
35    display: flex !important;
36    justify-content: flex-start !important; /* Forces text and icon to sit tight next to each other */
37    align-items: center !important;
38    gap: 8px !important; /* Creates a clean, unmoving space right between Learn and the chevron */
39    padding-left: 10px !important; 
40    margin-left: 0px !important;
41    text-indent: 0px !important;
42    width: auto !important; /* Prevents the container from scaling to 100% width when active */
43    box-sizing: border-box !important;
44  }
45  /* 2. Freeze the background variable properties when open */
46  div[class*="Dropdown"].w-dropdown-toggle.w--open {
47    padding-left: 10px !important;
48    margin-left: 0px !important;
49  }
50  /* 3. Keep inner layout elements dead-still */
51  .w-dropdown-toggle > div,
52  .w-dropdown-toggle.w--open > div,
53  .w-dropdown-toggle span {
54    margin-left: 0px !important;
55    padding-left: 0px !important;
56    text-indent: 0px !important;
57    display: inline-block !important;
58  }
59  /* 4. Ensure the actual icon graphic element doesn't inherit alignment margins */
60  .w-dropdown-toggle .w-icon-dropdown-toggle,
61  .w-dropdown-toggle [class*="icon"],
62  .w-dropdown-toggle svg {
63    margin-left: 0px !important;
64    margin-right: 0px !important;
65    position: relative !important;
66    right: auto !important;
67  }
68  /* 5. Indent your 3 inner links relative to the 20px header mark */
69  .w-dropdown-list.w--open,
70  div[class*="Dropdown-Slide-PD"] {
71    padding-left: 40px !important; 
72    box-sizing: border-box !important;
73  }
74}
75</style>
76<style>
77@media (prefers-reduced-motion: reduce) {
78  /* 1. Force your custom Webflow play button to appear */
79  .video-play-btn, #video-play-btn {
80    display: block !important; /* Change to 'flex' if you are using flexbox alignment inside your button layout */
81  }
82  .hero-video.is-playing .video-play-btn {
83    display: none !important; 
84  }
85  /* 2. Hide the video file by default for reduced motion */
86  .hero-video video {
87    display: none !important;
88  }
89  /* 3. Force the video back to visible ONLY when we add the 'is-playing' class via JS */
90  .hero-video.is-playing video {
91    display: block !important;
92  }
93  /* 4. Apply your preferred static image background fallback */
94  .hero-video {
95    background-image: url('/org/jm/images/home_frame.jpg') !important;
96    background-size: cover;
97    background-position: center;
98  }
99  /* 5. Remove the background image once they hit play so it doesn't peek behind the video */
100  .hero-video.is-playing {
101    background-image: none !important;
102  }
103}
104</style>
105
106
107  
107<script>
108    window.dataLayer = window.dataLayer || [];
109
110
111<!--    window.dataLayer.push({-->
112<!--        event: "start_trial",-->
113<!--        start_trial: true-->
114<!--    });-->
115
116</script>
116
117
118<meta name="csrf-param" content="authenticity_token" />
119<meta name="csrf-token" content="_X0xhMh9SD8ntnMjn-PjBzIG9IdcA1FDUDZtXQtmBFoKXLPnTMUC99ILg-NQpYTd-kjI-5IKDIw6PdYgn_zByw" />
120
121
122
123<script src="/vite/assets/application-NKkzzMip.js" crossorigin="anonymous" type="module" data-turbo-track="reload"></script>
123<link rel="stylesheet" href="/vite/assets/application-CIfLU8oe.css" media="screen" data-turbo-track="reload" />
124<link rel="stylesheet" href="/vite/assets/application-3JNrxUgr.css" media="screen" data-turbo-track="reload" />
125<link rel="stylesheet" href="/vite/assets/application-3JNrxUgr.css" data-turbo-track="reload" />
126
127<style>
128    :root {
129        --color-primary: 0, 0, 0;
130        --color-secondary: 0, 0, 0;
131        --color-tertiary: 0, 0, 0;
132    }
133</style>
134<!--
135  If using a TypeScript entrypoint file:
136    vite_typescript_tag 'application'
137
138  If using a .jsx or .tsx entrypoint, add the extension:
139    vite_javascript_tag 'application.jsx'
140
141  Visit the guide for more information: https://vite-ruby.netlify.app/guide/rails
142-->
143
144<script>
145  window.dataLayer = window.dataLayer || [];
146  function gtag(){dataLayer.push(arguments);}
147  gtag('consent', 'default', {
148    ad_storage: 'granted', analytics_storage: 'granted',
149    ad_user_data: 'granted', ad_personalization: 'granted'
150  });
151  gtag('consent', 'default', {
152    ad_storage: 'denied', analytics_storage: 'denied',
153    ad_user_data: 'denied', ad_personalization: 'denied',
154    wait_for_update: 500,
155    region: ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU','IE','IT','LV',
156             'LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE','IS','LI','NO','GB','CH']
157  });
158</script>
vendor: 1 bytes, line 158
158
159<script src="https://cookie-cdn.cookiepro.com/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="093f909b-b07b-4ed4-9547-4dca95198ebd"></script>
159
160
161<!-- Google Tag Manager -->
162<script>
vendor: 438 bytes, lines 162-174
162(function (w, d, s, l, i) {
163    w[l] = w[l] || [];
164    w[l].push({
165        'gtm.start':
166            new Date().getTime(), event: 'gtm.js'
167    });
168    var f = d.getElementsByTagName(s)[0],
169        j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : '';
170    j.async = true;
171    j.src =
172        'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
173    f.parentNode.insertBefore(j, f);
174})(window, document, 'script', 'dataLayer', '
174GTM-MSZ7JJMJ
vendor: 3 bytes, line 174
174');
174</script>
vendor: 1 bytes, line 174
174
175<script>
176    document.addEventListener('turbo:load', function () {
177        if (!window.__gtmEntryPageSeen) { window.__gtmEntryPageSeen = true; return; }
178        if (document.documentElement.hasAttribute('data-turbo-preview')) return;
179        var path = location.pathname + location.search;
180        if (window.__gtmLastVirtualPath === path) return;
181        window.__gtmLastVirtualPath = path;
182        window.dataLayer.push({ event: 'page_view', page_path: path });
183    });
184</script>
184
185<!-- End Google Tag Manager -->
186
187</head>
188
189<body data-controller="cart-dialog">
190<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 190-191
190
191<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
191GTM-MSZ7JJMJ
vendor: 101 bytes, lines 191-192
191"
192                  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
193<!-- End Google Tag Manager (noscript) -->
194
195<div id="jm-scam-notice"
196     data-controller="jm-scam-notice"
197     role="region"
198     aria-label="Important notice from Jillian"
199     style="border-left:4px solid #BA7517;background:#FAEEDA;padding:0.75rem 1.25rem;display:flex;gap:12px;align-items:center;justify-content:space-between;">
200  <p style="margin:0;font-size:13px;color:#854F0B;line-height:1.5;">
201    <strong style="color:#633806;">A Note from Jillian:</strong>
202    Please watch out for AI internet scams using my name and likeness. The only supplement company
203    I work with is <strong style="color:#633806;">Alaya Naturals</strong>. Everything else is a fake.
204    Also, I do not have a weight loss gelatin recipe. That is also a scam. Stay safe out there.
205  </p>
206  <button type="button"
207          data-action="jm-scam-notice#dismiss"
208          aria-label="Dismiss notice"
209          style="background:none;border:none;cursor:pointer;color:#854F0B;font-size:18px;flex-shrink:0;padding:0;line-height:1;">&times;</button>
210</div>
211<script>
212  // Runs during parse, before first paint: a visitor who already dismissed it never sees the
213  // banner flash in and out. Kept inline (not in the Stimulus controller) because controllers
214  // connect after paint, which would show the banner and then yank it away.
215  if (localStorage.getItem('jm-scam-notice') === 'dismissed') {
216    document.getElementById('jm-scam-notice').style.display = 'none';
217  }
218</script>
218
219
220<section class="nav-bar">
221    <div class="navbar-logo-center-copy">
222      <div data-animation="default" data-collapse="medium" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="navbar-logo-center-container shadow-three w-nav">
223        <div class="navbar-wrapper-three">
224          <a href="/" class="navbar-brand-three w-nav-brand"><img loading="lazy" src="/org/jm/images/JillianMichaels_Logo_Desktop.svg" alt="" class="image-3"></a>
225          <nav role="navigation" class="nav-menu-wrapper-three w-nav-menu">
226            <section class="section">
227              <div class="w-layout-hflex flex-block-26">
228                <a href="#" class="link-block-4 w-inline-block">
229                  <div class="text-block-2">Newsletter</div>
230                </a>
231              </div>
232              <div class="w-layout-hflex flex-block-27">
233                <a href="https://www.alayanaturals.com" class="text-block-2">Supplements</a>
234                <a href="https://www.alayanaturals.com" class="link-block-7 w-inline-block"><img loading="lazy" src="/org/jm/images/ExternalLink_Icon.svg" alt="" class="image"></a>
235              </div>
236            </section>
237            <div class="nav-menu-three">
238              <ul role="list" class="nav-menu-block w-list-unstyled">
239                <li class="list-item">
240                  <div data-delay="0" data-hover="true" data-w-id="d31428c2-5384-79d2-8dde-720476eda439" class="brix---dropdown-wrapper w-dropdown">
241                    <div class="brix---dropdown-toggle w-dropdown-toggle">
242                      <div class="text-block-29">WORKOUTS</div>
243<img alt="Icon Rounded Chevron Dark - BRIX Templates" src="/org/jm/images/line-rounded-chevron-down-black-brix-templates.svg" class="brix---dropdown-chevron">
244                    </div>
245                    <nav class="brix---dropdown-card-wrapper-836px w-dropdown-list">
246                      <div class="brix---dropdown-card">
247                        <div class="brix---grid-2-columns-dropdown-2-sides">
248                          <div class="brix---dropdown-side-pd-copy">
249                            <div class="brix---mg-bottom-24px-2">
250                              <div class="brix---color-neutral-803">
251                                <h4 class="brix---heading-h4-size">THE FITNESS APP</h4>
252                              </div>
253                            </div>
254                            <div class="brix---mg-bottom-40px-2-copy">
255                              <div class="w-layout-grid brix---grid-1-column-gap-row-24px">
256                                <div id="w-node-d31428c2-5384-79d2-8dde-720476eda448-76eda418" class="w-layout-hflex flex-block-25">
257                                  <a href="/app" class="w-inline-block"><img loading="lazy" src="/org/jm/images/fitness_app_tile2_white.png" alt=""></a>
258                                </div>
259                              </div>
260                            </div>
261                          </div>
262                          <div class="brix---dropdown-side-pd">
263                            <div class="brix---mg-bottom-24px-2">
264                              <div class="brix---color-neutral-803">
265                                <h4 class="brix---heading-h4-size">FEATURED PROGRAMS</h4>
266                                <a href="/programs" class="brix---link-wrapper w-inline-block">
267                                  <div class="brix---color-accent-2">
268                                    <div class="brix---text-200-bold">VIEW ALL WORKOUTS</div>
269                                  </div>
270<img alt="" src="/org/jm/images/CarouselArrow.svg" class="brix---link-icon-right">
271                                </a>
272                              </div>
273                            </div>
274                            <div class="brix---mg-bottom-40px-2">
275                              <div class="w-layout-grid brix---grid-1-column-gap-row-24px">
276                                <div id="w-node-d31428c2-5384-79d2-8dde-720476eda457-76eda418" class="w-layout-hflex flex-block-25">
277                                  <a href="/programs/28-shred" class="w-inline-block"><img loading="lazy" src="/org/jm/images/Frame-12332.png" alt="" class="image-12"></a>
278                                  <a href="/programs/body-revolution" class="w-inline-block"><img loading="lazy" src="/org/jm/images/bodyrev_menu.png" alt=""></a>
279                                  <a href="/programs/bodyshred" class="w-inline-block"><img loading="lazy" src="/org/jm/images/Frame-12335.png" alt=""></a>
280                                  <a href="/programs" class="w-inline-block"><img loading="lazy" src="/org/jm/images/killer_cardio_menu.png" alt=""></a>
281                                </div>
282                              </div>
283                            </div>
284                          </div>
285                        </div>
286                      </div>
287                    </nav>
288                  </div>
289                </li>
290                <li>
291                  <a href="/recipes" class="nav-link-2 nav-link">RECIPES</a>
292                </li>
293                <li>
294                  <div data-delay="0" data-hover="true" data-w-id="d31428c2-5384-79d2-8dde-720476eda464" class="brix---dropdown-wrapper w-dropdown">
295                    <div class="brix---dropdown-toggle w-dropdown-toggle">
296                      <div class="text-block-30">LEARN</div>
297<img alt="Icon Rounded Chevron Dark - BRIX Templates" src="/org/jm/images/line-rounded-chevron-down-black-brix-templates.svg" class="brix---dropdown-chevron">
298                    </div>
299                    <nav class="brix---dropdown-card-wrapper-836px-copy w-dropdown-list">
300                      <div class="brix---dropdown-card">
301                        <div class="brix---grid-2-columns-dropdown-2-sides">
302                          <div class="brix---dropdown-side-pd">
303                            <a href="/about" class="link-18">ABOUT JILL</a>
304                            <a href="/blog" class="link-19">BLOG</a>
305                          </div>
306                        </div>
307                      </div>
308                    </nav>
309                  </div>
310                </li>
311                <li>
312                  <a href="/transformations" class="nav-link-2">RESULTS</a>
313                </li>
314              </ul>
315              <ul role="list" class="nav-menu-block w-list-unstyled">
316                <li>
317                    <a href="/users/sign_in" class="jm-signin">
318    <span class="nav-link-2 nav-link">SIGN IN</span>
319  </a>
320
321                  <a href="/cart" class="jm-cart-icon link-block w-inline-block" aria-label="Cart" title="Cart"
322   data-action="click->
322cart-dialog#open">
323  <img src="/org/jm/images/Cart_Icon.svg" loading="lazy" alt="">
324  <span class="jm-cart-badge" data-cart-badge hidden></span>
325</a>
326
327                </li>
328                <li class="mobile-margin-top-11">
329                  <a href="/join" class="button-primary-2 w-button">FREE APP TRIAL</a>
330                </li>
331              </ul>
332            </div>
333          </nav>
334          <div class="menu-button-2 w-nav-button">
335            <div class="w-icon-nav-menu"></div>
336          </div>
337        </div>
338      </div>
339    </div>
340    <div class="navbar-logo-center-2">
341      <div data-animation="default" data-collapse="medium" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="navbar-logo-center-container-2 shadow-three w-nav">
342        <div class="container-22">
343          <div class="navbar-wrapper-three-2">
344            <div class="menu-button-3 w-nav-button">
345              <div class="w-icon-nav-menu"></div>
346            </div>
347            <a href="/" class="navbar-brand-three-2 w-nav-brand"><img loading="lazy" src="/org/jm/images/Content.svg" alt=""></a>
348            <nav role="navigation" class="nav-menu-wrapper-three-2 w-nav-menu">
349              <div class="nav-menu-three-2">
350                <form action="/search" class="search w-form">
351<input class="search-input w-input" maxlength="256" name="query" placeholder="Hinted search text" type="search" id="search" required=""><img loading="lazy" src="/org/jm/images/Icon.png" alt="" class="image-47">
352</form>
353                <ul role="list" class="nav-menu-block-2 w-list-unstyled">
354                  <li class="list-item-3">
355                    <a href="/programs" class="nav-link-3">WORKOUTS</a>
356                  </li>
357                  <li>
358                    <a href="/recipes" class="nav-link-3">RECIPES</a>
359                  </li>
360                  <li>
361                    <div data-delay="0" data-hover="true" data-w-id="d31428c2-5384-79d2-8dde-720476eda499" class="brix---dropdown-wrapper w-dropdown">
362                      <div class="brix---dropdown-toggle w-dropdown-toggle">
363                        <div class="text-block-30-copy">LEARN</div>
364<img alt="Icon Rounded Chevron Dark - BRIX Templates" src="/org/jm/images/line-rounded-chevron-down-black-brix-templates.svg" class="brix---dropdown-chevron">
365                      </div>
366                      <nav class="brix---dropdown-card-wrapper-836px-copy w-dropdown-list">
367                        <div class="brix---dropdown-card">
368                          <div class="brix---grid-2-columns-dropdown-2-sides">
369                            <div class="brix---dropdown-side-pd">
370                              <a href="/about" class="link-18">ABOUT JILL</a>
371                              <a href="/blog" class="link-19">BLOG</a>
372                            </div>
373                          </div>
374                        </div>
375                      </nav>
376                    </div>
377                  </li>
378                  <li>
379                    <a href="/transformations" class="nav-link-3">RESULTS</a>
380                  </li>
381                </ul>
382                <ul role="list" class="nav-menu-block-2 w-list-unstyled">
383                  <li class="mobile-margin-top-12">
384                    <a href="/join" class="button-primary-7 w-button">FREE APP TRIAL</a>
385                  </li>
386                  <li>
387                    <a href="/about" class="nav-link-accent-3">About</a>
388                  </li>
389                  <li>
390                    <a href="#" class="nav-link-accent-3">Newsletter</a>
391                  </li>
392                  <li class="list-item-2">
393                    <a href="https://www.alayanaturals.com" class="nav-link-accent-3">Supplements</a>
394                    <a href="https://www.alayanaturals.com" class="link-block-103 w-inline-block"><img loading="lazy" src="/org/jm/images/ExternalLink_Icon.svg" alt="" class="image-copy"></a>
395                  </li>
396                </ul>
397                <div class="w-layout-vflex flex-block-88">
398                  <div class="w-layout-hflex flex-block-89">
399    <a href="/users/sign_in" class="jm-signin-m">
400      <span class="nav-link-3">SIGN IN</span>
401    </a>
402</div>
403
404                  <div class="w-layout-hflex flex-block-90">
405                    <a href="/cart" class="jm-cart-icon w-inline-block" aria-label="Cart" title="Cart"
406   data-action="click->cart-dialog#open">
407  <img src="/org/jm/images/Cart_Icon.svg" loading="lazy" alt="">
408  <span class="jm-cart-badge" data-cart-badge hidden></span>
409</a>
410
411                    
412                  </div>
413                </div>
414                <div class="brix---color-neutral-802-mobile-copy">
415                  <div class="brix---paragraph-default-2-mobile-copy-copy">The most current fitness, nutrition, and wellness info &amp; inspo straight to your inbox</div>
416                </div>
417                <div class="brix---mg-bottom-0-mobile-copy w-form">
418                  <form id="wf-form-BRIX---Footer-Subscribe---V15" name="wf-form-BRIX---Footer-Subscribe---V15" data-name="BRIX - Footer Subscribe - V15" method="get" data-wf-page-id="694982bd2608af05ee3a3af8" data-wf-element-id="d31428c2-5384-79d2-8dde-720476eda4d4">
419                    <div class="w-layout-grid brix---grid-subscribe-form-button-left-copy-mobile">
420<input class="text-field w-input" maxlength="256" name="BRIX---Footer-Email---V15" data-name="BRIX - Footer Email - V15" placeholder="Enter your email" type="email" id="BRIX-Footer-Email-V15" required=""><input type="submit" data-wait="Please wait..." id="w-node-d31428c2-5384-79d2-8dde-720476eda4d7-76eda418" class="submit-button-copy w-button" value="SUBSCRIBE">
421</div>
422                  </form>
423                  <div class="brix---success-message w-form-done">
424                    <div class="brix---success-message-horizontal">
425<img alt="Check - Elements Webflow Library - BRIX Templates" src="/org/jm/images/line-rounded-check-circle-white-brix-templates.svg" class="brix---icon-success-message-left">
426                      <div>Thanks for joining our newsletter</div>
427                    </div>
428                  </div>
429                  <div class="brix---error-message w-form-fail">
430                    <div>Oops! Something went wrong while submitting the form.</div>
431                  </div>
432                </div>
433                <div class="w-layout-hflex flex-block-24-mobile-copy">
434                  <div class="text-block-28-copy">By subscribing you agree to with our</div>
435                  <a href="/policies/privacy" class="link-9-copy">Privacy Policy</a>
436                </div>
437                <div class="div-block-16-copy">
438                  <div class="brix---footer-col-title-mobile-copy">FOLLOW</div>
439                  <ul role="list" class="brix---footer-list-wrapper-copy-icons-mobile-copy">
440                    <li class="brix---footer-list-item">
441                      <a href="https://www.instagram.com/jillianmichaels/" class="brix---social-media-link-wrapper w-inline-block">
442                        <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Instagram_Icon.svg"></div>
443                      </a>
444                    </li>
445                    <li class="brix---footer-list-item">
446                      <a href="https://www.facebook.com/jillianmichaels/" class="brix---social-media-link-wrapper w-inline-block">
447                        <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Facebook_Icon.svg"></div>
448                      </a>
449                    </li>
450                    <li class="brix---footer-list-item">
451                      <a href="https://x.com/JillianMichaels" class="brix---social-media-link-wrapper w-inline-block">
452                        <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/X_Icon.svg"></div>
453                      </a>
454                    </li>
455                    <li class="brix---footer-list-item">
456                      <a href="https://www.tiktok.com/@jillianmichaels" class="brix---social-media-link-wrapper w-inline-block">
457                        <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Social-Icons.svg"></div>
458                      </a>
459                    </li>
460                    <li class="brix---footer-list-item">
461                      <a href="https://www.youtube.com/c/JillianMichaels" class="brix---social-media-link-wrapper w-inline-block">
462                        <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Youtube_Icon.svg"></div>
463                      </a>
464                    </li>
465                  </ul>
466                </div>
467              </div>
468            </nav>
469            <a href="/cart" class="jm-cart-icon w-inline-block" aria-label="Cart" title="Cart"
470   data-action="click->
470cart-dialog#open">
471  <img src="/org/jm/images/Cart_Icon.svg" loading="lazy" alt="">
472  <span class="jm-cart-badge" data-cart-badge hidden></span>
473</a>
474
475          </div>
476        </div>
477      </div>
478    </div>
479  </section>
480<turbo-frame id="flash">
481  
482</turbo-frame>
483<section class="pricing-section jm-cart-page">
484  <div class="text-block-64">Your Cart</div>
485    <div class="text-block-65">Your cart is empty.</div>
486    <div class="jm-cart-actions">
487      <a href="/programs" class="link-block-99 w-inline-block">
488        <div class="text-block-69">BROWSE WORKOUTS</div>
489      </a>
490    </div>
491</section>
492<style>
493  .jm-cart-page { padding-bottom: 4rem; }
494  .jm-cart-list { max-width: 44rem; margin: 0 auto; }
495  .jm-cart-row { display: flex; align-items: center; gap: 1.25rem; padding: 1.25rem 0; border-bottom: 1px solid var(--color-surface-grey, #e5e5e5); }
496  .jm-cart-thumb { width: 84px; height: auto; display: block; }
497  .jm-cart-item { flex: 1; text-align: left; }
498  .jm-cart-item .text-block-66, .jm-cart-total .text-block-66 { margin: 0; }
499  .jm-cart-price { margin: 0; white-space: nowrap; font-family: var(--font-body, sans-serif); font-size: 1.125rem; font-weight: 600; }
500  .jm-cart-total .jm-cart-price { font-size: 1.375rem; }
501  .jm-cart-remove { font-family: var(--font-body, sans-serif); font-size: 12px; letter-spacing: .08em; text-decoration: underline; color: var(--color-dark-grey, #555); }
502  .jm-cart-total { max-width: 44rem; margin: 0 auto; border-bottom: 0; }
503  .jm-cart-actions { margin-top: 2rem; display: flex; justify-content: center; }
504</style>
505
506<section class="footer">
507    <footer class="brix---footer-wrapper">
508      <div class="brix---container-default-2 w-container">
509        <div class="brix---footer-top">
510          <div class="w-layout-grid brix---grid-footer-v1">
511            <div>
512              <div class="brix---footer-col-title">PRODUCTS</div>
513              <ul role="list" class="brix---footer-list-wrapper">
514                <li class="brix---footer-list-item">
515                  <a href="/programs" class="brix---footer-link">PROGRAMS</a>
516                </li>
517                <li class="brix---footer-list-item">
518                  <a href="/app" class="brix---footer-link">APP</a>
519                </li>
520                <li class="brix---footer-list-item">
521                  <a href="/join" class="brix---footer-link">APP TRIAL &amp; PRICING</a>
522                </li>
523                <li class="brix---footer-list-item">
524                  <a href="/recipes" class="brix---footer-link">RECIPES</a>
525                </li>
526                <li class="brix---footer-list-item">
527                  <a href="/blog" class="brix---footer-link">BLOGS</a>
528                </li>
529                <li class="brix---footer-list-item">
530                  <a href="/podcasts" class="brix---footer-link">PODCAST</a>
531                </li>
532              </ul>
533            </div>
534            <div>
535              <div class="brix---footer-col-title">ABOUT</div>
536              <ul role="list" class="brix---footer-list-wrapper">
537                <li class="brix---footer-list-item">
538                  <a href="/form/contact" class="brix---footer-link">CONTACT</a>
539                </li>
540                <li class="brix---footer-list-item">
541                  <a href="/about" class="brix---footer-link">ABOUT JILL</a>
542                </li>
543                <li class="brix---footer-list-item">
544                  <a href="/transformations" class="brix---footer-link">SUCCESS STORIES</a>
545                </li>
546              </ul>
547            </div>
548            <div>
549              <div class="brix---footer-col-title">SUPPORT</div>
550              <ul role="list" class="brix---footer-list-wrapper">
551                <li class="brix---footer-list-item">
552                  <a href="https://shop.id.me/stores/5152-jillian-michaels-the-fitness-app" class="brix---footer-link">DISCOUNT PROGRAMS</a>
553                  <a href="https://shop.id.me/stores/5152-jillian-michaels-the-fitness-app" class="w-inline-block"><img loading="lazy" src="/org/jm/images/ExternalLink_Icon.svg" alt="" class="image"></a>
554                </li>
555                <li class="brix---footer-list-item">
556                  <a href="https://help.jillianmichaels.com" class="brix---footer-link">HELP CENTER</a>
557                  <a href="https://help.jillianmichaels.com" class="w-inline-block"><img loading="lazy" src="/org/jm/images/ExternalLink_Icon.svg" alt="" class="image"></a>
558                </li>
559                <li class="brix---footer-list-item">
560                  <a href="/truemed" class="brix---footer-link">HSA/FSA</a>
561                </li>
562              </ul>
563            </div>
564            <div>
565              <div class="brix---footer-col-title">FOLLOW ALONG</div>
566              <ul role="list" class="brix---footer-list-wrapper">
567                <li class="brix---footer-list-item">
568                  <a href="https://www.instagram.com/jillianmichaels" class="brix---social-media-link-wrapper w-inline-block">
569                    <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Instagram_Icon.svg"></div>
570                  </a>
571                </li>
572                <li class="brix---footer-list-item">
573                  <a href="https://www.facebook.com/jillianmichaels" class="brix---social-media-link-wrapper w-inline-block">
574                    <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Facebook_Icon.svg"></div>
575                  </a>
576                </li>
577                <li class="brix---footer-list-item">
578                  <a href="https://x.com/JillianMichaels" class="brix---social-media-link-wrapper w-inline-block">
579                    <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/X_Icon.svg"></div>
580                  </a>
581                </li>
582                <li class="brix---footer-list-item">
583                  <a href="https://www.tiktok.com/@jillianmichaels" class="brix---social-media-link-wrapper w-inline-block">
584                    <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Social-Icons.svg"></div>
585                  </a>
586                </li>
587                <li class="brix---footer-list-item">
588                  <a href="https://www.youtube.com/c/JillianMichaels" class="brix---social-media-link-wrapper w-inline-block">
589                    <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Youtube_Icon.svg"></div>
590                  </a>
591                </li>
592              </ul>
593            </div>
594            <div id="w-node-b6e9f271-b1ba-d944-02ac-e045780a382c-780a37d5">
595              <div class="w-layout-grid grid-footer-2-cols---form---icon">
596                <div class="brix---footer-cta-left">
597                  <div>
598                    <div class="brix---color-neutral-802">
599                      <div class="brix---paragraph-default-2">The most current fitness, nutrition, and wellness info &amp; inspo straight to your inbox</div>
600                    </div>
601                  </div>
602                </div>
603                <div class="brix---mg-bottom-0 w-form">
604                  <form id="wf-form-BRIX---Footer-Subscribe---V15" name="wf-form-BRIX---Footer-Subscribe---V15" data-name="BRIX - Footer Subscribe - V15" method="get" data-wf-page-id="694982bd2608af05ee3a3af8" data-wf-element-id="b6e9f271-b1ba-d944-02ac-e045780a3834">
605                    <div class="w-layout-grid brix---grid-subscribe-form-button-left">
606<input class="text-field w-input" maxlength="256" name="BRIX---Footer-Email---V15" data-name="BRIX - Footer Email - V15" placeholder="Enter your email" type="email" id="BRIX-Footer-Email-V15" required=""><input type="submit" data-wait="Please wait..." id="w-node-b6e9f271-b1ba-d944-02ac-e045780a3837-780a37d5" class="submit-button w-button" value="SUBSCRIBE">
607</div>
608                  </form>
609                  <div class="brix---success-message w-form-done">
610                    <div class="brix---success-message-horizontal">
611<img alt="Check - Elements Webflow Library - BRIX Templates" src="/org/jm/images/line-rounded-check-circle-white-brix-templates.svg" class="brix---icon-success-message-left">
612                      <div>Thanks for joining our newsletter</div>
613                    </div>
614                  </div>
615                  <div class="brix---error-message w-form-fail">
616                    <div>Oops! Something went wrong while submitting the form.</div>
617                  </div>
618                </div>
619                <div class="w-layout-hflex flex-block-24">
620                  <div class="text-block-28">By subscribing you agree to with our</div>
621                  <a href="/policies/privacy" class="link-9">Privacy Policy</a>
622                </div>
623                <div class="brix---mg-bottom-8px-2"></div>
624              </div>
625            </div>
626          </div>
627        </div>
628        <div class="brix---footer-middle-v15"></div>
629        <div class="brix---footer-bottom">
630          <p class="brix---mg-bottom-0">© 2026 Jillian Michaels. All rights reserved. Site Credit</p>
631          <div class="w-layout-hflex flex-block-81">
632            <a href="/policies/privacy" class="link-15">Privacy Policy</a>
633            <a href="/policies/terms" class="link-16">Terms of Service</a>
634            <a href="/policies/cookies" class="link-17">Cookies</a>
635          </div>
636        </div>
637      </div>
638    </footer>
639    <div class="w-layout-blockcontainer mobile-footer-container w-container">
640      <div class="brix---color-neutral-802-copy">
641        <div class="brix---paragraph-default-2-copy">The most current fitness, nutrition, and wellness info &amp; inspo straight to your inbox</div>
642      </div>
643      <div class="brix---mg-bottom-0-copy w-form">
644        <form id="wf-form-BRIX---Footer-Subscribe---V15" name="wf-form-BRIX---Footer-Subscribe---V15" data-name="BRIX - Footer Subscribe - V15" method="get" data-wf-page-id="694982bd2608af05ee3a3af8" data-wf-element-id="b6e9f271-b1ba-d944-02ac-e045780a3856">
645          <div class="w-layout-grid brix---grid-subscribe-form-button-left-copy">
646<input class="text-field w-input" maxlength="256" name="BRIX---Footer-Email---V15" data-name="BRIX - Footer Email - V15" placeholder="Enter your email" type="email" id="BRIX-Footer-Email-V15" required=""><input type="submit" data-wait="Please wait..." id="w-node-b6e9f271-b1ba-d944-02ac-e045780a3859-780a37d5" class="submit-button-copy w-button" value="SUBSCRIBE">
647</div>
648        </form>
649        <div class="brix---success-message w-form-done">
650          <div class="brix---success-message-horizontal">
651<img alt="Check - Elements Webflow Library - BRIX Templates" src="/org/jm/images/line-rounded-check-circle-white-brix-templates.svg" class="brix---icon-success-message-left">
652            <div>Thanks for joining our newsletter</div>
653          </div>
654        </div>
655        <div class="brix---error-message w-form-fail">
656          <div>Oops! Something went wrong while submitting the form.</div>
657        </div>
658      </div>
659      <div class="w-layout-hflex flex-block-24-copy">
660        <div class="text-block-28">By subscribing you agree to with our</div>
661        <a href="/policies/privacy" class="link-9">Privacy Policy</a>
662      </div>
663      <div class="div-block-14">
664        <div class="brix---footer-col-title-copy">PRODUCTS</div>
665        <ul role="list" class="brix---footer-list-wrapper-copy">
666          <li class="brix---footer-list-item-copy">
667            <a href="/programs" class="brix---footer-link">PROGRAMS</a>
668          </li>
669          <li class="brix---footer-list-item-copy">
670            <a href="/app" class="brix---footer-link">APP</a>
671          </li>
672          <li class="brix---footer-list-item-copy">
673            <a href="/join" class="brix---footer-link">APP TRIAL &amp; PRICING</a>
674          </li>
675          <li class="brix---footer-list-item-copy">
676            <a href="/recipes" class="brix---footer-link">RECIPES</a>
677          </li>
678          <li class="brix---footer-list-item-copy">
679            <a href="/blog" class="brix---footer-link">BLOGS</a>
680          </li>
681          <li class="brix---footer-list-item-copy">
682            <a href="/podcasts" class="brix---footer-link">PODCAST</a>
683          </li>
684        </ul>
685      </div>
686      <div class="div-block-12"></div>
687      <div class="div-block-13">
688        <div class="brix---footer-col-title-copy">ABOUT</div>
689        <ul role="list" class="brix---footer-list-wrapper-copy">
690          <li class="brix---footer-list-item-copy">
691            <a href="/form/contact" class="brix---footer-link">CONTACT</a>
692          </li>
693          <li class="brix---footer-list-item-copy">
694            <a href="/about" class="brix---footer-link">ABOUT JILL</a>
695          </li>
696          <li class="brix---footer-list-item-copy">
697            <a href="/press" class="brix---footer-link">PRESS</a>
698          </li>
699          <li class="brix---footer-list-item-copy">
700            <a href="/transformations" class="brix---footer-link">SUCCESS STORIES</a>
701          </li>
702        </ul>
703      </div>
704      <div class="div-block-15">
705        <div class="brix---footer-col-title-copy">SUPPORT</div>
706        <ul role="list" class="brix---footer-list-wrapper-copy">
707          <li class="brix---footer-list-item-copy">
708            <a href="https://shop.id.me/stores/5152-jillian-michaels-the-fitness-app" class="brix---footer-link">DISCOUNT PROGRAMS</a>
709            <a href="https://shop.id.me/stores/5152-jillian-michaels-the-fitness-app" class="w-inline-block"><img loading="lazy" src="/org/jm/images/ExternalLink_Icon.svg" alt="" class="image"></a>
710          </li>
711          <li class="brix---footer-list-item-copy">
712            <a href="https://help.jillianmichaels.com" class="brix---footer-link">HELP CENTER</a>
713            <a href="https://help.jillianmichaels.com" class="w-inline-block"><img loading="lazy" src="/org/jm/images/ExternalLink_Icon.svg" alt="" class="image"></a>
714          </li>
715          <li class="brix---footer-list-item-copy">
716            <a href="/truemed" class="brix---footer-link">HSA/FSA</a>
717          </li>
718        </ul>
719      </div>
720      <div class="div-block-12"></div>
721      <div class="div-block-16">
722        <div class="brix---footer-col-title-copy">FOLLOW ALONG</div>
723        <ul role="list" class="brix---footer-list-wrapper-copy-icons-copy">
724          <li class="brix---footer-list-item">
725            <a href="https://www.instagram.com/jillianmichaels/" class="brix---social-media-link-wrapper w-inline-block">
726              <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Instagram_Icon.svg"></div>
727            </a>
728          </li>
729          <li class="brix---footer-list-item">
730            <a href="https://www.facebook.com/jillianmichaels/" class="brix---social-media-link-wrapper w-inline-block">
731              <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Facebook_Icon.svg"></div>
732            </a>
733          </li>
734          <li class="brix---footer-list-item">
735            <a href="https://x.com/JillianMichaels" class="brix---social-media-link-wrapper w-inline-block">
736              <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/X_Icon.svg"></div>
737            </a>
738          </li>
739          <li class="brix---footer-list-item">
740            <a href="https://www.tiktok.com/@jillianmichaels" class="brix---social-media-link-wrapper w-inline-block">
741              <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Social-Icons.svg"></div>
742            </a>
743          </li>
744          <li class="brix---footer-list-item">
745            <a href="https://www.youtube.com/c/JillianMichaels" class="brix---social-media-link-wrapper w-inline-block">
746              <div class="brix---icon-square-24px"><img alt="" src="/org/jm/images/Youtube_Icon.svg"></div>
747            </a>
748          </li>
749        </ul>
750      </div>
751      <div class="div-block-12"></div>
752      <div class="brix---footer-bottom-copy">
753        <div class="w-layout-hflex flex-block-81-copy">
754          <a href="/policies/privacy" class="link-15">Privacy Policy</a>
755          <a href="/policies/terms" class="link-16">Terms of Service</a>
756          <a href="/policies/cookies" class="link-17">Cookies</a>
757        </div>
758        <p class="brix---mg-bottom-0">2026 Jillian Michaels. All rights reserved. Site Credit</p>
759      </div>
760    </div>
761  </section>
762<dialog id="cart_dialog" data-cart-dialog-target="dialog" data-action="click->cart-dialog#backdropClose"
763        class="fixed inset-0 m-0 size-auto max-h-none max-w-none overflow-y-auto bg-transparent p-0">
764  <div class="flex min-h-full items-stretch justify-center text-center sm:items-center sm:px-6 lg:px-8">
765    <div data-cart-dialog-target="panel" class="flex w-full text-left text-base sm:my-8 sm:max-w-3xl">
766      <div class="relative flex w-full flex-col overflow-hidden bg-white pb-8 pt-6 sm:rounded-lg sm:pb-6 lg:py-8">
767        <div class="flex items-center justify-between px-4 sm:px-6 lg:px-8">
768          <h2 class="text-lg font-medium text-gray-900">Shopping Cart</h2>
769          <button type="button" data-action="click->cart-dialog#close" class="text-gray-400 hover:text-gray-500">
770            <span class="sr-only">Close</span>
771            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" class="size-6">
772              <path d="M6 18 18 6M6 6l12 12" stroke-linecap="round" stroke-linejoin="round" />
773            </svg>
774          </button>
775        </div>
776        <div id="cart_dialog_contents" data-cart-count="0" data-cart-product-ids="" class="flex flex-1 flex-col">
777    <p class="px-4 py-10 text-center text-sm text-gray-500 sm:px-6 lg:px-8">Your cart is empty.</p>
778</div>
779
780      </div>
781    </div>
782  </div>
783</dialog>
784
785<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=68e57f3a62c4bf057fb2e9ed" type="text/javascript"></script>
vendor: 1 bytes, line 785
785
786<script src="/org/jm/js/webflow.js" type="text/javascript"></script>
vendor: 1 bytes, line 786
786
787<script>
788function wfCustomReady(fn) { document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", fn) : fn(); }
789</script>
vendor: 1 bytes, line 789
789
790<script>
791wfCustomReady( function() {
792  // Only execute this logic if the user actually has Reduced Motion turned on
793  const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
794  if (prefersReducedMotion) {
795    const videoWrapper = document.querySelector(".hero-video");
796    const playBtn = document.querySelector(".video-play-btn") || document.getElementById("video-play-btn");
797    if (videoWrapper && playBtn) {
798      const nativeVideo = videoWrapper.querySelector("video");
799      if (nativeVideo) {
800        // 1. Fully halt Webflow's automated background video playback system
801        nativeVideo.autoplay = false;
802        nativeVideo.pause();
803        // 2. Listen for the user to override and click your Webflow play button
804        playBtn.addEventListener("click", function(e) {
805          e.preventDefault();
806          e.stopPropagation();
807          // 3. Add the class that triggers our CSS overrides to show the video tag again
808          videoWrapper.classList.add("is-playing");
809          // 4. Play the stream file
810          nativeVideo.play();
811          // 5. Hide your Webflow play button component
812          playBtn.style.display = "none";          
813        });
814      }
815    }
816  }
817});
818</script>
818
819
820<script>
821  // Inline add-to-cart: intercept the tile forms marked data-cart-add (data-turbo=false keeps
822  // Turbo away), POST as JSON, then flip the tile's CTA row to IN CART, sync every nav badge,
823  // and refresh the cart modal's contents. Without JS the same forms plain-POST and bounce back.
824  function syncCartBadges(count) {
825    document.querySelectorAll("[data-cart-badge]").forEach(function (badge) {
826      badge.textContent = count > 0 ? String(count) : "";
827      badge.hidden = count <= 0;
828    });
829  }
830  // Removals INSIDE the modal go through Turbo Streams (Josh's OTT flow), which replace
831  // #cart_dialog_contents but not our badges or catalog tiles — the observer below resyncs
832  // badges from data-cart-count and reconciles any tile whose IN CART state no longer
833  // matches the cart (each stale tile re-fetches its CTA row from /programs/tile_ctas).
834  function reconcileCartTiles(idsCsv) {
835    var ids = idsCsv ? idsCsv.split(",") : [];
836    document.querySelectorAll("[data-cart-tile]").forEach(function (tile) {
837      var pid = tile.dataset.cartTile;
838      var showsInCart = !!tile.querySelector('a[href="/cart"]');
839      if (showsInCart === ids.indexOf(pid) >= 0) return;
840      fetch("/programs/tile_ctas/" + pid, { credentials: "same-origin" })
841        .then(function (r) { return r.ok ? r.text() : null; })
842        .then(function (html) { if (html) tile.innerHTML = html; });
843    });
844  }
845  // Turbo Drive re-executes body scripts on every visit while the document (and its
846  // listeners) persists — unguarded, each navigation stacks another copy of every
847  // document-level listener, and one BUY click fires N simultaneous POSTs (the
848  // duplicate-cart-lines bug). Guard: document listeners bind once per real page load.
849  if (!window.__jmChromeWired) {
850  window.__jmChromeWired = true;
851  document.addEventListener("submit", function (event) {
852    var form = event.target.closest("form[data-cart-add]");
853    if (!form) return;
854    event.preventDefault();
855    if (form.dataset.cartInflight) return; // swallow double-clicks while a POST is out
856    form.dataset.cartInflight = "1";
857    var token = document.querySelector('meta[name="csrf-token"]');
858    fetch(form.action, {
859      method: "POST",
860      headers: { "Accept": "application/json", "X-CSRF-Token": token ? token.content : "" },
861      body: new FormData(form),
862      credentials: "same-origin"
863    }).then(function (response) {
864      if (!response.ok) throw new Error("add failed");
865      return response.json();
866    }).then(function (data) {
867      syncCartBadges(data.count);
868      var contents = document.getElementById("cart_dialog_contents");
869      if (contents && data.dialog_html) contents.outerHTML = data.dialog_html;
870      var tile = form.closest("[data-cart-tile]");
871      if (tile) fetch("/programs/tile_ctas/" + tile.dataset.cartTile, { credentials: "same-origin" })
872        .then(function (r) { return r.ok ? r.text() : null; })
873        .then(function (html) { if (html) tile.innerHTML = html; });
874    }).catch(function () {
875      form.submit(); // fall back to the plain POST + reload path
876    }).finally(function () {
877      delete form.dataset.cartInflight;
878    });
879  });
880  // Newsletter: the Webflow subscribe forms (footer x2 + drawer) post to our /newsletter
881  // proxy (-> Drupal -> SendGrid). Capture phase + stopPropagation beats webflow.js's own
882  // w-form handler, which would otherwise post to Webflow's dead endpoint.
883  document.addEventListener("submit", function (event) {
884    var form = event.target.closest('form[id^="wf-form-BRIX---Footer-Subscribe"]');
885    if (!form) return;
886    event.preventDefault();
887    event.stopPropagation();
888    var token = document.querySelector('meta[name="csrf-token"]');
889    var email = (form.querySelector('input[type="email"]') || {}).value || "";
890    var wrap = form.parentElement;
891    function showFail() {
892      var fail = wrap.querySelector(".w-form-fail");
893      if (fail) fail.style.display = "block";
894    }
895    fetch("/newsletter", {
896      method: "POST",
897      headers: { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded",
898                 "X-CSRF-Token": token ? token.content : "" },
899      body: "email=" + encodeURIComponent(email),
900      credentials: "same-origin"
901    }).then(function (r) { return r.json(); }).then(function (data) {
902      if (data.status !== "subscribed") return showFail();
903      var done = wrap.querySelector(".w-form-done");
904      form.style.display = "none";
905      if (done) done.style.display = "block";
906    }).catch(showFail);
907  }, true);
908  // Close the account dropdown when clicking anywhere outside it (native <details> keeps
909  // itself open otherwise).
910  document.addEventListener("click", function (event) {
911    document.querySelectorAll("details.jm-account-menu[open]").forEach(function (menu) {
912      if (!menu.contains(event.target)) menu.removeAttribute("open");
913    });
914  });
915  } // end __jmChromeWired once-guard
916  // The observer, unlike the document listeners, MUST re-attach on every Turbo visit —
917  // each body swap replaces #cart_dialog with a new node. Disconnect the previous
918  // visit's observer so dead ones don't accumulate.
919  if (window.__jmCartObserver) window.__jmCartObserver.disconnect();
920  var dialog = document.getElementById("cart_dialog");
921  if (dialog) {
922    window.__jmCartObserver = new MutationObserver(function () {
923      var contents = document.getElementById("cart_dialog_contents");
924      if (!contents) return;
925      if (contents.dataset.cartCount) syncCartBadges(parseInt(contents.dataset.cartCount, 10));
926      reconcileCartTiles(contents.dataset.cartProductIds);
927    });
928    window.__jmCartObserver.observe(dialog, { childList: true, subtree: true });
929  }
930</script>
930
931</body>
932</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.