PageSourceSearch

https://www.payscale.com/products/software/ascent

html payscale.com collected 2026-09-24 07:21:30 UTC 436,375 bytes, 5,478 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Wed Sep 23 2026 14:31:00 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="wfprod.payscale.com" data-wf-page="6a33fc2df03836a6dbce5a0a" data-wf-site="678b9f42ff433e48155d0586" data-wf-intellimize-customer-id="117554229" lang="en"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Payscale Ascent | AI-Powered Compensation Intelligence</title><meta content="Real-time market data, intelligent pricing tools, and connected compensation planning. Built for compensation professionals who need to move faster with less manual work and more strategic impact." name="description"/><meta content="Payscale Ascent | AI-Powered Compensation Intelligence" property="og:title"/><meta content="Real-time market data, intelligent pricing tools, and connected compensation planning. Built for compensation professionals who need to move faster with less manual work and more strategic impact." property="og:description"/><meta content="Payscale Ascent | AI-Powered Compensation Intelligence" name="twitter:title"/><meta content="Real-time market data, intelligent pricing tools, and connected compensation planning. Built for compensation professionals who need to move faster with less manual work and more strategic impact." name="twitter:description"/><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/678b9f42ff433e48155d0586/css/payscale-staging.shared.c331de3d5.min.css" rel="stylesheet" type="text/css" integrity="sha384-wzHePVI39iomD5IcjQrvRCcQQxRzNUN04RY6DFICAlFf8QG9NHcnMspnA8MNcBVq" crossorigin="anonymous"/><link href="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/css/payscale-staging.6a33fc2df03836a6dbce5a0a.42501ab0e.opt.min.css" rel="stylesheet" type="text/css" integrity="sha384-QlAasOtFCExfuOSKO7R+oYI5qtyXm10L6um3YAgyE+r96AXmzXILO9/bchqHsewk" crossorigin="anonymous"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/>
1<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
1<script type="text/javascript">WebFont.load({  google: {    families: ["Inconsolata:400,700","Inter:300,400,500,600,700"]  }});</script>
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/678b9f42ff433e48155d0586/682a15238980d2afdc3f302b_payscale-favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/682a1528d7d614e5dba2f8f2_payscale-webclip.png" rel="apple-touch-icon"/><link href="https://www.payscale.com/products/software/ascent" rel="canonical"/><style>.anti-flicker, .anti-flicker * {visibility: hidden !important; opacity: 0 !important;}</style><style>[data-wf-hidden-variation], [data-wf-hidden-variation] * {
2        display: none !important;
3      }</style>
3<script type="text/javascript">if (localStorage.getItem('intellimize_data_tracking_type') !== 'optOut') { localStorage.removeItem('intellimize_opt_out_117554229'); } if (localStorage.getItem('intellimize_data_tracking_type') !== 'optOut') { localStorage.setItem('intellimize_data_tracking_type', 'optOut'); }</script>
3<script type="text/javascript">(function(e){var s={r:[]};e.wf={r:s.r,ready:t=>{s.r.push(t)}}})(window)</script>
3<script type="text/javascript">(function(e){var s={p:[],r:[]};e.intellimize={p:s.p,r:s.r,push:function(t){s.p.push(t)},ready:function(t){s.r.push(t)}}})(window)</script>
3<script type="text/javascript">(function(t,p){var n=document.documentElement;n.className+=" "+p,setTimeout(function(){n.className=n.className.replace(RegExp(" ?"+p),"")},t)})(4000, 'anti-flicker')</script>
3<link href="https://cdn.intellimize.co/snippet/117554229.js" rel="preload" as="script"/>
3<script type="text/javascript">var wfClientScript=document.createElement("script");wfClientScript.src="https://cdn.intellimize.co/snippet/117554229.js",wfClientScript.async=!0,wfClientScript.onerror=function(){document.documentElement.className=document.documentElement.className.replace(RegExp(" ?anti-flicker"),"")},document.head.appendChild(wfClientScript);</script>
3<link href="https://api.intellimize.co" rel="preconnect" crossorigin="true"/><link href="https://log.intellimize.co" rel="preconnect" crossorigin="true"/><link href="https://117554229.intellimizeio.com" rel="preconnect"/><!-- Charset & Viewport -->
4<meta charset="UTF-8" />
5<meta name="viewport" content="width=device-width, initial-scale=1" />
6
7<link rel="preconnect" href="https://cdn.cookielaw.org" crossorigin>
8<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin>
9
10<!-- Facebook Domain Verification -->
11<meta name="facebook-domain-verification" content="zmicjcz23dwwg4wr4it2kpa201mgnt" />
12
13<!-- Open Graph Meta Tags (for social previews) - START -->
14<meta property="og:image" content="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6826b33f1bbb33cc0befc00f_payscale-create-confidence-in-your-compensation.png" />
15<meta property="og:image:width" content="1200" />
16<meta property="og:image:height" content="627" />
17<!-- Open Graph Meta Tags (for social previews) - END -->
18
19<!-- OneTrust Cookies Consent Notice - Webflow - START -->
20<script src="https://cdn.cookielaw.org/consent/832d08fb-f25f-4eb2-86ed-d72dd85e17cd/otSDKStub.js" type="text/javascript" data-domain-script="832d08fb-f25f-4eb2-86ed-d72dd85e17cd" ></script>
20
21
22<script type="text/javascript">
23function OptanonWrapper() { }
24</script>
24
25<!-- OneTrust Cookies Consent Notice - Webflow - END -->
26
27<!-- Webflow Optimize, OneTrust - Custom Consent Checker - START -->
28<script>
29wf.ready(() => {
30// Function to opt in or out based on consent preferences
31const handleWebflowAnalyticsConsent = () => {
32   try {
33      // Logic to check consent groups from the OneTrust cookie
34      const otCookieKey = 'OptanonConsent=';
35      const otCookie = document.cookie.split('; ').find(row => row.startsWith(otCookieKey));
36      if (!otCookie) {
37      throw new Error('OneTrust cookie not found.');
38      }
39      const otGroupsKey = 'groups=';
40      const otGroups = decodeURIComponent(otCookie.split('&').find(row => row.startsWith(otGroupsKey)).split('=')[1]);
41      // OneTrust groups: 1 = necessary, 2 = performance, 3 = functional, 4 = targeting
42      const OT_FUNCTIONAL_CONSENT = '3:1'; // Ensure this matches your expected consent group
43      // Check for functional cookies group
44      const hasOptedIn = otGroups.indexOf(OT_FUNCTIONAL_CONSENT) !== -1;
45      // Adjust Webflow Analytics opt-in/out based on consent
46      if (hasOptedIn) {
47      wf.allowUserTracking();
48      } else {
49      wf.denyUserTracking();
50      }
51   } catch (e) {
52      console.error('Error handling OneTrust consent:', e);
53   }
54};
55// Set up the OneTrust consent change listener to check when preferences change
56if (typeof OneTrust !== 'undefined' && OneTrust.OnConsentChanged) {
57   OneTrust.OnConsentChanged(() => {
58      handleWebflowAnalyticsConsent();
59   });
60}
61// Initial check when the page loads
62handleWebflowAnalyticsConsent();
63});
64</script>
64
65<!-- Webflow Optimize, OneTrust - Custom Consent Checker - END -->
66
67<!-- Webflow Optimize Experience Tracking - START -->
68<script>
69// Configure localStorage for Optimize experience data
70const optimizeStorage = 'wf_optimize_data';
71const optimizeTTL = 30 * 60 * 1000; // 30 minutes of inactivity
72
73// Initialize Optimize data object from localStorage
74const optimizeData = (function() {
75  try {
76    const stored = localStorage.getItem(optimizeStorage);
77    if (stored) {
78      const parsed = JSON.parse(stored);
79      if (parsed.timestamp && (Date.now() - parsed.timestamp < optimizeTTL)) {
80        return parsed.data;
81      }
82      // Expired — clear it
83      localStorage.removeItem(optimizeStorage);
84    }
85  } catch (e) {
86    console.warn('Could not restore Webflow Optimize data from localStorage:', e);
87  }
88  return {
89    experienceId: [],
90    experienceName: [],
91    experienceType: [],
92    variationId: [],
93    variationName: [],
94    ccStatus: []
95  };
96})();
97
98// Refresh timestamp on every page load if data exists (rolling expiry)
99if (optimizeData.experienceId.length > 0) {
100  try {
101    localStorage.setItem(optimizeStorage, JSON.stringify({
102      data: optimizeData,
103      timestamp: Date.now()
104    }));
105  } catch (e) {
106    console.warn('Could not refresh Optimize data timestamp:', e);
107  }
108}
109
110// Define getter function for Optimize data
111function getOptimizeStrings() {
112  // Helper to check if value is meaningful
113  function hasValue(val) {
114    return val && typeof val === 'string' && val.trim().length > 0;
115  }
116  
117  // Filter out empty entries and format
118  const experiments = (optimizeData.experienceName || [])
119    .reduce((acc, name, i) => {
120      if (hasValue(name) && hasValue(optimizeData.experienceId?.[i])) {
121        acc.push(`${name.trim()} (${optimizeData.experienceId[i].trim()})`);
122      }
123      return acc;
124    }, [])
125    .join(', ');
126
127  const variants = (optimizeData.variationName || [])
128    .reduce((acc, name, i) => {
129      if (hasValue(name) && hasValue(optimizeData.variationId?.[i])) {
130        acc.push(`${name.trim()} (${optimizeData.variationId[i].trim()})`);
131      }
132      return acc;
133    }, [])
134    .join(', ');
135
136  return {
137    experiment: experiments,
138    variant: variants
139  };
140};
141
142// Ensure Webflow's API is available before running
143if (typeof wf !== 'undefined') {
144  wf.ready(() => {
145      
146    // Listen for Optimize variation assignment
147    wf.onVariationRecorded(function(result) {
148      try {
149        if (result) {
150
151          // Skip if this Optimize experience has already been recorded
152          if (result.experienceId && optimizeData.experienceId.includes(result.experienceId)) {
153            return;
154          }
155
156          optimizeData.experienceId.push(result.experienceId || '');
157          optimizeData.experienceName.push(result.experienceName || '');
158          optimizeData.experienceType.push(result.experienceType || '');
159          optimizeData.variationId.push(result.variationId || '');
160          optimizeData.variationName.push(result.variationName || '');
161          optimizeData.ccStatus.push(result.ccStatus || '');
162
163          // Persist Optimize experience data across page navigations and new tabs
164          try {
165            localStorage.setItem(optimizeStorage, JSON.stringify({
166              data: optimizeData,
167              timestamp: Date.now()
168            }));
169          } catch (e) {
170            console.warn('Could not save Optimize data to localStorage:', e);
171          }
172
173          console.log('Webflow Optimize Experience data: ', optimizeData);
174
175          // Push to any Marketo forms that have already loaded
176          if (typeof MktoForms2 !== 'undefined') {
177            MktoForms2.whenReady(function(form) {
178              var opt = getOptimizeStrings();
179              var optFields = {};
180              
181              // Populate hidden fields with experience data
182              if (opt.experiment.length > 0) {
183                optFields.Optimization_Experiment__c = opt.experiment;
184              }
185              if (opt.variant.length > 0) {
186                optFields.Optimization_Variant__c = opt.variant;
187              }
188              if (Object.keys(optFields).length > 0) {
189                form.addHiddenFields(optFields);
190                console.log('Optimize fields applied to form', form.getId(), ':', optFields);
191              } else {
192                console.log('No Optimize data available yet for form', form.getId());
193              }
194            });
195          }
196        } else {
197          console.log('Webflow Optimize experience not found or already recorded');
198        }
199      } catch (err) {
200        console.error('Error parsing Webflow Optimize data:', err);
201      }
202    });
203  });
204} else {
205  console.warn('Webflow API not available. Optimize experience tracking will not function.');
206};
207</script>
207
208<!-- Webflow Optimize Experience Tracking - END -->
209
210<!-- Custom CSS - START -->
211<style>
212/* Pre-hide Marketo form containers that use field shortening.
213   This class is added in initForms() ONLY for IDs in shorteningFormIDs.
214   Enrich-only and normal forms never receive this class. */
215.marketo-wrapper.needs-hide {
216  opacity: 0;
217  min-height: 50px;
218}
219</style>
220<!-- Custom CSS - END -->
221
222<!-- CHEQ INVOCATION TAG -->
223<script async
224src="https://ob.greencolumnart.com/i/e5d5d180836d70d64ffeb39886549972.js"
225data-ch="cheq4ppc" class="ct_clicktrue_84080" data-jsonp="onCheqResponse">
226</script>
226
227<!-- END CHEQ INVOCATION TAG -->
228
229<!-- sha256 hashing for GTM - START -->
230<script>
231async function sha256(message) {
232  try {
233    if (!window.TextEncoder || !window.crypto?.subtle) return '';
234    const msgUint8 = new TextEncoder().encode(message.toLowerCase().trim());
235    const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
236    const hashArray = Array.from(new Uint8Array(hashBuffer));
237    return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
238  } catch (e) {
239    return '';
240  }
241}
242</script>
242
243<!-- sha256 hashing for GTM - END -->
243<script src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586%2F66ba5a08efe71070f98dd10a%2F67b618c4a9d2c46c21c3513b%2Fp3cvwr-1.1.1.js" type="text/javascript"></script>
243</head><body><div class="page-wrapper"><div class="styles"><div class="global-styles w-embed"><style>
244/* Add subtle animated glow to dot elements that appear in eyebrow/labels */
245@keyframes glow-color {
246  from { background-color: #23a4b5; }
247  to   { background-color: #e2ff65; }
248}
249.glowing-dot {
250  animation: glow-color 1.5s ease-in-out infinite alternate;
251
252  
253/* Make text look crisper and more legible in all browsers */
254body {
255  -webkit-font-smoothing: antialiased;
256  -moz-osx-font-smoothing: grayscale;
257  font-smoothing: antialiased;
258  text-rendering: optimizeLegibility;
259}
260
261a {
262  color: inherit;
263}
264/* dropdown highlight active text */  
265.w-dropdown-link.w--current{
266	color: #1c8391;
267  	font-weight: 600;
268}
269
270/* Focus state style for keyboard navigation for the focusable elements */
271*[tabindex]:focus-visible,
272  input[type="file"]:focus-visible {
273   outline: 0.125rem solid #4d65ff;
274   outline-offset: 0.125rem;
275}
276
277/* Get rid of top margin on first element in any rich text element */
278.w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child {
279  margin-top: 0 !important;
280}
281
282/* Get rid of bottom margin on last element in any rich text element */
283.w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child {
284	margin-bottom: 0 !important;
285}
286
287/* Adds inline flex display */
288.display-inlineflex {
289  display: inline-flex;
290}
291
292/* These classes are never overwritten */
293.hide {
294  display: none !important;
295}
296
297@media screen and (max-width: 991px), 
298  @media screen and (max-width: 767px), 
299  @media screen and (max-width: 479px){
300    .hide, .hide-tablet{
301      display: none !important;
302    }
303  }
304  @media screen and (max-width: 767px)
305    .hide-mobile-landscape{
306      display: none !important;
307    }
308  }
309  @media screen and (max-width: 479px)
310    .hide-mobile{
311      display: none !important;
312    }
313  }
314
315/* Removes native scrollbar */  
316.no-scrollbar,  
317[data-scrollbar="none"] {  
318    -ms-overflow-style: none;  /* For Internet Explorer and Edge */  
319    overflow: -moz-scrollbars-none; /* For Firefox */  
320}  
321
322.no-scrollbar::-webkit-scrollbar,  
323[data-scrollbar="none"]::-webkit-scrollbar {  
324    display: none; /* For Chrome, Safari, and Opera */  
325}
326
327
328</style></div><div class="project-styles w-embed"><style>
329
330.resource_card:hover .image-cover {
331    transform: scale(1.05);
332}
333
334.filter_wrapper:has(input[type="checkbox"]:checked) .filter_block-bottom {
335    opacity: 1;
336    pointer-events: auto;
337}
338  
339  .w-tabs:before, .w-tabs:after {
340  	display: none;
341  }
342
343  .table-row:nth-child(even) {
344    background: #f4f2ea;
345  }
346  .table-row:hover {
347    background: #e8edf1;
348  }
349  .table.is-left-aligned .table-row {
350  	text-align: left;
351  }
352</style></div><div class="global-styles w-embed"><style>
353.ts-highlight::before {
354  content: '';
355  position: absolute;
356  left: 0;
357  right: 0;
358  bottom: -2px;
359  top: 5px;
360  background: linear-gradient(90deg, #CFBDFF 30%, #B399F8 100%);
361  z-index: -1;
362  border-radius: 100px;
363}
364.ts-highlight.is-green::before {
365  background: linear-gradient(90deg, #C4EFE4 0%, #B9DCD3 100%);
366}
367.ts-highlight.is-yellow::before {
368  background: linear-gradient(90deg, #E8FF84 0%, #D1F72F 100%);
369}
370</style></div></div><div data-animation="default" class="nav_component w-nav" data-wf--navbar--variant="light" data-easing2="ease" data-easing="ease" data-collapse="medium" data-w-id="95695c20-8c4f-c284-2209-2ed9ebec047a" role="banner" data-no-scroll="1" data-duration="400"><div class="hide w-embed w-script"><style>
371  /* BASE NAVIGATION CONTAINER */
372  .nav_component {
373    transition: background-color 0.3s ease;
374    background-color: transparent;
375  }
376  /* Light variant - white on scroll */
377  .nav_component[data-wf--navbar--variant='light'].navbar--scrolled {
378    background-color: white !important;
379  }
380
381  /* Dark variant - #0A4444 on scroll */
382  .nav_component[data-wf--navbar--variant='dark'].navbar--scrolled {
383    background-color: #0a4444 !important;
384  }
385
386  /* DROPDOWN ARROW (Icon within nav-link) */
387  .nav-dropdown-arrow {
388    transition: transform 0.18s linear;
389    transform: rotateZ(0deg);
390  }
391  .nav-link:hover .nav-dropdown-arrow,
392  .nav-dropdown:has(.nav-dropdown_list:hover) .nav-dropdown-arrow {
393    transform: rotateZ(-180deg);
394  }
395  .nav-dropdown .nav-link {
396    transition: color 0.3s ease-out;
397  }
398  .nav-dropdown:hover .nav-link {
399    color: white;
400  }
401  .nav-dropdown:hover {
402    background-color: #23a4b5;
403  }
404  /* DROPDOWN LIST (Hidden menu container) */
405  .nav-dropdown_list {
406    position: absolute;
407    z-index: 9999 !important;
408    opacity: 0;
409    visibility: hidden;
410    pointer-events: none;
411  }
412  .nav-dropdown:hover .nav-dropdown_list {
413    display: block;
414    opacity: 1;
415    visibility: visible;
416    pointer-events: auto;
417  }
418  /* DROPDOWN ITEMS (List items within dropdown) */
419  .nav-item_text {
420    transition: color 0.3s ease-out;
421  }
422  .nav-item:hover .nav-item_text {
423    color: #886fde;
424  }
425  .nav-item_desc {
426    transition: color 0.3s ease-out;
427  }
428  .nav-item:hover .nav-item_desc {
429    color: #886fde;
430  }
431  /* DROPDOWN FOOTER ITEMS (Alternative item variant) */
432  .nav-dropdown-footer-item {
433    transition: color 0.3s ease-out;
434  }
435  .nav-dropdown-footer-item:hover .nav-dropdown-footer-item_title {
436    color: #886fde;
437  }
438  .nav-dropdown-footer-item_desc {
439    transition: color 0.3s ease-out;
440  }
441  .nav-dropdown-footer-item:hover .nav-dropdown-footer-item_desc {
442    color: #886fde;
443  }
444</style>
445<script>
446  document.addEventListener('DOMContentLoaded', function () {
447    const navbar = document.querySelector('.nav_component');
448    if (navbar) {
449      const scrollTrigger = 0.015;
450      let ticking = false;
451      window.addEventListener('scroll', function () {
452        if (!ticking) {
453          window.requestAnimationFrame(function () {
454            const scrollTop = window.scrollY;
455            const docHeight = document.documentElement.scrollHeight - window.innerHeight;
456            const scrollPercent = scrollTop / docHeight;
457            if (scrollPercent > scrollTrigger) {
458              navbar.classList.add('navbar--scrolled');
459            } else {
460              navbar.classList.remove('navbar--scrolled');
461            }
462            ticking = false;
463          });
464          ticking = true;
465        }
466      });
467    }
468  });
469</script>
469
470
471</div><div class="nav_container"><a href="/" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0487" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0487" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav_logo-link w-nav-brand"><div class="nav_logo-image w-embed"><svg width="100%" height="100%" viewBox="0 0 195 46" fill="none" xmlns="http://www.w3.org/2000/svg">
472<g clip-path="url(#clip0_1074_3915)">
473<path d="M66.0507 19.0251C66.0507 24.2426 62.5431 28.0448 56.1025 28.0448H51.8605V37.7137C51.8605 38.0781 51.6156 38.321 51.2484 38.321H48.0281C47.6608 38.321 47.416 38.0781 47.416 37.7137V10.6126C47.416 10.2483 47.6608 10.0054 48.0281 10.0054H56.1025C62.5431 10.0054 66.0507 13.8076 66.0507 19.0251ZM61.771 19.0251C61.771 15.2649 59.0403 13.971 55.9424 13.971H51.8652V24.0838H55.9424C59.0403 24.0838 61.771 22.7479 61.771 19.0297V19.0251Z" fill="currentColor"/>
474<path d="M86.0685 19.1043V37.7089C86.0685 38.0732 85.8237 38.3161 85.4565 38.3161H82.6834C82.3162 38.3161 82.1137 38.0732 82.0713 37.7089L81.9066 35.6864C80.4 37.5454 78.1966 38.8393 75.3811 38.8393C69.7549 38.8393 65.6777 34.229 65.6777 28.4463C65.6777 22.6636 69.7549 18.0533 75.3811 18.0533C78.1919 18.0533 80.3953 19.3893 81.9442 21.2903L82.0666 19.1043C82.109 18.74 82.3114 18.4971 82.6787 18.4971H85.4518C85.819 18.4971 86.0638 18.74 86.0638 19.1043H86.0685ZM81.8689 28.4089C81.8689 24.8917 79.3406 21.9396 75.8331 21.9396C72.3256 21.9396 69.7973 24.6908 69.7973 28.4089C69.7973 32.1271 72.3679 34.9624 75.8331 34.9624C79.2983 34.9624 81.8689 31.9683 81.8689 28.4089Z" fill="currentColor"/>
475<path d="M107.798 19.184L97.2802 45.5144C97.1578 45.8367 96.8706 46.0002 96.5458 46.0002H93.4855C93.0383 46.0002 92.8311 45.7573 92.9959 45.3135L95.849 38.3958L88.1842 19.184C88.0194 18.7402 88.2266 18.4973 88.6738 18.4973H91.7718C92.0966 18.4973 92.3838 18.6608 92.5062 18.9831L97.9676 33.3838L103.429 18.9831C103.551 18.6608 103.839 18.4973 104.163 18.4973H107.304C107.751 18.4973 107.958 18.7402 107.793 19.184H107.798Z" fill="currentColor"/>
476<path d="M123.091 33.0192C123.091 36.6206 119.381 38.844 115.793 38.844C112.408 38.844 109.72 37.1858 108.293 35.5276C108.048 35.2426 108.091 34.9624 108.251 34.7195L109.513 33.0613C109.8 32.6969 110.04 32.7763 110.407 33.0613C111.754 34.0749 113.627 35.2053 115.666 35.2053C117.46 35.2053 118.929 34.5186 118.929 32.9398C118.929 29.0582 108.656 30.4315 108.656 23.7987C108.656 20.2814 111.754 18.0533 115.341 18.0533C117.705 18.0533 120.313 19.1043 121.984 21.0475C122.229 21.3324 122.149 21.6126 121.942 21.8976L120.803 23.3923C120.558 23.7146 120.233 23.5932 119.903 23.3503C118.312 22.1358 117.215 21.5286 115.581 21.5286C114.197 21.5286 112.766 22.2152 112.766 23.752C112.766 27.5962 123.081 25.8539 123.081 33.0146L123.091 33.0192Z" fill="currentColor"/>
477<path d="M140.127 32.7767C140.452 32.4917 140.739 32.4917 141.026 32.7767L142.82 34.4769C143.065 34.7198 143.107 35.0421 142.862 35.327C140.988 37.471 138.253 38.8443 135.075 38.8443C129.326 38.8443 124.962 34.2761 124.962 28.4513C124.962 22.6266 129.326 18.0583 135.075 18.0583C138.173 18.0583 140.866 19.4316 142.74 21.5756C142.985 21.8605 142.942 22.1828 142.697 22.4257L140.904 24.126C140.616 24.4109 140.334 24.3689 140.004 24.0839C138.823 23.0703 137.556 21.94 135.113 21.94C131.567 21.94 129.077 24.7285 129.077 28.4513C129.077 32.1741 131.563 34.9207 135.113 34.9207C137.641 34.9207 138.987 33.8697 140.127 32.7767Z" fill="currentColor"/>
478<path d="M165.038 19.1043V37.7089C165.038 38.0732 164.793 38.3161 164.426 38.3161H161.653C161.286 38.3161 161.083 38.0732 161.041 37.7089L160.876 35.6864C159.37 37.5454 157.166 38.8393 154.351 38.8393C148.725 38.8393 144.647 34.229 144.647 28.4463C144.647 22.6636 148.725 18.0533 154.351 18.0533C157.162 18.0533 159.365 19.3893 160.914 21.2903L161.036 19.1043C161.079 18.74 161.281 18.4971 161.648 18.4971H164.421C164.789 18.4971 165.034 18.74 165.034 19.1043H165.038ZM160.839 28.4089C160.839 24.8917 158.31 21.9396 154.803 21.9396C151.295 21.9396 148.767 24.6908 148.767 28.4089C148.767 32.1271 151.338 34.9624 154.803 34.9624C158.268 34.9624 160.839 31.9683 160.839 28.4089Z" fill="currentColor"/>
479<path d="M169.52 8.79089H172.581C172.948 8.79089 173.193 9.03379 173.193 9.39812V37.7137C173.193 38.0781 172.948 38.321 172.581 38.321H169.52C169.153 38.321 168.908 38.0781 168.908 37.7137V9.39812C168.908 9.03379 169.153 8.79089 169.52 8.79089Z" fill="currentColor"/>
480<path d="M195.001 27.8391C195.001 29.3338 194.799 30.0625 193.697 30.0625H179.836C180.368 33.2575 182.732 35.3221 186.362 35.3221C188.4 35.3221 189.869 34.6728 191.211 33.6639C191.536 33.421 191.781 33.3416 192.068 33.6218L193.372 34.8736C193.697 35.1959 193.697 35.4809 193.372 35.8032C191.498 37.7043 188.89 38.8347 185.952 38.8347C179.836 38.8347 175.637 34.2664 175.637 28.4417C175.637 22.6169 179.794 18.0487 185.543 18.0487C191.291 18.0487 195.001 22.6216 195.001 27.8391ZM179.794 27.1151H191.211C190.924 23.8407 188.64 21.6968 185.585 21.6968C182.529 21.6968 180.204 23.8407 179.794 27.1151Z" fill="currentColor"/>
481<path d="M38.1934 16.245C38.1934 17.8842 36.8784 19.1889 35.2261 19.1889C33.5739 19.1889 32.2588 17.8842 32.2588 16.245C32.2588 14.6057 33.5739 13.301 35.2261 13.301C36.8784 13.301 38.1934 14.6517 38.1934 16.245Z" fill="currentColor"/>
482<path d="M38.1934 6.91916C38.1934 8.5584 36.8784 9.8631 35.2261 9.8631C33.5739 9.8631 32.2588 8.5584 32.2588 6.91916C32.2588 5.27992 33.5739 3.97522 35.2261 3.97522C36.8784 3.97522 38.1934 5.32592 38.1934 6.91916Z" fill="currentColor"/>
483<path d="M38.1934 25.6284C38.1934 27.2676 36.8784 28.5723 35.2261 28.5723C33.5739 28.5723 32.2588 27.2676 32.2588 25.6284C32.2588 23.9891 33.5739 22.6844 35.2261 22.6844C36.8784 22.6844 38.1934 23.9891 38.1934 25.6284Z" fill="currentColor"/>
484<path d="M38.1948 35.0078C38.1948 36.6471 36.8798 37.9518 35.2275 37.9518H35.1306C33.5753 37.9016 32.3108 36.6471 32.2602 35.104C32.2096 33.4648 33.5247 32.1141 35.1306 32.0639C36.7828 32.0137 38.1443 33.3184 38.1948 34.9117V35.0078Z" fill="currentColor"/>
485<path d="M29.4239 16.2448C29.4239 17.8841 28.1088 19.1888 26.4566 19.1888C24.8043 19.1888 23.4893 17.8841 23.4893 16.2448C23.4893 14.6056 24.8043 13.3009 26.4566 13.3009C28.0625 13.3009 29.4239 14.6516 29.4239 16.2448Z" fill="currentColor"/>
486<path d="M29.4239 25.6285C29.4239 27.2677 28.1088 28.5725 26.4566 28.5725C24.8043 28.5725 23.4893 27.2677 23.4893 25.6285C23.4893 23.9893 24.8043 22.6846 26.4566 22.6846C28.0625 22.6846 29.4239 23.9893 29.4239 25.6285Z" fill="currentColor"/>
487<path d="M29.4239 35.0081C29.4239 36.6474 28.1088 37.9521 26.4566 37.9521C24.8043 37.9521 23.4893 36.6474 23.4893 35.0081C23.4893 33.3689 24.8043 32.0642 26.4566 32.0642C28.0625 32.0642 29.4239 33.3689 29.4239 35.0081Z" fill="currentColor"/>
488<path d="M20.6544 25.6285C20.6544 27.2677 19.3393 28.5725 17.687 28.5725C16.0348 28.5725 14.7197 27.2677 14.7197 25.
4886285C14.7197 23.9893 16.0348 22.6846 17.687 22.6846C19.3393 22.6846 20.6544 23.9893 20.6544 25.6285Z" fill="currentColor"/>
489<path d="M20.6544 35.0081C20.6544 36.6474 19.3393 37.9521 17.687 37.9521C16.0348 37.9521 14.7197 36.6474 14.7197 35.0081C14.7197 33.3689 16.0348 32.0642 17.687 32.0642C19.3393 32.0642 20.6544 33.3689 20.6544 35.0081Z" fill="currentColor"/>
490<path d="M11.8907 16.2484C11.8907 17.8876 10.5756 19.1923 8.92338 19.1923C7.27112 19.1923 5.95605 17.8876 5.95605 16.2986C5.95605 14.7095 7.27112 13.3546 8.92338 13.3546C10.5756 13.3044 11.8907 14.6593 11.8907 16.2484Z" fill="currentColor"/>
491<path d="M11.8907 25.6284C11.8907 27.2676 10.5756 28.5723 8.92338 28.5723C7.27112 28.5723 5.95605 27.2676 5.95605 25.6284C5.95605 23.9891 7.27112 22.6844 8.92338 22.6844C10.5756 22.6844 11.8907 23.9891 11.8907 25.6284Z" fill="currentColor"/>
492<path d="M11.8907 35.008C11.8907 36.6473 10.5756 37.952 8.92338 37.952C7.27112 37.952 5.95605 36.6473 5.95605 35.008C5.95605 33.3688 7.27112 32.0641 8.92338 32.0641C10.5756 32.0641 11.8907 33.3688 11.8907 35.008Z" fill="currentColor"/>
493</g>
494<defs>
495<clipPath id="clip0_1074_3915">
496<rect width="100%" height="100%" fill="currentColor"/>
497</clipPath>
498</defs>
499</svg></div></a><div class="w-layout-hflex nav-menu-wrap"><div role="navigation" class="nav_menu w-nav-menu"><div class="nav-dropdown"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec048c" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec048c" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/solutions" class="nav-link w-inline-block"><div>Solutions</div><div class="nav-dropdown-arrow w-embed"><svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
500<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
501</svg></div></a><div class="nav-dropdown_list"><div class="nav-dropdown_list-container"><div class="w-layout-hflex nav-dropdown_list-wrapper"><div class="w-layout-vflex nav-dropdown_list-items"><div class="text-size-medium text-weight-semibold">By Product</div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0496:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0496%22%7D%5D" href="/products/software/ascent" aria-current="page" class="nav-item w-inline-block w--current"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/694aa7c46d89792d3908b192_payfactors-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Ascent</div><div class="nav-item_desc">The modern solution for fast, defensible pay decisions.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec049b:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec049b%22%7D%5D" href="/products/software/jobnav-recruiter" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a9eea33c33e0c438ee43c81_jobnav
501-recruiter-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">JobNav Recruiter</div><div class="nav-item_desc">Attract top talent with fast, compliant job postings.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0498:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0498%22%7D%5D" href="/products/software/paycycle" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/694e96c7888933f40ea906fb_paycycle-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Paycycle</div><div class="nav-item_desc">Streamline merit cycles and plan confident pay raises.</div></div></a></div><div class="w-layout-vflex nav-dropdown_list-items"><div class="text-size-medium text-weight-semibold">By Use Case</div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:801c6a9e-c3b1-1db7-f1d1-8c2cdfc1a1e5:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%22801c6a9e-c3b1-1db7-f1d1-8c2cdfc1a1e5%22%7D%5D" href="/solutions/benchmarking" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a45e3d1aabf160e4d343368_benchmarking%20icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Benchmarking</div><div class="nav-item_desc">Defensible pay benchmarks powered by AI-guided data.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:801c6a9e-c3b1-1db7-f1d1-8c2cdfc1a1e7:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%22801c6a9e-c3b1-1db7-f1d1-8c2cdfc1a1e7%22%7D%5D" href="/solutions/job-management" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a9eea580ac64f5fb06cb232_job-management-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Job Management</div><div class="nav-item_desc">Build job architecture that connects to benchmarking and planning.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:801c6a9e-c3b1-1db7-f1d1-8c2cdfc1a1ea:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%22801c6a9e-c3b1-1db7-f1d1-8c2cdfc1a1ea%22%7D%5D" href="/solutions/compensation-planning" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/694e96d5f58bff9322d3300d_marketpay-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Compensation Planning</div><div class="nav-item_desc">End-to-end compensation planning and pay raise management.</div></div></a></div><div class="w-layout-vflex nav-dropdown_list-items"><div class="text-size-medium text-weight-semibold">By Role</div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04a1:234ca
501a01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04a1%22%7D%5D" href="/solutions/hr-professionals" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a45e508871e5c2f09e1ba09_hr-pros-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">HR Professionals</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04a3:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04a3%22%7D%5D" href="/solutions/compensation-professionals" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a45e5072a6ec6a0ef5d6f44_comp-pros-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Compensation Pros</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04a5:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04a5%22%7D%5D" href="/solutions/talent-acquisition" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a9ffe7e84bc4957936401f8_personalcard-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Talent Acquisition</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04a7:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04a7%22%7D%5D" href="/solutions/executive-leadership" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a3d9142d4e902b376197f0f_people-together-08.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Executive Leadership</div></div></a></div></div><div class="w-layout-hflex nav-dropdown_footer"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04b2" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04b2" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/solutions" class="nav-dropdown-footer-item w-inline-block"><div class="nav-dropdown-footer-item_title">Solutions Overview</div><div class="nav-dropdown-footer-item_desc">Flexible services and support for Payscale customers.</div></a><div class="nav-dropdown-footer_divider"></div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04ac" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04ac" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/marketplace" class="nav-dropdown-footer-item w-inline-block"><div class="nav-dropdown-footer-item_title">Partner Marketplace</div><div class="nav-dropdown-footer-item_desc">Extend your compensation journey with our trusted partners.</div></a><div class="nav-dropdown-footer_divider"></div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04b8" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04b8" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/products/pricing" class="nav-dropdown-footer-item w-inline-block"><div class="nav-dropdown-footer-item_title">Pricing &amp; Plans</div><div class="nav-dropdown-footer-item_desc">Find a plan that is right for you.</div></a></div></div></div></div><a href="/products/data" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04bd" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04bd" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav-link w-nav-link">Data</a><a href="/products/pricing" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04bf" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04bf" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav-link w-nav-link">Pricing</a><div class="nav-dropdown"><div class="nav-link"><div>Resources</div><div class="nav-dropdown-arrow w-embed">
501<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
502<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
503</svg></div></div><div class="nav-dropdown_list"><div class="nav-dropdown_list-container resources"><div class="w-layout-hflex nav-menu_resources"><div class="w-layout-vflex nav-menu_resources_column1"><div class="w-layout-vflex nav-menu_resources-learn"><div class="nav-label">Learn</div><div class="w-layout-hflex nav-menu_company_items"><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04cf:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04cf%22%7D%5D" href="/research-and-insights-type/research-reports" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6951bb09a17ff86e7d098636_research-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Research Reports</div><div class="nav-item_desc">Free research reports, ebooks, quick guides, whitepapers, and more.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04d2:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04d2%22%7D%5D" href="/events" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69651d78dae0376b0dbcca23_live-event-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Events &amp; Webinars</div><div class="nav-item_desc">Watch live and on-demand webinars on a variety of topics that matter to you.</div></div></a></div><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04d6:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04d6%22%7D%5D" href="/compensation-trends" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69651d56609d6580e4375b0d_blog-icon-2.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Blog</div><div class="nav-item_desc">Stories and insights on today’s compensation landscape.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04d9:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c
503752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec04d9%22%7D%5D" href="/why-payscale/customer-stories" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6951bb09d99fc9052495a7e2_stories-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Customer Stories</div><div class="nav-item_desc">Learn how our customers use Payscale data to get pay right.</div></div></a></div></div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04dc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04dc" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/research-and-insights" class="nav-see-more w-inline-block"><div>Visit the resource center →</div></a></div><div class="w-layout-vflex nav-menu_resources-topics"><div class="nav-label">Browse By Topic</div><div class="w-layout-hflex nav-menu-resources-topics-wrapper"><div class="nav-resources-item"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6966b36df794567d1baccf3f_Presentation-Chart.svg" alt=""/><div class="w-layout-vflex nav-resources-topics-list"><div class="nav-item-title">Strategy &amp; Planning</div><div class="w-layout-hflex nav-resources-topics-item"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04e9" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04e9" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/compensation-strategy">Comp Strategy →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04eb" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04eb" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/compensation-planning">Comp Planning →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04ed" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04ed" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/total-rewards">Total Rewards →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04ef" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04ef" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/job-management">Job Management →</a></div></div></div><div class="nav-resources-item"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69cc249ce3679eb1a2697b7d_Brain%20icon.svg" alt=""/><div class="w-layout-vflex nav-resources-topics-list"><div class="nav-item-title">Data &amp; Technology</div><div class="w-layout-hflex nav-resources-topics-item"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04f7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04f7" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/salary-data">Salary Data →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04f9" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04f9" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/benchmarking">Benchmarking →</a><a href="/topics/artificial-intelligence" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04fb" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04fb" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D">Artificial Intelligence →</a><a href="/topics/compensation-software" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec04fd" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec04fd" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D">Comp Software →</a></div></div></div><div class="nav-resources-item"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69cc0a7513caf22330a2a67c_Globe-01.svg" alt=""/><div class="w-layout-vflex nav-resources-topics-list"><div class="nav-item-title">Workforce &amp; Compliance</div><div class="w-layout-hflex nav-resources-topics-item"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0505" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0505" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/labor-market">Labor Market →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0507" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0507" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/pay-equity">Pay Equity →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0509" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0509" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/pay-transparency">Pay Transparency →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec050b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec050b" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/compliance-risk">Compliance &amp; Risk →</a></div></div></div></div></div></div><div class="w-layout-vflex nav-menu_resources_column2"><div class="nav-label">Featured Research</div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0510" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0510" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/featured-content/salary-budget-survey-sbs" class="nav-resources_featured-link w-inline-block"><div class="nav-resources_featured-image">
503<img sizes="(max-width: 991px) 100vw, 736px" srcset="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a70fc3903dd252aea9ecb06_collection-card-sbs-q2-2026-p-500.png 500w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a70fc3903dd252aea9ecb06_collection-card-sbs-q2-2026.png 736w" alt="Salary Budget Survey 2026-2027 by Payscale" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a70fc3903dd252aea9ecb06_collection-card-sbs-q2-2026.png" loading="lazy" class="image-contain is-widescreen"/></div><div class="w-layout-vflex nav-resources_featured-textwrap"><div class="nav-resources_featured-title">Payscale’s 11th Annual Salary Budget Survey</div><div class="nav-read-more">Read more</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec051a" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec051a" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/featured-content/flight-risk-report" class="nav-resources_featured-link w-inline-block"><div class="nav-resources_featured-image"><img sizes="(max-width: 991px) 100vw, 736px" srcset="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a29b1adfc130bc08a66827d_collection-card-flight-risk-report-p-500.png 500w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a29b1adfc130bc08a66827d_collection-card-flight-risk-report.png 736w" alt="Flight Risk Report" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a29b1adfc130bc08a66827d_collection-card-flight-risk-report.png" loading="lazy" class="image-contain is-widescreen"/></div><div class="w-layout-vflex nav-resources_featured-textwrap"><div class="nav-resources_featured-title">Flight Risk Report</div><div class="nav-read-more">Read more</div></div></a></div></div></div></div></div><div class="nav-dropdown"><div class="nav-link"><div>Company</div><div class="nav-dropdown-arrow w-embed"><svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
504<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
505</svg></div></div><div class="nav-dropdown_list"><div class="nav-dropdown_list-container company"><div class="w-layout-hflex nav-menu_company"><div class="w-layout-hflex nav-menu_company_items"><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec052e:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec052e%22%7D%5D" href="/why-payscale" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6a58f4ae02d41a02bacc_why-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Why Payscale</div><div class="nav-item_desc">Learn why we are the industry leader in compensation intelligence.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0531:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c
505752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0531%22%7D%5D" href="/press-releases" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6ac0abc8bdd913ea66b4_press-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Press Releases</div><div class="nav-item_desc">Explore the latest news and product announcements from Payscale.</div></div></a></div><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0535:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0535%22%7D%5D" href="/why-payscale/executive-leadership" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6acb893fba490f48ae66_leadership-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Payscale Leadership</div><div class="nav-item_desc">Meet the Industry pioneers redefining how the world thinks about pay.</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0538:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0538%22%7D%5D" href="/in-the-news" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6ad613513b178943529e_newsroom-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Newsroom</div><div class="nav-item_desc">Payscale in the spotlight—where trusted data meets industry influence.</div></div></a></div><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec053c:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec053c%22%7D%5D" href="/careers" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6aea350d675ae638cbd0_careers-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Careers</div><div class="nav-item_desc">Discover the power of Payscalers working together to get pay right.</div></div></a></div></div></div></div></div></div></div><div class="nav_menu-icon w-nav-button"><div class="newnav-icon-lottie"><div class="newnwav-menu-icon-line-top"></div><div class="newnwav-menu-icon-line-mid"><div class="newnwav-menu-icon-line-mid-inner"></div></div><div class="newnwav-menu-icon-line-bot"></div></div></div><div id="w-node-_95695c20-8c4f-c284-2209-2ed9ebec0545-ebec047a" class="nav_button-wrapper"><a data-nav-item="login" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0546" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0546" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/products/customer-login" class="nav_link_login w-inline-block"><div>Login</div></a><a data-wf--nav-cta-button--variant="base" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0549:a66a8b9d-c64d-2497-79e6-1722f003b8f7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="a66a8b9d-c64d-2497-79e6-1722f003b8f7" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22a66a8b9d-c64d-2497-79e6-1722f003b8f7%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0549%22%7D%5D" href="/demo-request/contact-sales" data-wf-event-ids="157077594-157067696" class="btn is-secondary-clear is-small w-inline-block"><div>Contact Sales</div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec054b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec054b" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/demo-request/get-a-demo" data-wf-event-ids="157077594-157067695" class="btn is-small experiment-control w-inline-block"><div data-w-id="95695c20-8c4f-c284-2209-2ed9ebec054c">Get a Demo</div></a></div></div><div class="w-layout-hflex nav-menu-wrap-mobile"><nav role="navigation" class="nav_menu mobile w-nav-menu"><div data-delay="0" data-hover="false" class="nav-dropdown-mobile w-dropdown"><div data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0554" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0554" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav-dropdown-toggle-mobile w-dropdown-toggle"><div>Solutions</div><div class="nav-dropdown-arrow w-embed">
505<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
506<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
507</svg></div></div><nav class="nav-dropdown_list-mobile w-dropdown-list"><div class="nav-dropdown_list-container"><div class="w-layout-hflex nav-dropdown_list-wrapper"><div class="w-layout-vflex nav-dropdown_list-items"><div class="text-size-medium text-weight-semibold">By Product</div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec055e:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec055e%22%7D%5D" href="/products/software/ascent" aria-current="page" class="nav-item w-inline-block w--current"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/694aa7c46d89792d3908b192_payfactors-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Ascent</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec055f:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec055f%22%7D%5D" href="/products/software/jobnav-recruiter" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a9eea33c33e0c438ee43c81_jobnav-recruiter-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">JobNav Recruiter</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0561:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0561%22%7D%5D" href="/products/software/paycycle" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/694e96c7888933f40ea906fb_paycycle-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Paycycle</div></div></a></div><div class="w-layout-vflex nav-dropdown_list-items"><div class="text-size-medium text-weight-semibold">By Use Case</div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:ff1dba9b-86eb-fdfa-af8e-3ef221d09245:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%22ff1dba9b-86eb-fdfa-af8e-3ef221d09245%22%7D%5D" href="/solutions/benchmarking" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a45e3d1aabf160e4d343368_benchmarking%20icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Benchmarking</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:ff1dba9b-86eb-fdfa-af8e-3ef221d09248:234caa01-8866-f222-c
507752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%22ff1dba9b-86eb-fdfa-af8e-3ef221d09248%22%7D%5D" href="/solutions/job-management" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a9eea580ac64f5fb06cb232_job-management-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Job Management</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:ff1dba9b-86eb-fdfa-af8e-3ef221d09246:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%22ff1dba9b-86eb-fdfa-af8e-3ef221d09246%22%7D%5D" href="/solutions/compensation-planning" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/694e96d5f58bff9322d3300d_marketpay-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Compensation Planning</div></div></a></div><div class="w-layout-vflex nav-dropdown_list-items"><div class="text-size-medium text-weight-semibold">By Role</div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0566:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0566%22%7D%5D" href="/solutions/hr-professionals" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a45e508871e5c2f09e1ba09_hr-pros-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">HR Professionals</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0568:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0568%22%7D%5D" href="/solutions/compensation-professionals" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a45e5072a6ec6a0ef5d6f44_comp-pros-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Compensation Pros</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec056a:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec056a%22%7D%5D" href="/solutions/talent-acquisition" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a9ffe7e84bc4957936401f8_personalcard-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Talent Acquisition</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec056c:234ca
507a01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec056c%22%7D%5D" href="/solutions/executive-leadership" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a3d9142d4e902b376197f0f_people-together-08.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Executive Leadership</div></div></a></div></div><div class="nav-dropdown_footer"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec056f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec056f" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/marketplace" class="nav-dropdown-footer-item w-inline-block"><div class="nav-dropdown-footer-item_title">Partner Marketplace</div><div class="nav-dropdown-footer-item_desc">Extend your compensation journey with our trusted partners.</div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0574" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0574" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/solutions" class="nav-dropdown-footer-item w-inline-block"><div class="nav-dropdown-footer-item_title">Solutions Overview</div><div class="nav-dropdown-footer-item_desc">One system. Faster compensation decisions.</div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0579" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0579" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/products/pricing" class="nav-dropdown-footer-item w-inline-block"><div class="nav-dropdown-footer-item_title">Pricing &amp; Plans</div><div class="nav-dropdown-footer-item_desc">Find a plan that is right for you.</div></a></div></div></nav></div><a href="/products/data" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec057e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec057e" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav-link w-nav-link">Data</a><a href="/products/pricing" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0580" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0580" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav-link w-nav-link">Pricing</a><div data-delay="0" data-hover="false" class="nav-dropdown-mobile w-dropdown"><div data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0583" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec0583" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav-dropdown-toggle-mobile w-dropdown-toggle"><div>Resources</div><div class="nav-dropdown-arrow w-embed">
507<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
508<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
509</svg></div></div><nav class="nav-dropdown_list-mobile w-dropdown-list"><div class="nav-dropdown_list-container resources"><div class="w-layout-hflex nav-menu_resources"><div class="w-layout-vflex nav-menu_resources-learn"><div class="w-layout-hflex nav-menu_company_items"><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec058f:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec058f%22%7D%5D" href="/research-and-insights-type/research-reports" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6951bb09a17ff86e7d098636_research-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Research Reports</div><div class="nav-item_desc">Free research reports, ebooks, quick guides, whitepapers, and more</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0592:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0592%22%7D%5D" href="/events" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69651d78dae0376b0dbcca23_live-event-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Webinars</div><div class="nav-item_desc">Watch live and on-demand webinars on a variety of topics that matter to you</div></div></a></div><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0596:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0596%22%7D%5D" href="/compensation-trends" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69651d56609d6580e4375b0d_blog-icon-2.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Blog</div><div class="nav-item_desc">Stories and insights on today’s compensation landscape</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec0599:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c
509752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec0599%22%7D%5D" href="/why-payscale/customer-stories" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6951bb09d99fc9052495a7e2_stories-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Customer Stories</div><div class="nav-item_desc">Learn how our customers use Payscale data to get pay right</div></div></a></div></div><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec059c" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec059c" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/research-and-insights" class="nav-see-more w-inline-block"><div>Visit the resource center →</div></a></div><div class="w-layout-vflex nav-menu_resources-topics"><div class="text-size-medium text-weight-semibold">Browse By Topic</div><div class="w-layout-hflex nav-menu-resources-topics-wrapper"><div class="nav-resources-item"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6966b36df794567d1baccf3f_Presentation-Chart.svg" alt=""/><div class="w-layout-vflex nav-resources-topics-list"><div class="nav-item-title">Strategy &amp; Planning</div><div class="w-layout-hflex nav-resources-topics-item"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05a9" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05a9" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/compensation-strategy">Comp Strategy →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05ab" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05ab" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/compensation-planning">Comp Planning →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05ad" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05ad" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/total-rewards">Total Rewards →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05af" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05af" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/job-management">Job Management →</a></div></div></div><div class="nav-resources-item"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69cc249ce3679eb1a2697b7d_Brain%20icon.svg" alt=""/><div class="w-layout-vflex nav-resources-topics-list"><div class="nav-item-title">Data &amp; Technology</div><div class="w-layout-hflex nav-resources-topics-item"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05b7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05b7" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/salary-data">Salary Data →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05b9" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05b9" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/benchmarking">Benchmarking →</a><a href="/topics/artificial-intelligence" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05bb" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05bb" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D">Artificial Intelligence →</a><a href="/topics/compensation-software" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05bd" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05bd" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D">Comp Software →</a></div></div></div><div class="nav-resources-item"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/69cc0a7513caf22330a2a67c_Globe-01.svg" alt=""/><div class="w-layout-vflex nav-resources-topics-list"><div class="nav-item-title">Workforce &amp; Compliance</div><div class="w-layout-hflex nav-resources-topics-item"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05c5" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05c5" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/labor-market">Labor Market →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05c7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05c7" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/pay-equity">Pay Equity →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05c9" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05c9" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/pay-transparency">Pay Transparency →</a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05cb" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05cb" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/topics/compliance-risk">Compliance &amp; Risk →</a></div></div></div></div></div></div></div></nav></div><div data-delay="0" data-hover="false" class="nav-dropdown-mobile w-dropdown"><div data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05ce" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05ce" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" class="nav-dropdown-toggle-mobile w-dropdown-toggle"><div>Company</div><div class="nav-dropdown-arrow w-embed">
509<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
510<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
511</svg></div></div><nav class="nav-dropdown_list-mobile w-dropdown-list"><div class="nav-dropdown_list-container company"><div class="w-layout-hflex nav-menu_company"><div class="w-layout-hflex nav-menu_company_items"><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05d7:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec05d7%22%7D%5D" href="/why-payscale" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6a58f4ae02d41a02bacc_why-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Why Payscale</div><div class="nav-item_desc">Learn why we are the industry leader in compensation intelligence</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05da:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec05da%22%7D%5D" href="/press-releases" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6ac0abc8bdd913ea66b4_press-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Press Releases</div><div class="nav-item_desc">Explore the latest news and product announcements from Payscale</div></div></a></div><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05de:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec05de%22%7D%5D" href="/why-payscale/executive-leadership" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6acb893fba490f48ae66_leadership-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Payscale Leadership</div><div class="nav-item_desc">Meet the Industry pioneers redefining how the world thinks about pay</div></div></a><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05e1:234caa01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec05e1%22%7D%5D" href="/in-the-news" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6ad613513b178943529e_newsroom-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Newsroom</div><div class="nav-item_desc">Payscale in the spotlight—where trusted data meets industry influence</div></div></a></div><div class="nav-item-row"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05e5:234ca
511a01-8866-f222-c752-3e1578eeafca" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="234caa01-8866-f222-c752-3e1578eeafca" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%2C%7B%22componentId%22%3A%22234caa01-8866-f222-c752-3e1578eeafca%22%2C%22instanceId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec05e5%22%7D%5D" href="/careers" class="nav-item w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/695e6aea350d675ae638cbd0_careers-icon.svg" alt=""/><div class="w-layout-vflex nav-item-textwrap"><div class="nav-item_text">Careers</div><div class="nav-item_desc">Discover the power of Payscalers working together to get pay right</div></div></a></div></div></div></div></nav></div><div class="w-layout-vflex nav-dropdown_cta"><div class="w-layout-hflex nav-button-group"><a data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05ea" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05ea" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/demo-request/contact-sales?tk_ctg=hdr-nav&amp;tk_cta=ctc-sls" data-wf-event-ids="157068052" class="nav-button-white w-inline-block"><div>Contact Sales</div></a><a data-w-id="95695c20-8c4f-c284-2209-2ed9ebec05ed" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05ed" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05ed" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/demo-request/get-a-demo?tk_ctg=hdr-nav&amp;tk_cta=dmo" data-wf-event-ids="157068051" class="nav-button-primary w-inline-block"><div>Get a Demo</div></a></div><a data-nav-item="login" data-wf-native-id-path="b364214d-a85d-bcea-c849-6a7d6dd40623:95695c20-8c4f-c284-2209-2ed9ebec05f3" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="95695c20-8c4f-c284-2209-2ed9ebec05f3" data-wf-component-context="%5B%7B%22componentId%22%3A%2295695c20-8c4f-c284-2209-2ed9ebec047a%22%2C%22instanceId%22%3A%22b364214d-a85d-bcea-c849-6a7d6dd40623%22%7D%5D" href="/products/customer-login" class="nav_link_login w-inline-block"><div>Login</div></a></div></nav><div data-close-menu="true" class="nav-menu-icon w-nav-button"><div data-w-id="95695c20-8c4f-c284-2209-2ed9ebec05f7" data-is-ix2-target="1" class="nav-lottie" data-animation-type="lottie" data-src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6984f64478510ec8a9894a2d_mobile-nav-3.json" data-loop="0" data-direction="1" data-autoplay="0" data-renderer="svg" data-default-duration="0" data-duration="2.0208333333333335" data-loading="eager"></div></div></div></div></div><main class="main-wrapper"><div id="button-popup" fs-modal-element="modal-1" role="dialog" aria-modal="true" aria-labelledby="button-popup-heading" class="btn-popup w-node-f4f2fad8-2e71-f1b7-cfe7-61249cf2861d-9cf2861d"><div aria-hidden="true" fs-modal-element="close-1" class="btn-popup-cover"></div><div class="btn-popup-content"><div class="w-layout-vflex btn-popup-info"><div id="button-popup-heading" class="btn-popup-title">See Payscale in action</div><p class="btn-popup-description">Discover how Payscale’s exceptional data quality, scalable compensation technology, and services can help you know the what and why behind pay.</p></div><div class="btn-popup-form"><div id="5900" class="marketo-component"><div class="marketo-styles w-embed"><style>
512.marketo-wrapper {
513  width: 100%;
514}
515  .mktoForm input, .mktoForm select {
516    border: 1px solid #a9b3bc;
517    border-radius: .5rem;
518    width: 100% !important;
519    height: 38px;
520    padding-left: 1rem !important;
521    color: #0A4444;
522    margin-bottom: 1rem;
523  }
524  .mktoForm {
525    width: 100% !important;
526    max-width: 480px !important;
527    font-family: var(--text-font) !important;
528    font-weight: 400 !important;
529    color: #0A4444 !important;
530  }
531
532  .mktoFormRow {
533    width: 100%;
534    margin: 0 !important;
535    display: flex;
536    gap: 1.5rem;
537  }
538
539  .mktoFieldDescriptor.mktoFormCol {
540    width: auto;
541    margin: 0 0 .3rem 0 !important;
542    flex-grow: 1;
543  }
544
545  .mktoFormCol {
546    width: 100%;
547  }
548
549  .mktoHtmlText.mktoHasWidth {
550    width: 94% !important;
551    margin-top: 20px;
552  }
553
554  .mktoFieldWrap {
555    width: 100%;
556  }
557
558  .mktoOffset {
559    display: none;
560  }
561
562  .mktoButton {
563    font-family: var(--text-font);
564    line-height: 1.5;
565    display: flex;
566    justify-content: flex-start;
567    align-items: center;
568    grid-column-gap: 1rem;
569    grid-row-gap: 1rem;
570    background-color: #1C8391 !important;
571    background-image: none !important;
572    border: 1px solid #0A4444 !important;
573    color: #ffffff !important;
574    text-align: center;
575    border-radius: 6px;
576    padding: .5rem 1.5rem !important;
577    font-size: .875rem !important;
578    font-weight: 600 !important;
579    text-decoration: none;
580    transition: background-color .3s;
581  }
582  .mktoButton:hover {
583    background-color: #816bc4 !important;
584  }
585  .mktoLabel {
586    width: auto !important;
587    font-weight: 400 !important;
588    line-height: 1.5 !important;
589    color: #0A4444;
590    margin-bottom: .25rem !important;
591    float: none !important;
592  }
593  .mktoAsterix, .mktoGutter {
594    display: none !important;
595  }
596  .mktoForm input[type="radio"], .mktoForm input[type="checkbox"] {
597    width: auto !important;
598    height: 1.25rem;
599  }
600  .mktoForm textarea {
601    width: 100% !important;
602    resize: auto !important;
603  }
604  .mktoRadioList > label, .mktoCheckboxList > label {
605    font-size: 1rem !important;
606    line-height: 1.25rem !important;
607   	max-width:400px;
608    
609    }
610  
611  
612.mktoHtmlText *,
613.mktoCaptchaDisclaimer {
614  color: #0A4444 !important;
615}
616
617  .marketo-wrapper[theme="white"] .mktoHtmlText,
618  .marketo-wrapper[theme="white"] .mktoHtmlText span,
619  .marketo-wrapper[theme="white"] a,
620  .marketo-wrapper[theme="white"] label,
621  .marketo-wrapper[theme="white"] .mktoTemplateBox,
622  .marketo-wrapper[theme="white"] .mktoNotYou,
623  .marketo-wrapper[theme="white"] .mktoCaptchaDisclaimer,
624  .mktoErrorMsg, 
625  .mktoErrorDetail  
626 	{ 
627    color: white !important;
628    }
629  
630  
631  .marketo-wrapper[id="5900"] .marketo-prompt {
632    display:block;
633  }
634  
635  
636@media only screen and (max-width: 767px) {
637    .mktoForm input[type=text], .mktoForm input[type=date], 
638    .mktoForm input[type=tel], .mktoForm input[type=email], 
639    .mktoForm input[type=number] {
640        font-size: 12px !important;
641    }
642
643
644}
645  
646  @media screen and (max-width: 600px) {
647    .mktoFormRow {
648    	flex-direction: column;
649      gap: .5rem;
650     
651    }
652    
653  }
654  .mktoFieldWrap textarea {
655  	padding: 12px 16px !important;
656  }
657  .mktoNotYou {
658  	color: #0A4444 !important;
659  }
660  .mktoForm a {
661    text-decoration: underline !important;
662   	padding: 0 !important;
663  }
664  @media only screen and (max-width: 480px) {
665  	.mktoForm{
666    padding: 0 !important;
667    }
668    
669    .mktoFormRow .mktoField {
670    	height: 2.5rem !important;
671      padding: .5rem !important;
672
673    }
674  }
675  .mktoErrorMsg, .mktoErrorArrow {
676     background-color: #23A4B5 !important;
677     border: none !important;
678     box-shadow: none !important;
679     background-image: none !important;
680     text-shadow: none !important;
681}
682</style></div><div id="6385" theme="" class="marketo-wrapper"><div class="marketo-prompt">The ID is set to default &#x27;5900&#x27;, don&#x27;t forget to update it if needed.</div></div></div></div><div aria-expanded="false" fs-modal-element="close-1" role="button" tabindex="0" aria-label="Close modal" aria-controls="button-popup" aria-roledescription="close-modal-trigger" class="btn-popup-close"><div class="btn-popup-close-icon w-embed"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 24 24">
683<path fill="CurrentColor" d="M14.5,12l9-9c0.7-0.7,0.7-1.8,0-2.5c-0.7-0.7-1.8-0.7-2.5,0l-9,9l-9-9c-0.7-0.7-1.8-0.7-2.5,0 c-0.7,0.7-0.7,1.8,0,2.5l9,9l-9,9c-0.7,0.7-0.7,1.8,0,2.5c0.7,0.7,1.8,0.7,2.5,0l9-9l9,9c0.7,0.7,1.8,0.7,2.5,0 c0.7-0.7,0.7-1.8,0-2.5L14.5,12z"/>
684</svg></div></div></div></div><section class="section is-hero bg-gradient"><div class="padding-global"><div class="container-global"><div class="hero-wrapper"><div id="w-node-bd064773-6bee-1327-c014-23d5b5a66ebe-dbce5a0a" class="w-layout-hflex hero-columns"><div class="hero-column-info"><div data-wf--eyebrow-pill--variant="primary" class="eyebrow-pill w-variant-230ceb93-1cca-7081-4f2b-17ab8288db90"><div>✦ PAYSCALE ASCENt</div></div><h1 class="heading-2"><span>Compensation decisions that </span><span class="ts-highlight">move</span><span> at the speed of business</span></h1><div class="hero-g2"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/67ae031f69d1af657e362676_hero-reviews.svg" alt=""/><div>600+ 5 Star Reviews</div></div><p class="text-size-large">One connected system for pricing, planning, and execution — powered by continuously refreshed HRIS-sourced data, AI guidance, and workflows that keep your teams aligned.<br/></p><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div></div><div class="hero-column-image is-align-center-vertical"><div class="w-embed w-script"><style>
685/* ════════════════════════════════════════════════════════════════
686   PAYSCALE SMART PRICE — Define · Benchmark · Align · Publish
687   Frameless, self-contained embed. Everything scoped under .spr so it
688   can't collide with the page. Layout is tuned once at a fixed native
689   size, then scaled uniformly to the column (see responsive wrapper).
690   ════════════════════════════════════════════════════════════════ */
691
692.spr, .spr *, .spr *::before, .spr *::after { box-sizing: border-box; margin: 0; padding: 0; }
693
694.spr {
695  /* ╔══════════════════════════════════════════════════════════════╗
696     ║  ⏱  MOTION CONTROL                                            ║
697     ║  --speed scales the WHOLE animation in proportion. The script ║
698     ║  at the bottom reads this one value.                          ║
699     ║      0  = no animation (static — shows Scene 1 fully formed)  ║
700     ║      1  = baseline (current speed)                            ║
701     ║      2  = 200% speed   ·   0.5 = half speed   ·   etc.        ║
702     ╚══════════════════════════════════════════════════════════════╝ */
703  --speed: 1;
704  --dur-scale: 1;   /* derived from --speed by the script — don't edit directly */
705
706  /* Dev play/pause button:   1 = show · 0 = hide */
707  --show-toggle: 0;
708  /* Readiness gauge (Scene 1 flourish):   1 = show · 0 = hide */
709  --show-gauge: 1;
710
711  /* ╔══════════════════════════════════════════════════════════════╗
712     ║  🎨  COLOR CONTROLS — change every color from right here      ║
713     ║  Edit a swatch and every element using it updates.            ║
714     ╚══════════════════════════════════════════════════════════════╝ */
715
716  /* — Brand swatches (Payscale palette) — */
717  --c-green:     #E2FF65;   /* Electric Green (brand) — key accent, used sparingly */
718  --c-teal:      #23A4B5;   /* Light Teal (brand) — supporting UI, chart ramps */
719  --c-techteal:  #0A4444;   /* Tech Teal (brand) — primary dark surface, headings */
720  --c-midnight:  #041E1E;   /* Midnight (brand) — darkest, default body text */
721  --c-purple:    #B399F8;   /* Electric Purple (brand) — secondary accent */
722  --c-aqua:      #B9DCD3;   /* Aqua Blue (brand) — soft fills, "done" state */
723  --c-offwhite:  #F4F2EA;   /* Off-white (brand) — text on dark surfaces */
724
725  /* — Custom shades / accents (NOT official brand swatches) — */
726  --c-green-dk:  #B8E228;   /* deeper lime — dark end of green gradients */
727  --c-teal-soft: #4FD4C4;   /* bright cyan-teal — ribbon-sweep midpoint */
728  --c-teal-dk:   #073333;   /* deeper teal — dark end of bar / pill gradients */
729  --c-aqua-dk:   #76C0B3;   /* deeper aqua — dark end of the aqua stat card */
730  --c-purple-dk: #8058E0;   /* deeper purple — dark end of purple gradients */
731  --c-muted:     #5C7575;   /* muted gray-teal — captions, sub-labels */
732  --c-line:      rgba(10,68,68,.12);   /* hairline rules / inactive tracks */
733
734  /* — Semantic alert (non-brand; used ONLY for the above-range warning) — */
735  --c-alert:     #E07B3A;   /* amber — risk/attention flag */
736  --c-alert-bg:  #FBEADC;   /* soft amber tint — alert pill background */
737
738  /* — Element gradients (built from the swatches above) — */
739  --grad-ribbon-active: linear-gradient(90deg, var(--c-green), var(--c-teal-soft), var(--c-green));   /* active ribbon pill sweep */
740  --grad-stripe-gt:     linear-gradient(90deg, var(--c-green),  var(--c-teal), var(--c-green));        /* green→teal card top-stripe */
741  --grad-stripe-pt:     linear-gradient(90deg, var(--c-purple), var(--c-teal), var(--c-purple));       /* purple→teal card top-stripe (AI match) */
742  --grad-dark:          linear-gradient(140deg, var(--c-techteal), var(--c-teal-dk) 60%, var(--c-midnight));  /* dark payoff surfaces */
743  --grad-score:         linear-gradient(135deg, var(--c-teal-dk), var(--c-teal));   /* match-score pill */
744  --grad-range:         linear-gradient(90deg, var(--c-purple), var(--c-teal), var(--c-teal-dk));  /* percentile bar */
745  --grad-card-lime:     linear-gradient(145deg, var(--c-green),  var(--c-green-dk)); /* Scene 4 stat card 1 */
746  --grad-card-aqua:     linear-gradient(145deg, var(--c-aqua),   var(--c-aqua-dk));  /* Scene 4 stat card 2 */
747  --grad-card-purple:   linear-gradient(145deg, var(--c-purple), var(--c-purple-dk));/* Scene 4 stat card 3 */
748
749  /* — Gauge ring (Scene 1) — feeds the SVG <linearGradient> in the markup — */
750  --gauge-from: var(--c-green);
751  --gauge-to:   var(--c-teal);
752
753  /* — Card chrome (subtle, derived from Tech Teal) — */
754  --card-bg:     #FFFFFF;
755  --card-border: rgba(10,68,68,.14);
756  --card-shadow: 0 2px 9px rgba(4,30,30,.07);
757
758  font-family: 'Inter', system-ui, sans-serif;
759  -webkit-font-smoothing: antialiased;
760  line-height: normal;
761  display: inline-block;
762}
763
764/* ── Responsive wrapper ──────────────────────────────────────────────
765   Drop the embed inside any flex column; it scales uniformly to fit that
766   column's width, so the pixel-tuned layout is preserved at EVERY breakpoint
767   (desktop 50/50, tablet/mobile stacked). Native size lives here as
768   --spr-w / --spr-h; the stage reads them, the wrapper reserves the matching
769   height via aspect-ratio, and the script sets --spr-scale from the column's
770   real width. Caps at native size so it never upscales (stays crisp).
771   To make it larger on wide screens, raise the max-width.                  */
772.spr-fit {
773  --spr-w: 560;          /* native width  (px, unitless) */
774  --spr-h: 430;          /* native height (px, unitless) — sized to the tallest scene (Align) */
775  position: relative;
776  width: 100%;
777  max-width: calc(var(--spr-w) * 1px);
778  aspect-ratio: var(--spr-w) / var(--spr-h);
779  margin: 0 auto;        /* center within a wider column */
780  align-self: flex-start;/* don't vertically stretch if it's itself a flex item */
781}
782.spr-fit .spr {
783  position: absolute; top: 0; left: 0;
784  transform-origin: top left;
785  transform: scale(var(--spr-scale, 1));
786}
787
788/* Frameless stage — transparent. Native size comes from --spr-w / --spr-h. */
789.spr .stage { position: relative; width: calc(var(--spr-w, 560) * 1px); height: calc(var(--spr-h, 500) * 1px); }
790
791/* ── keyframes (all prefixed spr-) ── */
792@keyframes spr-sweep   { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
793@keyframes spr-fadeUp  { from{opacity:0;transform:translateY(13px)} to{opacity:1;transform:translateY(0)} }
794@keyframes spr-fade    { from{opacity:0}
794 to{opacity:1} }
795@keyframes spr-pop     { from{opacity:0;transform:scale(.55)} to{opacity:1;transform:scale(1)} }
796@keyframes spr-countUp { from{opacity:0;transform:translateY(12px) scale(.82)} to{opacity:1;transform:translateY(0) scale(1)} }
797@keyframes spr-barGrow { from{transform:scaleX(0)} to{transform:scaleX(1)} }
798@keyframes spr-draw    { to{stroke-dashoffset:0} }
799@keyframes spr-gauge   { to{stroke-dashoffset:32.8} }   /* 182 circumference → 82% filled */
800@keyframes spr-pulse   { 0%,100%{transform:scale(1);opacity:1} 50%{transform:scale(1.14);opacity:.82} }
801@keyframes spr-sparkle { 0%,100%{transform:scale(.9);opacity:1} 50%{transform:scale(1.18);opacity:.7} }
802@keyframes spr-borderLit { 0%{border-color:var(--card-border)} 45%{border-color:var(--c-teal)} 100%{border-color:rgba(35,164,181,.45)} }
803
804/* ══ workflow ribbon (4 steps) ══ */
805.spr .ribbon { position: absolute; top: 16px; left: 16px; right: 16px; display: flex; align-items: center; gap: 4px; z-index: 20; }
806.spr .ribbon .step {
807  flex: 1; height: 31px; border-radius: 999px;
808  border: 1px solid rgba(10,68,68,.22);          /* inactive pill border */
809  background: rgba(10,68,68,.04);                 /* inactive pill fill */
810  display: flex; align-items: center; padding: 0 10px;
811  font-size: 11.5px; font-weight: 600; color: var(--c-muted);
812  position: relative; z-index: 0;                 /* stacking context for the gradient overlay */
813  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out, border-color calc(.6s * var(--dur-scale,1)) ease-in-out;
814  white-space: nowrap; overflow: hidden;
815}
816/* gradient overlay — crossfades in/out behind the label + number (color: --grad-ribbon-active) */
817.spr .ribbon .step::before {
818  content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit;
819  background: var(--grad-ribbon-active); background-size: 200% 100%;
820  opacity: 0; pointer-events: none;
821  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out;   /* fade-OUT — starts immediately */
822}
823.spr .ribbon .step .num {
824  width: 16px; height: 16px; border-radius: 50%;
825  background: rgba(10,68,68,.1); color: var(--c-muted);
826  font-size: 10px; font-weight: 700;
827  display: flex; align-items: center; justify-content: center;
828  margin-right: 7px; flex-shrink: 0;
829  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out, color calc(.6s * var(--dur-scale,1)) ease-in-out;
830}
831.spr .ribbon .connector { width: 5px; height: 1px; background: rgba(10,68,68,.18); flex-shrink: 0; }
832/* active step — gradient fades IN delayed ~85% of the fade-out, so outgoing/incoming pills overlap ~15% */
833.spr .ribbon .step.active {
834  border-color: transparent; color: var(--c-midnight);
835  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)),
836              border-color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
837}
838.spr .ribbon .step.active::before {
839  opacity: 1;
840  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));   /* fade-IN — delayed */
841  animation: spr-sweep calc(3.2s * var(--dur-scale,1)) ease-in-out infinite;
842}
843.spr .ribbon .step.active .num {
844  background: rgba(4,30,30,.22); color: var(--c-midnight);
845  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)), color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
846}
847/* done step */
848.spr .ribbon .step.done      { background: rgba(10,68,68,.04); border-color: rgba(10,68,68,.15); color: rgba(10,68,68,.4); }
849.spr .ribbon .step.done .num { background: rgba(10,68,68,.08); color: rgba(10,68,68,.45); }
850.spr .ribbon .step.done::after { content: "\2713"; font-size: 10px; font-weight: 700; color: rgba(10,68,68,.4); margin-left: auto; }
851
852/* ══ scenes ══ */
853.spr .scene {
854  position: absolute; top: 60px; left: 16px; right: 16px; bottom: 16px;
855  display: flex; flex-direction: column;
856  opacity: 0; pointer-events: none; transition: opacity calc(.5s * var(--dur-scale,1)) ease;
857}
858.spr .scene.active { opacity: 1; }
859
860/* shared scene heading — 4px left pad to sit just inside the card edges below */
861.spr .sc-label { font-family: 'Zodiak', Georgia, serif; font-size: 21px; font-weight: 600; letter-spacing: -.01em; color: var(--c-techteal); padding-left: 4px; }
862.spr .sc-sub   { font-size: 12.5px; color: var(--c-muted); line-height: 1.4; margin-top: 4px; margin-bottom: 14px; max-width: 94%; padding-left: 4px; }
863
864/* ═════════ SCENE 1 — DEFINE (two-column: job list + stat/gauge rail) ═════════ */
865.spr .s1-row { display: flex; gap: 13px; align-items: stretch; }
866.spr .s1-jobs { flex: 1.18; display: flex; flex-direction: column; gap: 8px; }
867.spr .s1-job {
868  display: flex; align-items: center; gap: 10px;
869  background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 10px;
870  box-shadow: 0 1px 5px rgba(4,30,30,.05); padding: 9px 12px; opacity: 0;
871}
872.spr .scene.active .s1-job:nth-child(1) { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.30s * var(--dur-scale,1)) both, spr-borderLit calc(.55s * var(--dur-scale,1)) ease calc(1.45s * var(--dur-scale,1)) forwards; }
873.spr .scene.active .s1-job:nth-child(2) { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.50s * var(--dur-scale,1)) both, spr-borderLit calc(.55s * var(--dur-scale,1)) ease calc(1.80s * var(--dur-scale,1)) forwards; }
874.spr .scene.active .s1-job:nth-child(3) { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.70s * var(--dur-scale,1)) both, spr-borderLit calc(.55s * var(--dur-scale,1)) ease calc(2.15s * var(--dur-scale,1)) forwards; }
875.spr .scene.active .s1-job:nth-child(4) { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.90s * var(--dur-scale,1)) both, spr-borderLit calc(.55s * var(--dur-scale,1)) ease calc(2.50s * var(--dur-scale,1)) forwards; }
876.spr .s1-checkbox {
877  width: 17px; height: 17px; border: 1.5px solid var(--c-techteal); border-radius: 4px;
878  background: var(--c-techteal); flex-shrink: 0; position: relative;
879}
880.spr .s1-checkbox svg { position: absolute; top: 1.5px; left: 1.5px; }
881.spr .s1-checkbox .cpath { stroke: #fff; stroke-width: 2; fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 18; stroke-dashoffset: 18; }
882.spr .scene.active .s1-job:nth-child(1) .cpath { animation: spr-draw calc(.35s * var(--dur-scale,1)) ease calc(.60s * var(--dur-scale,1)) forwards; }
883.spr .scene.active .s1-job:nth-child(2) .cpath { animation: spr-draw calc(.35s * var(--dur-scale,1)) ease calc(.80s * var(--dur-scale,1)) forwards; }
884.spr .scene.active .s1-job:nth-child(3) .cpath { animation: spr-draw calc(.35s * var(--dur-scale,1)) ease calc(1.00s * var(--dur-scale,1)) forwards; }
885.spr .scene.active .s1-job:nth-child(4) .cpath { animation: spr-draw calc(.35s * var(--dur-scale,1)) ease calc(1.20s * var(--dur-scale,1)) forwards; }
886.spr .s1-job-title { font-size: 12.5px; font-weight: 600; color: var(--c-midnight); }
887.spr .s1-job-meta  { font-size: 9.5px; color: var(--c-muted); margin-top: 2px; }
888.spr .s1-job-meta b { color: var(--c-techteal); font-weight: 600; }
889
890/* right rail */
891.spr .s1-rail { flex: 1; display: flex; flex-direction: column; gap: 9px; }
892.spr .s1-stat {
893  background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 10px;
894  box-shadow: var(--card-shadow); padding: 14px 16px; opacity: 0;
895  position: relative; overflow: hidden;
896}
897.spr .s1-stat::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--grad-stripe-gt); background-size: 250% 100%; animation: spr-sweep calc(5s * var(--dur-scale,1)) linear infinite; }
898.spr .scene.active .s1-stat { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.30s * var(--dur-scale,1)) both; }
899.spr .s1-stat .lbl { font-size: 8.5px; font-weight: 600; letter-spacing: .16em; color: var(--c-muted); text-transform: uppercase; }
900.spr .s1-stat .val { font-family: 'Zodiak', Georgia, serif; font-size: 33px; font-weight: 700; color: var(--c-techteal); line-height: 1; letter-spacing: -.02em; margin-top: 4px; }
901.spr .s1-stat .val.sm { font-size: 23px; }
902.spr .s1-stat .sub { font-size: 9.5px; color: var(--c-muted); margin-top: 4px; line-height: 1.3; }
903.spr .s1-stat .divider { height: 1px; background: var(--c-line); margin: 11px 0; }
904
905.spr .s1-gauge {
906  flex: 1; display: flex; align-items: center; gap: 12px;
907  background: var(--grad-dark); border-radius: 10px; padding: 12px 15px; opacity: 0;
908  box-shadow: 0 4px 16px rgba(4,30,30,.18);
909}
910.spr .scene.active .s1-gauge { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.2s * var(--dur-scale,1)) both; }
911.spr .s1-gauge svg { flex-shrink: 0; display: block; }
912.spr .s1-gauge .ring-bg { stroke: rgba(255,255,255,.15); }
913.spr .s1-gauge .ring { stroke: url(#spr-gauge-grad); stroke-dasharray: 182; stroke-dashoffset: 182; }
914.spr .scene.active .s1-gauge .ring { animation: spr-gauge calc(1.2s * var(--dur-scale,1)) ease calc(1.6s * var(--dur-scale,1)) forwards; }
915.spr .s1-gauge .gnum { font-family: 'Zodiak', Georgia, serif; fill: var(--c-offwhite); }
916.spr .s1-gauge .glbl { font-size: 8.5px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: rgba(255,255,255,.6); }
917.spr .s1-gauge .gsub { font-size: 11px; font-weight: 600; color: var(--c-offwhite); margin-top: 3px; line-height: 1.25; }
918
919/* ═════════ SCENE 2 — BENCHMARK ═════════ */
920.spr .s2-card { background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 10px; box-shadow: var(--card-shadow); position: relative; overflow: hidden; }
921.spr .s2-job { padding: 13px 16px; opacity: 0; }
922.spr .scene.active .s2-job { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.20s * var(--dur-scale,1)) both; }
923.spr .s2-cap { font-size: 8.5px; font-weight: 600; letter-spacing: .16em; color: var(--c-muted); text-transform: uppercase; }
924.spr .s2-job .title { font-size: 14px; font-weight: 600; color: var(--c-midnight); margin-top: 3px; }
925.spr .s2-tags { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; }
926.spr .s2-tag { font-size: 9.5px; font-weight: 600; padding: 3px 9px; border-radius: 999px; background: rgba(10,68,68,.06); color: var(--c-techteal); }
927.spr .s2-tag.alt { background: var(--c-aqua); }
928
929.spr .s2-arrow {
930  display: flex; align-items: center; gap: 10px; margin: 9px 0;
931  font-size: 10px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
932  color: var(--c-teal); opacity: 0;
933}
934.spr .s2-arrow::before, .spr .s2-arrow::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, transparent, var(--c-line), transparent); }
935.spr .scene.active .s2-arrow { animation: spr-fade calc(.4s * var(--dur-scale,1)) ease calc(.80s * var(--dur-scale,1)) both; }
936
937.spr .s2-result { display: flex; align-items: center; gap: 12px; padding: 13px 16px; opacity: 0; }
938.spr .s2-result::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--grad-stripe-pt); background-size: 250% 100%; animation: spr-sweep calc(4s * var(--dur-scale,1)) linear infinite; }
939.spr .scene.active .s2-result { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.00s * var(--dur-scale,1)) both; }
940.spr .s2-result .sparkle { color: var(--c-purple); font-size: 17px; flex-shrink: 0; }
941.spr .scene.active .s2-result .sparkle { animation: spr-sparkle calc(2s * var(--dur-scale,1)) ease-in-out infinite calc(1.4s * var(--dur-scale,1)); }
942.spr .s2-result .title { font-size: 13px; font-weight: 600; color: var(--c-midnight); }
943.spr .s2-result .src { font-size: 9.5px; color: var(--c-muted); margin-top: 2px; }
944.spr .s2-result .score { margin-left: auto; background: var(--grad-score); color: #fff; padding: 5px 13px; border-radius: 999px; font-size: 13px; font-weight: 700; opacity: 0; box-shadow: 0 2px 12px rgba(35,164,181,.4); flex-shrink: 0; }
945.spr .scene.active .s2-result .score { animation: spr-pop calc(.5s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.42s * var(--dur-scale,1)) both; }
946
947.spr .s2-range { padding: 14px 16px 15px; margin-top: 9px; opacity: 0; }
948.spr .scene.active .s2-range { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.85s * var(--dur-scale,1)) both; }
949.spr .s2-range .rlbl { font-size: 8.5px; font-weight: 600; letter-spacing: .14em; color: var(--c-muted); text-transform: uppercase; margin-bottom: 11px; }
950.spr .s2-range .pcts { display: flex; justify-content: space-between; font-size: 8.5px; font-weight: 600; color: var(--c-muted); margin-bottom: 6px; }
951.spr .s2-barwrap { position: relative; height: 12px; }
952.spr .s2-bar { height: 8px; border-radius: 4px; background: var(--grad-range); background-size: 200% 100%; transform: scaleX(0); transform-origin: left; }
953.spr .scene.active .s2-bar { animation: spr-barGrow calc(.9s * var(--dur-scale,1)) ease calc(2.25s * var(--dur-scale,1)) both, spr-sweep calc(4s * var(--dur-scale,1)) ease calc(2.25s * var(--dur-scale,1)) infinite; }
954.spr .s2-marker { position: absolute; left: 50%; top: -2.5px; width: 13px; height: 13px; margin-left: -6.5px; background: #fff; border: 2px solid var(--c-techteal); border-radius: 50%; opacity: 0; box-shadow: 0 1px 4px rgba(4,30,30,.25); }
955.spr .scene.active .s2-marker { animation: spr-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(3.0s * var(--dur-scale,1)) both; }
956.spr .s2-dollars { display: flex; justify-content: space-between; margin-top: 10px; font-size: 11px; font-weight: 700; color: var(--c-techteal); }
957.spr .s2-dollars span { opacity: 0; }
958.spr .s2-dollars span:nth-child(2) { color: var(--c-midnight); }
959.spr .scene.active .s2-dollars span:nth-child(1) { animation: spr-fade calc(.4s * var(--dur-scale,1)) ease calc(3.15s * var(--dur-scale,1)) both; }
960.spr .scene.active .s2-dollars span:nth-child(2) { animation: spr-fade calc(.4s * var(--dur-scale,1)) ease calc(3.30s * var(--dur-scale,1)) both; }
961.spr .scene.active .s2-dollars span:nth-child(3) { animation: spr-fade calc(.4s * var(--dur-scale,1)) ease calc(3.45s * var(--dur-scale,1)) both; }
962
963/* ═════════ SCENE 3 — ALIGN ═════════ */
964.spr .s3-warn { background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 10px; box-shadow: var(--card-shadow); padding: 15px 17px; opacity: 0; }
965.spr .scene.active .s3-warn { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.20s * var(--dur-scale,1)) both; }
966.spr .s3-whead { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
967.spr .s3-tri { width: 19px; height: 19px; flex-shrink: 0; background: var(--c-alert); clip-path: polygon(50% 4%, 4% 96%, 96% 96%); position: relative; }
968.spr .s3-tri::after { content: "!"; position: absolute; left: 50%; top: 56%; transform: translate(-50%,-50%); color: #fff; font-weight: 800; font-size: 9px; }
969.spr .scene.active .s3-tri { animation: spr-pulse calc(1.6s * var(--dur-scale,1)) ease-in-out infinite calc(1.2s * var(--dur-scale,1)); }
970.spr .s3-wtitle { font-size: 13.5px; font-weight: 600; color: var(--c-midnight); }
971.spr .s3-index { margin-left: auto; background: var(--c-alert-bg); border: 1px solid var(--c-alert); color: var(--c-alert); padding: 3px 10px; border-radius: 999px; font-size: 10px; font-weight: 700; opacity: 0; }
972.spr .scene.active .s3-index { animation: spr-pop calc(.5s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(.70s * var(--dur-scale,1)) both; }
973.spr .s3-wmeta { font-size: 9.5px; color: var(--c-muted); line-height: 1.35; margin-bottom: 9px; }
974.spr .s3-rows { margin-top: 2px; }
975.spr .s3-row { display: flex; align-items: center; justify-content: space-between; padding: 7px 0; border-bottom: 1px solid rgba(10,68,68,.07); font-size: 11.5px; opacity: 0; }
976.spr .s3-row:last-child { border-bottom: none; }
977.spr .scene.active .s3-rows .s3-row:nth-child(1) { animation: spr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(1.00s * var(--dur-scale,1)) both; }
978.spr .scene.active .s3-rows .s3-row:nth-child(2) { animation: spr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(1.18s * var(--dur-scale,1)) both; }
979.spr .scene.active .s3-rows .s3-row:nth-child(3) { animation: spr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(1.36s * var(--dur-scale,1)) both; }
980.spr .scene.active .s3-rows .s3-row:nth-child(4) { animation: spr-fadeUp calc(.4s *
980 var(--dur-scale,1)) ease calc(1.54s * var(--dur-scale,1)) both; }
981.spr .s3-name { color: var(--c-midnight); font-weight: 500; flex: 1; }
982.spr .s3-sal  { font-weight: 700; color: var(--c-midnight); margin-right: 12px; }
983.spr .s3-flag { color: var(--c-alert); font-weight: 700; font-size: 8.5px; letter-spacing: .04em; background: var(--c-alert-bg); padding: 3px 8px; border-radius: 999px; flex-shrink: 0; }
984
985.spr .s3-insight { background: var(--grad-dark); border-radius: 10px; padding: 14px 17px; margin-top: 12px; opacity: 0; box-shadow: 0 4px 16px rgba(4,30,30,.18); position: relative; overflow: hidden; }
986.spr .s3-insight::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--grad-stripe-gt); background-size: 250% 100%; animation: spr-sweep calc(5.5s * var(--dur-scale,1)) linear infinite; }
987.spr .scene.active .s3-insight { animation: spr-fadeUp calc(.55s * var(--dur-scale,1)) ease calc(2.1s * var(--dur-scale,1)) both; }
988.spr .s3-insight .lbl { font-size: 8.5px; font-weight: 600; letter-spacing: .18em; text-transform: uppercase; color: var(--c-aqua); margin-bottom: 5px; }
989.spr .s3-insight .body { font-size: 12.5px; font-weight: 500; line-height: 1.45; color: var(--c-offwhite); }
990.spr .s3-insight .body b { color: var(--c-green); font-weight: 700; }
991
992/* ═════════ SCENE 4 — PUBLISH ═════════ */
993.spr .s4-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-bottom: 11px; }
994.spr .s4-stat { border-radius: 11px; padding: 14px 15px; opacity: 0; position: relative; overflow: hidden; }
995.spr .s4-stat::after { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 42%; background: linear-gradient(to bottom, rgba(255,255,255,.22), transparent); pointer-events: none; }
996.spr .s4-stat.c1 { background: var(--grad-card-lime); }
997.spr .s4-stat.c2 { background: var(--grad-card-aqua); }
998.spr .s4-stat.c3 { background: var(--grad-card-purple); }
999.spr .scene.active .s4-stat.c1 { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.20s * var(--dur-scale,1)) both; }
1000.spr .scene.active .s4-stat.c2 { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.38s * var(--dur-scale,1)) both; }
1001.spr .scene.active .s4-stat.c3 { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.56s * var(--dur-scale,1)) both; }
1002.spr .s4-stat .lbl { font-size: 8.5px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; margin-bottom: 9px; }
1003.spr .s4-stat .val { font-family: 'Zodiak', Georgia, serif; font-size: 27px; font-weight: 700; line-height: 1; letter-spacing: -.02em; opacity: 0; }
1004.spr .scene.active .s4-stat.c1 .val { animation: spr-countUp calc(.6s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(.80s * var(--dur-scale,1)) both; }
1005.spr .scene.active .s4-stat.c2 .val { animation: spr-countUp calc(.6s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(.98s * var(--dur-scale,1)) both; }
1006.spr .scene.active .s4-stat.c3 .val { animation: spr-countUp calc(.6s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.16s * var(--dur-scale,1)) both; }
1007.spr .s4-stat .sub { font-size: 8.5px; margin-top: 6px; line-height: 1.35; opacity: .72; }
1008/* text contrast: lime + aqua → midnight ; purple → offwhite */
1009.spr .s4-stat.c1 .lbl, .spr .s4-stat.c1 .val, .spr .s4-stat.c1 .sub,
1010.spr .s4-stat.c2 .lbl, .spr .s4-stat.c2 .val, .spr .s4-stat.c2 .sub { color: var(--c-midnight); }
1011.spr .s4-stat.c3 .lbl, .spr .s4-stat.c3 .val, .spr .s4-stat.c3 .sub { color: var(--c-offwhite); }
1012
1013.spr .s4-hero { flex: 1; border-radius: 11px; padding: 18px 19px; opacity: 0; background: var(--grad-dark); position: relative; overflow: hidden; box-shadow: 0 6px 18px rgba(4,30,30,.2); display: flex; flex-direction: column; justify-content: center; }
1014.spr .s4-hero::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--grad-stripe-gt); background-size: 250% 100%; animation: spr-sweep calc(5s * var(--dur-scale,1)) linear infinite; }
1015.spr .scene.active .s4-hero { animation: spr-fadeUp calc(.6s * var(--dur-scale,1)) ease calc(1.5s * var(--dur-scale,1)) both; }
1016.spr .s4-hcap { font-size: 8.5px; font-weight: 600; letter-spacing: .18em; text-transform: uppercase; color: var(--c-aqua); margin-bottom: 6px; }
1017.spr .s4-htitle { font-family: 'Zodiak', Georgia, serif; font-size: 18px; font-weight: 600; letter-spacing: -.01em; color: var(--c-offwhite); margin-bottom: 16px; opacity: 0; }
1018.spr .scene.active .s4-htitle { animation: spr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.7s * var(--dur-scale,1)) both; }
1019.spr .s4-pillars { display: flex; gap: 16px; }
1020.spr .s4-pillar { display: flex; align-items: flex-start; gap: 9px; flex: 1; opacity: 0; }
1021.spr .scene.active .s4-pillar:nth-child(1) { animation: spr-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(1.9s * var(--dur-scale,1)) both; }
1022.spr .scene.active .s4-pillar:nth-child(2) { animation: spr-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(2.05s * var(--dur-scale,1)) both; }
1023.spr .scene.active .s4-pillar:nth-child(3) { animation: spr-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(2.2s * var(--dur-scale,1)) both; }
1024.spr .s4-pillar .dot { width: 7px; height: 7px; border-radius: 50%; margin-top: 4px; flex-shrink: 0; }
1025.spr .s4-pillar .dot.lime   { background: var(--c-green);  box-shadow: 0 0 8px rgba(226,255,101,.75); }
1026.spr .s4-pillar .dot.teal   { background: var(--c-teal);   box-shadow: 0 0 8px rgba(35,164,181,.75); }
1027.spr .s4-pillar .dot.purple { background: var(--c-purple); box-shadow: 0 0 8px rgba(179,153,248,.75); }
1028.spr .s4-pillar .ttl { font-size: 11.5px; font-weight: 600; color: var(--c-offwhite); line-height: 1.2; }
1029.spr .s4-pillar .psub { font-size: 9.5px; color: var(--c-aqua); margin-top: 2px; line-height: 1.3; }
1030
1031/* ─────────── play / pause toggle (dev convenience — delete this block + the
1032   <button> + the JS listener to remove it entirely for production) ─────────── */
1033.spr .spr-toggle {
1034  position: absolute; bottom: 8px; right: 8px; z-index: 40;
1035  width: 24px; height: 24px; border-radius: 50%; padding: 0;
1036  border: 1px solid rgba(10,68,68,.2); background: rgba(255,255,255,.7);
1037  display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: .5;
1038  transition: opacity .2s ease, background .2s ease;
1039}
1040.spr .spr-toggle:hover { opacity: 1; background: #fff; }
1041.spr .spr-toggle svg { width: 11px; height: 11px; display: block; fill: var(--c-techteal); }
1042.spr .spr-toggle .ic-play { display: none; }
1043.spr .spr-toggle.paused .ic-pause { display: none; }
1044.spr .spr-toggle.paused .ic-play  { display: block; }
1045/* when paused, freeze every animation in the embed so you get a still frame */
1046.spr .stage.is-paused *, .spr .stage.is-paused *::before, .spr .stage.is-paused *::after { animation-play-state: paused !important; }
1047</style>
1048
1049<!-- ╔══════════════╗
1050     ║    MARKUP    ║
1051     ╚══════════════╝ -->
1052<div class="spr-fit">
1053<div class="spr">
1054<div class="stage" id="spr-stage">
1055
1056  <!-- Phase ribbon (4 steps) -->
1057  <div class="ribbon">
1058    <div class="step" data-step="0"><span class="num">1</span>Define</div>
1059    <div class="connector"></div>
1060    <div class="step" data-step="1"><span class="num">2</span>Benchmark</div>
1061    <div class="connector"></div>
1062    <div class="step" data-step="2"><span class="num">3</span>Align</div>
1063    <div class="connector"></div>
1064    <div class="step" data-step="3"><span class="num">4</span>Publish</div>
1065  </div>
1066
1067  <!-- ══ SCENE 1: DEFINE ══ -->
1068  <div class="scene" id="spr-scene-0">
1069    <div class="sc-label">Choose the jobs to price</div>
1070    <div class="sc-sub">Select roles and Smart Price preps them for benchmarking &mdash; no setup required.</div>
1071
1072    <div class="s1-row">
1073      <div class="s1-jobs">
1074        <div class="s1-job">
1075          <div class="s1-checkbox"><svg width="14" height="14" viewBox="0 0 14 14"><polyline class="cpath" points="2,7 6,11 12,3"/></svg></div>
1076          <div><div class="s1-job-title">Account Manager</div><div class="s1-job-meta"><b>10600-CNS</b> &middot; Sales &middot; USA &mdash; National</div></div>
1077        </div>
1078        <div class="s1-job">
1079          <div class="s1-checkbox"><svg width="14" height="14" viewBox="0 0 14 14"><polyline class="cpath" points="2,7 6,11 12,3"/></svg></div>
1080          <div><div class="s1-job-title">Accountant I</div><div class="s1-job-meta"><b>10007-CNS</b> &middot; Accounting &middot; USA &mdash; National</div></div>
1081        </div>
1082        <div class="s1-job">
1083          <div class="s1-checkbox"><svg width="14" height="14" viewBox="0 0 14 14"><polyline class="cpath" points="2,7 6,11 12,3"/></svg></div>
1084          <div><div class="s1-job-title">Sales Analyst I</div><div class="s1-job-meta"><b>JC10546</b> &middot; Sales &middot; USA &mdash; National</div></div>
1085        </div>
1086        <div class="s1-job">
1087          <div class="s1-checkbox"><svg width="14" height="14" viewBox="0 0 14 14"><polyline class="cpath" points="2,7 6,11 12,3"/></svg></div>
1088          <div><div class="s1-job-title">Director, Finance</div><div class="s1-job-meta"><b>10031-CNS</b> &middot; Finance &middot; USA &mdash; National</div></div>
1089        </div>
1090      </div>
1091
1092      <div class="s1-rail">
1093        <div class="s1-stat">
1094          <div class="lbl">JOBS SELECTED</div>
1095          <div class="val">26</div>
1096          <div class="sub">of 328 jobs &middot; 114 employees</div>
1097          <div class="divider"></div>
1098          <div class="lbl">ANNUAL SPEND</div>
1099          <div class="val sm">$8.7M</div>
1100          <div class="sub">Avg. salary $76K</div>
1101        </div>
1102
1103        <div class="s1-gauge">
1104          <svg width="52" height="52" viewBox="0 0 68 68">
1105            <defs>
1106              <linearGradient id="spr-gauge-grad" x1="0%" y1="0%" x2="100%" y2="100%">
1107                <stop offset="0%"   stop-color="var(--gauge-from)"/>
1108                <stop offset="100%" stop-color="var(--gauge-to)"/>
1109              </linearGradient>
1110            </defs>
1111            <circle class="ring-bg" cx="34" cy="34" r="29" fill="none" stroke-width="6"/>
1112            <circle class="ring"    cx="34" cy="34" r="29" fill="none" stroke-width="6" stroke-linecap="round" transform="rotate(-90 34 34)"/>
1113            <text class="gnum" x="34" y="41" text-anchor="middle" font-size="20" font-weight="700">82</text>
1114          </svg>
1115          <div>
1116            <div class="glbl">Readiness score</div>
1117            <div class="gsub">Ready to benchmark</div>
1118          </div>
1119        </div>
1120      </div>
1121    </div>
1122  </div>
1123
1124  <!-- ══ SCENE 2: BENCHMARK ══ -->
1125  <div class="scene" id="spr-scene-1">
1126    <div class="sc-label">AI matches every job to market</div>
1127    <div class="sc-sub">One click maps your title to verified market data &mdash; with a confidence score.</div>
1128
1129    <div class="s2-card s2-job">
1130      <div class="s2-cap">MY COMPANY JOB</div>
1131      <div class="title">Account Manager</div>
1132      <div class="s2-tags">
1133        <span class="s2-tag">10600-CNS</span>
1134        <span class="s2-tag alt">Sales</span>
1135        <span class="s2-tag alt">USA &mdash; National</span>
1136      </div>
1137    </div>
1138
1139    <div class="s2-arrow">&darr;&nbsp;&nbsp;AI Match</div>
1140
1141    <div class="s2-card s2-result">
1142      <span class="sparkle">&#10022;</span>
1143      <div>
1144        <div class="title">Account Executive II</div>
1145        <div class="src">Payscale Verse &middot; USA &mdash; National</div>
1146      </div>
1147      <span class="score">91</span>
1148    </div>
1149
1150    <div class="s2-card s2-range">
1151      <div class="rlbl">MARKET DATA &middot; 25TH&ndash;75TH PERCENTILE</div>
1152      <div class="pcts"><span>10TH</span><span>25TH</span><span>50TH</span><span>75TH</span><span>90TH</span></div>
1153      <div class="s2-barwrap">
1154        <div class="s2-bar"></div>
1155        <div class="s2-marker"></div>
1156      </div>
1157      <div class="s2-dollars"><span>$72,459</span><span>$92,742</span><span>$119,474</span></div>
1158    </div>
1159  </div>
1160
1161  <!-- ══ SCENE 3: ALIGN ══ -->
1162  <div class="scene" id="spr-scene-2">
1163    <div class="sc-label">Catch risk before you publish</div>
1164    <div class="sc-sub">Smart Price surfaces above-range pay and compression so you can act early.</div>
1165
1166    <div class="s3-warn">
1167      <div class="s3-whead">
1168        <div class="s3-tri"></div>
1169        <div class="s3-wtitle">Above-range employees</div>
1170        <div class="s3-index">141% INDEX</div>
1171      </div>
1172      <div class="s3-wmeta">Buyer &middot; 60028-CNS &middot; USA &mdash; Seattle &middot; 4 employees above the 90th percentile</div>
1173      <div class="s3-rows">
1174        <div class="s3-row"><span class="s3-name">Keanu Sanford</span><span class="s3-sal">$116,350</span><span class="s3-flag">ABOVE RANGE</span></div>
1175        <div class="s3-row"><span class="s3-name">Jayson Winfred</span><span class="s3-sal">$120,500</span><span class="s3-flag">ABOVE RANGE</span></div>
1176        <div class="s3-row"><span class="s3-name">Jovani McCall</span><span class="s3-sal">$134,350</span><span class="s3-flag">ABOVE RANGE</span></div>
1177        <div class="s3-row"><span class="s3-name">Alphonso Jordan</span><span class="s3-sal">$138,500</span><span class="s3-flag">ABOVE RANGE</span></div>
1178      </div>
1179    </div>
1180
1181    <div class="s3-insight">
1182      <div class="lbl">Equity signal</div>
1183      <div class="body">4 employees flagged. Smart Price surfaces compression risk <b>before publish</b> &mdash; adjust ranges or model exceptions first.</div>
1184    </div>
1185  </div>
1186
1187  <!-- ══ SCENE 4: PUBLISH ══ -->
1188  <div class="scene" id="spr-scene-3">
1189    <div class="sc-label">Publish with confidence</div>
1190    <div class="sc-sub">A defensible, costed plan &mdash; ready to roll out across the org.</div>
1191
1192    <div class="s4-grid">
1193      <div class="s4-stat c1">
1194        <div class="lbl">JOBS PRICED</div>
1195        <div class="val">26</div>
1196        <div class="sub">of 328 &middot; 114 employees</div>
1197      </div>
1198      <div class="s4-stat c2">
1199        <div class="lbl">ANNUAL SPEND</div>
1200        <div class="val">$8.7M</div>
1201        <div class="sub">+$736.9K to reach target</div>
1202      </div>
1203      <div class="s4-stat c3">
1204        <div class="lbl">MIDPOINT MOVE</div>
1205        <div class="val">+45.3%</div>
1206        <div class="sub">from prior benchmark</div>
1207      </div>
1208    </div>
1209
1210    <div class="s4-hero">
1211      <div class="s4-hcap">THE PAYOFF</div>
1212      <div class="s4-htitle">Confident pricing, end to end.</div>
1213      <div class="s4-pillars">
1214        <div class="s4-pillar">
1215          <div class="dot lime"></div>
1216          <div><div class="ttl">Price like a pro</div><div class="psub">AI guidance at any skill level</div></div>
1217        </div>
1218        <div class="s4-pillar">
1219          <div class="dot teal"></div>
1220          <div><div class="ttl">Confidence you can trust</div><div class="psub">Proven AI, transparent logic</div></div>
1221        </div>
1222        <div class="s4-pillar">
1223          <div class="dot purple"></div>
1224          <div><div class="ttl">More time for strategy</div><div class="psub">Less pricing, more impact</div></div>
1225        </div>
1226      </div>
1227    </div>
1228  </div>
1229
1230  <!-- play / pause toggle (dev convenience) -->
1231  <button class="spr-toggle" id="spr-toggle" type="button" aria-label="Pause animation">
1232    <svg class="ic-pause" viewBox="0 0 12 12"><rect x="2" y="1.5" width="2.6" height="9" rx="0.6"/><rect x="7.4" y="1.5" width="2.6" height="9" rx="0.6"/></svg>
1233    <svg class="ic-play"  viewBox="0 0 12 12"><path d="M3.8 2.4 L10.8 6 L3.8 9.6 Z"/></svg>
1234  </button>
1235
1236</div><!-- /.stage -->
1237</div><!-- /.spr -->
1238</div><!-- /.spr-fit -->
1239
1240<script>
1241(function () {
1242  /* Scoped to this embed's root — safe if multiple embeds live on the page */
1243  var root   = document.getElementById('spr-stage');
1244  var scenes = root.querySelectorAll('.scene');
1245  var steps  = root.querySelectorAll('.ribbon .step');
1246  var btn    = document.getElementById('spr-toggle');
1247
1248  /* ── responsive scaling ──
1249     Scale the whole embed to its column's width (measured directly — robust in
1250     any layout). The wrapper's aspect-ratio reserves the matching height. */
1251  var fit = root.closest('.spr-fit');
1252  if (fit) {
1253    var nativeW = parseFloat(getComputedStyle(fit).getPropertyValue('--spr-w')) || 560;
1254    var rescale = function () {
1255      fit.style.setProperty('--spr-scale', (fit.clientWidth / nativeW).toFixed(4));
1256    };
1257    rescale();
1258    if (window.ResizeObserver) new ResizeObserver(rescale).observe(fit);
1259    else window.addEventListener('resize', rescale);
1260  }
1261
1262  /* ── read the --speed flag set at the top of the CSS ──
1263     >0 scales both the scene timing AND every CSS animation/transition
1264     (via --dur-scale).  0 = static: reveal Scene 1 fully formed, no loop. */
1265  var speed = parseFloat(getComputedStyle(root).getPropertyValue('--speed'));
1266  if (isNaN(speed)) speed = 1;
1267  var animate = speed > 0;
1268  root.style.setProperty('--dur-scale', animate ? (1 / speed) : 0);
1269
1270  /* show / hide the dev play-pause button (reads --show-toggle from the CSS) */
1271  if (parseFloat(getComputedStyle(root).getPropertyValue('--show-toggle')) === 0) {
1272    btn.style.display = 'none';
1273  }
1274
1275  /* show / hide the readiness gauge (reads --show-gauge from the CSS) */
1276  if (parseFloat(getComputedStyle(root).getPropertyValue('--show-gauge')) === 0) {
1277    root.querySelectorAll('.s1-gauge').forEach(function (g) { g.style.display = 'none'; });
1278  }
1279
1280  var times = [5500, 6500, 6000, 6000].map(function (t) {   /* base scene durations (ms) */
1281    return animate ? t / speed : 0;
1282  });
1283
1284  var cur = 0, timer = null, paused = false;
1285
1286  function show(i) {
1287    clearTimeout(timer);
1288    scenes.forEach(function (s, j) { s.classList.toggle('active', j === i); });
1289    steps.forEach(function (s, j) {
1290      s.classList.remove('active', 'done');
1291      if      (j < i)   s.classList.add('done');
1292      else if (j === i) s.classList.add('active');
1293    });
1294    cur = i;
1295    if (animate && !paused) timer = setTimeout(next, times[i]);
1296  }
1297  function next() { show((cur + 1) % scenes.length); }
1298
1299  /* play / pause toggle (dev convenience — remove btn + this listener for production) */
1300  btn.addEventListener('click', function () {
1301    paused = !paused;
1302    btn.classList.toggle('paused', paused);
1303    btn.setAttribute('aria-label', paused ? 'Play animation' : 'Pause animation');
1304    root.classList.toggle('is-paused', paused);          /* freezes all CSS motion */
1305    if (paused)        clearTimeout(timer);
1306    else if (animate)  timer = setTimeout(next, times[cur]);   /* resume current scene */
1307  });
1308
1309  /* Starts when scrolled into view, then fires once.
1310     To play immediately on page load instead, delete the observer
1311     block below and replace it with a single line:  show(0); */
1312  var observer = new IntersectionObserver(function (entries) {
1313    entries.forEach(function (entry) {
1314      if (entry.isIntersecting) { show(0); observer.disconnect(); }
1315    });
1316  }, { threshold: 0.25 });
1317
1318  observer.observe(root);
1319}());
1320</script>
1320
1321</div></div></div></div></div></div></section><div class="anchor-scroll"><div class="hide w-embed w-script"><style>
1322  .section {
1323    scroll-margin-top: calc(var(--navbar-height) + var(--anchorMenu-height));
1324  }
1325</style>
1326
1327<script>
1328var Webflow = Webflow || [];
1329
1330function updateNavbarHeight() {
1331  const navbar = document.querySelector('.nav_component');
1332  const height = navbar?.offsetHeight || 80;
1333  document.documentElement.style.setProperty('--navbar-height', height + 'px');
1334}
1335
1336function updateAnchorHeight() {
1337  const menu = document.querySelector('.anchor-scroll');
1338  const height = menu?.offsetHeight || 80;
1339  document.documentElement.style.setProperty('--anchorMenu-height', height + 'px');
1340}
1341
1342function updateHeights() {
1343  updateNavbarHeight();
1344  updateAnchorHeight();
1345}
1346
1347function initSticky() {
1348  const hero = document.querySelector('section');
1349  const menu = document.querySelector('.anchor-scroll');
1350  if (!hero || !menu) return;
1351  const observer = new IntersectionObserver((entries) => {
1352    entries.forEach(entry => {
1353      menu.classList.toggle('is-sticky', !entry.isIntersecting);
1354    });
1355  }, { threshold: 0 });
1356  observer.observe(hero);
1357}
1358
1359// Capture-phase handler runs BEFORE Webflow's document-level scroll
1360// handler, regardless of when Webflow binds it. This makes anchor
1361// scrolling work on first load, refresh, and back/forward alike.
1362document.addEventListener('click', function (e) {
1363  const link = e.target.closest('a[href]');
1364  if (!link) return;
1365
1366   // Skip Webflow components that use #hrefs but manage their own clicks
1367  if (
1368    link.hasAttribute('data-w-tab') ||
1369    link.getAttribute('role') === 'tab' ||
1370    link.closest('.w-tab-menu, .w-dropdown-toggle')
1371  ) return;
1372  
1373  const href = link.getAttribute('href');
1374  if (!href || href.charAt(0) !== '#' || href === '#') return;
1375  const target = document.querySelector(href);
1376  if (!target) return;
1377
1378  e.preventDefault();
1379  e.stopImmediatePropagation();   // block Webflow's smooth scroll
1380  updateHeights();                // keep the offset vars current
1381  target.scrollIntoView({ behavior: 'auto', block: 'start' }); // respects scroll-margin-top
1382  history.pushState(null, '', href);
1383}, true);
1384
1385Webflow.push(function () {
1386  updateHeights();
1387  initSticky();
1388});
1389
1390// Recompute offsets after a back/forward (bfcache) restore
1391window.addEventListener('pageshow', function (event) {
1392  if (event.persisted) {
1393    setTimeout(updateHeights, 0);
1394  }
1395});
1396
1397window.addEventListener('resize', updateHeights);
1398</script>
1398</div><div class="anchor-scroll_wrapper"><a data-wf-native-id-path="a3742239-0d5f-38e7-c7cc-23dc2b39854d:a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-component-context="%5B%7B%22componentId%22%3A%22a623f63e-9ee7-8be5-efe9-d5d7a80c6c37%22%2C%22instanceId%22%3A%22a3742239-0d5f-38e7-c7cc-23dc2b39854d%22%7D%5D" href="#overview" class="anchor-scroll-button w-inline-block"><div>Overview</div></a><a data-wf-native-id-path="21423d3f-5793-c844-31f0-1ab9392d17f2:a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-component-context="%5B%7B%22componentId%22%3A%22a623f63e-9ee7-8be5-efe9-d5d7a80c6c37%22%2C%22instanceId%22%3A%2221423d3f-5793-c844-31f0-1ab9392d17f2%22%7D%5D" href="#key-features" class="anchor-scroll-button w-inline-block"><div>Key features</div></a><a data-wf-native-id-path="626c722b-3cce-88da-5310-3c3a49fff4f8:a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-component-context="%5B%7B%22componentId%22%3A%22a623f63e-9ee7-8be5-efe9-d5d7a80c6c37%22%2C%22instanceId%22%3A%22626c722b-3cce-88da-5310-3c3a49fff4f8%22%7D%5D" href="#who-ascent-helps" class="anchor-scroll-button w-inline-block"><div>Who Ascent helps</div></a><a data-wf-native-id-path="6bfbcf67-7b73-ba7c-3417-e1ea015a6f60:a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="a623f63e-9ee7-8be5-efe9-d5d7a80c6c37" data-wf-component-context="%5B%7B%22componentId%22%3A%22a623f63e-9ee7-8be5-efe9-d5d7a80c6c37%22%2C%22instanceId%22%3A%226bfbcf67-7b73-ba7c-3417-e1ea015a6f60%22%7D%5D" href="#why-payscale" class="anchor-scroll-button w-inline-block"><div>Why Payscale</div></a></div></div><section id="overview" class="section bg-offwhite"><div class="padding-global"><div class="container-global"><div class="content-component"><div id="w-node-_254bf8fd-7337-bb7a-0329-386d066396bf-dbce5a0a" class="content-info-wrapper"><h2>Business moves fast. Most compensation tools don’t.</h2><p>Most compensation tools force teams to react to requests instead of leading with strategy. <br/><br/>Payscale Ascent changes that — bringing always-current market data, purpose-built AI, and connected workflows into one intelligent system that keeps pace with the business, so you can price roles faster, defend decisions with confidence, and lead with proactive strategy.</p><div class="button-group-center"><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div><a data-wf--cta-button--variant="secondary" data-wf-native-id-path="8928ad52-a8c2-b541-f7d4-6acc984b4521:6157d6ee-89f4-e1e2-60a0-be9475d4791e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6157d6ee-89f4-e1e2-60a0-be9475d4791e" data-wf-component-context="%5B%7B%22componentId%22%3A%226157d6ee-89f4-e1e2-60a0-be9475d4791e%22%2C%22instanceId%22%3A%228928ad52-a8c2-b541-f7d4-6acc984b4521%22%7D%5D" href="/products/pricing" class="btn w-variant-8ed9b6cf-be54-3813-b2a0-34405b5d0c8a w-inline-block"><div class="text-block-37 w-variant-8ed9b6cf-be54-3813-b2a0-34405b5d0c8a">Get Pricing</div></a></div></div><div class="counter-cards-grid-wrapper"><div id="w-node-_3eb60c3a-2ad9-12ab-460e-528c99807260-dbce5a0a" class="counter-card-grid-stack"><div class="counter-card_shadow card-light"><div class="counter-text-wrap"><div class="counter-number"><div class="counterup counter-sm">4.5</div><div class="counter-percent counter-sm">K+</div></div><p class="text-size-medium">Organizations within contributory network<br/></p></div></div></div><div class="counter-card-grid-stack"><div class="counter-card_shadow card-light"><div class="counter-text-wrap"><div class="counter-number counter-sm"><div class="counterup counter-sm">10.2</div><div class="counter-percent counter-sm">M+</div></div><p class="text-size-medium">Employee records</p></div></div></div><div class="counter-card-grid-stack"><div class="counter-card_shadow card-light"><div class="counter-text-wrap"><div class="counter-number counter-sm"><div class="counterup counter-sm">$2</div><div class="counter-percent counter-sm">T+</div></div><p class="text-size-medium">In employee salaries managed</p></div></div></div></div></div></div></div></section><section id="key-features" class="section bottom-4"><div class="padding-global"><div class="container-global"><div class="header-wrapper bottom-3"><div data-wf--eyebrow-pill--variant="primary" class="eyebrow-pill w-variant-230ceb93-1cca-7081-4f2b-17ab8288db90"><div>✦ Features &amp; Functionality</div></div><h2>
1398Benchmarking quick enough to act on — and <span class="ts-highlight">credible</span> enough to defend</h2></div><div class="w-layout-vflex persona-cards-wrapper"><div class="persona-card bg-offwhite"><div class="persona-card_content"><div class="persona-card_content_rt w-richtext"><h3>AI-guided job matching &amp; pricing </h3><p><br/>Match roles to the right benchmarks in minutes, not hours. Engage our intuitive, purpose-built LLMs to analyze your internal job architecture, skills data, and Peer benchmarks to recommend accurate, defensible pay ranges with clear confidence scores. <br/>‍</p><ul role="list"><li><strong>AI-powered </strong>job matching reduces manual effort by weeks</li><li><strong>Contextual recommendations </strong>with confidence scoring</li><li><strong>Seamless flow </strong>into offer, planning, and equity workflows</li></ul></div><div class="w-layout-hflex button-text-group"><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div></div></div><div class="persona-card_embed"><div class="w-embed w-script"><style>
1399/* ════════════════════════════════════════════════════════════════
1400   PAYSCALE EXPLORE — Search · Price · Trends  (frameless embed)
1401   Everything is scoped under .exp so it can't collide with the page.
1402   Layout is tuned once at a fixed native size, then scaled uniformly.
1403   ════════════════════════════════════════════════════════════════ */
1404
1405.exp, .exp *, .exp *::before, .exp *::after { box-sizing: border-box; margin: 0; padding: 0; }
1406
1407.exp {
1408  /* ╔══════════════════════════════════════════════════════════════╗
1409     ║  ⏱  MOTION CONTROL                                            ║
1410     ║  --speed scales the WHOLE animation in proportion. The script ║
1411     ║  at the bottom reads this one value.                          ║
1412     ║      0  = no animation (static — shows Scene 1 fully formed)  ║
1413     ║      1  = baseline (current speed)                            ║
1414     ║      2  = 200% speed   ·   0.5 = half speed   ·   etc.        ║
1415     ╚══════════════════════════════════════════════════════════════╝ */
1416  --speed: 1;
1417  --dur-scale: 1;   /* derived from --speed by the script — don't edit directly */
1418
1419  /* Dev play/pause button:  1 = show   ·   0 = hide */
1420  --show-toggle: 0;
1421
1422  /* ╔══════════════════════════════════════════════════════════════╗
1423     ║  🎨  COLOR CONTROLS — change every color from right here      ║
1424     ║  Edit a swatch and every element using it updates.            ║
1425     ╚══════════════════════════════════════════════════════════════╝ */
1426
1427  /* — Brand swatches (Payscale palette) — */
1428  --c-green:    #E2FF65;   /* Electric Green (brand) — key-stat highlight, used sparingly */
1429  --c-teal:     #23A4B5;   /* Light Teal (brand) — primary data series, chart ramp light end */
1430  --c-techteal: #0A4444;   /* Tech Teal (brand) — primary dark surface, borders, headings */
1431  --c-midnight: #041E1E;   /* Midnight (brand) — darkest, default body text */
1432  --c-purple:   #B399F8;   /* Electric Purple (brand) — distribution curve, data series 2 (kept away from green) */
1433  --c-aqua:     #B9DCD3;   /* Aqua Blue (brand) — soft fills, chips, "done" state */
1434  --c-offwhite: #F4F2EA;   /* Off-white (brand) — text on dark surfaces */
1435
1436  /* — Custom shades / accents (NOT official brand swatches) — */
1437  --c-teal-dk:  #073333;   /* deeper teal — dark end of bar / surface gradients */
1438  --c-muted:    #5C7575;   /* muted gray-teal — captions, sub-labels */
1439  --c-line:     rgba(10,68,68,.12);  /* hairline rules / inactive tracks */
1440  --c-coral:    #E8845C;   /* warm coral — 4th data series only, for chart legibility */
1441
1442  /* — Element gradients (built from the swatches above) — */
1443  --grad-ribbon-active: linear-gradient(90deg, var(--c-techteal), var(--c-teal), var(--c-techteal)); /* active ribbon pill sweep */
1444  --grad-bar:           linear-gradient(90deg, var(--c-teal-dk),  var(--c-teal));   /* horizontal bars — dark teal → teal */
1445  --grad-surface-dark:  linear-gradient(150deg, var(--c-techteal), var(--c-teal-dk)); /* callout + insight bar dark surface */
1446
1447  /* — Card chrome (subtle, derived from Tech Teal) — */
1448  --card-bg:     #FFFFFF;
1449  --card-border: rgba(10,68,68,.14);
1450  --card-shadow: 0 2px 9px rgba(4,30,30,.07);
1451
1452  font-family: 'Inter', system-ui, sans-serif;
1453  -webkit-font-smoothing: antialiased;
1454  line-height: normal;
1455  display: inline-block;
1456}
1457
1458/* ── Responsive wrapper ──────────────────────────────────────────────
1459   Drop the embed inside any flex column; it scales uniformly to fit that
1460   column's width, so the pixel-tuned layout is preserved at EVERY breakpoint
1461   (desktop 50/50, tablet/mobile stacked). Native size lives here as
1462   --exp-w / --exp-h; the stage reads them, the wrapper reserves the matching
1463   height via aspect-ratio, and the script sets --exp-scale from the column's
1464   real width. Caps at native size so it never upscales (stays crisp).
1465   To make it larger on wide screens, raise the max-width.                  */
1466.exp-fit {
1467  --exp-w: 600;          /* native width  (px, unitless) */
1468  --exp-h: 552;          /* native height (px, unitless) — sized to the tallest scene (Price) */
1469  position: relative;
1470  width: 100%;
1471  max-width: calc(var(--exp-w) * 1px);
1472  aspect-ratio: var(--exp-w) / var(--exp-h);
1473  margin: 0 auto;        /* center within a wider column */
1474  align-self: flex-start;/* don't vertically stretch if it's itself a flex item */
1475}
1476.exp-fit .exp {
1477  position: absolute; top: 0; left: 0;
1478  transform-origin: top left;
1479  transform: scale(var(--exp-scale, 1));
1480}
1481
1482/* Frameless stage — transparent. Native size comes from --exp-w / --exp-h. */
1483.exp .stage { position: relative; width: calc(var(--exp-w, 600) * 1px); height: calc(var(--exp-h, 552) * 1px); }
1484
1485/* ── keyframes (all prefixed exp-) ── */
1486@keyframes exp-sweep   { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
1487@keyframes exp-fadeUp  { from{opacity:0;transform:translateY(13px)} to{opacity:1;transform:translateY(0)} }
1488@keyframes exp-fade    { from{opacity:0}
1488 to{opacity:1} }
1489@keyframes exp-scaleIn { from{opacity:0;transform:scale(.85)} to{opacity:1;transform:scale(1)} }
1490@keyframes exp-pop     { from{opacity:0;transform:scale(.55)} to{opacity:1;transform:scale(1)} }
1491@keyframes exp-barGrow { from{transform:scaleX(0)} to{transform:scaleX(1)} }
1492@keyframes exp-pulse   { 0%,100%{transform:scale(1);opacity:1} 50%{transform:scale(1.28);opacity:.7} }
1493@keyframes exp-type    { from{width:0} to{width:100%} }
1494@keyframes exp-draw    { to{stroke-dashoffset:0} }
1495
1496/* ══ workflow ribbon (the single step indicator) ══ */
1497.exp .ribbon { position: absolute; top: 16px; left: 16px; right: 16px; display: flex; align-items: center; gap: 6px; z-index: 20; }
1498.exp .ribbon .step {
1499  flex: 1; height: 32px; border-radius: 999px;
1500  border: 1.5px solid rgba(10,68,68,.25);          /* inactive pill border */
1501  background: var(--card-bg);                      /* inactive pill fill */
1502  display: flex; align-items: center; padding: 0 12px;
1503  font-size: 12.5px; font-weight: 600; color: var(--c-muted);
1504  position: relative; z-index: 0;                  /* stacking context for the gradient overlay */
1505  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out, border-color calc(.6s * var(--dur-scale,1)) ease-in-out;
1506  white-space: nowrap; overflow: hidden;
1507}
1508/* gradient overlay — crossfades in/out behind the label + number (color: --grad-ribbon-active) */
1509.exp .ribbon .step::before {
1510  content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit;
1511  background: var(--grad-ribbon-active); background-size: 200% 100%;
1512  opacity: 0; pointer-events: none;
1513  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out;   /* fade-OUT — starts immediately */
1514}
1515.exp .ribbon .step .num {
1516  width: 16px; height: 16px; border-radius: 50%;
1517  background: rgba(10,68,68,.1); color: var(--c-muted);
1518  font-size: 10px; font-weight: 700;
1519  display: flex; align-items: center; justify-content: center;
1520  margin-right: 8px; flex-shrink: 0;
1521  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out, color calc(.6s * var(--dur-scale,1)) ease-in-out;
1522}
1523/* active step — gradient fades IN delayed ~85% of the fade-out, so outgoing/incoming pills overlap ~15% */
1524.exp .ribbon .step.active {
1525  border-color: transparent; color: var(--c-offwhite);
1526  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)),
1527              border-color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
1528}
1529.exp .ribbon .step.active::before {
1530  opacity: 1;
1531  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));   /* fade-IN — delayed */
1532  animation: exp-sweep calc(3.4s * var(--dur-scale,1)) ease-in-out infinite;
1533}
1534.exp .ribbon .step.active .num {
1535  background: var(--c-green); color: var(--c-techteal);
1536  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)), color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
1537}
1538/* done step */
1539.exp .ribbon .step.done      { background: var(--c-aqua); border-color: var(--c-aqua); color: var(--c-techteal); }
1540.exp .ribbon .step.done .num { background: var(--c-techteal); color: var(--c-green); }
1541.exp .ribbon .step.done::after { content: "\2713"; font-size: 11px; font-weight: 700; color: var(--c-techteal); margin-left: auto; }
1542
1543/* ══ scenes ══ */
1544.exp .scene {
1545  position: absolute; top: 60px; left: 16px; right: 16px; bottom: 16px;
1546  display: flex; flex-direction: column;
1547  opacity: 0; pointer-events: none; transition: opacity calc(.5s * var(--dur-scale,1)) ease;
1548}
1549.exp .scene.active { opacity: 1; }
1550
1551/* shared scene heading — 18px left pad lines the text up with the card body text below (cards sit at the scene edge with 18px inner padding) */
1552.exp .sc-label { font-family: 'Zodiak', Georgia, serif; font-size: 22px; font-weight: 600; letter-spacing: -.01em; color: var(--c-techteal); padding-left: 18px; }
1553.exp .sc-sub   { font-size: 13px; color: var(--c-muted); line-height: 1.45; max-width: 88%; margin-top: 5px; padding-left: 18px; }
1554
1555/* ─────────── SCENE 1 — AI SEARCH ─────────── */
1556.exp .se-card {
1557  margin-top: 16px;
1558  background: var(--card-bg); border: 1.5px solid var(--c-techteal); border-radius: 13px;
1559  box-shadow: var(--card-shadow); padding: 16px 18px; opacity: 0;
1560}
1561.exp .scene.active .se-card { animation: exp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
1562.exp .se-cap { font-size: 10.5px; font-weight: 600; letter-spacing: .14em; color: var(--c-muted); text-transform: uppercase; margin-bottom: 11px; }
1563
1564.exp .se-bar {
1565  display: flex; align-items: center;
1566  background: var(--c-offwhite); border: 1.5px solid var(--c-techteal); border-radius: 999px;
1567  padding: 10px 14px;
1568}
1569.exp .se-bar .spark { color: var(--c-teal); font-size: 15px; font-weight: 700; margin-right: 11px; flex-shrink: 0; }
1570.exp .se-bar .qt { font-size: 13.5px; font-weight: 500; color: var(--c-midnight); flex: 1; overflow: hidden; white-space: nowrap; }
1571.exp .scene.active .se-bar .qt { animation: exp-type calc(1.6s * var(--dur-scale,1)) steps(38,end) calc(.6s * var(--dur-scale,1)) both; }
1572.exp .se-bar .go { width: 27px; height: 27px; border-radius: 50%; background: var(--c-techteal); color: var(--c-green); font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; margin-left: 10px; flex-shrink: 0; opacity: 0; }
1573.exp .scene.active .se-bar .go { animation: exp-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(2.3s * var(--dur-scale,1)) both; }
1574
1575.exp .se-filters { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 13px; }
1576.exp .se-chip { padding: 5px 12px; border-radius: 999px; font-size: 11px; font-weight: 500; color: var(--c-techteal); background: var(--c-aqua); opacity: 0; }
1577.exp .scene.active .se-chip:nth-child(1) { animation: exp-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(2.5s * var(--dur-scale,1)) both; }
1578.exp .scene.active .se-chip:nth-child(2) { animation: exp-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(2.62s * var(--dur-scale,1)) both; }
1579.exp .scene.active .se-chip:nth-child(3) { animation: exp-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(2.74s * var(--dur-scale,1)) both; }
1580
1581.exp .se-reslabel { font-size: 10.5px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--c-muted); margin: 18px 0 9px 18px; opacity: 0; }
1582.exp .scene.active .se-reslabel { animation: exp-fade calc(.4s * var(--dur-scale,1)) ease calc(3.0s * var(--dur-scale,1)) both; }
1583
1584.exp .se-results { display: flex; flex-direction: column; gap: 8px; }
1585.exp .se-result {
1586  display: flex; align-items: center; gap: 12px;
1587  background: var(--card-bg); border: 1.5px solid var(--c-line); border-radius: 11px;
1588  box-shadow: var(--card-shadow); padding: 11px 15px; opacity: 0;
1589}
1590.exp .scene.active .se-result:nth-child(1) { animation: exp-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(3.2s * var(--dur-scale,1)) both; }
1591.exp .scene.active .se-result:nth-child(2) { animation: exp-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(3.35s * var(--dur-scale,1)) both; }
1592.exp .scene.active .se-result:nth-child(3) { animation: exp-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(3.5s * var(--dur-scale,1)) both; }
1593.exp .se-result .rt { font-size: 12.5px; font-weight: 600; color: var(--c-midnight); }
1594.exp .se-result .rm { font-size: 10.5px; color: var(--c-muted); margin-top: 2px; }
1595.exp .se-result .rgo { margin-left: auto; color: var(--c-teal); font-size: 15px; font-weight: 700; flex-shrink: 0; }
1596
1597/* ─────────── SCENE 2 — MARKET PRICING (distribution) ─────────── */
1598.exp .pr-card {
1599  margin-top: 16px;
1600  background: var(--card-bg); border: 1.5px solid var(--c-techteal); border-radius: 13px;
1601  box-shadow: var(--card-shadow); padding: 16px 18px; opacity: 0; position: relative;
1602}
1603.exp .scene.active .pr-card { animation: exp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.15s * var(--dur-scale,1)) both; }
1604.exp .pr-cap { font-size: 10.5px; font-weight: 600; letter-spacing: .14em; color: var(--c-muted); text-transform: uppercase; }
1605.exp .pr-sub { font-size: 11.5px; color: var(--c-midnight); font-weight: 500; margin-top: 3px; }
1606
1607.exp .pr-wrap { position: relative; width: 100%; aspect-ratio: 600 / 260; margin-top: 6px; }
1608.exp .pr-wrap svg { width: 100%; height: 100%; display: block; overflow: visible; }
1609
1610.exp .pr-guides { opacity: 0; }
1611.exp .scene.active .pr-guides { animation: exp-fade calc(.6s * var(--dur-scale,1)) ease calc(1.4s * var(--dur-scale,1)) forwards; }
1612
1613.exp .pr-line { stroke: var(--c-purple); stroke-width: 2.5; fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1000; stroke-dashoffset: 1000; }
1614.exp .scene.active .pr-line { animation: exp-draw calc(1.5s * var(--dur-scale,1)) ease-out calc(.5s * var(--dur-scale,1)) forwards; }
1615.exp .pr-area { fill: url(#exp-curve-grad); opacity: 0; }
1616.exp .scene.active .pr-area { animation: exp-fade calc(.8s * var(--dur-scale,1)) ease calc(1.7s * var(--dur-scale,1)) forwards; }
1617
1618/* percentile dots — pop in from the tails inward; positions computed to sit exactly on the curve */
1619.exp .pr-dot { opacity: 0; transform-box: fill-box; transform-origin: center; }
1620.exp .scene.active .pr-dot { animation: exp-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) both; }
1621.exp .scene.active .pr-dot.p1, .exp .scene.active .pr-dot.p5 { animation-delay: calc(2.0s * var(--dur-scale,1)); }
1622.exp .scene.active .pr-dot.p2, .exp .scene.active .pr-dot.p4 { animation-delay: calc(2.15s * var(--dur-scale,1)); }
1623.exp .scene.active .pr-dot.p3 { animation-delay: calc(2.4s * var(--dur-scale,1)); }
1624
1625.exp .pr-tick, .exp .pr-val { opacity: 0; }
1626.exp .scene.active .pr-tick, .exp .scene.active .pr-val { animation: exp-fade calc(.4s * var(--dur-scale,1)) ease both; }
1627.exp .scene.active .pr-tick.t1, .exp .scene.active .pr-val.w1 { animation-delay: calc(2.6s * var(--dur-scale,1)); }
1628.exp .scene.active .pr-tick.t2, .exp .scene.active .pr-val.w2 { animation-delay: calc(2.72s * var(--dur-scale,1)); }
1629.exp .scene.active .pr-tick.t3, .exp .scene.active .pr-val.w3 { animation-delay: calc(2.84s * var(--dur-scale,1)); }
1630.exp .scene.active .pr-tick.t4, .exp .scene.active .pr-val.w4 { animation-delay: calc(2.96s * var(--dur-scale,1)); }
1631.exp .scene.active .pr-tick.t5, .exp .scene.active .pr-val.w5 { animation-delay: calc(3.08s * var(--dur-scale,1)); }
1632
1633/* median callout — sits above the apex dot, generous padding, sizes to content */
1634.exp .pr-callout {
1635  position: absolute; left: 50%; top: -8px; transform: translateX(-50%);
1636  background: var(--grad-surface-dark); color: var(--c-offwhite);
1637  padding: 9px 18px; border-radius: 10px; text-align: center; white-space: nowrap;
1638  box-shadow: 0 4px 14px rgba(4,30,30,.22); opacity: 0; z-index: 5;
1639}
1640.exp .scene.active .pr-callout { animation: exp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(2.5s * var(--dur-scale,1)) both; }
1641.exp .pr-callout .cl { font-size: 9px; font-weight: 600; letter-spacing: .14em; color: var(--c-aqua); }
1642.exp .pr-callout .cv { font-family: 'Zodiak', Georgia, serif; font-size: 19px; font-weight: 700; color: var(--c-green); letter-spacing: -.01em; margin-top: 2px; }
1643
1644/* insight bar (dark) */
1645.exp .pr-insight {
1646  display: flex; gap: 18px; margin-top: 12px;
1647  background: var(--grad-surface-dark); color: var(--c-offwhite);
1648  border-radius: 13px; padding: 14px 18px; opacity: 0; box-shadow: 0 6px 18px rgba(4,30,30,.16);
1649}
1650.exp .scene.active .pr-insight { animation: exp-fadeUp calc(.55s * var(--dur-scale,1)) ease calc(3.4s * var(--dur-scale,1)) both; }
1651.exp .pr-insight .ic-range { flex: .8; border-right: 1px solid rgba(255,255,255,.14); padding-right: 18px; }
1652.exp .pr-insight .ic-data  { flex: 1.5; }
1653.exp .pr-insight .lbl { font-size: 9px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--c-aqua); margin-bottom: 5px; }
1654.exp .pr-insight .val { font-family: 'Zodiak', Georgia, serif; font-size: 19px; font-weight: 700; color: var(--c-green); line-height: 1; letter-spacing: -.01em; }
1655.exp .pr-insight .sub { font-size: 10px; color: var(--c-aqua); margin-top: 5px; }
1656.exp .pr-darow { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 5px 0; border-bottom: 1px solid rgba(255,255,255,.1); }
1657.exp .pr-darow:last-child { border-bottom: none; }
1658.exp .pr-darow .dj { font-size: 10.5px; color: var(--c-offwhite); font-weight: 500; }
1659.exp .pr-darow .dc { font-size: 10.5px; color: var(--c-aqua); white-space: nowrap; }
1660.exp .pr-darow .dc b { color: var(--c-green); font-weight: 700; }
1661
1662/* ─────────── SCENE 3 — TRENDS & DEMAND ─────────── */
1663.exp .tr-row { display: flex; gap: 12px; margin-top: 16px; }
1664.exp .tr-card {
1665  flex: 1; background: var(--card-bg); border: 1.5px solid var(--c-techteal); border-radius: 12px;
1666  box-shadow: var(--card-shadow); padding: 14px 16px; opacity: 0;
1667}
1668.exp .scene.active .tr-card.c1 { animation: exp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
1669.exp .scene.active .tr-card.c2 { animation: exp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.4s * var(--dur-scale,1)) both; }
1670.exp .scene.active .tr-card.c3 { animation: exp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.6s * var(--dur-scale,1)) both; }
1671.exp .scene.active .tr-card.c4 { animation: exp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.8s * var(--dur-scale,1)) both; }
1672.exp .tr-card .cap { font-size: 9.5px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--c-muted); margin-bottom: 4px; }
1673.exp .tr-card .ttl { font-size: 12px; font-weight: 600; color: var(--c-midnight); margin-bottom: 11px; }
1674
1675/* skill-impact horizontal bars */
1676.exp .tr-skill { display: flex; align-items: center; gap: 9px; margin-bottom: 8px; }
1677.exp .tr-skill:last-child { margin-bottom: 0; }
1678.exp .tr-skill .name { width: 98px; font-size: 10.5px; font-weight: 500; color: var(--c-midnight); flex-shrink: 0; white-space: nowrap; }
1679.exp .tr-skill .track { flex: 1; height: 7px; border-radius: 999px; background: rgba(10,68,68,.07); overflow: hidden; }
1680.exp .tr-skill .fill { display: block; height: 100%; border-radius: 999px; background: var(--grad-bar); transform-origin: left; transform: scaleX(0); }
1681.exp .tr-skill .pct { width: 34px; text-align: right; font-size: 10.5px; font-weight: 600; color: var(--c-teal); flex-shrink: 0; }
1682.exp .scene.active .tr-skill:nth-child(1) .fill { animation: exp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(.8s * var(--dur-scale,1)) both; }
1683.exp .scene.active .tr-skill:nth-child(2) .fill { animation: exp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(.92s * var(--dur-scale,1)) both; }
1684.exp .scene.active .tr-skill:nth-child(3) .fill { animation: exp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(1.04s * var(--dur-scale,1)) both; }
1685.exp .scene.active .tr-skill:nth-child(4) .fill { animation: exp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(1.16s * var(--dur-scale,1)) both; }
1686
1687/* skill-trends multi-line chart */
1688.exp .tr-trend { width: 100%; height: 82px; display: block; }
1689.exp .tr-trend .grid { stroke: var(--c-techteal); stroke-opacity: .08; stroke-width: .5; }
1690.exp .tr-trend .ln { fill: none; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1000; stroke-dashoffset: 1000; }
1691.exp .tr-trend .l1 { stroke: var(--c-purple); }
1692.exp .tr-trend .l2 { stroke: var(--c-teal); }
1693.exp .tr-trend .l3 { stroke: var(--c-techteal); }
1694.exp .tr-trend .l4 { stroke: var(--c-coral); }
1695.exp .scene.active .tr-trend .l1 { animation: exp-draw calc(1.2s * var(--dur-scale,1)) ease-out calc(.9s * var(--dur-scale,1)) forwards; }
1696.exp .scene.active .tr-trend .l2 { animation: exp-draw calc(1.2s * var(--dur-scale,1)) ease-out calc(1.05s * var(--dur-scale,1)) forwards; }
1697.exp .scene.active .tr-trend .l3 { animation: exp-draw calc(1.2s * var(--dur-scale,1)) ease-out calc(1.2s * var(--dur-scale,1)) forwards; }
1698.exp .scene.active .tr-trend .l4 { animation: exp-draw calc(1.2s * var(--dur-scale,1)) ease-out calc(1.35s * var(--dur-scale,1)) forwards; }
1699.exp .tr-legend { display: flex; flex-wrap: wrap; gap: 8px 12px; margin-top: 9px; }
1700.exp .tr-legend .li { display: inline-flex; align-items: center; gap: 5px; font-size: 9px; font-weight: 500; color: var(--c-muted); }
1701.exp .tr-legend .li .d { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
1702.exp .tr-legend .d1 { background: var(--c-purple); }
1703.exp .tr-legend .d2 { background: var(--c-teal); }
1704.exp .tr-legend .d3 { background: var(--c-techteal); }
1705.exp .tr-legend .d4 { background: var(--c-coral); }
1706
1707/* demand: postings line */
1708.exp .tr-post { width: 100%; height: 60px; display: block; margin-top: 2px; }
1709.exp .tr-post .grid { stroke: var(--c-techteal); stroke-opacity: .08; stroke-width: .5; }
1710.exp .tr-post .ln { fill: none; stroke: var(--c-teal); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1000; stroke-dashoffset: 1000; }
1711.exp .scene.active .tr-post .ln { animation: exp-draw calc(1.3s * var(--dur-scale,1)) ease-out calc(1.0s * var(--dur-scale,1)) forwards; }
1712.exp .tr-axis { display: flex; justify-content: space-between; font-size: 8.5px; font-weight: 500; color: var(--c-muted); margin-top: 6px; }
1713
1714/* demand: top locations */
1715.exp .tr-loc { display: flex; align-items: center; gap: 8px; font-size: 10.5px; padding: 6px 0; border-bottom: 1px solid var(--c-line); opacity: 0; }
1716.exp .tr-loc:last-child { border-bottom: none; }
1717.exp .scene.active .tr-loc:nth-child(1) { animation: exp-fadeUp calc(.35s * var(--dur-scale,1)) ease calc(1.1s * var(--dur-scale,1)) both; }
1718.exp .scene.active .tr-loc:nth-child(2) { animation: exp-fadeUp calc(.35s * var(--dur-scale,1)) ease calc(1.22s * var(--dur-scale,1)) both; }
1719.exp .scene.active .tr-loc:nth-child(3) { animation: exp-fadeUp calc(.35s * var(--dur-scale,1)) ease calc(1.34s * var(--dur-scale,1)) both; }
1720.exp .scene.active .tr-loc:nth-child(4) { animation: exp-fadeUp calc(.35s * var(--dur-scale,1)) ease calc(1.46s * var(--dur-scale,1)) both; }
1721.exp .tr-loc .ln-name { flex: 1; color: var(--c-midnight); font-weight: 500; }
1722.exp .tr-loc .ln-posts { width: 36px; text-align: right; color: var(--c-muted); font-weight: 600; }
1723.exp .tr-loc .ln-sal { width: 56px; text-align: right; font-family: 'Zodiak', Georgia, serif; font-weight: 700; color: var(--c-techteal); letter-spacing: -.01em; }
1724
1725/* ─────────── play / pause toggle (dev convenience — delete this block + the
1726   <button> + the JS listener to remove it entirely for production) ─────────── */
1727.exp .exp-toggle {
1728  position: absolute; bottom: 8px; right: 8px; z-index: 40;
1729  width: 24px; height: 24px; border-radius: 50%; padding: 0;
1730  border: 1px solid rgba(10,68,68,.2); background: rgba(255,255,255,.7);
1731  display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: .5;
1732  transition: opacity .2s ease, background .2s ease;
1733}
1734.exp .exp-toggle:hover { opacity: 1; background: var(--card-bg); }
1735.exp .exp-toggle svg { width: 11px; height: 11px; display: block; fill: var(--c-techteal); }
1736.exp .exp-toggle .ic-play { display: none; }
1737.exp .exp-toggle.paused .ic-pause { display: none; }
1738.exp .exp-toggle.paused .ic-play  { display: block; }
1739/* when paused, freeze every animation in the embed so you get a still frame */
1740.exp .stage.is-paused *, .exp .stage.is-paused *::before, .exp .stage.is-paused *::after { animation-play-state: paused !important; }
1741</style>
1742
1743<!-- ╔══════════════╗
1744     ║    MARKUP    ║
1745     ╚══════════════╝ -->
1746<div class="exp-fit">
1747<div class="exp">
1748<div class="stage" id="exp-stage">
1749
1750  <!-- Phase ribbon (single step indicator) -->
1751  <div class="ribbon">
1752    <div class="step" data-step="0"><span class="num">1</span>AI Search</div>
1753    <div class="step" data-step="1"><span class="num">2</span>Market Pricing</div>
1754    <div class="step" data-step="2"><span class="num">3</span>Trends &amp; Demand</div>
1755  </div>
1756
1757  <!-- ══ SCENE 1: AI SEARCH ══ -->
1758  <div class="scene" id="exp-scene-0">
1759    <div class="sc-label">Find any job, fast</div>
1760    <div class="sc-sub">Search in plain language &mdash; Payscale maps it to the right role and market.</div>
1761
1762    <div class="se-card">
1763      <div class="se-cap">AI-powered search</div>
1764      <div class="se-bar">
1765        <span class="spark">&#10022;</span>
1766        <span class="qt">Firmware / Embedded Software Engineer</span>
1767        <span class="go">&#8594;</span>
1768      </div>
1769      <div class="se-filters">
1770        <span class="se-chip">Technology</span>
1771        <span class="se-chip">USA &mdash; National</span>
1772        <span class="se-chip">500&ndash;1,000 employees</span>
1773      </div>
1774    </div>
1775
1776    <div class="se-reslabel">Suggested matches</div>
1777    <div class="se-results">
1778      <div class="se-result">
1779        <div>
1780          <div class="rt">Firmware Engineer II</div>
1781          <div class="rm">USA &mdash; National &middot; Technology</div>
1782        </div>
1783        <span class="rgo">&#8594;</span>
1784      </div>
1785      <div class="se-result">
1786        <div>
1787          <div class="rt">Embedded Software Engineer</div>
1788          <div class="rm">USA &mdash; National &middot; Technology</div>
1789        </div>
1790        <span class="rgo">&#8594;</span>
1791      </div>
1792      <div class="se-result">
1793        <div>
1794          <div class="rt">IoT Firmware Developer</div>
1795          <div class="rm">USA &mdash; National &middot; Technology</div>
1796        </div>
1797        <span class="rgo">&#8594;</span>
1798      </div>
1799    </div>
1800  </div>
1801
1802  <!-- ══ SCENE 2: MARKET PRICING ══ -->
1803  <div class="scene" id="exp-scene-1">
1804    <div class="sc-label">Price the role in real time</div>
1805    <div class="sc-sub">A live pay distribution, benchmarked to fresh market data.</div>
1806
1807    <div class="pr-card">
1808      <div class="pr-cap">Market distribution</div>
1809      <div class="pr-sub">Firmware / Embedded Software Engineer &middot; USA</div>
1810
1811      <div class="pr-wrap">
1812        <svg viewBox="0 0 600 260" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg">
1813          <defs>
1814            <linearGradient id="exp-curve-grad" x1="0" x2="0" y1="0" y2="1">
1815              <stop offset="0"  stop-color="var(--c-purple)" stop-opacity="0.45"/>
1816              <stop offset="1"  stop-color="var(--c-purple)" stop-opacity="0.04"/>
1817            </linearGradient>
1818          </defs>
1819
1820          <!-- percentile vertical guides (revealed with the curve) -->
1821          <g class="pr-guides" stroke="var(--c-techteal)" stroke-opacity="0.12" stroke-width="1" stroke-dasharray="2 4">
1822            <line x1="90"  y1="44" x2="90"  y2="202"/>
1823            <line x1="210" y1="44" x2="210" y2="202"/>
1824            <line x1="300" y1="44" x2="300" y2="202"/>
1825            <line x1="390" y1="44" x2="390" y2="202"/>
1826            <line x1="510" y1="44" x2="510" y2="202"/>
1827          </g>
1828
1829          <!-- filled area under the curve -->
1830          <path class="pr-area" d="M0,197.3 L5,196.9 L10,196.5 L15,196.0 L20,195.5 L25,194.9 L30,194.3 L35,193.6 L40,192.8 L45,191.9 L50,191.0 L55,190.0 L60,188.9 L65,187.6 L70,186.3 L75,184.9 L80,183.4 L85,181.7 L90,180.0 L95,178.1 L100,176.1 L105,173.9 L110,171.6 L115,169.2 L120,166.7 L125,164.0 L130,161.2 L135,158.3 L140,155.3 L145,152.1 L150,148.8 L155,145.4 L160,141.9 L165,138.4 L170,134.7 L175,131.0 L180,127.2 L185,123.4 L190,119.6 L195,115.7 L200,111.9 L205,108.1 L2
183010,104.3 L215,100.6 L220,97.0 L225,93.5 L230,90.1 L235,86.8 L240,83.7 L245,80.7 L250,78.0 L255,75.4 L260,73.1 L265,71.0 L270,69.2 L275,67.6 L280,66.3 L285,65.3 L290,64.6 L295,64.1 L300,64.0 L305,64.1 L310,64.6 L315,65.3 L320,66.3 L325,67.6 L330,69.2 L335,71.0 L340,73.1 L345,75.4 L350,78.0 L355,80.7 L360,83.7 L365,86.8 L370,90.1 L375,93.5 L380,97.0 L385,100.6 L390,104.3 L395,108.1 L400,111.9 L405,115.7 L410,119.6 L415,123.4 L420,127.2 L425,131.0 L430,134.7 L435,138.4 L440,141.9 L445,145.4 L450,148.8 L455,152.1 L460,155.3 L465,158.3 L470,161.2 L475,164.0 L480,166.7 L485,169.2 L490,171.6 L495,173.9 L500,176.1 L505,178.1 L510,180.0 L515,181.7 L520,183.4 L525,184.9 L530,186.3 L535,187.6 L540,188.9 L545,190.0 L550,191.0 L555,191.9 L560,192.8 L565,193.6 L570,194.3 L575,194.9 L580,195.5 L585,196.0 L590,196.5 L595,196.9 L600,197.3 L600,200 L0,200 Z"/>
1831
1832          <!-- the curve stroke (pathLength normalized so the draw-on works regardless of real length) -->
1833          <path class="pr-line" pathLength="1000" d="M0,197.3 L5,196.9 L10,196.5 L15,196.0 L20,195.5 L25,194.9 L30,194.3 L35,193.6 L40,192.8 L45,191.9 L50,191.0 L55,190.0 L60,188.9 L65,187.6 L70,186.3 L75,184.9 L80,183.4 L85,181.7 L90,180.0 L95,178.1 L100,176.1 L105,173.9 L110,171.6 L115,169.2 L120,166.7 L125,164.0 L130,161.2 L135,158.3 L140,155.3 L145,152.1 L150,148.8 L155,145.4 L160,141.9 L165,138.4 L170,134.7 L175,131.0 L180,127.2 L185,123.4 L190,119.6 L195,115.7 L200,111.9 L205,108.1 L210,104.3 L215,100.6 L220,97.0 L225,93.5 L230,90.1 L235,86.8 L240,83.7 L245,80.7 L250,78.0 L255,75.4 L260,73.1 L265,71.0 L270,69.2 L275,67.6 L280,66.3 L285,65.3 L290,64.6 L295,64.1 L300,64.0 L305,64.1 L310,64.6 L315,65.3 L320,66.3 L325,67.6 L330,69.2 L335,71.0 L340,73.1 L345,75.4 L350,78.0 L355,80.7 L360,83.7 L365,86.8 L370,90.1 L375,93.5 L380,97.0 L385,100.6 L390,104.3 L395,108.1 L400,111.9 L405,115.7 L410,119.6 L415,123.4 L420,127.2 L425,131.0 L430,134.7 L435,138.4 L440,141.9 L445,145.4 L450,148.8 L455,152.1 L460,155.3 L465,158.3 L470,161.2 L475,164.0 L480,166.7 L485,169.2 L490,171.6 L495,173.9 L500,176.1 L505,178.1 L510,180.0 L515,181.7 L520,183.4 L525,184.9 L530,186.3 L535,187.6 L540,188.9 L545,190.0 L550,191.0 L555,191.9 L560,192.8 L565,193.6 L570,194.3 L575,194.9 L580,195.5 L585,196.0 L590,196.5 L595,196.9 L600,197.3"/>
1834
1835          <!-- percentile dots — each sits exactly on the curve -->
1836          <g class="pr-dot p1"><circle cx="90"  cy="180.0" r="5" fill="var(--card-bg)" stroke="var(--c-techteal)" stroke-width="2"/></g>
1837          <g class="pr-dot p2"><circle cx="210" cy="104.3" r="5" fill="var(--card-bg)" stroke="var(--c-techteal)" stroke-width="2"/></g>
1838          <g class="pr-dot p3"><circle cx="300" cy="64.0"  r="6.5" fill="var(--c-green)" stroke="var(--c-techteal)" stroke-width="2"/></g>
1839          <g class="pr-dot p4"><circle cx="390" cy="104.3" r="5" fill="var(--card-bg)" stroke="var(--c-techteal)" stroke-width="2"/></g>
1840          <g class="pr-dot p5"><circle cx="510" cy="180.0" r="5" fill="var(--card-bg)" stroke="var(--c-techteal)" stroke-width="2"/></g>
1841
1842          <!-- percentile labels + dollar values -->
1843          <g font-family="Inter" font-size="9" font-weight="500" fill="var(--c-muted)" text-anchor="middle">
1844            <text class="pr-tick t1" x="90"  y="224">10TH</text>
1845            <text class="pr-tick t2" x="210" y="224">25TH</text>
1846            <text class="pr-tick t3" x="300" y="224">50TH</text>
1847            <text class="pr-tick t4" x="390" y="224">75TH</text>
1848            <text class="pr-tick t5" x="510" y="224">90TH</text>
1849          </g>
1850          <g font-family="Zodiak, Georgia, serif" font-size="13.5" font-weight="700" fill="var(--c-techteal)" text-anchor="middle" letter-spacing="-0.2">
1851            <text class="pr-val w1" x="90"  y="243">$88.1K</text>
1852            <text class="pr-val w2" x="210" y="243">$96.2K</text>
1853            <text class="pr-val w3" x="300" y="243">$107.2K</text>
1854            <text class="pr-val w4" x="390" y="243">$132.8K</text>
1855            <text class="pr-val w5" x="510" y="243">$158.9K</text>
1856          </g>
1857        </svg>
1858
1859        <!-- median callout sits above the apex dot -->
1860        <div class="pr-callout">
1861          <div class="cl">50TH &middot; MEDIAN</div>
1862          <div class="cv">$107.2K</div>
1863        </div>
1864      </div>
1865    </div>
1866
1867    <div class="pr-insight">
1868      <div class="ic-range">
1869        <div class="lbl">Range</div>
1870        <div class="val">$88K &ndash; $159K</div>
1871        <div class="sub">10th to 90th percentile</div>
1872      </div>
1873      <div class="ic-data">
1874        <div class="lbl">Data analyzed</div>
1875        <div class="pr-darow">
1876          <span class="dj">Firmware/Embedded SW Eng &middot; USA</span>
1877          <span class="dc"><b>98</b> orgs &middot; <b>2,221</b> incs</span>
1878        </div>
1879        <div class="pr-darow">
1880          <span class="dj">Firmware/Embedded SW Eng &middot; Technology</span>
1881          <span class="dc"><b>10</b> orgs &middot; <b>134</b> incs</span>
1882        </div>
1883      </div>
1884    </div>
1885  </div>
1886
1887  <!-- ══ SCENE 3: TRENDS & DEMAND ══ -->
1888  <div class="scene" id="exp-scene-2">
1889    <div class="sc-label">Explore trends and demand</div>
1890    <div class="sc-sub">Skill premiums, hiring momentum, and where the jobs are.</div>
1891
1892    <div class="tr-row">
1893      <div class="tr-card c1">
1894        <div class="cap">Skill impact</div>
1895        <div class="ttl">Pay lift for in-demand skills</div>
1896        <div class="tr-skills">
1897          <div class="tr-skill"><span class="name">Embedded C/C++</span><span class="track"><span class="fill" style="width:92%"></span></span><span class="pct">+12%</span></div>
1898          <div class="tr-skill"><span class="name">RTOS</span><span class="track"><span class="fill" style="width:74%"></span></span><span class="pct">+8%</span></div>
1899          <div class="tr-skill"><span class="name">Device drivers</span><span class="track"><span class="fill" style="width:55%"></span></span><span class="pct">+5%</span></div>
1900          <div class="tr-skill"><span class="name">Bluetooth LE</span><span class="track"><span class="fill" style="width:38%"></span></span><span class="pct">+3%</span></div>
1901        </div>
1902      </div>
1903
1904      <div class="tr-card c2">
1905        <div class="cap">Skill trends</div>
1906        <div class="ttl">% of postings, last 7 quarters</div>
1907        <svg class="tr-trend" viewBox="0 0 220 82" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
1908          <g class="grid">
1909            <line x1="0" y1="2"  x2="220" y2="2"/>
1910            <line x1="0" y1="28" x2="220" y2="28"/>
1911            <line x1="0" y1="54" x2="220" y2="54"/>
1912            <line x1="0" y1="80" x2="220" y2="80"/>
1913          </g>
1914          <polyline class="ln l1" points="0,20 37,16 73,11 110,3 147,9 183,5 220,4"   pathLength="1000"/>
1915          <polyline class="ln l2" points="0,14 37,22 73,30 110,40 147,44 183,44 220,46" pathLength="1000"/>
1916          <polyline class="ln l3" points="0,30 37,36 73,44 110,52 147,54 183,56 220,58" pathLength="1000"/>
1917          <polyline class="ln l4" points="0,60 37,64 73,62 110,64 147,60 183,58 220,62" pathLength="1000"/>
1918        </svg>
1919        <div class="tr-legend">
1920          <span class="li"><span class="d d1"></span>Embedded C/C++</span>
1921          <span class="li"><span class="d d2"></span>RTOS</span>
1922          <span class="li"><span class="d d3"></span>Device drivers</span>
1923          <span class="li"><span class="d d4"></span>Bluetooth LE</span>
1924        </div>
1925      </div>
1926    </div>
1927
1928    <div class="tr-row">
1929      <div class="tr-card c3">
1930        <div class="cap">Demand &middot; job postings</div>
1931        <div class="ttl">Postings over last 8 quarters</div>
1932        <svg class="tr-post" viewBox="0 0 220 60" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
1933          <g class="grid">
1934            <line x1="0" y1="4"  x2="220" y2="4"/>
1935            <line x1="0" y1="30" x2="220" y2="30"/>
1936            <line x1="0" y1="56" x2="220" y2="56"/>
1937          </g>
1938          <polyline class="ln" points="0,40 31,34 63,38 94,26 126,25 157,36 189,35 220,16" pathLength="1000"/>
1939        </svg>
1940        <div class="tr-axis"><span>Q2 &rsquo;24</span><span>Q4 &rsquo;24</span><span>Q2 &rsquo;25</span><span>Q4 &rsquo;25</span></div>
1941      </div>
1942
1943      <div class="tr-card c4">
1944        <div class="cap">Demand &middot; top locations</div>
1945        <div class="ttl">Postings &amp; median by metro</div>
1946        <div class="tr-locs">
1947          <div class="tr-loc"><span class="ln-name">San Jose, CA</span><span class="ln-posts">532</span><span class="ln-sal">$195.1K</span></div>
1948          <div class="tr-loc"><span class="ln-name">Los Angeles, CA</span><span class="ln-posts">309</span><span class="ln-sal">$167.7K</span></div>
1949          <div class="tr-loc"><span class="ln-name">Seattle, WA</span><span class="ln-posts">188</span><span class="ln-sal">$176.6K</span></div>
1950          <div class="tr-loc"><span class="ln-name">Boston, MA</span><span class="ln-posts">182</span><span class="ln-sal">$145.2K</span></div>
1951        </div>
1952      </div>
1953    </div>
1954  </div>
1955
1956  <!-- play / pause toggle (dev convenience) -->
1957  <button class="exp-toggle" id="exp-toggle" type="button" aria-label="Pause animation">
1958    <svg class="ic-pause" viewBox="0 0 12 12"><rect x="2" y="1.5" width="2.6" height="9" rx="0.6"/><rect x="7.4" y="1.5" width="2.6" height="9" rx="0.6"/></svg>
1959    <svg class="ic-play"  viewBox="0 0 12 12"><path d="M3.8 2.4 L10.8 6 L3.8 9.6 Z"/></svg>
1960  </button>
1961
1962</div><!-- /.stage -->
1963</div><!-- /.exp -->
1964</div><!-- /.exp-fit -->
1965
1966<script>
1967(function () {
1968  /* Scoped to this embed's root — safe if multiple embeds live on the page */
1969  var root   = document.getElementById('exp-stage');
1970  var scenes = root.querySelectorAll('.scene');
1971  var steps  = root.querySelectorAll('.ribbon .step');
1972  var btn    = document.getElementById('exp-toggle');
1973
1974  /* ── responsive scaling ──
1975     Scale the whole embed to its column's width (measured directly — robust in
1976     any layout). The wrapper's aspect-ratio reserves the matching height. */
1977  var fit = root.closest('.exp-fit');
1978  if (fit) {
1979    var nativeW = parseFloat(getComputedStyle(fit).getPropertyValue('--exp-w')) || 600;
1980    var rescale = function () {
1981      fit.style.setProperty('--exp-scale', (fit.clientWidth / nativeW).toFixed(4));
1982    };
1983    rescale();
1984    if (window.ResizeObserver) new ResizeObserver(rescale).observe(fit);
1985    else window.addEventListener('resize', rescale);
1986  }
1987
1988  /* ── read the --speed flag set at the top of the CSS ──
1989     >0 scales both the scene timing AND every CSS animation/transition
1990     (via --dur-scale).  0 = static: reveal Scene 1 fully formed, no loop. */
1991  var speed = parseFloat(getComputedStyle(root).getPropertyValue('--speed'));
1992  if (isNaN(speed)) speed = 1;
1993  var animate = speed > 0;
1994  root.style.setProperty('--dur-scale', animate ? (1 / speed) : 0);
1995
1996  /* show / hide the dev play-pause button (reads --show-toggle from the CSS) */
1997  if (parseFloat(getComputedStyle(root).getPropertyValue('--show-toggle')) === 0) {
1998    btn.style.display = 'none';
1999  }
2000
2001  var times = [7000, 8000, 7000].map(function (t) {   /* base scene durations (ms) */
2002    return animate ? t / speed : 0;
2003  });
2004
2005  var cur = 0, timer = null, paused = false;
2006
2007  function show(i) {
2008    clearTimeout(timer);
2009    scenes.forEach(function (s, j) { s.classList.toggle('active', j === i); });
2010    steps.forEach(function (s, j) {
2011      s.classList.remove('active', 'done');
2012      if      (j < i)   s.classList.add('done');
2013      else if (j === i) s.classList.add('active');
2014    });
2015    cur = i;
2016    if (animate && !paused) timer = setTimeout(next, times[i]);
2017  }
2018  function next() { show((cur + 1) % scenes.length); }
2019
2020  /* play / pause toggle (dev convenience — remove btn + this listener for production) */
2021  btn.addEventListener('click', function () {
2022    paused = !paused;
2023    btn.classList.toggle('paused', paused);
2024    btn.setAttribute('aria-label', paused ? 'Play animation' : 'Pause animation');
2025    root.classList.toggle('is-paused', paused);          /* freezes all CSS motion */
2026    if (paused)        clearTimeout(timer);
2027    else if (animate)  timer = setTimeout(next, times[cur]);   /* resume current scene */
2028  });
2029
2030  /* Starts when scrolled into view, then fires once.
2031     To play immediately on page load instead, delete the observer
2032     block below and replace it with a single line:  show(0); */
2033  var observer = new IntersectionObserver(function (entries) {
2034    entries.forEach(function (entry) {
2035      if (entry.isIntersecting) { show(0); observer.disconnect(); }
2036    });
2037  }, { threshold: 0.25 });
2038
2039  observer.observe(root);
2040}());
2041</script>
2041
2042</div></div></div><div class="persona-card bg-offwhite"><div class="persona-card_embed"><div class="w-embed w-script"><style>
2043/* ════════════════════════════════════════════════════════════════
2044   PAYSCALE SMART REPORTING — Ask · Analyze · Decide  (frameless embed)
2045   Everything is scoped under .smr so it can't collide with the page.
2046   Layout is tuned once at a fixed native size, then scaled uniformly.
2047   ════════════════════════════════════════════════════════════════ */
2048
2049.smr, .smr *, .smr *::before, .smr *::after { box-sizing: border-box; margin: 0; padding: 0; }
2050
2051.smr {
2052  /* ╔══════════════════════════════════════════════════════════════╗
2053     ║  ⏱  MOTION CONTROL                                            ║
2054     ║  --speed scales the WHOLE animation in proportion. The script ║
2055     ║  at the bottom reads this one value.                          ║
2056     ║      0  = no animation (static — shows Scene 1 fully formed)  ║
2057     ║      1  = baseline (current speed)                            ║
2058     ║      2  = 200% speed   ·   0.5 = half speed   ·   etc.        ║
2059     ╚══════════════════════════════════════════════════════════════╝ */
2060  --speed: 1;
2061  --dur-scale: 1;   /* derived from --speed by the script — don't edit directly */
2062
2063  /* Dev play/pause button:  1 = show   ·   0 = hide */
2064  --show-toggle: 0;
2065
2066  /* ╔══════════════════════════════════════════════════════════════╗
2067     ║  🎨  COLOR CONTROLS — change every color from right here      ║
2068     ║  Edit a swatch and every element using it updates.            ║
2069     ╚══════════════════════════════════════════════════════════════╝ */
2070
2071  /* — Brand swatches (Payscale palette) — */
2072  --c-green:     #E2FF65;   /* Electric Green (brand) — CTA / key-stat highlight, used sparingly */
2073  --c-teal:      #23A4B5;   /* Light Teal (brand) — supporting UI, chart ramp light end */
2074  --c-techteal:  #0A4444;   /* Tech Teal (brand) — primary dark surface, borders, headings */
2075  --c-midnight:  #041E1E;   /* Midnight (brand) — darkest, default body text */
2076  --c-purple:    #B399F8;   /* Electric Purple (brand) — spare; kept away from green */
2077  --c-aqua:      #B9DCD3;   /* Aqua Blue (brand) — soft fills, "done" state, secondary card */
2078  --c-offwhite:  #F4F2EA;   /* Off-white (brand) — text on dark surfaces */
2079
2080  /* — Custom shades / accents (not official brand swatches) — */
2081  --c-teal-dk:   #073333;   /* deeper teal — dark end of the bar / qbar / outcome gradients */
2082  --c-muted:     #5C7575;   /* muted gray-teal — captions, sub-labels */
2083  --c-line:      rgba(10,68,68,.12);  /* hairline rules / inactive tracks */
2084
2085  /* — Element gradients (built from the swatches above) — */
2086  --grad-ribbon-active: linear-gradient(90deg, var(--c-techteal), var(--c-teal), var(--c-techteal)); /* active ribbon pill sweep */
2087  --grad-bar:           linear-gradient(90deg, var(--c-teal-dk),  var(--c-teal));   /* chart bars — dark teal → teal */
2088  --grad-qbar:          linear-gradient(120deg, var(--c-techteal), var(--c-teal-dk)); /* Scene 2 query bar */
2089  --grad-outcome:       linear-gradient(150deg, var(--c-techteal), var(--c-teal-dk)); /* Scene 3 outcome card */
2090
2091  /* — Card chrome (subtle, derived from Tech Teal) — */
2092  --card-bg:     #FFFFFF;
2093  --card-border: rgba(10,68,68,.14);
2094  --card-shadow: 0 2px 9px rgba(4,30,30,.07);
2095
2096  font-family: 'Inter', system-ui, sans-serif;
2097  -webkit-font-smoothing: antialiased;
2098  line-height: normal;
2099  display: inline-block;
2100}
2101
2102/* ── Responsive wrapper ──────────────────────────────────────────────
2103   Drop the embed inside any flex column; it scales uniformly to fit that
2104   column's width, so the pixel-tuned layout is preserved at EVERY breakpoint
2105   (desktop 50/50, tablet/mobile stacked). Native size lives here as
2106   --smr-w / --smr-h; the stage reads them, the wrapper reserves the matching
2107   height via aspect-ratio, and the script sets --smr-scale from the column's
2108   real width. Caps at native size so it never upscales (stays crisp).
2109   To make it larger on wide screens, raise the max-width.                  */
2110.smr-fit {
2111  --smr-w: 560;          /* native width  (px, unitless) */
2112  --smr-h: 508;          /* native height (px, unitless) — keep in step with the stage; sized to the tallest scene (Decide) */
2113  position: relative;
2114  width: 100%;
2115  max-width: calc(var(--smr-w) * 1px);
2116  aspect-ratio: var(--smr-w) / var(--smr-h);
2117  margin: 0 auto;        /* center within a wider column */
2118  align-self: flex-start;/* don't vertically stretch if it's itself a flex item */
2119}
2120.smr-fit .smr {
2121  position: absolute; top: 0; left: 0;
2122  transform-origin: top left;
2123  transform: scale(var(--smr-scale, 1));
2124}
2125
2126/* Frameless stage — transparent. Native size comes from --smr-w / --smr-h. */
2127.smr .stage { position: relative; width: calc(var(--smr-w, 560) * 1px); height: calc(var(--smr-h, 480) * 1px); }
2128
2129/* ── keyframes (all prefixed smr-) ── */
2130@keyframes smr-sweep    { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
2131@keyframes smr-fadeUp   { from{opacity:0;transform:translateY(13px)} to{opacity:1;transform:translateY(0)} }
2132@keyframes smr-fade     { from{opacity:0}
2132 to{opacity:1} }
2133@keyframes smr-scaleIn  { from{opacity:0;transform:scale(.85)} to{opacity:1;transform:scale(1)} }
2134@keyframes smr-pop      { from{opacity:0;transform:scale(.6)} to{opacity:1;transform:scale(1)} }
2135@keyframes smr-barGrow  { from{transform:scaleX(0)} to{transform:scaleX(1)} }
2136@keyframes smr-pulse    { 0%,100%{transform:scale(1);opacity:1} 50%{transform:scale(1.18);opacity:.8} }
2137@keyframes smr-blink    { 0%,50%{opacity:1} 51%,100%{opacity:0} }
2138@keyframes smr-type     { from{width:0} to{width:100%} }
2139@keyframes smr-typecap  { from{max-width:0} to{max-width:100%} }   /* reveal that stops at the text's own width, so a trailing caret rests right after the last character */
2140@keyframes smr-draw     { to{stroke-dashoffset:0} }
2141
2142/* ══ workflow ribbon (the single step indicator) ══ */
2143.smr .ribbon { position: absolute; top: 16px; left: 16px; right: 16px; display: flex; align-items: center; gap: 6px; z-index: 20; }
2144.smr .ribbon .step {
2145  flex: 1; height: 32px; border-radius: 999px;
2146  border: 1.5px solid rgba(10,68,68,.25);          /* inactive pill border */
2147  background: var(--card-bg);                      /* inactive pill fill */
2148  display: flex; align-items: center; padding: 0 12px;
2149  font-size: 12.5px; font-weight: 600; color: var(--c-muted);
2150  position: relative; z-index: 0;                  /* stacking context for the gradient overlay */
2151  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out, border-color calc(.6s * var(--dur-scale,1)) ease-in-out;
2152  white-space: nowrap; overflow: hidden;
2153}
2154/* gradient overlay — crossfades in/out behind the label + number (color: --grad-ribbon-active) */
2155.smr .ribbon .step::before {
2156  content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit;
2157  background: var(--grad-ribbon-active); background-size: 200% 100%;
2158  opacity: 0; pointer-events: none;
2159  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out;   /* fade-OUT — starts immediately */
2160}
2161.smr .ribbon .step .num {
2162  width: 16px; height: 16px; border-radius: 50%;
2163  background: rgba(10,68,68,.1); color: var(--c-muted);
2164  font-size: 10px; font-weight: 700;
2165  display: flex; align-items: center; justify-content: center;
2166  margin-right: 8px; flex-shrink: 0;
2167  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out, color calc(.6s * var(--dur-scale,1)) ease-in-out;
2168}
2169/* active step — gradient fades IN delayed ~85% of the fade-out, so outgoing/incoming pills overlap ~15% */
2170.smr .ribbon .step.active {
2171  border-color: transparent; color: var(--c-offwhite);
2172  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)),
2173              border-color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
2174}
2175.smr .ribbon .step.active::before {
2176  opacity: 1;
2177  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));   /* fade-IN — delayed */
2178  animation: smr-sweep calc(3.4s * var(--dur-scale,1)) ease-in-out infinite;
2179}
2180.smr .ribbon .step.active .num {
2181  background: var(--c-green); color: var(--c-techteal);
2182  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)), color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
2183}
2184/* done step */
2185.smr .ribbon .step.done      { background: var(--c-aqua); border-color: var(--c-aqua); color: var(--c-techteal); }
2186.smr .ribbon .step.done .num { background: var(--c-techteal); color: var(--c-green); }
2187.smr .ribbon .step.done::after { content: "\2713"; font-size: 11px; font-weight: 700; color: var(--c-techteal); margin-left: auto; }
2188
2189/* ══ scenes ══ */
2190.smr .scene {
2191  position: absolute; top: 60px; left: 16px; right: 16px; bottom: 16px;
2192  display: flex; flex-direction: column;
2193  opacity: 0; pointer-events: none; transition: opacity calc(.5s * var(--dur-scale,1)) ease;
2194}
2195.smr .scene.active { opacity: 1; }
2196
2197/* shared scene heading — 16px left pad lines the text up with the card body text below (cards sit at the scene edge with ~16px inner padding) */
2198.smr .sc-label { font-family: 'Zodiak', Georgia, serif; font-size: 22px; font-weight: 600; letter-spacing: -.01em; color: var(--c-techteal); padding-left: 16px; }
2199.smr .sc-sub   { font-size: 13px; color: var(--c-muted); line-height: 1.45; max-width: 92%; margin-top: 5px; padding-left: 16px; }
2200
2201/* ─────────── SCENE 1 — ASK ─────────── */
2202.smr .ask-chat {
2203  margin-top: 16px;
2204  background: var(--card-bg); border: 1.5px solid var(--c-techteal); border-radius: 13px;
2205  box-shadow: var(--card-shadow); padding: 15px 17px; opacity: 0;
2206}
2207.smr .scene.active .ask-chat { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
2208.smr .ask-chat .q { display: flex; align-items: baseline; font-size: 13.5px; line-height: 1.3; }
2209.smr .ask-chat .spark { color: var(--c-teal); font-size: 14px; font-weight: 700; margin-right: 9px; flex-shrink: 0; }
2210.smr .ask-chat .qtext { color: var(--c-midnight); font-weight: 500; overflow: hidden; white-space: nowrap; display: inline-block; }
2211.smr .scene.active .ask-chat .qtext { animation: smr-typecap calc(1.7s * var(--dur-scale,1)) steps(42,end) calc(.6s * var(--dur-scale,1)) both; }
2212.smr .ask-chat .caret { display: inline-block; width: 1.5px; height: 13px; background: var(--c-techteal); margin-left: 2px; align-self: center; animation: smr-blink calc(.8s * var(--dur-scale,1)) step-end infinite; }
2213.smr .ask-chat .divider { height: 1px; background: var(--c-line); margin: 12px 0 11px; }
2214.smr .ask-chat .meta { display: flex; justify-content: space-between; align-items: center; }
2215.smr .ask-chat .about { font-size: 11.5px; color: var(--c-muted); }
2216.smr .ask-chat .about b { color: var(--c-techteal); font-weight: 600; }
2217.smr .ask-chat .ask-btn { background: var(--c-green); color: var(--c-midnight); border-radius: 999px; padding: 6px 16px; font-size: 11.5px; font-weight: 700; display: inline-flex; align-items: center; gap: 6px; }
2218.smr .ask-chat .ask-btn::before { content: "\25B6"; font-size: 8px; }
2219
2220.smr .tryask { font-size: 11px; color: var(--c-muted); font-weight: 600; letter-spacing: .06em; text-transform: uppercase; margin: 16px 0 9px 16px; opacity: 0; }
2221.smr .scene.active .tryask { animation: smr-fade calc(.5s * var(--dur-scale,1)) ease calc(2.3s * var(--dur-scale,1)) both; }
2222
2223/* suggested-question chips — a clean flex stack (no overlap, no hardcoded tops) */
2224.smr .chips { display: flex; flex-direction: column; gap: 8px; }
2225.smr .chip {
2226  display: flex; align-items: center; gap: 9px;
2227  background: var(--card-bg); border: 1.5px solid var(--c-line); border-radius: 999px;
2228  padding: 8px 16px; font-size: 12px; font-weight: 500; color: var(--c-techteal);
2229  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
2229 opacity: 0;
2230}
2231.smr .chip .ci { color: var(--c-teal); font-size: 12px; flex-shrink: 0; }
2232.smr .chip .ct { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2233.smr .scene.active .chip:nth-child(1) { animation: smr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(2.55s * var(--dur-scale,1)) both; }
2234.smr .scene.active .chip:nth-child(2) { animation: smr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(2.68s * var(--dur-scale,1)) both; }
2235.smr .scene.active .chip:nth-child(3) { animation: smr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(2.81s * var(--dur-scale,1)) both; }
2236.smr .scene.active .chip:nth-child(4) { animation: smr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(2.94s * var(--dur-scale,1)) both; }
2237.smr .scene.active .chip:nth-child(5) { animation: smr-fadeUp calc(.4s * var(--dur-scale,1)) ease calc(3.07s * var(--dur-scale,1)) both; }
2238
2239/* ─────────── SCENE 2 — ANALYZE ─────────── */
2240.smr .qbar {
2241  margin-top: 16px;
2242  display: flex; align-items: center;
2243  background: var(--grad-qbar); color: var(--c-offwhite);
2244  border-radius: 999px; padding: 11px 16px; font-size: 13px; opacity: 0;
2245}
2246.smr .scene.active .qbar { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.15s * var(--dur-scale,1)) both; }
2247.smr .qbar .qdot { width: 9px; height: 9px; border-radius: 50%; background: var(--c-green); margin-right: 12px; flex-shrink: 0; }
2248.smr .scene.active .qbar .qdot { animation: smr-pulse calc(1.5s * var(--dur-scale,1)) ease-in-out infinite calc(.8s * var(--dur-scale,1)); }
2249.smr .qbar .qt { font-weight: 500; flex: 1; overflow: hidden; white-space: nowrap; }
2250.smr .scene.active .qbar .qt { animation: smr-type calc(1.5s * var(--dur-scale,1)) steps(44,end) calc(.55s * var(--dur-scale,1)) both; }
2251.smr .qbar .qgo { width: 26px; height: 26px; border-radius: 50%; background: var(--c-green); color: var(--c-midnight); font-size: 10px; font-weight: 700; display: flex; align-items: center; justify-content: center; margin-left: 10px; flex-shrink: 0; }
2252
2253.smr .a-row { display: flex; gap: 13px; margin-top: 18px; }
2254.smr .a-card { background: var(--card-bg); border: 1.5px solid var(--c-techteal); border-radius: 12px; box-shadow: var(--card-shadow); padding: 14px 16px; opacity: 0; }
2255.smr .a-card .head { font-size: 12px; font-weight: 700; color: var(--c-techteal); margin-bottom: 11px; display: flex; align-items: center; gap: 6px; }
2256.smr .a-card .head .hd-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--c-teal); flex-shrink: 0; }
2257
2258/* bar chart card */
2259.smr .a-chart { flex: 1.7; }
2260.smr .scene.active .a-chart { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(2.1s * var(--dur-scale,1)) both; }
2261.smr .a-chart .row { display: flex; align-items: center; gap: 9px; margin-bottom: 7px; }
2262.smr .a-chart .row:last-child { margin-bottom: 0; }
2263.smr .a-chart .lbl { width: 70px; font-size: 10.5px; font-weight: 500; color: var(--c-midnight); text-align: right; flex-shrink: 0; }
2264.smr .a-chart .track { flex: 1; height: 8px; border-radius: 999px; background: rgba(10,68,68,.07); overflow: hidden; }
2265.smr .a-chart .fill { height: 100%; border-radius: 999px; background: var(--grad-bar); transform-origin: left; transform: scaleX(0); }
2266.smr .a-chart .pct { width: 42px; font-size: 10.5px; font-weight: 600; color: var(--c-muted); text-align: right; flex-shrink: 0; }
2267.smr .scene.active .a-chart .row:nth-child(2) .fill { animation: smr-barGrow calc(.7s * var(--dur-scale,1)) ease calc(2.5s * var(--dur-scale,1)) both; }
2268.smr .scene.active .a-chart .row:nth-child(3) .fill { animation: smr-barGrow calc(.7s * var(--dur-scale,1)) ease calc(2.62s * var(--dur-scale,1)) both; }
2269.smr .scene.active .a-chart .row:nth-child(4) .fill { animation: smr-barGrow calc(.7s * var(--dur-scale,1)) ease calc(2.74s * var(--dur-scale,1)) both; }
2270.smr .scene.active .a-chart .row:nth-child(5) .fill { animation: smr-barGrow calc(.7s * var(--dur-scale,1)) ease calc(2.86s * var(--dur-scale,1)) both; }
2271.smr .scene.active .a-chart .row:nth-child(6) .fill { animation: smr-barGrow calc(.7s * var(--dur-scale,1)) ease calc(2.98s * var(--dur-scale,1)) both; }
2272
2273/* sparkline card */
2274.smr .a-spark { flex: 1; display: flex; flex-direction: column; }
2275.smr .scene.active .a-spark { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(2.3s * var(--dur-scale,1)) both; }
2276.smr .a-spark .stat { font-family: 'Zodiak', Georgia, serif; font-size: 30px; font-weight: 700; color: var(--c-techteal); line-height: 1; letter-spacing: -.02em; }
2277.smr .a-spark .statsub { font-size: 10px; color: var(--c-muted); margin-top: 5px; margin-bottom: 10px; line-height: 1.35; }
2278.smr .a-spark svg { width: 100%; height: 40px; margin-top: auto; display: block; }
2279.smr .a-spark .sk-line { fill: none; stroke: var(--c-techteal); stroke-width: 1.6; stroke-dasharray: 220; stroke-dashoffset: 220; }
2280.smr .scene.active .a-spark .sk-line { animation: smr-draw calc(1.1s * var(--dur-scale,1)) ease calc(2.7s * var(--dur-scale,1)) forwards; }
2281.smr .a-spark .sk-dot { opacity: 0; fill: var(--c-green); stroke: var(--c-techteal); stroke-width: 1; }
2282.smr .scene.active .a-spark .sk-dot { animation: smr-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(3.7s * var(--dur-scale,1)) both; }
2283
2284/* stat row */
2285.smr .s-row { display: flex; gap: 13px; margin-top: 16px; }
2286.smr .s-card { flex: 1; border-radius: 11px; padding: 13px 15px; opacity: 0; }
2287.smr .s-card.feat { background: var(--c-green); }
2288.smr .s-card.soft { background: var(--c-offwhite); }
2289.smr .scene.active .s-card.feat { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(3.5s * var(--dur-scale,1)) both; }
2290.smr .scene.active .s-card.soft { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(3.62s * var(--dur-scale,1)) both; }
2291.smr .s-card .sl { font-size: 10px; font-weight: 600; color: var(--c-techteal); margin-bottom: 5px; }
2292.smr .s-card .sv { font-family: 'Zodiak', Georgia, serif; font-size: 25px; font-weight: 700; color: var(--c-midnight); line-height: 1; letter-spacing: -.015em; }
2293.smr .s-card .st { font-size: 10px; color: var(--c-midnight); margin-top: 5px; font-weight: 500; opacity: .8; display: flex; align-items: center; gap: 4px; }
2294
2295/* ─────────── SCENE 3 — DECIDE ─────────── */
2296.smr .insights { display: flex; flex-direction: column; gap: 8px; margin-top: 16px; }
2297.smr .ins {
2298  background: var(--card-bg); border: 1.5px solid var(--c-techteal); border-radius: 11px;
2299  box-shadow: var(--card-shadow); padding: 12px 15px; opacity: 0;
2300}
2301.smr .ins.act { border-width: 2px; }
2302.smr .scene.active .ins:nth-child(1) { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.25s * var(--dur-scale,1)) both; }
2303.smr .scene.active .ins:nth-child(2) { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.55s * var(--dur-scale,1)) both; }
2304.smr .scene.active .ins:nth-child(3) { animation: smr-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.85s * var(--dur-scale,1)) both; }
2305.smr .ins .ihead { display: flex; justify-content: space-between; align-items: center; margin-bottom: 5px; }
2306.smr .ins .ititle { font-size: 11.5px; font-weight: 700; color: var(--c-techteal); }
2307.smr .ins .tag { font-size: 9px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; padding: 3px 10px; border-radius: 999px; background: var(--c-aqua); color: var(--c-techteal); }
2308.smr .ins.act .tag { background: var(--c-green); color: var(--c-midnight); }
2309.smr .ins .ibody { font-size: 11.5px; color: var(--c-midnight); line-height: 1.4; }
2310.smr .ins .ibody b { color: var(--c-techteal); font-weight: 700; }
2311
2312/* outcome card (dark payoff) */
2313.smr .outcome { margin-top: 14px; background: var(--grad-outcome); border-radius: 13px; padding: 17px 20px; color: var(--c-offwhite); opacity: 0; box-shadow: 0 6px 18px rgba(4,30,30,.18); }
2314.smr .scene.active .outcome { animation: smr-fadeUp calc(.55s * var(--dur-scale,1)) ease calc(1.5s * var(--dur-scale,1)) both; }
2315.smr .outcome .ol { font-size: 10px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--c-aqua); margin-bottom: 6px; }
2316.smr .outcome .ot { font-family: 'Zodiak', Georgia, serif; font-size: 19px; font-weight: 600; line-height: 1.2; letter-spacing: -.01em; margin-bottom: 14px; }
2317.smr .outcome .ogrid { display: flex; gap: 26px; }
2318.smr .outcome .ogrid > div { flex: 1; }
2319.smr .outcome .ov { font-family: 'Zodiak', Georgia, serif; font-size: 24px; font-weight: 700; color: var(--c-green); line-height: 1; letter-spacing: -.01em; display: flex; align-items: center; gap: 5px; }
2320.smr .outcome .od { font-size: 10.5px; color: var(--c-offwhite); opacity: .82; margin-top: 6px; line-height: 1.35; }
2321.smr .scene.active .outcome .ov { animation: smr-scaleIn calc(.5s * var(--dur-scale,1)) cubic-bezier(.4,0,.2,1.4) both; }
2322.smr .scene.active .outcome .o1 .ov { animation-delay: calc(2s * var(--dur-scale,1)); }
2323.smr .scene.active .outcome .o2 .ov { animation-delay: calc(2.15s * var(--dur-scale,1)); }
2324
2325/* small up-triangle used in stat trends */
2326.smr .up { display: inline-block; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 7px solid currentColor; }
2327.smr .outcome .up { border-bottom-color: var(--c-green); }
2328
2329/* ─────────── play / pause toggle (dev convenience — delete this block + the
2330   <button> + the JS listener to remove it entirely for production) ─────────── */
2331.smr .smr-toggle {
2332  position: absolute; bottom: 8px; right: 8px; z-index: 40;
2333  width: 24px; height: 24px; border-radius: 50%; padding: 0;
2334  border: 1px solid rgba(10,68,68,.2); background: rgba(255,255,255,.7);
2335  display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: .5;
2336  transition: opacity .2s ease, background .2s ease;
2337}
2338.smr .smr-toggle:hover { opacity: 1; background: #fff; }
2339.smr .smr-toggle svg { width: 11px; height: 11px; display: block; fill: var(--c-techteal); }
2340.smr .smr-toggle .ic-play { display: none; }
2341.smr .smr-toggle.paused .ic-pause { display: none; }
2342.smr .smr-toggle.paused .ic-play  { display: block; }
2343/* when paused, freeze every animation in the embed so you get a still frame */
2344.smr .stage.is-paused *, .smr .stage.is-paused *::before, .smr .stage.is-paused *::after { animation-play-state: paused !important; }
2345</style>
2346
2347<!-- ╔══════════════╗
2348     ║    MARKUP    ║
2349     ╚══════════════╝ -->
2350<div class="smr-fit">
2351<div class="smr">
2352<div class="stage" id="smr-stage">
2353
2354  <!-- Phase ribbon (single step indicator) -->
2355  <div class="ribbon">
2356    <div class="step" data-step="0"><span class="num">1</span>Ask Anything</div>
2357    <div class="step" data-step="1"><span class="num">2</span>Analyze Insights</div>
2358    <div class="step" data-step="2"><span class="num">3</span>Drive Decisions</div>
2359  </div>
2360
2361  <!-- ══ SCENE 1: ASK ══ -->
2362  <div class="scene" id="smr-scene-0">
2363    <div class="sc-label">Query data, in plain language</div>
2364    <div class="sc-sub">Ask the way you'd say it &mdash; get a report back.</div>
2365
2366    <div class="ask-chat">
2367      <div class="q">
2368        <span class="spark">&#10022;</span>
2369        <span class="qtext">Generate a report showing pay equity by department</span>
2370        <span class="caret"></span>
2371      </div>
2372      <div class="divider"></div>
2373      <div class="meta">
2374        <div class="about">Asking about: <b>Compensation data</b> &#9662;</div>
2375        <div class="ask-btn">Ask</div>
2376      </div>
2377    </div>
2378
2379    <div class="tryask">Try asking</div>
2380    <div class="chips">
2381      <div class="chip"><span class="ci">&#10022;</span><span class="ct">Average compa-ratio by job family?</span></div>
2382      <div class="chip"><span class="ci">&#10022;</span><span class="ct">Top 10 jobs with low pay outliers?</span></div>
2383      <div class="chip"><span class="ci">&#10022;</span><span class="ct">Who's paid below their range minimum?</span></div>
2384      <div class="chip"><span class="ci">&#10022;</span><span class="ct">Which jobs aren't market-priced?</span></div>
2385      <div class="chip"><span class="ci">&#10022;</span><span class="ct">New-hire vs. tenured pay in the same title?</span></div>
2386    </div>
2387  </div>
2388
2389  <!-- ══ SCENE 2: ANALYZE ══ -->
2390  <div class="scene" id="smr-scene-1">
2391    <div class="sc-label">Surface key findings</div>
2392    <div class="sc-sub">Your question becomes a live, drillable report.</div>
2393
2394    <div class="qbar">
2395      <span class="qdot"></span>
2396      <span class="qt">Show gender pay gaps by department, descending</span>
2397      <span class="qgo">&#9654;</span>
2398    </div>
2399
2400    <div class="a-row">
2401      <!-- bar chart -->
2402      <div class="a-card a-chart">
2403        <div class="head"><span class="hd-dot"></span>Pay gap by department</div>
2404        <div class="row"><div class="lbl">Sales</div><div class="track"><div class="fill" style="width:96%"></div></div><div class="pct">&minus;3.2%</div></div>
2405        <div class="row"><div class="lbl">Engineering</div><div class="track"><div class="fill" style="width:75%"></div></div><div class="pct">&minus;2.4%</div></div>
2406        <div class="row"><div class="lbl">Marketing</div><div class="track"><div class="fill" style="width:58%"></div></div><div class="pct">&minus;1.8%</div></div>
2407        <div class="row"><div class="lbl">Finance</div><div class="track"><div class="fill" style="width:38%"></div></div><div class="pct">&minus;1.1%</div></div>
2408        <div class="row"><div class="lbl">Operations</div><div class="track"><div class="fill" style="width:24%"></div></div><div class="pct">&minus;0.6%</div></div>
2409      </div>
2410      <!-- sparkline -->
2411      <div class="a-card a-spark">
2412        <div class="head"><span class="hd-dot"></span>Avg. gap closed</div>
2413        <div class="stat">&minus;2.1%</div>
2414        <div class="statsub">YoY across all departments</div>
2415        <svg viewBox="0 0 130 42" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
2416          <defs>
2417            <linearGradient id="smr-spark" x1="0" x2="0" y1="0" y2="1">
2418              <stop offset="0" stop-color="var(--c-teal)" stop-opacity="0.40"/>
2419              <stop offset="1" stop-color="var(--c-teal)" stop-opacity="0"/>
2420            </linearGradient>
2421          </defs>
2422          <path d="M0,30 C20,28 32,18 48,16 C66,14 80,22 96,12 C108,6 116,8 130,6 L130,42 L0,42 Z" fill="url(#smr-spark)"/>
2423          <path class="sk-line" d="M0,30 C20,28 32,18 48,16 C66,14 80,22 96,12 C108,6 116,8 130,6"/>
2424          <circle class="sk-dot" cx="125" cy="7" r="3"/>
2425        </svg>
2426      </div>
2427    </div>
2428
2429    <div class="s-row">
2430      <div class="s-card feat">
2431        <div class="sl">Employees above midpoint</div>
2432        <div class="sv">68.4%</div>
2433        <div class="st"><span class="up"></span>4.2 pts vs last quarter</div>
2434      </div>
2435      <div class="s-card soft">
2436        <div class="sl">Roles ready to price</div>
2437        <div class="sv">1,247</div>
2438        <div class="st">Updated this morning</div>
2439      </div>
2440    </div>
2441  </div>
2442
2443  <!-- ══ SCENE 3: DECIDE ══ -->
2444  <div class="scene" id="smr-scene-2">
2445    <div class="sc-label">Benchmark with confidence</div>
2446    <div class="sc-sub">Analysis becomes a defensible, costed action plan.</div>
2447
2448    <div class="insights">
2449      <div class="ins">
2450        <div class="ihead"><div class="ititle">Market intelligence</div><div class="tag">Insight</div></div>
2451        <div class="ibody">Engineering salaries trail market by <b>3.8%</b> &mdash; top-quartile risk in 14 roles.</div>
2452      </div>
2453      <div class="ins">
2454        <div class="ihead"><div class="ititle">Pay equity signal</div><div class="tag">Insight</div></div>
2455        <div class="ibody">Gap closing fastest in Marketing &mdash; <b>&minus;1.8% YoY</b>. Sales needs attention next.</div>
2456      </div>
2457      <div class="ins act">
2458        <div class="ihead"><div class="ititle">Recommended action</div><div class="tag">Act now</div></div>
2459        <div class="ibody">Allocate <b>$420K</b> across 14 engineering roles to close the gap and protect retention.</div>
2460      </div>
2461    </div>
2462
2463    <div class="outcome">
2464      <div class="ol">Projected outcome</div>
2465      <div class="ot">Retention up. Risk down. Budget defended.</div>
2466      <div class="ogrid">
2467        <div class="o1">
2468          <div class="ov"><span class="up"></span>22%</div>
2469          <div class="od">Lower flight risk for top performers</div>
2470        </div>
2471        <div class="o2">
2472          <div class="ov">$1.4M</div>
2473          <div class="od">Avoided cost of unwanted attrition</div>
2474        </div>
2475      </div>
2476    </div>
2477  </div>
2478
2479  <!-- play / pause toggle (dev convenience) -->
2480  <button class="smr-toggle" id="smr-toggle" type="button" aria-label="Pause animation">
2481    <svg class="ic-pause" viewBox="0 0 12 12"><rect x="2" y="1.5" width="2.6" height="9" rx="0.6"/><rect x="7.4" y="1.5" width="2.6" height="9" rx="0.6"/></svg>
2482    <svg class="ic-play"  viewBox="0 0 12 12"><path d="M3.8 2.4 L10.8 6 L3.8 9.6 Z"/></svg>
2483  </button>
2484
2485</div><!-- /.stage -->
2486</div><!-- /.smr -->
2487</div><!-- /.smr-fit -->
2488
2489<script>
2490(function () {
2491  /* Scoped to this embed's root — safe if multiple embeds live on the page */
2492  var root   = document.getElementById('smr-stage');
2493  var scenes = root.querySelectorAll('.scene');
2494  var steps  = root.querySelectorAll('.ribbon .step');
2495  var btn    = document.getElementById('smr-toggle');
2496
2497  /* ── responsive scaling ──
2498     Scale the whole embed to its column's width (measured directly — robust in
2499     any layout). The wrapper's aspect-ratio reserves the matching height. */
2500  var fit = root.closest('.smr-fit');
2501  if (fit) {
2502    var nativeW = parseFloat(getComputedStyle(fit).getPropertyValue('--smr-w')) || 560;
2503    var rescale = function () {
2504      fit.style.setProperty('--smr-scale', (fit.clientWidth / nativeW).toFixed(4));
2505    };
2506    rescale();
2507    if (window.ResizeObserver) new ResizeObserver(rescale).observe(fit);
2508    else window.addEventListener('resize', rescale);
2509  }
2510
2511  /* ── read the --speed flag set at the top of the CSS ──
2512     >0 scales both the scene timing AND every CSS animation/transition
2513     (via --dur-scale).  0 = static: reveal Scene 1 fully formed, no loop. */
2514  var speed = parseFloat(getComputedStyle(root).getPropertyValue('--speed'));
2515  if (isNaN(speed)) speed = 1;
2516  var animate = speed > 0;
2517  root.style.setProperty('--dur-scale', animate ? (1 / speed) : 0);
2518
2519  /* show / hide the dev play-pause button (reads --show-toggle from the CSS) */
2520  if (parseFloat(getComputedStyle(root).getPropertyValue('--show-toggle')) === 0) {
2521    btn.style.display = 'none';
2522  }
2523
2524  var times = [7400, 7200, 6800].map(function (t) {   /* base scene durations (ms) */
2525    return animate ? t / speed : 0;
2526  });
2527
2528  var cur = 0, timer = null, paused = false;
2529
2530  function show(i) {
2531    clearTimeout(timer);
2532    scenes.forEach(function (s, j) { s.classList.toggle('active', j === i); });
2533    steps.forEach(function (s, j) {
2534      s.classList.remove('active', 'done');
2535      if      (j < i)   s.classList.add('done');
2536      else if (j === i) s.classList.add('active');
2537    });
2538    cur = i;
2539    if (animate && !paused) timer = setTimeout(next, times[i]);
2540  }
2541  function next() { show((cur + 1) % scenes.length); }
2542
2543  /* play / pause toggle (dev convenience — remove btn + this listener for production) */
2544  btn.addEventListener('click', function () {
2545    paused = !paused;
2546    btn.classList.toggle('paused', paused);
2547    btn.setAttribute('aria-label', paused ? 'Play animation' : 'Pause animation');
2548    root.classList.toggle('is-paused', paused);          /* freezes all CSS motion */
2549    if (paused)        clearTimeout(timer);
2550    else if (animate)  timer = setTimeout(next, times[cur]);   /* resume current scene */
2551  });
2552
2553  /* Starts when scrolled into view, then fires once.
2554     To play immediately on page load instead, delete the observer
2555     block below and replace it with a single line:  show(0); */
2556  var observer = new IntersectionObserver(function (entries) {
2557    entries.forEach(function (entry) {
2558      if (entry.isIntersecting) { show(0); observer.disconnect(); }
2559    });
2560  }, { threshold: 0.25 });
2561
2562  observer.observe(root);
2563}());
2564</script>
2564</div></div><div class="persona-card_content"><div class="persona-card_content_rt w-richtext"><h3>Get answers in seconds. Build reports that actually land.</h3><p><br/>Ask complex compensation questions in plain language and get instant, AI-powered answers — or build the exact dashboards and reports leadership needs without living in Excel.<br/>‍</p><ul role="list"><li>Stop wrestling with spreadsheets. Ask in plain language and get clear, governed answers in seconds — powered by Payscale’s compensation-trained AI</li><li>Build robust, configurable reports and dashboards designed for leadership storytelling</li><li>Access expert-curated standard reports built on proven compensation best practices</li></ul></div><div class="w-layout-hflex button-text-group"><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div></div></div></div><div class="persona-card bg-offwhite"><div class="persona-card_content"><div class="persona-card_content_rt w-richtext"><h3>Turn compensation into competitive advantage</h3><p><br/>Get continuous visibility into how your compensation program is performing across four strategic dimensions: Investment, Competitiveness, Workforce Health, and Job Architecture. Know where you’re strong, where you’re exposed, and what to fix next.<br/>‍</p><ul role="list"><li>Walk into leadership conversations with clear positioning you can defend</li><li>Spot which workforce segments are supporting your strategy — and which ones are at risk</li><li>Get actionable recommendations tied directly to your data, not generic benchmarks</li></ul></div><div class="w-layout-hflex button-text-group"><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div></div></div><div class="persona-card_embed"><div class="w-embed w-script"><style>
2565/* ════════════════════════════════════════════════════════════════
2566   PAYSCALE COMPASS — Orientation · Indicators · Trends · Signals
2567   Frameless Webflow embed. Everything is scoped under .cmp so it can't
2568   collide with the page. Layout is tuned once at a fixed native size,
2569   then scaled uniformly to whatever column width it's dropped into.
2570   ════════════════════════════════════════════════════════════════ */
2571
2572.cmp, .cmp *, .cmp *::before, .cmp *::after { box-sizing: border-box; margin: 0; padding: 0; }
2573
2574.cmp {
2575  /* ╔══════════════════════════════════════════════════════════════╗
2576     ║  ⏱  MOTION CONTROL                                            ║
2577     ║  --speed scales the WHOLE animation in proportion. The script ║
2578     ║  at the bottom reads this one value.                          ║
2579     ║      0  = no animation (static — shows Scene 1 fully formed)  ║
2580     ║      1  = baseline (current speed)                            ║
2581     ║      2  = 200% speed   ·   0.5 = half speed   ·   etc.        ║
2582     ╚══════════════════════════════════════════════════════════════╝ */
2583  --speed: 1.2;
2584  --dur-scale: 1;   /* derived from --speed by the script — don't edit directly */
2585
2586  /* Dev play/pause button:  1 = show   ·   0 = hide */
2587  --show-toggle: 0;
2588
2589  /* ╔══════════════════════════════════════════════════════════════╗
2590     ║  🎨  COLOR CONTROLS — change every color from right here      ║
2591     ║  Edit a swatch and every element using it updates.            ║
2592     ╚══════════════════════════════════════════════════════════════╝ */
2593
2594  /* — Brand swatches (Payscale palette) — */
2595  --c-green:    #E2FF65;   /* Electric Green (brand) — highlight / "leading" / CTA, used sparingly */
2596  --c-teal:     #23A4B5;   /* Light Teal (brand) — Investment series, polygon, links */
2597  --c-techteal: #0A4444;   /* Tech Teal (brand) — Health series, headings, borders, dark surfaces */
2598  --c-midnight: #041E1E;   /* Midnight (brand) — default body text */
2599  --c-purple:   #B399F8;   /* Electric Purple (brand) — Competitiveness series + "attention" state */
2600  --c-aqua:     #B9DCD3;   /* Aqua Blue (brand) — "aligned" / neutral fills, done state */
2601  --c-offwhite: #F4F2EA;   /* Off-white (brand) — text on dark surfaces, soft fills */
2602
2603  /* — Custom shades / accents (NOT official brand swatches) — */
2604  --c-teal-dk:    #073333;   /* deeper teal — dark end of tonal track gradients */
2605  --c-cyan:       #4FD4C4;   /* bright cyan-teal — Architecture series (the 4th distinct line) */
2606  --c-green-dk:   #B8E228;   /* deeper lime — dark end of the check-badge gradient */
2607  --c-purple-dk:  #7C57DE;   /* deeper purple — readable purple text on tints */
2608  --c-purple-tint:#EDE5FC;   /* soft lavender — "trailing"/attention pill background */
2609  --c-muted:      #5C7575;   /* muted gray-teal — captions, sub-labels, axis labels */
2610  --c-line:       rgba(10,68,68,.12);   /* hairlines, inactive tracks, chart grid */
2611  --c-track:      rgba(10,68,68,.08);   /* benchmark-bar track fill */
2612
2613  /* — Series colors (the 4 indicators — SINGLE SOURCE OF TRUTH) —
2614       reused by the radar dots, indicator cards, trend lines and legend so the
2615       color↔indicator mapping stays identical across every scene. */
2616  --s-invest: var(--c-teal);     /* Investment      */
2617  --s-compet: var(--c-purple);   /* Competitiveness */
2618  --s-health: var(--c-techteal); /* Health          */
2619  --s-arch:   var(--c-cyan);     /* Architecture    */
2620
2621  /* — Element gradients (built from the swatches above) — */
2622  --grad-ribbon-active: linear-gradient(90deg, var(--c-techteal), var(--c-teal), var(--c-techteal)); /* active ribbon pill sweep */
2623  --grad-track:         linear-gradient(90deg, var(--c-aqua), var(--c-teal));    /* benchmark-bar fill — aqua → teal */
2624  --grad-check:         linear-gradient(135deg, var(--c-green), var(--c-green-dk)); /* Scene 4 confirmed-segment check badge */
2625
2626  /* — Card chrome (subtle, derived from Tech Teal) — */
2627  --card-bg:     #FFFFFF;
2628  --card-border: rgba(10,68,68,.14);
2629  --card-shadow: 0 2px 9px rgba(4,30,30,.07);
2630
2631  font-family: 'Inter', system-ui, sans-serif;
2632  -webkit-font-smoothing: antialiased;
2633  line-height: normal;
2634  display: inline-block;
2635}
2636
2637/* ── Responsive wrapper ──────────────────────────────────────────────
2638   Drop the embed inside any flex column; it scales uniformly to fit that
2639   column's width, so the pixel-tuned layout is preserved at EVERY breakpoint
2640   (desktop 50/50, tablet/mobile stacked). Native size lives here as
2641   --cmp-w / --cmp-h; the stage reads them, the wrapper reserves the matching
2642   height via aspect-ratio, and the script sets --cmp-scale from the column's
2643   real width. Caps at native size so it never upscales (stays crisp).
2644   To make it larger on wide screens, raise the max-width.                  */
2645.cmp-fit {
2646  --cmp-w: 580;          /* native width  (px, unitless) */
2647  --cmp-h: 528;          /* native height (px, unitless) — sized to the tallest scene (Signals) with a small bottom margin */
2648  position: relative;
2649  width: 100%;
2650  max-width: calc(var(--cmp-w) * 1px);
2651  aspect-ratio: var(--cmp-w) / var(--cmp-h);
2652  margin: 0 auto;        /* center within a wider column */
2653  align-self: flex-start;/* don't vertically stretch if it's itself a flex item */
2654}
2655.cmp-fit .cmp {
2656  position: absolute; top: 0; left: 0;
2657  transform-origin: top left;
2658  transform: scale(var(--cmp-scale, 1));
2659}
2660
2661/* Frameless stage — transparent. Native size comes from --cmp-w / --cmp-h. */
2662.cmp .stage { position: relative; width: calc(var(--cmp-w, 580) * 1px); height: calc(var(--cmp-h, 556) * 1px); }
2663
2664/* ── keyframes (all prefixed cmp-) ── */
2665@keyframes cmp-sweep   { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
2666@keyframes cmp-fadeUp  { from{opacity:0;transform:translateY(13px)} to{opacity:1;transform:translateY(0)} }
2667@keyframes cmp-fade    { from{opacity:0} to{opacity:1} }
2668@keyframes cmp-pop     { from{opacity:0;transform:scale(.55)} to{opacity:1;transform:scale(1)} }
2669@keyframes cmp-popk    { from{opacity:0;transform:translate(-50%,-50%) scale(.55)} to{opacity:1;transform:translate(-50%,-50%) scale(1)} }
2670@keyframes cmp-barGrow { from{transform:scaleX(0)} to{transform:scaleX(1)} }
2671@keyframes cmp-draw    { to{stroke-dashoffset:0} }
2672@keyframes cmp-polyFill{ to{fill-opacity:.16} }
2673@keyframes cmp-pulse   { 0%,100%{transform:scale(1);opacity:1} 50%{transform:scale(1.16);opacity:.82} }
2674
2675/* ══ workflow ribbon (the single step indicator) ══ */
2676.cmp .ribbon { position: absolute; top: 16px; left: 16px; right: 16px; display: flex; align-items: center; gap: 6px; z-index: 20; }
2677.cmp .ribbon .step {
2678  flex: 1; height: 32px; border-radius: 999px;
2679  border: 1.5px solid rgba(10,68,68,.25);          /* inactive pill border */
2680  background: var(--card-bg);                      /* inactive pill fill */
2681  display: flex; align-items: center; padding: 0 11px;
2682  font-size: 12px; font-weight: 600; color: var(--c-muted);
2683  position: relative; z-index: 0;                  /* stacking context for the gradient overlay */
2684  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out, border-color calc(.6s * var(--dur-scale,1)) ease-in-out;
2685  white-space: nowrap; overflow: hidden;
2686}
2687/* gradient overlay — crossfades in/out behind the label + number (color: --grad-ribbon-active) */
2688.cmp .ribbon .step::before {
2689  content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit;
2690  background: var(--grad-ribbon-active); background-size: 200% 100%;
2691  opacity: 0; pointer-events: none;
2692  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out;   /* fade-OUT — starts immediately */
2693}
2694.cmp .ribbon .step .num {
2695  width: 16px; height: 16px; border-radius: 50%;
2696  background: rgba(10,68,68,.1); color: var(--c-muted);
2697  font-size: 10px; font-weight: 700;
2698  display: flex; align-items: center; justify-content: center;
2699  margin-right: 7px; flex-shrink: 0;
2700  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out, color calc(.6s * var(--dur-scale,1)) ease-in-out;
2701}
2702/* active step — gradient fades IN delayed ~85% of the fade-out, so outgoing/incoming pills overlap ~15% */
2703.cmp .ribbon .step.active {
2704  border-color: transparent; color: var(--c-offwhite);
2705  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)),
2706              border-color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
2707}
2708.cmp .ribbon .step.active::before {
2709  opacity: 1;
2710  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));   /* fade-IN — delayed */
2711  animation: cmp-sweep calc(3.4s * var(--dur-scale,1)) ease-in-out infinite;
2712}
2713.cmp .ribbon .step.active .num {
2714  background: var(--c-green); color: var(--c-techteal);
2715  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)), color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
2716}
2717/* done step */
2718.cmp .ribbon .step.done      { background: var(--c-aqua); border-color: var(--c-aqua); color: var(--c-techteal); }
2719.cmp .ribbon .step.done .num { background: var(--c-techteal); color: var(--c-green); }
2720.cmp .ribbon .step.done::after { content: "\2713"; font-size: 11px; font-weight: 700; color: var(--c-techteal); margin-left: auto; }
2721
2722/* ══ scenes ══ */
2723.cmp .scene {
2724  position: absolute; top: 60px; left: 16px; right: 16px; bottom: 16px;
2725  display: flex; flex-direction: column;
2726  opacity: 0; pointer-events: none; transition: opacity calc(.5s * var(--dur-scale,1)) ease;
2727}
2728.cmp .scene.active { opacity: 1; }
2729
2730/* shared scene heading */
2731.cmp .sc-label { font-family: 'Zodiak', Georgia, serif; font-size: 22px; font-weight: 600; letter-spacing: -.01em; color: var(--c-techteal); padding-left: 4px; }
2732.cmp .sc-sub   { font-size: 13px; color: var(--c-muted); line-height: 1.45; max-width: 94%; margin-top: 5px; padding-left: 4px; }
2733
2734/* ═════════ SCENE 1 — ORIENTATION (compass / radar) ═════════ */
2735.cmp .orient { flex: 1; display: flex; align-items: center; justify-content: center; margin-top: 4px; opacity: 0; }
2736.cmp .scene.active .orient { animation: cmp-fade calc(.5s * var(--dur-scale,1)) ease calc(.1s * var(--dur-scale,1)) both; }
2737.cmp .orient svg { width: 100%; height: 100%; max-width: 472px; overflow: visible; }
2738
2739.cmp .o-ring { fill: none; stroke: var(--c-techteal); stroke-opacity: .1; stroke-width: 1; opacity: 0; }
2740.cmp .o-disc { fill: var(--card-bg); filter: drop-shadow(0 3px 12px rgba(4,30,30,.10)); }   /* opaque white field behind the compass so it lifts off the page */
2741.cmp .scene.active .o-ring { animation: cmp-fade calc(.6s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
2742.cmp .o-axes { stroke: var(--c-techteal); stroke-opacity: .12; stroke-width: 1; stroke-dasharray: 3 4; opacity: 0; }
2743.cmp .scene.active .o-axes { animation: cmp-fade calc(.6s * var(--dur-scale,1)) ease calc(.3s * var(--dur-scale,1)) both; }
2744
2745.cmp .o-axis-label { font-size: 11px; font-weight: 700; letter-spacing: .06em; fill: var(--c-techteal); opacity: 0; }
2746.cmp .scene.active .o-axis-label.a1 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(.45s * var(--dur-scale,1)) both; }
2747.cmp .scene.active .o-axis-label.a2 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(.6s * var(--dur-scale,1)) both; }
2748.cmp .scene.active .o-axis-label.a3 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(.75s * var(--dur-scale,1)) both; }
2749.cmp .scene.active .o-axis-label.a4 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(.9s * var(--dur-scale,1)) both; }
2750
2751.cmp .o-poly { fill: var(--c-teal); fill-opacity: 0; stroke: var(--c-teal); stroke-width: 2; stroke-linejoin: round; stroke-dasharray: 620; stroke-dashoffset: 620; }
2752.cmp .scene.active .o-poly { animation: cmp-draw calc(1.5s * var(--dur-scale,1)) ease-out calc(1.1s * var(--dur-scale,1)) forwards, cmp-polyFill calc(.6s * var(--dur-scale,1)) ease-out calc(2.2s * var(--dur-scale,1)) forwards; }
2753
2754.cmp .o-dot { opacity: 0; transform-box: fill-box; transform-origin: center; }
2755.cmp .scene.active .o-dot { animation: cmp-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) both; }
2756.cmp .scene.active .o-dot.d1 { animation-delay: calc(1.35s * var(--dur-scale,1)); }
2757.cmp .scene.active .o-dot.d2 { animation-delay: calc(1.5s  * var(--dur-scale,1)); }
2758.cmp .scene.active .o-dot.d3 { animation-delay: calc(1.65s * var(--dur-scale,1)); }
2759.cmp .scene.active .o-dot.d4 { animation-delay: calc(1.8s  * var(--dur-scale,1)); }
2760
2761.cmp .o-pct { font-size: 11px; font-weight: 700; fill: var(--c-techteal); opacity: 0; }
2762.cmp .scene.active .o-pct.p1 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(1.5s  * var(--dur-scale,1)) both; }
2763.cmp .scene.active .o-pct.p2 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(1.65s * var(--dur-scale,1)) both; }
2764.cmp .scene.active .o-pct.p3 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(1.8s  * var(--dur-scale,1)) both; }
2765.cmp .scene.active .o-pct.p4 { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(1.95s * var(--dur-scale,1)) both; }
2766
2767.cmp .o-center { opacity: 0; }
2768.cmp .scene.active .o-center { animation: cmp-pop calc(.5s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(.9s * var(--dur-scale,1)) both; }
2769.cmp .o-center .o-core { animation: cmp-pulse calc(2.6s * var(--dur-scale,1)) ease-in-out infinite calc(2.4s * var(--dur-scale,1)); transform-box: fill-box; transform-origin: center; }
2770
2771.cmp .o-cap { margin-top: 6px; text-align: center; font-size: 12px; color: var(--c-muted); font-style: italic;
2771 opacity: 0; padding: 0 8px; }
2772.cmp .scene.active .o-cap { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(2.4s * var(--dur-scale,1)) both; }
2773
2774/* ═════════ SCENE 2 — INDICATORS (4 cards) ═════════ */
2775.cmp .ind-grid { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 16px; }
2776.cmp .ind {
2777  width: calc(50% - 6px); background: var(--card-bg); border: 1.5px solid var(--card-border);
2778  border-radius: 12px; box-shadow: var(--card-shadow); padding: 14px 16px 15px;
2779  position: relative; overflow: hidden; opacity: 0;
2780}
2781.cmp .ind .accent { position: absolute; top: 0; left: 0; right: 0; height: 4px; }
2782.cmp .ind.c1 .accent { background: var(--s-invest); }
2783.cmp .ind.c2 .accent { background: var(--s-compet); }
2784.cmp .ind.c3 .accent { background: var(--s-health); }
2785.cmp .ind.c4 .accent { background: var(--s-arch); }
2786.cmp .scene.active .ind.c1 { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.25s * var(--dur-scale,1)) both; }
2787.cmp .scene.active .ind.c2 { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.42s * var(--dur-scale,1)) both; }
2788.cmp .scene.active .ind.c3 { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.59s * var(--dur-scale,1)) both; }
2789.cmp .scene.active .ind.c4 { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.76s * var(--dur-scale,1)) both; }
2790
2791.cmp .ind .title { font-size: 11.5px; font-weight: 600; color: var(--c-midnight); margin-top: 4px; }
2792.cmp .ind .pct   { font-family: 'Zodiak', Georgia, serif; font-size: 34px; font-weight: 700; color: var(--c-techteal); letter-spacing: -.02em; line-height: 1; margin-top: 4px; }
2793.cmp .ind .status { display: inline-block; margin-top: 9px; padding: 4px 11px; border-radius: 999px; font-size: 9px; font-weight: 700; letter-spacing: .09em; }
2794.cmp .ind .status.lead  { background: var(--c-green);      color: var(--c-midnight); }
2795.cmp .ind .status.align { background: var(--c-aqua);       color: var(--c-techteal); }
2796.cmp .ind .status.trail { background: var(--c-purple-tint); color: var(--c-purple-dk); }
2797
2798.cmp .ind .bar-wrap { margin-top: 12px; }
2799.cmp .ind .bar-label { font-size: 8px; font-weight: 700; letter-spacing: .12em; color: var(--c-muted); margin-bottom: 6px; }
2800.cmp .ind .track { position: relative; height: 8px; border-radius: 999px; background: var(--c-track); }
2801.cmp .ind .fill { height: 100%; border-radius: 999px; background: var(--grad-track); transform-origin: left; transform: scaleX(0); }
2802.cmp .ind .knob {
2803  position: absolute; top: 50%; width: 13px; height: 13px; border-radius: 50%;
2804  background: #fff; transform: translate(-50%,-50%) scale(0);
2805  box-shadow: 0 1px 4px rgba(4,30,30,.25);
2806}
2807.cmp .ind.c1 .knob { border: 3px solid var(--s-invest); }
2808.cmp .ind.c2 .knob { border: 3px solid var(--s-compet); }
2809.cmp .ind.c3 .knob { border: 3px solid var(--s-health); }
2810.cmp .ind.c4 .knob { border: 3px solid var(--s-arch); }
2811.cmp .scene.active .ind.c1 .fill { animation: cmp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(.7s  * var(--dur-scale,1)) both; }
2812.cmp .scene.active .ind.c2 .fill { animation: cmp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(.87s * var(--dur-scale,1)) both; }
2813.cmp .scene.active .ind.c3 .fill { animation: cmp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(1.04s* var(--dur-scale,1)) both; }
2814.cmp .scene.active .ind.c4 .fill { animation: cmp-barGrow calc(.7s * var(--dur-scale,1)) ease calc(1.21s* var(--dur-scale,1)) both; }
2815.cmp .scene.active .ind.c1 .knob { animation: cmp-popk calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.15s * var(--dur-scale,1)) both; }
2816.cmp .scene.active .ind.c2 .knob { animation: cmp-popk calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.32s * var(--dur-scale,1)) both; }
2817.cmp .scene.active .ind.c3 .knob { animation: cmp-popk calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.49s * var(--dur-scale,1)) both; }
2818.cmp .scene.active .ind.c4 .knob { animation: cmp-popk calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.66s * var(--dur-scale,1)) both; }
2819
2820/* ═════════ SCENE 3 — TRENDS (multi-line history) ═════════ */
2821.cmp .trend-card {
2822  margin-top: 16px; flex: 1; display: flex; flex-direction: column;
2823  background: var(--card-bg); border: 1.5px solid var(--card-border);
2824  border-radius: 13px; box-shadow: var(--card-shadow); padding: 16px 18px 14px; opacity: 0;
2825}
2826.cmp .scene.active .trend-card { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
2827.cmp .trend-card .head { font-size: 12px; font-weight: 700; color: var(--c-techteal); display: flex; align-items: center; gap: 6px; }
2828.cmp .trend-card .head .hd-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--c-teal); flex-shrink: 0; }
2829.cmp .trend-card .sub  { font-size: 10.5px; color: var(--c-muted); margin-top: 3px; }
2830
2831.cmp .chart { flex: 1; display: flex; align-items: center; margin-top: 10px; min-height: 0; }
2832.cmp .plot { position: relative; width: 100%; }
2833.cmp .plot svg { width: 100%; height: auto; display: block; overflow: visible; }
2834.cmp .chart .grid { stroke: var(--c-techteal); stroke-opacity: .07; stroke-width: 1; }
2835.cmp .chart .axis { font-size: 13px; font-weight: 600; fill: var(--c-muted); }
2836
2837.cmp .chart .line { fill: none; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 760; stroke-dashoffset: 760; }
2838.cmp .chart .line.l1 { stroke: var(--s-invest); }
2839.cmp .chart .line.l2 { stroke: var(--s-compet); }
2840.cmp .chart .line.l3 { stroke: var(--s-health); }
2841.cmp .chart .line.l4 { stroke: var(--s-arch);   }
2842.cmp .scene.active .chart .line.l1 { animation: cmp-draw calc(1.3s * var(--dur-scale,1)) ease-out calc(.55s * var(--dur-scale,1)) forwards; }
2843.cmp .scene.active .chart .line.l2 { animation: cmp-draw calc(1.3s * var(--dur-scale,1)) ease-out calc(.72s * var(--dur-scale,1)) forwards; }
2844.cmp .scene.active .chart .line.l3 { animation: cmp-draw calc(1.3s * var(--dur-scale,1)) ease-out calc(.89s * var(--dur-scale,1)) forwards; }
2845.cmp .scene.active .chart .line.l4 { animation: cmp-draw calc(1.3s * var(--dur-scale,1)) ease-out calc(1.06s* var(--dur-scale,1)) forwards; }
2846.cmp .chart .endpt { opacity: 0; transform-box: fill-box; transform-origin: center; }
2847.cmp .scene.active .chart .endpt.e1 { animation: cmp-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.75s * var(--dur-scale,1)) both; }
2848.cmp .scene.active .chart .endpt.e2 { animation: cmp-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(1.9s  * var(--dur-scale,1)) both; }
2849.cmp .scene.active .chart .endpt.e3 { animation: cmp-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(2.05s * var(--dur-scale,1)) both; }
2850.cmp .scene.active .chart .endpt.e4 { animation: cmp-pop calc(.4s * var(--dur-scale,1)) cubic-bezier(.34,1.56,.64,1) calc(2.2s  * var(--dur-scale,1)) both; }
2851
2852.cmp .tip {
2853  position: absolute; right: 0; top: 0;
2854  background: var(--card-bg); border: 1.5px solid var(--c-techteal); border-radius: 10px;
2855  padding: 9px 12px; box-shadow: 0 6px 16px rgba(4,30,30,.14);
2856  opacity: 0; min-width: 168px;
2857}
2858.cmp .scene.active .tip { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(2.35s * var(--dur-scale,1)) both; }
2859.cmp .tip .tdate { font-size: 10.5px; font-weight: 700; color: var(--c-midnight); margin-bottom: 6px; }
2860.cmp .tip .trow { display: flex; align-items: center; gap: 7px; font-size: 10px; color: var(--c-muted); margin-top: 3px; }
2861.cmp .tip .trow .tdot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
2862.cmp .tip .trow b { color: var(--c-midnight); font-weight: 700; margin-left: auto; }
2863
2864.cmp .legend { display: flex; flex-wrap: wrap; gap: 6px 16px; justify-content: center; margin-top: 12px; font-size: 10px; color: var(--c-muted); }
2865.cmp .legend .li { display: inline-flex; align-items: center; gap: 6px; }
2866.cmp .legend .li .ld { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
2867
2868/* ═════════ SCENE 4 — SIGNALS (segment drill-down) ═════════ */
2869.cmp .seg-head {
2870  display: flex; align-items: center; gap: 13px; margin-top: 16px;
2871  background: var(--card-bg); border: 1.5px solid var(--card-border);
2872  border-radius: 12px; box-shadow: var(--card-shadow); padding: 12px 16px; opacity: 0;
2873}
2874.cmp .scene.active .seg-head { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
2875/* confirmed-segment check badge (replaces the old back arrow) */
2876.cmp .seg-check { width: 30px; height: 30px; border-radius: 50%; background: var(--grad-check); display: flex; align-items: center; justify-content: center; flex-shrink: 0; box-shadow: 0 0 10px rgba(226,255,101,.45); }
2877.cmp .seg-check svg { display: block; }
2878.cmp .seg-check .cpath { stroke: var(--c-midnight); stroke-width: 2.6; fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 20; stroke-dashoffset: 20; }
2879.cmp .scene.active .seg-check .cpath { animation: cmp-draw calc(.45s * var(--dur-scale,1)) ease calc(.55s * var(--dur-scale,1)) forwards; }
2880.cmp .seg-head .info { flex: 1; }
2881.cmp .seg-head .lbl  { font-size: 9px; font-weight: 700; letter-spacing: .14em; color: var(--c-muted); }
2882.cmp .seg-head .name { font-size: 15px; font-weight: 600; color: var(--c-midnight); margin-top: 2px; }
2883
2884.cmp .mini-grid { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
2885.cmp .mini {
2886  width: calc(50% - 4px); background: var(--card-bg); border: 1.5px solid var(--card-border);
2887  border-radius: 10px; box-shadow: var(--card-shadow); padding: 10px 13px; position: relative; overflow: hidden; opacity: 0;
2888}
2889.cmp .mini .accent { position: absolute; top: 0; left: 0; right: 0; height: 3px; }
2890.cmp .mini.m1 .accent { background: var(--s-invest); }
2891.cmp .mini.m2 .accent { background: var(--s-compet); }
2892.cmp .mini.m3 .accent { background: var(--s-health); }
2893.cmp .mini.m4 .accent { background: var(--s-arch); }
2894.cmp .scene.active .mini.m1 { animation: cmp-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(.5s  * var(--dur-scale,1)) both; }
2895.cmp .scene.active .mini.m2 { animation: cmp-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(.63s * var(--dur-scale,1)) both; }
2896.cmp .scene.active .mini.m3 { animation: cmp-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(.76s * var(--dur-scale,1)) both; }
2897.cmp .scene.active .mini.m4 { animation: cmp-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(.89s * var(--dur-scale,1)) both; }
2898.cmp .mini .mlbl  { font-size: 8px; font-weight: 700; letter-spacing: .11em; color: var(--c-muted); margin-top: 4px; }
2899.cmp .mini .mval  { font-family: 'Zodiak', Georgia, serif; font-size: 22px; font-weight: 700; color: var(--c-techteal); letter-spacing: -.02em; line-height: 1; margin-top: 4px; }
2900.cmp .mini .mdelta { display: inline-block; margin-top: 7px; padding: 2px 9px; border-radius: 999px; font-size: 8.5px; font-weight: 700; letter-spacing: .04em; }
2901.cmp .mini .mdelta.up   { background: var(--c-aqua);        color: var(--c-techteal); }
2902.cmp .mini .mdelta.down { background: var(--c-purple-tint); color: var(--c-purple-dk); }
2903
2904.cmp .signals { display: flex; gap: 10px; margin-top: 10px; }
2905.cmp .sig {
2906  flex: 1; background: var(--card-bg); border: 1.5px solid var(--card-border);
2907  border-radius: 12px; box-shadow: var(--card-shadow); padding: 11px 13px 12px; opacity: 0;
2908}
2909.cmp .scene.active .sig.sig1 { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.15s * var(--dur-scale,1)) both; }
2910.cmp .scene.active .sig.sig2 { animation: cmp-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.32s * var(--dur-scale,1)) both; }
2911.cmp .sig .head { display: flex; align-items: center; gap: 9px; margin-bottom: 9px; }
2912.cmp .sig .icon { width: 24px; height: 24px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; flex-shrink: 0; }
2913.cmp .sig.sig1 .icon { background: var(--c-green); color: var(--c-midnight); }
2914.cmp .sig.sig2 .icon { background: var(--c-techteal); }
2915.cmp .sig.sig2 .icon svg { display: block; }
2916.cmp .sig .stitle { font-size: 11.5px; font-weight: 600; color: var(--c-midnight); }
2917.cmp .sig .row { display: flex; justify-content: space-between; align-items: center; margin-top: 6px; }
2918.cmp .sig .row .k { font-size: 9px; font-weight: 700; letter-spacing: .1em; color: var(--c-muted); }
2919.cmp .sig .row .v { font-family: 'Zodiak', Georgia, serif; font-size: 16px; font-weight: 700; color: var(--c-midnight); }
2920.cmp .sig .spill {
2921  display: inline-flex; align-items: center; gap: 5px; margin-top: 11px;
2922  padding: 5px 11px; border-radius: 999px; font-size: 10px; font-weight: 700; opacity: 0;
2923}
2924.cmp .sig.sig1 .spill { background: var(--c-aqua);        color: var(--c-techteal); }
2925.cmp .sig.sig2 .spill { background: var(--c-purple-tint); color: var(--c-purple-dk); }
2926.cmp .scene.active .sig.sig1 .spill { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(1.7s  * var(--dur-scale,1)) both; }
2927.cmp .scene.active .sig.sig2 .spill { animation: cmp-fade calc(.4s * var(--dur-scale,1)) ease calc(1.87s * var(--dur-scale,1)) both; }
2928
2929/* ─────────── play / pause toggle (dev convenience — delete this block + the
2930   <button> + the JS listener to remove it entirely for production) ─────────── */
2931.cmp .cmp-toggle {
2932  position: absolute; bottom: 8px; right: 8px; z-index: 40;
2933  width: 24px; height: 24px; border-radius: 50%; padding: 0;
2934  border: 1px solid rgba(10,68,68,.2); background: rgba(255,255,255,.7);
2935  display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: .5;
2936  transition: opacity .2s ease, background .2s ease;
2937}
2938.cmp .cmp-toggle:hover { opacity: 1; background: #fff; }
2939.cmp .cmp-toggle svg { width: 11px; height: 11px; display: block; fill: var(--c-techteal); }
2940.cmp .cmp-toggle .ic-play { display: none; }
2941.cmp .cmp-toggle.paused .ic-pause { display: none; }
2942.cmp .cmp-toggle.paused .ic-play  { display: block; }
2943/* when paused, freeze every animation in the embed so you get a still frame */
2944.cmp .stage.is-paused *, .cmp .stage.is-paused *::before, .cmp .stage.is-paused *::after { animation-play-state: paused !important; }
2945</style>
2946
2947<!-- ╔══════════════╗
2948     ║    MARKUP    ║
2949     ╚══════════════╝ -->
2950<div class="cmp-fit">
2951<div class="cmp">
2952<div class="stage" id="cmp-stage">
2953
2954  <!-- Phase ribbon (single step indicator) -->
2955  <div class="ribbon">
2956    <div class="step" data-step="0"><span class="num">1</span>Orientation</div>
2957    <div class="step" data-step="1"><span class="num">2</span>Indicators</div>
2958    <div class="step" data-step="2"><span class="num">3</span>Trends</div>
2959    <div class="step" data-step="3"><span class="num">4</span>Signals</div>
2960  </div>
2961
2962  <!-- ══ SCENE 1: ORIENTATION ══ -->
2963  <div class="scene" id="cmp-scene-0">
2964    <div class="sc-label">See where you stand</div>
2965    <div class="sc-sub">Four indicators map your position within your cohort &mdash; at a glance.</div>
2966
2967    <div class="orient">
2968      <svg viewBox="-255 -168 510 336" xmlns="http://www.w3.org/2000/svg">
2969        <!-- Concentric rings -->
2970        <circle class="o-ring o-disc" r="128"/>
2971        <circle class="o-ring" r="96"/>
2972        <circle class="o-ring" r="64"/>
2973        <circle class="o-ring" r="32"/>
2974
2975        <!-- Cross axes -->
2976        <g class="o-axes">
2977          <line x1="-128" y1="0" x2="128" y2="0"/>
2978          <line x1="0" y1="-128" x2="0" y2="128"/>
2979        </g>
2980
2981        <!-- Axis labels (kept clear of the rings + percentile readouts) -->
2982        <text class="o-axis-label a1" x="0"    y="-142" text-anchor="middle">INVESTMENT</text>
2983        <text class="o-axis-label a2" x="140"  y="4"    text-anchor="start">COMPETITIVENESS</text>
2984        <text class="o-axis-label a3" x="0"    y="150"  text-anchor="middle">HEALTH</text>
2985        <text class="o-axis-label a4" x="-140" y="4"    text-anchor="end">ARCHITECTURE</text>
2986
2987        <!-- Position polygon — Investment 35 · Competitiveness 97 · Health 50 · Architecture 63 (scaled to r=128) -->
2988        <polygon class="o-poly" points="0,-45 124,0 0,64 -81,0"/>
2989
2990        <!-- Anchor dots (series colors) -->
2991        <g class="o-dot d1"><circle cx="0"   cy="-45" r="6" fill="var(--s-invest)" stroke="#fff" stroke-width="2"/></g>
2992        <g class="o-dot d2"><circle cx="124" cy="0"   r="6" fill="var(--s-compet)" stroke="#fff" stroke-width="2"/></g>
2993        <g class="o-dot d3"><circle cx="0"   cy="64"  r="6" fill="var(--s-health)" stroke="#fff" stroke-width="2"/></g>
2994        <g class="o-dot d4"><circle cx="-81" cy="0"   r="6" fill="var(--s-arch)"   stroke="#fff" stroke-width="2"/></g>
2995
2996        <!-- Percentile readouts (offset toward center so they never collide with axis labels) -->
2997        <text class="o-pct p1" x="12"   y="-40"                  >35th</text>
2998        <text class="o-pct p2" x="116"  y="-12" text-anchor="end">97th</text>
2999        <text class="o-pct p3" x="12"   y="68"                   >50th</text>
3000        <text class="o-pct p4" x="-73"  y="-12" text-anchor="start">63rd</text>
3001
3002        <!-- Center pin -->
3003        <g class="o-center">
3004          <circle r="11" fill="var(--c-techteal)"/>
3005          <circle class="o-core" r="4.5" fill="var(--c-green)"/>
3006        </g>
3007      </svg>
3008    </div>
3009
3010    <div class="o-cap">Each indicator is a <b>position</b> within your cohort &mdash; not a score.</div>
3011  </div>
3012
3013  <!-- ══ SCENE 2: INDICATORS ══ -->
3014  <div class="scene" id="cmp-scene-1">
3015    <div class="sc-label">Read the four indicators</div>
3016    <div class="sc-sub">Each percentile is benchmarked against the strategy cohort.</div>
3017
3018    <div class="ind-grid">
3019      <div class="ind c1">
3020        <div class="accent"></div>
3021        <div class="title">Workforce Investment</div>
3022        <div class="pct">35th</div>
3023        <div class="status trail">TRAILING THE COHORT</div>
3024        <div class="bar-wrap">
3025          <div class="bar-label">STRATEGY BENCHMARK</div>
3026          <div class="track"><div class="fill" style="width:35%"></div><div class="knob" style="left:35%"></div></div>
3027        </div>
3028      </div>
3029      <div class="ind c2">
3030        <div class="accent"></div>
3031        <div class="title">Market Competitiveness</div>
3032        <div class="pct">97th</div>
3033        <div class="status lead">LEADING THE COHORT</div>
3034        <div class="bar-wrap">
3035          <div class="bar-label">STRATEGY BENCHMARK</div>
3036          <div class="track"><div class="fill" style="width:97%"></div><div class="knob" style="left:97%"></div></div>
3037        </div>
3038      </div>
3039      <div class="ind c3">
3040        <div class="accent"></div>
3041        <div class="title">Workforce Health</div>
3042        <div class="pct">50th</div>
3043        <div class="status align">ALIGNED WITH COHORT</div>
3044        <div class="bar-wrap">
3045          <div class="bar-label">STRATEGY BENCHMARK</div>
3046          <div class="track"><div class="fill" style="width:50%"></div><div class="knob" style="left:50%"></div></div>
3047        </div>
3048      </div>
3049      <div class="ind c4">
3050        <div class="accent"></div>
3051        <div class="title">Workforce Architecture</div>
3052        <div class="pct">63rd</div>
3053        <div class="status align">ALIGNED WITH COHORT</div>
3054        <div class="bar-wrap">
3055          <div class="bar-label">STRATEGY BENCHMARK</div>
3056          <div class="track"><div class="fill" style="width:63%"></div><div class="knob" style="left:63%"></div></div>
3057        </div>
3058      </div>
3059    </div>
3060  </div>
3061
3062  <!-- ══ SCENE 3: TRENDS ══ -->
3063  <div class="scene" id="cmp-scene-2">
3064    <div class="sc-label">Watch your position move</div>
3065    <div class="sc-sub">How each indicator has tracked against the cohort over time.</div>
3066
3067    <div class="trend-card">
3068      <div class="head"><span class="hd-dot"></span>Position trends over time</div>
3069      <div class="sub">Percentile vs. cohort &mdash; Mar to May 2026</div>
3070
3071      <div class="chart">
3072        <div class="plot">
3073        <svg viewBox="0 0 600 300" xmlns="http://www.w3.org/2000/svg">
3074          <!-- gridlines (plot area y: 12 → 240) -->
3075          <g class="grid">
3076            <line x1="42" y1="12"  x2="590" y2="12"/>
3077            <line x1="42" y1="69"  x2="590" y2="69"/>
3077
3078            <line x1="42" y1="126" x2="590" y2="126"/>
3079            <line x1="42" y1="183" x2="590" y2="183"/>
3080            <line x1="42" y1="240" x2="590" y2="240"/>
3081          </g>
3082          <!-- Y axis labels (right-aligned, padded clear of the plot at x=34) -->
3083          <g class="axis" text-anchor="end">
3084            <text x="34" y="16">100</text>
3085            <text x="34" y="73">75</text>
3086            <text x="34" y="130">50</text>
3087            <text x="34" y="187">25</text>
3088            <text x="34" y="244">0</text>
3089          </g>
3090          <!-- X axis labels (below the plot at y=266, ends anchored inward so they never clip) -->
3091          <g class="axis">
3092            <text x="42"  y="266" text-anchor="start" >1 Mar</text>
3093            <text x="316" y="266" text-anchor="middle">1 Apr</text>
3094            <text x="590" y="266" text-anchor="end"   >1 May</text>
3095          </g>
3096
3097          <!-- trend lines (latest point = scene-1/2 values: Inv 35 · Comp 97 · Health 50 · Arch 63) -->
3098          <polyline class="line l1" points="42,131 316,144 590,160"/>  <!-- Investment -->
3099          <polyline class="line l2" points="42,48 316,33 590,19"/>     <!-- Competitiveness -->
3100          <polyline class="line l3" points="42,99 316,140 590,126"/>   <!-- Health -->
3101          <polyline class="line l4" points="42,112 316,103 590,96"/>   <!-- Architecture -->
3102
3103          <!-- endpoints -->
3104          <g class="endpt e1"><circle cx="590" cy="160" r="5" fill="var(--s-invest)" stroke="#fff" stroke-width="1.6"/></g>
3105          <g class="endpt e2"><circle cx="590" cy="19"  r="5" fill="var(--s-compet)" stroke="#fff" stroke-width="1.6"/></g>
3106          <g class="endpt e3"><circle cx="590" cy="126" r="5" fill="var(--s-health)" stroke="#fff" stroke-width="1.6"/></g>
3107          <g class="endpt e4"><circle cx="590" cy="96"  r="5" fill="var(--s-arch)"   stroke="#fff" stroke-width="1.6"/></g>
3108        </svg>
3109
3110        <div class="tip">
3111          <div class="tdate">May 2026 &mdash; latest</div>
3112          <div class="trow"><span class="tdot" style="background:var(--s-invest)"></span>Investment <b>35th</b></div>
3113          <div class="trow"><span class="tdot" style="background:var(--s-compet)"></span>Competitiveness <b>97th</b></div>
3114          <div class="trow"><span class="tdot" style="background:var(--s-health)"></span>Health <b>50th</b></div>
3115          <div class="trow"><span class="tdot" style="background:var(--s-arch)"></span>Architecture <b>63rd</b></div>
3116        </div>
3117        </div>
3118      </div>
3119
3120      <div class="legend">
3121        <span class="li"><span class="ld" style="background:var(--s-invest)"></span>Investment</span>
3122        <span class="li"><span class="ld" style="background:var(--s-compet)"></span>Competitiveness</span>
3123        <span class="li"><span class="ld" style="background:var(--s-health)"></span>Health</span>
3124        <span class="li"><span class="ld" style="background:var(--s-arch)"></span>Architecture</span>
3125      </div>
3126    </div>
3127  </div>
3128
3129  <!-- ══ SCENE 4: SIGNALS (segment drill-down) ══ -->
3130  <div class="scene" id="cmp-scene-3">
3131    <div class="sc-label">Drill into a segment</div>
3132    <div class="sc-sub">Zoom to one group and surface the signals worth acting on.</div>
3133
3134    <div class="seg-head">
3135      <div class="seg-check">
3136        <svg width="15" height="15" viewBox="0 0 16 16"><polyline class="cpath" points="3,8.5 6.6,12 13,4"/></svg>
3137      </div>
3138      <div class="info">
3139        <div class="lbl">SEGMENT &middot; PEOPLE</div>
3140        <div class="name">5 jobs &middot; 13 employees</div>
3141      </div>
3142    </div>
3143
3144    <div class="mini-grid">
3145      <div class="mini m1">
3146        <div class="accent"></div>
3147        <div class="mlbl">INVESTMENT</div>
3148        <div class="mval">34th</div>
3149        <div class="mdelta down">&minus;1pp vs org</div>
3150      </div>
3151      <div class="mini m2">
3152        <div class="accent"></div>
3153        <div class="mlbl">COMPETITIVENESS</div>
3154        <div class="mval">76th</div>
3155        <div class="mdelta down">&minus;21pp vs org</div>
3156      </div>
3157      <div class="mini m3">
3158        <div class="accent"></div>
3159        <div class="mlbl">HEALTH</div>
3160        <div class="mval">75th</div>
3161        <div class="mdelta up">+25pp vs org</div>
3162      </div>
3163      <div class="mini m4">
3164        <div class="accent"></div>
3165        <div class="mlbl">ARCHITECTURE</div>
3166        <div class="mval">41st</div>
3167        <div class="mdelta down">&minus;22pp vs org</div>
3168      </div>
3169    </div>
3170
3171    <div class="signals">
3172      <div class="sig sig1">
3173        <div class="head">
3174          <div class="icon">$</div>
3175          <div class="stitle">Investment Signal</div>
3176        </div>
3177        <div class="row"><span class="k">SPEND</span><span class="v">$2.6M</span></div>
3178        <div class="row"><span class="k">% OF ORG</span><span class="v">4.2%</span></div>
3179        <div class="spill">&#8599; High investment</div>
3180      </div>
3181      <div class="sig sig2">
3182        <div class="head">
3183          <!-- "optimization signal" — a target/dial glyph that rhymes with the Scene 1 compass -->
3184          <div class="icon">
3185            <svg width="16" height="16" viewBox="0 0 24 24">
3186              <circle cx="12" cy="12" r="8.5" fill="none" stroke="#fff" stroke-width="2"/>
3187              <circle cx="12" cy="12" r="3.4" fill="var(--c-green)"/>
3188              <line x1="12" y1="1.5"  x2="12" y2="5"  stroke="#fff" stroke-width="2" stroke-linecap="round"/>
3189              <line x1="12" y1="19"   x2="12" y2="22.5" stroke="#fff" stroke-width="2" stroke-linecap="round"/>
3190              <line x1="1.5"  y1="12" x2="5"  y2="12" stroke="#fff" stroke-width="2" stroke-linecap="round"/>
3191              <line x1="19"   y1="12" x2="22.5" y2="12" stroke="#fff" stroke-width="2" stroke-linecap="round"/>
3192            </svg>
3193          </div>
3194          <div class="stitle">Optimization Signal</div>
3195        </div>
3196        <div class="row"><span class="k">TENURE</span><span class="v">6Y</span></div>
3197        <div class="row"><span class="k">AVG PIR</span><span class="v">56.1%</span></div>
3198        <div class="spill">&#9888; Retention risk</div>
3199      </div>
3200    </div>
3201  </div>
3202
3203  <!-- play / pause toggle (dev convenience) -->
3204  <button class="cmp-toggle" id="cmp-toggle" type="button" aria-label="Pause animation">
3205    <svg class="ic-pause" viewBox="0 0 12 12"><rect x="2" y="1.5" width="2.6" height="9" rx="0.6"/><rect x="7.4" y="1.5" width="2.6" height="9" rx="0.6"/></svg>
3206    <svg class="ic-play"  viewBox="0 0 12 12"><path d="M3.8 2.4 L10.8 6 L3.8 9.6 Z"/></svg>
3207  </button>
3208
3209</div><!-- /.stage -->
3210</div><!-- /.cmp -->
3211</div><!-- /.cmp-fit -->
3212
3213<script>
3214(function () {
3215  /* Scoped to this embed's root — safe if multiple embeds live on the page */
3216  var root   = document.getElementById('cmp-stage');
3217  var scenes = root.querySelectorAll('.scene');
3218  var steps  = root.querySelectorAll('.ribbon .step');
3219  var btn    = document.getElementById('cmp-toggle');
3220
3221  /* ── responsive scaling ──
3222     Scale the whole embed to its column's width (measured directly — robust in
3223     any layout). The wrapper's aspect-ratio reserves the matching height. */
3224  var fit = root.closest('.cmp-fit');
3225  if (fit) {
3226    var nativeW = parseFloat(getComputedStyle(fit).getPropertyValue('--cmp-w')) || 580;
3227    var rescale = function () {
3228      fit.style.setProperty('--cmp-scale', (fit.clientWidth / nativeW).toFixed(4));
3229    };
3230    rescale();
3231    if (window.ResizeObserver) new ResizeObserver(rescale).observe(fit);
3232    else window.addEventListener('resize', rescale);
3233  }
3234
3235  /* ── read the --speed flag set at the top of the CSS ──
3236     >0 scales both the scene timing AND every CSS animation/transition
3237     (via --dur-scale).  0 = static: reveal Scene 1 fully formed, no loop. */
3238  var speed = parseFloat(getComputedStyle(root).getPropertyValue('--speed'));
3239  if (isNaN(speed)) speed = 1;
3240  var animate = speed > 0;
3241  root.style.setProperty('--dur-scale', animate ? (1 / speed) : 0);
3242
3243  /* show / hide the dev play-pause button (reads --show-toggle from the CSS) */
3244  if (parseFloat(getComputedStyle(root).getPropertyValue('--show-toggle')) === 0) {
3245    btn.style.display = 'none';
3246  }
3247
3248  var times = [7000, 7200, 7400, 7600].map(function (t) {   /* base scene durations (ms) */
3249    return animate ? t / speed : 0;
3250  });
3251
3252  var cur = 0, timer = null, paused = false;
3253
3254  function show(i) {
3255    clearTimeout(timer);
3256    scenes.forEach(function (s, j) { s.classList.toggle('active', j === i); });
3257    steps.forEach(function (s, j) {
3258      s.classList.remove('active', 'done');
3259      if      (j < i)   s.classList.add('done');
3260      else if (j === i) s.classList.add('active');
3261    });
3262    cur = i;
3263    if (animate && !paused) timer = setTimeout(next, times[i]);
3264  }
3265  function next() { show((cur + 1) % scenes.length); }
3266
3267  /* play / pause toggle (dev convenience — remove btn + this listener for production) */
3268  btn.addEventListener('click', function () {
3269    paused = !paused;
3270    btn.classList.toggle('paused', paused);
3271    btn.setAttribute('aria-label', paused ? 'Play animation' : 'Pause animation');
3272    root.classList.toggle('is-paused', paused);          /* freezes all CSS motion */
3273    if (paused)        clearTimeout(timer);
3274    else if (animate)  timer = setTimeout(next, times[cur]);   /* resume current scene */
3275  });
3276
3277  /* Starts when scrolled into view, then fires once.
3278     To play immediately on page load instead, delete the observer
3279     block below and replace it with a single line:  show(0); */
3280  var observer = new IntersectionObserver(function (entries) {
3281    entries.forEach(function (entry) {
3282      if (entry.isIntersecting) { show(0); observer.disconnect(); }
3283    });
3284  }, { threshold: 0.25 });
3285
3286  observer.observe(root);
3287}());
3288</script>
3288</div></div></div><div class="persona-card bg-offwhite"><div class="persona-card_embed"><div class="w-embed"><!-- ============================================================
3289     Payscale · Particle Cloud Embed  ·  DARK  ·  namespace: pcl   (v9)
3290     Self-contained. Drop into a Webflow HTML Embed inside a dark
3291     image container. Auto-sizes to hug its visible content, scales
3292     to any container size, all breakpoints.
3293
3294     WHAT'S NEW IN v9
3295     • Avatars re-exported at higher quality (64px source, less
3296       compression) — nothing else changed from v8.
3297
3298     No external resources (Inter / Zodiak assumed loaded site-wide).
3299     ============================================================ -->
3300
3301<style>
3302.pcl{
3303/* === PANEL-START === */
3304
3305  /* === GLOBAL === */
3306  --slide-speed:    1;     /* slide cycle tempo. 0 = no auto-advance (show scene 1 only) */
3307  --particle-spin:  0.4;   /* particle CLOUD ROTATION speed. 0 = cloud frozen (no rotation) */
3308  --particle-motion: 0.7;    /* INDIVIDUAL particle drift. 1 = current · 0 = frozen in place (cloud still spins) */
3309  --particle-energy: 0.6;  /* how much particles wander / shoot outward. 1 = lively · lower = calmer, fewer "escaping" particles */
3310  --allow-upscale:  1;     /* 1 = fill container even past native size · 0 = never upscale (crisper) */
3311  --hug-pad:        0;    /* transparent breathing room around content so glow/shadow never clips (px) */
3312  /* Dev play/pause button:  1 = show   ·   0 = hide */
3313  --show-toggle: 0;
3314  --dur-scale:      1;     /* derived from --slide-speed in JS — don't hand-edit */
3315
3316  /* === PARTICLE CLOUD === */
3317  --cloud-size:      290;  /* base diameter of the cloud (px). Smaller = tighter to the logo */
3318  --particle-spread: 1.1;  /* how far particles fan out past the logo (×) */
3319  --particle-volume: 0.9;    /* particle density (×) */
3320  --particle-size:   2.4;  /* radius of each particle dot (px) */
3321  --logo-size:       0.32; /* logo width as a FRACTION of cloud diameter (relative size) */
3322  --logo-fill:       #0a4444;          /* logo mark color */
3323  --logo-url:        default;          /* "default" = built-in Payscale mark · or "https://...png" */
3324  --particle-colors: #F4F2EA, #B9DCD3, #23A4B5, #1C8391, #0A4444, #B399F8, #E2FF65;
3325
3326  /* === PILLS (shared) === */
3327  --pill-radius:      150;             /* DEFAULT distance from cloud center to each pill (px) */
3328  /* GLASS LOOK: --pill-tint is the dark color under the glass; --pill-tint-strength
3329     is its opacity (0 = clear glass, 1 = solid, hides blur). --pill-blur blurs
3330     whatever's behind the pill (the particle cloud) through that glass. */
3331  --pill-tint:           10,68,68;      /* R,G,B only (no alpha) — the glass tint color */
3332  --pill-tint-strength:  0.6;         /* 0–1 opacity of the tint over the blurred backdrop */
3333  --pill-bg:          rgba(var(--pill-tint), var(--pill-tint-strength));   /* derived — don't hand-edit, use the two above */
3334  --pill-blur:        22px;            /* blur radius applied to whatever's behind the pill (the cloud) */
3335  --pill-border:      rgba(244,242,234,.22);
3336  --pill-text-color:  #FFFFFF;
3337  --pill-text-size:   16px;
3338  --pill-text-weight: 500;
3339  --pill-pad-y:       11px;
3340  --pill-pad-x:       20px;
3341  --pill-radius-corner: 999px;
3342  /* the small glowing status dot on each pill */
3343  --show-dot:    1;
3344  --dot-size:    7px;
3345  --dot-color-a: #23A4B5;  /* glow color A (teal) */
3346  --dot-color-b: #E2FF65;  /* glow color B (lime) */
3347  --dot-glow-dur: 2s;    /* full teal→lime→teal cycle */
3348  --dot-stagger: 0.33s;    /* offset between each dot's glow so they don't pulse in unison (0 = all in sync) */
3349
3350  /* === STAT TEXT (data scene) === */
3351  --stat-metric-color:  #FFFFFF;
3352  --stat-metric-size:   38px;
3353  --stat-metric-weight: 700;
3354  --stat-suffix-color:  #E2FF65;       /* the "M+" / "K+" unit */
3355  --stat-suffix-size:   30px;
3356  --stat-label-color:   rgba(255,255,255,.8);
3357  --stat-label-size:    11px;
3358  --stat-label-weight:  600;
3359  --stat-gap:           8px;            /* vertical space between metric and label */
3360  --stat-min-width:     0px;
3360            /* 0 = cards hug their own content (so they vary in size) */
3361  --stat-pad-y:         14px;           /* default stat-card vertical padding */
3362  --stat-pad-x:         16px;           /* default stat-card horizontal padding (tighter than before so it hugs) */
3363
3364  /* === KICKER === */
3365  --show-kicker:    1;     /* 0 = hide eyebrow; layout shifts up to hug */
3366  --kicker-color:   #E2FF65;
3367  --kicker-color-dark:   #0A4444;
3368  --kicker-size:    12px;
3369  --kicker-weight:  600;
3370  --kicker-tracking: .16em;
3371  --kicker-gap:     40;    /* distance from the kicker down to the TOP-MOST pill — kept equal across all scenes (px) */
3372
3373  /* === RIBBON === */
3374  --show-ribbon: 0;        /* scene indicator dots (auto-matches the number of scenes) */
3375  --ribbon-off:  rgba(244,242,234,.18);
3376  --ribbon-on:   linear-gradient(90deg,#23A4B5,#E2FF65);
3377  --ribbon-gap:  16px;     /* gap between content and ribbon */
3378
3379  /* ================================================================
3380     PER-SCENE PILL PLACEMENT — each scene is config'd by a NAMED KEY
3381     (not a position number); every scene reads its config off its own
3382     `data-key` attribute, so REORDERING SCENES IS FREE — cut/paste a
3383     whole `.pcl-scene[data-key]` block anywhere and timing/spacing/
3384     padding follow. Per KEY you set:
3385       --KEY-mode    auto → pills spread EVENLY (360°/count), rotated
3386                     by --KEY-start · manual → exact angle (--KEY-a1…a8)
3387       --KEY-start   AUTO only: rotation of the even spread.
3388       --KEY-radius  distance of pills from center.
3389       --KEY-dur     dwell time on screen (ms).
3390       --KEY-a1…a8   MANUAL only: exact angle of each pill.
3391     ANGLES ARE CLOCK POSITIONS, 0/360=12 o'clock, CLOCKWISE:
3392       30=1·60=2·90=3·120=4·150=5·180=6·210=7·240=8·270=9·300=10·330=11
3393     ================================================================ */
3394
3395  /* ---------- KEY "cards" · Powered by ---------- */
3396  --cards-mode:   auto;               /* evenly spread → 3 active cards land at exact thirds, 120° apart */
3397  --cards-start:  55deg;              /* rotation of the even spread */
3398  --cards-radius: 152;                /* cards are wider, a bit more room */
3399  --cards-dur:    4900;
3400  --cards-pad-y:  var(--stat-pad-y);  /* per-scene card padding */
3401  --cards-pad-x:  var(--stat-pad-x);
3402  --cards-a1: 55deg;  --cards-a2: 145deg; --cards-a3: 235deg; --cards-a4: 325deg;  /* only used if mode:manual */
3403  --cards-a5: 0deg;   --cards-a6: 90deg;  --cards-a7: 180deg; --cards-a8: 270deg;
3404
3405  /* ---------- KEY "sol" · Solutions (icon-led) ---------- */
3406  --sol-mode:   auto;                 /* auto = evenly spread, each 1/3 of the arc (120°) apart */
3407  --sol-start:  20deg;                /* staggered off vertical so it's not symmetrical */
3408  --sol-radius: var(--pill-radius);
3409  --sol-dur:    4500;
3410  --sol-pad-y:  var(--pill-pad-y);    /* per-scene pill padding */
3411  --sol-pad-x:  var(--pill-pad-x);
3412  --sol-a1: 50deg;  --sol-a2: 145deg; --sol-a3: 275deg; --sol-a4: 90deg;   /* only used if mode:manual */
3413  --sol-a5: 150deg; --sol-a6: 210deg; --sol-a7: 270deg; --sol-a8: 330deg;
3414
3415  /* ---------- KEY "built" · Built for (avatar-led) ---------- */
3416  --built-mode:   manual;
3417  --built-start:  30deg;                /* 4 pills → 1·4·7·10 o'clock */
3418  --built-radius: var(--pill-radius);
3419  --built-dur:    5400;
3420  --built-pad-y:  var(--pill-pad-y);    /* per-scene pill padding */
3421  --built-pad-x:  var(--pill-pad-x);
3422  --built-a1: 30deg;  --built-a2: 110deg; --built-a3: 210deg; --built-a4: 287deg;  /* only used if mode:manual */
3423  --built-a5: 60deg;  --built-a6: 150deg; --built-a7: 240deg; --built-a8: 330deg;
3424
3425  /* To add a scene: copy a .pcl-scene block with a fresh data-key, then add a
3426     matching --KEY-mode/-start/-radius/-dur/-a1…a8 block here. Auto-picked up. */
3427
3428  /* === ICON CHIP (Solutions scene) === */
3429  --icon-chip-show:      1;              /* 1 = show icon chip leading each pill · 0 = hide (pill text only) */
3430  --icon-chip-size:      27px;           /* width/height of the chip */
3431  --icon-chip-radius:    9px;            /* corner radius — rounded rect centers non-square icon art better than a circle */
3432  --icon-chip-bg:        #F4F2EA;        /* light backing so the icons' dark strokes stay legible on the dark glass */
3433  --icon-chip-ring:      rgba(4,30,30,.18); /* thin inner ring for definition against the light chip */
3434  --icon-chip-icon-size: 19px;           /* icon size inside the chip */
3435
3436  /* === AVATAR (Built-for scene) === */
3437  --avatar-show:       1;                    /* 1 = show persona headshot leading each pill · 0 = hide (pill text only) */
3438  --avatar-size:       32px;                 /* diameter of each avatar */  --avatar-ring-color: rgba(244,242,234,.4); /* border ring around each photo */
3439  --avatar-ring-width: 2px;
3440  --avatar-grayscale:  0;
3440                    /* 0–1 · 1 = fully desaturate headshots if you want a cooler, quieter look */
3441
3442/* === PANEL-END === */
3443
3444  position: relative;
3445  font-family: 'Inter', system-ui, sans-serif;
3446  isolation: isolate;
3447  background: transparent;
3448}
3449
3450/* ---------- responsive wrapper: scales the whole pixel-tuned stage ---------- */
3451.pcl-fit{
3452  --pcl-w: 720;            /* set by JS from auto-hug — placeholder only */
3453  --pcl-h: 480;
3454  --pcl-scale: 1;
3455  position: relative;
3456  display: block;
3457  width: 100%;
3458  min-width: 0;
3459  max-width: calc(var(--pcl-w) * 1px);   /* JS removes this cap when --allow-upscale:1 */
3460  aspect-ratio: var(--pcl-w) / var(--pcl-h);
3461  margin: 0 auto;
3462}
3463.pcl-fit .pcl{
3464  position: absolute; top: 0; left: 0;
3465  width: calc(var(--pcl-w) * 1px);
3466  height: calc(var(--pcl-h) * 1px);
3467  transform-origin: top left;
3468  transform: scale(var(--pcl-scale, 1));
3469}
3470
3471/* ---------- canvas cloud (the constant hero) ---------- */
3472.pcl-canvas{
3473  position:absolute; inset:0; width:100%; height:100%;
3474  display:block; pointer-events:none; z-index:1;
3475}
3476
3477/* ---------- scenes ---------- */
3478.pcl-scene{
3479  position:absolute; inset:0; z-index:4;
3480  opacity:0; pointer-events:none;
3481  transition: opacity calc(620ms * var(--dur-scale,1)) cubic-bezier(0.16,1,0.3,1);
3482}
3483.pcl-scene.active{ opacity:1; }
3484
3485.pcl-kicker{
3486  position:absolute; transform:translate(-50%,-50%);
3487  color:var(--kicker-color-dark);
3488  font-size:var(--kicker-size); font-weight:var(--kicker-weight);
3489  letter-spacing:var(--kicker-tracking); text-transform:uppercase;
3490  white-space:nowrap; opacity:0;
3491}
3492.pcl-scene.active .pcl-kicker{
3493  animation: pcl-rise calc(640ms * var(--dur-scale,1)) cubic-bezier(0.16,1,0.3,1) both;
3494}
3495
3496.pcl-item{
3497  position:absolute; transform:translate(-50%,-50%);
3498  opacity:0; will-change:opacity, transform;
3499}
3500.pcl-item.pcl-off{ display:none !important; }   /* disabled pill — delete "pcl-off" to enable */
3501.pcl-scene.active .pcl-item{
3502  animation: pcl-rise calc(720ms * var(--dur-scale,1)) cubic-bezier(0.16,1,0.3,1) both;
3503  animation-delay: calc((140ms + var(--i,0) * 120ms) * var(--dur-scale,1));
3504}
3505@keyframes pcl-rise{
3506  from{ opacity:0; transform:translate(-50%,calc(-50% + 12px)) scale(.94); }
3507  to  { opacity:1; transform:translate(-50%,-50%) scale(1); }
3508}
3509
3510/* ---------- glass pill ---------- */
3511.pcl-pill{
3512  display:inline-flex; align-items:center; gap:9px;
3513  padding:var(--pill-pad-y) var(--pill-pad-x);
3514  border-radius:var(--pill-radius-corner);
3515  background:var(--pill-bg);
3516  -webkit-backdrop-filter:blur(var(--pill-blur)) saturate(150%);
3517  backdrop-filter:blur(var(--pill-blur)) saturate(150%);
3518  border:1px solid var(--pill-border);
3519  box-shadow:0 14px 40px rgba(4,30,30,.45), inset 0 1px 0 rgba(244,242,234,.20);
3520  color:var(--pill-text-color);
3521  font-size:var(--pill-text-size); font-weight:var(--pill-text-weight); letter-spacing:.005em;
3522  white-space:nowrap; position:relative; overflow:hidden;
3523}
3524.pcl-pill::before{
3525  content:''; position:absolute; left:0; top:0; right:0; height:46%;
3526  background:linear-gradient(to bottom, rgba(244,242,234,.16), transparent);
3527  pointer-events:none;
3528}
3529.pcl-dot{
3530  width:var(--dot-size); height:var(--dot-size); border-radius:50%; flex:0 0 auto;
3531  background:var(--dot-color-a); box-shadow:0 0 8px var(--dot-color-a);
3532  animation: pcl-dot-glow var(--dot-glow-dur) ease-in-out infinite;
3533  animation-delay: calc(var(--i,0) * var(--dot-stagger,0s) * -1);  /* negative = instantly desynced */
3534}
3535.pcl[data-dot="0"] .pcl-dot{ display:none; }
3536@keyframes pcl-dot-glow{
3537  0%,100%{ background:var(--dot-color-a); box-shadow:0 0 8px var(--dot-color-a); }
3538  50%    { background:var(--dot-color-b); box-shadow:0 0 11px var(--dot-color-b); }
3539}
3540
3541/* ---------- icon chip (Solutions: pill leads with an icon, not a dot) ---------- */
3542.pcl-icon-chip{
3543  width:var(--icon-chip-size); height:var(--icon-chip-size); flex:0 0 auto;
3544  border-radius:var(--icon-chip-radius); background:var(--icon-chip-bg);
3545  display:flex; align-items:center; justify-content:center;
3546  box-shadow:inset 0 0 0 1px var(--icon-chip-ring), 0 2px 6px rgba(4,30,30,.35);
3547}
3548.pcl-icon-chip svg{ width:var(--icon-chip-icon-size); height:var(--icon-chip-icon-size); display:block; }
3549.pcl[data-icon="0"] .pcl-icon-chip{ display:none; }
3550
3551/* ---------- avatar (Built-for: pill leads with a headshot, not a dot) ---------- */
3552.pcl-avatar{
3553  width:var(--avatar-size); height:var(--avatar-size); flex:0 0 auto;
3554  border-radius:50%; overflow:hidden;
3555  box-shadow:0 0 0 var(--avatar-ring-width) var(--avatar-ring-color), 0 2px 6px rgba(4,30,30,.35);
3556}
3557.pcl-avatar img{ width:100%; height:100%; object-fit:cover; display:block; filter:grayscale(var(--avatar-grayscale,0)); }
3558.pcl[data-avatar="0"] .pcl-avatar{ display:none; }
3559
3560
3561/* ---------- glass stat card ---------- */
3562.pcl-stat{
3563  min-width:var(--stat-min-width);
3564  padding:var(--stat-pad-y) var(--stat-pad-x);
3565  border-radius:16px;
3566  background:var(--pill-bg);
3567  -webkit-backdrop-filter:blur(var(--pill-blur)) saturate(150%);
3568  backdrop-filter:blur(var(--pill-blur)) saturate(150%);
3569  border:1px solid var(--pill-border);
3570  box-shadow:0 14px 40px rgba(4,30,30,.45), inset 0 1px 0 rgba(244,242,234,.20);
3571  text-align:center; position:relative; overflow:hidden;
3572}
3573.pcl-stat::before{
3574  content:''; position:absolute; left:0; top:0; right:0; height:40%;
3575  background:linear-gradient(to bottom, rgba(244,242,234,.16), transparent);
3576  pointer-events:none;
3577}
3578.pcl-metricrow{
3579  font-family:'Zodiak', Georgia, serif; line-height:1; letter-spacing:-.01em;
3580  display:flex; align-items:baseline; justify-content:center;
3581}
3582.pcl-metric{ color:var(--stat-metric-color); font-size:var(--stat-metric-size); font-weight:var(--stat-metric-weight); }
3583.pcl-suffix{ color:var(--stat-suffix-color); font-size:var(--stat-suffix-size); font-weight:var(--stat-metric-weight); margin-left:1px; }
3584.pcl-lab{
3585  margin-top:var(--stat-gap);
3586  color:var(--stat-label-color); font-size:var(--stat-label-size); font-weight:var(--stat-label-weight);
3587  letter-spacing:.12em; text-transform:uppercase; white-space:nowrap;
3588}
3589
3590/* ---------- per-scene padding (set --KEY-pad-x/-y in the panel) — keyed off
3591   data-key, not DOM order, so reordering .pcl-scene blocks just works. */
3592.pcl-scene[data-key="cards"] .pcl-pill, .pcl-scene[data-key="cards"] .pcl-stat{ padding:var(--cards-pad-y) var(--cards-pad-x); }
3593.pcl-scene[data-key="sol"]   .pcl-pill, .pcl-scene[data-key="sol"]   .pcl-stat{ padding:var(--sol-pad-y) var(--sol-pad-x); }
3594.pcl-scene[data-key="built"] .pcl-pill, .pcl-scene[data-key="built"] .pcl-stat{ padding:var(--built-pad-y) var(--built-pad-x); }
3595
3596/* ---------- ribbon ---------- */
3597.pcl-ribbon{ position:absolute; transform:translate(-50%,-50%); z-index:5; display:flex; gap:8px; }
3598.pcl-seg{
3599  width:22px; height:4px; border-radius:999px; background:var(--ribbon-off);
3600  transition: width calc(420ms * var(--dur-scale,1)) cubic-bezier(0.16,1,0.3,1),
3601              background calc(420ms * var(--dur-scale,1)) ease;
3602}
3603.pcl-seg.active{ width:40px; background:var(--ribbon-on); }
3604
3605/* ---------- slide-static (when --slide-speed:0) ---------- */
3606.pcl.is-slidestatic .pcl-scene.active .pcl-item,
3607.pcl.is-slidestatic .pcl-scene.active .pcl-kicker{ animation:none; opacity:1; transform:translate(-50%,-50%); }
3608
3609/* === dev play/pause toggle (see --show-toggle) === */
3610.pcl-toggle{
3611  position:absolute; right:10px; bottom:10px; z-index:20;
3612  width:28px; height:28px; border-radius:50%; display:none;
3613  align-items:center; justify-content:center; padding:0;
3614  background:rgba(4,30,30,.6); border:1px solid rgba(244,242,234,.3);
3615  color:#F4F2EA; font-size:11px; line-height:1; cursor:pointer;
3616}
3617.pcl[data-toggle="1"] .pcl-toggle{ display:flex; }
3618.pcl.pcl-paused .pcl-item, .pcl.pcl-paused .pcl-kicker, .pcl.pcl-paused .pcl-dot{ animation-play-state:paused !important; }
3619</style>
3620
3621<div class="pcl-fit">
3622  <div class="pcl">
3623    <canvas class="pcl-canvas"></canvas>
3624
3625    <!-- ===== Scene · Powered by (data cards) · data-key="cards" ===== -->
3626    <div class="pcl-scene" data-key="cards">
3627      <span class="pcl-kicker">Powered by</span>
3628      <!-- visible cards (3 active → auto-mode spaces them at exact thirds, 120° apart) -->
3629      <div class="pcl-item" style="--i:2; --angle:var(--cards-a3)"><div class="pcl-stat"><div class="pcl-metricrow"><span class="pcl-metric">29</span></div><div class="pcl-lab">Industries</div></div></div>
3630      <div class="pcl-item" style="--i:0; --angle:var(--cards-a1)"><div class="pcl-stat"><div class="pcl-metricrow"><span class="pcl-metric">10</span><span class="pcl-suffix">M+</span></div><div class="pcl-lab">Employee Records</div></div></div>
3631      <div class="pcl-item" style="--i:3; --angle:var(--cards-a4)"><div class="pcl-stat"><div class="pcl-metricrow"><span class="pcl-metric">4.5</span><span class="pcl-suffix">K+</span></div><div class="pcl-lab">Contributing Orgs</div></div></div>
3632      <!-- spare cards (delete "pcl-off" to enable) -->
3633      <div class="pcl-item pcl-off" style="--i:4; --angle:var(--cards-a5)"><div class="pcl-stat"><div class="pcl-metricrow"><span class="pcl-metric">00</span><span class="pcl-suffix">+</span></div><div class="pcl-lab">New Metric 5</div></div></div>
3634      <div class="pcl-item pcl-off" style="--i:5; --angle:var(--cards-a6)"><div class="pcl-stat"><div class="pcl-metricrow"><span class="pcl-metric">00</span><span class="pcl-suffix">+</span></div><div class="pcl-lab">New Metric 6</div></div></div>
3635      <div class="pcl-item pcl-off" style="--i:6; --angle:var(--cards-a7)"><div class="pcl-stat"><div class="pcl-metricrow"><span class="pcl-metric">00</span><span class="pcl-suffix">+</span></div><div class="pcl-lab">New Metric 7</div></div></div>
3636      <div class="pcl-item pcl-off" style="--i:7; --angle:var(--cards-a8)"><div class="pcl-stat"><div class="pcl-metricrow"><span class="pcl-metric">00</span><span class="pcl-suffix">+</span></div><div class="pcl-lab">New Metric 8</div></div></div>
3637    </div>
3638
3639    <!-- ===== Scene · Solutions (icon-led pills) · data-key="sol" ===== -->
3640    <div class="pcl-scene" data-key="sol">
3641      <span class="pcl-kicker">Built for</span>
3642      <!-- visible pills, each paired with its brand icon -->
3643      <div class="pcl-item" style="--i:0; --angle:var(--sol-a1); --r:132"><span class="pcl-pill"><span class="pcl-icon-chip"><svg viewBox="-2.02 -2.02 33.29 30" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2.69134 14.6227V13.7484C2.69134 11.7602 4.30312 10.1484 6.29134 10.1484H22.9542C24.9424 10.1484 26.5542 11.7602 26.5542 13.7484V14.6227C26.5542 17.9175 23.8833 20.5884 20.5885 20.5884H14.6228H8.65706C5.36229 20.5884 2.69134 17.9175 2.69134 14.6227Z" fill="#B399F8"/><path d="M14.6227 20.5884V28.0455M23.5713 26.5541L14.6227 20.5884L5.67415 26.5541M8.657 14.6227V13.1312M14.6227 14.6227V10.1484M20.5884 14.6227V7.16553" stroke="#0A4444" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/><path d="M1.19994 1.19995H2.69137M2.69137 1.19995V14.6228C2.69137 17.9176 5.36231 20.5885 8.65708 20.5885H14.6228H20.5885C23.8833 20.5885 26.5542 17.9176 26.5542 14.6228V1.19995M2.69137 1.19995H26.5542M26.5542 1.19995H28.0457" stroke="#0A4444" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></span>Benchmarking</span></div>
3644      <div class="pcl-item" style="--i:1; --angle:var(--sol-a2)"><span class="pcl-pill"><span class="pcl-icon-chip"><svg viewBox="-0.48 -0.48 29.97 29.97" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.31323 21.9312V19.4299" stroke="#0A4444" stroke-width="2.4" stroke-linecap="round"/><path d="M14.5 21.9312V16.9287" stroke="#0A4444" stroke-width="2.4" stroke-linecap="round"/><path d="M20.6868 21.9311V14.4153" stroke="#0A4444" stroke-width="2.4" stroke-linecap="round"/><path d="M20.6866 7.06836L20.1307 7.72086C17.0495 11.3217 12.917 13.8713 8.31323 15.0192" stroke="#B399F8" stroke-width="2.4" stroke-linecap="round"/><path d="M17.1467 7.06836H20.6871V10.5967" stroke="#B399F8" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/><path d="M10.8751 26.5834H18.1251C24.1667 26.5834 26.5834 24.1667 26.5834 18.1251V10.8751C26.5834 4.83341 24.1667 2.41675 18.1251 2.41675H10.8751C4.83341 2.41675 2.41675 4.83341 2.41675 10.8751V18.1251C2.41675 24.1667 4.83341 26.5834 10.8751 26.5834Z" stroke="#0A4444" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></span>Compensation Planning</span></div>
3645      <div class="pcl-item" style="--i:2; --angle:var(--sol-a3)"><span class="pcl-pill"><span class="pcl-icon-chip"><svg viewBox="-3.47 -2.78 33.60 33.60" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20.1072 12.615L22.2097 14.7175L26.4147 10.5125" stroke="#B399F8" stroke-width="3.33333" stroke-linecap="round" stroke-linejoin="round"/><path d="M9.59457 12.6149C12.691 12.6149 15.2012 10.1048 15.2012 7.00828C15.2012 3.9118 12.691 1.40161 9.59457 1.40161C6.49809 1.40161 3.9879 3.9118 3.9879 7.00828C3.9879 10.1048 6.49809 12.6149 9.59457 12.6149Z" fill="#B399F8"/><path d="M17.07 25.23C17.07 21.1014 13.7233 17.7546 9.59463 17.7546C5.46599 17.7546 2.11925 21.1014 2.11925 25.23C2.11925 25.488 2.32825 25.697 2.58629 25.697H16.603C16.861 25.697 17.07 25.488 17.07 25.23ZM14.2667 7.00833C14.2667 4.42794 12.175 2.33629 9.59463 2.33629C7.01423 2.33629 4.92259 4.42794 4.92259 7.00833C4.92259 9.58873 7.01423 11.6804 9.59463 11.6804C12.175 11.6804 14.2667 9.58873 14.2667 7.00833ZM18.9393 25.23C18.9393 26.5202 17.8932 27.5663 16.603 27.5663H2.58629C1.2961 27.5663 0.25 26.5202 0.25 25.23C0.25 20.0692 4.43383 15.8854 9.59463 15.8854C14.7554 15.8854 18.9393 20.0692 18.9393 25.23ZM16.1359 7.00833C16.1359 10.6209 13.2072 13.5496 9.59463 13.5496C5.98207 13.5496 3.05333 10.6209 3.05333 7.00833C3.05333 3.39578 5.98207 0.467041 9.59463 0.467041C13.2072 0.467041 16.1359 3.39578 16.1359 7.00833Z" fill="#0A4444" stroke="#0A4444" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/></svg></span>Job Management</span></div>
3646      <!-- spare pills (delete "pcl-off" to enable; auto mode re-spaces everything) -->
3647      <div class="pcl-item pcl-off" style="--i:3; --angle:var(--sol-a4)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 4</span></div>
3648      <div class="pcl-item pcl-off" style="--i:4; --angle:var(--sol-a5)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 5</span></div>
3649      <div class="pcl-item pcl-off" style="--i:5; --angle:var(--sol-a6)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 6</span></div>
3650      <div class="pcl-item pcl-off" style="--i:6; --angle:var(--sol-a7)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 7</span></div>
3651      <div class="pcl-item pcl-off" style="--i:7; --angle:var(--sol-a8)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 8</span></div>
3652    </div>
3653
3654    <!-- ===== Scene · Built for (avatar-led pills) · data-key="built" ===== -->
3655    <div class="pcl-scene" data-key="built">
3656      <span class="pcl-kicker">Made for</span>
3657      <!-- visible pills, each paired with a persona headshot (pairing is illustrative, not literal) -->
3658      <div class="pcl-item" style="--i:0; --angle:var(--built-a1)"><span class="pcl-pill"><span class="pcl-avatar"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBUODAsLDBkSEw8VHhsgHx4bHR0hJTApISMtJB0dKjkqLTEzNjY2ICg7Pzo0PjA1NjP/2wBDAQkJCQwLDBgODhgzIh0iMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzP/wAARCAAwADADASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAABgcDBAUC/8QAMBAAAgIBAgMGBQMFAAAAAAAAAQIDBBEABQYSIRMxQVFhcQcUFTKBIpGxIzNCYqH/xAAYAQEBAQEBAAAAAAAAAAAAAAAEBQIAA//EACARAAICAQQDAQAAAAAAAAAAAAECABEDFCEiMQQSQVH/2gAMAwEAAhEDEQA/AExFFJPKsUSF5HOFVRkk6J9v4dStLG1yNJ3OSYi2FGPMjv1NwptarF867ASPkJ5hfP8AOta3SlMa8jsWaJ+X3zga5mniifs6h4n2+iwrQ7cqMDjEIUAa1INw2/eIzHYqx82P7c6A8w8wfEa44V4P22dA9yFppfFmY9CPbRVe4I2+7Qd6cb17aqeykQkfv5jRNQLqUNGfW4u964MqTK0u2MIJh17Fmyjex8P40ByxSQStFKhSRDhlYdQdN+SC7Tc1ZolaWL9DPn7iPHQnxftUs0H1ARKHiAEhXxXuyfbS1b4ZPdPojSocK1K+3wxLH1jRVz7DWXu2wiOnLNCzBoIJCP3J0wKk0Fzhzb70OCliFJAR6gHVKNYpb0sciAo8bAr5g6yQZtWHcWlaq9KIbkLCpM86iPOAc569fbw0aV9rUcQyXY7ilyA/Z4U8nmAe/wBMZ0FfKiS/EiQtYirzshTPRh4Z9iNHVSiJJ47aRGuqoE7MfaT3kj18O/U8qZZDKRKV2qH3GT+mzM36i2O8nv1Vm2QXK1mBomKyxshHuNF7ovzER5R3aiuTx0KVu7JhY68DyMT6AnTlB6kd2BJIgB8LuOIW2H6BuEqLJTJauztjnjJzyjzIJPTyPprY3fiGwHdaKdmzjl7Q/cMnwHh00goJ5as6TwSNHKh5lZTgg6YW0cdU7Scm6IILRABnUZSTHdny/j20zEqE8oVmYDaHLbDLRavulMla8uEnA68rev56g+uNb9Cy1yzJGnWGlH2lmT/FRjoo/wBm/jJ8tXNkuVbvD8IqW60/bADCSKw6nGCPzqDcptt4S2KSmliCGtMAHMkgBZywJfJ6keHsB5aGcF5ava5SHk1iuuVdzq1dNNYrDR88YwHx3rnx9tL74pcYRptf0Sp0nsgNOQc8secgfkgfgeuoOLPibQWvLT2cfNTOOUzsCI09QD1Y/wDPfSmnnlszvNPI0krnmZmOSTpuYY749yYjNVGf/9k="/></span>Compensation Professionals</span></div>
3659      <div class="pcl-item" style="--i:1; --angle:var(--built-a2)"><span class="pcl-pill"><span class="pcl-avatar"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBUODAsLDBkSEw8VHhsgHx4bHR0hJTApISMtJB0dKjkqLTEzNjY2ICg7Pzo0PjA1NjP/2wBDAQkJCQwLDBgODhgzIh0iMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzP/wAARCAAwADADASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAABwMFBgQI/8QAMxAAAgIBAgMGBAQHAQAAAAAAAQIDBAUAEQYhcQcSMUFhkRMiUYEUFSMyFjNCQ6GxweH/xAAXAQEBAQEAAAAAAAAAAAAAAAAFBAYD/8QAIREAAgIBAwUBAAAAAAAAAAAAAQIAAxEEEkEFEzJRYTH/2gAMAwEAAhEDEQA/ABqrVnu2o61aJ5Z5WCoiDcsT5DSrj+z3C8L4dsxxbL+IdACKsbfIGPgvLm7ew+3PXd2TcLpVxhz9mMGzZ3WvuP2RjkSPVjv9h66re0+5LkeI6WHjciNHSLYeTvzY9Quw99U4CJvaHLutt7azP2+P8o1v4GBq1MXWTmsVWBS2w8O823M6nx3aHasXlXiKpUyOPk/mq9de+g8yvT6aRsTw1jaGLCRU4ogF5sQAT1J0d8bYaokLZLHtEzxtvJ8E7gjz8OR1GmsYt8ir9PrCfZoeIuzPGZGr+N4ckWCRlDrCX3ilBG47pPNd/bpoks1pqdmSvYiaKaNiro42KkeWlfs+zrSYY0JX3NVv09z/AG25gfY7j21D2kYOO/jhm66AWK+yz7f1p4An1B2+x9NINWHTesEW1q7TU8UMdBHj8ZUpRjZIIUjA6ADQlnLQyHG0kjMApvDYk8tu93f+aacfYS/jalyI7pPCkinqAdeeuIHavPabfaQS7A+u5Oues8QBKOmebMeIwUcN+VxSxSWVn+KhYhUVVA6DUVrFYqDGWpFnlnaZCpR5Sw8NvDfb21WcM5WPiSjBPD3Jiq92evIwVlf694g8tcvFuQbB12Qy/EvWOUUKsWWJR9N+u+/poXDZxzNNldueJkOHZzj8nX2OySL8Jv8An+dJCst6hYqyc0miZCOo20UwK6TVwP3CQH3P/mkNLa1as1hzssUbOfsNO6BsowMyfWE22qy/pnR2R8QrkaH8PzSKLVbd64Y85I99yB9Sp3PQ+mstxDwZlrmSLQwIyT96Ysr7qgI32IHMEeH3GsNTuWMfcit1JnhsQsHjkQ7MpHgQdOHCXa9hslFHT4niSlZ3HetRx/pTEHcFgOanfqOmprCzAD1LaAlbE8mGvCEOSryHGpi5VaSbvmw/eQwjbYjf7av+I8PXoSSzM7PK6H55GLH30rZSDC35zfxs1OxHZ+YzVpVb5vPfY+fj76ocpicReaGPMXIYIFO7yyziPZfPr00Y5bu4xG6yvazmDtBJ5MxVQRuzvOoCgfTVxxjcmxtf8qkjeKxKA0ityKp4jfr/AK661fFXaBwripFThfHwXL8W/wAO68ZEcJ+q783PXl10QW7di/bltWpnmnlYvJI53LE+Z0pS7VoV9wLVpXdYr+p//9k="/></span>HR Professionals</span></div>
3660      <div class="pcl-item" style="--i:2; --angle:var(--built-a3)"><span class="pcl-pill"><span class="pcl-avatar"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBUODAsLDBkSEw8VHhsgHx4bHR0hJTApISMtJB0dKjkqLTEzNjY2ICg7Pzo0PjA1NjP/2wBDAQkJCQwLDBgODhgzIh0iMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzP/wAARCAAwADADASIAAhEBAxEB/8QAGwAAAgIDAQAAAAAAAAAAAAAABQcDBgIECAH/xAAxEAABAwIEBAUDAwUAAAAAAAABAgMEBREABhIhBzFBYRMUIlFxM4GRFjKhJEJSYuH/xAAYAQADAQEAAAAAAAAAAAAAAAACBAUDAf/EAB4RAAICAgIDAAAAAAAAAAAAAAABAhEDMRMhEhRB/9oADAMBAAIRAxEAPwBNxYr86U1FisrefdUEobQLlRPQDDhofCmm0WlrquaXQ6ppHiLZCiGmgOhI3UfjbpvgxwSygzBpBzNMbSZUvUiLqH02gbFQ7qII+B3wR4xre/R7cWMq3mprTJSnmq9yB+QDbrbBtmMMf1ixkcRpDcry+W6bEgQ0mydLCSsjv0H84iZzZW1KW5V4saow7nW3KjJKef8AkBdOMadAhQnHIiihL7ainSo+q45/fF2oUylBQp8kNOLcFlNhkqJHcgbDC3M/Kih6q47sHL4b0nO1CVWMo/0UtGzsF1y6NfPSCd036Hke2FNMhyIEx2JLZWzIZUUONrFikjmDjoPILbeWc61+kNEiA5GblMoG4SNVgL9rkfFsA+MeXGp8P9QxW7SGbB+w/e3yBPdJt9j2wynYhkx1oZmXmfAgRKY2yG0RY6G+fIAAYhzLGivxiiU3r8i63MbVb9q21BQP4uPvjPKkxuovLqDartymG3U/cXxPVW3HnZyWUIcdWwpKErNkqJTsCegxxhxYhDACZhd82pSlkq0KNwN+fbB+VAp3moFSMtabEIWlk+lKv9rHmcCJVOdp+YHYkxRKUbKShQGsdCCQdu1sHxAg1GiuxoQmR9KrgKd1hZ9rEAAdxvhBpp9ssRcXG0uhlZbisPzJctAK2zFQ2VG3q3J363sPfGvUoKKjTnYbidTb7K21D5SRghk2KtjLDbpkB1mQ2lxtOixRtY733va+NabMbp1KfmukBuOwtxRPsEk4ex2o9krM05Ohb8HM4RkRF0ifJQy5HSSypxVgpu9yLnqCfwe2GDWa7HgMy5CH0+Ilu6VaCtKSR6dVum18crsPuxZDb7C1NutqCkLTzSRyOGll7iHHnRHolYmqgyHSoqdLIWw8SLeoD1JPT2+MEzDHJaZVkz509wTZDxVKXutXucWOj1J6OlapTp0AFRA2GC1Ly3Q
366058NKYr48RB+ow6laVD3t/zHtRyrCiQpKZlYYZaU2dLhISeXKyjzxMlJtlyDhGOxrZUqDT2UKarw0NB6MlSEtm4GoXsfbnhYcXM1Nw6OjL8ZwGVKAVI0n6bYNwD3UR+B3wMm8VIlJy1ApdEhsuTGYzaDIsQhtSQNwP7j/G/XCqly5E6W7KlPLefdUVuOLNyonmTilHREyzWkf/2Q=="/></span>Executive Leadership</span></div>
3661      <div class="pcl-item" style="--i:3; --angle:var(--built-a4)"><span class="pcl-pill"><span class="pcl-avatar"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBUODAsLDBkSEw8VHhsgHx4bHR0hJTApISMtJB0dKjkqLTEzNjY2ICg7Pzo0PjA1NjP/2wBDAQkJCQwLDBgODhgzIh0iMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzP/wAARCAAwADADASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAABgUHBAL/xAAtEAACAgECBQIFBAMAAAAAAAABAgMEEQAFBhIhMUETUQcUYXGBIiPB0RZisf/EABcBAQEBAQAAAAAAAAAAAAAAAAQDAgD/xAAeEQACAgICAwAAAAAAAAAAAAAAAQIRAyEEMRITQf/aAAwDAQACEQMRAD8AxurVsXrUVWrC808rBUjRcsxPgDVytwzdr7otW3SeR+QuURgRgfnWtfBThelt2znia88It2yY6vqOB6cYOCRnyxB/A+ugG6W/ld0sLWtM3zc0kJkVs+mHkOcH7dvvrOST6RnDji9yI1ziFKmYNqihRAvLKxAwT9Mf9zqaN1SdgliCJObI9Veqn7g9tbVs3DuzpAlaOvUYxjpHhSw+uO+hPGu37NaaVarwtZjBz6J8jxkdM/TUVlT+C5cel2B5oYJI19JHSXsR3Dfb21xMjIxV1KsO4IwRrYfhNHSlbZp7KRiVZCOdwPBYL+e2kHxw4Pr3doHEtNUFuphbIUjMkROAx9ypI/B+mkQb6YLJBVaMo2DeZdtLrEidRjLKD4117Zbff91+XsiOL04zKjJGBl1IPXH21FqxctdZAc8512bHN8vu5Yd+Rs6k0Ii+jT6Wy7dtl6K7LdjV5QRzMQuA2e5HfRyb/G/kLTmyGtVlJCrnBGcZx+Rou9t9qsRjcKUdiqIykEshblCliwzjyM4xqfa3GbdpRX26CGJXXEhgTlBGQep9ug6al639Yn3KtIY7TKsnDVeKCsxjeLBIIHXr/OjUxswQzVZA0hAKfr6nGn+1RbXX4PpRx8xuekQAucsRn+dBrk8hmlmlP6hknx2GrrWgj27ZH22dXi+Xfm5gQVwfGeure3U2qbnJdnT0qiKx5pP60QjkeKRZI2KupyCO40u2ziatOiw3wIWHT1AMqf61ZQi3sPHJSoQ7NbTc73LJVdK0y8sazIBkr5x7HPn2127tFU2yNqu304nuSd1VcKg/2x7+2vFOWrND+zLFIp6qUcHB17mliowkz2IUYrlpGblyT3PU658aLn5XoSuQ1DxRO2vcp6EriauQGJJjJzynyVOj/FO4QCA1IlRpZZDIzjOVU+Net14lrxq0VL96Q5HqEYVft76JSSPLI0kjFnY5JPnW5qN6Cynqkf/Z"/></span>Talent Acquisition</span></div>
3662      <!-- spare pills (delete "pcl-off" to enable) -->
3663      <div class="pcl-item pcl-off" style="--i:4; --angle:var(--built-a5)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 5</span></div>
3664      <div class="pcl-item pcl-off" style="--i:5; --angle:var(--built-a6)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 6</span></div>
3665      <div class="pcl-item pcl-off" style="--i:6; --angle:var(--built-a7)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 7</span></div>
3666      <div class="pcl-item pcl-off" style="--i:7; --angle:var(--built-a8)"><span class="pcl-pill"><span class="pcl-dot"></span>Pill 8</span></div>
3667    </div>
3668
3669    <div class="pcl-ribbon"></div>   <!-- segments generated by JS to match scene count -->
3670    <button type="button" class="pcl-toggle" aria-label="Play or pause animation">❚❚</button>
3671  </div>
3672</div>
3673
3674</div></div><div class="persona-card_content"><div class="persona-card_content_rt w-richtext"><h3>Connected intelligence across the platform</h3><p><br/>Ascent is the benchmarking intelligence layer within the Payscale Intelligence Cloud. Powered by Peer Global — daily-refreshed data from thousands of organizations — it connects to Paycycle and job management solutions so your teams work from consistent, current information across job ar
3674chitecture, planning, and pay decisions.</p></div><div class="w-layout-hflex button-text-group"><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div></div></div></div></div></div></div></section><section class="section is-partners"><div class="pd-global"><div class="c-large"><div class="header-wrapper"><h2 class="heading-1"><span>Work smarter with helpful </span><span class="ts-highlight is-dark product-hero-highlight">integrations</span></h2><div class="max-width-50"><p class="text-size-large">Effortless API integrations connect your systems, so you can make real-time, informed pay decisions — no more wasting time jumping between tools.</p></div><div class="button-group"><a data-wf-native-id-path="3144156a-e9f1-34c6-d0eb-30ae3e5fa572:d9e6c37f-c697-9899-548a-1a0ac6654ebd" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="d9e6c37f-c697-9899-548a-1a0ac6654ebd" data-wf-component-context="%5B%7B%22componentId%22%3A%22d9e6c37f-c697-9899-548a-1a0ac6654eb0%22%2C%22instanceId%22%3A%223144156a-e9f1-34c6-d0eb-30ae3e5fa572%22%7D%5D" href="/marketplace" class="btn w-inline-block"><div>Learn More</div></a></div></div><div class="partners-grid"><div class="partners-line is-1"><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6819392991bef3e64ac4f530_remote-logo.avif" loading="lazy" alt="" class="partner-logo"/></div><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939971c2a98c29ae2bb26_bamboohr.avif" loading="lazy" alt="" class="partner-logo"/></div></div><div class="partners-line is-gap"><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939ee8dfb4aa34a049200_sap.avif" loading="lazy" alt="" class="partner-logo"/></div><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939eeec1e501b040c7a8a_gusto.avif" loading="lazy" alt="" class="partner-logo"/></div><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939eee746e5e042f0d11f_paylocity.avif" loading="lazy" alt="" class="partner-logo"/></div></div><div class="partners-line is-2"><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939ee795553640f10b068_ukg.avif" loading="lazy" alt="" class="partner-logo"/></div><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939ee8dfb4aa34a04920a_oracle.avif" loading="lazy" alt="" class="partner-logo"/></div></div><div class="partners-line is-gap"><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939ee16d84e0b4bd81f01_adp.avif" loading="lazy" alt="" class="partner-logo"/></div><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939ee2c341eb46f024615_namely.avif" loading="lazy" alt="" class="partner-logo"/></div><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939ee7560175626a39b74_workday.avif" loading="lazy" alt="" class="partner-logo"/></div></div><div id="w-node-d9e6c37f-c697-9899-548a-1a0ac6654ed9-c6654eb0" class="partners-line"><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939ee6ba0f761df3dbf58_humi.avif" loading="lazy" alt="" class="partner-logo"/></div><div class="partner"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681939eeb257799070ea5f61_paycom.avif" loading="lazy" alt="" class="partner-logo"/></div></div></div></div></div><div class="partners-gradient"></div></section><section id="who-ascent-helps" class="section"><div class="padding-global"><div class="container-global"><div class="w-layout-vflex header-wrapper max-width-50 is-align-center"><h2>Compensation intelligence that meets you at every stage of maturity</h2><p class="text-size-large">Whether you’re building your first structured compensation process or running a sophisticated global program, Ascent scales with how complex your needs are.</p></div><div class="_4col-layout gap-2"><div class="card-white-shadow"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a3bef5fd7992f6d6580b5f7_check%20icon%20yellow-2.svg" loading="lazy" alt="" height="Auto" class="check-icon"/><div class="card-title-wrapper"><h3 class="heading-4">Compensation professionals</h3></div><p>
3674Teams ready to move from reactive work to strategic impact.</p><a data-wf-native-id-path="c7a14387-e43d-afa6-260f-2b22e7f9fc55" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="c7a14387-e43d-afa6-260f-2b22e7f9fc55" href="/solutions/compensation-professionals" class="text-link margin-top-auto">Learn more</a></div><div class="card-white-shadow"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a3bef5f53b80f86e9280823_check%20icon%20yellow-mint.svg" loading="lazy" alt="" class="check-icon"/><div class="card-title-wrapper"><h3 class="heading-4">HR professionals</h3></div><p>Leaders who need reliable tools without deep compensation expertise.</p><a data-wf-native-id-path="c7a14387-e43d-afa6-260f-2b22e7f9fc5e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="c7a14387-e43d-afa6-260f-2b22e7f9fc5e" href="/solutions/hr-professionals" class="text-link margin-top-auto">Learn more</a></div><div class="card-white-shadow"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a3bef5fb6519d9fe3fe252c_check%20icon%20yellow-mint-teal.svg" loading="lazy" alt="" class="check-icon"/><div class="card-title-wrapper"><h3 class="heading-4">Talent acquisition</h3></div><p>Recruiters who want fast, compliant offers without constant back-and-forth.</p><a data-wf-native-id-path="c7a14387-e43d-afa6-260f-2b22e7f9fc67" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="c7a14387-e43d-afa6-260f-2b22e7f9fc67" href="/solutions/talent-acquisition" class="text-link margin-top-auto">Learn more</a></div><div class="card-white-shadow"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a3bf2090ef955aff579c970_check%20icon%20yellow-mint-teal-purple-2.svg" loading="lazy" width="Auto" alt="" class="check-icon"/><div class="card-title-wrapper"><h3 class="heading-4">Executive leadership</h3></div><p>Leaders who need clear visibility and defensible answers.</p><a data-wf-native-id-path="c7a14387-e43d-afa6-260f-2b22e7f9fc70" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="c7a14387-e43d-afa6-260f-2b22e7f9fc70" href="/solutions/executive-leadership" class="text-link margin-top-auto">Learn more</a></div></div></div></div></section><section id="expert-support" class="section bg-offwhite"><div class="padding-global"><div class="container-global"><div class="content-component"><div id="w-node-d6615125-6290-019f-8f97-76427bfe9c03-dbce5a0a" class="content-info-wrapper"><h2>Expert help when the work gets complicated</h2><p>What happens when you bring Intelligence to your benchmarking strategy? Faster pricing. Deeper insights. Zero guesswork.</p><ul role="list"><li>Implementation &amp; change management support</li><li>Manager enablement training</li><li>Custom workshops and ongoing advisory</li></ul><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div></div><div id="w-node-d6615125-6290-019f-8f97-76427bfe9c2d-dbce5a0a" class="content-image-wrapper"><div class="w-embed w-script"><style>
3675/* ════════════════════════════════════════════════════════════════
3676   PAYSCALE SERVICES — Identify / Model / Implement  (frameless embed)
3677   Everything is scoped under .sbm so it can't collide with the page.
3678   Type scaled ~1.2x for legibility; stage height grown to suit (width fixed).
3679   ════════════════════════════════════════════════════════════════ */
3680
3681.sbm, .sbm *, .sbm *::before, .sbm *::after { box-sizing: border-box; margin: 0; padding: 0; }
3682
3683.sbm {
3684  /* ╔══════════════════════════════════════════════════════════════╗
3685     ║  ⏱  MOTION CONTROL                                            ║
3686     ║  --speed scales the WHOLE animation in proportion. The script ║
3687     ║  at the bottom reads this one value.                          ║
3688     ║      0  = no animation (static — shows Scene 1 fully formed)  ║
3689     ║      1  = baseline (current speed)                            ║
3690     ║      2  = 200% speed   ·   0.5 = half speed   ·   etc.        ║
3691     ╚══════════════════════════════════════════════════════════════╝ */
3692  --speed: 1;
3693  --dur-scale: 1;   /* derived from --speed by the script — don't edit directly */
3694
3695  /* Dev play/pause button:  1 = show   ·   0 = hide */
3696  --show-toggle: 0;
3697
3698  /* Expert badge:  1 = show   ·   0 = hide */
3699  --show-badge: 0;
3700
3701  /* ╔══════════════════════════════════════════════════════════════╗
3702     ║  🎨  COLOR CONTROLS — change every color from right here      ║
3703     ║  Edit a swatch and every element using it updates.            ║
3704     ╚══════════════════════════════════════════════════════════════╝ */
3705
3706  /* — Brand swatches (Payscale palette) — */
3707  --c-green:      #E2FF65;   /* Electric Green (brand) — lime-chartreuse accent */
3708  --c-teal:       #23A4B5;   /* Light Teal (brand) */
3709  --c-techteal:   #0A4444;   /* Tech Teal (brand) — primary dark */
3710  --c-midnight:   #041E1E;   /* Midnight (brand) — darkest, default body text */
3711  --c-purple:     #B399F8;   /* Electric Purple (brand) */
3712  --c-purple-lt:  #CFBDFF;   /* Light Purple */
3713  --c-aqua:       #B9DCD3;   /* Aqua Blue (brand) — spare, not currently referenced */
3714  --c-offwhite:   #F4F2EA;   /* Off-white (brand) — Scene 1 gap-callout tint */
3715
3716  /* — Custom shades / accents (not official brand swatches) — */
3717  --c-green-dk:   #b8e228;   /* deeper lime — darker end of the check-circle gradient */
3718  --c-teal-soft:  #4fd4c4;   /* bright cyan-teal — ribbon-sweep midpoint + badge star fill */
3719  --c-purple-dk:  #8058e0;   /* deeper purple — darker end of the purple gradients */
3720  --c-lime:       #A8D439;   /* yellow-green lime — start of the Group B (gap) bar */
3721  --c-muted:      #5C7575;   /* muted gray-teal — captions & sub-labels */
3722
3723  /* — Element gradients (built from the swatches above) — */
3724  --grad-ribbon-active:  linear-gradient(90deg, var(--c-purple),    var(--c-teal-soft), var(--c-purple));   /* active ribbon pill — purple ↔ cyan-teal sweep */
3725  --grad-stripe-identify:linear-gradient(90deg, var(--c-green),     var(--c-teal),      var(--c-green));    /* Scene 1 card top-stripe — green ↔ teal */
3726  --grad-stripe-model:   linear-gradient(90deg, var(--c-purple),    var(--c-teal),      var(--c-purple));   /* Scene 2 card top-stripe — purple ↔ teal */
3727  --grad-hero-stripe:    linear-gradient(90deg, var(--c-green),     var(--c-teal),      var(--c-green));    /* Scene 3 card top-stripe — green ↔ teal */
3728  --grad-hero-bg:        linear-gradient(160deg, #FFFFFF, #EFF7F6); /* Scene 3 card background — white → faint cool tint */
3729  --grad-bar-groupA:     linear-gradient(90deg, var(--c-techteal),  var(--c-teal));     /* Group A pay bar (Scenes 1 & 2) — dark teal → teal */
3730  --grad-bar-groupB:     linear-gradient(90deg, var(--c-lime),      var(--c-green));    /* Group B (gap) pay bar (Scene 1) — lime → green */
3731  --grad-bar-fix:        linear-gradient(90deg, var(--c-purple-dk), var(--c-purple-lt)); /* Group B remediated bar (Scene 2) — purple */
3732  --grad-bar-add:        linear-gradient(90deg, var(--c-purple-dk), var(--c-purple));   /* "added" top-up overlay (Scene 2) — purple (same ramp as bar-fix) */
3733  --grad-check-circle:   linear-gradient(135deg, var(--c-green),    var(--c-green-dk)); /* Scene 3 checklist circles — lime */
3734  --grad-closed-icon:    linear-gradient(135deg, var(--c-purple-dk),var(--c-purple));   /* Scene 2 "gap closed" check icon — purple (same ramp as bar-fix) */
3735  --grad-gap-callout:    linear-gradient(0deg,  var(--c-offwhite),  #FFFFFF);           /* Scene 1 flagged-gap box — off-white → white (barely-there) */
3736  --grad-closed-box:     linear-gradient(135deg, #EDE5FC, #ddd0fa); /* Scene 2 "gap closed" box — soft lavender */
3737
3738  /* — Shield (Scene 3 payoff) — */
3739  --shield-from:   var(--c-techteal); /* shield body gradient START — feeds the SVG <linearGradient> in the markup */
3740  --shield-to:     var(--c-teal);     /* shield body gradient END */
3741  --shield-stroke: none;     /* shield outline (the border) */
3742  --shield-check:  #FFFFFF;     /* checkmark inside the shield */
3743
3744  /* — Card chrome (subtle, derived from Tech Teal) — */
3745  --card-bg:      #fff;
3746  --card-border:  rgba(10,68,68,.12);
3747  --card-shadow:  0 2px 8px rgba(4,30,30,.06);
3748
3749  font-family: 'Inter', system-ui, sans-serif;
3750  -webkit-font-smoothing: antialiased;
3751  line-height: normal;
3752  display: inline-block;
3753}
3754
3755/* ── Responsive wrapper ──────────────────────────────────────────────
3756   Drop the embed inside any flex column; it scales uniformly to fit that
3757   column's width, so the pixel-tuned layout is preserved at EVERY breakpoint
3758   (desktop 50/50, tablet/mobile stacked). The native size lives here as
3759   --sbm-w / --sbm-h; the stage below reads them, the wrapper reserves the
3760   matching height via aspect-ratio, and the script sets --sbm-scale from the
3761   column's real width. Caps at native size so it never upscales (stays crisp).
3762   To make it larger on wide screens, raise the max-width.                      */
3763.sbm-fit {
3764  --sbm-w: 557;          /* native width  (px, unitless) */
3765  --sbm-h: 535;          /* native height (px, unitless) — keep in step with the stage */
3766  position: relative;
3767  width: 100%;
3768  max-width: calc(var(--sbm-w) * 1px);
3769  aspect-ratio: var(--sbm-w) / var(--sbm-h);
3770  margin: 0 auto;        /* center within a wider column */
3771  align-self: flex-start;/* don't vertically stretch if it's itself a flex item */
3772}
3773.sbm-fit .sbm {
3774  position: absolute; top: 0; left: 0;
3775  transform-origin: top left;
3776  transform: scale(var(--sbm-scale, 1));
3777}
3778
3779/* Frameless stage — transparent. Native size comes from --sbm-w / --sbm-h. */
3780.sbm .stage { position: relative; width: calc(var(--sbm-w, 557) * 1px); height: calc(var(--sbm-h, 535) * 1px); }
3781
3782/* ── keyframes (all prefixed sbm-) ── */
3783@keyframes sbm-sweep    { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
3784@keyframes sbm-fadeUp   { from{opacity:0;transform:translateY(14px)} to{opacity:1;transform:translateY(0)} }
3785@keyframes sbm-fade     { from{opacity:0}
3785 to{opacity:1} }
3786@keyframes sbm-barGrow  { from{transform:scaleX(0)} to{transform:scaleX(1)} }
3787@keyframes sbm-sparkle  { 0%,100%{transform:scale(0.82);opacity:1} 50%{transform:scale(1.12);opacity:.78} }
3788@keyframes sbm-drawCheck{ to{stroke-dashoffset:0} }
3789@keyframes sbm-mdFix    { from{transform:scaleX(.78)} to{transform:scaleX(1)} }
3790
3791/* ══ workflow ribbon ══ */
3792.sbm .ribbon { position: absolute; top: 16px; left: 16px; right: 16px; display: flex; align-items: center; gap: 4px; z-index: 20; }
3793.sbm .ribbon .step {
3794  flex: 1; height: 30px; border-radius: 999px;
3795  border: 1px solid rgba(10,68,68,.28);          /* inactive pill border */
3796  background: rgba(10,68,68,.05);                 /* inactive pill fill */
3797  display: flex; align-items: center; padding: 0 11px;
3798  font-size: 14px; font-weight: 600; color: rgba(10,68,68,.6);
3799  position: relative; z-index: 0;                 /* stacking context for the gradient overlay */
3800  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out, border-color calc(.6s * var(--dur-scale,1)) ease-in-out;
3801  white-space: nowrap; overflow: hidden;
3802}
3803/* gradient overlay — crossfades in/out behind the label + number (color: --grad-ribbon-active) */
3804.sbm .ribbon .step::before {
3805  content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit;
3806  background: var(--grad-ribbon-active); background-size: 200% 100%;
3807  opacity: 0; pointer-events: none;
3808  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out;   /* fade-OUT — starts immediately */
3809}
3810.sbm .ribbon .step .num {
3811  width: 16px; height: 16px; border-radius: 50%;
3812  background: rgba(10,68,68,.1); color: rgba(10,68,68,.55);
3813  font-size: 11px; font-weight: 700;
3814  display: flex; align-items: center; justify-content: center;
3815  margin-right: 7px; flex-shrink: 0;
3816  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out, color calc(.6s * var(--dur-scale,1)) ease-in-out;
3817}
3818.sbm .ribbon .connector { width: 5px; height: 1px; background: rgba(10,68,68,.18); flex-shrink: 0; }
3819/* active step — gradient fades IN delayed ~85% of the fade-out, so outgoing/incoming pills overlap ~15% */
3820.sbm .ribbon .step.active {
3821  border-color: transparent; color: var(--c-midnight);
3822  transition: color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)),
3823              border-color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
3824}
3825.sbm .ribbon .step.active::before {
3826  opacity: 1;
3827  transition: opacity calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));   /* fade-IN — delayed */
3828  animation: sbm-sweep calc(3.2s * var(--dur-scale,1)) ease-in-out infinite;
3829}
3830.sbm .ribbon .step.active .num {
3831  background: rgba(4,30,30,.22); color: var(--c-midnight);
3832  transition: background calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1)), color calc(.6s * var(--dur-scale,1)) ease-in-out calc(.51s * var(--dur-scale,1));
3833}
3834/* done step */
3835.sbm .ribbon .step.done       { background: rgba(10,68,68,.04); border-color: rgba(10,68,68,.15); color: rgba(10,68,68,.35); }
3836.sbm .ribbon .step.done .num  { background: rgba(10,68,68,.08); color: rgba(10,68,68,.4); }
3837.sbm .ribbon .step.done::after{ content: "\2713"; font-size: 11px; font-weight: 700; color: rgba(10,68,68,.35); margin-left: auto; }
3838
3839/* ══ scenes ══ */
3840.sbm .scene        { position: absolute; top: 58px; left: 16px; right: 16px; bottom: 16px; opacity: 0; pointer-events: none; transition: opacity calc(.5s * var(--dur-scale,1)) ease; }
3841.sbm .scene.active { opacity: 1; }
3842
3843/* shared scene heading — 15px left pad to line up with the text above/below; 10px above the label & below the sub (none between) */
3844.sbm .sc-label { font-size: 20px; font-weight: 600; color: var(--c-techteal); margin-bottom: 3px; padding: 10px 0 0 15px; }
3845.sbm .sc-sub   { font-size: 13px; color: var(--c-muted); margin-bottom: 13px; line-height: 1.4; max-width: 74%; padding: 0 0 10px 15px; }
3846
3847/* expert badge (shared motif) */
3848.sbm .expert-badge {
3849  position: absolute; right: 0; top: 0;
3850  display: inline-flex; align-items: center; gap: 7px;
3851  background: #FFFFFF; color: var(--c-techteal);
3852  padding: 5px 13px 5px 6px; border-radius: 999px;
3853  font-size: 12px; font-weight: 600; letter-spacing: .03em; opacity: 0;
3854  box-shadow: 0 2px 10px rgba(4,30,30,.18);
3855}
3856.sbm .scene.active .expert-badge { animation: sbm-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.4s * var(--dur-scale,1)) both; }
3857.sbm .expert-badge .star { width: 20px; height: 20px; border-radius: 50%; background: var(--c-teal-soft); color: #FFFFFF; display: flex; align-items: center; justify-content: center; font-size: 13px; }
3858.sbm .scene.active .expert-badge .star { animation: sbm-sparkle calc(2.4s * var(--dur-scale,1)) ease-in-out infinite calc(1s * var(--dur-scale,1)); }
3859
3860/* ═════════ SCENE 1 — IDENTIFY ═════════ */
3861.sbm .id-card { background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 10px; box-shadow: var(--card-shadow); padding: 30px; opacity: 0; position: relative; overflow: hidden; }
3862/* top stripe  (color: --grad-stripe-identify) */
3863.sbm .id-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 5.5px; background: var(--grad-stripe-identify); background-size: 250% 100%; animation: sbm-sweep calc(5s * var(--dur-scale,1)) linear infinite; }
3864.sbm .scene.active .id-card { animation: sbm-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
3865.sbm .id-cap { font-size: 11.5px; font-weight: 600; letter-spacing: .14em; color: var(--c-muted); margin-bottom: 14px; text-transform: uppercase; }
3866
3867.sbm .id-grp { margin-bottom: 15px; }
3868.sbm .id-grp .gl { display: flex; justify-content: space-between; font-size: 14px; margin-bottom: 5px; }
3869.sbm .id-grp .gl .gn { color: var(--c-midnight); font-weight: 600; }
3870.sbm .id-grp .gl .gv { color: var(--c-muted); font-weight: 600; }
3871.sbm .id-bar-bg { height: 16px; border-radius: 8px; background: rgba(10,68,68,.07); overflow: hidden; position: relative; }
3872.sbm .id-bar { height: 100%; border-radius: 8px; transform-origin: left; transform: scaleX(0); }
3873.sbm .id-bar.bar-a { background: var(--grad-bar-groupA); }   /* Group A bar color */
3874.sbm .id-bar.bar-b { background: var(--grad-bar-groupB); }   /* Group B (gap) bar color */
3875.sbm .scene.active .id-grp:nth-child(2) .id-bar { animation: sbm-barGrow calc(.8s * var(--dur-scale,1)) ease calc(.7s * var(--dur-scale,1)) both; }
3876.sbm .scene.active .id-grp:nth-child(3) .id-bar { animation: sbm-barGrow calc(.8s * var(--dur-scale,1)) ease calc(1.0s * var(--dur-scale,1)) both; }
3877
3878.sbm .id-gapcallout { display: flex; align-items: center; gap: 12px; background: var(--grad-gap-callout); border: 1.5px solid var(--c-teal); border-radius: 10px; padding: 12px 16px; margin-top: 4px; opacity: 0; }
3879.sbm .scene.active .id-gapcallout { animation: sbm-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.5s * var(--dur-scale,1)) both; }
3880.sbm .id-gapcallout .gpct { font-family: 'Zodiak', serif; font-size: 32px; font-weight: 700; color: var(--c-techteal); line-height: 1; }
3881.sbm .id-gapcallout .gtxt .gt { font-size: 14px; font-weight: 600; color: var(--c-midnight); }
3882.sbm .id-gapcallout .gtxt .gs { font-size: 12px; color: var(--c-midnight); margin-top: 2px; }
3883
3884/* ═════════ SCENE 2 — MODEL ═════════ */
3885.sbm .md-card { background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 10px; box-shadow: var(--card-shadow); padding: 30px; opacity: 0; position: relative; overflow: hidden; }
3886/* top stripe  (color: --grad-stripe-model) */
3887.sbm .md-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 5.5px; background: var(--grad-stripe-model); background-size: 250% 100%; animation: sbm-sweep calc(4s * var(--dur-scale,1)) linear infinite; }
3888.sbm .scene.active .md-card { animation: sbm-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
3889.sbm .md-cap { font-size: 11.5px; font-weight: 600; letter-spacing: .14em; color: var(--c-muted); margin-bottom: 14px; text-transform: uppercase; }
3890
3891.sbm .md-grp { margin-bottom: 14px; }
3892.sbm .md-grp .gl { display: flex; justify-content: space-between; font-size: 14px; margin-bottom: 5px; }
3893.sbm .md-grp .gl .gn { color: var(--c-midnight); font-weight: 600; }
3894.sbm .md-grp .gl .gv { color: var(--c-muted); font-weight: 600; }
3895.sbm .md-bar-bg { height: 16px; border-radius: 8px; background: rgba(10,68,68,.07); overflow: hidden; position: relative; }
3896.sbm .md-bar { height: 100%; border-radius: 8px; transform-origin: left; }
3897.sbm .md-bar.base { background: var(--grad-bar-groupA); }   /* Group A bar color */
3898.sbm .md-bar.fix  { background: var(--grad-bar-fix); transform: scaleX(.78); }  /* Group B remediated bar */
3899.sbm .scene.active .md-bar.fix { animation: sbm-mdFix calc(1.1s * var(--dur-scale,1)) ease calc(.9s * var(--dur-scale,1)) forwards; }
3900.sbm .md-bar.add  { position: absolute; top: 0; height: 100%; left: 78%; width: 22%; background: var(--grad-bar-add); opacity: 0; border-radius: 8px; }  /* top-up overlay */
3901.sbm .scene.active .md-bar.add { animation: sbm-fade calc(.6s * var(--dur-scale,1)) ease calc(1.2s * var(--dur-scale,1)) both; }
3902
3903.sbm .md-closed { display: flex; align-items: center; gap: 12px; background: var(--grad-closed-box); border: 1.5px solid var(--c-purple); border-radius: 10px; padding: 12px 16px; margin-top: 4px; opacity: 0; }
3904.sbm .scene.active .md-closed { animation: sbm-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.6s * var(--dur-scale,1)) both; }
3905.sbm .md-closed .ci { width: 28px; height: 28px; border-radius: 50%; background: var(--grad-closed-icon); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 17px; font-weight: 700; flex-shrink: 0; }
3906.sbm .md-closed .ctxt .ct { font-size: 14px; font-weight: 600; color: var(--c-midnight); }
3907.sbm .md-closed .ctxt .cs { font-size: 12px; color: #6a5a86; margin-top: 2px; }   /* muted purple sub-text */
3908
3909/* ═════════ SCENE 3 — IMPLEMENT (LIGHT card — same family as id/md, faint cool tint) ═════════ */
3910.sbm .im-hero {
3911  border-radius: 10px; 
3912  padding: 30px; 
3913  opacity: 0;
3914  color: var(--c-midnight);
3915  background: var(--grad-hero-bg);                /* light tint (color: --grad-hero-bg) */
3916  border: 1px solid var(--card-border);
3917  box-shadow: 0 4px 16px rgba(4,30,30,.10);       /* a touch deeper than id/md so the finale lifts */
3918  position: relative; overflow: hidden;
3919}
3920/* top stripe  (color: --grad-hero-stripe) */
3921.sbm .im-hero::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 5.5px; background: var(--grad-hero-stripe); background-size: 350% 200%; animation: sbm-sweep calc(5s * var(--dur-scale,1)) linear infinite; }
3922.sbm .scene.active .im-hero { animation: sbm-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(.2s * var(--dur-scale,1)) both; }
3923.sbm .im-cap { font-size: 11.5px; font-weight: 600; letter-spacing: .14em; color: var(--c-techteal); margin-bottom: 5px; text-transform: uppercase; }
3924.sbm .im-h { font-family: 'Zodiak', serif; font-size: 22px; font-weight: 600; color: var(--c-midnight); margin-bottom: 13px; }
3925
3926.sbm .im-list { display: flex; flex-direction: column; gap: 7px; margin-bottom: 13px; }
3927.sbm .im-item { display: flex; align-items: center; gap: 11px; background: rgba(10,68,68,.04); border: 1px solid var(--card-border); border-radius: 9px; padding: 9px 13px; opacity: 0; }
3928.sbm .scene.active .im-item:nth-child(1) { animation: sbm-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(.7s * var(--dur-scale,1)) both; }
3929.sbm .scene.active .im-item:nth-child(2) { animation: sbm-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(.9s * var(--dur-scale,1)) both; }
3930.sbm .scene.active .im-item:nth-child(3) { animation: sbm-fadeUp calc(.45s * var(--dur-scale,1)) ease calc(1.1s * var(--dur-scale,1)) both; }
3931.sbm .im-item .chk { width: 22px; height: 22px; border-radius: 50%; background: var(--grad-check-circle); display: flex; align-items: center; justify-content: center; flex-shrink: 0; box-shadow: 0 0 8px rgba(226,255,101,.35); }
3932.sbm .im-item .chk svg { display: block; }
3933.sbm .im-item .chk .cpath { stroke: var(--c-midnight); stroke-width: 2.5; fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 18; stroke-dashoffset: 18; }
3934.sbm .scene.active .im-item:nth-child(1) .cpath { animation: sbm-drawCheck calc(.4s * var(--dur-scale,1)) ease calc(1.0s * var(--dur-scale,1)) forwards; }
3935.sbm .scene.active .im-item:nth-child(2) .cpath { animation: sbm-drawCheck calc(.4s * var(--dur-scale,1)) ease calc(1.2s * var(--dur-scale,1)) forwards; }
3936.sbm .scene.active .im-item:nth-child(3) .cpath { animation: sbm-drawCheck calc(.4s * var(--dur-scale,1)) ease calc(1.4s * var(--dur-scale,1)) forwards; }
3937.sbm .im-item .itxt { font-size: 14px; font-weight: 600; color: var(--c-midnight); }
3938.sbm .im-item .itxt .isub { font-size: 12px; font-weight: 400; color: var(--c-muted);
3938 margin-top: 1px; }
3939
3940.sbm .im-payoff { display: flex; align-items: center; gap: 13px; border-top: 1px solid var(--card-border); padding-top: 12px; opacity: 0; }
3941.sbm .scene.active .im-payoff { animation: sbm-fadeUp calc(.5s * var(--dur-scale,1)) ease calc(1.5s * var(--dur-scale,1)) both; }
3942.sbm .im-shield { flex-shrink: 0; }
3943.sbm .im-shield .body  { fill: url(#sbm-shield-grad); stroke: var(--shield-stroke); stroke-width: 2; }   /* shield body (gradient defined in SVG <defs>) + outline */
3944.sbm .im-shield .spath { stroke: var(--shield-check); stroke-width: 4; fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 50; stroke-dashoffset: 50; }
3945.sbm .scene.active .im-shield .spath { animation: sbm-drawCheck calc(.6s * var(--dur-scale,1)) ease calc(1.9s * var(--dur-scale,1)) forwards; }
3946.sbm .im-payoff .ptxt { font-size: 14px; font-weight: 600; color: var(--c-midnight); line-height: 1.35; }
3947.sbm .im-payoff .ptxt b { color: var(--c-techteal); }
3948
3949/* ─────────── play / pause toggle (dev convenience — delete this block + the
3950   <button> + the JS listener to remove it entirely for production) ─────────── */
3951.sbm .sbm-toggle {
3952  position: absolute; bottom: 10px; right: 10px; z-index: 40;
3953  width: 24px; height: 24px; border-radius: 50%; padding: 0;
3954  border: 1px solid rgba(10,68,68,.2);
3955  background: rgba(255,255,255,.7);
3956  display: flex; align-items: center; justify-content: center;
3957  cursor: pointer; opacity: .5;
3958  transition: opacity .2s ease, background .2s ease;
3959}
3960.sbm .sbm-toggle:hover { opacity: 1; background: #fff; }
3961.sbm .sbm-toggle svg   { width: 11px; height: 11px; display: block; fill: var(--c-techteal); }
3962.sbm .sbm-toggle .ic-play  { display: none; }
3963.sbm .sbm-toggle.paused .ic-pause { display: none; }
3964.sbm .sbm-toggle.paused .ic-play  { display: block; }
3965/* when paused, freeze every animation in the embed so you get a still frame */
3966.sbm .stage.is-paused *, .sbm .stage.is-paused *::before, .sbm .stage.is-paused *::after { animation-play-state: paused !important; }
3967</style>
3968
3969<!-- ╔══════════════╗
3970     ║    MARKUP    ║
3971     ╚══════════════╝ -->
3972<div class="sbm-fit">
3973<div class="sbm">
3974<div class="stage" id="sbm-stage">
3975
3976  <!-- Phase ribbon -->
3977  <div class="ribbon">
3978    <div class="step" data-step="0"><span class="num">1</span>Identify</div>
3979    <div class="connector"></div>
3980    <div class="step" data-step="1"><span class="num">2</span>Model</div>
3981    <div class="connector"></div>
3982    <div class="step" data-step="2"><span class="num">3</span>Implement</div>
3983  </div>
3984
3985  <!-- ══ SCENE 1: IDENTIFY ══ -->
3986  <div class="scene" id="sbm-scene-0">
3987    <div class="sc-label">Identify the gaps</div>
3988    <div class="sc-sub">Experts pinpoint real, statistically significant pay gaps in your data.</div>
3989    <div class="expert-badge"><span class="star">&#9733;</span> Expert-led analysis</div>
3990
3991    <div class="id-card">
3992      <div class="id-cap">PAY EQUITY DIAGNOSIS</div>
3993
3994      <div class="id-grp">
3995        <div class="gl"><span class="gn">Group A</span><span class="gv">$104,200</span></div>
3996        <div class="id-bar-bg"><div class="id-bar bar-a" style="width:100%"></div></div>
3997      </div>
3998      <div class="id-grp">
3999        <div class="gl"><span class="gn">Group B</span><span class="gv">$95,900</span></div>
4000        <div class="id-bar-bg"><div class="id-bar bar-b" style="width:78%"></div></div>
4001      </div>
4002
4003      <div class="id-gapcallout">
4004        <div class="gpct">&minus;8%</div>
4005        <div class="gtxt">
4006          <div class="gt">Statistically significant gap flagged</div>
4007          <div class="gs">Surfaced from your data, not a rule of thumb</div>
4008        </div>
4009      </div>
4010    </div>
4011  </div>
4012
4013  <!-- ══ SCENE 2: MODEL ══ -->
4014  <div class="scene" id="sbm-scene-1">
4015    <div class="sc-label">Model the fixes</div>
4016    <div class="sc-sub">Specialists model remediation scenarios &mdash; costed and ready to act on.</div>
4017    <div class="expert-badge"><span class="star">&#9733;</span> Scenario modeling</div>
4018
4019    <div class="md-card">
4020      <div class="md-cap">REMEDIATION SCENARIO</div>
4021
4022      <div class="md-grp">
4023        <div class="gl"><span class="gn">Group A</span><span class="gv">$104,200</span></div>
4024        <div class="md-bar-bg"><div class="md-bar base" style="width:100%"></div></div>
4025      </div>
4026      <div class="md-grp">
4027        <div class="gl"><span class="gn">Group B</span><span class="gv">$103,800</span></div>
4028        <div class="md-bar-bg">
4029          <div class="md-bar fix" style="width:100%"></div>
4030          <div class="md-bar add"></div>
4031        </div>
4032      </div>
4033
4034      <div class="md-closed">
4035        <div class="ci">&check;</div>
4036        <div class="ctxt">
4037          <div class="ct">Gap closed &mdash; modeled to cost</div>
4038          <div class="cs">Adjustment: +$148K across 32 employees</div>
4039        </div>
4040      </div>
4041    </div>
4042  </div>
4043
4044  <!-- ══ SCENE 3: IMPLEMENT ══ -->
4045  <div class="scene" id="sbm-scene-2">
4046    <div class="sc-label">Implement with confidence</div>
4047    <div class="sc-sub">Hands-on rollout and a defensible record &mdash; so the plan holds and sticks.</div>
4048    <div class="expert-badge"><span class="star">&#9733;</span> Change management</div>
4049
4050    <div class="im-hero">
4051      <div class="im-cap">IMPLEMENTATION &amp; CHANGE MANAGEMENT</div>
4052      <div class="im-h">A plan that holds up.</div>
4053
4054      <div class="im-list">
4055        <div class="im-item">
4056          <div class="chk"><svg width="13" height="13" viewBox="0 0 14 14"><polyline class="cpath" points="2,7 6,11 12,3"/></svg></div>
4057          <div class="itxt">Documented methodology<div class="isub">Every decision traceable end to end</div></div>
4058        </div>
4059        <div class="im-item">
4060          <div class="chk"><svg width="13" height="13" viewBox="0 0 14 14"><polyline class="cpath" points="2,7 6,11 12,3"/></svg></div>
4061          <div class="itxt">Audit-ready evidence<div class="isub">Holds up under scrutiny</div></div>
4062        </div>
4063        <div class="im-item">
4064          <div class="chk"><svg width="13" height="13" viewBox="0 0 14 14"><polyline class="cpath" points="2,7 6,11 12,3"/></svg></div>
4065          <div class="itxt">Trained on your real data<div class="isub">Workflows stick, value lands fast</div></div>
4066        </div>
4067      </div>
4068
4069      <div class="im-payoff">
4070        <svg class="im-shield" width="44" height="50" viewBox="0 0 46 52">
4071          <defs>
4072            <!-- shield fill gradient — stop colors come from --shield-from / --shield-to -->
4073            <linearGradient id="sbm-shield-grad" x1="0" y1="0" x2="1" y2="0">
4074              <stop offset="0%"   stop-color="var(--shield-from)"/>
4075              <stop offset="100%" stop-color="var(--shield-to)"/>
4076            </linearGradient>
4077          </defs>
4078          <path class="body" d="M23,3 L43,10 L43,30 C43,42 34,50 23,50 C12,50 3,42 3,30 L3,10 Z"/>
4079          <polyline class="spath" points="14,27 21,34 33,19"/>
4080        </svg>
4081        <div class="ptxt">From flagged gap to <b>defensible, implemented plan</b> &mdash; without adding headcount.</div>
4082      </div>
4083    </div>
4084  </div>
4085
4086  <!-- play / pause toggle (dev convenience) -->
4087  <button class="sbm-toggle" id="sbm-toggle" type="button" aria-label="Pause animation">
4088    <svg class="ic-pause" viewBox="0 0 12 12"><rect x="2" y="1.5" width="2.6" height="9" rx="0.6"/><rect x="7.4" y="1.5" width="2.6" height="9" rx="0.6"/></svg>
4089    <svg class="ic-play"  viewBox="0 0 12 12"><path d="M3.8 2.4 L10.8 6 L3.8 9.6 Z"/></svg>
4090  </button>
4091
4092</div><!-- /.stage -->
4093</div><!-- /.sbm -->
4094</div><!-- /.sbm-fit -->
4095
4096<script>
4097(function () {
4098  /* Scoped to this embed's root — safe if multiple embeds live on the page */
4099  var root   = document.getElementById('sbm-stage');
4100  var scenes = root.querySelectorAll('.scene');
4101  var steps  = root.querySelectorAll('.ribbon .step');
4102  var btn    = document.getElementById('sbm-toggle');
4103
4104  /* ── responsive scaling ──
4105     Scale the whole embed to its column's width (measured directly — robust in
4106     any layout). The wrapper's aspect-ratio reserves the matching height. */
4107  var fit = root.closest('.sbm-fit');
4108  if (fit) {
4109    var nativeW = parseFloat(getComputedStyle(fit).getPropertyValue('--sbm-w')) || 557;
4110    var rescale = function () {
4111      fit.style.setProperty('--sbm-scale', (fit.clientWidth / nativeW).toFixed(4));
4112    };
4113    rescale();
4114    if (window.ResizeObserver) new ResizeObserver(rescale).observe(fit);
4115    else window.addEventListener('resize', rescale);
4116  }
4117
4118  /* ── read the --speed flag set at the top of the CSS ──
4119     >0 scales both the scene timing AND every CSS animation/transition
4120     (via --dur-scale).  0 = static: reveal Scene 1 fully formed, no loop. */
4121  var speed = parseFloat(getComputedStyle(root).getPropertyValue('--speed'));
4122  if (isNaN(speed)) speed = 1;
4123  var animate = speed > 0;
4124  root.style.setProperty('--dur-scale', animate ? (1 / speed) : 0);
4125
4126  /* show / hide the dev play-pause button (reads --show-toggle from the CSS) */
4127  if (parseFloat(getComputedStyle(root).getPropertyValue('--show-toggle')) === 0) {
4128    btn.style.display = 'none';
4129  }
4130
4131  /* show / hide the expert badge (reads --show-badge from the CSS) */
4132  if (parseFloat(getComputedStyle(root).getPropertyValue('--show-badge')) === 0) {
4133    root.querySelectorAll('.expert-badge').forEach(function (b) { b.style.display = 'none'; });
4134  }
4135
4136  var times = [6000, 6500, 7000].map(function (t) {   /* base scene durations (ms) */
4137    return animate ? t / speed : 0;
4138  });
4139
4140  var cur   = 0;
4141  var timer = null;
4142  var paused = false;
4143
4144  function show(i) {
4145    clearTimeout(timer);
4146    scenes.forEach(function (s, j) { s.classList.toggle('active', j === i); });
4147    steps.forEach(function (s, j) {
4148      s.classList.remove('active', 'done');
4149      if      (j < i)   s.classList.add('done');
4150      else if (j === i) s.classList.add('active');
4151    });
4152    cur = i;
4153    if (animate && !paused) timer = setTimeout(next, times[i]);
4154  }
4155  function next() { show((cur + 1) % scenes.length); }
4156
4157  /* play / pause toggle (dev convenience — remove btn + this listener for production) */
4158  btn.addEventListener('click', function () {
4159    paused = !paused;
4160    btn.classList.toggle('paused', paused);
4161    btn.setAttribute('aria-label', paused ? 'Play animation' : 'Pause animation');
4162    root.classList.toggle('is-paused', paused);          /* freezes all CSS motion */
4163    if (paused)        clearTimeout(timer);
4164    else if (animate)  timer = setTimeout(next, times[cur]);   /* resume current scene */
4165  });
4166
4167  /* Starts when scrolled into view, then fires once.
4168     To play immediately on page load instead, delete the observer
4169     block below and replace it with a single line:  show(0); */
4170  var observer = new IntersectionObserver(function (entries) {
4171    entries.forEach(function (entry) {
4172      if (entry.isIntersecting) { show(0); observer.disconnect(); }
4173    });
4174  }, { threshold: 0.25 });
4175
4176  observer.observe(root);
4177}());
4178</script>
4178</div></div></div></div></div></section><section id="why-payscale" class="section bg-dark-gradient bottom-pad-2"><div class="padding-global"><div class="container-global"><div class="awards-wrapper is-white"><div class="awards-top-wrapper"><div class="max-width-50"><div class="header-wrapper"><div data-wf--eyebrow-pill--variant="yellow" class="eyebrow-pill"><div>✦ Customer success</div></div><h2>Don’t just take our word for it</h2><p class="text-size-large">Hear from comp leaders how Payscale delivers clarity, scale, and trust in their compensation strategy.</p></div></div><div class="awards-g2-wrapper"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6818937c3a4a53d8df1a4ffb_g2.svg" alt="" class="awards-g2-logo"/><div>600+ 5 Star Reviews</div></div></div><div data-wf--g2-awards-only--variant="base" class="awards-logo-wrapper"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f089878ebdf322fe98b_CompensationManagement_BestRelationship_Enterprise_Total.png" loading="lazy" width="105.5" alt="" sizes="106px" srcset="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f089878ebdf322fe98b_CompensationManagement_BestRelationship_Enterprise_Total-p-500.png 500w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f089878ebdf322fe98b_CompensationManagement_BestRelationship_Enterprise_Total-p-800.png 800w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f089878ebdf322fe98b_CompensationManagement_BestRelationship_Enterprise_Total.png 868w" class="awards-logo"/><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08155acb812c86eced_SalaryBenchmarking_HighestUserAdoption_Adoption.png" loading="lazy" width="Auto" height="Auto" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08155acb812c86eced_SalaryBenchmarking_HighestUserAdoption_Adoption-p-500.png 500w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08155acb812c86eced_SalaryBenchmarking_HighestUserAdoption_Adoption-p-800.png 800w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08155acb812c86eced_SalaryBenchmarking_HighestUserAdoption_Adoption.png 868w" class="awards-logo"/><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08600315f8665fc23e_CompensationManagement_Leader_Leader%20(1).png" loading="lazy" width="105.5" alt="" sizes="106px" srcset="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08600315f8665fc23e_CompensationManagement_Leader_Leader%20(1)-p-500.png 500w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08600315f8665fc23e_CompensationManagement_Leader_Leader%20(1)-p-800.png 800w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08600315f8665fc23e_CompensationManagement_Leader_Leader%20(1).png 868w" class="awards-logo"/><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08a1772d0863bb7fd7_CompensationManagement_BestEstimatedROI_Enterprise_Roi%20(1).png" loading="lazy" width="105.5" alt="" sizes="106px" srcset="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08a1772d0863bb7fd7_CompensationManagement_BestEstimatedROI_Enterprise_Roi%20(1)-p-500.png 500w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08a1772d0863bb7fd7_CompensationManagement_BestEstimatedROI_Enterprise_Roi%20(1)-p-800.png 800w, https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6ab18f08a1772d0863bb7fd7_CompensationManagement_BestEstimatedROI_Enterprise_Roi%20(1).png 868w" class="awards-logo"/></div><div class="awards-quote-wrapper-with-logo max-width-54 top-2"><div class="fdbck-content-card"><p class="txt-quote is-gap">“Payscale changed my life. I can’t imagine doing compensation work without it now.</p><div class="quote-sub-content"><div><span class="quote-text-small">The three things I can attribute to Payscale directly are quality, consistency, and efficiency.”</span></div><div class="quote-logo-head-name"><img loading="lazy" height="35" alt="" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a3aee230268cec0e3d1ce96_Baylor-University-Logo-white.svg" class="quote-logo-icon"/><div class="quote-title-wrapper"><div class="quote-headshot-wrapper"><img loading="lazy" src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6a34013256c5c38fefd30bf1_Michelle%20Huse.jpg" alt="Michelle Huse, Baylor University" class="quote-headshot-white"/></div><div class="quote-name-wrapper"><div><strong>Michelle Huse</strong></div><div>Associate Vice President for Culture &amp; Talent, Baylor University<br/></div></div></div></div></div></div></div><div class="button-group"><div aria-roledescription="open-modal-trigger" class="btn" data-wf--cta-button---popup--variant="primary" role="button" aria-controls="button-popup" ariahaspopup="dialog" fs-modal-element="open-1" aria-expanded="false" tabindex="0"><div class="text-block-36">Get a Demo</div></div><a data-wf-native-id-path="5dab46b8-66f3-76cc-4156-90accc2bb440:3b6dd756-5793-28ee-8729-70c68f0f55cc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="3b6dd756-5793-28ee-8729-70c68f0f55cc" data-wf-component-context="%5B%7B%22componentId%22%3A%223b6dd756-5793-28ee-8729-70c68f0f55a2%22%2C%22instanceId%22%3A%225dab46b8-66f3-76cc-4156-90accc2bb440%22%7D%5D" href="/why-payscale/customer-stories" class="btn is-transparent w-inline-block"><div>View Case Studies</div></a></div></div></div></div></section><section id="security" class="section bg-offwhite"><div class="pd-global"><div class="c-large"><div class="header-wrapper"><h2 class="heading-1">Enterprise-grade security &amp; partnerships</h2><div class="max-width-50"><p class="text-size-large">Strategic partnership with Trusaic for advanced pay equity remediation when deeper analysis is required.</p></div></div><div class="c-small"><div class="_4col-layout legal"><div id="w-node-acf48348-4f51-ae2c-2c85-bb3fbdcd4632-bdcd4624" class="legal-item"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681c65b1c493cae9942720d7_aicpa.png" loading="lazy" width="149.5" alt=""/></div><div class="legal-item"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681c65b1b9a706b5e2272958_gdpr.png" loading="lazy" width="149.5" alt=""/></div><div class="legal-item"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681c65b17e56661d83bfcff9_ccpa.png" loading="lazy" width="149.5" alt=""/></div><div class="legal-item"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/681c65b1a450f489995ee72d_tx.png" loading="lazy" width="149.5" alt=""/></div><div class="legal-item"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/68af23dfe8bc3eb7127b8395_preview-full-Snipped-Version-of-Banner.jpg" loading="lazy" width="149.5" alt=""/></div></div></div></div></div></section><section data-wf--cta-section--variant="base" class="section bg-primary"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/68189b80e0f66cab07117ee9_cta.svg" loading="lazy" alt="" class="cta-bg"/><div class="padding-global"><div class="container-global"><div class="cta-wrapper"><div class="cta-content"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/68189b97d97ab763d9c3d6c5_logo-icon.svg" loading="lazy" alt=""/><h2 class="heading-3 tc-white">Ready to move from reactive compensation to continuous intelligence?</h2><p class="text-size-large">See how Payscale Ascent helps teams reduce manual work, get fresher data, and make faster, more defensible decisions across the entire compensation lifecycle.</p></div><a data-wf-native-id-path="cda4c53e-718d-d158-ea9a-13aee50001f0:3193e798-386b-6955-4452-ef6f2aab26d5" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="3193e798-386b-6955-4452-ef6f2aab26d5" data-wf-component-context="%5B%7B%22componentId%22%3A%22a7c5f524-bb1f-7742-7c07-1912d09824f9%22%2C%22instanceId%22%3A%22cda4c53e-718d-d158-ea9a-13aee50001f0%22%7D%5D" href="/demo-request/get-a-demo" class="btn is-yellow w-inline-block"><div>Talk to Sales</div></a></div></div></div></section></main><footer class="sct is-footer"><div class="padding-global"><div class="container-global"><div class="footer_top-group"><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cf98" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cf98" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/" class="footer-logo w-inline-block"><img src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/6815002921cb0e40bdfaaa83_logo-dark.svg" loading="lazy" alt=""/></a><div class="footer_group"><div class="footer_link-group"><div class="text-overline">Solutions</div><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cf9e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cf9e" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/products/software/ascent" aria-current="page" class="footer_link w-inline-block w--current"><div>
4178Payscale Ascent</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfa2" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfa2" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/solutions/benchmarking" class="footer_link w-inline-block"><div>Benchmarking</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfa6" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfa6" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/solutions/compensation-planning" class="footer_link w-inline-block"><div>Compensation Strategy</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfaa" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfaa" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/solutions/job-management" class="footer_link w-inline-block"><div>Job Management</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfae" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfae" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/marketplace" class="footer_link w-inline-block"><div>Partners &amp; integrations</div></a></div><div class="footer_link-group"><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:f83df64e-3c68-9de6-8806-5c4e4968c0fc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f83df64e-3c68-9de6-8806-5c4e4968c0fc" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/products/data" class="link-overline text-overline w-inline-block"><div>Data</div><div class="embed-icon w-embed"><svg width="5" height="8" viewBox="0 0 5 8" fill="none" xmlns="http://www.w3.org/2000/svg">
4179<path d="M4.44 4.34922L0.84 7.94922L-3.67176e-08 7.10922L2.76 4.34922L-2.78004e-07 1.58922L0.84 0.749219L4.44 4.34922Z" fill="#1C8391"/>
4180</svg></div></a></div><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:bd70530b-003e-2e9d-3507-574dc79ebe56" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="bd70530b-003e-2e9d-3507-574dc79ebe56" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/demo-request/get-a-demo" class="link-overline text-overline w-inline-block"><div>Get started</div><div class="embed-icon w-embed"><svg width="5" height="8" viewBox="0 0 5 8" fill="none" xmlns="http://www.w3.org/2000/svg">
4181<path d="M4.44 4.34922L0.84 7.94922L-3.67176e-08 7.10922L2.76 4.34922L-2.78004e-07 1.58922L0.84 0.749219L4.44 4.34922Z" fill="#1C8391"/>
4182</svg></div></a><div class="footer_link-group"><div class="text-overline">Support</div><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfc0" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfc0" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/about/contact-us" class="footer_link w-inline-block"><div>Contact us</div></a></div></div><div class="footer_group"><div class="footer_link-group"><div class="text-overline">Customer success</div><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfcd" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfcd" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/customer-success" class="footer_link w-inline-block"><div>Customer success &amp; services</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfd1" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfd1" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/why-payscale/customer-stories" class="footer_link w-inline-block"><div>Customer stories</div></a></div><div class="footer_link-group"><div class="text-overline">Company</div><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfd8" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfd8" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/why-payscale" class="footer_link w-inline-block"><div>Why Payscale</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfdc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfdc" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/why-payscale/executive-leadership" class="footer_link w-inline-block"><div>Leadership</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfe0" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfe0" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/careers" class="footer_link w-inline-block"><div>Careers</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cfe4" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cfe4" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/in-the-news" class="footer_link w-inline-block"><div>Newsroom</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:c89848f9-24fc-49e0-8f3c-9b7f911ce01b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="c89848f9-24fc-49e0-8f3c-9b7f911ce01b" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/press-releases" class="footer_link w-inline-block"><div>Press releases</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ee46870-ef25-7566-c7e6-19037d18f0a7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ee46870-ef25-7566-c7e6-19037d18f0a7" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.payscale.com/about/esg" class="footer_link w-inline-block"><div>Corporate responsibility</div></a></div></div><div class="footer_group"><div class="footer_link-group"><div class="text-overline">Employees &amp; job seekers</div><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:ad78a0c0-95df-1c87-d546-f273c5fd718c" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ad78a0c0-95df-1c87-d546-f273c5fd718c" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/for-individuals" class="footer_link w-inline-block"><div>For individuals</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:ad78a0c0-95df-1c87-d546-f273c5fd718f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ad78a0c0-95df-1c87-d546-f273c5fd718f" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.payscale.com/research/US/Country=United_States/Salary" class="footer_link w-inline-block"><div>Salary research</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:ad78a0c0-95df-1c87-d546-f273c5fd7192" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ad78a0c0-95df-1c87-d546-f273c5fd7192" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.payscale.com/research/US/Job?tk_ctg=jse&amp;tk_cta=dmo" class="footer_link w-inline-block"><div>Find a job</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:ad78a0c0-95df-1c87-d546-f273c5fd7195" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ad78a0c0-95df-1c87-d546-f273c5fd7195" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.payscale.com/cost-of-living-calculator" class="footer_link w-inline-block"><div>Cost of living calculator</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:ad78a0c0-95df-1c87-d546-f273c5fd7198" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ad78a0c0-95df-1c87-d546-f273c5fd7198" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.payscale.com/career-path-planner" class="footer_link w-inline-block"><div>Career path planner</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:ad78a0c0-95df-1c87-d546-f273c5fd719b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ad78a0c0-95df-1c87-d546-f273c5fd719b" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.payscale.com/survey" class="footer_link w-inline-block"><div>Salary survey</div></a></div><div class="footer_link-group"><div class="footer_sc-wr is-lg-column"><div class="text-overline">We’re social</div><div class="footer_soc-links"><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cffc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cffc" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.facebook.com/Payscale" target="_blank" class="w-inline-block"><div class="footer-social_icon w-embed">
4182<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
4183<g clip-path="url(#clip0_2539_1652)">
4184<path d="M12 0.349609C5.37264 0.349609 0 5.72225 0 12.3496C0 17.9771 3.87456 22.6994 9.10128 23.9963V16.0168H6.62688V12.3496H9.10128V10.7694C9.10128 6.68513 10.9498 4.79201 14.9597 4.79201C15.72 4.79201 17.0318 4.94129 17.5685 5.09009V8.41409C17.2853 8.38433 16.7933 8.36945 16.1822 8.36945C14.2147 8.36945 13.4544 9.11489 13.4544 11.0526V12.3496H17.3741L16.7006 16.0168H13.4544V24.2618C19.3963 23.5442 24.0005 18.485 24.0005 12.3496C24 5.72225 18.6274 0.349609 12 0.349609Z" fill="currentColor"/>
4185</g>
4186<defs>
4187<clipPath id="clip0_2539_1652">
4188<rect width="24" height="24" fill="white" transform="translate(0 0.349609)"/>
4189</clipPath>
4190</defs>
4191</svg></div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861cffe" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861cffe" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://twitter.com/payscale" target="_blank" class="w-inline-block"><div class="footer-social_icon w-embed"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
4192<path d="M18.3263 2.25391H21.6998L14.3297 10.6774L23 22.1399H16.2112L10.894 15.1879L4.80995 22.1399H1.43443L9.31743 13.13L1 2.25391H7.96111L12.7674 8.60824L18.3263 2.25391ZM17.1423 20.1207H19.0116L6.94539 4.16704H4.93946L17.1423 20.1207Z" fill="currentColor"/>
4193</svg></div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861d000" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861d000" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.instagram.com/payscale/" target="_blank" class="w-inline-block"><div class="footer-social_icon w-embed"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
4194<g clip-path="url(#clip0_2539_1656)">
4195<path d="M12 2.51055C15.2063 2.51055 15.5859 2.52461 16.8469 2.58086C18.0188 2.63242 18.6516 2.8293 19.0734 2.99336C19.6313 3.20898 20.0344 3.47148 20.4516 3.88867C20.8734 4.31055 21.1313 4.70898 21.3469 5.2668C21.5109 5.68867 21.7078 6.32617 21.7594 7.49336C21.8156 8.75898 21.8297 9.13867 21.8297 12.3402C21.8297 15.5465 21.8156 15.9262 21.7594 17.1871C21.7078 18.359 21.5109 18.9918 21.3469 19.4137C21.1313 19.9715 20.8687 20.3746 20.4516 20.7918C20.0297 21.2137 19.6313 21.4715 19.0734 21.6871C18.6516 21.8512 18.0141 22.048 16.8469 22.0996C15.5813 22.1559 15.2016 22.1699 12 22.1699C8.79375 22.1699 8.41406 22.1559 7.15313 22.0996C5.98125 22.048 5.34844 21.8512 4.92656 21.6871C4.36875 21.4715 3.96563 21.209 3.54844 20.7918C3.12656 20.3699 2.86875 19.9715 2.65313 19.4137C2.48906 18.9918 2.29219 18.3543 2.24063 17.1871C2.18438 15.9215 2.17031 15.5418 2.17031 12.3402C2.17031 9.13398 2.18438 8.7543 2.24063 7.49336C2.29219 6.32148 2.48906 5.68867 2.65313 5.2668C2.86875 4.70898 3.13125 4.30586 3.54844 3.88867C3.97031 3.4668 4.36875 3.20898 4.92656 2.99336C5.34844 2.8293 5.98594 2.63242 7.15313 2.58086C8.41406 2.52461 8.79375 2.51055 12 2.51055ZM12 0.349609C8.74219 0.349609 8.33438 0.363672 7.05469 0.419922C5.77969 0.476172 4.90313 0.682422 4.14375 0.977734C3.35156 1.28711 2.68125 1.69492 2.01563 2.36523C1.34531 3.03086 0.9375 3.70117 0.628125 4.48867C0.332812 5.25273 0.126563 6.12461 0.0703125 7.39961C0.0140625 8.68398 0 9.0918 0 12.3496C0 15.6074 0.0140625 16.0152 0.0703125 17.2949C0.126563 18.5699 0.332812 19.4465 0.628125 20.2059C0.9375 20.998 1.34531 21.6684 2.01563 22.334C2.68125 22.9996 3.35156 23.4121 4.13906 23.7168C4.90313 24.0121 5.775 24.2184 7.05 24.2746C8.32969 24.3309 8.7375 24.3449 11.9953 24.3449C15.2531 24.3449 15.6609 24.3309 16.9406 24.2746C18.2156 24.2184 19.0922 24.0121 19.8516 23.7168C20.6391 23.4121 21.3094 22.9996 21.975 22.334C22.6406 21.6684 23.0531 20.998 23.3578 20.2105C23.6531 19.4465 23.8594 18.5746 23.9156 17.2996C23.9719 16.0199 23.9859 
419515.6121 23.9859 12.3543C23.9859 9.09649 23.9719 8.68867 23.9156 7.40898C23.8594 6.13398 23.6531 5.25742 23.3578 4.49805C23.0625 3.70117 22.6547 3.03086 21.9844 2.36523C21.3188 1.69961 20.6484 1.28711 19.8609 0.982422C19.0969 0.687109 18.225 0.480859 16.95 0.424609C15.6656 0.363672 15.2578 0.349609 12 0.349609Z" fill="currentColor"/>
4196<path d="M12 6.18555C8.59688 6.18555 5.83594 8.94648 5.83594 12.3496C5.83594 15.7527 8.59688 18.5137 12 18.5137C15.4031 18.5137 18.1641 15.7527 18.1641 12.3496C18.1641 8.94648 15.4031 6.18555 12 6.18555ZM12 16.348C9.79219 16.348 8.00156 14.5574 8.00156 12.3496C8.00156 10.1418 9.79219 8.35117 12 8.35117C14.2078 8.35117 15.9984 10.1418 15.9984 12.3496C15.9984 14.5574 14.2078 16.348 12 16.348Z" fill="currentColor"/>
4197<path d="M19.8469 5.94199C19.8469 6.73887 19.2 7.38106 18.4078 7.38106C17.6109 7.38106 16.9688 6.73418 16.9688 5.94199C16.9688 5.14512 17.6156 4.50293 18.4078 4.50293C19.2 4.50293 19.8469 5.14981 19.8469 5.94199Z" fill="currentColor"/>
4198</g>
4199<defs>
4200<clipPath id="clip0_2539_1656">
4201<rect width="24" height="24" fill="white" transform="translate(0 0.349609)"/>
4202</clipPath>
4203</defs>
4204</svg></div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861d002" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861d002" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.linkedin.com/company/payscale" target="_blank" class="w-inline-block"><div class="footer-social_icon w-embed"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
4205<g clip-path="url(#clip0_2539_1660)">
4206<path d="M22.2234 0.349609H1.77187C0.792187 0.349609 0 1.12305 0 2.0793V22.6152C0 23.5715 0.792187 24.3496 1.77187 24.3496H22.2234C23.2031 24.3496 24 23.5715 24 22.6199V2.0793C24 1.12305 23.2031 0.349609 22.2234 0.349609ZM7.12031 20.8012H3.55781V9.34492H7.12031V20.8012ZM5.33906 7.78398C4.19531 7.78398 3.27188 6.86055 3.27188 5.72148C3.27188 4.58242 4.19531 3.65898 5.33906 3.65898C6.47813 3.65898 7.40156 4.58242 7.40156 5.72148C7.40156 6.85586 6.47813 7.78398 5.33906 7.78398ZM20.4516 20.8012H16.8937V15.2324C16.8937 13.9059 16.8703 12.1949 15.0422 12.1949C13.1906 12.1949 12.9094 13.6434 12.9094 15.1387V20.8012H9.35625V9.34492H12.7687V10.9105H12.8156C13.2891 10.0105 14.4516 9.05898 16.1813 9.05898C19.7859 9.05898 20.4516 11.4309 20.4516 14.5152V20.8012Z" fill="currentColor"/>
4207</g>
4208<defs>
4209<clipPath id="clip0_2539_1660">
4210<rect width="24" height="24" fill="white" transform="translate(0 0.349609)"/>
4211</clipPath>
4212</defs>
4213</svg></div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:4e6fdf33-c6fb-1282-ae60-c74d74f3eab1" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="4e6fdf33-c6fb-1282-ae60-c74d74f3eab1" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="https://www.youtube.com/user/payscale" target="_blank" class="w-inline-block"><div class="footer-social_icon w-embed"><svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg">
4214<path d="M29.1626 4.82817C28.8853 3.29744 27.5639 2.18271 26.0305 1.83469C23.7357 1.34802 19.4889 1 14.894 1C10.3018 1 5.98695 1.34802 3.68951 1.83469C2.15878 2.18271 0.834693 3.22675 0.557368 4.82817C0.277325 6.56824 0 9.00435 0 12.1365C0 15.2686 0.277325 17.7047 0.62534 19.4448C0.905383 20.9755 2.22675 22.0903 3.75748 22.4383C6.19358 22.925 10.3698 23.273 14.9647 23.273C19.5595 23.273 23.7357 22.925 26.1718 22.4383C27.7026 22.0903 29.0239 21.0462 29.304 19.4448C29.5813 17.7047 29.9293 15.1979 30 12.1365C29.8586 9.00435 29.5106 6.56824 29.1626 4.82817ZM11.1365 17.0087V7.26427L19.6275 12.1365L11.1365 17.0087Z" fill="currentColor"/>
4215</svg></div></a></div></div></div></div></div><div class="footer_bottom-group"><div>© 2026 Payscale, Inc. All rights reserved.</div><div class="footer-bottom_links"><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861d008" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861d008" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/" class="footer-bottom-link w-inline-block"><div>Home</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861d00e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861d00e" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/about/privacy-policy" class="footer-bottom-link w-inline-block"><div>Privacy Statement</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861d011" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861d011" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/about/terms-of-use" class="footer-bottom-link w-inline-block"><div>Terms of Use</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:0ef709d2-caa5-ca35-0380-9f274861d014" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="0ef709d2-caa5-ca35-0380-9f274861d014" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/about/cookies-and-similar-technologies" class="footer-bottom-link w-inline-block"><div>Cookie Policy</div></a><a data-wf-native-id-path="d836b186-c784-12a8-4992-ef2caff74a49:6b1fb3eb-27eb-bb65-360c-1a9413553bf4" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6b1fb3eb-27eb-bb65-360c-1a9413553bf4" data-wf-component-context="%5B%7B%22componentId%22%3A%220ef709d2-caa5-ca35-0380-9f274861cf94%22%2C%22instanceId%22%3A%22d836b186-c784-12a8-4992-ef2caff74a49%22%7D%5D" href="/about/security" class="footer-bottom-link w-inline-block"><div>Trust Center</div></a></div></div></div></div></footer></div>
4215<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=678b9f42ff433e48155d0586" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
4215<script src="https://cdn.prod.website-files.com/678b9f42ff433e48155d0586/js/payscale-staging.b9ace017.8ab62a08e4b3bf2a.js" type="text/javascript" integrity="sha384-wZE4fDqIuQnDJPxxGQut9VwuMslv+ClrHmyz6Bn42gmDYSKYw/fTuvZvZSrwHQz5" crossorigin="anonymous"></script>
4215<!-- Custom - URL Parameter Forwarder - START -->
4216<script>
4217(function (opts) {
4218  var current = {
4219      state: document.location.href,
4220      query: document.location.search.substring(1),
4221      time: new Date().getTime(),
4222    },
4223    storage = {
4224      area: window.localStorage,
4225      key: "last_utm_query",
4226    },
4227    restored = null,
4228    updated = {};
4229
4230  var trackingRegex = /(^|&)(utm_|gclid|li_fat_id|msclkid)/;
4231  var queryParams = current.query
4232    .split("&")
4233    .filter((param) => !param.startsWith("tk"))
4234    .filter((param) => !param.startsWith("restored"))
4235    .filter((param) => !param.startsWith("_topic"))
4236    .filter((param) => !param.startsWith("_type"))
4237    .filter((param) => !param.startsWith("_sort"))
4238    .filter((param) => !param.startsWith("_industry"))
4239    .filter((param) => !param.startsWith("_services"))
4240    .filter((param) => !param.startsWith("_company_size"))
4241    .filter((param) => trackingRegex.test(param))
4242    .join("&");
4243
4244  if (storage.area[storage.key]) {
4245    try {
4246      restored = JSON.parse(storage.area[storage.key]);
4247    } catch (e) {
4248      restored = null;
4249    }
4250  }
4251
4252  function paramsEqual(a, b) {
4253    return a === b;
4254  }
4255
4256  if (queryParams.length > 0) {
4257    var incomingIsNew = !restored || !paramsEqual(queryParams, restored.query);
4258    if (incomingIsNew) {
4259      storage.area[storage.key] = JSON.stringify({
4260        time: current.time,
4261        query: queryParams,
4262      });
4263    } else if (restored && (current.time - restored.time > opts.expireDays * 864e5)) {
4264      // Parameters same but attribution expired – do not reactivate
4265    }
4266  } else if (restored && current.time - restored.time <= opts.expireDays * 864e5) {
4267    updated.state = document.createElement("a");
4268    updated.state.href = current.state;
4269    updated.state.search += (updated.state.search ? "&" : "") + restored.query;
4270    history.replaceState("", {}, updated.state);
4271  }
4272})({
4273  expireDays: 0.02083,
4274});
4275</script>
4275
4276<!-- Custom - URL Parameter Forwarder - END -->
4277
4278<!-- Marketo Form Integration & Tracking - Global - START -->
4279<script>
4280(function () {
4281  const ready = fn => (document.readyState === 'loading')
4282    ? document.addEventListener('DOMContentLoaded', fn)
4283    : fn();
4284
4285  ready(function () {
4286  // Idempotency guard: a second copy of this block must not fight the first for
4287  // the same .marketo-wrapper elements. First run wins.
4288  // NOTE: this only protects against another *v3* block. If an older version of
4289  // this script is still present anywhere on the page, remove it - it does not
4290  // check this flag and will double-load every form.
4291  if (document.documentElement.dataset.mktoLoaderInit) {
4292    console.warn('Marketo form loader already initialized on this page - skipping duplicate execution.');
4293    return;
4294  }
4295  document.documentElement.dataset.mktoLoaderInit = '1';
4296
4297  const wrappers = document.querySelectorAll('.marketo-wrapper');
4298  if (wrappers.length === 0) return;
4299
4300  const log = (...args) => { if (window.MKTO_DEBUG) console.log(...args); };
4301
4302  const urlParams = new URLSearchParams(window.location.search);
4303
4304  const parameters = [
4305    {param: 'gclid',             field: 'GCLID__c',               type: 'clk'},
4306    {param: 'li_fat_id',         field: 'linkedInUserTrackingID', type: 'clk'},
4307    {param: 'msclkid',           field: 'Microsoft_Click_ID__c',  type: 'clk'},
4308    {param: 'fbclid',            field: 'Meta_ClickID__c',        type: 'clk'},
4309    {param: 'utm_medium',        field: 'utmmedium',              type: 'clk'},
4310    {param: 'utm_source',        field: 'utmsource',              type: 'clk'},
4311    {param: 'utm_campaign',      field: 'utmcampaign',            type: 'clk'},
4312    {param: 'utm_content',       field: 'utmcontent',             type: 'clk'},
4313    {param: 'utm_term',          field: 'utmterm',                type: 'clk'},
4314    {param: 'tk_ctg',            field: 'tKCategory',             type: 'tk'},
4315    {param: 'tk_cta',            field: 'tKCTA',                  type: 'tk'},
4316    {param: 'form_url',          field: 'lastFormURL',            type: 'href'},
4317    {param: 'referrer_url',      field: 'referrerURL',            type: 'referrer'},
4318    {param: 'ga_client_id',      field: 'GACLIENTID__c',          type: 'gacid'},
4319    {param: 'ga_measurement_id', field: 'GAMEASUREMENTID__c',     type: 'gamid'}
4320  ];
4321
4322  const expiryTime = (new Date).getTime() + 2.592e9; // 30 days
4323
4324  parameters.forEach(function saveParam(p) {
4325    if (p.type !== 'clk') return;
4326    try {
4327      const value = urlParams.get(p.param);
4328      if (!value) return;
4329      if (p.param === 'gclid') {
4330        const gclsrc = urlParams.get('gclsrc');
4331        if (gclsrc && gclsrc.indexOf('aw') === -1) return;
4332      }
4333      localStorage.setItem(p.param, JSON.stringify({ value, expiryDate: expiryTime }));
4334    } catch (e) {
4335      // Private browsing / quota / blocked storage must never break form load.
4336      console.warn('Could not persist click ID', p.param, e);
4337    }
4338  });
4339
4340  // ---- Timing policy -----------------------------------------------------
4341  const FIRST_TIMEOUT_MS       = 8000;
4342  const RETRY_TIMEOUT_MS       = 8000;   // ~16s worst case before an error shows
4343  const GLOBAL_SCRIPT_TIMEOUT_MS = 10000;
4344  // Must exceed ZoomInfo's fallbackTimeout (3000ms in the FormComplete config
4345  // block below) or the wrapper reveals mid-shortening and fields visibly vanish.
4346  const ZI_REVEAL_FALLBACK_MS  = 3200;
4347  const SAFETY_NET_CHECKS_MS   = [6000, 13000, 20000];
4348
4349  // ---- Error UI ----------------------------------------------------------
4350  // mode: 'retry'  -> button re-runs loadWithRetry (Marketo present, form failed)
4351  //       'reload' -> button reloads the page (forms2.min.js itself unusable)
4352  //       'fatal'  -> no button (bad markup / duplicate id; retrying cannot help)
4353  function buildErrorMarkup(mode) {
4354    const btn =
4355      '<button type="button" data-mkto-retry ' +
4356      'style="cursor:pointer;padding:6px 14px;font-size:12px;font-weight:600;' +
4357      'border:1px solid #a23b3b;border-radius:4px;background:#fff;color:#a23b3b;">' +
4358      'Try again</button>';
4359    const fallbackCopy =
4360      '<p style="margin:0;">Please refresh the page, or ' +
4361      '<a href="mailto:[email protected]">contact us</a> directly.</p>';
4362    return (
4363      '<div class="mkto-load-error" style="padding:10px;font-size:12px;color:#a23b3b;">' +
4364        '<p style="margin:0 0 8px 0;">This form is taking longer than expected to load.</p>' +
4365        (mode === 'fatal' ? fallbackCopy : btn) +
4366      '</div>'
4367    );
4368  }
4369
4370  function showError(wrapper, formId, mode) {
4371    wrapper.dataset.mktoState = 'error';
4372    wrapper.style.opacity = '1';
4373    // No id is interpolated into the markup - a malformed wrapper id previously
4374    // could break the attribute and leave the button with no handler at all.
4375    wrapper.innerHTML = buildErrorMarkup(mode);
4376    console.error('Marketo form failed to load (formId ' + formId + '), mode=' + mode);
4377
4378    const btn = wrapper.querySelector('button[data-mkto-retry]');
4379    if (!btn) return;
4380
4381    // Exactly one handler: innerHTML above detaches any prior button, and
4382    // { once: true } prevents double-firing.
4383    btn.addEventListener('click', function () {
4384      if (mode === 'reload') { window.location.reload(); return; }
4385      wrapper.innerHTML = '';
4386      wrapper.dataset.mktoState = 'loading';
4387      // Restore the pre-hide state so a shortening form doesn't flash its full
4388      // field set on the retry mount.
4389      if (wrapper.classList.contains('needs-hide')) wrapper.style.opacity = '';
4390      loadWithRetry(wrapper, formId, 0);
4391    }, { once: true });
4392  }
4393
4394  // ---- Defensive reads of head-script globals ----------------------------
4395  function readOptimizeStrings() {
4396    try {
4397      if (typeof getOptimizeStrings !== 'function') return { experiment: '', variant: '' };
4398      const opt = getOptimizeStrings() || {};
4399      return { experiment: opt.experiment || '', variant: opt.variant || '' };
4400    } catch (e) {
4401      console.warn('Webflow Optimize strings unavailable:', e);
4402      return { experiment: '', variant: '' };
4403    }
4404  }
4405
4406  function readOptimizeData() {
4407    try {
4408      return (typeof optimizeData !== 'undefined' && optimizeData) ? optimizeData : {};
4409    } catch (e) { return {}; }
4410  }
4411
4412  // ---- Reveal scheduling -------------------------------------------------
4413  function scheduleReveal(wrapper, formId) {
4414    if (!wrapper.classList.contains('needs-hide')) return;
4415    if (wrapper._ziRevealTimeout) clearTimeout(wrapper._ziRevealTimeout);
4416    wrapper._ziRevealTimeout = setTimeout(function () {
4417      wrapper._ziRevealTimeout = null;
4418      if (wrapper.style.opacity !== '1') {
4419        console.warn('ZoomInfo onReady did not fire in time; revealing form for formId:', formId);
4420        wrapper.style.opacity = '1';
4421      }
4422    }, ZI_REVEAL_FALLBACK_MS);
4423  }
4424
4425  // ---- Per-form wiring ---------------------------------------------------
4426  function attachOptimizeAndSubmitHandlers(form, wrapper, formId) {
4427    // A form object can be handed to us twice (Marketo caches definitions by id).
4428    // Wiring twice would register onSubmit/onSuccess twice = double dataLayer push.
4429    if (form.__mktoWired) {
4430      console.warn('Form already wired, skipping duplicate handler registration:', formId);
4431      return;
4432    }
4433    form.__mktoWired = true;
4434
4435    const formElem = form.getFormElem()[0];
4436    const val = n => formElem.querySelector('input[name="' + n + '"]')?.value;
4437
4438    function applyOptimizeHiddenFields() {
4439      const opt = readOptimizeStrings();
4440      const optFields = {};
4441      if (opt.experiment.length > 0) optFields.Optimization_Experiment__c = opt.experiment;
4442      if (opt.variant.length > 0) optFields.Optimization_Variant__c = opt.variant;
4443      if (Object.keys(optFields).length > 0) {
4444        form.addHiddenFields(optFields);
4445        log('Webflow Optimize fields populated for form', form.getId(), ':', optFields);
4446      }
4447    }
4448
4449    try { applyOptimizeHiddenFields(); }
4450    catch (e) { console.error('Optimize hidden fields failed for form', formId, e); }
4451
4452    function getStoredValue(key) {
4453      try {
4454        const stored = localStorage.getItem(key);
4455        if (stored) {
4456          const o = JSON.parse(stored);
4457          if (o.expiryDate && o.expiryDate > (new Date).getTime()) return o.value;
4458        }
4459      } catch (e) {
4460        console.error('Error reading stored value for key ' + key + ':', e);
4461      }
4462      return null;
4463    }
4464
4465    try {
4466      const fieldsToAdd = {};
4467      const allHiddenFields = {};
4468
4469      parameters.forEach(param => {
4470        let value;
4471        switch (param.type) {
4472          case 'clk':
4473            value = urlParams.get(param.param) || getStoredValue(param.param);
4474            break;
4475          case 'tk':
4476            value = urlParams.get(param.param);
4477            break;
4478          case 'href':
4479            value = window.location.href;
4480            break;
4481          case 'referrer':
4482            value = document.referrer;
4483            break;
4484          case 'gacid': {
4485            const gaCookie = document.cookie.split('; ').find(row => row.startsWith('_ga='));
4486            if (gaCookie) {
4487              const m = gaCookie.split('=')[1].match(/^GA\d+\.\d+\.(.+)$/);
4488              value = m ? m[1] : null;
4489            }
4490            break;
4491          }
4492          case 'gamid':
4493            value = 'G-ZTV32NLJDL';
4494            break;
4495        }
4496        allHiddenFields[param.field] = value;
4497      });
4498
4499      Object.entries(allHiddenFields).forEach(([fieldName, fieldValue]) => {
4500        if (!fieldValue) return;
4501        const existing = formElem.querySelector('input[name="' + fieldName + '"]');
4502        if (!existing || !existing.value) fieldsToAdd[fieldName] = fieldValue;
4503      });
4504
4505      if (Object.keys(fieldsToAdd).length > 0) form.addHiddenFields(fieldsToAdd);
4506      log('Fields added to form:', fieldsToAdd);
4507    } catch (e) {
4508      console.error('Hidden field injection failed for form', formId, e);
4509    }
4510
4511    try {
4512      if (window._zi_fc?.utility?.formShortening
4513          && typeof window._zi_fc.utility.formShortening.init === 'function') {
4514        window._zi_fc.utility.formShortening.init();
4515      }
4516    } catch (e) {
4517      console.error('ZoomInfo formShortening.init failed for form', formId, e);
4518    }
4519
4520    // Hashes are computed at submit time and read synchronously in onSuccess,
4521    // so the dataLayer push never has to wait on crypto.subtle and never races
4522    // Marketo's follow-up navigation.
4523    let hashedUserData = null;
4524
4525    form.onSubmit(function () {
4526      try { applyOptimizeHiddenFields(); }
4527      catch (error) { console.error('Webflow Optimize hidden fields failed to populate:', error); }
4528
4529      try {
4530        const hash = v => (v && typeof sha256 === 'function') ? sha256(v) : Promise.resolve('');
4531        Promise.all([hash(val('Email')), hash(val('FirstName')),
4532                     hash(val('LastName')), hash(val('Country'))])
4533          .then(([email, first, last, country]) => {
4534            hashedUserData = {
4535              sha256_email_address: email,
4536              address: {
4537                sha256_first_name: first,
4538                sha256_last_name: last,
4539                sha256_country: country
4540              }
4541            };
4542          })
4543          .catch(e => console.error('Hashing failed:', e));
4544      } catch (e) {
4545        console.error('Hashing setup failed:', e);
4546      }
4547
4548      if (window.RoiMarketoPlugin && typeof window.RoiMarketoPlugin.onSubmit === 'function') {
4549        try { window.RoiMarketoPlugin.onSubmit(form); }
4550        catch (e) { console.error('ROI plugin onSubmit error:', e); }
4551      }
4552    });
4553
4554    form.onSuccess(function (values) {
4555      // Nothing here may throw and nothing may be deferred past the return.
4556      // The lead is already captured at this point; an exception or a late
4557      // async push risks losing the follow-up page and/or the GTM beacon.
4558      try {
4559        const od = readOptimizeData();
4560        const dataLayerData = {
4561          event: 'form-submission',
4562          platform: 'Webflow',
4563          formID: form.getId(),
4564          formName: val('formName'),
4565          formType: val('formType'),
4566          inquiryType: (values && values.inquiryType) || undefined,
4567          experienceId: od.experienceId,
4568          experienceName: od.experienceName,
4569          experienceType: od.experienceType,
4570          variationId: od.variationId,
4571          variationName: od.variationName,
4572          ccStatus: od.ccStatus
4573        };
4574        if (hashedUserData) {
4575          dataLayerData.leadsUserData = hashedUserData;
4576        } else {
4577          console.warn('Hashed user data not ready at onSuccess for form', formId);
4578        }
4579        window.dataLayer = window.dataLayer || [];
4580        window.dataLayer.push(dataLayerData);
4581        log('dataLayer push complete:', dataLayerData);
4582      } catch (error) {
4583        console.error('onSuccess tracking failed (submission unaffected):', error);
4584      }
4585
4586      if (window.RoiMarketoPlugin && typeof window.RoiMarketoPlugin.onSuccess === 'function') {
4587        try {
4588          if (window.RoiMarketoPlugin.onSuccess(form, values) === false) return false;
4589        } catch (e) {
4590          // Deliberately not returning false here - cancelling the follow-up on
4591          // a lead we already captured is worse than a broken ROI integration.
4592          console.error('ROI plugin onSuccess error:', e);
4593        }
4594      }
4595      return true;
4596    });
4597  }
4598
4599  // ---- Load with retry ---------------------------------------------------
4600  function loadWithRetry(wrapper, numericId, attempt) {
4601    const isFinalAttempt = attempt >= 1;
4602    const timeoutMs = attempt === 0 ? FIRST_TIMEOUT_MS : RETRY_TIMEOUT_MS;
4603    const errorMode = () => (typeof MktoForms2 === 'undefined') ? 'reload' : 'retry';
4604
4605    // Load lock: a callback from a superseded (or terminally errored) attempt
4606    // can never touch this wrapper's DOM.
4607    const attemptToken = Symbol('mktoAttempt');
4608    wrapper._mktoCurrentAttempt = attemptToken;
4609    wrapper.dataset.mktoState = 'loading';
4610
4611    const timeoutHandle = setTimeout(function () {
4612      if (wrapper._mktoCurrentAttempt !== attemptToken) return;
4613      if (isFinalAttempt) {
4614        // Invalidate BEFORE showing the error so a callback arriving moments
4615        // later for this same attempt cannot overwrite the error UI. Only a
4616        // fresh retry click (new token) may load into this wrapper again.
4617        wrapper._mktoCurrentAttempt = null;
4618        showError(wrapper, numericId, errorMode());
4619      } else {
4620        console.warn('Marketo form load attempt ' + (attempt + 1) +
4621                     ' timed out for formId:', numericId, '- retrying.');
4622        loadWithRetry(wrapper, numericId, attempt + 1);
4623      }
4624    }, timeoutMs);
4625
4626    try {
4627      MktoForms2.loadForm('//resources.payscale.com', '233-EVV-192', numericId, function (form) {
4628        if (wrapper._mktoCurrentAttempt !== attemptToken) {
4629          console.warn('Ignoring late Marketo callback from superseded attempt for formId:', numericId);
4630          return;
4631        }
4632        clearTimeout(timeoutHandle);
4633
4634        try {
4635          wrapper.querySelectorAll('form').forEach(f => f.remove());
4636          wrapper.querySelectorAll('.mkto-load-error').forEach(e => e.remove());
4637          wrapper.appendChild(form.getFormElem()[0]);
4638          wrapper.dataset.mktoState = 'loaded';
4639        } catch (e) {
4640          // Mount failure means there is nothing on screen, so go straight to
4641          // the error UI rather than burning another 8s timeout.
4642          console.error('Failed to mount Marketo form', numericId, e);
4643          wrapper._mktoCurrentAttempt = null;
4644          showError(wrapper, numericId, 'retry');
4645          return;
4646        }
4647
4648        // Reveal is scheduled before wiring: a wiring failure must never be able
4649        // to strand a .needs-hide wrapper at opacity 0.
4650        scheduleReveal(wrapper, numericId);
4651
4652        // Wiring runs last and is fully isolated. If it throws, the form is
4653        // already mounted and usable - never unmount it, and never let the throw
4654        // escape into the retry/catch path below (which would re-mount a working
4655        // form, double-register handlers, and eventually show an error over it).
4656        try {
4657          attachOptimizeAndSubmitHandlers(form, wrapper, numericId);
4658        } catch (e) {
4659          console.error('Form wiring failed AFTER successful render for', numericId,
4660                        '- form is usable but tracking may be incomplete:', e);
4661        }
4662      });
4663    } catch (error) {
4664      if (wrapper._mktoCurrentAttempt !== attemptToken) return;
4665      clearTimeout(timeoutHandle);
4666      console.error('Error loading Marketo form', numericId, ':', error);
4667      if (isFinalAttempt) {
4668        wrapper._mktoCurrentAttempt = null;
4669        showError(wrapper, numericId, errorMode());
4670      } else {
4671        loadWithRetry(wrapper, numericId, attempt + 1);
4672      }
4673    }
4674  }
4675
4676  function initForms() {
4677    // Coerce to Number: Set.has uses SameValueZero, so string ids in the config
4678    // array would silently match nothing and every shortening form would flicker.
4679    const rawShortening = Array.isArray(window.shorteningFormIDs) ? window.shorteningFormIDs : [];
4680    const shorteningSet = new Set(rawShortening.map(Number));
4681    if (shorteningSet.size === 0) {
4682      console.warn('shorteningFormIDs unavailable or empty - no forms will be pre-hidden for ZoomInfo shortening.');
4683    }
4684
4685    const seen = new Set();
4686
4687    wrappers.forEach(wrapper => {
4688      const rawId = (wrapper.id || '').trim();
4689      const numericId = parseInt(rawId, 10);
4690
4691      // Forms are business-critical - never fail silently. A markup mistake must
4692      // be visible on the page, not just in a console nobody reads.
4693      if (!rawId || !Number.isInteger(numericId) || String(numericId) !== rawId) {
4694        console.error('Invalid or missing numeric ID for .marketo-wrapper - form will not load:', wrapper);
4695        showError(wrapper, rawId || 'unknown', 'fatal');
4696        return;
4697      }
4698      if (seen.has(numericId)) {
4699        // Two wrappers with the same id would fight over one form element:
4700        // one ends up an empty visible box, and handlers register twice.
4701        console.error('Duplicate .marketo-wrapper id on page - only the first will load:', numericId);
4702        showError(wrapper, numericId, 'fatal');
4703        return;
4704      }
4705      seen.add(numericId);
4706
4707      // Only forms explicitly configured for shortening get pre-hidden.
4708      // Enrich-only forms never depend on ZoomInfo firing.
4709      if (shorteningSet.has(numericId)) {
4710        wrapper.classList.add('needs-hide');
4711        wrapper.style.opacity = '';
4712      } else {
4713        wrapper.classList.remove('needs-hide');
4714        wrapper.style.opacity = '1';
4715      }
4716
4717      wrapper.innerHTML = '';
4718      loadWithRetry(wrapper, numericId, 0);
4719    });
4720  }
4721
4722  // Safety net: force-reveal any wrapper still hidden for any reason. It never
4723  // overrides an error state, never reveals a wrapper whose form hasn't finished
4724  // loading (an empty visible box looks broken), and never pre-empts a pending
4725  // per-wrapper reveal timer (doing so would reveal mid-shortening). Re-checked
4726  // several times because a form can legitimately still be retrying at ~16s.
4727  function scheduleHideSafetyNet() {
4728    SAFETY_NET_CHECKS_MS.forEach(function (delay) {
4729      setTimeout(function () {
4730        document.querySelectorAll('.marketo-wrapper.needs-hide').forEach(function (w) {
4731          if (w._ziRevealTimeout) return;
4732          if (w.dataset.mktoState === 'loaded' && w.style.opacity !== '1') {
4733            console.warn('Safety net revealing stuck (but loaded) form wrapper:', w.id);
4734            w.style.opacity = '1';
4735          }
4736        });
4737      }, delay);
4738    });
4739  }
4740
4741  function attachLegalRowMover() {
4742    if (typeof MktoForms2 === 'undefined' || typeof MktoForms2.whenRendered !== 'function') return;
4743    try {
4744      MktoForms2.whenRendered(function (form) {
4745        try {
4746          const formEl = form.getFormElem()[0];
4747          const moveLegalRow = function () {
4748            const consentInput = formEl.querySelector('input[name="marketoMarketingConsent"]');
4749            const legalRow = consentInput ? consentInput.closest('.mktoFormRow') : null;
4750            const buttonRow = formEl.querySelector('.mktoButtonRow');
4751            if (legalRow && buttonRow && legalRow !== buttonRow) {
4752              buttonRow.parentNode.insertBefore(legalRow, buttonRow);
4753              log('Moved legal consent row above submit for form', form.getId());
4754              return true;
4755            }
4756            return false;
4757          };
4758          if (moveLegalRow()) return;
4759          const obs = new MutationObserver(function () { if (moveLegalRow()) obs.disconnect(); });
4760          obs.observe(formEl, { childList: true, subtree: true });
4761          setTimeout(function () { obs.disconnect(); }, 2000);
4762        } catch (e) {
4763          console.error('Legal row mover failed for a form:', e);
4764        }
4765      });
4766    } catch (e) {
4767      console.error('Could not register legal row mover:', e);
4768    }
4769  }
4770
4771  function boot() {
4772    initForms();
4773    scheduleHideSafetyNet();
4774    attachLegalRowMover();
4775  }
4776
4777  if (!window.MktoForms2) {
4778    // forms2.min.js is normally a blocking head script, so reaching here means
4779    // it was blocked or failed. Try once more, and only run the watchdog on this
4780    // path - running it unconditionally could flash an error over a page that
4781    // was merely slow and is about to work.
4782    let settled = false;
4783    const scriptTag = document.createElement('script');
4784    scriptTag.src = '//resources.payscale.com/js/forms2/js/forms2.min.js';
4785    scriptTag.onload = function () { settled = true; boot(); };
4786    scriptTag.onerror = function () {
4787      settled = true;
4788      console.error('forms2.min.js script tag failed to load (network/blocked).');
4789      wrappers.forEach(w => showError(w, w.id || 'unknown', 'reload'));
4790    };
4791    document.head.appendChild(scriptTag);
4792
4793    setTimeout(function () {
4794      if (settled && typeof MktoForms2 !== 'undefined') return;
4795      console.error('forms2.min.js failed to load/initialize within ' + GLOBAL_SCRIPT_TIMEOUT_MS + 'ms.');
4796      wrappers.forEach(function (w) {
4797        if (!w.dataset.mktoState || w.dataset.mktoState === 'loading') {
4798          showError(w, w.id || 'unknown', 'reload');
4799        }
4800      });
4801    }, GLOBAL_SCRIPT_TIMEOUT_MS);
4802  } else {
4803    boot();
4804  }
4805  });
4806})();
4807</script>
4807
4808<!-- Marketo Form Integration & Tracking - Global - END -->
4809
4810<!-- ZoomInfo - Form Shortening Utility - START -->
4811<script type="text/javascript">
4812    /* FormComplete Snippet - Form Shortening Utility Logic Script v5*/
4813    window._zi_fc = window._zi_fc || {};
4814    window._zi_fc.utility = window._zi_fc.utility || {};
4815    window._zi_fc.utility.formShortening = (function() {
4816
4817        var messageError = 'FormComplete utility script encountered an error.';
4818
4819        try {
4820            var onReadyCopy = window._zi_fc.onReady;
4821
4822            window._zi_fc.onReady = function(data) {
4823                if (typeof onReadyCopy === 'function') {onReadyCopy(data)}
4824                window._zi_fc.utility.formShortening.onReady(data)
4825            }
4826
4827            var contexts = [document];
4828            document.querySelectorAll('iframe:not([src]), iframe[src=""]').forEach(function(iframeNode){
4829                contexts.push(iframeNode.contentDocument || iframeNode.contentWindow.document)
4830            });
4831
4832            var currentUrl = window.location.origin + window.location.pathname;
4833
4834        } catch (e) {console.error(messageError, e)}
4835
4836        function set(rule, settings) {
4837
4838            window._zi_fc.utility.formShortening.settings = window._zi_fc.utility.formShortening.settings || {};
4839            window._zi_fc.utility.formShortening.settings.defaultConfig = window._zi_fc.utility.formShortening.settings.defaultConfig || {};
4840            window._zi_fc.utility.formShortening.settings.pageConfig = window._zi_fc.utility.formShortening.settings.pageConfig || {};
4841
4842            if (rule == 'defaultConfig') {window._zi_fc.utility.formShortening.settings[rule] = settings}
4843            else {
4844
4845                if (rule != '*') {
4846                    try {
4847                        var url = new URL(rule);
4848                        rule = url.origin + url.pathname;
4849                    } catch (e) {console.error(messageError, "Ensure the rule is either 'defaultConfig', '*', or a valid URL.")}
4850                }
4851
4852                window._zi_fc.utility.formShortening.settings.pageConfig[rule] = window._zi_fc.utility.formShortening.settings.pageConfig[rule] || [];
4853                window._zi_fc.utility.formShortening.settings.pageConfig[rule].push(settings);
4854
4855            }
4856
4857        }
4858
4859        function init() {
4860
4861            try {
4862
4863                for (var [url, configs] of Object.entries(window._zi_fc.utility.formShortening.settings.pageConfig)) {
4864                    if (url === '*' || url === currentUrl) {
4865                        configs.forEach(function(config) {
4866
4867                            var { fieldNames, fieldColumnSelector, formSelector, fallbackTimeout } = Object.assign({}, window._zi_fc.utility.formShortening.settings.defaultConfig, config);
4868
4869                            fallbackTimeout = fallbackTimeout || 4000;
4870
4871                            window._zi_fc.utility.formShortening.debug[formSelector] = {};
4872                            window._zi_fc.utility.formShortening.debug[formSelector].initialized = formatSeconds(performance.now());
4873
4874                            contexts.forEach(function(context) {
4875
4876                                var s = createStyle( formSelector, fieldColumnSelector, fieldNames );
4877                                context.head.appendChild(s)
4878
4879                                setTimeout(function(){
4880
4881                                    var e = context.getElementById(s.id);
4882                                    if (!e) {return}
4883
4884                                    window._zi_fc.utility.formShortening.debug[e.dataset.formSelector].clearedByTimeoutAt = formatSeconds(performance.now());
4885                                    e.parentNode.removeChild(e);
4886
4887                                }, fallbackTimeout)
4888
4889                            })
4890
4891                        })
4892                    }
4893                }
4894
4895            } catch (e) {console.error(messageError, e)}
4896
4897        }
4898
4899        function createStyle( formSelector, fieldColumnSelector, fieldNames ) {
4900
4901            try {
4902
4903                var s = document.createElement('style');
4904                s.id = 'ziFormShortening' + Math.floor(10000 + Math.random() * 99999);
4905                s.dataset.formSelector = formSelector;
4906
4907                if (!formSelector || !Array.isArray(fieldNames)) {
4908                    s.innerHTML = '.fc-initial-hide {display:none !important}';
4909                    return s
4910                }
4911                fieldNames.forEach(function(fieldName){
4912                    if (fieldColumnSelector) {
4913                        s.innerHTML += formSelector + ' ' + fieldColumnSelector + ':has(input[name="' + fieldName + '"]),' + formSelector + ' ' + fieldColumnSelector + ':has(select[name="' + fieldName + '"]),'
4914                    }
4915                    s.innerHTML += formSelector + ' ' + "input[name='" + fieldName + "']," + formSelector + " select[name='" + fieldName + "'] {display:none !important}"
4916                })
4917
4918                return s
4919
4920            } catch (e) {console.error(messageError, e)}
4921
4922        }
4923
4924        function formatSeconds(p) {return (Math.floor(p / 10) / 100) + ' seconds since page load.'}
4925
4926        function onReady(data) {
4927
4928            try {
4929
4930                var configs = []
4931                configs.push(window._zi_fc.utility.formShortening.settings.defaultConfig);
4932                configs.push.apply(configs, window._zi_fc.utility.formShortening.settings.pageConfig[currentUrl]);
4933                configs.push(window._zi_fc.utility.formShortening.settings.pageConfig['*']);
4934
4935                var formSelectorMatch = false;
4936
4937                configs.forEach(function(settings){
4938
4939                    if (!settings || settings.formSelector != data.formSelector) {return}
4940                    formSelectorMatch = true;
4941
4942                    contexts.forEach(function(context){
4943                        var styles = context.querySelectorAll('style[data-form-selector="' + settings.formSelector + '"]');
4944                        styles.forEach(function(s) {
4945
4946                            s.parentNode.removeChild(s);
4947                            window._zi_fc.utility.formShortening.debug[settings.formSelector].clearedByReadyAt = formatSeconds(performance.now());
4948
4949                        })
4950
4951                    })
4952
4953                });
4954
4955            } catch (e) {console.error(messageError, e)}
4956
4957        }
4958
4959        return {
4960            version: 4,
4961            set,
4962            init,
4963            onReady,
4964            debug: {}
4965        }
4966
4967    })();
4968</script>
vendor: 1 bytes, line 4968
4968
4969<script>
4970    /* FormComplete - Form Shortening Utility Configuration Script v5*/
4971
4972    // --- START MODIFICATION: hide/enrich split logic ---
4973
4974    var shorteningFormIDs = [
4975        1658, 1445, 3603, 3285, 1439, 1662, 2595, 4156,
4976        2299, 2585, 2594, 2715, 2723, 2939, 2990, 1659, 1660,
4977        2951, 4755, 4228, 5258,
4978        5303, 5311, 5335, 5437,
4979        5787, 5929, 5940, 6243, 3071
4980    ];
4981
4982    var enrichOnlyFormIDs = [
4983        6366, 6385, 4693, 6226, 2414, 5591, 2943, 5300, 2415 // enrichment only, no hiding
4984    ];
4985
4986    /* Define default configurations */
4987    window._zi_fc.utility.formShortening.set('defaultConfig', {
4988        'fieldColumnSelector': 'div[class *= "mktoFormCol"]',
4989        'fieldNames': [
4990            'FirstName',
4991            'LastName',
4992            'Phone',
4993            'Company',
4994            'Title',
4995            'NumberOfEmployees',
4996            'Country',
4997            'State',
4998            'PostalCode',
4999            'Job_Management_Level__c',
5000            'Job_Department__c',
5001            'jobFunction',
5002            'ZoomInfo_NeverBounce_Email_Status__c',
5003            'ZoomInfo_Industry_L__c',
5004            'ZoomInfo_SubIndustry_L__c',
5005            'zi_hr_budget'
5006        ],
5007        'fallbackTimeout': 3000
5008    });
5009
5010    // Apply shortening + enrichment to the main group
5011    shorteningFormIDs.forEach(function(formID){
5012        window._zi_fc.utility.formShortening.set('*', {
5013            'formSelector': "form[id='mktoForm_" + formID + "']"
5014        });
5015    });
5016
5017    // Apply enrichment only (no hiding) to special group
5018    enrichOnlyFormIDs.forEach(function(formID){
5019        window._zi_fc.utility.formShortening.set('*', {
5020            'formSelector': "form[id='mktoForm_" + formID + "']",
5021            'fieldNames': [] // disables hiding, keeps enrichment
5022        });
5023    });
5024    // --- END MODIFICATION: hide/enrich split logic ---
5025
5026    /* Initialize utility script. */
5027    window._zi_fc.utility.formShortening.init();
5028</script>
5028
5029<!-- ZoomInfo - Form Shortening Utility - END -->
5030
5031<!-- ZoomInfo - FormComplete / Websights - START -->
5032<script>
5033	window[
5034    	(function(_0d2,_jb){
5035          var _NW="";
5036          for(var _CT=0;_CT<_0d2.length;_CT++){
5037            var _fe=_0d2[_CT].charCodeAt();
5038            _fe-=_jb;
5039            _fe+=61;
5040            _jb>4;
5041            _NW==_NW;
5042            _fe%=94;
5043            _fe+=33;
5044            _fe!=_CT;
5045            _NW+=String.fromCharCode(_fe)
5046          }
5047          return _NW
5048        })
5049      (atob("ZVRbfXp1cG4hVnAm"),11)]="9c382beff31679926368";
5050  	  	var zi=document.createElement("script");
5051  			(zi.type="text/javascript"),
5052    		(zi.async=!0),
5053    		(zi.src=(function(_7nB,_Ib){
5054    		  var _3n="";
5055    		  for(var _ED=0;_ED<_7nB.length;_ED++){
5056          		_xE!=_ED;
5057          		_3n==_3n;
5058          		var _xE=_7nB[_ED].charCodeAt();
5059          		_Ib>3;
5060          		_xE-=_Ib;
5061          		_xE+=61;
5062          		_xE%=94;
5063          		_xE+=33;
5064          		_3n+=String.fromCharCode(_xE)
5065        	  }
5066			return _3n
5067            })
5068     (atob("LDg4NDdcUVEuN1A+LU83JzYtNDg3UCczMVE+LU84JStQLjc="),34)),document.head.appendChild(zi);
5069</script>
5069
5070<!-- ZoomInfo - FormComplete / Websights - END -->
5071
5072<!-- GTM - Custom Header Nav CTA Button Click Tracking - START -->
5073<script type="text/javascript">
5074(function() {
5075  const HDR_BTN_CLK_FLAG = '_hdr_btn_clk_flag';
5076  const HDR_BTN_CLK_PG_COUNT = '_hdr_btn_clk_pg_count';
5077
5078  let pagesRemaining = parseInt(sessionStorage.getItem(HDR_BTN_CLK_PG_COUNT), 10);
5079
5080  if (sessionStorage.getItem(HDR_BTN_CLK_FLAG) === 'true') {
5081    if (isNaN(pagesRemaining) || pagesRemaining <= 0) {
5082      sessionStorage.removeItem(HDR_BTN_CLK_FLAG);
5083      sessionStorage.removeItem(HDR_BTN_CLK_PG_COUNT);
5084      window._hdr_btn_clkd = false;
5085      console.log('Header nav CTA flag expired: ' + window._hdr_btn_clkd + ', active pages remaining: 0');
5086    } else {
5087      sessionStorage.setItem(HDR_BTN_CLK_PG_COUNT, String(pagesRemaining - 1));
5088      window._hdr_btn_clkd = true;
5089      console.log('Header nav CTA flag active: ' + window._hdr_btn_clkd + ', active pages remaining: ' + (pagesRemaining - 1));
5090    }
5091  } else {
5092    window._hdr_btn_clkd = false;
5093    console.log('Header nav CTA flag not set: ' + window._hdr_btn_clkd);
5094  }
5095
5096  const desktopHeaderCTA = '.nav_button-wrapper > a.btn.is-small';
5097  const mobileHeaderCTA = '.nav-dropdown_cta > div > a.nav-button-primary.w-inline-block';
5098
5099  document.addEventListener('click', function(e) {
5100    if (e.target.closest(desktopHeaderCTA) || e.target.closest(mobileHeaderCTA)) {
5101      sessionStorage.setItem(HDR_BTN_CLK_FLAG, 'true');
5102      sessionStorage.setItem(HDR_BTN_CLK_PG_COUNT, '1');
5103      window._hdr_btn_clkd = true;
5104      console.log('Header nav CTA button clicked: ' + window._hdr_btn_clkd + ', active pages remaining: 1');
5105    }
5106  });
5107})();
5108</script>
5108
5109<!-- GTM - Custom Header Nav CTA Button Click Tracking - END --><!-- [Attributes by Finsweet] Accordion -->
5110<script defer src="https://cdn.jsdelivr.net/npm/@finsweet/attributes-accordion@1/accordion.js"></script>
5110
5111
5112<!-- [Finsweet Attributes] Modal -->
5113<script>(()=>{var t="https://cdn.jsdelivr.net/npm/@finsweet/attributes-modal@1/modal.js",e=document.querySelector(`script[src="${t}"]`);e||(e=document.createElement("script"),e.async=!0,e.src=t,document.head.append(e));})();</script>
5113
5114
5115<!-- GRADIENT HALO - START -->
5116
5117<script>
5118(function () {
5119  'use strict';
5120
5121  var all = document.querySelectorAll('.pcl');
5122  var root = all[all.length - 1];
5123  if (!root || root.dataset.pclInit) return;
5124  root.dataset.pclInit = '1';
5125
5126  var TAU = Math.PI * 2;
5127  var fit = root.closest('.pcl-fit');
5128  var canvas = root.querySelector('.pcl-canvas');
5129  var ctx = canvas.getContext('2d');
5130  var cs = function () { return getComputedStyle(root); };
5131
5132  /* ---------- flag readers ---------- */
5133  function num(name, fb) { var v = parseFloat(cs().getPropertyValue(name)); return isNaN(v) ? fb : v; }
5134  function raw(name) { return cs().getPropertyValue(name).trim(); }
5135  // resolve one level of var() if the browser didn't already
5136  function rootResolve(name) {
5137    var v = cs().getPropertyValue(name).trim();
5138    if (v.indexOf('var(') === 0) { var t = v.slice(4, v.indexOf(')')).trim(); v = cs().getPropertyValue(t).trim(); }
5139    return v;
5140  }
5141  function propOn(el, name) {
5142    var v = getComputedStyle(el).getPropertyValue(name).trim();
5143    if (v.indexOf('var(') === 0) { var t = v.slice(4, v.indexOf(')')).trim(); v = cs().getPropertyValue(t).trim(); }
5144    return v;
5145  }
5146
5147  var slideSpeed   = num('--slide-speed', 1);
5148  var particleSpin = num('--particle-spin', 1);
5149  var pMotion      = num('--particle-motion', 1);
5150  var pEnergy      = num('--particle-energy', 1);
5151  var allowUpscale = num('--allow-upscale', 1) === 1;
5152  var PAD          = num('--hug-pad', 18);
5153  var pillRadius   = num('--pill-radius', 150);
5154
5155  root.style.setProperty('--dur-scale', slideSpeed > 0 ? 1 / slideSpeed : 0);
5156  root.setAttribute('data-dot', num('--show-dot', 1) === 1 ? '1' : '0');
5157  root.setAttribute('data-toggle', num('--show-toggle', 0) === 1 ? '1' : '0');
5158  root.setAttribute('data-icon', num('--icon-chip-show', 1) === 1 ? '1' : '0');
5159  root.setAttribute('data-avatar', num('--avatar-show', 1) === 1 ? '1' : '0');
5160  if (allowUpscale && fit) fit.style.maxWidth = 'none';
5161
5162  var scenes  = root.querySelectorAll('.pcl-scene');
5163  var ribbonEl = root.querySelector('.pcl-ribbon');
5164  var L = { cx: 360, cy: 240, w: 720, h: 480 };
5165
5166  /* build ribbon segments to match scene count (adding a scene just works) */
5167  ribbonEl.innerHTML = '';
5168  for (var ri = 0; ri < scenes.length; ri++) { var sgs = document.createElement('span'); sgs.className = 'pcl-seg'; ribbonEl.appendChild(sgs); }
5169  var segs = ribbonEl.querySelectorAll('.pcl-seg');
5170
5171  /* per-scene dwell durations (ms), keyed off each scene's data-key */
5172  var sceneDur = [];
5173  scenes.forEach(function (sc) { var d = parseFloat(rootResolve('--' + (sc.dataset.key || 'scene') + '-dur')); sceneDur.push(isNaN(d) ? 4800 : d); });
5174
5175  function enabledItems(sc) {
5176    return Array.prototype.filter.call(sc.querySelectorAll('.pcl-item'), function (it) { return !it.classList.contains('pcl-off'); });
5177  }
5178  function sceneCfg(sc) {
5179    var p = '--' + (sc.dataset.key || 'scene');
5180    var mode = (rootResolve(p + '-mode') || 'auto').toLowerCase();
5181    var start = parseFloat(rootResolve(p + '-start')) || 0;
5182    var rad = parseFloat(rootResolve(p + '-radius')); if (isNaN(rad)) rad = pillRadius;
5183    return { mode: mode === 'manual' ? 'manual' : 'auto', start: start, radius: rad };
5184  }
5185  function itemAngle(it, cfg, idx, count) {
5186    if (cfg.mode === 'manual') { var a = propOn(it, '--angle'); return a === '' ? (cfg.start + idx * 360 / count) : (parseFloat(a) || 0); }
5187    return cfg.start + idx * 360 / count;
5188  }
5189  function itemRadius(it, cfg) { var r = propOn(it, '--r'); return r === '' ? cfg.radius : (parseFloat(r) || cfg.radius); }
5190
5191  /* === layout / auto-hug === */
5192  function layout() {
5193    var showK = num('--show-kicker', 1) === 1;
5194    var showR = num('--show-ribbon', 1) === 1;
5195    var kickers = root.querySelectorAll('.pcl-kicker');
5196    kickers.forEach(function (k) { k.style.display = showK ? 'block' : 'none'; });
5197    ribbonEl.style.display = showR ? 'flex' : 'none';
5198
5199    var k0 = scenes[0].querySelector('.pcl-kicker');
5200    var kickerH = showK && k0 ? k0.offsetHeight : 0;
5201    var gap = num('--kicker-gap', 40);
5202    var ribbonH = showR ? ribbonEl.offsetHeight : 0;
5203    var ribbonGap = num('--ribbon-gap', 16);
5204
5205    var cloudR = num('--cloud-size', 280) / 2 * num('--particle-spread', 1);
5206    var gUp = cloudR, gDown = cloudR, gLeft = cloudR, gRight = cloudR;
5207
5208    var data = [];
5209    scenes.forEach(function (sc) {
5210      var cfg = sceneCfg(sc);
5211      var en = enabledItems(sc);
5212      var pillUp = 0;
5213      var placed = en.map(function (it, i) {
5214        var ang = itemAngle(it, cfg, i, en.length);
5215        var R = itemRadius(it, cfg);
5216        var th = ang * Math.PI / 180;
5217        var x = R * Math.sin(th), y = -R * Math.cos(th);
5218        var hw = it.offsetWidth / 2, hh = it.offsetHeight / 2;
5219        gRight = Math.max(gRight, x + hw); gLeft = Math.max(gLeft, hw - x);
5220        gUp = Math.max(gUp, hh - y); gDown = Math.max(gDown, y + hh);
5221        pillUp = Math.max(pillUp, hh - y);
5222        return { it: it, x: x, y: y };
5223      });
5224      data.push({ sc: sc, placed: placed, pillUp: pillUp });
5225    });
5226
5227    var topReserve = showK ? (kickerH + gap) : 0;
5228    var cx = PAD + gLeft;
5229    var cy = PAD + topReserve + gUp;
5230    var w  = PAD + gLeft + gRight + PAD;
5231    var h  = PAD + topReserve + gUp + gDown + (showR ? (ribbonH + ribbonGap) : 0) + PAD;
5232    L = { cx: cx, cy: cy, w: w, h: h };
5233    if (fit) { fit.style.setProperty('--pcl-w', w.toFixed(1)); fit.style.setProperty('--pcl-h', h.toFixed(1)); }
5234
5235    data.forEach(function (sd) {
5236      sd.placed.forEach(function (pp) { pp.it.style.left = (cx + pp.x) + 'px'; pp.it.style.top = (cy + pp.y) + 'px'; });
5237      var k = sd.sc.querySelector('.pcl-kicker');
5238      if (k && showK) {                       // each scene's kicker sits a constant gap above ITS top pill
5239        var topPillEdge = cy - sd.pillUp;
5240        k.style.left = cx + 'px';
5241        k.style.top  = (topPillEdge - gap - kickerH / 2) + 'px';
5242      }
5243    });
5244    if (showR) { ribbonEl.style.left = cx + 'px'; ribbonEl.style.top = (h - PAD - ribbonEl.offsetHeight / 2) + 'px'; }
5245  }
5246
5247  /* === particle cloud engine === */
5248  var COLORS = raw('--particle-colors').split(',').map(function (c) { return c.trim(); }).filter(Boolean);
5249  if (!COLORS.length) COLORS = ['#F4F2EA', '#23A4B5'];
5250
5251  var CFG = {
5252    spinBase: TAU / 1200, attack: 50, hold: 50, decay: 100,
5253    stuckBase: 90, stuckJitter: 20, focalLength: 330, zeroAlphaDepth: -750,
5254    clusterMin: 3, clusterMax: 12, clusterSpread: 0.08, clusterRadialJitter: 0.015,
5255    springStrength: 0.002, erraticness: 0.05, logoDepthZ: -20, logoOpacity: 0.92
5256  };
5257  var VOL = num('--particle-volume', 1);
5258  var shellPPF = Math.max(1, Math.round(5 * VOL));
5259  var clusterPPF = Math.max(1, Math.round(3 * VOL));
5260  var pRad = num('--particle-size', 2.4);
5261
5262  var dpr = Math.min(window.devicePixelRatio || 1, 2);
5263  var W = 720, H = 480, projCX = 360, projCY = 240;
5264  var sphereRad = 0, sphereCZ = 0;
5265  var fLen = CFG.focalLength, zMax = fLen - 2;
5266  var turnSpeed = CFG.spinBase * particleSpin * 0.5;
5267  var pList = { first: null }, rBin = { first: null }, cluster = null;
5268  var logoImg = null, rafId = null, running = false, formed = false, lastScale = 1;
5269
5270  function applyCloudGeom() {
5271    W = L.w; H = L.h; projCX = L.cx; projCY = L.cy;
5272    sphereRad = Math.max(10, num('--cloud-size', 280) / 2 * num('--particle-spread', 1));
5273    sphereCZ = -3 - sphereRad;
5274  }
5275  function hexToRgb(h) {
5276    h = h.replace('#', ''); if (h.length === 3) h = h.split('').map(function (c) { return c + c; }).join('');
5277    var n = parseInt(h, 16); return (n >> 16 & 255) + ',' + (n >> 8 & 255) + ',' + (n & 255);
5278  }
5279  function addP(x, y, z, vx, vy, vz, col, spring, am) {
5280    var p; if (rBin.first) { p = rBin.first; rBin.first = p.next; if (rBin.first) rBin.first.prev = null; } else p = {};
5281    p.next = pList.first; p.prev = null; if (pList.first) pList.first.prev = p; pList.first = p;
5282    p.rgb = 'rgba(' + hexToRgb(col) + ','; p.x = x; p.y = y; p.z = z; p.vx = vx; p.vy = vy; p.vz = vz;
5283    p.age = 0; p.dead = false; p.attack = CFG.attack; p.hold = CFG.hold; p.decay = CFG.decay;
5284    p.holdV = am; p.alpha = 0; p.stuck = CFG.stuckBase + Math.random() * CFG.stuckJitter; p.spring = spring;
5285  }
5286  function recycle(p) {
5287    if (pList.first === p) { pList.first = p.next; if (p.next) p.next.prev = null; }
5288    else { p.prev.next = p.next; if (p.next) p.next.prev = p.prev; }
5289    p.next = rBin.first; p.prev = null; if (rBin.first) rBin.first.prev = p; rBin.first = p;
5290  }
5291  function spawnShell() {
5292    for (var i = 0; i < shellPPF; i++) {
5293      var th = Math.random() * TAU, ph = Math.acos(Math.random() * 2 - 1);
5294      var x = sphereRad * Math.sin(ph) * Math.cos(th), y = sphereRad * Math.sin(ph) * Math.sin(th), z = sphereRad * Math.cos(ph);
5295      var col = COLORS[Math.floor(Math.random() * COLORS.length)], v = 0.002;
5296      addP(x, y, sphereCZ + z, v * x, v * y, v * z, col, false, 1);
5297    }
5298  }
5299  function spawnCluster() {
5300    for (var i = 0; i < clusterPPF; i++) {
5301      if (!cluster || cluster.spawned >= cluster.size) {
5302        cluster = { th: Math.random() * TAU, ph: Math.acos(Math.random() * 2 - 1),
5303          col: COLORS[Math.floor(Math.random() * COLORS.length)],
5304          size: CFG.clusterMin + Math.floor(Math.random() * (CFG.clusterMa
5304x - CFG.clusterMin + 1)), spawned: 0 };
5305      }
5306      var c = cluster; c.spawned++;
5307      var th = c.th + (Math.random() * 2 - 1) * CFG.clusterSpread;
5308      var ph = Math.max(0.001, Math.min(Math.PI - 0.001, c.ph + (Math.random() * 2 - 1) * CFG.clusterSpread));
5309      var r = sphereRad * (1 + (Math.random() * 2 - 1) * CFG.clusterRadialJitter);
5310      var x = r * Math.sin(ph) * Math.cos(th), y = r * Math.sin(ph) * Math.sin(th), z = r * Math.cos(ph);
5311      var v = 0.002; addP(x, y, sphereCZ + z, v * x, v * y, v * z, c.col, true, 0.9);
5312    }
5313  }
5314  function drawLogo() {
5315    if (!logoImg) return;
5316    var lz = sphereCZ + CFG.logoDepthZ, m = fLen / (fLen - lz);
5317    var ar = (logoImg.naturalWidth || 190.12) / (logoImg.naturalHeight || 200);
5318    var lw = num('--cloud-size', 280) * num('--logo-size', 0.42);
5319    var dw = lw * m, dh = dw / ar;
5320    ctx.save(); ctx.globalAlpha = CFG.logoOpacity;
5321    ctx.drawImage(logoImg, projCX - dw / 2, projCY - dh / 2, dw, dh); ctx.restore();
5322  }
5323  function drawP(p, rotZ, m) {
5324    var daf = Math.max(0, Math.min(1, 1 - rotZ / CFG.zeroAlphaDepth));
5325    ctx.fillStyle = p.rgb + (daf * p.alpha) + ')';
5326    ctx.beginPath(); ctx.arc(p.projX, p.projY, m * pRad, 0, TAU, false); ctx.fill();
5327  }
5328  var turnAngle = 0;
5329  function step(advance) {
5330    if (advance) { spawnShell(); spawnCluster(); turnAngle = (turnAngle + turnSpeed) % TAU; }
5331    var sinA = Math.sin(turnAngle), cosA = Math.cos(turnAngle);
5332    ctx.clearRect(0, 0, W, H);
5333    var bg = [], fg = [], p = pList.first;
5334    while (p) {
5335      var np = p.next;
5336      if (advance && pMotion !== 0) {                 // individual-particle drift (scaled by --particle-motion)
5337        p.age++;
5338        if (p.age > p.stuck) {
5339          var ra = CFG.erraticness * pMotion * pEnergy;
5340          p.vx += ra * (Math.random() * 2 - 1); p.vy += ra * (Math.random() * 2 - 1); p.vz += ra * (Math.random() * 2 - 1);
5341          if (p.spring) {
5342            var dx = p.x, dy = p.y, dz = p.z - sphereCZ, dist = Math.sqrt(dx * dx + dy * dy + dz * dz) || 1;
5343            var sp = (sphereRad - dist) * CFG.springStrength * pMotion;
5344            p.vx += dx / dist * sp; p.vy += dy / dist * sp; p.vz += dz / dist * sp;
5345          }
5346          p.x += p.vx * pMotion; p.y += p.vy * pMotion; p.z += p.vz * pMotion;
5347        }
5348      } else if (advance) {                            // motion frozen → still age so dots twinkle, but no drift
5349        p.age++;
5350      }
5351      var rotX = cosA * p.x + sinA * (p.z - sphereCZ);
5352      var rotZ = -sinA * p.x + cosA * (p.z - sphereCZ) + sphereCZ;
5353      var m = fLen / (fLen - rotZ);
5354      p.projX = rotX * m + projCX; p.projY = p.y * m + projCY;
5355      var tot = p.attack + p.hold + p.decay;
5356      if (p.age < tot) {
5357        if (p.age < p.attack) p.alpha = p.holdV * (p.age / p.attack);
5358        else if (p.age < p.attack + p.hold) p.alpha = p.holdV;
5359        else p.alpha = p.holdV * (1 - (p.age - p.attack - p.hold) / p.decay);
5360      } else p.dead = true;
5361      if (p.projX > W || p.projX < 0 || p.projY < 0 || p.projY > H || rotZ > zMax || p.dead) recycle(p);
5362      else (rotZ < sphereCZ + CFG.logoDepthZ ? bg : fg).push({ p: p, rotZ: rotZ, m: m });
5363      p = np;
5364    }
5365    bg.forEach(function (d) { drawP(d.p, d.rotZ, d.m); });
5366    drawLogo();
5367    fg.forEach(function (d) { drawP(d.p, d.rotZ, d.m); });
5368  }
5369  function loop() { step(true); rafId = requestAnimationFrame(loop); }
5370  function buildFormed() {
5371    if (formed) return; formed = true;
5372    for (var n = 0; n < 70; n++) { spawnShell(); spawnCluster(); }
5373    // spread ages across the lifecycle so the cloud starts calm
5374    // (seeding them all mid-life made them drift outward together in a burst)
5375    var span = CFG.attack + CFG.hold + CFG.decay;
5376    var p = pList.first; while (p) { p.age = Math.floor(Math.random() * span); p = p.next; }
5377  }
5378  function renderStaticOnce() { buildFormed(); step(false); }
5379
5380  /* ---------- canvas sizing + responsive scaler (crisp, never collapses to 0) ---------- */
5381  function rescale() {
5382    if (!fit) return;
5383    var cw = fit.clientWidth;
5384    if (cw > 0) {                                  // guard: a 0-width read must NOT scale everything to nothing
5385      var scale = cw / L.w;
5386      if (!allowUpscale && scale > 1) scale = 1;
5387      lastScale = scale;
5388      fit.style.setProperty('--pcl-scale', scale.toFixed(4));
5389    }
5390    var eff = dpr * lastScale;
5391    canvas.style.width = L.w + 'px'; canvas.style.height = L.h + 'px';
5392    canvas.width = Math.round(L.w * eff); canvas.height = Math.round(L.h * eff);
5393    ctx.setTransform(eff, 0, 0, eff, 0, 0);
5394    if (!running || particleSpin === 0) { applyCloudGeom(); if (formed) step(false); }
5395  }
5396
5397  /* === scene cycler === */
5398  var sIdx = 0, sTimer = null;
5399  function show(i) {
5400    scenes.forEach(function (s, k) { s.classList.toggle('active', k === i); });
5401    segs.forEach(function (s, k) { s.classList.toggle('active', k === i); });
5402    sIdx = i;
5403  }
5404  function cycle() {
5405    clearTimeout(sTimer);
5406    sTimer = setTimeout(function () { show((sIdx + 1) % scenes.length); cycle(); }, sceneDur[sIdx] / slideSpeed);
5407  }
5408
5409  /* === logo (inline default, or external via --logo-url) === */
5410  var LOGO_PATH = 'M190.11,72.22c0,9.65-7.75,17.33-17.5,17.33s-17.5-7.68-17.5-17.33,7.76-17.33,17.5-17.33,17.5,7.95,17.5,17.33ZM190.11,17.33c0,9.65-7.75,17.33-17.5,17.33s-17.5-7.68-17.5-17.33S162.87,0,172.61,0s17.5,7.95,17.5,17.33h0ZM190.11,127.46c0,9.65-7.75,17.33-17.5,17.33s-17.5-7.68-17.5-17.33,7.76-17.33,17.5-17.33,17.5,7.68,17.5,17.33ZM190.12,182.67c0,9.65-7.75,17.33-17.5,17.33h-.57c-9.17-.3-16.63-7.68-16.93-16.76-.3-9.65,7.46-17.6,16.93-17.9,9.74-.3,17.77,7.38,18.07,16.76v.57ZM138.39,72.22c0,9.65-7.76,17.33-17.5,17.33s-17.5-7.68-17.5-17.33,7.75-17.33,17.5-17.33,17.5,7.95,17.5,17.33ZM138.39,127.46c0,9.65-7.76,17.33-17.5,17.33s-17.5-7.68-17.5-17.33,7.75-17.33,17.5-17.33,17.5,7.68,17.5,17.33ZM138.39,182.67c0,9.65-7.76,17.33-17.5,17.33s-17.5-7.68-17.5-17.33,7.75-17.33,17.5-17.33,17.5,7.68,17.5,17.33ZM86.68,127.46c0,9.65-7.76,17.33-17.5,17.33s-17.5-7.68-17.5-17.33,7.76-17.33,17.5-17.33,17.5,7.68,17.5,17.33ZM86.68,182.67c0,9.65-7.76,17.33-17.5,17.33s-17.5-7.68-17.5-17.33,7.76-17.33,17.5-17.33,17.5,7.68,17.5,17.33ZM35,72.24c0,9.65-7.76,17.33-17.5,17.33S0,81.89,0,72.54s7.76-17.33,17.5-17.33c9.74-.29,17.5,7.68,17.5,17.03ZM35,127.46c0,9.65-7.76,17.33-17.5,17.33S0,137.11,0,127.46s7.76-17.33,17.5-17.33,17.5,7.68,17.5,17.33ZM35,182.67c0,9.65-7.76,17.33-17.5,17.33S0,192.32,0,182.67s7.76-17.33,17.5-17.33,17.5,7.68,17.5,17.33h0Z';
5411  function loadLogo() {
5412    var urlFlag = raw('--logo-url').replace(/^url\(|\)$/g, '').replace(/^["']|["']$/g, '').trim();
5413    var fill = raw('--logo-fill') || '#F4F2EA';
5414    var img = new Image();
5415    var done = function () { logoImg = img; if (!running) step(false); else if (particleSpin === 0) renderStaticOnce(); };
5416    if (urlFlag && urlFlag !== 'default') { img.crossOrigin = 'anonymous'; img.onload = done; img.src = urlFlag; return; }
5417    var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="190.12" height="200" viewBox="0 0 190.12 200"><path fill="' + fill + '" d="' + LOGO_PATH + '"/></svg>';
5418    var blob = new Blob([svg], { type: 'image/svg+xml;charset=utf-8' }), u = URL.createObjectURL(blob);
5419    img.onload = function () { URL.revokeObjectURL(u); done(); };
5420    img.src = u;
5421  }
5422
5423  /* === boot === */
5424  var inited = false;
5425  function setupOnce() {
5426    if (inited) return; inited = true;
5427    if (window.ResizeObserver) {
5428      var ro = new ResizeObserver(function () { rescale(); });
5429      ro.observe(fit || root);
5430      if (fit && fit.parentElement) ro.observe(fit.parentElement);   // catch Webflow column resizes too
5431    } else window.addEventListener('resize', rescale);
5432    loadLogo();
5433  }
5434  function relayout() { layout(); applyCloudGeom(); rescale(); if (!running) { buildFormed(); step(false); } }
5435
5436  setupOnce();
5437  relayout();                                   // formed cloud paints immediately → never blank
5438  if (document.fonts && document.fonts.ready) document.fonts.ready.then(relayout);
5439  window.addEventListener('load', relayout);
5440  setTimeout(relayout, 450);
5441
5442  function start() {
5443    if (running) return; running = true;
5444    if (particleSpin > 0) loop(); else renderStaticOnce();
5445    if (slideSpeed > 0) { show(0); cycle(); } else { root.classList.add('is-slidestatic'); show(0); }
5446  }
5447  if (particleSpin === 0 && slideSpeed === 0) { root.classList.add('is-slidestatic'); show(0); renderStaticOnce(); }
5448  else {
5449    if ('IntersectionObserver' in window) {
5450      var io = new IntersectionObserver(function (es) { es.forEac
5450h(function (e) { if (e.isIntersecting) { start(); io.disconnect(); } }); }, { threshold: 0 });
5451      io.observe(root);
5452    } else start();
5453    setTimeout(function () { if (!running) start(); }, 2200);   // fallback: never stay idle (e.g. Webflow preview quirks)
5454  }
5455
5456  /* === dev play/pause toggle (see --show-toggle) === */
5457  var toggleBtn = root.querySelector('.pcl-toggle'), paused = false;
5458  function setPaused(v) {
5459    paused = v;
5460    root.classList.toggle('pcl-paused', paused);
5461    if (toggleBtn) toggleBtn.textContent = paused ? '►' : '❚❚';
5462    if (paused) {
5463      if (rafId) { cancelAnimationFrame(rafId); rafId = null; }
5464      clearTimeout(sTimer);
5465    } else if (running) {
5466      if (particleSpin > 0 && !rafId) loop();
5467      if (slideSpeed > 0) cycle();
5468    }
5469  }
5470  if (toggleBtn) toggleBtn.addEventListener('click', function () { setPaused(!paused); });
5471
5472})();
5473</script>
5473
5474
5475
5476<!-- GRADIENT HALO - END -->
5477
5478</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.