PageSourceSearch

https://jim-page.webflow.io/blog

html jim-page.webflow.io collected 2026-10-03 13:14:24 UTC 153,116 bytes, 3,322 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Wed Sep 30 2026 17:22:25 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="jim-page.webflow.io" data-wf-page="67699fcc85e15fffb5ca64c8" data-wf-site="65fc1fa2c1e7707c3f051403" lang="en"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Jim Blog — Tips &amp; Guides to Get Paid and Grow</title><meta content="Read the Jim blog for payment tips, growth strategies, and AI tools. Practical guides to help you get paid and grow your business." name="description"/><meta content="Jim Blog — Tips &amp; Guides to Get Paid and Grow" property="og:title"/><meta content="Read the Jim blog for payment tips, growth strategies, and AI tools. Practical guides to help you get paid and grow your business." property="og:description"/><meta content="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a6ccb4438c2b6b758191031_Opengraph-HomePage.webp" property="og:image"/><meta content="Jim Blog — Tips &amp; Guides to Get Paid and Grow" name="twitter:title"/><meta content="Read the Jim blog for payment tips, growth strategies, and AI tools. Practical guides to help you get paid and grow your business." name="twitter:description"/><meta content="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a6ccb4438c2b6b758191031_Opengraph-HomePage.webp" name="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/css/jim-page.shared.4b85bb181.min.css" rel="stylesheet" type="text/css" integrity="sha384-S4W7GBlREAt/JJhgXHbtCi9xVbe+eNfzTgAXPEmiaTBKQmzJAToQGqaW8gaZfBqn" crossorigin="anonymous"/><link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/css/jim-page.67699fcc85e15fffb5ca64c8.656498df0.opt.min.css" rel="stylesheet" type="text/css" integrity="sha384-ZWSY3wNeexRkrLE2DSTURAElPCn9XdZVQMyRrqqc+eTImjy6jQVG1RzEe2Z6Mgvh" crossorigin="anonymous"/>
1<script type="text/javascript">!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>
1<link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a748574a9ff2542ecfd4346_Favicon.png" rel="icon" type="image/png" sizes="32x32" media="(prefers-color-scheme: light)"/><link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a748574a9ff2542ecfd4346_Favicon.png" rel="icon" type="image/png" sizes="32x32" media="(prefers-color-scheme: dark)"/><link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a748574b0105968a76870b7_Favicon.png" rel="icon" type="image/png" sizes="48x48"/><link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a74857ca9ff2542ecfd44a0_Webclip.png" rel="apple-touch-icon" sizes="180x180"/><link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a74857ca9ff2542ecfd449c_Webclip.png" rel="icon" type="image/png" sizes="192x192"/><link href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a74857ccbd18bea6bdce292_Webclip.png" rel="icon" type="image/png" sizes="512x512"/>
1<script>(function(w,i,g){w[g]=w[g]||[];if(typeof w[g].push=='function')w[g].push.apply(w[g],Array.isArray(i)?i:[i]);})(window,['G-559072CGWW'],'google_tags_first_party');</script>
1<script async="" src="/haqt6iy0yx2eNjVmYzFmYTJjMWU3NzA3YzNmMDUxNDAz/PEFDjlnwN8gRTeJEElRetEFQ4G0"></script>
1<script type="text/javascript">window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('set', 'developer_id.dZGVlNj', true);gtag('set', 'developer_id.dYWYxNW', true);gtag('js', new Date());gtag('config', 'G-559072CGWW');</script>
1<link rel="preconnect" href="cdn.prod.website-files.com" crossorigin>
2<link rel="preconnect" href="www.googletagmanager.com" crossorigin>
3<!-- Preconnect RudderStack -->
4<link rel="preconnect" href="https://cdn.rudderlabs.com" crossorigin>
5<link rel="preconnect" href="https://jimussagosqd.dataplane.rudderstack.com" crossorigin>
6
7<style>
8  /*lenis -- IMPORTANT*/
9  .lenis.lenis-smooth [data-lenis-prevent] {
10    overscroll-behavior: contain;
11  }
12</style>
13
14<!-- Google Tag Manager -->
15<script>
vendor: 327 bytes, lines 15-19
15(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
16new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
17j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
18'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
19})(window,document,'script','dataLayer','
19GTM-5X4DKQFL
vendor: 3 bytes, line 19
19');
19</script>
19
20<!-- End Google Tag Manager -->
21
22<link rel="shortcut icon" href="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a748574a9ff2542ecfd4346_Favicon.png">
23
24<!-- ===== Restore Params from Cookie (Safari ITP workaround) ===== -->
25<script>
26(function() {
27  "use strict";
28
29  var COOKIE_NAME = "_exp_ctx";
30
31  // Get cookie value
32  var getCookie = function(name) {
33    var needle = name + "=";
34    var hit = document.cookie.split("; ").find(function(c) { return c.startsWith(needle); });
35    return hit ? hit.slice(needle.length) : null;
36  };
37
38  // Delete cookie
39  var deleteCookie = function(name, domain) {
40    document.cookie = name + "=; Path=/; Domain=" + domain + "; Secure; SameSite=Lax; Max-Age=0";
41  };
42
43  // Get domain for cookie (e.g., ".jim.com")
44  var getCookieDomain = function() {
45    var host = window.location.hostname;
46    if (host.startsWith("www.")) host = host.slice(4);
47    return "." + host;
48  };
49
50  try {
51    var raw = getCookie(COOKIE_NAME);
52    if (!raw) return; // No backup cookie, nothing to do
53
54    var params = JSON.parse(decodeURIComponent(raw));
55    if (!params || typeof params !== "object") return;
56
57    var url = new URL(window.location.href);
58    var changed = false;
59
60    // Only restore params that are missing from current URL
61    for (var key in params) {
62      if (params.hasOwnProperty(key) && !url.searchParams.has(key)) {
63        url.searchParams.set(key, params[key]);
64        changed = true;
65      }
66    }
67
68    // Update URL if we restored any params
69    if (changed && window.history && window.history.replaceState) {
70      window.history.replaceState(null, "", url.pathname + url.search + url.hash);
71    }
72
73    // Always delete the cookie after reading (one-time use)
74    deleteCookie(COOKIE_NAME, getCookieDomain());
75
76  } catch (e) {
77    // Silently fail - don't break the page
78  }
79})();
80</script>
80
81<!-- ===== End Restore Params ===== -->
82
83<!-- ===== RudderStack SDK v3.2.0 ===== -->
84<script type="text/javascript">
85(function() {
86  "use strict";
87
88  // Helper functions for cookies
89  var CLICK_ID_COOKIE_NAMES = ["_fbp", "_ttp"];
90
91  var getCookie = function(name) {
92    var needle = name + "=";
93    var hit = document.cookie.split("; ").find(function(c) { return c.startsWith(needle); });
94    return hit ? hit.slice(needle.length) : undefined;
95  };
96
97  var getAllCookiesAsObject = function() {
98    var obj = {};
99    if (!document.cookie) return obj;
100    document.cookie.split("; ").forEach(function(pair) {
101      var idx = pair.indexOf("=");
102      var key = idx >= 0 ? pair.slice(0, idx) : pair;
103      var val = idx >= 0 ? pair.slice(idx + 1) : "";
104      obj[key] = val;
105    });
106    return obj;
107  };
108
109  var browserIds = CLICK_ID_COOKIE_NAMES
110    .map(function(k) { return getCookie(k); })
111    .filter(Boolean);
112
113  var cookiesObj = getAllCookiesAsObject();
114
115  // RudderStack SDK v3.2.0 snippet
116  window.RudderSnippetVersion = "3.2.0";
117  var identifier = "rudderanalytics";
118  if (!window[identifier]) {
119    window[identifier] = [];
120  }
121  var rudderanalytics = window[identifier];
122  if (Array.isArray(rudderanalytics)) {
123    if (rudderanalytics.snippetExecuted === true && window.console && console.error) {
124      console.error("RudderStack JavaScript SDK snippet included more than once.");
125    } else {
126      rudderanalytics.snippetExecuted = true;
127      window.rudderAnalyticsBuildType = "legacy";
128      var sdkBaseUrl = "https://cdn.rudderlabs.com";
129      var sdkVersion = "v3";
130      var sdkFileName = "rsa.min.js";
131      var scriptLoadingMode = "async";
132      var methods = [ "setDefaultInstanceKey", "load", "ready", "page", "track", "identify", "alias", "group", "reset", "setAnonymousId", "startSession", "endSession", "consent", "addCustomIntegration" ];
133      for (var i = 0; i < methods.length; i++) {
134        var method = methods[i];
135        rudderanalytics[method] = function(methodName) {
136          return function() {
137            if (Array.isArray(window[identifier])) {
138              rudderanalytics.push([ methodName ].concat(Array.prototype.slice.call(arguments)));
139            } else {
140              var _methodName;
141              (_methodName = window[identifier][methodName]) === null || _methodName === undefined || _methodName.apply(window[identifier], arguments);
142            }
143          };
144        }(method);
145      }
146      try {
147        new Function('class Test{field=()=>{};test({prop=[]}={}){return prop?(prop?.property??[...prop]):import("");}}');
148        window.rudderAnalyticsBuildType = "modern";
149      } catch (e) {}
150      var head = document.head || document.getElementsByTagName("head")[0];
151      var body = document.body || document.getElementsByTagName("body")[0];
152      window.rudderAnalyticsAddScript = function(url, extraAttributeKey, extraAttributeVal) {
153        var scriptTag = document.createElement("script");
154        scriptTag.src = url;
155        scriptTag.setAttribute("data-loader", "RS_JS_SDK");
156        if (extraAttributeKey && extraAttributeVal) {
157          scriptTag.setAttribute(extraAttributeKey, extraAttributeVal);
158        }
159        if (scriptLoadingMode === "async") {
160          scriptTag.async = true;
161        } else if (scriptLoadingMode === "defer") {
162          scriptTag.defer = true;
163        }
164        if (head) {
165          head.insertBefore(scriptTag, head.firstChild);
166        } else {
167          body.insertBefore(scriptTag, body.firstChild);
168        }
169      };
170      window.rudderAnalyticsMount = function() {
171        (function() {
172          if (typeof globalThis === "undefined") {
173            var getGlobal = function getGlobal() {
174              if (typeof self !== "undefined") {
175                return self;
176              }
177              if (typeof window !== "undefined") {
178                return window;
179              }
180              return null;
181            };
182            var global = getGlobal();
183            if (global) {
184              Object.defineProperty(global, "globalThis", {
185                value: global,
186                configurable: true
187              });
188            }
189          }
190        })();
191        window.rudderAnalyticsAddScript("".concat(sdkBaseUrl, "/").concat(sdkVersion, "/").concat(window.rudderAnalyticsBuildType, "/").concat(sdkFileName), "data-rsa-write-key", "2p4R4M1dTCH2cp4vzLXhSYpEikO");
192      };
193      if (typeof Promise === "undefined" || typeof globalThis === "undefined") {
194        window.rudderAnalyticsAddScript("https://polyfill-fastly.io/v3/polyfill.min.js?ver
194sion=3.111.0&features=Symbol%2CPromise&callback=rudderAnalyticsMount");
195      } else {
196        window.rudderAnalyticsMount();
197      }
198      var loadOptions = {};
199      rudderanalytics.load("2p4R4M1dTCH2cp4vzLXhSYpEikO", "https://jimussagosqd.dataplane.rudderstack.com", loadOptions);
200
201      // Set anonymousId from exp_device_id cookie (for experiments tracking consistency)
202      var expDeviceId = cookiesObj["exp_device_id"] || "";
203      if (expDeviceId) {
204        rudderanalytics.setAnonymousId(expDeviceId);
205      }
206       var FIRST_TOUCH_KEY = "_jim_first_touch_v1";
207      var FIRST_TOUCH_KEYS = [
208        "utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "utm_name",
209        "utm_id", "gclid", "fbclid", "ttclid", "click_id",
210        "gbraid", "wbraid", "gad_source", "gad_campaignid"
211      ];
212      var cookieMap = (typeof cookiesObj === "object" && cookiesObj) ? cookiesObj : {};
213      var parseSearch = function (raw) {
214        var out = {};
215        if (!raw) return out;
216        var q = String(raw);
217        var qIdx = q.indexOf("?");
218        if (qIdx >= 0) q = q.slice(qIdx + 1);
219        var hashIdx = q.indexOf("#");
220        if (hashIdx >= 0) q = q.slice(0, hashIdx);
221        try {
222          var sp = new URLSearchParams(q);
223          FIRST_TOUCH_KEYS.forEach(function (k) {
224            var v = sp.get(k);
225            if (v) out[k] = v;
226          });
227        } catch (e) {}
228        return out;
229      };
230      var fbclidFromFbc = function (fbc) {
231        if (!fbc) return "";
232        var parts = String(fbc).split(".");
233        if (parts.length >= 4) return parts.slice(3).join(".");
234        return "";
235      };
236      var pickIncoming = function () {
237        var out = parseSearch(window.location.search);
238        var fromCookie = parseSearch(cookieMap.search_params || cookieMap.ifp_search_params || "");
239        FIRST_TOUCH_KEYS.forEach(function (k) {
240          if (!out[k] && fromCookie[k]) out[k] = fromCookie[k];
241        });
242        if (!out.fbclid) {
243          var fromFbc = fbclidFromFbc(cookieMap._fbc);
244          if (fromFbc) out.fbclid = fromFbc;
245        }
246        return out;
247      };
248      var storedFirst = {};
249      try {
250        storedFirst = JSON.parse(localStorage.getItem(FIRST_TOUCH_KEY) || "{}") || {};
251      } catch (e) {
252        storedFirst = {};
253      }
254      var incoming = pickIncoming();
255      var merged = {};
256      var wroteNew = false;
257      FIRST_TOUCH_KEYS.forEach(function (k) {
258        if (storedFirst[k]) merged[k] = storedFirst[k];
259        else if (incoming[k]) {
260          merged[k] = incoming[k];
261          wroteNew = true;
262        }
263      });
264      if (Object.keys(merged).length) {
265        try { localStorage.setItem(FIRST_TOUCH_KEY, JSON.stringify(merged)); } catch (e) {}
266        if (wroteNew) {
267          var traits = {};
268          if (merged.utm_source) traits.initial_utm_source = merged.utm_source;
269          if (merged.utm_medium) traits.initial_utm_medium = merged.utm_medium;
270          if (merged.utm_campaign || merged.utm_name) traits.initial_utm_campaign = merged.utm_campaign || merged.utm_name;
271          if (merged.utm_content) traits.initial_utm_content = merged.utm_content;
272          if (merged.utm_term) traits.initial_utm_term = merged.utm_term;
273          if (merged.utm_id) traits.initial_utm_id = merged.utm_id;
274          if (merged.gclid) traits.initial_gclid = merged.gclid;
275          if (merged.fbclid) traits.initial_fbclid = merged.fbclid;
276          if (merged.ttclid || merged.click_id) traits.initial_ttclid = merged.ttclid || merged.click_id;
277          if (merged.gbraid) traits.initial_gbraid = merged.gbraid;
278          if (merged.wbraid) traits.initial_wbraid = merged.wbraid;
279          if (merged.gad_source) traits.initial_gad_source = merged.gad_source;
280          if (merged.gad_campaignid) traits.initial_gad_campaignid = merged.gad_campaignid;
281          rudderanalytics.identify(traits);
282        }
283      }
284      rudderanalytics.page({
285        browser_id: browserIds,
286        cookies: cookiesObj
287      });
288    }
289  }
290})();
291</script>
291
292<!-- ===== End RudderStack SDK ===== -->
293
294<!-- ===== Experiments - Exposure Tracking ===== -->
295<script>
296(function () {
297  "use strict";
298
299  var LS_KEY = "exp_pending_exposure";
300
301  var getCookieMap = function() {
302    var obj = {};
303    if (!document.cookie) return obj;
304    document.cookie.split("; ").forEach(function(pair) {
305      var idx = pair.indexOf("=");
306      var key = idx >= 0 ? pair.slice(0, idx) : pair;
307      var val = idx >= 0 ? pair.slice(idx + 1) : "";
308      obj[key] = decodeURIComponent(val);
309    });
310    return obj;
311  };
312
313  var cookies = getCookieMap();
314  var assignment = cookies["exp_assignment"];
315  var flagKey, variant, expDeviceId, source;
316
317  // 1. Try to get assignment from cookie
318  if (assignment) {
319    var sep = assignment.indexOf(":");
320    if (sep >= 1) {
321      flagKey = assignment.substring(0, sep);
322      variant = assignment.substring(sep + 1);
323      source = "cookie";
324    }
325  }
326
327  // 2. Fallback: try query params
328  if (!flagKey || !variant) {
329    var params = new URLSearchParams(window.location.search);
330    flagKey = params.get("_exp_flag") || "";
331    variant = params.get("_exp_variant") || "";
332    if (flagKey && variant) source = "query_param";
333  }
334
335  // 3. Fallback: try localStorage (retry from previous failed attempt)
336  if (!flagKey || !variant) {
337    try {
338      var stored = localStorage.getItem(LS_KEY);
339      if (stored) {
340        var pending = JSON.parse(stored);
341        if (pending.status === "beacon_sent") {
342          localStorage.removeItem(LS_KEY);
343        } else if (pending.flagKey && pending.variant && pending.status === "pending") {
344          flagKey = pending.flagKey;
345          variant = pending.variant;
346          expDeviceId = pending.expDeviceId || "";
347          source = "localStorage_retry";
348        }
349      }
350    } catch (e) {}
351  }
352
353  // No experiment assignment found
354  if (!flagKey || !variant) return;
355
356  // Get device ID
357  if (!expDeviceId) expDeviceId = cookies["exp_device_id"] || "";
358  if (!expDeviceId) {
359    var qp = new URLSearchParams(window.location.search);
360    expDeviceId = qp.get("_exp_device_id") || "";
361  }
362
363  // Clean experiment params from URL (better UX)
364  if (window.history && window.history.replaceState) {
365    var url = new URL(window.location.href);
366    if (url.searchParams.has("_exp_flag") || url.searchParams.has("_exp_variant") || url.searchParams.has("_exp_device_id")) {
367      url.searchParams.delete("_exp_flag");
368      url.searchParams.delete("_exp_variant");
369      url.searchParams.delete("_exp_device_id");
370      window.history.replaceState(null, "", url.pathname + url.search + url.hash);
371    }
372  }
373
374  // Persist to localStorage (for retry if exposure fails)
375  try {
376    localStorage.setItem(LS_KEY, JSON.stringify({
377      flagKey: flagKey,
378      variant: variant,
379      expDeviceId: expDeviceId,
380      status: "pending",
381      ts: Date.now()
382    }));
383  } catch (e) {}
384
385  var exposureFired = false;
386
387  // Fire exposure event via RudderStack
388  var fireExposure = function() {
389    window.rudderanalytics.track("$exposure", {
390      flag_key: flagKey,
391      variant: variant,
392      exp_device_id: expDeviceId
393    }, {}, function () {
394      exposureFired = true;
395      // Clear assignment cookie
396      document.cookie = "exp_assignment=; Path=/; Domain=.jim.com; Secure; SameSite=Lax; Max-Age=0";
397      try { localStorage.removeItem(LS_KEY); } catch (e) {}
398    });
399  };
400
401  // Fallback: sendBeacon on page unload
402  document.addEventListener("pagehide", function () {
403    if (exposureFired) return;
404    if (navigator.sendBeacon) {
405      var sent = navigator.sendBeacon("/exp/exposure-fallback", JSON.stringify({
406        flag_key: flagKey,
407        variant: variant,
408        exp_device_id: expDeviceId,
409        ts: Date.now()
410      }));
411      if (sent) {
412        exposureFired = true;
413        try {
414          localStorage.setItem(LS_KEY, JSON.stringify({
415            flagKey: flagKey,
416            variant: variant,
417            expDeviceId: expDeviceId,
418            status: "beacon_sent",
419            ts: Date.now()
420          }));
421        } catch (e) {}
422      }
423    }
424  });
425
426  fireExposure();
427})();
428</script>
428
429<!-- ===== End Experiments - Exposure Tracking ===== --><link rel="canonical" href="https://www.jim.com/blog"/>
430
431
432<!-- START Data Structure .Schema -->
433<script type="application/ld+json">
434{
435  "@context": "https://schema.org",
436  "@graph": [
437    {
438      "@type": "CollectionPage",
439      "name": "JIM Blog",
440      "description": "Sell anywhere, anytime. Get paid instantly. AI Magic.",
441      "url": "https://www.jim.com/blog",
442      "publisher": {
443        "@type": "Organization",
444        "@id": "https://www.jim.com/blog",
445        "name": "JIM",
446        "logo": {
447          "@type": "ImageObject",
448          "url": "https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/65fcae8dd405deb75e3dc056_jim_logo_black.svg"
449        },
450        "description": "Sell anywhere, anytime. Get paid instantly. AI Magic."
451      },
452      "about": {
453        "@type": "Thing",
454        "name": "Sell anywhere, anytime. Get paid instantly. AI Magic."
455      },
456      "image": {
457        "@type": "ImageObject",
458        "url": "https://cdn.prod.website-files.com/6409f1c56b3da52147058438/64ac1451f7b4cd036e9e060e_infinitepay_logo_round.svg"
459      },
460      "inLanguage": "en",
461      "isPartOf": {
462        "@type": "WebSite",
463        "@id": "https://www.jim.com",
464        "name": "JIM",
465        "url": "https://www.jim.com/"
466      }
467    },
468    {
469      "@type": "BreadcrumbList",
470      "@id": "https://www.jim.com/blog#breadcrumb",
471      "name": "Breadcrumb",
472      "itemListElement": [
473        {
474          "@type": "ListItem",
475          "position": 1,
476          "name": "JIM",
477          "item": "https://www.jim.com/"
478        },
479        {
480          "@type": "ListItem",
481          "position": 2,
482          "name": "Blog",
483          "item": "https://www.jim.com/blog"
484        }
485      ]
486    }
487  ]
488}
489</script>
489
490<!-- END Data Structure .Schema -->
491</head><body class="rb_jim-body"><div class="rb_page-wrapper"><div class="hide"><div class="css w-embed"><style>
492  /* Make text look crisper and more legible in all browsers */
493  body {
494    -webkit-font-smoothing: antialiased;
495    -moz-osx-font-smoothing: grayscale;
496    font-smoothing: antialiased;
497    text-rendering: optimizeLegibility;
498  }
499
500  /* Focus state style for keyboard navigation for the focusable elements */
501  *[tabindex]:focus-visible,
502  input[type='file']:focus-visible {
503    outline: 0.125rem solid #4d65ff;
504    outline-offset: 0.125rem;
505  }
506
507  video {
508    width: 100%;
509    object-fit: cover;
510  }
511
512  /* Set color style to inherit */
513  .inherit-color * {
514    color: inherit;
515  }
516
517  /* Get rid of top margin on first element in any rich text element */
518  .w-richtext > :not(div):first-child,
519  .w-richtext > div:first-child > :first-child {
520    margin-top: 0 !important;
521  }
522
523  /* Get rid of bottom margin on last element in any rich text element */
524  .w-richtext > :last-child,
525  .w-richtext ol li:last-child,
526  .w-richtext ul li:last-child {
527    margin-bottom: 0 !important;
528  }
529
530  /* Make sure containers never lose their center alignment */
531  .container-medium,
532  .container-small,
533  .rb_container-large {
534    margin-right: auto !important;
535    margin-left: auto !important;
536  }
537
538  /* 
539Make the following elements inherit typography styles from the parent and not have hardcoded values. 
540Important: You will not be able to style for example "All Links" in Designer with this CSS applied.
541Uncomment this CSS to use it in the project. Leave this message for future hand-off.
542*/
543  /*
544a,
545.w-input,
546.w-select,
547.w-tab-link,
548.w-nav-link,
549.w-dropdown-btn,
550.w-dropdown-toggle,
551.w-dropdown-link {
552  color: inherit;
553  text-decoration: inherit;
554  font-size: inherit;
555}
556*/
557
558  /* Apply "..." after 3 lines of text */
559  .text-style-3lines {
560    display: -webkit-box;
561    overflow: hidden;
562    -webkit-line-clamp: 3;
563    -webkit-box-orient: vertical;
564  }
565
566  /* Apply "..." after 2 lines of text */
567  .text-style-2lines {
568    display: -webkit-box;
569    overflow: hidden;
570    -webkit-line-clamp: 2;
571    -webkit-box-orient: vertical;
572  }
573
574  /* These classes are never overwritten */
575  .hide {
576    display: none !important;
577  }
578
579  @media screen and (max-width: 991px) {
580    .hide,
581    .hide-tablet {
582      display: none !important;
583    }
584  }
585  @media screen and (max-width: 767px) {
586    .hide-mobile-landscape {
587      display: none !important;
588    }
589  }
590  @media screen and (max-width: 479px) {
591    .hide-mobile {
592      display: none !important;
593    }
594  }
595
596  .margin-0 {
597    margin: 0rem !important;
598  }
599
600  .padding-0 {
601    padding: 0rem !important;
602  }
603
604  .spacing-clean {
605    padding: 0rem !important;
606    margin: 0rem !important;
607  }
608
609  .margin-top {
610    margin-right: 0rem !important;
611    margin-bottom: 0rem !important;
612    margin-left: 0rem !important;
613  }
614
615  .padding-top {
616    padding-right: 0rem !important;
617    padding-bottom: 0rem !important;
618    padding-left: 0rem !important;
619  }
620
621  .margin-right {
622    margin-top: 0rem !important;
623    margin-bottom: 0rem !important;
624    margin-left: 0rem !important;
625  }
626
627  .padding-right {
628    padding-top: 0rem !important;
629    padding-bottom: 0rem !important;
630    padding-left: 0rem !important;
631  }
632
633  .margin-bottom {
634    margin-top: 0rem !important;
635    margin-right: 0rem !important;
636    margin-left: 0rem !important;
637  }
638
639  .padding-bottom {
640    padding-top: 0rem !important;
641    padding-right: 0rem !important;
642    padding-left: 0rem !important;
643  }
644
645  .margin-left {
646    margin-top: 0rem !important;
647    margin-right: 0rem !important;
648    margin-bottom: 0rem !important;
649  }
650
651  .padding-left {
652    padding-top: 0rem !important;
653    padding-right: 0rem !important;
654    padding-bottom: 0rem !important;
655  }
656
657  .margin-horizontal {
658    margin-top: 0rem !important;
659    margin-bottom: 0rem !important;
660  }
661
662  .padding-horizontal {
663    padding-top: 0rem !important;
664    padding-bottom: 0rem !important;
665  }
666
667  .margin-vertical {
668    margin-right: 0rem !important;
669    margin-left: 0rem !important;
670  }
671
672  .padding-vertical {
673    padding-right: 0rem !important;
674    padding-left: 0rem !important;
675  }
676
677  html.wf-design-mode .link-full {
678    pointer-events: none;
679  }
680
681  [data-hover='scale'] img:not([data-hover='none']) {
682    transition: transform 0.8s ease;
683  }
684
685  [data-hover='scale']:hover img:not([data-hover='none']) {
686    transform: scale(1.05);
687  }
688  .u-icon.rb_is-mobile {
689    display: flex !important;
690  }
691
692  [data-state] {
693    --_state---true: 1;
694    --_state---false: 0;
695  }
696
697  .is-active,
698  [data-state~='open']:is(.w--open, :has(.w--open)),
699  [data-state~='expanded']:is([aria-expanded='true'], :has([aria-expanded='true'])) {
700    --_state---true: 0;
701    --_state---false: 1;
702  }
703
704  html.wf-design-mode [lottie-stack='1'] {
705    opacity: 1;
706  }
707
708  html.is-safari [button-sticky="spacer"].is-collapsed {
709    height: 3.5rem;
710  }
711  
712  html.is-safari [button-sticky="spacer"].is-collapsed.is-scrolled {
713    height: 1rem;
714  }
715
716  html, body {
717  overscroll-behavior: none;
718}
719
720  [safari-ignore-tint] {
721  backdrop-filter: blur(0.1px);
722  -webkit-backdrop-filter: blur(0.1px);
723}
724</style>
725
726<style>
727  html { font-size: 1rem; }
728  @media screen and (max-width:1920px) { html { font-size: 1rem; } }
729  @media screen and (max-width:1440px) { html { font-size: calc(0.39866369710467703rem + 0.6681514476614699vw); } }
730  @media screen and (max-width:991px) { html { font-size: 1rem; } }
731</style>
732
733<!-- Text Style Start -->
734<style>
735  ::selection {
736  background-color:#FF5C19;
737  color: #1A0000;
738</style>  
739<!-- Text Style End --></div><div class="css w-embed w-script"><style>
740  [data-button='bg'] {
741    opacity: 0;
742    transition: opacity 0.4s;
743  }
744
745  [data-button='trigger']:hover [data-button='bg'] {
746    opacity: 1;
747  }
748
749  @media screen and (max-width: 767px) {
750    [data-button='bg'] {
751      opacity: 1;
752    }
753  }
754
755  /* o .u-icon cobre os link_wrapper que nao tem o atributo link='icon' */
756  [link='icon'],
757  [link='hover'] .u-icon {
758    transition: transform 0.3s ease;
759  }
760
761  [link='hover']:hover [link='icon'],
762  [link='hover']:hover .u-icon {
763    transform: translateX(0.25rem);
764  }
765
766  @keyframes rb_button-icon-nudge {
767    0% {
768      transform: translateX(0);
769      animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
770    }
771    40% {
772      transform: translateX(-0.75rem);
773      animation-timing-function: cubic-bezier(0.33, 1, 0.68, 1);
774    }
775    100% {
776      transform: translateX(0);
777    }
778  }
779</style>
780
781<script>
782  (function () {
783    "use strict";
784
785    var REDUZIDO =
786      window.matchMedia &&
787      window.matchMedia("(prefers-reduced-motion: reduce)").matches;
788
789    var FINE =
790      window.matchMedia &&
791      window.matchMedia("(hover: hover) and (pointer: fine)").matches;
792
793    if (REDUZIDO || !FINE) return;
794
795    var VOLTA_MS = 450;
796    var VOLTA_EASE = "cubic-bezier(0.33, 1, 0.68, 1)";
797
798    function limparIcon(icon) {
799      icon.style.animation = "";
800      icon.style.transition = "";
801      icon.style.transform = "";
802    }
803
804    function lerX(icon) {
805      var t = getComputedStyle(icon).transform;
806      if (!t || t === "none") return 0;
807      return new DOMMatrixReadOnly(t).m41;
808    }
809
810    function init(trigger) {
811      var icon = trigger.querySelector("[button=\"icon\"]");
812      if (!icon) return;
813
814      trigger.addEventListener("mouseenter", function () {
815        limparIcon(icon);
816        icon.style.animation = "rb_button-icon-nudge 0.85s";
817      });
818
819      trigger.addEventListener("mouseleave", function () {
820        /* lê a posição ainda com a keyframe rodando: se corta a animação
821           antes, o browser zera o transform e a seta pula */
822        var x = lerX(icon);
823
824        icon.style.animation = "none";
825
826        if (Math.abs(x) < 0.5) {
827          limparIcon(icon);
828          return;
829        }
830
831        icon.style.transform = "translateX(" + x + "px)";
832        void icon.offsetWidth;
833
834        icon.style.transition =
835          "transform " + VOLTA_MS + "ms " + VOLTA_EASE;
836        icon.style.transform = "translateX(0)";
837
838        function onEnd(e) {
839          if (e.target !== icon || e.propertyName !== "transform") return;
840          icon.removeEventListener("transitionend", onEnd);
841          limparIcon(icon);
842        }
843
844        icon.addEventListener("transitionend", onEnd);
845      });
846    }
847
848    function boot() {
849      Array.prototype.slice
850        .call(document.querySelectorAll("[data-button=\"trigger\"]"))
851        .forEach(init);
852    }
853
854    if (document.readyState === "loading") {
855      document.addEventListener("DOMContentLoaded", boot);
856    } else {
857      boot();
858    }
859  })();
860</script>
860
861</div><div class="css w-embed"><style>
862  [marquee='gradient'] {
863    background: linear-gradient(90deg, #ffffff 9.38%, rgba(255, 255, 255, 0) 73.72%);
864  }
865  [feature='overlay'] {
866    background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.4) 100%);
867  }
868  [cascading-glass] {
869    backdrop-filter: blur(20px);
870
871    box-shadow:
872      -0.5px -0.5px 1px 0px #ffffff66 inset,
873      0.5px 0.5px 0px 0px #ffffff66 inset,
874      0px 4px 4px 0px #0000001a inset,
875      0px -4px 10px 0px #0000001a inset;
876  }
877  [marquee='gradient-dark'] {
878    background: linear-gradient(90deg, #1a0000 9.38%, rgba(26, 0, 0, 0) 73.72%);
879  }
880
881  [nav='backdrop'] {
882    backdrop-filter: blur(20px);
883    -webkit-backdrop-filter: blur(20px);
884    box-shadow:
885      -0.5px -0.5px 1px 0px #ffffff66 inset,
886      0.5px 0.5px 0px 0px #ffffff66 inset,
887      0px 4px 4px 0px #0000001a inset,
888      0px -4px 10px 0px #0000001a inset;
889  }
890</style></div><div class="hide"><div class="js w-embed w-script">
890<script>
891(function () {
892  const DEFAULT_PIXELS_PER_SECOND = 115;
893  let lastWindowWidth = 0;
894
895  function build(marquee) {
896    const source =
897      marquee.querySelector('[data-css-marquee-source]') ||
898      marquee.querySelector('[data-css-marquee-list]');
899    if (!source) return;
900    source.setAttribute('data-css-marquee-source', '');
901
902    marquee
903      .querySelectorAll('[data-css-marquee-list]:not([data-css-marquee-source])')
904      .forEach(function (clone) {
905        clone.remove();
906      });
907
908    // sem isso a emenda entre cópias fica sem o espaçamento que separa os itens
909    const gap = parseFloat(getComputedStyle(source).columnGap) || 0;
910    source.style.paddingRight = gap + 'px';
911
912    const listWidth = source.offsetWidth;
913    if (!listWidth) return;
914
915    // Ao fim do ciclo a primeira cópia já saiu de cena, então as restantes precisam
916    // alcançar a borda da janela sozinhas. Alguns wrappers são centralizados e se
917    // deslocam a cada cópia, por isso a cobertura é remedida a cada passo.
918    let copies = 1;
919    while (copies < 20) {
920      const left = marquee.getBoundingClientRect().left;
921      if (copies >= 2 && left + (copies - 1) * listWidth >= window.innerWidth) break;
922      const clone = source.cloneNode(true);
923      clone.removeAttribute('data-css-marquee-source');
924      clone.setAttribute('aria-hidden', 'true');
925      marquee.appendChild(clone);
926      copies++;
927    }
928
929    const speedAttr = parseFloat(marquee.dataset.cssMarqueeSpeed);
930    const pixelsPerSecond =
931      !isNaN(speedAttr) && speedAttr > 0 ? speedAttr : DEFAULT_PIXELS_PER_SECOND;
932    const lists = marquee.querySelectorAll('[data-css-marquee-list]');
933
934    lists.forEach(function (list) {
935      list.style.animation = 'none';
936    });
937    void marquee.offsetWidth; // reinicia todas as cópias em fase
938    const shouldRun = marquee.dataset.inView === 'true';
939    lists.forEach(function (list) {
940      list.style.animation = '';
941      list.style.animationDuration = listWidth / pixelsPerSecond + 's';
942      list.style.animationPlayState = shouldRun ? 'running' : 'paused';
943    });
944
945    marquee.dataset.cssMarqueeReady = 'true';
946  }
947
948  function buildAll() {
949    lastWindowWidth = window.innerWidth;
950    document.querySelectorAll('[data-css-marquee]').forEach(build);
951  }
952
953  function initCSSMarquee() {
954    const marquees = document.querySelectorAll('[data-css-marquee]');
955    if (!marquees.length) return;
956
957    const observer = new IntersectionObserver(
958      function (entries) {
959        entries.forEach(function (entry) {
960          const marquee = entry.target;
961          marquee.dataset.inView = entry.isIntersecting;
962          if (entry.isIntersecting && !marquee.dataset.cssMarqueeReady) build(marquee);
963          marquee.querySelectorAll('[data-css-marquee-list]').forEach(function (list) {
964            list.style.animationPlayState = entry.isIntersecting ? 'running' : 'paused';
965          });
966        });
967      },
968      { threshold: 0 },
969    );
970
971    marquees.forEach(function (marquee) {
972      if (marquee.dataset.cssMarqueeObserved) return;
973      marquee.dataset.cssMarqueeObserved = 'true';
974      marquee.dataset.inView = 'false';
975      observer.observe(marquee);
976    });
977
978    buildAll();
979
980    // fontes e imagens de CMS mudam a largura da lista depois da primeira medição
981    if (document.fonts && document.fonts.ready) document.fonts.ready.then(buildAll);
982    window.addEventListener('load', buildAll);
983
984    let resizeTimer;
985    window.addEventListener('resize', function () {
986      if (window.innerWidth === lastWindowWidth) return;
987      clearTimeout(resizeTimer);
988      resizeTimer = setTimeout(buildAll, 200);
989    });
990  }
991
992  window.initCSSMarquee = initCSSMarquee;
993  if (document.readyState === 'loading') {
994    document.addEventListener('DOMContentLoaded', initCSSMarquee);
995  } else {
996    initCSSMarquee();
997  }
998})();
999</script>
999</div><div class="css w-embed"><style>
1000@keyframes translateX { 
1001  to {
1002    transform: translateX(-100%);
1003  }
1004}
1005
1006[data-css-marquee-list] {
1007  animation: translateX 30s linear;
1008  animation-iteration-count: infinite;
1009  animation-play-state: paused;
1010}
1011
1012/* O backdrop-filter da nav re-rasteriza o que está atrás a cada frame e o marquee
1013   em movimento pisca, então ele para enquanto a nav está aberta (atrás do blur
1014   não dá pra perceber). !important porque o script escreve play-state inline. */
1015body:has(.nav_component .nav_dropdown_component > [aria-expanded='true']) [data-css-marquee-list],
1016body:has(.nav_component .w-nav-button.w--open) [data-css-marquee-list] {
1017  animation-play-state: paused !important;
1018}
1019
1020</style></div></div><div class="hide"><div class="js w-embed w-script">
1020<script>
1021  function initVimeoLightboxAdvanced() {
1022  // Single lightbox container
1023  const lightbox = document.querySelector('[data-vimeo-lightbox-init]');
1024  if (!lightbox) return;
1025
1026  // Open & close buttons
1027  const openButtons  = document.querySelectorAll('[data-vimeo-lightbox-control="open"]');
1028  const closeButtons = document.querySelectorAll('[data-vimeo-lightbox-control="close"]');
1029
1030  // Core elements inside lightbox
1031  let iframe            = lightbox.querySelector('iframe');               // ← now let
1032  const placeholder     = lightbox.querySelector('.vimeo-lightbox__placeholder');
1033  const calcEl          = lightbox.querySelector('.vimeo-lightbox__calc');
1034  const wrapEl          = lightbox.querySelector('.vimeo-lightbox__calc-wrap');
1035  const playerContainer = lightbox.querySelector('[data-vimeo-lightbox-player]');
1036
1037  // State
1038  let player = null;
1039  let currentVideoID = null;
1040  let videoAspectRatio = null;
1041  let globalMuted = lightbox.getAttribute('data-vimeo-muted') === 'true';
1042  const isTouch = ('ontouchstart' in window) || navigator.maxTouchPoints > 0;
1043  const playedOnce = new Set();  // track first play on touch
1044
1045  // Format time (seconds → "m:ss")
1046  function formatTime(s) {
1047    const m   = Math.floor(s / 60);
1048    const sec = Math.floor(s % 60).toString().padStart(2, '0');
1049    return `${m}:${sec}`;
1050  }
1051
1052  // Clamp wrap height
1053  function clampWrapSize(ar) {
1054    const w = calcEl.offsetWidth;
1055    const h = calcEl.offsetHeight;
1056    wrapEl.style.maxWidth = Math.min(w, h / ar) + 'px';
1057  }
1058
1059  // Adjust sizing in "cover" mode
1060  function adjustCoverSizing() {
1061    if (!videoAspectRatio) return;
1062    const cH = playerContainer.offsetHeight;
1063    const cW = playerContainer.offsetWidth;
1064    const r  = cH / cW;
1065    const wEl = lightbox.querySelector('.vimeo-lightbox__iframe');
1066    if (r > videoAspectRatio) {
1067      wEl.style.width  = (r / videoAspectRatio * 100) + '%';
1068      wEl.style.height = '100%';
1069    } else {
1070      wEl.style.height = (videoAspectRatio / r * 100) + '%';
1071      wEl.style.width  = '100%';
1072    }
1073  }
1074
1075  // Close & pause lightbox
1076  function closeLightbox() {
1077    lightbox.setAttribute('data-vimeo-activated', 'false');
1078    if (player) {
1079      player.pause();
1080      lightbox.setAttribute('data-vimeo-playing', 'false');
1081    }
1082  }
1083
1084  // Wire Escape key & close buttons
1085  document.addEventListener('keydown', e => {
1086    if (e.key === 'Escape') closeLightbox();
1087  });
1088  closeButtons.forEach(btn => btn.addEventListener('click', closeLightbox));
1089
1090  // Setup Vimeo Player event handlers
1091  function setupPlayerEvents() {
1092    // Hide placeholder when playback starts
1093    player.on('play', () => {
1094      lightbox.setAttribute('data-vimeo-loaded', 'true');
1095      lightbox.setAttribute('data-vimeo-playing', 'true');
1096    });
1097    // Close on video end
1098    player.on('ended', closeLightbox);
1099
1100    // Paused
1101    player.on('pause', () => {
1102      lightbox.setAttribute('data-vimeo-playing', 'false');
1103    });
1104
1105    // Duration UI
1106    const durEl = lightbox.querySelector('[data-vimeo-duration]');
1107    player.getDuration().then(d => {
1108      if (durEl) durEl.textContent = formatTime(d);
1109      lightbox.querySelectorAll('[data-vimeo-control="timeline"],progress')
1110        .forEach(el => el.max = d);
1111    });
1112
1113    // Timeline & progress updates
1114    const tl = lightbox.querySelector('[data-vimeo-control="timeline"]');
1115    const pr = lightbox.querySelector('progress');
1116    player.on('timeupdate', data => {
1117      if (tl) tl.value = data.seconds;
1118      if (pr) pr.value = data.seconds;
1119      if (durEl) durEl.textContent = formatTime(Math.trunc(data.seconds));
1120    });
1121    if (tl) {
1122      ['input','change'].forEach(evt =>
1123        tl.addEventListener(evt, e => {
1124          const v = e.target.value;
1125          player.setCurrentTime(v);
1126          if (pr) pr.value = v;
1127        })
1128      );
1129    }
1130
1131    // Hover → hide controls after a timeout
1132    let hoverTimer;
1133    playerContainer.addEventListener('mousemove', () => {
1134      lightbox.setAttribute('data-vimeo-hover', 'true');
1135      clearTimeout(hoverTimer);
1136      hoverTimer = setTimeout(() => {
1137        lightbox.setAttribute('data-vimeo-hover', 'false');
1138      }, 3000);
1139    });
1140
1141    // Fullscreen toggle on player container
1142    const fsBtn = lightbox.querySelector('[data-vimeo-control="fullscreen"]');
1143    if (fsBtn) {
1144      const isFS = () => document.fullscreenElement || document.webkitFullscreenElement;
1145      if (!(document.fullscreenEnabled || document.webkitFullscreenEnabled)) {
1146        fsBtn.style.display = 'none';
1147      }
1148      fsBtn.addEventListener('click', () => {
1149        if (isFS()) {
1150          lightbox.setAttribute('data-vimeo-fullscreen', 'false');
1151          (document.exitFullscreen || document.webkitExitFullscreen).call(document);
1152        } else {
1153          lightbox.setAttribute('data-vimeo-fullscreen', 'true');
1154          (playerContainer.requestFullscreen || playerContainer.webkitRequestFullscreen)
1155            .call(playerContainer);
1156        }
1157      });
1158      ['fullscreenchange','webkitfullscreenchange'].forEach(evt =>
1159        document.addEventListener(evt, () =>
1160          lightbox.setAttribute('data-vimeo-fullscreen', isFS() ? 'true' : 'false')
1161      ));
1162    }
1163  }
1164
1165  // Run sizing logic
1166  async function runSizing() {
1167    const mode = lightbox.getAttribute('data-vimeo-update-size');
1168    const w    = await player.getVideoWidth();
1169    const h    = await player.getVideoHeight();
1170    const ar   = h / w;
1171    const bef  = lightbox.querySelector('.vimeo-lightbox__before');
1172
1173    if (mode === 'true') {
1174      if (bef) bef.style.paddingTop = (ar * 100) + '%';
1175      clampWrapSize(ar);
1176    } else if (mode === 'cover') {
1177      videoAspectRatio = ar;
1178      if (bef) bef.style.paddingTop = '0%';
1179      adjustCoverSizing();
1180    } else {
1181      clampWrapSize(ar);
1182    }
1183  }
1184
1185  // Re-run sizing on viewport resize
1186  window.addEventListener('resize', () => {
1187    if (player) runSizing();
1188  });
1189
1190  // Open or switch video
1191  async function openLightbox(id, placeholderBtn) {
1192    // Enter loading state immediately
1193    lightbox.setAttribute('data-vimeo-activated', 'loading');
1194    lightbox.setAttribute('data-vimeo-loaded',    'false');
1195
1196    // — FULL RESET if new video ID —
1197    if (player && id !== currentVideoID) {
1198      await player.pause();
1199      await player.unload();
1200
1201      // Replace old iframe with a fresh one
1202      const oldIframe = iframe;
1203      const newIframe = document.createElement('iframe');
1204      newIframe.className = oldIframe.className;
1205      newIframe.setAttribute('allow', oldIframe.getAttribute('allow'));
1206      newIframe.setAttribute('frameborder', '0');
1207      newIframe.setAttribute('allowfullscreen', 'true');
1208      newIframe.setAttribute('allow', 'autoplay; encrypted-media');
1209      oldIframe.parentNode.replaceChild(newIframe, oldIframe);
1210
1211      // Reset state
1212      iframe         = newIframe;
1213      player         = null;
1214      currentVideoID = null;
1215      lightbox.setAttribute('data-vimeo-playing', 'false');
1216    }
1217
1218    // Update placeholder image attributes
1219    if (placeholderBtn) {
1220      ['src','srcset','sizes','alt','width'].forEach(attr => {
1221        const val = placeholderBtn.getAttribute(attr);
1222        if (val != null) placeholder.setAttribute(attr, val);
1223      });
1224    }
1225
1226    // Build a brand-new player if needed
1227    if (!player) {
1228      iframe.src = `https://player.vimeo.com/video/${id}?api=1&background=1&autoplay=0&loop=0&muted=0`;
1229      player = new Vimeo.Player(iframe);
1230      setupPlayerEvents();
1231      currentVideoID = id;
1232      await runSizing();
1233    }
1234
1235    // Now sizing is ready — show lightbox
1236    lightbox.setAttribute('data-vimeo-activated', 'true');
1237
1238    // Autoplay logic
1239    if (!isTouch) {
1240      player.setVolume(globalMuted ? 0 : 1).then(() => {
1241        lightbox.setAttribute('data-vimeo-playing', 'true');
1242        setTimeout(() => player.play(), 50);
1243      });
1244    } else if (playedOnce.has(currentVideoID)) {
1245      player.setVolume(globalMuted ? 0 : 1).then(() => {
1246        lightbox.setAttribute('data-vimeo-playing', 'true');
1247        player.play();
1248      });
1249    }
1250  }
1251
1252  // Internal controls
1253  lightbox.querySelector('[data-vimeo-control="play"]').addEventListener('click', () => {
1254    if (isTouch) {
1255      if (!playedOnce.has(currentVideoID)) {
1256        player.setVolume(0).then(() => {
1257          lightbox.setAttribute('data-vimeo-playing', 'true');
1258          player.play();
1259          if (!globalMuted) {
1260            setTimeout(() => {
1261              player.setVolume(1);
1262              lightbox.setAttribute('data-vimeo-muted', 'false');
1263            }, 100);
1264          }
1265          playedOnce.add(currentVideoID);
1266        });
1267      } else {
1268        player.setVolume(globalMuted ? 0 : 1).then(() => {
1269          lightbox.setAttribute('data-vimeo-playing', 'true');
1270          player.play();
1271        });
1272      }
1273    } else {
1274      player.setVolume(globalMuted ? 0 : 1).then(() => {
1275        lightbox.setAttribute('data-vimeo-playing', 'true');
1276        setTimeout(() => player.play(), 50);
1277      });
1278    }
1279  });
1280
1281  lightbox.querySelector('[data-vimeo-control="pause"]').addEventListener('click', () => {
1282    player.pause();
1283  });
1284
1285  lightbox.querySelector('[data-vimeo-control="mute"]').addEventListener('click', () => {
1286    globalMuted = !globalMuted;
1287    player.setVolume(globalMuted ? 0 : 1).then(() =>
1288      lightbox.setAttribute('data-vimeo-muted', globalMuted ? 'true' : 'false')
1289    );
1290  });
1291
1292  // Wire up open buttons
1293  openButtons.forEach(btn => {
1294    btn.addEventListener('click', () => {
1295      const vid = btn.getAttribute('data-vimeo-lightbox-id');
1296      const img = btn.querySelector('[data-vimeo-lightbox-placeholder]');
1297      openLightbox(vid, img);
1298    });
1299  });
1300}
1301
1302// Initialize Vimeo Lightbox (Advanced)
1303document.addEventListener('DOMContentLoaded', function() {
1304  initVimeoLightboxAdvanced();
1305});
1306</script>
1306</div><div class="css w-embed"><style>
1307  .vimeo-lightbox__player {
1308  transition: all 0.3s cubic-bezier(0.625, 0.05, 0, 1);
1309  opacity: 0;
1310  visibility: hidden;
1311  transform: scale(0.9) rotate(0.001deg) translateX(0);
1312}
1313
1314.vimeo-lightbox[data-vimeo-activated="true"] .vimeo-lightbox__player {
1315  opacity: 1;
1316  visibility: visible;
1317  transform: scale(1) rotate(0.001deg) translateX(0);
1318}
1319
1320/* Dark BG */
1321.vimeo-lightbox__bg {
1322  transition: all 0.3s cubic-bezier(0.625, 0.05, 0, 1);
1323  opacity: 0;
1324  visibility: hidden;
1325}
1326
1327.vimeo-lightbox[data-vimeo-activated="loading"] .vimeo-lightbox__bg,
1328.vimeo-lightbox[data-vimeo-activated="true"] .vimeo-lightbox__bg{
1329  opacity: 1;
1330  visibility: visible;
1331}
1332
1333/* Close Button */
1334.vimeo-lightbox__close {
1335  transition: all 0.5s cubic-bezier(0.625, 0.05, 0, 1);
1336  opacity: 0;
1337  visibility: hidden;
1338}
1339
1340.vimeo-lightbox[data-vimeo-activated="true"] .vimeo-lightbox__close {
1341  opacity: 1;
1342  visibility: visible;
1343}
1344
1345/* Cover */
1346.vimeo-lightbox[data-vimeo-update-size="cover"] .vimeo-lightbox__calc-wrap {
1347  height: 100%;
1348}
1349
1350.vimeo-lightbox[data-vimeo-update-size="cover"] [data-vimeo-lightbox-player] {
1351  width: 100%;
1352  min-width: 100%;
1353  max-width: 100%;
1354  height: 100%;
1355  min-height: 100%;
1356  max-height: 100%;
1357}
1358
1359/* Placeholder */
1360.vimeo-lightbox[data-vimeo-loaded="true"] .vimeo-lightbox__placeholder {
1361  opacity: 0;
1362}
1363
1364/* Dark (Overlay) */
1365.vimeo-lightbox[data-vimeo-playing="false"] .vimeo-lightbox__dark {
1366  opacity: 0.33;
1367}
1368
1369.vimeo-lightbox[data-vimeo-activated="false"][data-vimeo-playing="false"] .vimeo-lightbox__dark {
1370  opacity: 0;
1371}
1372
1373.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-loaded="true"] .vimeo-lightbox__dark {
1374  opacity: 0;
1375}
1376
1377@media (hover: hover) and (pointer: fine) {
1378  .vimeo-lightbox[data-vimeo-hover="true"]:hover .vimeo-lightbox__dark {
1379    opacity: 0.33 !important;
1380  }
1381}
1382
1383/* Pause */
1384.vimeo-lightbox .vimeo-lightbox__pause {
1385  display: none;
1386}
1387
1388.vimeo-lightbox[data-vimeo-playing="true"] .vimeo-lightbox__pause {
1389  display: flex;
1390}
1391
1392.vimeo-lightbox .vimeo-lightbox__pause .vimeo-lightbox__btn {
1393  opacity: 0;
1394}
1395
1396.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="false"] .vimeo-lightbox__pause .vimeo-lightbox__btn,
1397.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-hover="true"]:hover .vimeo-lightbox__pause .vimeo-lightbox__btn {
1398  opacity: 1;
1399}
1400
1401@media (hover: none) and (pointer: coarse) {
1402  .vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="true"] .vimeo-lightbox__pause .vimeo-lightbox__btn {
1403    opacity: 0 !important;
1404  }
1405}
1406
1407/* Play */
1408.vimeo-lightbox[data-vimeo-playing="true"] .vimeo-lightbox__play {
1409  opacity: 0;
1410}
1411
1412/* Loading */
1413.vimeo-lightbox .vimeo-lightbox__loading {
1414  opacity: 0;
1415}
1416
1417.vimeo-lightbox[data-vimeo-playing="true"] .vimeo-lightbox__loading {
1418  opacity: 1;
1419}
1420
1421.vimeo-lightbox[data-vimeo-playing="true"][data-vimeo-loaded="true"] .vimeo-lightbox__loading {
1422  opacity: 0;
1423}
1424
1425/* Interface */
1426.vimeo-lightbox .vimeo-lightbox__interface {
1427  opacity: 0;
1428}
1429
1430.vimeo-lightbox[data-vimeo-activated="false"][data-vimeo-playing="false"] .vimeo-lightbox__interface {
1431  opacity: 1;
1432}
1433
1434.vimeo-lightbox .vimeo-lightbox__interface * {
1435  pointer-events: all; /* Make children of div clickable by user */
1436}
1437
1438.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="false"] .vimeo-lightbox__interface,
1439.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-hover="true"]:hover .vimeo-lightbox__interface {
1440  opacity: 1;
1441}
1442
1443@media (hover: none) and (pointer: coarse) {
1444  .vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="true"] .vimeo-lightbox__interface {
1445    opacity: 0 !important;
1446  }
1447}
1448
1449/* Interface - Variables */
1450.vimeo-lightbox {
1451  --timeline-rounded-corners: 1.5em;
1452  --timeline-dot-height: 0.75em;
1453  --timeline-dot-color: #FF4C24;
1454  --progress-bg: rgba(239, 238, 236, 0.2);
1455  --progress-fill-bg: #FF4C24;
1456  --progress-height: 0.2em;
1457}
1458
1459/* Interface - Timeline */
1460.vimeo-lightbox progress::-webkit-progress-bar {
1461  border-radius: var(--timeline-rounded-corners);
1462  background-color: var(--progress-bg);
1463  box-shadow: 0;
1464}
1465
1466.vimeo-lightbox progress::-webkit-progress-value {
1467  background: var(--progress-fill-bg);
1468}
1469
1470.vimeo-lightbox progress::-moz-progress-bar{
1471  border-radius: var(--timeline-rounded-corners);
1472  background: var(--progress-fill-bg);
1473  box-shadow: 0;
1474}
1475
1476.vimeo-lightbox progress::-ms-fill {
1477  border-radius: var(--timeline-rounded-corners);
1478}
1479
1480/* Interface - Range */
1481.vimeo-lightbox [type="range"]::-webkit-slider-thumb {
1482  -webkit-appearance: none;
1483}
1484 
1485.vimeo-lightbox [type="range"]:focus {
1486  outline: none;
1487}
1488 
1489.vimeo-lightbox [type="range"]::-ms-track {
1490  width: 100%;
1491  cursor: pointer;
1492  background-color: transparent;
1493  border-color: transparent;
1494  color: transparent;
1495}
1496
1497.vimeo-lightbox [type="range"]::-webkit-slider-runnable-track{
1498  width: 100%;
1499  height: var(--progress-height);
1500  cursor: pointer;
1501  background-color: var(--progress-bg);
1502  border-radius: var(--timeline-rounded-corners);
1503  background-color: transparent;
1504  border-color: transparent;
1505  color: transparent;
1506}
1507
1508.vimeo-lightbox [type="range"]::-webkit-slider-thumb {
1509  box-shadow: 0;
1510  height: var(--timeline-dot-height);
1511  width: var(--timeline-dot-height);
1512  border-radius: var(--timeline-rounded-corners);
1513  background-color: var(--timeline-dot-color);
1514  cursor: pointer;
1515  -webkit-appearance: none;
1516  margin-top: calc((var(--progress-height) / 2) - (var(--timeline-dot-height) / 2));
1517}
1518
1519.vimeo-lightbox [type="range"]::-webkit-slider-runnable-track,
1520.vimeo-lightbox [type="range"]:focus::-webkit-slider-runnable-track {
1521  background-color: transparent;
1522  border-color: transparent;
1523  color: transparent;
1524}
1525
1526.vimeo-lightbox [type="range"]::-moz-range-track {
1527  width: 100%;
1528  height: var(--progress-height);
1529  cursor: pointer;
1530  background: var(--progress-bg);
1531  border-radius: 0;
1532  border: 0;
1533  border-radius: var(--timeline-rounded-corners);
1534  overflow: hidden;
1535  opacity: 1 !important;
1536}
1537
1538.vimeo-lightbox [type="range"]::-moz-range-thumb {
1539  box-shadow: 0;
1540  border: 0;
1541  height: var(--timeline-dot-height);
1542  width: var(--timeline-dot-height);
1543  border-radius: var(--timeline-rounded-corners);
1544  background: var(--timeline-dot-color);
1545  cursor: pointer;
1546  box-shadow: 0;
1547}
1548
1549/* Interface - Mute */
1550.vimeo-lightbox .vimeo-lightbox__mute svg:nth-child(2),
1551.vimeo-lightbox[data-vimeo-muted="true"] .vimeo-lightbox__mute svg:nth-child(1) {
1552  display: none;
1553}
1554
1555.vimeo-lightbox .vimeo-lightbox__mute svg:nth-child(1),
1556.vimeo-lightbox[data-vimeo-muted="true"] .vimeo-lightbox__mute svg:nth-child(2) {
1557  display: block;
1558}
1559
1560/* Interface - Fullscreen */
1561.vimeo-lightbox .vimeo-lightbox__fullscreen svg:nth-child(2),
1562.vimeo-lightbox[data-vimeo-fullscreen="true"] .vimeo-lightbox__fullscreen svg:nth-child(1) {
1563  display: none;
1564}
1565
1566.vimeo-lightbox .vimeo-lightbox__fullscreen svg:nth-child(1),
1567.vimeo-lightbox[data-vimeo-fullscreen="true"] .vimeo-lightbox__fullscreen svg:nth-child(2) {
1568  display: block;
1569}
1570</style></div></div><div class="hide"><div class="js w-embed w-script">
1570<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js"></script>
vendor: 1 bytes, line 1570
1570
1571<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/ScrollTrigger.min.js"></script>
1571
1572
1573<script>
1574gsap.registerPlugin(ScrollTrigger);
1575
1576function initNumberOdometer() {
1577  const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches
1578  const initFlag = 'data-odometer-initialized'
1579  const activeTweens = new WeakMap()
1580
1581  const defaults = {
1582    duration: 1,
1583    ease: 'power3.out',
1584    elementStagger: 0.1,
1585    digitStagger: 0.04,
1586    revealDuration: 0.5,
1587    revealEase: 'power2.out',
1588    triggerStart: 'top 80%',
1589    staggerOrder: 'left',
1590    digitCycles: 2
1591  }
1592
1593  document.querySelectorAll('[data-odometer-group]').forEach(group => {
1594    if (group.hasAttribute(initFlag)) return
1595    group.setAttribute(initFlag, '')
1596
1597    const elements = Array.from(group.querySelectorAll('[data-odometer-element]')).filter(
1598      el => el.getAttribute('data-odometer-element') !== 'none'
1599    )
1600    if (!elements.length || prefersReducedMotion) return
1601
1602    const staggerOrder = group.getAttribute('data-odometer-stagger-order') || defaults.staggerOrder
1603    const triggerStart = group.getAttribute('data-odometer-trigger-start') || defaults.triggerStart
1604    const elementStagger = parseFloat(group.getAttribute('data-odometer-stagger')) || defaults.elementStagger
1605
1606    const elementData = elements.map(el => {
1607      const originalText = el.textContent.trim()
1608      const hasExplicitStart = el.hasAttribute('data-odometer-start')
1609      const startValue = parseFloat(el.getAttribute('data-odometer-start')) || 0
1610      const duration = parseFloat(el.getAttribute('data-odometer-duration')) || defaults.duration
1611      const step = getLineHeightRatio(el)
1612
1613      let segments = parseSegments(originalText)
1614      segments = mapStartDigits(segments, startValue)
1615      segments = markHiddenSegments(segments, startValue)
1616
1617      const grow = shouldGrow(el, hasExplicitStart, startValue, segments)
1618      const { rollers, revealEls } = buildRollerDOM(el, segments, step, grow)
1619
1620      const fontSize = parseFloat(getComputedStyle(el).fontSize)
1621      const revealData = revealEls.map(revealEl => {
1622        const widthEm = revealEl.offsetWidth / fontSize
1623        gsap.set(revealEl, { width: 0, overflow: 'hidden' })
1624        return { el: revealEl, widthEm }
1625      })
1626
1627      return { el, rollers, duration, step, revealData, originalText }
1628    })
1629
1630    const ordered = applyStaggerOrder(elementData, staggerOrder)
1631
1632    const tl = gsap.timeline({
1633      scrollTrigger: {
1634        trigger: group,
1635        start: triggerStart,
1636        once: true
1637      },
1638      onComplete() {
1639        elementData.forEach(({ el, originalText }) => {
1640          cleanupElement(el, originalText)
1641        })
1642      }
1643    })
1644
1645    ordered.forEach((data, orderIdx) => {
1646      const { rollers, duration, step, revealData } = data
1647      const offset = orderIdx * elementStagger
1648
1649      revealData.forEach(({ el, widthEm }) => {
1650        tl.to(el, {
1651          width: widthEm + 'em',
1652          opacity: 1,
1653          duration: defaults.revealDuration,
1654          ease: defaults.revealEase
1655        }, offset)
1656      })
1657
1658      rollers.forEach(({ roller, targetPos }, digitIdx) => {
1659        const reversedIdx = rollers.length - 1 - digitIdx
1660        tl.to(roller, {
1661          y: -targetPos * step + 'em',
1662          duration,
1663          ease: defaults.ease,
1664          force3D: true
1665        }, offset + reversedIdx * defaults.digitStagger)
1666      })
1667    })
1668  })
1669
1670  return function updateOdometer(el, newText, options = {}) {
1671    const currentText = el.textContent.trim()
1672    if (currentText === newText) return
1673    if (el.getAttribute('data-odometer-element') === 'none') return
1674
1675    const duration = options.duration || defaults.duration
1676    const ease = options.ease || defaults.ease
1677    const step = getLineHeightRatio(el)
1678
1679    const existing = activeTweens.get(el)
1680    if (existing) {
1681      existing.kill()
1682      gsap.set(el, { clearProps: 'width,overflow' })
1683    }
1684
1685    const fontSize = parseFloat(getComputedStyle(el).fontSize)
1686    const oldWidthEm = el.getBoundingClientRect().width / fontSize
1687
1688    const startSegments = parseSegments(currentText)
1689    const startDigitsStr = startSegments
1690      .filter(s => s.type === 'digit')
1691      .map(s => s.char)
1692      .join('')
1693    const startValue = parseInt(startDigitsStr, 10) || 0
1694
1695    let segments = parseSegments(newText)
1696    segments = mapStartDigits(segments, startValue)
1697    segments = markHiddenSegments(segments, startValue)
1698    const { rollers, revealEls } = buildRollerDOM(el, segments, step, true)
1699
1700    const newWidthEm = el.getBoundingClientRect().width / fontSize
1701    const widthChanged = Math.abs(oldWidthEm - newWidthEm) > 0.01
1702
1703    if (widthChanged) {
1704      gsap.set(el, { width: oldWidthEm + 'em', overflow: 'hidden' })
1705    }
1706
1707    const tl = gsap.timeline({
1708      onComplete() {
1709        cleanupElement(el, newText)
1710        activeTweens.delete(el)
1711      }
1712    })
1713    activeTweens.set(el, tl)
1714
1715    if (widthChanged) {
1716      tl.to(el, {
1717        width: newWidthEm + 'em',
1718        duration: defaults.revealDuration,
1719        ease: defaults.revealEase
1720      }, 0)
1721    }
1722
1723    revealEls.forEach(revealEl => {
1724      if (revealEl.getAttribute('data-odometer-part') === 'static') {
1725        tl.to(revealEl, { opacity: 1, duration: 0.2 }, 0)
1726      }
1727    })
1728
1729    rollers.forEach(({ roller, targetPos }, digitIdx) => {
1730      const reversedIdx = rollers.length - 1 - digitIdx
1731      tl.to(roller, {
1732        y: -targetPos * step + 'em',
1733        duration,
1734        ease,
1735        force3D: true
1736      }, reversedIdx * defaults.digitStagger)
1737    })
1738  }
1739
1740  function getLineHeightRatio(el) {
1741    const cs = getComputedStyle(el)
1742    const lh = cs.lineHeight
1743    if (lh === 'normal') return 1.2
1744    return parseFloat(lh) / parseFloat(cs.fontSize)
1745  }
1746
1747  function parseSegments(text) {
1748    return [...text].map(char => ({
1749      type: /\d/.test(char) ? 'digit' : 'static',
1750      char
1751    }))
1752  }
1753
1754  function mapStartDigits(segments, startValue) {
1755    const digitSlots = segments.filter(s => s.type === 'digit')
1756    const padded = String(Math.floor(Math.abs(startValue)))
1757      .padStart(digitSlots.length, '0')
1758      .slice(-digitSlots.length)
1759    let di = 0
1760    return segments.map(s =>
1761      s.type === 'digit'
1762        ? { ...s, startDigit: parseInt(padded[di++], 10) }
1763        : s
1764    )
1765  }
1766
1767  function markHiddenSegments(segments, startValue) {
1768    const totalDigits = segments.filter(s => s.type === 'digit').length
1769    const absStart = Math.floor(Math.abs(startValue))
1770    const startDigitCount = absStart === 0 ? 1 : String(absStart).length
1771    const leadingZeros = Math.max(0, totalDigits - startDigitCount)
1772    if (leadingZeros === 0) return segments
1773    let digitsSeen = 0
1774    let firstDigitSeen = false
1775    let prevDigitHidden = false
1776    return segments.map(seg => {
1777      if (seg.type === 'digit') {
1778        firstDigitSeen = true
1779        const hidden = digitsSeen < leadingZeros
1780        prevDigitHidden = hidden
1781        digitsSeen++
1782        return { ...seg, hidden }
1783      }
1784      const hidden = firstDigitSeen && prevDigitHidden
1785      return { ...seg, hidden }
1786    })
1787  }
1788
1789  function shouldGrow(el, hasExplicitStart, startValue, segments) {
1790    if (el.hasAttribute('data-odometer-grow')) {
1791      return el.getAttribute('data-odometer-grow') !== 'false'
1792    }
1793    if (!hasExplicitStart) return false
1794    const absStart = Math.floor(Math.abs(startValue))
1795    const startDigitCount = absStart === 0 ? 1 : String(absStart).length
1796    const endDigitCount = segments.filter(s => s.type === 'digit').length
1797    return startDigitCount < endDigitCount
1798  }
1799
1800  function buildRollerDOM(el, segments, step, grow) {
1801    el.innerHTML = ''
1802    el.style.height = ''
1803    const rollers = []
1804    const revealEls = []
1805    const totalCells = 10 * defaults.digitCycles
1806    segments.forEach(seg => {
1807      if (seg.type === 'static') {
1808        const span = document.createElement('span')
1809        span.setAttribute('data-odometer-part', 'static')
1810        span.style.height = step + 'em'
1811        span.style.lineHeight = step
1812        span.textContent = seg.char
1813        el.appendChild(span)
1814        if (grow && seg.hidden) {
1815          gsap.set(span, { opacity: 0 })
1816          revealEls.push(span)
1817        }
1818        return
1819      }
1820      const mask = document.createElement('span')
1821      mask.setAttribute('data-odometer-part', 'mask')
1822      mask.style.height = step + 'em'
1823      mask.style.lineHeight = step
1824      const roller = document.createElement('span')
1825      roller.setAttribute('data-odometer-part', 'roller')
1826      roller.style.lineHeight = step
1827
1828      const digits = []
1829      for (let d = 0; d < totalCells; d++) {
1830        digits.push(d % 10)
1831      }
1832      roller.textContent = digits.join('\n')
1833      mask.appendChild(roller)
1834      el.appendChild(mask)
1835      const startDigit = seg.startDigit || 0
1836      const isReveal = grow && seg.hidden
1837      gsap.set(roller, { y: isReveal ? step + 'em' : -startDigit * step + 'em' })
1838      const endDigit = parseInt(seg.char, 10)
1839      const targetPos = endDigit > startDigit ? endDigit : 10 + endDigit
1840      rollers.push({ roller, targetPos })
1841      if (isReveal) revealEls.push(mask)
1842    })
1843    return { rollers, revealEls }
1844  }
1845
1846  function cleanupElement(el, originalText) {
1847    el.style.overflow = ''
1848    el.style.height = ''
1849
1850    const digits = [...originalText].filter(c => /\d/.test(c))
1851    let di = 0
1852
1853    el.querySelectorAll('[data-odometer-part="mask"]').forEach(mask => {
1854      const roller = mask.querySelector('[data-odometer-part="roller"]')
1855      if (roller) roller.remove()
1856      mask.textContent = digits[di++] || ''
1857      mask.style.opacity = ''
1858      mask.style.overflow = ''
1859    })
1860
1861    el.querySelectorAll('[data-odometer-part="static"]').forEach(stat => {
1862      stat.style.opacity = ''
1863    })
1864  }
1865
1866  function recalcOnResize() {
1867    document.querySelectorAll('[data-odometer-element]').forEach(el => {
1868      if (el.getAttribute('data-odometer-element') === 'none') return
1869
1870      const running = activeTweens.get(el)
1871      if (running) {
1872        running.progress(1)
1873        activeTweens.delete(el)
1874      }
1875
1876      const hasRollers = el.querySelector('[data-odometer-part="roller"]')
1877
1878      if (hasRollers) {
1879        const step = getLineHeightRatio(el)
1880        el.querySelectorAll('[data-odometer-part="mask"]').forEach(mask => {
1881          mask.style.height = step + 'em'
1882          mask.style.lineHeight = step
1883        })
1884        el.querySelectorAll('[data-odometer-part="roller"]').forEach(roller => {
1885          roller.style.lineHeight = step
1886        })
1887        el.querySelectorAll('[data-odometer-part="static"]').forEach(stat => {
1888          stat.style.lineHeight = step
1889        })
1890      }
1891    })
1892    ScrollTrigger.refresh()
1893  }
1894
1895  let resizeTimer
1896  let lastWidth = window.innerWidth
1897  window.addEventListener('resize', () => {
1898    clearTimeout(resizeTimer)
1899    resizeTimer = setTimeout(() => {
1900      if (window.innerWidth === lastWidth) return
1901      lastWidth = window.innerWidth
1902      recalcOnResize()
1903    }, 250)
1904  })
1905
1906  function applyStaggerOrder(items, order) {
1907    const arr = [...items]
1908    if (order === 'right') return arr.reverse()
1909    if (order === 'random') return shuffleArray(arr)
1910    return arr
1911  }
1912
1913  function shuffleArray(arr) {
1914    for (let i = arr.length - 1; i > 0; i--) {
1915      const j = Math.floor(Math.random() * (i + 1))
1916      ;[arr[i], arr[j]] = [arr[j], arr[i]]
1917    }
1918    return arr
1919  }
1920}
1921
1922document.addEventListener("DOMContentLoaded", () => {
1923  initNumberOdometer();
1924});
1925</script>
1925</div><div class="js w-embed"><style>
1926 [data-odometer-element] {
1927  display: inline-flex;
1928  align-items: center;
1929}
1930[data-odometer-part="mask"] {
1931  display: inline-block;
1932  overflow: clip;
1933  padding: 0.05em;
1934  margin: -0.05em;
1935  width: 0.63em;
1936  text-align: center;
1937}
1938[data-odometer-part="static"] {
1939  display: inline-block;
1940  overflow: clip;
1941  padding: 0.05em;
1942  margin: -0.05em;
1943}
1944[data-odometer-part="roller"] {
1945  display: block;
1946  white-space: pre;
1947  text-align: center;
1948  will-change: transform;
1949}
1950</style></div></div><div class="js w-embed w-script">
1950<script>
1951document.addEventListener('DOMContentLoaded', function () {
1952  var TOTAL_LOTTIES = 3;
1953  var POLL_DELAY = 150;
1954  var SKIP_DELAY = 3000;
1955  var FALLBACK_DURATION = 4000;
1956
1957  function findLottieInstance(el) {
1958    var lib;
1959    try {
1960      lib = window.Webflow && window.Webflow.require('lottie').lottie;
1961    } catch (e) {
1962      return null;
1963    }
1964    if (!lib) return null;
1965    var instances = lib.getRegisteredAnimations();
1966    for (var i = 0; i < instances.length; i++) {
1967      if (el.contains(instances[i].wrapper)) return instances[i];
1968    }
1969    return null;
1970  }
1971
1972  function setupSingle(el) {
1973    el.style.opacity = '1';
1974    var anim = null;
1975    var poll = null;
1976
1977    function whenReady(callback) {
1978      if (anim) {
1979        callback(anim);
1980        return;
1981      }
1982      if (poll) return;
1983      poll = setInterval(function () {
1984        anim = findLottieInstance(el);
1985        if (!anim) return;
1986        clearInterval(poll);
1987        poll = null;
1988        callback(anim);
1989      }, POLL_DELAY);
1990    }
1991
1992    new IntersectionObserver(
1993      function (entries) {
1994        entries.forEach(function (entry) {
1995          if (entry.isIntersecting) {
1996            whenReady(function (instance) {
1997              instance.play();
1998            });
1999          } else if (anim) {
2000            anim.pause();
2001          }
2002        });
2003      },
2004      { threshold: 0 }
2005    ).observe(el);
2006  }
2007
2008  function setupSequence(wrapper, slots) {
2009    var current = 0;
2010    var visible = false;
2011    var waiting = false;
2012    var token = 0;
2013    var timer = null;
2014    var poll = null;
2015
2016    function paint() {
2017      slots.forEach(function (slot, i) {
2018        slot.el.style.opacity = i === current ? '1' : '0';
2019      });
2020    }
2021
2022    function stopTimer() {
2023      if (timer) {
2024        clearTimeout(timer);
2025        timer = null;
2026      }
2027    }
2028
2029    function stopPolling() {
2030      if (poll) {
2031        clearInterval(poll);
2032        poll = null;
2033      }
2034    }
2035
2036    function staticValue(prop, fallback) {
2037      var raw = prop && prop.k;
2038      if (typeof raw === 'undefined') return fallback;
2039      if (Array.isArray(raw) && raw.length && typeof raw[0] === 'object') {
2040        return raw[0].s || fallback;
2041      }
2042      return raw;
2043    }
2044
2045    function rootLayer(data) {
2046      for (var i = 0; i < data.layers.length; i++) {
2047        var parent = data.layers[i].parent;
2048        if (parent === undefined || parent === null) return data.layers[i];
2049      }
2050      return null;
2051    }
2052
2053    function collectVertices(shapes, out) {
2054      shapes.forEach(function (shape) {
2055        if (shape.ty === 'gr') {
2056          var items = shape.it || [];
2057          var transform = null;
2058          var nested = [];
2059
2060          items.forEach(function (item) {
2061            if (item.ty === 'tr') transform = item;
2062          });
2063
2064          collectVertices(
2065            items.filter(function (item) {
2066              return item.ty !== 'tr';
2067            }),
2068            nested
2069          );
2070
2071          if (transform) {
2072            var p = staticValue(transform.p, [0, 0]);
2073            var a = staticValue(transform.a, [0, 0]);
2074            var s = staticValue(transform.s, [100, 100]);
2075            nested = nested.map(function (point) {
2076              return [
2077                p[0] + (s[0] / 100) * (point[0] - a[0]),
2078                p[1] + (s[1] / 100) * (point[1] - a[1]),
2079              ];
2080            });
2081          }
2082
2083          out.push.apply(out, nested);
2084        } else if (shape.ty === 'sh') {
2085          var path = staticValue(shape.ks, null);
2086          if (Array.isArray(path)) path = path[0];
2087          if (path && path.v) {
2088            path.v.forEach(function (point) {
2089              out.push([point[0], point[1]]);
2090            });
2091          }
2092        }
2093      });
2094    }
2095
2096    // O logo "jim" e o unico desenho comum as tres composicoes, entao a caixa
2097    // dele em coordenadas da composicao serve de referencia de alinhamento. As
2098    // letras sao as camadas numeradas; as marcadas com td sao apenas matte.
2099    function measureWordmark(anim) {
2100      var data = anim && anim.animationData;
2101      if (!data || !data.layers) return null;
2102
2103      var root = rootLayer(data);
2104      if (!root || !root.ks) return null;
2105
2106      var rootP = staticValue(root.ks.p, [0, 0]);
2107      var rootA = staticValue(root.ks.a, [0, 0]);
2108      var rootS = staticValue(root.ks.s, [100, 100]);
2109      var rootK = rootS[0] / 100;
2110      if (!rootK) return null;
2111
2112      var minX = Infinity;
2113      var minY = Infinity;
2114      var maxX = -Infinity;
2115      var maxY = -Infinity;
2116
2117      data.layers.forEach(function (layer) {
2118        if (layer.ty !== 4 || layer.td || layer.hd) return;
2119        if (layer.parent !== root.ind) return;
2120        if (!/^[0-9]+$/.test(String(layer.nm || ''))) return;
2121
2122        var p = staticValue(layer.ks.p, [0, 0]);
2123        var a = staticValue(layer.ks.a, [0, 0]);
2124        var s = staticValue(layer.ks.s, [100, 100]);
2125        var k = s[0] / 100;
2126        var points = [];
2127        collectVertices(layer.shapes || [], points);
2128
2129        points.forEach(function (point) {
2130          var x = rootP[0] + rootK * (p[0] + k * (point[0] - a[0]) - rootA[0]);
2131          var y = rootP[1] + rootK * (p[1] + k * (point[1] - a[1]) - rootA[1]);
2132          if (x < minX) minX = x;
2133          if (x > maxX) maxX = x;
2134          if (y < minY) minY = y;
2135          if (y > maxY) maxY = y;
2136        });
2137      });
2138
2139      if (!isFinite(minX) || maxX <= minX) return null;
2140
2141      return {
2142        w: data.w,
2143        h: data.h,
2144        width: maxX - minX,
2145        cx: (minX + maxX) / 2,
2146        cy: (minY + maxY) / 2,
2147      };
2148    }
2149
2150    function frameOf(slot) {
2151      if (!slot.anim) return null;
2152      if (!slot.frame) slot.frame = measureWordmark(slot.anim);
2153      return slot.frame;
2154    }
2155
2156    // Cada arquivo entrega o logo com escala e posicao proprias. Reescrever o
2157    // viewBox a partir da caixa do logo deixa as tres do mesmo tamanho e no
2158    // mesmo lugar, sem mexer nos JSONs.
2159    function normalizeFraming() {
2160      var reference = frameOf(slots[0]);
2161      if (!reference) return;
2162
2163      slots.forEach(function (slot) {
2164        var frame = frameOf(slot);
2165        if (!frame) return;
2166
2167        var svg = slot.el.querySelector('svg');
2168        if (!svg) return;
2169
2170        var ratio = frame.width / reference.width;
2171        var minX = frame.cx - ratio * reference.cx;
2172        var minY = frame.cy - ratio * reference.cy;
2173
2174        svg.setAttribute(
2175          'viewBox',
2176          minX + ' ' + minY + ' ' + reference.w * ratio + ' ' + reference.h * ratio
2177        );
2178      });
2179    }
2180
2181    function onFinish(index) {
2182      return function () {
2183        if (!visible || index !== current) return;
2184        advance();
2185      };
2186    }
2187
2188    function attach(slot, index) {
2189      var anim = findLottieInstance(slot.el);
2190      if (!anim) return false;
2191      slot.anim = anim;
2192      anim.loop = false;
2193      if (typeof anim.setLoop === 'function') anim.setLoop(false);
2194      anim.setDirection(1);
2195      anim.addEventListener('complete', onFinish(index));
2196      anim.addEventListener('loopComplete', onFinish(index));
2197      if (index !== current) anim.goToAndStop(0, true);
2198      return true;
2199    }
2200
2201    // O Webflow instancia as Lotties com lazy loading, so quando entram na
2202    // viewport, entao a busca pelas instancias precisa continuar enquanto
2203    // o stack estiver visivel.
2204    function startPolling() {
2205      if (poll) return;
2206      poll = setInterval(function () {
2207        var pending = false;
2208        slots.forEach(function (slot, i) {
2209          if (slot.anim) return;
2210          if (!attach(slot, i)) pending = true;
2211        });
2212        normalizeFraming();
2213        if (waiting && visible && slots[current].anim) {
2214          waiting = false;
2215          play(current);
2216        }
2217        if (!pending) stopPolling();
2218      }, POLL_DELAY);
2219    }
2220
2221    function play(index) {
2222      stopTimer();
2223      token += 1;
2224      var myToken = token;
2225      current = index;
2226      paint();
2227
2228      var anim = slots[index].anim;
2229
2230      if (!anim) {
2231        waiting = true;
2232        startPolling();
2233        timer = setTimeout(function () {
2234          if (myToken !== token || !visible) return;
2235          waiting = false;
2236          advance();
2237        }, SKIP_DELAY);
2238        return;
2239      }
2240
2241      anim.loop = false;
2242      if (typeof anim.setLoop === 'function') anim.setLoop(false);
2243      anim.goToAndPlay(0, true);
2244
2245      var seconds = typeof anim.getDuration === 'function' ? anim.getDuration(false) : 0;
2246      var wait = seconds > 0 && isFinite(seconds) ? seconds * 1000 : FALLBACK_DURATION;
2247      timer = setTimeout(function () {
2248        if (myToken === token && visible) advance();
2249      }, wait + 200);
2250    }
2251
2252    function advance() {
2253      play((current + 1) % slots.length);
2254    }
2255
2256    paint();
2257
2258    new IntersectionObserver(
2259      function (entries) {
2260        entries.forEach(function (entry) {
2261          visible = entry.isIntersecting;
2262          if (visible) {
2263            startPolling();
2264            play(current);
2265            return;
2266          }
2267          stopTimer();
2268          stopPolling();
2269          waiting = false;
2270          var anim = slots[current].anim;
2271          if (anim) anim.pause();
2272        });
2273      },
2274      { threshold: 0 }
2275    ).observe(wrapper);
2276
2277    var resizeTimer = null;
2278    window.addEventListener('resize', function () {
2279      clearTimeout(resizeTimer);
2280      resizeTimer = setTimeout(normalizeFraming, 120);
2281    });
2282
2283    return { slots: slots, normalize: normalizeFraming };
2284  }
2285
2286  var registry = [];
2287
2288  document.querySelectorAll('[lottie-stack="wrapper"]').forEach(function (wrapper) {
2289    var slots = [];
2290    for (var i = 1; i <= TOTAL_LOTTIES; i++) {
2291      var el = wrapper.querySelector('[lottie-stack="' + i + '"]');
2292      if (el) slots.push({ el: el, anim: null, frame: null });
2293    }
2294    if (!slots.length) return;
2295
2296    if (slots.length === 1) {
2297      setupSingle(slots[0].el);
2298      return;
2299    }
2300
2301    registry.push(setupSequence(wrapper, slots));
2302  });
2303
2304  window.lottieStackDebug = function () {
2305    return registry.map(function (stack) {
2306      return stack.slots.map(function (slot, i) {
2307        var svg = slot.el.querySelector('svg');
2308        return {
2309          slot: i + 1,
2310          loaded: !!slot.anim,
2311          seconds: slot.anim ? slot.anim.getDuration(false) : null,
2312          logoWidth: slot.frame ? Math.round(slot.frame.width) : null,
2313          viewBox: svg ? svg.getAttribute('viewBox') : null,
2314          opacity: slot.el.style.opacity,
2315        };
2316      });
2317    });
2318  };
2319});
2320</script>
2320
2321</div><div class="css w-embed"><style>
2322[lottie-stack="wrapper"] {
2323  position: relative;
2324}
2325
2326[lottie-stack="1"],
2327[lottie-stack="2"],
2328[lottie-stack="3"] {
2329  position: absolute;
2330  inset: 0;
2331  opacity: 0;
2332  pointer-events: none;
2333}
2334</style></div></div><div data-nav-theme="" nav="component" class="nav_component"><div class="js w-embed w-script">
2334<script>
2335document.addEventListener('DOMContentLoaded', function () {
2336  const MOBILE_BREAKPOINT = 767;
2337  const SCROLL_THRESHOLD = 80;
2338  const LOAD_GRACE_PERIOD = 500;
2339  // fracao da viewport onde o meio da secao gatilho revela o botao sticky
2340  const REVEAL_ANCHOR = 0.5;
2341  const nav = document.querySelector("[nav='component']");
2342  const spacer = document.querySelector("[button-sticky='spacer']");
2343  const stickyButton = document.querySelector("[mobile-button-sticky]");
2344  const revealTrigger = document.querySelector("[button-sticky='trigger']");
2345  const hideTrigger = document.querySelector("[button-sticky='end']");
2346
2347  let lastScrollY = window.scrollY;
2348  let justLoaded = true;
2349
2350  if (spacer && window.innerWidth <= MOBILE_BREAKPOINT) {
2351    spacer.classList.add('is-collapsed');
2352    spacer.classList.add('is-scrolled');
2353  }
2354
2355  function isButtonRevealed(scrollY) {
2356    // no fim da pagina o botao sai antes de encostar no elemento de saida
2357    if (hideTrigger && hideTrigger.getBoundingClientRect().top <= window.innerHeight) {
2358      return false;
2359    }
2360    // sem secao gatilho na pagina, mantem o comportamento antigo
2361    if (!revealTrigger) return scrollY > SCROLL_THRESHOLD;
2362    const rect = revealTrigger.getBoundingClientRect();
2363    return rect.top + rect.height / 2 <= window.innerHeight * REVEAL_ANCHOR;
2364  }
2365
2366  function applyState(scrollY) {
2367    if (nav) nav.classList.toggle('is-scrolled', scrollY > SCROLL_THRESHOLD);
2368    if (stickyButton) stickyButton.classList.toggle('is-visible', isButtonRevealed(scrollY));
2369  }
2370
2371  applyState(window.scrollY);
2372
2373  setTimeout(function () {
2374    justLoaded = false;
2375  }, LOAD_GRACE_PERIOD);
2376
2377  window.addEventListener('scroll', function () {
2378    const currentScrollY = window.scrollY;
2379
2380    if (justLoaded) {
2381      lastScrollY = currentScrollY;
2382      return;
2383    }
2384
2385    applyState(currentScrollY);
2386
2387    if (spacer && window.innerWidth <= MOBILE_BREAKPOINT) {
2388      if (currentScrollY > lastScrollY) {
2389        spacer.classList.add('is-scrolled');
2390      } else if (currentScrollY < lastScrollY) {
2391        spacer.classList.remove('is-scrolled');
2392      }
2393    }
2394
2395    lastScrollY = currentScrollY;
2396  });
2397
2398  window.addEventListener('resize', function () {
2399    applyState(window.scrollY);
2400  });
2401});
2402</script>
2402</div><div class="u-embed-js w-embed w-script">
2402<script>
2403function centerDropdowns() {
2404  const dropdowns = document.querySelectorAll('.nav_dropdown_main_content.is-desktop');
2405
2406  const updates = [];
2407
2408  dropdowns.forEach(function(el) {
2409    const component = el.closest('.nav_dropdown_component');
2410    const link = component ? component.querySelector('.nav_links_link') : null;
2411    if (!link) return;
2412
2413    const offsetParent = el.offsetParent || component;
2414    const linkRect = link.getBoundingClientRect();
2415    const parentRect = offsetParent.getBoundingClientRect();
2416    const centerX = linkRect.left + linkRect.width / 2 - parentRect.left;
2417
2418    updates.push({ el: el, centerX: centerX });
2419  });
2420
2421  updates.forEach(function(update) {
2422    update.el.style.left = update.centerX + 'px';
2423    update.el.style.transform = 'translateX(-50%)';
2424  });
2425}
2426
2427document.addEventListener('DOMContentLoaded', centerDropdowns);
2428
2429let resizeTimer;
2430window.addEventListener('resize', function() {
2431  clearTimeout(resizeTimer);
2432  resizeTimer = setTimeout(centerDropdowns, 100);
2433});
2434</script>
2434</div><div class="u-embed-css w-embed"><style>
2435:root {
2436	--nav--menu-open-duration: 300ms;
2437	--nav--menu-close-duration: 300ms;
2438	--nav--dropdown-open-duration: 300ms;
2439	--nav--dropdown-close-duration: 300ms;
2440}
2441body:has(.nav_component .w-nav-button.w--open):not(:has(.nav_desktop_wrap:not(.w-condition-invisible))) { overflow: hidden; }
2442/* on smaller screens */
2443@media (width < 65em) {
2444	/* disable scroll when mobile menu is open */
2445	body:has(.nav_component .w-nav-button.w--open) { overflow: hidden; }
2446  	.nav_bar_bg { display: none; }
2447}
2448/* on larger screens */
2449@container (min-width: 65em) {
2450	/* show desktop nav & dropdown backdrop */
2451	.nav_desktop_wrap, .nav_dropdown_backdrop { display: block; }
2452	/* hide mobile nav & mobile menu backdrop */
2453	.nav_desktop_wrap:not(.w-condition-invisible) ~ .nav_mobile_wrap, .nav_desktop_wrap:not(.w-condition-invisible) ~ .nav_menu_backdrop { display: none; }
2454}
2455/* dropdown list: initial state */
2456html:not(.wf-design-mode) .nav_dropdown_component > .w-dropdown-list {
2457	display: grid !important;
2458	grid-template-columns: minmax(0, 1fr);
2459	grid-template-rows: 0fr;
2460	transition: grid-template-rows var(--nav--dropdown-close-duration);
2461	visibility: hidden;
2462	opacity: 0;
2463}
2464html:not(.wf-design-mode) .nav_dropdown_component > .w-dropdown-list.w--open {
2465	visibility: visible;
2466	opacity: 1;
2467}
2468.nav_dropdown_component > .w-dropdown-list > * {
2469	overflow: hidden;
2470}
2471.nav_dropdown_component:has(> .w-dropdown-toggle[aria-expanded="true"]) > .w-dropdown-list {
2472	--nav--dropdown-close-duration: var(--nav--dropdown-open-duration);
2473	grid-template-rows: 1fr;
2474}
2475.nav_desktop_wrap:has(.nav_dropdown_component > .w-dropdown-toggle.w--open[aria-expanded="false"]) .nav_dropdown_component:has(> .w--open[aria-expanded="true"]) > .w-dropdown-list {
2476	transition-delay: var(--nav--dropdown-close-duration);
2477}
2478.nav_dropdown_backdrop {
2479	transition: opacity var(--nav--dropdown-close-duration);
2480}
2481.nav_component:has(.nav_dropdown_component > [aria-expanded="true"]) .nav_dropdown_backdrop {
2482	opacity: 1;
2483}
2484.nav_menu_backdrop {
2485	transition: opacity var(--nav--menu-close-duration);
2486}
2487.nav_component:has(.w-nav-button.w--open) .nav_menu_backdrop {
2488	opacity: 1;
2489}
2490@keyframes menuOpen {
2491 from { clip-path: polygon(0 0, 100% 0, 100% 0, 0 0); }
2492 to { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); }
2493}
2494@keyframes menuClose {
2495 from { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); }
2496 to { clip-path: polygon(0 0, 100% 0, 100% 0, 0 0); }
2497}
2498.nav_component:has(.w-nav-button.w--open) .w-nav-menu {
2499	animation: menuOpen var(--nav--menu-open-duration) ease-in-out forwards;
2500}
2501.nav_component:has(.w-nav-button:not(.w--open)) .w-nav-menu {
2502	animation: menuClose var(--nav--menu-close-duration) ease-in-out forwards;
2503}
2504.nav_component .w-nav-overlay {
2505 top: 0;
2506 min-height: 100vh;
2507}
2508.nav_mobile_wrap [data-open-on-mobile] > .w-dropdown-toggle {
2509	display: none;
2510}
2511.nav_mobile_wrap [data-open-on-mobile] > .w-dropdown-list {
2512	visibility: visible !important;
2513	opacity: 1 !important;
2514	display: block !important;
2515	grid-template-rows: 1fr !important;
2516}
2517html:has(.nav_banner_wrap:not(.w-condition-invisible)):not(.hide-nav-banner) {
2518	--nav--height-total: calc(var(--nav--banner-height) + var(--nav--height) + var(--nav--spacing-outer-vertical));
2519}
2520.hide-nav-banner .nav_banner_wrap {
2521	display: none;
2522}
2523.wf-design-mode .nav_mobile_menu_wrap {
2524	width: 100%;
2525}
2526.nav_component {
2527  transition:  background-color 0.3s ease, transform 0.8s ease;
2528}
2529.nav_component.is-scrolled,
2530.nav_component:has(.w-nav-button.w--open) {
2531  color: var(--base-color-brand--jim-maroon);
2532  background-color: white;
2533}
2534.nav_links_link.is-desktop {
2535  transition: color 0.3s ease, background-color 0.3s ease !important;
2536}
2537.nav_button_wrap { --nav--button-open: 0; }
2538.nav_button_wrap.w--open { --nav--button-open: 1; }
2539.nav_button_line.is-1 {
2540  transform: translateY(calc((1px * 0.5 + 0.5625rem * 0.5) * var(--nav--button-open, 0))) rotate(calc(-45deg * var(--nav--button-open, 0)));
2541}
2542.nav_button_line.is-2 {
2543  transform: translateY(calc((1px * -0.5 + 0.5625rem * -0.5) * var(--nav--button-open, 0))) rotate(calc(45deg * var(--nav--button-open, 0)));
2544}
2545.nav_button_line.is-center { opacity: calc(1 - var(--nav--button-open, 0)); }
2546.nav_mobile_layout { transition: color var(--nav--menu-close-duration); }
2547.nav_component:has(.w-nav-button.w--open) .nav_mobile_layout {
2548  --nav--menu-close-duration: var(--nav--menu-open-duration);
2549  color: var(--base-color-brand--jim-maroon);
2550}
2551.nav_dropdown_list .nav_dropdown_item:last-child { border-bottom: none; }
2552.nav_links_svg { transition: transform 0.3s ease; }
2553.nav_dropdown_component:has(>
2553 .w-dropdown-toggle[aria-expanded="true"]) .nav_links_svg { transform: rotate(180deg); }
2554[mobile-button-sticky] { opacity: 0; pointer-events: none; transition: opacity 0.35s ease; }
2555[mobile-button-sticky].is-visible { opacity: 1; pointer-events: none; }
2556[mobile-button-sticky]:not(.is-visible) .mobile_sticky_inner { pointer-events: none; }
2557[data-theme="dark"] {
2558  background-color: var(--_rb_jim---color--background--background-secondary, #1a0000);
2559  color: var(--_rb_jim---color--text--text-secondary, #ffffff);
2560}
2561[data-theme="maroon"] {
2562  background-color: var(--_rb_jim---color--neutral--color-maroon-50, #f5f3f3);
2563  color: var(--_rb_jim---color--text--text-primary, #1a0000);
2564}
2565[data-theme="dark"] .marquee_text_inner {
2566  border-right-color: rgba(255, 255, 255, 0.12);
2567  background-color: var(--_rb_jim---color--background--background-secondary, #1a0000);
2568}
2569[data-theme="dark"] [marquee="gradient"] {
2570  background-image: linear-gradient(90deg, #1a0000 0%, rgba(26, 0, 0, 0) 100%);
2571}
2572</style>
2573
2574<style>
2575  /* Prop Theme = light → páginas com fundo claro.
2576     Estado inicial = mesmo visual do scrolled (fill branco + texto maroon).
2577     Scroll e menu aberto continuam usando as regras .is-scrolled / :has(.w--open). */
2578  .nav_component[data-nav-theme='light'] {
2579    color: var(--base-color-brand--jim-maroon);
2580    background-color: white;
2581  }
2582</style></div><a href="#main" class="nav_skip_wrap w-inline-block"><div class="nav_skip_text u-text-style-small">Skip to main content</div></a><header class="nav_desktop_wrap"><div class="nav_desktop_contain"><div class="nav_desktop_layout"><a href="/" aria-label="Home Page" class="nav_desktop_logo w-inline-block"><div class="u-icon w-embed"><svg width="92" height="40" viewBox="0 0 92 40" fill="none" xmlns="http://www.w3.org/2000/svg">
2583<path d="M87.3957 18.9077C85.5881 19.3147 83.6397 19.9332 81.6823 20.7427C82.6141 17.9475 83.9838 15.1747 85.9679 13.144C86.7679 12.3255 86.4997 10.9537 85.4563 10.4927L83.709 9.72137C82.5269 9.19965 81.1729 9.25138 80.0289 9.85405C74.3289 12.8584 69.411 16.8006 65.3265 21.4781C65.9208 18.4422 66.8749 15.3883 68.1753 13.0946C68.6535 12.249 68.3094 11.1741 67.4223 10.7828L65.2751 9.83606C63.9478 9.25138 62.415 9.38405 61.2129 10.1981C56.8335 13.162 52.7981 16.8725 49.2298 21.5905C49.518 18.4624 50.2017 15.3119 51.3413 13.0856C51.7703 12.2468 51.4128 11.2213 50.557 10.8413L48.7092 10.0205C47.2858 9.38855 45.6257 9.84281 44.7006 11.1021C41.8026 15.0465 38.3817 18.6199 34.5519 21.8964C35.4725 18.7728 35.9686 15.3951 36.2188 12.5683C36.2702 11.9927 35.9484 11.4507 35.4234 11.2191L32.5119 9.92826C31.1891 9.34133 29.6496 9.62243 28.6084 10.6299C26.3584 12.8045 23.8201 14.5968 21.2103 16.2024C21.7376 15.0308 22.2426 13.8727 22.7252 12.7348C22.9889 12.1118 22.7073 11.39 22.0906 11.1179L19.568 9.99798C18.1961 9.38855 16.6029 9.65841 15.4924 10.6704C12.4492 13.4454 7.15584 16.5442 1.24805 18.7098C0.77436 18.883 0.756485 19.5486 1.21901 19.7443L3.39979 20.6708C3.85338 20.8642 4.35835 20.9001 4.83652 20.7697C7.48876 20.0456 10.6817 18.811 13.6379 17.3088C12.8022 18.8717 11.9174 20.4504 10.9901 22.0245C5.33032 25.409 0.781063 29.1802 0.016895 35.8029C-0.11717 36.961 0.557622 38.0584 1.65025 38.4407L5.71017 39.862C6.738 40.2218 7.88202 39.862 8.51436 38.9715C11.2046 35.171 13.7518 30.9478 16.0734 26.6346C20.2986 22.8431 25.259 19.4924 29.1044 15.7347C28.2889 18.8043 27.0421 21.8199 25.297 24.2171C24.6714 25.0761 25.0378 26.295 26.0366 26.6436L30.7445 28.2919C31.1735 28.4426 31.6472 28.3999 32.0382 28.1705C35.8032 25.9487 39.3514 23.0612 42.7343 19.6655C42.245 21.4871 41.892 23.2299 41.7691 24.6466C41.7065 25.3662 42.1355 26.0341 42.8148 26.2725L47.9763 28.0783C48.689 28.3279 49.4778 28.0288 49.8487 27.3654C51.7301 24.0035 54.8337 21.0598 58.5987 18.296C57.9864 20.5583 57.5909 22.8139 57.3854 24.7186C57.3072 25.4427 57.7406 26.1241 58.4221 26.3647L63.5188 28.1682C64.1467 28.3909 64.8483 28.193 65.2594 27.6668C67.6882 24.5477 71.0756 21.7884 75.0864 19.1191C74.2395 21.0935 73.5737 23.0275 73.1603 24.6354C72.9547 25.4337 73.3949 26.2545 74.1703 26.5199L79.0189 28.1817C79.5976 28.3796 80.2389 28.2245 80.6568 27.7769C83.0342 25.2156 87.6706 22.4203 91.5115 20.9406C92.0746 20.7247 92.0858 19.9264 91.5294 19.6903L90.2692 19.1551C89.362 18.7705 88.3565 18.6873 87.3957 18.9032V18.9077Z" fill="currentColor"/>
2584<path d="M25.4065 0.555289L20.969 0.00658332C20.4886 -0.0518854 20.0484 0.285434 19.9769 0.766676C19.6909 2.71863 19.2619 4.48843 18.6966 6.0491C18.5312 6.50335 18.7457 7.00933 19.1904 7.19373L23.3196 8.91856C23.7866 9.1142 24.3228 8.88258 24.4993 8.40583C25.2568 6.36393 25.8199 4.07465 26.1796 1.57849C26.2511 1.07926 25.9025 0.613758 25.4043 0.553041L25.4065 0.555289Z" fill="currentColor"/>
2585<path d="M38.5068 0.555289L34.0693 0.00658332C33.5889 -0.0518854 33.1487 0.285434 33.0772 0.766676C32.7912 2.71863 32.3622 4.48843 31.7969 6.0491C31.6316 6.50335 31.8461 7.00933 32.2907 7.19373L36.4199 8.91856C36.8869 9.1142 37.4232 8.88258 37.5997 8.40583C38.3571 6.36393 38.9202 4.07465 39.2799 1.57849C39.3514 1.07926 39.0029 0.613758 38.5046 0.553041L38.5068 0.555289Z" fill="currentColor"/>
2586</svg>
2587</div></a><nav aria-label="Main" class="nav_links_component desktop">
2587<ul role="list" class="nav_links_wrap is-desktop w-list-unstyled"><li class="nav_links_item is-desktop"><div data-delay="400" data-hover="true" class="nav_dropdown_component is-desktop w-dropdown"><div data-state="expanded" class="nav_links_link is-desktop w-dropdown-toggle"><div class="text-size-secondary">Payments</div><div class="nav_links_svg is-desktop"><div class="u-icon w-embed"><svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
2588<path d="M6 7.7L3 4.7L3.7 4L6 6.3L8.3 4L9 4.7L6 7.7Z" fill="currentColor"/>
2589</svg>
2590</div></div></div><nav class="nav_dropdown_main_wrap is-desktop w-dropdown-list"><div class="nav_dropdown_main_content is-desktop"><div data-lenis-prevent="" class="nav_dropdown_main_scroll is-desktop"><ul role="list" class="nav_dropdown_list is-desktop"><li class="nav_dropdown_item is-desktop"><a href="/tap" class="nav_dropdown_link is-desktop w-inline-block"><div>Tap to Pay</div></a></li><li class="nav_dropdown_item is-desktop"><a href="/payment-link" class="nav_dropdown_link is-desktop w-inline-block"><div>Payment Links</div></a></li></ul></div></div></nav></div></li><li class="nav_links_item is-desktop"><div data-delay="400" data-hover="true" class="nav_dropdown_component is-desktop w-dropdown"><div data-state="expanded" class="nav_links_link is-desktop w-dropdown-toggle"><div class="text-size-secondary">Solutions</div><div class="nav_links_svg is-desktop"><div class="u-icon w-embed"><svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
2591<path d="M6 7.7L3 4.7L3.7 4L6 6.3L8.3 4L9 4.7L6 7.7Z" fill="currentColor"/>
2592</svg>
2593</div></div></div><nav class="nav_dropdown_main_wrap is-desktop w-dropdown-list"><div class="nav_dropdown_main_content is-desktop"><div data-lenis-prevent="" class="nav_dropdown_main_scroll is-desktop"><ul role="list" class="nav_dropdown_list is-desktop"><li class="nav_dropdown_item is-desktop"><a href="/booking" class="nav_dropdown_link is-desktop w-inline-block"><div>Booking</div></a></li><li class="nav_dropdown_item is-desktop"><a href="/website-builder" class="nav_dropdown_link is-desktop w-inline-block"><div>Website Builder</div></a></li><li class="nav_dropdown_item is-desktop"><a href="/jim-card" class="nav_dropdown_link is-desktop w-inline-block"><div>Jim Card</div></a></li><li class="nav_dropdown_item is-desktop"><a href="/calculator" class="nav_dropdown_link is-desktop w-inline-block"><div>Calculator</div></a></li><li class="nav_dropdown_item is-desktop"><a href="/materials" class="nav_dropdown_link is-desktop w-inline-block"><div>Materials</div></a></li></ul></div></div></nav></div></li><li class="nav_links_item is-desktop"><a href="/chat" class="nav_links_link is-desktop w-inline-block"><div class="text-size-secondary">Ask Jim</div></a></li><li class="nav_links_item is-desktop"><a href="/pricing" class="nav_links_link is-desktop w-inline-block"><div class="text-size-secondary">Pricing</div></a></li><li class="nav_links_item is-desktop"><a href="/blog" aria-current="page" class="nav_links_link is-desktop w-inline-block w--current"><div class="text-size-secondary">Blog</div></a></li></ul><ul role="list" class="nav_actions_wrap desktop-77 w-list-unstyled"><li class="nav_buttons_item desktop-110"><a data-button="trigger" href="https://onboarding.jim.com/login" class="rb_button small w-inline-block"><div class="cta_button small-2">Get Jim</div><div data-button="bg" class="button_bg small-3"><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a69042703b2d33049b13366_button-bg-main.svg" alt="This is a plain white button background with no text or meaningful visual content. Screen readers should skip it; the button’s label carries the meaning." class="rb_image small-4"/></div></a></li></ul></nav></div></div></header><div data-animation="default" data-collapse="all" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="nav_mobile_wrap w-nav"><div class="nav_mobile_contain"><div class="nav_mobile_layout">
2593<a href="/" aria-label="Home Page" class="nav_mobile_logo w-inline-block"><div class="u-icon w-embed"><svg width="74" height="32" viewBox="0 0 74 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2594<path d="M69.9166 15.1262C68.4705 15.4518 66.9117 15.9465 65.3459 16.5942C66.0913 14.358 67.187 12.1398 68.7744 10.5152C69.4143 9.86038 69.1998 8.76297 68.365 8.39417L66.9672 7.7771C66.0216 7.35972 64.9383 7.4011 64.0231 7.88324C59.4631 10.2868 55.5288 13.4405 52.2612 17.1825C52.7366 14.7538 53.4999 12.3107 54.5403 10.4757C54.9228 9.79922 54.6475 8.93928 53.9379 8.62625L52.2201 7.86885C51.1583 7.4011 49.932 7.50724 48.9703 8.15849C45.4668 10.5296 42.2385 13.498 39.3838 17.2724C39.6144 14.77 40.1614 12.2495 41.073 10.4685C41.4162 9.79742 41.1302 8.97706 40.4456 8.67302L38.9673 8.01637C37.8287 7.51084 36.5005 7.87425 35.7605 8.88171C33.4421 12.0372 30.7054 14.8959 27.6415 17.5171C28.378 15.0182 28.7748 12.3161 28.975 10.0547C29.0162 9.59413 28.7587 9.16056 28.3387 8.97526L26.0095 7.94261C24.9513 7.47306 23.7197 7.69794 22.8867 8.50391C21.0867 10.2436 19.0561 11.6774 16.9682 12.9619C17.3901 12.0246 17.7941 11.0981 18.1802 10.1878C18.3911 9.68948 18.1659 9.11198 17.6725 8.8943L15.6544 7.99838C14.5568 7.51084 13.2823 7.72673 12.3939 8.53629C9.95932 10.7563 5.72467 13.2354 0.998444 14.9678C0.619488 15.1064 0.605188 15.6389 0.975206 15.7954L2.71983 16.5366C3.0827 16.6913 3.48668 16.7201 3.86921 16.6158C5.99101 16.0365 8.54539 15.0488 10.9103 13.847C10.2418 15.0974 9.53389 16.3603 8.79207 17.6196C4.26426 20.3272 0.624851 23.3442 0.013516 28.6423C-0.0937357 29.5688 0.446098 30.4468 1.3202 30.7526L4.56814 31.8896C5.3904 32.1774 6.30561 31.8896 6.81148 31.1772C8.96367 28.1368 11.0015 24.7582 12.8587 21.3076C16.2389 18.2745 20.2072 15.5939 23.2836 12.5877C22.6311 15.0434 21.6337 17.4559 20.2376 19.3737C19.7371 20.0609 20.0303 21.036 20.8293 21.3148L24.5956 22.6335C24.9388 22.7541 25.3178 22.7199 25.6306 22.5364C28.6426 20.7589 31.4812 18.449 34.1875 15.7324C33.796 17.1897 33.5136 18.5839 33.4153 19.7173C33.3652 20.293 33.7084 20.8273 34.2518 21.018L38.381 22.4626C38.9512 22.6623 39.5822 22.4231 39.879 21.8923C41.3841 19.2028 43.8669 16.8478 46.8789 14.6368C46.3891 16.4467 46.0727 18.2511 45.9083 19.7749C45.8457 20.3542 46.1925 20.8993 46.7377 21.0918L50.8151 22.5346C51.3174 22.7127 51.8786 22.5544 52.2075 22.1334C54.1506 19.6381 56.8605 17.4307 60.0691 15.2953C59.3916 16.8748 58.8589 18.422 58.5282 19.7083C58.3638 20.347 58.7159 21.0036 59.3362 21.2159L63.2151 22.5454C63.6781 22.7037 64.1911 22.5796 64.5254 22.2216C66.4273 20.1725 70.1364 17.9363 73.2092 16.7525C73.6597 16.5798 73.6686 15.9411 73.2235 15.7522L72.2153 15.3241C71.4896 15.0164 70.6852 14.9499 69.9166 15.1226V15.1262Z" fill="currentColor"/>
2595<path d="M20.3252 0.444231L16.7752 0.00526665C16.3908 -0.0415083 16.0387 0.228347 15.9815 0.613341C15.7527 2.1749 15.4095 3.59075 14.9573 4.83928C14.825 5.20268 14.9966 5.60746 15.3523 5.75499L18.6556 7.13485C19.0292 7.29136 19.4582 7.10606 19.5995 6.72467C20.2054 5.09114 20.6559 3.25972 20.9437 1.26279C21.0009 0.863407 20.722 0.491006 20.3234 0.442432L20.3252 0.444231Z" fill="currentColor"/>
2596<path d="M30.8055 0.444231L27.2554 0.00526665C26.8711 -0.0415083 26.519 0.228347 26.4618 0.613341C26.233 2.1749 25.8898 3.59075 25.4375 4.83928C25.3053 5.20268 25.4769 5.60746 25.8326 5.75499L29.1359 7.13485C29.5095 7.29136 29.9385 7.10606 30.0797 6.72467C30.6857 5.09114 31.1362 3.25972 31.424 1.26279C31.4812 0.863407 31.2023 0.491006 30.8037 0.442432L30.8055 0.444231Z" fill="currentColor"/>
2597</svg>
2598</div></a><nav role="navigation" class="nav_mobile_menu_wrap w-nav-menu"><div data-lenis-prevent="" class="nav_mobile_menu_scroll"><nav aria-label="Main" class="nav_links_component desktop-111"><ul role="list" class="nav_links_wrap desktop-112 w-list-unstyled"><li class="nav_links_item desktop-146"><div data-delay="400" data-hover="false" class="nav_dropdown_component desktop-150 w-dropdown"><div data-state="expanded" class="nav_links_link desktop-151 w-dropdown-toggle"><div class="rb_heading-style-h6 desktop-152">Payments</div><div class="nav_links_svg desktop-153"><div class="u-icon w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2599<path d="M12 15.4L6 9.4L7.4 8L12 12.6L16.6 8L18 9.4L12 15.4Z" fill="#1A0000"/>
2600</svg>
2601</div></div></div><nav class="nav_dropdown_main_wrap desktop-154 w-dropdown-list"><div class="nav_dropdown_main_content desktop-155"><div data-lenis-prevent="" class="nav_dropdown_main_scroll desktop-156"><ul role="list" class="nav_dropdown_list desktop-157 w-list-unstyled"><li class="nav_dropdown_item desktop-161"><a href="/tap" class="nav_dropdown_link desktop-162 w-inline-block"><div class="text-size-primary desktop-163">Tap to Pay</div></a></li><li class="nav_dropdown_item desktop-161"><a href="/payment-link" class="nav_dropdown_link desktop-162 w-inline-block"><div class="text-size-primary desktop-163">Payment Links</div></a></li></ul></div></div></nav></div></li><li class="nav_links_item desktop-146"><div data-delay="400" data-hover="false" class="nav_dropdown_component desktop-150 w-dropdown"><div data-state="expanded" class="nav_links_link desktop-151 w-dropdown-toggle">
2601<div class="rb_heading-style-h6 desktop-152">Solutions</div><div class="nav_links_svg desktop-153"><div class="u-icon w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2602<path d="M12 15.4L6 9.4L7.4 8L12 12.6L16.6 8L18 9.4L12 15.4Z" fill="#1A0000"/>
2603</svg>
2604</div></div></div><nav class="nav_dropdown_main_wrap desktop-154 w-dropdown-list"><div class="nav_dropdown_main_content desktop-155"><div data-lenis-prevent="" class="nav_dropdown_main_scroll desktop-156"><ul role="list" class="nav_dropdown_list desktop-157 w-list-unstyled"><li class="nav_dropdown_item desktop-161"><a href="/booking" class="nav_dropdown_link desktop-162 w-inline-block"><div class="text-size-primary desktop-163">Booking</div></a></li><li class="nav_dropdown_item desktop-161"><a href="/website-builder" class="nav_dropdown_link desktop-162 w-inline-block"><div class="text-size-primary desktop-163">Website Builder</div></a></li><li class="nav_dropdown_item desktop-161"><a href="/jim-card" class="nav_dropdown_link desktop-162 w-inline-block"><div class="text-size-primary desktop-163">Jim Card</div></a></li><li class="nav_dropdown_item desktop-161"><a href="/calculator" class="nav_dropdown_link desktop-162 w-inline-block"><div class="text-size-primary desktop-163">Calculator</div></a></li><li class="nav_dropdown_item desktop-161"><a href="/materials" class="nav_dropdown_link desktop-162 w-inline-block"><div class="text-size-primary desktop-163">Materials</div></a></li></ul></div></div></nav></div></li><li class="nav_links_item desktop-146"><a href="/chat" class="nav_links_link desktop-151 w-inline-block"><div class="rb_heading-style-h6 desktop-152">Ask Jim</div></a></li><li class="nav_links_item desktop-146"><a href="/pricing" class="nav_links_link desktop-151 w-inline-block"><div class="rb_heading-style-h6 desktop-152">Pricing</div></a></li><li class="nav_links_item desktop-146 is-last desktop-149"><a href="/blog" aria-current="page" class="nav_links_link desktop-151 w-inline-block w--current"><div class="rb_heading-style-h6 desktop-152">Blog</div></a></li></ul><ul role="list" class="nav_actions_wrap desktop-164 w-list-unstyled"><li class="nav_buttons_item desktop-165"><a data-button="trigger" href="https://onboarding.jim.com/login" class="rb_button navbar w-inline-block u-text-button-center"><div class="cta_button navbar-2">Get Jim</div><div data-button="bg" class="button_bg navbar-3"><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a69042703b2d33049b13366_button-bg-main.svg" alt="This is a plain white button background with no text or meaningful visual content. Screen readers should skip it; the button’s label carries the meaning." class="rb_image navbar-4"/></div></a></li></ul></nav></div></nav><div data-state="open" class="nav_button_wrap w-nav-button"><div class="nav_button_layout"><div class="nav_button_line is-1"></div><div class="nav_button_line is-center"></div><div class="nav_button_line is-2"></div></div></div></div></div></div><div nav="backdrop" class="nav_dropdown_backdrop"></div><div class="nav_bar_bg"></div></div><main class="main"><section class="benfits_section u-theme-dark"><div class="rb_padding-global padding-section-large"><div class="rb_container-large"><div class="benefits_content is-hero"><h1 class="rb_heading-style-h2">The Jim Insider</h1><div class="blog_hero-wrapper"><div class="rb_main-blog-wrapper w-dyn-list"><div role="list" class="rb_main-blog-list w-dyn-items"><div role="listitem" class="rb_main-blog-item w-dyn-item"><div data-hover="scale" class="rb_main-blog-card"><div class="rb_main-blog-content"><div class="rb_blog-tags-row"><div class="blog_category u-white"><div class="text-size-tertiary">JIM</div></div><div class="blog_category"><p class="text-size-tertiary">Sep 17, 2026</p></div></div><div class="rb_main-blog-content-inner"><h2 class="rb_heading-style-h4">How to start a food truck business: a 9-step guide</h2><div class="text-opacity-60"><p class="text-size-medium">How to start a food truck business and avoid costly mistakes. Follow our 9-step guide to navigate permits, create your brand, and launch for profit.</p></div></div></div><div class="rb_main-blog-img-wrap"><div class="u-image-wrapper"><img classes=" " loading="lazy" alt="" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6a7f360b1e3636ef1868a7fa_6a7f35d90a601d764cd380f5_how-to-start-a-food-truck.webp" class="u-image"/></div></div><a href="/blog/how-to-start-a-food-truck" class="link-full w-inline-block"></a></div></div></div></div></div></div></div></div></section><div class="blog-inner_section"><div class="css w-embed"><style>
2605  /* Ratios alternados — mesmo padrão do [RB] [GLOBAL] Blog Section (swiper da home).
2606     Na inner page o wrapper é .rb_card-img-wrap em vez de [blog='image']. */
2607  .blog-inner_section .rb_blog-item:nth-child(3n + 1) .rb_card-img-wrap {
2608    aspect-ratio: 1 / 1;
2609  }
2610
2611  .blog-inner_section .rb_blog-item:nth-child(3n + 2) .rb_card-img-wrap {
2612    aspect-ratio: 318 / 385;
2613  }
2614
2615  .blog-inner_section .rb_blog-item:nth-child(3n) .rb_card-img-wrap {
2616    aspect-ratio: 318 / 256;
2617  }
2618
2619  /* Mobile: todas as thumbs em 1:1 */
2620  @media screen and (max-width: 767px) {
2621    .blog-inner_section .rb_blog-item .rb_card-img-wrap {
2622      aspect-ratio: 1 / 1;
2623    }
2624  }
2625
2626  /* Hero: hover de imagem vem do Global Styles ([data-hover='scale'] no .rb_main-blog-card) */
2627</style></div><div class="rb_padding-global padding-section-medium"><div class="rb_container-large"><div class="blogs_content"><div class="blogs_top mobile-vertical"><div class="blogs_heading"><h2 class="rb_heading-style-h2">The latest</h2></div><div class="blogs_right"><div link="hover" class="link_wrapper"><div class="link_text_wrapper"><div class="rb_heading-style-h6">View all</div></div><div><div class="u-icon w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2628<path d="M16.175 13H4V11H16.175L10.575 5.4L12 4L20 12L12 20L10.575 18.6L16.175 13Z" fill="#1A0000"/>
2629</svg>
2630</div></div><a href="/all-posts" class="link-full w-inline-block"></a></div></div></div><div data-swiper-group-blogs="" class="swiper-group"><div class="rb_blog-wrapper w-dyn-list"><div role="list" class="rb_blog-list w-dyn-items"><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " loading="lazy" alt="" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6abd0536eab845cc34442c7b_6aac25bfb73e6d648ddc80dd_Blog04.
2630webp" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Flexible Options</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">How to Make Money on Your Phone in 2026: 3 Real Routes</h3></div><a href="/blog/how-to-make-money-on-your-phone" class="link-full w-inline-block"></a></div></div><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " loading="lazy" alt="Payment interface showing Car Detailing $85, options Tap to Pay or Payment Link, with Charge $85 button." src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6a84ad5f573a47599c81e47d_6a7489fb221db92a09c64c2d_payment-link.webp" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Instant Access</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">Is Link Payment Safe? How to Pay and Get Paid Safely</h3></div><a href="/blog/is-link-payment-safe" class="link-full w-inline-block"></a></div></div><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " loading="lazy" alt="" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6a7f360b1e3636ef1868a7fa_6a7f35d90a601d764cd380f5_how-to-start-a-food-truck.webp" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Ready to Grow</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">How to start a food truck business: a 9-step guide</h3></div><a href="/blog/how-to-start-a-food-truck" class="link-full w-inline-block"></a></div></div><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " loading="lazy" alt="" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6aac26de10d81f31081b182e_Blog02.webp" sizes="100vw" srcset="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6aac26de10d81f31081b182e_Blog02-p-500.webp 500w, https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6aac26de10d81f31081b182e_Blog02-p-800.webp 800w, https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6aac26de10d81f31081b182e_Blog02-p-1080.webp 1080w, https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6aac26de10d81f31081b182e_Blog02.webp 1264w" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Scaling Smart</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">How to accept credit card payment without machine and get paid anywhere</h3></div><a href="/blog/how-to-accept-credit-card-payment-without-machine" class="link-full w-inline-block"></a></div></div></div></div></div></div></div></div></div><div class="cta_section u-theme-dark"><div class="css w-embed"><style>
2631  .cta_section.rb-cta-armed .rb_cta-img {
2632    opacity: 0;
2633  }
2634</style></div><div class="js w-embed w-script">
2634<script>
2635  (function () {
2636    "use strict";
2637
2638    var root = document.currentScript
2639      ? document.currentScript.closest(".cta_section")
2640      : null;
2641
2642    if (!root) return;
2643
2644    var REDUZIDO =
2645      window.matchMedia &&
2646      window.matchMedia("(prefers-reduced-motion: reduce)").matches;
2647
2648    /* esconde ainda na análise do HTML, antes das imagens serem criadas: sem
2649       isso elas piscam na posição final até o GSAP carregar. quem estiver sem
2650       JS nunca recebe a classe e continua vendo a seção inteira */
2651    root.classList.add("rb-cta-armed");
2652
2653    function revelar() {
2654      root.classList.remove("rb-cta-armed");
2655    }
2656
2657    var tentativas = 0;
2658
2659    /* o embed é o primeiro filho da seção, então as imagens ainda não existem
2660       quando este script roda: sem esperar o DOM, a busca volta vazia */
2661    if (document.readyState === "loading") {
2662      document.addEventListener("DOMContentLoaded", esperarGSAP);
2663    } else {
2664      esperarGSAP();
2665    }
2666
2667    function esperarGSAP() {
2668      if (window.gsap && window.ScrollTrigger) return iniciar();
2669      if (++tentativas > 60) return revelar();
2670      setTimeout(esperarGSAP, 50);
2671    }
2672
2673    function paraDireita(el) {
2674      return /right_/.test(el.className);
2675    }
2676
2677    function iniciar() {
2678      var wrap = root.querySelector(".rb_cta-img-wrap");
2679      var imgs = wrap
2680        ? Array.prototype.slice.call(wrap.querySelectorAll(".rb_cta-img"))
2681        : [];
2682
2683      if (!imgs.length) return revelar();
2684
2685      /* cascata de cima para baixo em vez da ordem do HTML, que resolve um
2686         lado inteiro antes de tocar no outro */
2687      imgs.sort(function (a, b) {
2688        return a.getBoundingClientRect().top - b.getBoundingClientRect().top;
2689      });
2690
2691      if (REDUZIDO) {
2692        gsap.set(imgs, { opacity: 0 });
2693      } else {
2694        /* estoura no lugar, sem deslocamento: com a escala saindo do zero um
2695           translate junto vira dois movimentos disputando o mesmo instante.
2696           a opacidade fica em 1 porque a escala já esconde tudo — um fade por
2697           cima só deixaria a imagem lavada enquanto ela cresce */
2698        gsap.set(imgs, {
2699          opacity: 1,
2700          scale: 0,
2701          rotation: function (i, alvo) {
2702            return paraDireita(alvo) ? 15 : -15;
2703          },
2704          willChange: "transform, opacity",
2705          force3D: true
2706        });
2707      }
2708
2709      // o estado inicial agora está inline, então a classe já cumpriu o papel
2710      revelar();
2711
2712      ScrollTrigger.create({
2713        trigger: root,
2714        start: "top 70%",
2715        once: true,
2716        onEnter: function () {
2717          gsap.to(imgs, {
2718            opacity: 1,
2719            scale: 1,
2720            rotation: 0,
2721            duration: REDUZIDO ? 0.4 : 0.7,
2722            // o leve passo além de 1 é o que tira o ar de balão inflando
2723            ease: REDUZIDO ? "none" : "back.out(1.6)",
2724            stagger: REDUZIDO ? 0 : 0.08,
2725            clearProps: "willChange"
2726          });
2727        }
2728      });
2729    }
2730  })();
2731</script>
2731
2732</div><div class="rb_padding-global"><div class="rb_container-large"><div class="rb_cta-component padding-section-large"><div class="rb_cta-content"><div class="text-wrap-balance"><h2 class="rb_heading-style-display">Sell and get paid in seconds with Jim</h2></div><a data-button="trigger" href="https://onboarding.jim.com/login" class="rb_button w-inline-block u-hide-mobile"><div button="icon" class="u-icon z-index-2 w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2733<path d="M16.175 13H4V11H16.175L10.575 5.4L12 4L20 12L12 20L10.575 18.6L16.175 13Z" fill="#1A0000"/>
2734</svg>
2735</div><div class="cta_button">Get Jim</div><div data-button="bg" class="button_bg"><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a69042703b2d33049b13366_button-bg-main.svg" alt="This is a plain white button background with no text or meaningful visual content. Screen readers should skip it; the button’s label carries the meaning." class="rb_image"/></div></a></div></div></div></div><div class="rb_cta-img-wrap"><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a7480f703daeefa12c40d45_cta_img-1.png" alt="Barista in green apron holds pink and mango smoothies in clear cups with straws" class="rb_cta-img left_image1"/><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a70aeab2b4d1b6805c7a0f6_44560420e2b8b2352918bd85d202a394_img-2.webp" alt="Laughing fast-food worker holds phone showing $42.00 contactless payment to customer at drive-thru" class="rb_cta-img left_image2"/><img width="295" loading="lazy" alt="Woman in yellow sweatshirt dispenses frozen yogurt at topping bar in sunlit shop" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a70aeab42e18f5a186e62e6_ed7368d4aeeeeced368cf7e9a322f5f0_img-3.webp" class="rb_cta-img left_image3"/><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a70aeab4bcc6a69b521a41b_32772b133625637fb71ca76b74171f0c_img-4.webp" alt="Woman in orange work shirt unloads cardboard boxes from white delivery van on sunny street" class="rb_cta-img right_image1"/><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a70aeab9b444ee630f4921b_eb5fc9219a69b0940c4747b5472b34bc_img-5.webp" alt="Hairstylist Keisha trims client hair with scissors in busy sunlit salon" class="rb_cta-img right_image2"/><img loading="lazy" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/6a70aeab33ec04d31b2ddcc8_2c58af24c2e3c56f55ec790013f9ad7d_img-6.webp" alt="Pizza maker slides pizza into wood-fired brick oven in bright kitchen" class="rb_cta-img right_image3"/></div></div><div class="blog-inner_section"><div class="rb_padding-global padding-section-medium"><div class="rb_container-large"><div class="blogs_content"><div class="blogs_top"><div class="blogs_heading"><h2 class="rb_heading-style-h2">Empower growth</h2></div><div class="blogs_right"><div link="hover" class="link_wrapper"><div class="link_text_wrapper"><div class="rb_heading-style-h6">View all</div></div><div><div class="u-icon w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2736<path d="M16.175 13H4V11H16.175L10.575 5.4L12 4L20 12L12 20L10.575 18.6L16.175 13Z" fill="#1A0000"/>
2737</svg>
2738</div></div><a href="https://www.jim.com/category/entrepreneurship" class="link-full w-inline-block"></a></div></div></div><div data-swiper-group-blogs="" class="swiper-group"><div class="rb_blog-wrapper w-dyn-list"><div role="list" class="rb_blog-list w-dyn-items"><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " alt="Is Cost of Goods Sold a Debit or Credit?" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6abd1e219d29440311fa3309_03963859-9251-4257-9861-a497b2824cac.webp" loading="lazy" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Driving Growth</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">Is Cost of Goods Sold a Debit or Credit? (With Examples)</h3></div><a href="/blog/is-cost-of-goods-sold-a-debit-or-a-credit" class="link-full w-inline-block"></a></div></div><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " alt="Young farmer arranging rainbow chard and heirloom tomatoes at her farmers market stall" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6abbee3362190794df627b54_6abbeb83b8958915cb339a37_how-to-become-a-farmers-market-vendor-thumb-v4.webp" loading="lazy" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Ready to Grow</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">
2738How to Become a Vendor at a Farmers Market in 7 Steps</h3></div><a href="/blog/how-to-become-a-farmers-market-vendor" class="link-full w-inline-block"></a></div></div><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " alt="Young street food vendor handing tacos to a customer from his sidewalk food cart" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6abbee1614bc93235b8f143c_6abbeb7f6fed61f9c2815f84_street-vendor-license-thumb-v4.webp" loading="lazy" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Ready to Grow</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">Street Vendor License: What You Need and How to Apply</h3></div><a href="/blog/street-vendor-license" class="link-full w-inline-block"></a></div></div><div role="listitem" class="rb_blog-item w-dyn-item"><div data-hover="scale" class="blog_card"><div class="rb_card-img-wrap"><div class="u-image-wrapper"><img classes=" " alt="Young vendor wrapping a handmade ceramic mug for a customer at her holiday market stall on Small Business Saturday" src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051466/6abbede45e4dbfba70a36587_6abbeb7b9a17c9a61e2577ec_small-business-saturday-thumb-v4.webp" loading="lazy" class="u-image"/></div></div><div class="blog_category u-white"><div class="text-size-tertiary">Ready to Grow</div></div><div class="blog_text_wrapper"><h3 class="text-size-primary text-weight-normal">Small Business Saturday 2026: A Prep Checklist for Solo Sellers</h3></div><a href="/blog/small-business-saturday" class="link-full w-inline-block"></a></div></div></div></div></div></div></div></div></div></main><aside data-wf--rb-global-footer-corner--variant="base" class="blog_corner_wrapper"><div class="blog_corner_inner"></div></aside><div button-sticky="end" class="footer-section u-theme-extra-light"><div class="rb_padding-global"><div class="rb_container-large"><div class="footer-content"><div class="footer_top"><div class="footer_heading"><h2 class="rb_heading-style-h2">Run your business solo, with a partner.</h2></div><div class="footer_bottom"><div class="footer_links"><div class="footer_column"><div class="text-size-secondary">Payments</div><a href="/tap" class="footer_link w-inline-block"><div class="text-size-secondary">Tap to Pay</div></a><a href="/payment-link" class="footer_link w-inline-block"><div class="text-size-secondary">Payment Links</div></a></div><div class="footer_column"><div class="text-size-secondary">Solutions</div><a href="/booking" class="footer_link w-inline-block"><div class="text-size-secondary">Booking</div></a><a href="/website-builder" class="footer_link w-inline-block"><div class="text-size-secondary">Website Builder</div></a><a href="/jim-card" class="footer_link w-inline-block"><div class="text-size-secondary">Jim Card</div></a><a href="/calculator" class="footer_link w-inline-block"><div class="text-size-secondary">Calculator</div></a><a href="/materials" class="footer_link w-inline-block"><div class="text-size-secondary">Materials</div></a></div><div class="footer_column"><a href="/chat" class="footer_link w-inline-block"><div class="text-size-secondary">Ask Jim</div></a><a href="/pricing" class="footer_link w-inline-block"><div class="text-size-secondary">Pricing</div></a><a href="/blog" aria-current="page" class="footer_link w-inline-block w--current"><div class="text-size-secondary">Blog</div></a><a href="/" class="footer_link w-inline-block"><div class="text-size-secondary">Selling with Jim</div></a></div><div class="footer_column"><a href="/behind-the-curtain" class="footer_link w-inline-block"><div class="text-size-secondary">Terms &amp; Privacy</div></a><a href="https://www.jim.com/behind-the-curtain/privacy-agreements" class="footer_link w-inline-block"><div class="text-size-secondary">Data Protection Policy</div></a><a href="https://help.jim.com/en/" class="footer_link w-inline-block"><div class="text-size-secondary">Help center</div></a><a href="mailto:[email protected]?subject=Jim%20Support%20Request" class="footer_link w-inline-block"><div class="text-size-secondary">[email protected]</div></a></div></div><div class="footer_copy_wrapper"><div class="text-size-secondary u-op-60">Powered by CloudWalk, Inc.</div><div class="footer_legals hide"><a href="#" class="footer_link w-inline-block"><div class="text-size-secondary">Privacy</div></a><a href="#" class="footer_link w-inline-block"><div class="text-size-secondary">Terms</div></a><a href="#" class="footer_link w-inline-block"><div class="text-size-secondary">Data Protection Policy</div></a></div></div><div class="footer_social_wrapper"><div class="u-language-button"><div class="u-icon w-embed"><svg width="34" height="26" viewBox="0 0 34 26" fill="none" xmlns="http://www.w3.org/2000/svg">
2739<g clip-path="url(#clip0_12144_14927)">
2740<path d="M17 24.29C23.0751 24.29 28 19.3651 28 13.29C28 7.21491 23.0751 2.29004 17 2.29004M17 24.29C10.9249 24.29 6 19.3651 6 13.29C6 7.21491 10.9249 2.29004 17 2.29004M17 24.29C17 24.29 13 20.99 13 13.29C13 5.59004 17 2.29004 17 2.29004M17 24.29C17 24.29 21 20.99 21 13.29C21 5.59004 17 2.29004 17 2.29004M6 10.29H28M6 16.29H28" stroke="#1A0000" stroke-width="2"/>
2741</g>
2742<defs>
2743<clipPath id="clip0_12144_14927">
2744<rect width="24" height="24" fill="white" transform="translate(5 1.29004)"/>
2745</clipPath>
2746</defs>
2747</svg>
2748</div><div class="text-size-secondary">United States (English)</div></div><div class="footer_social"><div class="u-social-link-wrapper"><a aria-label="Access Jim TikTok" href="https://www.tiktok.com/@jim" target="_blank" class="u-social-link w-inline-block"></a><div><div class="u-icon w-embed"><svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
2749<g clip-path="url(#clip0_12144_14934)">
2750<g clip-path="url(#clip1_12144_14934)">
2751<g clip-path="url(#clip2_12144_14934)">
2752<path d="M15.2961 4.40339C15.1759 4.34126 15.0588 4.27315 14.9454 4.19931C14.6156 3.98126 14.3132 3.7243
27526 14.0448 3.43411C13.3731 2.66556 13.1222 1.8859 13.0299 1.34002H13.0336C12.9564 0.886915 12.9883 0.59375 12.9931 0.59375H9.9338V12.4235C9.9338 12.5823 9.9338 12.7393 9.92713 12.8944C9.92713 12.9137 9.92527 12.9315 9.92416 12.9523C9.92416 12.9608 9.92416 12.9697 9.92231 12.9786C9.92231 12.9808 9.92231 12.9831 9.92231 12.9853C9.89005 13.4098 9.75399 13.8198 9.52608 14.1793C9.29818 14.5388 8.98541 14.8368 8.61532 15.0471C8.22957 15.2665 7.79331 15.3817 7.34951 15.3811C5.92413 15.3811 4.76893 14.2188 4.76893 12.7834C4.76893 11.3481 5.92413 10.1858 7.34951 10.1858C7.61934 10.1855 7.88748 10.228 8.14402 10.3116L8.14773 7.19663C7.36894 7.09602 6.57776 7.15792 5.82408 7.37839C5.07042 7.59888 4.3706 7.97316 3.76882 8.47763C3.24152 8.93579 2.79823 9.48245 2.45887 10.093C2.32973 10.3157 1.84248 11.2104 1.78348 12.6625C1.74637 13.4867 1.99389 14.3406 2.1119 14.6935V14.7009C2.18612 14.9087 2.47371 15.6179 2.94239 16.2157C3.32033 16.6952 3.76685 17.1165 4.26757 17.4659V17.4585L4.27501 17.4659C5.75603 18.4723 7.39813 18.4062 7.39813 18.4062C7.68239 18.3948 8.6346 18.4062 9.71599 17.8938C10.9154 17.3256 11.5982 16.4792 11.5982 16.4792C12.0344 15.9734 12.3812 15.397 12.6239 14.7747C12.9007 14.047 12.9931 13.1742 12.9931 12.8254V6.54944C13.0302 6.5717 13.5245 6.89864 13.5245 6.89864C13.5245 6.89864 14.2366 7.35509 15.3477 7.65232C16.1448 7.86384 17.2188 7.90837 17.2188 7.90837V4.87134C16.8425 4.91216 16.0784 4.79342 15.2961 4.40339Z" fill="#240A13"/>
2753</g>
2754</g>
2755</g>
2756<defs>
2757<clipPath id="clip0_12144_14934">
2758<rect width="19" height="19" fill="white"/>
2759</clipPath>
2760<clipPath id="clip1_12144_14934">
2761<rect width="19" height="19" fill="white"/>
2762</clipPath>
2763<clipPath id="clip2_12144_14934">
2764<rect width="19" height="19" fill="white"/>
2765</clipPath>
2766</defs>
2767</svg>
2768</div></div></div><div class="u-social-link-wrapper"><a aria-label="Access Jim Instagram" href="https://www.instagram.com/chatwithjim" target="_blank" class="u-social-link w-inline-block"></a><div><div class="u-icon w-embed"><svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
2769<g clip-path="url(#clip0_12144_14939)">
2770<g clip-path="url(#clip1_12144_14939)">
2771<path d="M16.6116 4.0625H9.38763C7.97563 4.06357 6.62181 4.62494 5.62338 5.62338C4.62494 6.62181 4.06357 7.97563 4.0625 9.38763V16.6116C4.06335 18.0237 4.62465 19.3777 5.62309 20.3763C6.62155 21.3749 7.9755 21.9364 9.38763 21.9375H16.6116C18.0236 21.9362 19.3774 21.3746 20.3758 20.3761C21.3742 19.3775 21.9356 18.0236 21.9367 16.6116V9.38763C21.936 7.9755 21.3748 6.62142 20.3763 5.62292C19.3778 4.62439 18.0237 4.06315 16.6116 4.0625ZM20.1394 16.6116C20.1392 17.5471 19.7675 18.4443 19.1059 19.1059C18.4444 19.7675 17.5471 20.1392 16.6116 20.1394H9.38763C8.92437 20.1394 8.46567 20.0482 8.03771 19.8709C7.60971 19.6936 7.22085 19.4337 6.89332 19.1061C6.56581 18.7785 6.30601 18.3896 6.12882 17.9615C5.95159 17.5336 5.86047 17.0748 5.86056 16.6116V9.38763C5.86047 8.9244 5.95163 8.46573 6.12882 8.03774C6.30604 7.60978 6.56585 7.22092 6.89338 6.89338C7.22092 6.56585 7.60978 6.30604 8.03774 6.12882C8.46573 5.95163 8.9244 5.86046 9.38763 5.86056H16.6116C17.5469 5.86079 18.4439 6.23246 19.1053 6.89387C19.7667 7.55527 20.1384 8.45224 20.1386 9.38763L20.1394 16.6116Z" fill="#240A13"/>
2772<path d="M13 8.37849C10.4504 8.37849 8.37849 10.4512 8.37849 13C8.37849 15.5488 10.4512 17.6215 13 17.6215C15.5488 17.6215 17.6215 15.5488 17.6215 13C17.6215 10.4512 15.5496 8.37849 13 8.37849ZM13 15.8234C12.2512 15.8235 11.533 15.5262 11.0034 14.9968C10.4738 14.4673 10.1763 13.7492 10.1761 13.0004C10.176 12.2516 10.4734 11.5334 11.0028 11.0038C11.5322 10.4742 12.2504 10.1766 12.9992 10.1766C13.748 10.1765 14.4662 10.4738 14.9958 11.0032C15.5253 11.5326 15.8229 12.2508 15.823 12.9996C15.8231 13.7484 15.5258 14.4666 14.9963 14.9962C14.4669 15.5258 13.7488 15.8233 13 15.8234ZM17.6312 7.30518C17.8502 7.30534 18.0642 7.3704 18.2462 7.49215C18.4282 7.61389 18.57 7.78686 18.6537 7.98917C18.7374 8.19152 18.7593 8.41411 18.7165 8.62887C18.6738 8.8436 18.5683 9.04087 18.4135 9.1957C18.2587 9.35053 18.0614 9.45596 17.8467 9.49873C17.6319 9.5415 17.4093 9.51963 17.207 9.43591C17.0047 9.35219 16.8317 9.21036 16.71 9.02839C16.5882 8.84639 16.5232 8.63238 16.523 8.41343C16.523 7.80243 16.9374 7.30518 17.6312 7.30518Z" fill="#240A13"/>
2773</g>
2774</g>
2775<defs>
2776<clipPath id="clip0_12144_14939">
2777<rect width="26" height="26" fill="white"/>
2778</clipPath>
2779<clipPath id="clip1_12144_14939">
2780<rect width="26" height="26" fill="white"/>
2781</clipPath>
2782</defs>
2783</svg>
2784</div></div></div><div class="u-social-link-wrapper"><a aria-label="Access Jim Youtube" href="https://www.youtube.com/@chatwithjim" target="_blank" class="u-social-link w-inline-block"></a><div><div class="u-icon w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2785<g clip-path="url(#clip0_12144_14945)">
2786<g clip-path="url(#clip1_12144_14945)">
2787<g clip-path="url(#clip2_12144_14945)">
2788<path d="M16.5547 2.97656H3.44533C3.44533 2.97656 0 2.97654 0 6.42186V13.5703C0 13.5703 7.62939e-07 17.0156 3.44533 17.0156H16.5547C16.5547 17.0156 20 17.0156 20 13.5703V6.42186C20 6.42186 20 2.97656 16.5547 2.97656ZM7.33593 13.8437V6.14841L13.8828 9.99999L7.33593 13.8437Z" fill="#240A13"/>
2789</g>
2790</g>
2791</g>
2792<defs>
2793<clipPath id="clip0_12144_14945">
2794<rect width="20" height="20" fill="white"/>
2795</clipPath>
2796<clipPath id="clip1_12144_14945">
2797<rect width="20" height="20" fill="white"/>
2798</clipPath>
2799<clipPath id="clip2_12144_14945">
2800<rect width="20" height="20" fill="white"/>
2801</clipPath>
2802</defs>
2803</svg>
2804</div></div></div><div class="u-social-link-wrapper"><a aria-label="Access Jim Facebook" href="https://www.facebook.com/people/JIM/61559815860551/" target="_blank" class="u-social-link w-inline-block"></a><div><div class="u-icon w-embed"><svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
2805<g clip-path="url(#clip0_12144_14950)">
2806<g clip-path="url(#clip1_12144_14950)">
2807<path d="M19.2062 4.37935L16.3135 4.37585C13.5082 4.37585 11.6961 6.23435 11.6961 9.11398V11.2971H8.79375V15.2477H11.6961L11.6926 23.6259H15.7535L15.757 15.2477H19.0872L19.0846 11.298H15.757V9.4456C15.757 8.55485 15.9679 8.10423 17.1272 8.10423L19.1975 8.10335L19.2062 4.37935Z" fill="#240A13"/>
2808</g>
2809</g>
2810<defs>
2811<clipPath id="clip0_12144_14950">
2812<rect width="28" height="28" fill="white"/>
2813</clipPath>
2814<clipPath id="clip1_12144_14950">
2815<rect width="28" height="28" fill="white"/>
2816</clipPath>
2817</defs>
2818</svg>
2819</div></div></div><div class="u-social-link-wrapper"><a aria-label="Access Jim Threads" href="https://x.com/GetJIMnow" target="_blank" class="u-social-link w-inline-block"></a><div><div class="u-icon w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2820<g clip-path="url(#clip0_12144_14955)">
2821<g clip-path="url(#clip1_12144_14955)">
2822<g clip-path="url(#clip2_12144_14955)">
2823<path d="M-0.384002 0L7.67349 10.7735L-0.434784 19.5328H1.39021L8.48913 11.8637L14.2247 19.5328H20.4348L11.9237 8.15345L19.471 0H17.646L11.1084 7.06287L5.82609 0H-0.384002ZM2.29973 1.34414H5.15262L17.7507 18.1886H14.8978L2.29973 1.34414Z" fill="#1A0000"/>
2824</g>
2825</g>
2826</g>
2827<defs>
2828<clipPath id="clip0_12144_14955">
2829<rect width="20" height="20" fill="white"/>
2830</clipPath>
2831<clipPath id="clip1_12144_14955">
2832<rect width="20" height="20" fill="white"/>
2833</clipPath>
2834<clipPath id="clip2_12144_14955">
2835<rect width="20.8696" height="20" fill="white" transform="translate(-0.434784)"/>
2836</clipPath>
2837</defs>
2838</svg>
2839</div></div></div></div></div><div class="footer_text_wrapper"><p class="text-size-tertiary u-op-60">jim.com is not a bank. jim.com is a financial technology company. Banking services are provided by Lead Bank, Member FDIC. The Jim.com Visa Prepaid Card (the “J
2839im” Card) is issued by Lead Bank pursuant to licensing by Visa® U.S.A. Inc. and is available to commercial entities in select industries. Fees and eligibility requirements apply. See Jim.com for more details. Funds held in the Jim.com Prepaid Card Account are held with Lead Bank, Member FDIC, and are insured up to $250,000 in the event Lead Bank fails and if specific deposit insurance requirements are met and your card is registered. FDIC insurance does not protect funds in the event of Jim.com’s failure or from the risk of theft or fraud. See FDIC Prepaid Cards and Deposit Insurance Coverage. See FDIC Prepaid Cards and Deposit Insurance Coverage. Instant settlements subject to terms. Fees and T&amp;C apply. See Jim.com for more details.</p></div></div></div><div class="footer_video_wrapper"><div class="footer_video"><div class="footer_lottie_inner"><div lottie-stack="wrapper" class="lotties_stack"><div lottie-stack="1" class="lottie_item" data-w-id="750898c0-7c89-b7d6-a82f-63ce6bd6a400" data-animation-type="lottie" data-src="https://cdn.prod.website-files.com/6a4cad18edad9e1058b02d0c/6a5a47a3b1a73a84a5c48add_Jim_Logo-LookAround_Maroon.json" data-loop="0" data-direction="1" data-autoplay="1" data-is-ix2-target="0" data-renderer="svg" data-default-duration="0" data-duration="2.6666666666666665" data-loading="lazy"></div><div lottie-stack="2" class="lottie_item" data-w-id="750898c0-7c89-b7d6-a82f-63ce6bd6a401" data-animation-type="lottie" data-src="https://cdn.prod.website-files.com/6a4cad18edad9e1058b02d0c/6a5a47a3b3f5f2061f69a049_Jim_Logo-Love_Maroon.json" data-loop="1" data-direction="1" data-autoplay="1" data-is-ix2-target="0" data-renderer="svg" data-default-duration="0" data-duration="4.333333333333333" data-loading="lazy"></div><div lottie-stack="3" class="lottie_item" data-w-id="750898c0-7c89-b7d6-a82f-63ce6bd6a402" data-animation-type="lottie" data-src="https://cdn.prod.website-files.com/6a4cad18edad9e1058b02d0c/6a5a47a39dedb12276828055_JIM_Logo-Angry_Maroon.json" data-loop="0" data-direction="1" data-autoplay="1" data-is-ix2-target="0" data-renderer="svg" data-default-duration="0" data-duration="3.566666666666667" data-loading="lazy"></div></div></div></div></div></div></div></div></div></div>
2839<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=65fc1fa2c1e7707c3f051403" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
2839<script src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/js/jim-page.schunk.4af75a3dcc103563.js" type="text/javascript" integrity="sha384-uHxK7OkjtK+CcSL+rHWk+cmafP3nhlxH8gPcAzqBwInsfkNcuGpgT4VrVHoX9Xx0" crossorigin="anonymous"></script>
2839<script src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/js/jim-page.schunk.cab433597726e409.js" type="text/javascript" integrity="sha384-wZO+2UXoZX2OuA5KjUBlLHGYPu+XsDS5H6vOuInr1UWgEhakQj2ZYWTxByj5zD56" crossorigin="anonymous"></script>
2839<script src="https://cdn.prod.website-files.com/65fc1fa2c1e7707c3f051403/js/jim-page.ca2433cb.d308288248e8e7b8.js" type="text/javascript" integrity="sha384-BCXGIoFsGlSYEETrdt+ALLWaphj7PbfNbR1xGYcqHIorAbZsEV/1U7Tvvg+FJGnQ" crossorigin="anonymous"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/gsap.min.js" type="text/javascript"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/ScrollToPlugin.min.js" type="text/javascript"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/SplitText.min.js" type="text/javascript"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/ScrollTrigger.min.js" type="text/javascript"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/Flip.min.js" type="text/javascript"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/Draggable.min.js" type="text/javascript"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/InertiaPlugin.min.js" type="text/javascript"></script>
2839<script src="https://cdn.prod.website-files.com/gsap/3.15.0/CustomEase.min.js" type="text/javascript"></script>
2839<script type="text/javascript">gsap.registerPlugin(ScrollToPlugin,SplitText,ScrollTrigger,Flip,Draggable,InertiaPlugin,CustomEase);</script>
2839<!-- Search Params Data -->
2840<script>
2841    const saveQueryParams = () => {
2842        const setCookie = (name, value) => {
2843            const datePlus = (qtd, type, date) => {
2844                if (!type) {
2845                    type = "d";
2846                }
2847                if (!date) {
2848                    date = new Date();
2849                }
2850                const increase = {
2851                    d: 0,
2852                    m: 0,
2853                    y: 0,
2854                };
2855                increase[type] = qtd;
2856                return new Date(
2857                    date.getFullYear() + increase.y,
2858                    date.getMonth() + increase.m,
2859                    date.getDate() + increase.d
2860                );
2861            };
2862            document.cookie = `${name}=${value}; expires=${datePlus(30)}; path=/; domain=.jim.com; samesite=lax; secure`;
2863        };
2864        const params = {};
2865        const searchParams = new URLSearchParams(window.location.search);
2866        searchParams.forEach((value, key) => {
2867            if (value) {
2868                params[key] = value;
2869            }
2870        });
2871        setCookie("search_params", JSON.stringify(params));
2872    };
2873    window.addEventListener("DOMContentLoaded", saveQueryParams());
2874</script>
2874
2875<!-- End Search Params Data -->
2876
2877<!-- OneLinkScript -->
2878<script async src="https://onelinksmartscript.appsflyer.com/onelink-smart-script-latest.js"></script>
vendor: 1 bytes, line 2878
2878
2879<script>
2880    (function () {
2881        "use strict";
2882
2883        // [FIX-1] Resolve RS anonymousId: localStorage first (instant, persists across sessions),
2884        // then SDK fallback. Covers returning visitors even before SDK initializes.
2885        function getRsAnonymousId() {
2886            try {
2887                var s = localStorage.getItem("rl_anonymous_id");
2888                if (s) { s = s.replace(/^"|"$/g, ""); if (s && s !== "undefined") return s; }
2889            } catch (e) { }
2890            return (window.rudderanalytics && typeof rudderanalytics.getAnonymousId === "function")
2891                ? (rudderanalytics.getAnonymousId() || "unknown_id")
2892                : "unknown_id";
2893        }
2894
2895        // [FIX-3] Wait for SmartScript with retry (10 attempts x 300ms)
2896        function waitForSmartScript(callback, attempts, delay) {
2897            attempts = (typeof attempts === "number") ? attempts : 10;
2898            delay = (typeof delay === "number") ? delay : 300;
2899            if (window.AF_SMART_SCRIPT && typeof window.AF_SMART_SCRIPT.generateOneLinkURL === "function") {
2900                callback();
2901            } else if (attempts > 0) {
2902                setTimeout(function () { waitForSmartScript(callback, attempts - 1, delay); }, delay);
2903            } else {
2904                console.error("AF_SMART_SCRIPT não disponível após todas as tentativas.");
2905            }
2906        }
2907
2908        // URL sem query params (para af_sub5)
2909        var urlSemParams = (function () {
2910            try { var u = new URL(window.location.href); return u.origin + u.pathname; }
2911            catch (e) { return window.location.href.split('#')[0].split('?')[0]; }
2912        })();
2913
2914        // ===== OneLink Configs — uma entry por LP =====
2915        var oneLinkConfigs = {
2916            'general': {
2917                oneLinkURL: "https://jim.onelink.me/gx4L",
2918                webReferrer: "af_channel",
2919                afParameters: {
2920                    mediaSource: { keys: ["utm_source"], defaultValue: "organic_source" },
2921                    campaign: { keys: ["utm_name", "utm_campaign"] },
2922                    googleClickIdKey: "af_sub1",
2923                    afSub2: { keys: ["fbclid"] },
2924                    ad: { keys: ["utm_term"] },
2925                    adSet: { keys: ["utm_content"] },
2926                    afSub3: { keys: ["ttclid", "click_id"] },
2927                    afSub4: { keys: [], defaultValue: getRsAnonymousId() },
2928                    afSub5: { keys: [], defaultValue: urlSemParams },
2929                    afCustom: [{ paramKey: "af_ss_ui", defaultValue: "true" }]
2930                }
2931            },
2932            'tap-2-ss': {
2933                oneLinkURL: "https://jim.onelink.me/T0Dv",
2934                webReferrer: "af_channel",
2935                afParameters: {
2936                    mediaSource: { keys: ["utm_source"], defaultValue: "organic_source" },
2937                    campaign: { keys: ["utm_name", "utm_campaign"], defaultValue: "tap_lp_traffic" },
2938                    googleClickIdKey: "af_sub1",
2939                    afSub2: { keys: ["fbclid"] },
2940                    ad: { keys: ["utm_term"], defaultValue: "lp_tap" },
2941                    adSet: { keys: ["utm_content"], defaultValue: "tap_lp_paid" },
2942                    afSub3: { keys: ["ttclid", "click_id"] },
2943                    afSub4: { keys: [], defaultValue: getRsAnonymousId() },
2944                    afSub5: { keys: [], defaultValue: urlSemParams },
2945                    afCustom: [
2946                        { paramKey: "af_dp", defaultValue: "jim:///authenticated/home" },
2947                        { paramKey: "af_force_deeplink", defaultValue: "true" },
2948                        { paramKey: "af_web_dp", defaultValue: "https://onboarding.jim.com/login" },
2949                        { paramKey: "af_ss_ui", defaultValue: "true" }
2950                    ]
2951                }
2952            }
2953        };
2954
2955        function generateAll(anonymousId) {
2956            Object.keys(oneLinkConfigs).forEach(function (contextKey) {
2957                var config = oneLinkConfigs[contextKey];
2958
2959                // Inject fresh anonymousId
2960                config.afParameters.afSub4.defaultValue = anonymousId;
2961
2962                var result = window.AF_SMART_SCRIPT.generateOneLinkURL({
2963                    oneLinkURL: config.oneLinkURL,
2964                    webReferrer: config.webReferrer,
2965                    afParameters: config.afParameters
2966                });
2967
2968                if (result && result.clickURL) {
2969                    var resultUrl = result.clickURL;
2970
2971                    // Update links by data-onelink attribute
2972                    var linkElements = document.querySelectorAll('[data-onelink="' + contextKey + '"]');
2973                    linkElements.forEach(function (el) { el.setAttribute('href', resultUrl); });
2974
2975                    // Update QR codes by data-qrcode attribute
2976                    var qrCodeElements = document.querySelectorAll('[data-qrcode="' + contextKey + '"]');
2977                    qrCodeElements.forEach(function (element, index) {
2978                        if (!element.id) element.id = "af_qrcode_" + contextKey + "_" + index;
2979                        window.AF_SMART_SCRIPT.displayQrCode(element.id, { clickURL: resultUrl, codeColor: "#000000" });
2980                    });
2981                }
2982            });
2983
2984            // Backward compat — existing selectors
2985            var generalResult = window.AF_SMART_SCRIPT.generateOneLinkURL({
2986                oneLinkURL: oneLinkConfigs['general'].oneLinkURL,
2987                webReferrer: oneLinkConfigs['general'].webReferrer,
2988                afParameters: oneLinkConfigs['general'].afParameters
2989            });
2990            if (generalResult && generalResult.clickURL) {
2991                var url = generalResult.clickURL;
2992                var appStoreEls = document.querySelectorAll('[data-deeplink-name="appstore"]');
2993                appStoreEls.forEach(function (el) { el.setAttribute('href', url); });
2994                var androidLink = document.getElementById('andrd_link');
2995                if (androidLink) androidLink.setAttribute('href', url);
2996                var iosLink = document.getElementById('ios_link');
2997                if (iosLink) iosLink.setAttribute('href', url);
2998            }
2999        }
3000
3001        document.addEventListener('DOMContentLoaded', function () {
3002            waitForSmartScript(function () {
3003                // Initial generation with best available anonymousId
3004                generateAll(getRsAnonymousId());
3005
3006                // [FIX-2] Re-generate once RudderStack is fully ready (first-time visitors)
3007                if (window.rudderanalytics && typeof rudderanalytics.ready === "function") {
3008                    rudderanalytics.ready(function () {
3009                        var freshId = rudderanalytics.getAnonymousId();
3010                        if (freshId && freshId !== "unknown_id") {
3011                            generateAll(freshId);
3012                        }
3013                    });
3014                }
3015            });
3016        });
3017
3018    })();
3019</script>
3019
3020<!-- End OneLinkScript -->
3021
3022<script>
3023    const COOKIE_NAME = "search_params";
3024    const getCookie = (name) => {
3025        const value = `; ${document.cookie}`;
3026        const parts = value.split(`; ${name}=`);
3027        if (parts.length === 2) {
3028            return parts.pop().split(";").shift();
3029        }
3030        return null;
3031    };
3032    const getUrlSearchParams = () => {
3033        try {
3034            const urlParams = new URLSearchParams(window.location.search);
3035            const params = {};
3036
3037            urlParams.forEach((value, key) => {
3038                params[key] = value;
3039            });
3040
3041            return params;
3042        } catch (error) {
3043            return {};
3044        }
3045    };
3046
3047    const getCookieParams = () => {
3048        try {
3049            const cookieValue = getCookie(COOKIE_NAME);
3050            if (!cookieValue) return {};
3051            const parsedData = JSON.parse(cookieValue);
3052            return parsedData && typeof parsedData === "object" ? parsedData : {};
3053        } catch (error) {
3054            return {};
3055        }
3056    };
3057
3058    const getMergedParams = () => {
3059        const urlParams = getUrlSearchParams();
3060        const cookieParams = getCookieParams();
3061
3062        return { ...urlParams, ...cookieParams };
3063    };
3064
3065    const mergeParamsIntoUrl = (href, params) => {
3066        if (!href) return href;
3067
3068        const paramKeys = Object.keys(params || {});
3069        if (paramKeys.length === 0) return href;
3070
3071        try {
3072            const url = new URL(href, window.location.origin);
3073            paramKeys.forEach((key) => {
3074                const value = params[key];
3075                if (value != null && value !== "") {
3076                    url.searchParams.set(key, value);
3077                }
3078            });
3079            return url.toString();
3080        } catch (error) {
3081            return href;
3082        }
3083    };
3084
3085    const updateButtonsUrls = () => {
3086        const mergedParams = getMergedParams();
3087
3088        if (!mergedParams || Object.keys(mergedParams).length === 0) {
3089            return;
3090        }
3091
3092        const links = document.querySelectorAll(
3093            "a.button-glow_purple, a.glowing_button.fixed_button, a.widget_download-desk_wrapper, .widget_download-desk_wrapper a[href], a.jim2_button, a.jim2-testimonials-left_buttom, a.bento_grid-link, a.button, a.rb_button, a.link-full, a[href*='onboarding.jim.com']");
3094
3095        links.forEach((link) => {
3096            const currentHref = link.getAttribute("href");
3097            if (!currentHref) {
3098                return;
3099            }
3100
3101            const updatedHref = mergeParamsIntoUrl(currentHref, mergedParams);
3102
3103            if (updatedHref && updatedHref !== currentHref) {
3104                link.setAttribute("href", updatedHref);
3105            }
3106        });
3107    };
3108
3109    document.addEventListener("DOMContentLoaded", updateButtonsUrls);
3110</script>
3110
3111
3112<script>
3113    (() => {
3114        // 1) Escolha quais parâmetros você quer manter (recomendado: whitelist)
3115        const WHITELIST = new Set([
3116            "utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "utm_name",
3117            "gclid", "fbclid", "click_id", "ttclid"
3118        ]);
3119
3120        // 2) Onde salvar: sessionStorage (só na sessão) ou localStorage (entre sessões)
3121        const STORAGE = window.sessionStorage; // troque por window.localStorage se quiser persistir mais
3122        const KEY = "persist_query_params_v1";
3123
3124        const pickParams = (sp) => {
3125            const out = new URLSearchParams();
3126            for (const [k, v] of sp.entries()) {
3127                if (WHITELIST.has(k) && v) out.set(k, v);
3128            }
3129            return out;
3130        };
3131
3132        const currentUrl = new URL(window.location.href);
3133        const incomingPicked = pickParams(currentUrl.searchParams);
3134
3135        // Se chegou com params, salva (ex.: tap-2?utm_source=...)
3136        if ([...incomingPicked.keys()].length) {
3137            STORAGE.setItem(KEY, incomingPicked.toString());
3138        }
3139
3140        const storedStr = STORAGE.getItem(KEY) || "";
3141        if (!storedStr) return;
3142
3143        const stored = new URLSearchParams(storedStr);
3144
3145        // Opcional: injeta no URL atual sem recarregar (útil se a pessoa copiar o link)
3146        let changed = false;
3147        for (const [k, v] of stored.entries()) {
3148            if (!currentUrl.searchParams.has(k)) {
3149                currentUrl.searchParams.set(k, v);
3150                changed = true;
3151            }
3152        }
3153        if (changed) {
3154            history.replaceState({}, "", currentUrl.pathname + "?" + currentUrl.searchParams.toString() + currentUrl.hash);
3155        }
3156
3157        const isInternalLink = (a) => {
3158            const href = a.getAttribute("href") || "";
3159            if (!href || href.startsWith("#") || href.startsWith("mailto:") || href.startsWith("tel:") || href.startsWith("javascript:")) return false;
3160            try {
3161                const u = new URL(href, window.location.origin);
3162                // aceita mesmo origin OU qualquer subdomínio de jim.com
3163                return u.origin === window.location.origin || /(^|\.)jim\.com$/i.test(u.hostname);
3164            } catch { return false; }
3165        };
3166
3167        const withStoredParams = (href) => {
3168            const u = new URL(href, window.location.origin);
3169            for (const [k, v] of stored.entries()) {
3170                if (!u.searchParams.has(k)) u.searchParams.set(k, v);
3171            }
3172            // mantém relativo quando possível
3173            if (!href.startsWith("http")) return u.pathname + u.search + u.hash;
3174            return u.toString();
3175        };
3176
3177        // Atualiza hrefs existentes
3178        const updateAllLinks = () => {
3179            document.querySelectorAll("a[href]").forEach(a => {
3180                if (!isInternalLink(a)) return;
3181                a.setAttribute("href", withStoredParams(a.getAttribute("href")));
3182            });
3183        };
3184
3185        // Garante que links inseridos dinamicamente também funcionem (CMS, scripts, etc.)
3186        document.addEventListener("click", (e) => {
3187            const a = e.target.closest && e.target.closest("a[href]");
3188            if (!a || !isInternalLink(a)) return;
3189            a.setAttribute("href", withStoredParams(a.getAttribute("href")));
3190        }, true);
3191
3192        if (document.readyState === "loading") {
3193            document.addEventListener("DOMContentLoaded", updateAllLinks);
3194        } else {
3195            updateAllLinks();
3196        }
3197    })();
3198</script>
3198
3199
3200<!-- RudderStack Events -->
3201<script>
3202    document.addEventListener('DOMContentLoaded', function () {
3203        const buttons = document.querySelectorAll('.button-glow_purple-label');
3204        buttons.forEach(function (button) {
3205            button.addEventListener('click', function (event) {
3206                let linkUrl = null;
3207                const parentLink = event.target.closest('a');
3208                if (parentLink && parentLink.href) {
3209                    linkUrl = parentLink.href;
3210                }
3211                rudderanalytics.track('Button Click', {
3212                    button_text: event.target.textContent || event.target.innerText,
3213                    page_url: window.location.href,
3214                    button_link: linkUrl,
3215                    deeplink_name: parentLink ? parentLink.getAttribute('data-deeplink-name') : null
3216                });
3217            });
3218        });
3219    });
3220</script>
3220
3221<!-- End RudderStack Events -->
3222
3223<!-- Lenis Script Controls -->
3224<script data-id-scroll data-autoinit="true" data-duration="1" data-orientation="vertical" data-smoothWheel="true"
3225    data-smoothTouch="false" data-touchMultiplier="1.5" data-easing="(t) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t))"
3226    data-useOverscroll="true" data-useControls="true" data-useAnchor="true" data-useRaf="true" data-infinite="false"
3227    defer
3228    src="https://cdn.prod.website-files.com/645e0e1ff7fdb6dc8c85f3a2/653b82ecf87f552a98ac66b9_lenis-master-offbrand.02.txt"></script>
3228
3229
3230<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 3230-3231
3230
3231<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3231GTM-5X4DKQFL
vendor: 91 bytes, lines 3231-3232
3231" height="0" width="0"
3232        style="display:none;visibility:hidden"></iframe></noscript>
3233<!-- End Google Tag Manager (noscript) -->
3234
3235<!-- Active Campaign -->
3236<script>
3237    (function (e, t, o, n, p, r, i) { e.visitorGlobalObjectAlias = n; e[e.visitorGlobalObjectAlias] = e[e.visitorGlobalObjectAlias] || function () { (e[e.visitorGlobalObjectAlias].q = e[e.visitorGlobalObjectAlias].q || []).push(arguments) }; e[e.visitorGlobalObjectAlias].l = (new Date).getTime(); r = t.createElement("script"); r.src = o; r.async = true; i = t.getElementsByTagName("script")[0]; i.parentNode.insertBefore(r, i) })(window, document, "https://diffuser-cdn.app-us1.com/diffuser/diffuser.js", "vgo");
3238    vgo('setAccount', '92329594');
3239    vgo('setTrackByDefault', true);
3240    vgo('process');
3241</script>
3241
3242
3243<!-- START CLARITY -->
3244<script type="text/javascript">
3245    (function (c, l, a, r, i, t, y) {
3246        c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments) };
3247        t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i;
3248        y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y);
3249    })(window, document, "clarity", "script", "vuprfadb8x");
3250</script>
3250
3251<!-- END CLARITY -->
3252
3253<!-- Button Animation -->
3254<script>
3255    document.addEventListener('DOMContentLoaded', () => {
3256        const buttons = document.querySelectorAll('.button-glow_purple');
3257        const lerp = (start, end, factor) => start * (1 - factor) + end * factor;
3258
3259        buttons.forEach(button => {
3260            let currentX = 50;
3261            let currentY = 50;
3262            let rafId = null;
3263
3264            const updatePosition = () => {
3265                button.style.setProperty('--x', `${currentX}%`);
3266                button.style.setProperty('--y', `${currentY}%`);
3267                rafId = null;
3268            };
3269
3270            button.addEventListener('mousemove', (e) => {
3271                const rect = e.target.getBoundingClientRect();
3272                const targetX = ((e.clientX - rect.left) / rect.width) * 100;
3273                const targetY = ((e.clientY - rect.top) / rect.height) * 100;
3274
3275                currentX = lerp(currentX, targetX, 0.3);
3276                currentY = lerp(currentY, targetY, 0.3);
3277
3278                if (!rafId) {
3279                    rafId = requestAnimationFrame(updatePosition);
3280                }
3281            });
3282
3283            button.addEventListener('mouseleave', (e) => {
3284                currentX = 50;
3285                currentY = 50;
3286                if (!rafId) {
3287                    rafId = requestAnimationFrame(updatePosition);
3288                }
3289            });
3290        });
3291    });
3292</script>
3292
3293
3294<!-- Apollo.io -->
3295<script>
3296    function initApollo() {
3297        var n = Math.random().toString(36).substring(7), o = document.createElement("script");
3298        o.src = "https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=" + n, o.async = !0, o.defer = !0,
3299            o.onload = function () { window.trackingFunctions.onLoad({ appId: "68125dac921d000019c418d9" }) },
3300            document.head.appendChild(o)
3301    } initApollo();
3302</script>
3302<!-- START ANIMATION STYLE -->
3303<style>
3304@keyframes pulse-dot {
3305    0% {
3306        transform: scale(0.97);
3307        box-shadow: 0 0 0 0 rgba(70, 122, 252, 0.7);
3308    }
3309    
3310    70% {
3311        transform: scale(1);
3312        box-shadow: 0 0 0 10px rgba(70, 122, 252, 0);
3313    }
3314    
3315    100% {
3316        transform: scale(0.97);
3317        box-shadow: 0 0 0 0 rgba(70, 122, 252, 0);
3318    }
3319}
3320</style>
3321<!-- END ANIMATION STYLE -->
3322</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.