{"id":273,"date":"2025-06-26T15:55:10","date_gmt":"2025-06-26T12:55:10","guid":{"rendered":"https:\/\/mapsly.com?page_id=273"},"modified":"2026-07-16T20:29:17","modified_gmt":"2026-07-16T17:29:17","slug":"company-2","status":"publish","type":"page","link":"https:\/\/mapsly.com\/zh\/company-2\/","title":{"rendered":"\u516c\u53f8"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"273\" class=\"elementor elementor-273\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-da7060f e-con-full e-flex e-con e-parent\" data-id=\"da7060f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7c7e93f elementor-widget elementor-widget-html\" data-id=\"7c7e93f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!--\nMAPSLY \u2014 ABOUT \/ COMPANY PAGE  \u00b7  Elementor HTML-widget paste version  \u00b7  namespace .mce-about\nRe-synced from the updated design-canvas bundle \"Mapsly About.html\". Conversion reversed: dc wrapper \/\ninlined fonts \/ bundled Iconify -> Poppins <link> + Iconify CDN. Scoped, runtime-free, white background,\nscroll-driven, rect-based CTA reveal, motif-zoom fix and 25 preloaded icons all preserved.\nDeploy: Elementor Full Width container, 0 padding \/ 0 gaps, paste into ONE HTML widget.\n-->\n<div class=\"mce-about\" id=\"mceAboutRoot\" style=\"--accent:#6512BE;font-family:'Poppins',-apple-system,BlinkMacSystemFont,sans-serif;background:#ffffff;color:#677294;overflow-x:clip;\">\n\n  \n\n  <!-- viewport: needed only when this file is opened standalone on mobile; WordPress\/Elementor ignores the duplicate -->\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n  <!-- ===== fonts (Poppins) ===== -->\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n\n  <!-- ===== keyframes (animation names are mce-prefixed; no global element selectors) ===== -->\n  <style>\n    @keyframes mceShift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}\n    @keyframes mceDot{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.35)}}\n    @keyframes mceArrive{0%{r:12px;opacity:.26}100%{r:44px;opacity:0}}\n    @keyframes mceVeh{0%{transform:translate(-50%,-50%) scale(1)}38%{transform:translate(-50%,-50%) scale(1.16)}100%{transform:translate(-50%,-50%) scale(1)}}\n    @keyframes mceVehPulse{0%,100%{box-shadow:0 8px 18px -5px rgba(101,18,190,.5)}50%{box-shadow:0 8px 20px -5px rgba(101,18,190,.6)}}\n    \/* forced two-line hero title on desktop; on phones the break is dropped so the title wraps naturally *\/\n    @media (max-width:600px){ .mce-about .mce-h1-br{display:none} }\n  <\/style>\n\n  <!-- ===== icons (Iconify): inline preload for instant render + CDN web component ===== -->\n  <script>window.IconifyPreload = [{\n  prefix: 'tabler', width: 24, height: 24,\n  icons: {\n    'map-off': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8.32 4.34L9 4l6 3l6-3v13m-2.67 1.335L15 20l-6-3l-6 3V7l2.665-1.333M9 4v1m0 4v8m6-10v4m0 4v5M3 3l18 18\"\/>' },\n    'bulb': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 12h1m8-9v1m8 8h1M5.6 5.6l.7.7m12.1-.7l-.7.7M9 16a5 5 0 1 1 6 0a3.5 3.5 0 0 0-1 3a2 2 0 0 1-4 0a3.5 3.5 0 0 0-1-3m.7 1h4.6\"\/>' },\n    'route': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 19a2 2 0 1 0 4 0a2 2 0 0 0-4 0M19 7a2 2 0 1 0 0-4a2 2 0 0 0 0 4m-8 12h5.5a3.5 3.5 0 0 0 0-7h-8a3.5 3.5 0 0 1 0-7H13\"\/>' },\n    'polygon': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 5a2 2 0 1 0 4 0a2 2 0 1 0-4 0m7 3a2 2 0 1 0 4 0a2 2 0 1 0-4 0M3 11a2 2 0 1 0 4 0a2 2 0 1 0-4 0m10 8a2 2 0 1 0 4 0a2 2 0 1 0-4 0M6.5 9.5l3.5-3m4-1L17 7m1.5 3L16 17m-2.5.5l-7-5\"\/>' },\n    'code': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m7 8l-4 4l4 4m10-8l4 4l-4 4M14 4l-4 16\"\/>' },\n    'chart-line': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 19h16M4 15l4-6l4 2l4-5l4 4\"\/>' },\n    'device-mobile': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2zm5-1h2m-1 13v.01\"\/>' },\n    'plug-connected': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1-5-5zm10 0l-5-5l1.5-1.5a3.536 3.536 0 1 1 5 5zM3 21l2.5-2.5m13-13L21 3m-11 8l-2 2m5 1l-2 2\"\/>' },\n    'cpu': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M5 6a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1z\"\/><path d=\"M9 9h6v6H9zm-6 1h2m-2 4h2m5-11v2m4-2v2m7 5h-2m2 4h-2m-5 7v-2m-4 2v-2\"\/><\/g>' },\n    'map-2': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 18.5L9 17l-6 3V7l6-3l6 3l6-3v7.5M9 4v13m6-10v5.5m6.121 7.621a3 3 0 1 0-4.242 0Q17.506 20.749 19 22q1.577-1.335 2.121-1.879M19 18v.01\"\/>' },\n    'tools': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M3 21h4L20 8a1.5 1.5 0 0 0-4-4L3 17zM14.5 5.5l4 4\"\/><path d=\"M12 8L7 3L3 7l5 5M7 8L5.5 9.5M16 12l5 5l-4 4l-5-5m4 1l-1.5 1.5\"\/><\/g>' },\n    'rocket': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3-5a9 9 0 0 0 6-8a3 3 0 0 0-3-3a9 9 0 0 0-8 6a6 6 0 0 0-5 3\"\/><path d=\"M7 14a6 6 0 0 0-3 6a6 6 0 0 0 6-3m4-8a1 1 0 1 0 2 0a1 1 0 1 0-2 0\"\/><\/g>' },\n    'headset': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M4 14v-3a8 8 0 1 1 16 0v3m-2 5c0 1.657-2.686 3-6 3\"\/><path d=\"M4 14a2 2 0 0 1 2-2h1a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm11 0a2 2 0 0 1 2-2h1a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2z\"\/><\/g>' },\n    'heart': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19.5 12.572L12 20l-7.5-7.428A5 5 0 1 1 12 6.006a5 5 0 1 1 7.5 6.572\"\/>' },\n    'adjustments': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 10a2 2 0 1 0 4 0a2 2 0 0 0-4 0m2-6v4m0 4v8m4-4a2 2 0 1 0 4 0a2 2 0 0 0-4 0m2-12v10m0 4v2m4-13a2 2 0 1 0 4 0a2 2 0 0 0-4 0m2-3v1m0 4v11\"\/>' },\n    'world': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m.6-3h16.8M3.6 15h16.8\"\/><path d=\"M11.5 3a17 17 0 0 0 0 18m1-18a17 17 0 0 1 0 18\"\/><\/g>' },\n    'map-pin': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M9 11a3 3 0 1 0 6 0a3 3 0 0 0-6 0\"\/><path d=\"M17.657 16.657L13.414 20.9a2 2 0 0 1-2.827 0l-4.244-4.243a8 8 0 1 1 11.314 0\"\/><\/g>' },\n    'users-group': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 13a2 2 0 1 0 4 0a2 2 0 0 0-4 0m-2 8v-1a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1M15 5a2 2 0 1 0 4 0a2 2 0 0 0-4 0m2 5h2a2 2 0 0 1 2 2v1M5 5a2 2 0 1 0 4 0a2 2 0 0 0-4 0m-2 8v-1a2 2 0 0 1 2-2h2\"\/>' },\n    'language': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M9 6.371C9 10.789 6.761 13 4 13m0-6.629h7\"\/><path d=\"M5 9c0 2.144 2.252 3.908 6 4m1 7l4-9l4 9m-.9-2h-6.2M6.694 3l.793.582\"\/><\/g>' },\n    'map-search': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m11 18l-2-1l-6 3V7l6-3l6 3l6-3v7.5M9 4v13m6-10v5m0 6a3 3 0 1 0 6 0a3 3 0 1 0-6 0m5.2 2.2L22 22\"\/>' },\n    'layout-grid': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zm10 0a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1zM4 15a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zm10 0a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1z\"\/>' },\n    'adjustments-alt': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h4v4H4zm2-4v4m0 4v8m4-6h4v4h-4zm2-10v10m0 4v2m4-15h4v4h-4zm2-1v1m0 4v11\"\/>' },\n    'heart-handshake': { body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M19.5 12.572L12 20l-7.5-7.428A5 5 0 1 1 12 6.006a5 5 0 1 1 7.5 6.572\"\/><path d=\"M12 6L8.707 9.293a1 1 0 0 0 0 1.414l.543.543c.69.69 1.81.69 2.5 0l1-1a3.18 3.18 0 0 1 4.5 0l2.25 2.25m-7 3l2 2M15 13l2 2\"\/><\/g>' },\n    'building-community': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m8 9l5 5v7H8v-4m0 4H3v-7l5-5m1 1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v17h-8m0-14v.01M17 7v.01M17 11v.01M17 15v.01\"\/>' },\n    'car-filled': { body: '<path fill=\"currentColor\" d=\"M14 5a1 1 0 0 1 .694.28l.087.095L18.48 10H19a3 3 0 0 1 2.995 2.824L22 13v4a1 1 0 0 1-1 1h-1.171a3.001 3.001 0 0 1-5.658 0H9.829a3.001 3.001 0 0 1-5.658 0H3a1 1 0 0 1-1-1v-6l.007-.117l.008-.056l.017-.078l.012-.036l.014-.05l2.014-5.034A1 1 0 0 1 5 5zM7 16a1 1 0 1 0 0 2a1 1 0 0 0 0-2m10 0a1 1 0 1 0 0 2a1 1 0 0 0 0-2m-6-9H5.676l-1.2 3H11zm2.52 0H13v3h2.92z\"\/>' },\n    'apps': { body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zm0 10a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zm10 0a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1zm0-8h6m-3-3v6\"\/>' }\n  }\n}];<\/script>\n  <script src=\"https:\/\/code.iconify.design\/iconify-icon\/2.3.0\/iconify-icon.min.js\"><\/script>\n\n\n  \n\n  <!-- ============ MISSION ============ -->\n  <section style=\"background:#ffffff;padding:40px 0 32px;text-align:center;box-sizing:border-box;\">\n    <div style=\"max-width:1180px;margin:0 auto;padding:0 56px;\">\n      <h1 style=\"font-size:clamp(34px,4.6vw,52px);line-height:1.08;font-weight:700;color:#222D39;letter-spacing:-.02em;margin:0 auto 18px;max-width:1100px;text-wrap:balance;\">All-in-one Map and<br class=\"mce-h1-br\"> <span style=\"background:linear-gradient(100deg,#FFB870 0%,#F472B6 40%,#D946EF 70%,var(--accent,#6512BE) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;\">Field Team Productivity<\/span> Platform<\/h1>\n      <p style=\"font-size:clamp(17px,1.5vw,20px);font-weight:300;color:#677294;line-height:1.6;margin:0 auto;max-width:680px;text-wrap:pretty;\">We build the platform that runs field operations\u2014routing, territories, automation, and analytics, layered on top of the CRMs and data your team already uses.<\/p>\n      <div style=\"display:flex;align-items:center;justify-content:center;gap:18px;flex-wrap:wrap;margin-top:34px;color:#8585A0;font-size:14px;font-weight:500;\">\n        <span style=\"display:inline-flex;align-items:center;gap:8px;\"><iconify-icon icon=\"tabler:plug-connected\" width=\"17\" height=\"17\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon>15+ CRMs &amp; data sources<\/span>\n        <span style=\"width:4px;height:4px;border-radius:50%;background:#D8D2E4;\"><\/span>\n        <span style=\"display:inline-flex;align-items:center;gap:8px;\"><iconify-icon icon=\"tabler:apps\" width=\"17\" height=\"17\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon>Custom Apps<\/span>\n        <span style=\"width:4px;height:4px;border-radius:50%;background:#D8D2E4;\"><\/span>\n        <span style=\"display:inline-flex;align-items:center;gap:8px;\"><iconify-icon icon=\"tabler:route\" width=\"17\" height=\"17\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon>Advanced Field Operations Platform<\/span>\n      <\/div>\n      <div style=\"font-size:12px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:#AEAEC0;margin-top:38px;\">Scroll to begin \u2193<\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ============ ROUTE JOURNEY (full page, JS-driven) ============ -->\n  <section style=\"position:relative;padding:0 0 40px;overflow:hidden;background:#ffffff;\">\n    <!-- ambient map-atmosphere + spotlight removed for a flat white background -->\n    <div style=\"position:relative;z-index:1;width:100%;height:5200px;\">\n      <div style=\"position:absolute;inset:0;\">\n\n        <svg id=\"mceStageSvg\" width=\"100%\" height=\"5400\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"position:absolute;inset:0;overflow:visible;\">\n          <defs>\n            <linearGradient id=\"mceRouteGrad\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"640\">\n              <stop offset=\"0\" stop-color=\"#9B51E0\"><\/stop>\n              <stop offset=\"0.5\" stop-color=\"#F472B6\"><\/stop>\n              <stop offset=\"1\" stop-color=\"var(--accent,#6512BE)\"><\/stop>\n              <animateTransform attributeName=\"gradientTransform\" type=\"translate\" from=\"0 -640\" to=\"0 640\" dur=\"2.8s\" repeatCount=\"indefinite\"><\/animateTransform>\n            <\/linearGradient>\n            <filter id=\"mceCometGlow\" x=\"-90%\" y=\"-90%\" width=\"280%\" height=\"280%\"><feGaussianBlur stdDeviation=\"6\"><\/feGaussianBlur><\/filter>\n          <\/defs>\n          <path id=\"mceTrack\" d=\"\" fill=\"none\" stroke=\"#E7DBFF\" stroke-width=\"5\" stroke-linecap=\"round\"><\/path>\n          <path id=\"mceRoute\" d=\"\" fill=\"none\" stroke=\"url(#mceRouteGrad)\" stroke-width=\"7\" stroke-linecap=\"round\" pathLength=\"1\" style=\"filter:drop-shadow(0 4px 10px rgba(123,43,214,.35));\"><\/path>\n          <g id=\"mceComet\" style=\"opacity:0;\">\n            <circle r=\"8\" fill=\"none\" stroke=\"var(--accent,#6512BE)\" stroke-width=\"2\" opacity=\".5\"><animate attributeName=\"r\" values=\"8;30;8\" dur=\"2.4s\" repeatCount=\"indefinite\"><\/animate><animate attributeName=\"opacity\" values=\".5;0;.5\" dur=\"2.4s\" repeatCount=\"indefinite\"><\/animate><\/circle>\n            <circle r=\"18\" fill=\"var(--accent,#6512BE)\" opacity=\".22\" filter=\"url(#mceCometGlow)\"><\/circle>\n            <circle r=\"8\" fill=\"#fff\" stroke=\"var(--accent,#6512BE)\" stroke-width=\"3\"><\/circle>\n            <circle r=\"3.2\" fill=\"#F472B6\"><\/circle>\n          <\/g>\n        <\/svg>\n\n        <!-- STOP 1 \u2014 The Gap \/ Mapsly Answer -->\n        <div data-stop=\"1\" data-w=\"600\" style=\"position:absolute;display:grid;grid-template-columns:1fr 1fr;gap:26px;padding:34px 38px;border-radius:28px;background:radial-gradient(120% 110% at 0% 0%,rgba(155,81,224,.14),transparent 56%),radial-gradient(120% 110% at 100% 100%,rgba(244,114,182,.11),transparent 56%),linear-gradient(135deg,rgba(255,255,255,.74),rgba(243,238,255,.52));backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);border:1px solid rgba(101,18,190,.1);box-shadow:0 34px 74px -44px rgba(46,18,90,.42);\">\n          <div style=\"padding:4px 12px 4px 2px;\">\n            <div style=\"display:flex;align-items:center;gap:10px;margin-bottom:14px;\">\n              <span style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;\"><iconify-icon icon=\"tabler:map-off\" width=\"20\" height=\"20\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n              <span style=\"font-size:14px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#8585A0;\">The Gap<\/span>\n            <\/div>\n            <p style=\"font-size:16px;font-weight:400;color:#677294;line-height:1.65;margin:0;\">Your customers live on a map\u2014but your CRM treats them as rows. The only options were clunky workarounds or six-figure custom builds.<\/p>\n          <\/div>\n          <div style=\"padding:4px 4px 4px 20px;border-left:2px solid #D4C0FF;\">\n            <div style=\"display:flex;align-items:center;gap:10px;margin-bottom:14px;\">\n              <span style=\"width:38px;height:38px;border-radius:10px;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px -4px rgba(101,18,190,.3);\"><iconify-icon icon=\"tabler:bulb\" width=\"20\" height=\"20\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n              <span style=\"font-size:14px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--accent,#6512BE);\">Mapsly Answer<\/span>\n            <\/div>\n            <p style=\"font-size:16px;font-weight:400;color:#677294;line-height:1.65;margin:0;\">Mapsly is a platform, not a fixed feature\u2014a toolbox of maps, routing, automation, and apps that adapts to how your team works.<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- STOP 2 \u2014 One Platform (capabilities) -->\n        <div data-stop=\"2\" data-w=\"600\" style=\"position:absolute;\">\n          <div style=\"padding:34px 38px;position:relative;border-radius:28px;background:radial-gradient(120% 110% at 0% 0%,rgba(155,81,224,.14),transparent 56%),radial-gradient(120% 110% at 100% 100%,rgba(244,114,182,.11),transparent 56%),linear-gradient(135deg,rgba(255,255,255,.74),rgba(243,238,255,.52));backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);border:1px solid rgba(101,18,190,.1);box-shadow:0 34px 74px -44px rgba(46,18,90,.42);\">\n            <span style=\"font-size:16px;font-weight:400;letter-spacing:.14em;text-transform:uppercase;color:var(--accent,#6512BE);display:block;margin-bottom:10px;\">What Mapsly Does<\/span>\n            <h2 style=\"font-size:30px;line-height:1.14;font-weight:700;color:#222D39;letter-spacing:-.02em;margin:0 0 20px;text-wrap:balance;\">One Platform for the Whole Field Operation<\/h2>\n            <div style=\"display:grid;grid-template-columns:1fr 1fr;gap:14px 18px;\">\n              \n                <div style=\"display:flex;gap:11px;align-items:flex-start;\">\n                  <span style=\"width:34px;height:34px;border-radius:9px;background:linear-gradient(140deg,#F2ECFF,#E5D8FF);display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:route\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n                  <div><div style=\"font-size:19px;font-weight:700;color:#222D39;line-height:1.2;\">Operations Planning<\/div><div style=\"font-size:14px;font-weight:400;color:#677294;line-height:1.45;margin-top:3px;\">Thousands of stops across days &amp; reps, in one run.<\/div><\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:11px;align-items:flex-start;\">\n                  <span style=\"width:34px;height:34px;border-radius:9px;background:linear-gradient(140deg,#F2ECFF,#E5D8FF);display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:polygon\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n                  <div><div style=\"font-size:19px;font-weight:700;color:#222D39;line-height:1.2;\">Territories<\/div><div style=\"font-size:14px;font-weight:400;color:#677294;line-height:1.45;margin-top:3px;\">Balanced on real data + 50,000+ ACS indicators.<\/div><\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:11px;align-items:flex-start;\">\n                  <span style=\"width:34px;height:34px;border-radius:9px;background:linear-gradient(140deg,#F2ECFF,#E5D8FF);display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:code\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n                  <div><div style=\"font-size:19px;font-weight:700;color:#222D39;line-height:1.2;\">Automation + Apps<\/div><div style=\"font-size:14px;font-weight:400;color:#677294;line-height:1.45;margin-top:3px;\">Context-driven logic and full custom apps, one engine.<\/div><\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:11px;align-items:flex-start;\">\n                  <span style=\"width:34px;height:34px;border-radius:9px;background:linear-gradient(140deg,#F2ECFF,#E5D8FF);display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:chart-line\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n                  <div><div style=\"font-size:19px;font-weight:700;color:#222D39;line-height:1.2;\">Analytics<\/div><div style=\"font-size:14px;font-weight:400;color:#677294;line-height:1.45;margin-top:3px;\">Unlimited dashboards, 40+ charts, direct SQL.<\/div><\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:11px;align-items:flex-start;\">\n                  <span style=\"width:34px;height:34px;border-radius:9px;background:linear-gradient(140deg,#F2ECFF,#E5D8FF);display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:device-mobile\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n                  <div><div style=\"font-size:19px;font-weight:700;color:#222D39;line-height:1.2;\">Mobile + Capture<\/div><div style=\"font-size:14px;font-weight:400;color:#677294;line-height:1.45;margin-top:3px;\">Native iOS &amp; Android, offline, instant sync.<\/div><\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:11px;align-items:flex-start;\">\n                  <span style=\"width:34px;height:34px;border-radius:9px;background:linear-gradient(140deg,#F2ECFF,#E5D8FF);display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:plug-connected\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/span>\n                  <div><div style=\"font-size:19px;font-weight:700;color:#222D39;line-height:1.2;\">Multi-Source Sync<\/div><div style=\"font-size:14px;font-weight:400;color:#677294;line-height:1.45;margin-top:3px;\">15+ CRMs + your own data, self-healing mirror.<\/div><\/div>\n                <\/div>\n              \n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- STOP 3 \u2014 Built to Adapt -->\n        <div data-stop=\"3\" data-w=\"560\" style=\"position:absolute;\">\n          <div style=\"padding:34px 38px;position:relative;border-radius:28px;background:radial-gradient(120% 110% at 0% 0%,rgba(155,81,224,.14),transparent 56%),radial-gradient(120% 110% at 100% 100%,rgba(244,114,182,.11),transparent 56%),linear-gradient(135deg,rgba(255,255,255,.74),rgba(243,238,255,.52));backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);border:1px solid rgba(101,18,190,.1);box-shadow:0 34px 74px -44px rgba(46,18,90,.42);\">\n            <span style=\"font-size:16px;font-weight:400;letter-spacing:.14em;text-transform:uppercase;color:var(--accent,#6512BE);display:block;margin-bottom:10px;\">Built to Adapt<\/span>\n            <h2 style=\"font-size:30px;line-height:1.15;font-weight:700;color:#222D39;letter-spacing:-.02em;margin:0 0 4px;text-wrap:balance;\">Built to Adapt to the Way You Work<\/h2>\n            \n              <div style=\"display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-top:1px solid #F0EBFF;\">\n                <div style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:cpu\" width=\"19\" height=\"19\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                <div><h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 5px;line-height:1.2;\">Context-driven automation<\/h4><p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">Logic that reads your records, fields, and the geography around them.<\/p><\/div>\n              <\/div>\n            \n\n              <div style=\"display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-top:1px solid #F0EBFF;\">\n                <div style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:code\" width=\"19\" height=\"19\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                <div><h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 5px;line-height:1.2;\">Custom apps on the same engine<\/h4><p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">Dashboards, schedulers, and locators\u2014without leaving the platform.<\/p><\/div>\n              <\/div>\n            \n\n              <div style=\"display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-top:1px solid #F0EBFF;\">\n                <div style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:map-2\" width=\"19\" height=\"19\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                <div><h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 5px;line-height:1.2;\">Embedded maps<\/h4><p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">Live Mapsly maps inside your CRM or a customer portal.<\/p><\/div>\n              <\/div>\n            \n\n              <div style=\"display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-top:1px solid #F0EBFF;\">\n                <div style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:plug-connected\" width=\"19\" height=\"19\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                <div><h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 5px;line-height:1.2;\">An open stack<\/h4><p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">REST, webhooks, and a full API\u2014Mapsly fits your tools.<\/p><\/div>\n              <\/div>\n            \n          <\/div>\n        <\/div>\n\n        <!-- STOP 4 \u2014 How We Work -->\n        <div data-stop=\"4\" data-w=\"580\" style=\"position:absolute;\">\n          <div style=\"padding:34px 38px;position:relative;border-radius:28px;background:radial-gradient(120% 110% at 0% 0%,rgba(155,81,224,.14),transparent 56%),radial-gradient(120% 110% at 100% 100%,rgba(244,114,182,.11),transparent 56%),linear-gradient(135deg,rgba(255,255,255,.74),rgba(243,238,255,.52));backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);border:1px solid rgba(101,18,190,.1);box-shadow:0 34px 74px -44px rgba(46,18,90,.42);\">\n            <span style=\"font-size:16px;font-weight:400;letter-spacing:.14em;text-transform:uppercase;color:var(--accent,#6512BE);display:block;margin-bottom:10px;\">How We Work With You<\/span>\n            <h2 style=\"font-size:30px;line-height:1.15;font-weight:700;color:#222D39;letter-spacing:-.02em;margin:0 0 18px;text-wrap:balance;\">We Train Solution Architects, Not Salespeople.<\/h2>\n            \n              <div style=\"display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-top:1px solid #F4F4F8;\">\n                <div style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:tools\" width=\"19\" height=\"19\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                <div><h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 5px;line-height:1.2;\">Implementation Included<\/h4><p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">A solution engineer sets up your connector, automation, and first app\u2014at no extra cost.<\/p><\/div>\n              <\/div>\n            \n\n              <div style=\"display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-top:1px solid #F4F4F8;\">\n                <div style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:rocket\" width=\"19\" height=\"19\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                <div><h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 5px;line-height:1.2;\">A Free Proof of Concept<\/h4><p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">See it on your real data before you commit.<\/p><\/div>\n              <\/div>\n            \n\n              <div style=\"display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-top:1px solid #F4F4F8;\">\n                <div style=\"width:38px;height:38px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:headset\" width=\"19\" height=\"19\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                <div><h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 5px;line-height:1.2;\">Real-Time Support<\/h4><p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">Talk to the engineers who build Mapsly\u2014no ticket queue.<\/p><\/div>\n              <\/div>\n            \n          <\/div>\n        <\/div>\n\n        <!-- STOP 5 \u2014 What We Stand For -->\n        <div data-stop=\"5\" data-w=\"560\" style=\"position:absolute;\">\n          <div style=\"padding:34px 38px;position:relative;border-radius:28px;background:radial-gradient(120% 110% at 0% 0%,rgba(155,81,224,.14),transparent 56%),radial-gradient(120% 110% at 100% 100%,rgba(244,114,182,.11),transparent 56%),linear-gradient(135deg,rgba(255,255,255,.74),rgba(243,238,255,.52));backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);border:1px solid rgba(101,18,190,.1);box-shadow:0 34px 74px -44px rgba(46,18,90,.42);\">\n            <span style=\"font-size:16px;font-weight:400;letter-spacing:.14em;text-transform:uppercase;color:var(--accent,#6512BE);display:block;margin-bottom:10px;\">Our Principles<\/span>\n            <h2 style=\"font-size:30px;line-height:1.15;font-weight:700;color:#222D39;letter-spacing:-.02em;margin:0 0 18px;text-wrap:balance;\">What We Stand For<\/h2>\n            <div style=\"display:grid;grid-template-columns:1fr 1fr;gap:18px 24px;\">\n              \n                <div style=\"display:flex;gap:14px;align-items:flex-start;\">\n                  <div style=\"width:40px;height:40px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:heart\" width=\"20\" height=\"20\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                  <div>\n                    <h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 4px;line-height:1.2;\">Customer Care, Not a Department<\/h4>\n                    <p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">Real engineers, in real time, invested in your outcome.<\/p>\n                  <\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:14px;align-items:flex-start;\">\n                  <div style=\"width:40px;height:40px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:code\" width=\"20\" height=\"20\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                  <div>\n                    <h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 4px;line-height:1.2;\">Engineering Excellence<\/h4>\n                    <p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">Software from a team that sweats the details.<\/p>\n                  <\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:14px;align-items:flex-start;\">\n                  <div style=\"width:40px;height:40px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:adjustments\" width=\"20\" height=\"20\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                  <div>\n                    <h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 4px;line-height:1.2;\">Adaptability Over Lock-In<\/h4>\n                    <p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">A platform you can shape, not a feature you can\u2019t.<\/p>\n                  <\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:14px;align-items:flex-start;\">\n                  <div style=\"width:40px;height:40px;border-radius:10px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:world\" width=\"20\" height=\"20\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                  <div>\n                    <h4 style=\"font-size:19px;font-weight:700;color:#222D39;margin:0 0 4px;line-height:1.2;\">Global by Design<\/h4>\n                    <p style=\"font-size:15px;font-weight:400;color:#677294;line-height:1.55;margin:0;\">Three continents, a product in 20+ languages.<\/p>\n                  <\/div>\n                <\/div>\n              \n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- STOP 6 \u2014 The Company -->\n        <div data-stop=\"6\" data-w=\"540\" style=\"position:absolute;\">\n          <div style=\"padding:34px 38px;position:relative;border-radius:28px;background:radial-gradient(120% 110% at 0% 0%,rgba(155,81,224,.14),transparent 56%),radial-gradient(120% 110% at 100% 100%,rgba(244,114,182,.11),transparent 56%),linear-gradient(135deg,rgba(255,255,255,.74),rgba(243,238,255,.52));backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);border:1px solid rgba(101,18,190,.1);box-shadow:0 34px 74px -44px rgba(46,18,90,.42);\">\n            <span style=\"font-size:16px;font-weight:400;letter-spacing:.14em;text-transform:uppercase;color:var(--accent,#6512BE);display:block;margin-bottom:10px;\">The Company<\/span>\n            <h2 style=\"font-size:30px;line-height:1.15;font-weight:700;color:#222D39;letter-spacing:-.02em;margin:0 0 12px;text-wrap:balance;\">Made in California, Delivered Globally<\/h2>\n            <p style=\"font-size:18px;font-weight:300;color:#677294;line-height:1.7;margin:0 0 22px;\">A global team of engineers across three continents, building state-of-the-art software with genuine care.<\/p>\n            <div style=\"display:flex;flex-wrap:wrap;gap:18px;\">\n              \n                <div style=\"display:flex;gap:10px;align-items:center;\">\n                  <div style=\"width:36px;height:36px;border-radius:9px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:map-pin\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                  <div><div style=\"font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#8585A0;\">HQ<\/div><div style=\"font-size:15px;color:#1E2A3A;font-weight:500;\">Covina, California<\/div><\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:10px;align-items:center;\">\n                  <div style=\"width:36px;height:36px;border-radius:9px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:users-group\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                  <div><div style=\"font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#8585A0;\">Team<\/div><div style=\"font-size:15px;color:#1E2A3A;font-weight:500;\">Three continents<\/div><\/div>\n                <\/div>\n              \n\n                <div style=\"display:flex;gap:10px;align-items:center;\">\n                  <div style=\"width:36px;height:36px;border-radius:9px;background:#F0EBFF;display:flex;align-items:center;justify-content:center;flex-shrink:0;\"><iconify-icon icon=\"tabler:language\" width=\"18\" height=\"18\" style=\"color:var(--accent,#6512BE)\"><\/iconify-icon><\/div>\n                  <div><div style=\"font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#8585A0;\">Product<\/div><div style=\"font-size:15px;color:#1E2A3A;font-weight:500;\">20+ languages<\/div><\/div>\n                <\/div>\n              \n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- STOP 7 \u2014 CTA (terminus, centered) -->\n        <div data-stop=\"7\" data-w=\"1120\" style=\"position:absolute;\">\n          <div style=\"position:relative;text-align:center;padding:48px 44px;border-radius:24px;color:#fff;overflow:hidden;background:radial-gradient(ellipse 110% 80% at 80% -10%,rgba(244,114,182,.32),rgba(244,114,182,0) 55%),radial-gradient(ellipse 120% 80% at 15% 115%,rgba(101,18,190,.55),rgba(101,18,190,0) 60%),linear-gradient(135deg,var(--accent,#6512BE) 0%,#4D13A0 50%,#2E0A6B 100%);background-size:auto,auto,180% 180%;animation:mceShift 22s ease-in-out infinite;box-shadow:0 40px 80px -32px rgba(46,10,107,.6);\">\n            <h2 style=\"font-size:32px;line-height:1.12;font-weight:700;color:#fff;letter-spacing:-.02em;margin:0 0 12px;text-wrap:balance;\">See What Mapsly Can Do for Your Field Team<\/h2>\n            <p style=\"font-size:16px;color:rgba(255,255,255,.86);line-height:1.6;max-width:520px;margin:0 auto 24px;\">Start free on the full platform, with a solution engineer to guide setup\u2014or book a quick demo.<\/p>\n            <div style=\"display:flex;gap:12px;justify-content:center;flex-wrap:wrap;\">\n              <a href=\"#\" id=\"mceCtaPrimary\" style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:17px;font-weight:600;padding:15px 34px;border-radius:4px;background:#fff;color:var(--accent,#6512BE);text-decoration:none;box-shadow:0 12px 30px -8px rgba(20,5,60,.5);transition:transform .2s ease;\">Try for Free<\/a>\n              <a href=\"#\" id=\"mceCtaSecondary\" style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:17px;font-weight:600;padding:13px 32px;border-radius:4px;background:transparent;color:#fff;border:2px solid rgba(255,255,255,.45);text-decoration:none;transition:border-color .2s ease,background .2s ease;\">Book a Demo<\/a>\n            <\/div>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- journey nav: orientation + click-to-jump -->\n  <div data-nav=\"\" style=\"position:fixed;right:30px;top:50%;transform:translateY(-50%);z-index:60;display:flex;flex-direction:column;gap:15px;align-items:flex-end;transition:opacity .3s ease;\">\n    \n      <div data-navitem=\"0\" style=\"display:flex;align-items:center;gap:10px;cursor:pointer;\">\n        <span data-navlabel=\"\" style=\"font-size:12.5px;font-weight:600;letter-spacing:.01em;color:#7A7A90;opacity:0;transform:translateX(6px);transition:opacity .25s ease,transform .25s ease;white-space:nowrap;\">Our Mission<\/span>\n        <span data-navdot=\"\" style=\"width:9px;height:9px;border-radius:999px;background:#D9D2EC;transition:width .25s ease,height .25s ease,background .25s ease;\"><\/span>\n      <\/div>\n    \n\n      <div data-navitem=\"1\" style=\"display:flex;align-items:center;gap:10px;cursor:pointer;\">\n        <span data-navlabel=\"\" style=\"font-size:12.5px;font-weight:600;letter-spacing:.01em;color:#7A7A90;opacity:0;transform:translateX(6px);transition:opacity .25s ease,transform .25s ease;white-space:nowrap;\">One Platform<\/span>\n        <span data-navdot=\"\" style=\"width:9px;height:9px;border-radius:999px;background:#D9D2EC;transition:width .25s ease,height .25s ease,background .25s ease;\"><\/span>\n      <\/div>\n    \n\n      <div data-navitem=\"2\" style=\"display:flex;align-items:center;gap:10px;cursor:pointer;\">\n        <span data-navlabel=\"\" style=\"font-size:12.5px;font-weight:600;letter-spacing:.01em;color:#7A7A90;opacity:0;transform:translateX(6px);transition:opacity .25s ease,transform .25s ease;white-space:nowrap;\">Built to Adapt<\/span>\n        <span data-navdot=\"\" style=\"width:9px;height:9px;border-radius:999px;background:#D9D2EC;transition:width .25s ease,height .25s ease,background .25s ease;\"><\/span>\n      <\/div>\n    \n\n      <div data-navitem=\"3\" style=\"display:flex;align-items:center;gap:10px;cursor:pointer;\">\n        <span data-navlabel=\"\" style=\"font-size:12.5px;font-weight:600;letter-spacing:.01em;color:#7A7A90;opacity:0;transform:translateX(6px);transition:opacity .25s ease,transform .25s ease;white-space:nowrap;\">How We Work<\/span>\n        <span data-navdot=\"\" style=\"width:9px;height:9px;border-radius:999px;background:#D9D2EC;transition:width .25s ease,height .25s ease,background .25s ease;\"><\/span>\n      <\/div>\n    \n\n      <div data-navitem=\"4\" style=\"display:flex;align-items:center;gap:10px;cursor:pointer;\">\n        <span data-navlabel=\"\" style=\"font-size:12.5px;font-weight:600;letter-spacing:.01em;color:#7A7A90;opacity:0;transform:translateX(6px);transition:opacity .25s ease,transform .25s ease;white-space:nowrap;\">What We Stand For<\/span>\n        <span data-navdot=\"\" style=\"width:9px;height:9px;border-radius:999px;background:#D9D2EC;transition:width .25s ease,height .25s ease,background .25s ease;\"><\/span>\n      <\/div>\n    \n\n      <div data-navitem=\"5\" style=\"display:flex;align-items:center;gap:10px;cursor:pointer;\">\n        <span data-navlabel=\"\" style=\"font-size:12.5px;font-weight:600;letter-spacing:.01em;color:#7A7A90;opacity:0;transform:translateX(6px);transition:opacity .25s ease,transform .25s ease;white-space:nowrap;\">The Company<\/span>\n        <span data-navdot=\"\" style=\"width:9px;height:9px;border-radius:999px;background:#D9D2EC;transition:width .25s ease,height .25s ease,background .25s ease;\"><\/span>\n      <\/div>\n    \n\n      <div data-navitem=\"6\" style=\"display:flex;align-items:center;gap:10px;cursor:pointer;\">\n        <span data-navlabel=\"\" style=\"font-size:12.5px;font-weight:600;letter-spacing:.01em;color:#7A7A90;opacity:0;transform:translateX(6px);transition:opacity .25s ease,transform .25s ease;white-space:nowrap;\">Get Started<\/span>\n        <span data-navdot=\"\" style=\"width:9px;height:9px;border-radius:999px;background:#D9D2EC;transition:width .25s ease,height .25s ease,background .25s ease;\"><\/span>\n      <\/div>\n    \n  <\/div>\n\n  <!-- next-stop follower cue (blank stretches) -->\n  <div data-cue=\"\" style=\"position:fixed;left:0;top:0;z-index:55;display:flex;align-items:center;gap:8px;padding:7px 14px;border-radius:999px;background:rgba(255,255,255,.9);backdrop-filter:blur(8px);border:1px solid #ECECF3;box-shadow:0 10px 24px -12px rgba(28,18,60,.28);font-size:12.5px;font-weight:600;color:#5C4B78;opacity:0;transition:opacity .3s ease;pointer-events:none;white-space:nowrap;\">\n    <span style=\"font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:#A99AC8;\">Next<\/span>\n    <span data-cuetext=\"\">\u2014<\/span>\n    <span style=\"color:var(--accent,#6512BE);\">\u2193<\/span>\n  <\/div>\n\n\n<script>\n(function(){\n  \"use strict\";\n  class MceAbout {\n    constructor(){ this.props = { accentColor: '#6512BE', revealMotion: true }; }\n  componentDidMount() {\n    this.H = 4200;\n    this.nodes = [\n      { key:'1', side:'left',   yf:0.12,  w:820, icon:'tabler:map-search' },\n      { key:'2', side:'right',  yf:0.25,  w:860, icon:'tabler:layout-grid' },\n      { key:'3', side:'left',   yf:0.38,  w:820, icon:'tabler:adjustments-alt' },\n      { key:'4', side:'right',  yf:0.51,  w:840, icon:'tabler:users-group' },\n      { key:'5', side:'left',   yf:0.64,  w:820, icon:'tabler:heart-handshake' },\n      { key:'6', side:'right',  yf:0.77,  w:780, icon:'tabler:building-community' },\n      { key:'7', side:'center', yf:0.90,  w:1120 },\n    ];\n    this._needLayout = true;\n    \/* scroll-snap intentionally NOT set: 'y mandatory' on the document hijacked the whole\n       WP page's scroll inside Elementor. The journey is driven by window.scrollY, so it\n       scrolls freely with the animation fully intact. *\/\n    this._update = () => { try { this.update(); } catch (e) {} };\n    \/\/ scroll-driven, rAF-coalesced: one update per frame WHILE scrolling\/resizing, ~0 CPU when idle\n    \/\/ (every visual on the page is derived from scroll position, so idling would render nothing new).\n    this._raf = 0;\n    this._tick = () => { this._raf = 0; this._update(); };\n    this._schedule = () => { if (!this._raf) this._raf = requestAnimationFrame(this._tick); };\n    window.addEventListener('scroll', this._schedule, { passive: true });\n    window.addEventListener('resize', () => { this._needLayout = true; this._schedule(); });\n    \/\/ first paint + settle (layout depends on rendered card heights); relayout once webfonts swap in\n    [0, 80, 250, 600, 1200].forEach((t) => setTimeout(this._update, t));\n    if (document.fonts && document.fonts.ready) document.fonts.ready.then(() => { this._needLayout = true; this._update(); });\n  }\n  componentWillUnmount() {\n    if (this._raf) cancelAnimationFrame(this._raf);\n    window.removeEventListener('scroll', this._schedule);\n  }\n\n  resolveRefs() {\n    const svg = document.getElementById('mceStageSvg');\n    if (!svg) return;\n    if (this.svg !== svg) { this.svg = svg; this._built = false; this._len = 0; }\n    this.routePath = svg.querySelector('#mceRoute');\n    this.trackPath = svg.querySelector('#mceTrack');\n    this.comet = svg.querySelector('#mceComet');\n    this.stageEl = svg.parentElement;\n    this.stageWrap = svg.parentElement && svg.parentElement.parentElement;\n  }\n\n  buildNodeEls() {\n    if (this._built || !this.svg || !this.comet) return;\n    const ns = 'http:\/\/www.w3.org\/2000\/svg';\n    this.nodes.forEach((n) => {\n      const cn = document.createElementNS(ns, 'path');\n      cn.setAttribute('stroke', 'var(--accent,#6512BE)'); cn.setAttribute('stroke-opacity', '.5');\n      cn.setAttribute('stroke-width', '2'); cn.setAttribute('stroke-dasharray', '2 9'); cn.setAttribute('stroke-linecap', 'round');\n      cn.setAttribute('fill', 'none'); cn.style.opacity = '0';\n      this.svg.insertBefore(cn, this.comet); n.connEl = cn;\n      const wv = document.createElementNS(ns, 'circle');\n      wv.setAttribute('r', '10'); wv.setAttribute('fill', 'var(--accent,#6512BE)'); wv.setAttribute('opacity', '0');\n      this.svg.insertBefore(wv, this.comet); n.wvEl = wv;\n      const g = document.createElementNS(ns, 'g'); g.style.opacity = '0';\n      g.innerHTML = '<circle r=\"16\" fill=\"var(--accent,#6512BE)\" opacity=\".15\"><\/circle><circle r=\"9\" fill=\"#fff\" stroke=\"var(--accent,#6512BE)\" stroke-width=\"3\"><\/circle><circle r=\"3.2\" fill=\"var(--accent,#6512BE)\"><\/circle>';\n      this.svg.insertBefore(g, this.comet); n.mkEl = g;\n      n.cardEl = this.stageEl.querySelector('[data-stop=\"' + n.key + '\"]');\n      \/\/ dedicated 1px snap anchor (tall cards must not become snap points themselves)\n      let an = this.stageEl.querySelector('[data-snap=\"' + n.key + '\"]');\n      if (!an) {\n        an = document.createElement('div');\n        an.setAttribute('data-snap', n.key); an.setAttribute('aria-hidden', 'true');\n        an.style.cssText = 'position:absolute;left:0;width:1px;height:1px;pointer-events:none;';\n        this.stageEl.appendChild(an);\n      }\n      n.snapEl = an;\n    });\n    \/\/ focus layer: blurs\/dims everything behind the active card on arrival\n    if (!this.stageEl.querySelector('#mceFocus')) {\n      const f = document.createElement('div');\n      f.id = 'mceFocus'; f.setAttribute('aria-hidden', 'true');\n      f.style.cssText = 'position:absolute;inset:0;pointer-events:none;opacity:0;background:rgba(255,255,255,0);will-change:backdrop-filter,opacity;';\n      const firstCard = this.stageEl.querySelector('[data-stop]');\n      this.stageEl.insertBefore(f, firstCard);\n    }\n    \/\/ vehicle playhead \u2014 a purple field-team van that rides the route\n    if (!this.stageEl.querySelector('#mceVehicle')) {\n      const v = document.createElement('div');\n      v.id = 'mceVehicle'; v.setAttribute('aria-hidden', 'true');\n      v.style.cssText = 'position:absolute;left:0;top:0;width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:linear-gradient(150deg,#9B51E0,#6512BE);transform:translate(-50%,-50%);opacity:0;z-index:6;pointer-events:none;animation:mceVehPulse 2.6s ease-in-out infinite;will-change:left,top,opacity;';\n      v.innerHTML = '<iconify-icon icon=\"tabler:car-filled\" width=\"24\" height=\"24\" style=\"color:#fff;\"><\/iconify-icon>';\n      this.stageEl.appendChild(v);\n    }\n    this.vehicle = this.stageEl.querySelector('#mceVehicle');\n    \/\/ side motifs: a soft, relevant icon on the empty side of each stop\n    this.nodes.forEach((n) => {\n      if (n.side === 'center' || !n.icon) return;\n      let mo = this.stageEl.querySelector('[data-motif=\"' + n.key + '\"]');\n      if (!mo) {\n        mo = document.createElement('div');\n        mo.setAttribute('data-motif', n.key); mo.setAttribute('aria-hidden', 'true');\n        mo.style.cssText = 'position:absolute;pointer-events:none;opacity:0;display:flex;align-items:center;justify-content:center;width:280px;height:280px;border-radius:64px;color:var(--accent,#6512BE);will-change:opacity,transform;';\n        mo.innerHTML = '<iconify-icon icon=\"' + n.icon + '\" width=\"150\" height=\"150\"><\/iconify-icon>';\n        this.stageEl.insertBefore(mo, this.stageEl.querySelector('[data-stop]'));\n      }\n      n.motifEl = mo;\n    });\n    this._built = true;\n  }\n\n  layout() {\n    const wrap = this.stageWrap, svg = this.svg, path = this.routePath, track = this.trackPath;\n    if (!wrap || !svg || !path || !this.stageEl) return;\n    this.buildNodeEls();\n    const W = wrap.clientWidth;\n    const xL = Math.max(210, W * 0.45), xR = W - Math.max(210, W * 0.45), xC = W * 0.5;\n    const edge = Math.max(40, W * 0.04);\n    const navReserve = Math.max(110, W * 0.065);\n    const gap = Math.max(110, W * 0.085);\n    const TOP = 360;            \/\/ longer lead-in route before the first stop (the journey \"sets off\")\n    const VGAP = 188;           \/\/ tighter mid-spacing keeps the page short despite the longer start\n\n    \/\/ pass 1 \u2014 channel x per node\n    this.nodes.forEach((n) => { n.x = n.side === 'left' ? xL : n.side === 'right' ? xR : xC; });\n\n    \/\/ pass 2 \u2014 set each card's width, measure height, stack with a guaranteed gap (no overlap, ever)\n    let cursor = TOP;\n    this.nodes.forEach((n, i) => {\n      const card = n.cardEl;\n      let cw, left, ch = 0;\n      if (n.side === 'center') {\n        cw = Math.min(n.w, W - 2 * edge); left = (W - cw) \/ 2;\n      } else if (n.side === 'left') {\n        const rightEdge = W - navReserve;\n        cw = Math.min(n.w, rightEdge - n.x - gap); left = rightEdge - cw;\n      } else {\n        cw = Math.min(n.w, n.x - edge - gap); left = edge;\n      }\n      if (card) { card.style.width = cw + 'px'; ch = card.offsetHeight; }\n      const cy = (i === 0) ? (cursor + ch \/ 2) : (cursor + VGAP + ch \/ 2);\n      n.y = cy; n._left = left; n._cw = cw; n._ch = ch;\n      cursor = cy + ch \/ 2;\n    });\n    const H = cursor + 150;\n    this.H = H;\n    wrap.style.height = H + 'px';\n    svg.setAttribute('viewBox', `0 0 ${W} ${H}`); svg.setAttribute('width', W); svg.setAttribute('height', H);\n    this.nodes.forEach((n) => { n.f = n.y \/ H; });\n\n    \/\/ pass 3 \u2014 place cards, markers, connectors, motifs\n    this.nodes.forEach((n) => {\n      if (n.mkEl) n.mkEl.setAttribute('transform', `translate(${n.x},${n.y})`);\n      if (n.wvEl) { n.wvEl.setAttribute('cx', n.x); n.wvEl.setAttribute('cy', n.y); }\n      const card = n.cardEl;\n      if (card) { card.style.left = n._left + 'px'; card.style.top = (n.y - n._ch \/ 2) + 'px'; }\n      if (n.side === 'center') {\n        n.cFrom = null; if (n.connEl) n.connEl.setAttribute('d', '');\n        n.cardTop = n.y; n.cardBot = n.y;\n      } else if (n.side === 'left') {\n        n.cFrom = { x: n.x, y: n.y }; n.cTo = { x: n._left, y: n.y };\n        n.cardTop = n.y - n._ch \/ 2; n.cardBot = n.y + n._ch \/ 2;\n      } else {\n        n.cFrom = { x: n.x, y: n.y }; n.cTo = { x: n._left + n._cw, y: n.y };\n        n.cardTop = n.y - n._ch \/ 2; n.cardBot = n.y + n._ch \/ 2;\n      }\n      if (n.motifEl && n.side !== 'center') {\n        const m = 140; \/\/ half of 280px box\n        const mx = n.side === 'left' ? (edge + (n.x - gap)) \/ 2 : ((n.x + gap) + (W - edge)) \/ 2;\n        n.motifEl.style.left = (mx - m) + 'px';\n        n.motifEl.style.top = (n.y - m) + 'px';\n      }\n      \/\/ snap anchor: stops centre on their card; the CTA snaps to the page bottom (finale)\n      if (n.snapEl) {\n        const vh = window.innerHeight || 800;\n        const isLast = (n === this.nodes[this.nodes.length - 1]);\n        n.snapEl.style.top = (isLast ? Math.max(n.y, this.H - vh \/ 2) : n.y) + 'px';\n      }\n    });\n\n    \/\/ pass 4 \u2014 one continuous smooth curve threading every stop (vertical tangents at each node,\n    \/\/ so it flows through the markers with no straight runs); Y stays monotonic for the playhead\n    const k = 0.55;\n    const seq = [{ x: xC, y: 40 }].concat(this.nodes.map((n) => ({ x: n.x, y: n.y })));\n    let d = `M${seq[0].x.toFixed(1)},${seq[0].y.toFixed(1)}`;\n    for (let i = 1; i < seq.length; i++) {\n      const a = seq[i - 1], b = seq[i], dy = b.y - a.y;\n      d += ` C${a.x.toFixed(1)},${(a.y + dy * k).toFixed(1)} ${b.x.toFixed(1)},${(b.y - dy * k).toFixed(1)} ${b.x.toFixed(1)},${b.y.toFixed(1)}`;\n    }\n    path.setAttribute('d', d); if (track) track.setAttribute('d', d);\n    this._len = path.getTotalLength();\n    path.style.strokeDasharray = '1';\n  }\n\n  fadeRect(d) {\n    const a = Math.abs(d);\n    const plateau = 0.18, edge = 0.62;\n    if (a <= plateau) return 1;\n    if (a >= edge) return 0;\n    const t = (a - plateau) \/ (edge - plateau);\n    return 1 - (t * t * (3 - 2 * t));\n  }\n\n  buildNav() {\n    if (this._navBuilt || !this.rootEl) return;\n    const nav = this.rootEl.querySelector('[data-nav]');\n    if (!nav) return;\n    const items = nav.querySelectorAll('[data-navitem]');\n    if (items.length < this.nodes.length) return;\n    items.forEach((it, idx) => {\n      it.addEventListener('click', () => this.jumpTo(idx));\n      it.addEventListener('mouseenter', () => { it._hover = true; const l = it.querySelector('[data-navlabel]'); if (l) { l.style.opacity = '1'; l.style.transform = 'translateX(0)'; } });\n      it.addEventListener('mouseleave', () => { it._hover = false; const l = it.querySelector('[data-navlabel]'); if (l) { l.style.opacity = '0'; l.style.transform = 'translateX(6px)'; } });\n    });\n    this.navEl = nav;\n    this._navBuilt = true;\n  }\n\n  jumpTo(idx) {\n    const n = this.nodes[idx]; if (!n || !n.cardEl) return;\n    const de = document.documentElement, vh = window.innerHeight;\n    if (idx === this.nodes.length - 1) { window.scrollTo({ top: de.scrollHeight, behavior: 'smooth' }); return; }\n    const rc = n.cardEl.getBoundingClientRect();\n    const target = rc.top + (window.scrollY || 0) + rc.height \/ 2 - vh \/ 2;\n    window.scrollTo({ top: Math.max(0, target), behavior: 'smooth' });\n  }\n\n  updateNav(active, fin) {\n    if (!this.navEl) return;\n    this.navEl.style.opacity = (1 - fin).toFixed(2);\n    this.navEl.style.pointerEvents = fin > 0.5 ? 'none' : 'auto';\n    const items = this.navEl.querySelectorAll('[data-navitem]');\n    items.forEach((it, idx) => {\n      const dot = it.querySelector('[data-navdot]');\n      const lbl = it.querySelector('[data-navlabel]');\n      const isActive = idx === active;\n      if (dot) {\n        dot.style.width = isActive ? '13px' : '9px';\n        dot.style.height = isActive ? '13px' : '9px';\n        dot.style.background = idx <= active ? 'var(--accent,#6512BE)' : '#D9D2EC';\n      }\n      \/\/ labels are hover-only (no persistent label that could overlap content)\n      if (lbl && !it._hover) { lbl.style.opacity = '0'; lbl.style.transform = 'translateX(6px)'; }\n    });\n  }\n\n  update() {\n    this.resolveRefs();\n    if (!this.stageWrap || !this.svg || !this.routePath || !this.stageEl || !this.comet) return;\n    if (this._needLayout || !this._len || !this.svg.getAttribute('viewBox')) { this.layout(); this._needLayout = false; }\n    if (this.stageEl.style.opacity !== '1') this.stageEl.style.opacity = '1';\n    const motion = this.props.revealMotion !== false;\n    const p = this.routePath;\n    const vh = window.innerHeight;\n    const de = document.documentElement;\n    const sy = window.scrollY || de.scrollTop || 0;\n\n    if (!motion) {\n      p.style.strokeDashoffset = '0';\n      this.nodes.forEach((n) => this.setStop(n, 1));\n      return;\n    }\n\n    \/\/ route progress is tied to overall scroll, so at the very top the playhead sits at the start\n    const maxScroll = Math.max(1, de.scrollHeight - vh);\n    const prog = this.clamp01(sy \/ Math.max(1, maxScroll - vh * 0.4));\n\n    const last = this.nodes.length - 1;\n    \/\/ finale (CTA handoff): driven by the CTA card's ACTUAL position in the viewport, NOT by page\n    \/\/ scrollHeight. Embedded in WordPress the widget has a header\/footer around it, so page-bottom\n    \/\/ math revealed the CTA too late \u2014 by the time it triggered, the CTA had already scrolled up\n    \/\/ behind the fixed header and only the footer was in view. Tying the reveal to the card's own\n    \/\/ rect makes it fully appear as it rises into the lower-middle of the screen (clear of both),\n    \/\/ and stay visible if you keep scrolling. (offsetTop is layout-based, so no transform feedback.)\n    let fin;\n    const _ctaCard = this.nodes[last].cardEl;\n    if (_ctaCard) {\n      const _ctaMid = this.stageEl.getBoundingClientRect().top + _ctaCard.offsetTop + _ctaCard.offsetHeight \/ 2;\n      fin = this.clamp01((vh * 1.15 - _ctaMid) \/ Math.max(1, vh * 0.6));\n      \/\/ short-footer \/ standalone guarantee: with little page below the widget the card mid\n      \/\/ can never rise to 0.55*vh, so the rect math plateaus below 1 and the CTA stays\n      \/\/ half-revealed. Bottom-of-page progress takes over for the last stretch of scroll.\n      const endZone = Math.max(1, vh * 0.35);\n      fin = Math.max(fin, this.clamp01((sy - (maxScroll - endZone)) \/ endZone));\n    } else {\n      const zone = Math.max(1, vh * 0.45);\n      fin = this.clamp01((sy - (maxScroll - zone)) \/ zone);\n    }\n    \/\/ staggered handoff: route is essentially gone before the CTA arrives (no overlap view)\n    const routeVis = 1 - this.smooth(this.clamp01(fin \/ 0.5));\n    const ctaIn = this.smooth(this.clamp01((fin - 0.5) \/ 0.5));\n\n    const off = String(1 - prog);\n\n    \/\/ playhead rides the route at the vertical centre of the screen and draws the line up to it,\n    \/\/ so the vehicle is always where you're looking (never vanishes near a stop)\n    if (this._len) {\n      const sr = this.stageEl.getBoundingClientRect();\n      const targetY = (vh * 0.5 - sr.top);\n      const Lc = this.lengthAtY(targetY);\n      const drawFrac = this.clamp01(Lc \/ this._len);\n      const o2 = String(1 - drawFrac);\n      if (p.style.strokeDashoffset !== o2) p.style.strokeDashoffset = o2;\n      const tip = p.getPointAtLength(Lc);\n      let cx = tip.x, cy = tip.y;\n      for (const n of this.nodes) {\n        if (Math.abs(tip.y - n.y) < 16) {\n          cx = n.x; cy = n.y;\n          if (!n._waved) { n._waved = true; this.wave(n); }   \/\/ fire exactly on arrival\n        } else if (Math.abs(tip.y - n.y) > 90) {\n          n._waved = false;\n        }\n      }\n      if (this.comet) this.comet.style.opacity = '0';\n      if (this.vehicle) {\n        this.vehicle.style.left = cx.toFixed(1) + 'px';\n        this.vehicle.style.top = cy.toFixed(1) + 'px';\n        this.vehicle.style.opacity = routeVis.toFixed(3);\n      }\n    }\n\n    \/\/ route layer (track, path, comet, markers, connectors) fades out first in the finale\n    this.svg.style.opacity = routeVis.toFixed(3);\n\n    \/\/ map background: unfolds (scale + opacity rise) toward the middle of the journey,\n    \/\/ parallax-drifts upward, and falls back toward the ends \u2014 receding in the finale\n    if (!this.mapBg) this.mapBg = this.rootEl && this.rootEl.querySelector('#mceMapBg');\n    if (this.mapBg) {\n      const bell = Math.sin(this.clamp01(prog) * Math.PI);       \/\/ 0 at ends, 1 mid-journey\n      const sc = (1.0 + bell * 0.1).toFixed(4);\n      const ty = (-prog * 150).toFixed(1);\n      this.mapBg.style.transform = 'translateY(' + ty + 'px) scale(' + sc + ')';\n      this.mapBg.style.opacity = ((0.26 + bell * 0.4) * (0.35 + 0.65 * routeVis)).toFixed(3);\n    }\n\n    \/\/ each stop appears as it nears the viewport centre and disappears as it leaves\n    let activeIdx = 0, bestDist = Infinity, maxOp = 0, nextIdx = -1;\n    this.nodes.forEach((n, idx) => {\n      if (!n.cardEl) return;\n      const rc = n.cardEl.getBoundingClientRect();\n      const c = rc.top + rc.height \/ 2;\n      const distPx = c - vh * 0.5;\n      const dist = distPx \/ vh;\n      if (Math.abs(distPx) < bestDist) { bestDist = Math.abs(distPx); activeIdx = idx; }\n      if (distPx > vh * 0.12 && nextIdx === -1) nextIdx = idx;\n      if (idx === last) return; \/\/ CTA handled separately below\n      let op = this.fadeRect(dist);\n      if (fin > 0) op *= (1 - fin); \/\/ hide company etc. as the finale takes over\n      if (op > maxOp) maxOp = op;\n      this.setStop(n, op);\n    });\n\n    \/\/ arrival pulse: ONLY right at dead-centre the active card zooms a touch and the\n    \/\/ background blurs\/dims briefly; it releases (route crisp again) as you scroll on\n    if (!this.focusEl) this.focusEl = this.stageEl && this.stageEl.querySelector('#mceFocus');\n    const actN = this.nodes[activeIdx];\n    let pulse = 0;\n    if (actN && actN.cardEl) {\n      const rc = actN.cardEl.getBoundingClientRect();\n      const d = Math.abs((rc.top + rc.height \/ 2) - vh * 0.5) \/ vh;\n      pulse = Math.max(0, 1 - d \/ 0.34);\n      pulse = pulse * pulse * (3 - 2 * pulse) * (1 - fin);\n      actN.cardEl.style.transform = 'scale(' + (1 + 0.1 * pulse).toFixed(3) + ')';\n      if (actN.motifEl) actN.motifEl.style.transform = 'scale(' + ((actN._motifScale != null ? actN._motifScale : 1) + 0.18 * pulse).toFixed(3) + ')';\n    }\n    if (this.focusEl) {\n      \/\/ blur\/dim disabled \u2014 keep the focus layer fully transparent\n      this.focusEl.style.backdropFilter = 'none';\n      this.focusEl.style.webkitBackdropFilter = 'none';\n      this.focusEl.style.background = 'rgba(255,255,255,0)';\n      this.focusEl.style.opacity = '0';\n    }\n\n    \/\/ spotlight: a soft pool of light that follows the active content, so the eye\n    \/\/ is always drawn to where the content is and the gaps stay calm\n    if (!this.spotEl) this.spotEl = this.rootEl && this.rootEl.querySelector('#mceSpot');\n    if (this.spotEl) {\n      const an = this.nodes[activeIdx];\n      if (an && an.cardEl) {\n        const cx = an.cardEl.offsetLeft + an.cardEl.offsetWidth \/ 2;\n        const cy = an.cardEl.offsetTop + an.cardEl.offsetHeight \/ 2;\n        this.spotEl.style.left = cx.toFixed(0) + 'px';\n        this.spotEl.style.top = cy.toFixed(0) + 'px';\n        this.spotEl.style.opacity = (Math.max(0, maxOp) * 0.95 * (1 - fin)).toFixed(3);\n      }\n    }\n\n    \/\/ CTA: behaves like a normal stop along the route, then lifts to centre + up at the very end\n    \/\/ CTA appears ONLY in the finale (never alongside the live route) and lifts to centre\n    const cta = this.nodes[last];\n    if (cta.cardEl) {\n      const e = ctaIn;\n      cta.cardEl.style.transition = 'none';\n      cta.cardEl.style.opacity = e.toFixed(3);\n      cta.cardEl.style.clipPath = 'none';\n      const lift = -ctaIn * (vh * 0.14);\n      cta.cardEl.style.transform = 'translateY(' + lift.toFixed(0) + 'px) scale(' + (0.97 + ctaIn * 0.03).toFixed(3) + ')';\n      cta.cardEl.style.pointerEvents = e > 0.5 ? 'auto' : 'none';\n      if (cta.mkEl) cta.mkEl.style.opacity = '0';\n    }\n\n    \/\/ journey nav\n    this.buildNav();\n    this.updateNav(activeIdx, fin);\n\n    \/\/ next-stop cue follows the moving dot through blank stretches\n    if (!this.cueEl) this.cueEl = this.rootEl.querySelector('[data-cue]');\n    if (this.cueEl) {\n      const inGap = maxOp < 0.32 && fin < 0.04 && prog > 0.01 && prog < 0.99 && nextIdx >= 0;\n      if (inGap) {\n        const sr = this.stageEl.getBoundingClientRect();\n        const tip = p.getPointAtLength(this.clamp01(prog) * this._len);\n        const cueX = Math.min(window.innerWidth - 220, sr.left + tip.x + 26);\n        const cueY = sr.top + tip.y - 16;\n        this.cueEl.style.left = cueX + 'px';\n        this.cueEl.style.top = cueY + 'px';\n        const txt = this.cueEl.querySelector('[data-cuetext]');\n        const labels = ['Our Mission', 'One Platform', 'Built to Adapt', 'How We Work', 'What We Stand For', 'The Company', 'Get Started'];\n        if (txt && txt.textContent !== labels[nextIdx]) txt.textContent = labels[nextIdx];\n        this.cueEl.style.opacity = '1';\n      } else {\n        this.cueEl.style.opacity = '0';\n      }\n    }\n  }\n\n  clamp01(v) { return v < 0 ? 0 : v > 1 ? 1 : v; }\n  smooth(v) { return v * v * (3 - 2 * v); }\n\n  \/\/ binary-search the route length whose point is at stage-Y = target (route is monotonic in Y)\n  lengthAtY(target) {\n    const p = this.routePath, L = this._len;\n    if (!p || !L) return 0;\n    if (target <= 0) return 0;\n    if (target >= p.getPointAtLength(L).y) return L;\n    let lo = 0, hi = L;\n    for (let i = 0; i < 18; i++) {\n      const mid = (lo + hi) \/ 2;\n      if (p.getPointAtLength(mid).y < target) lo = mid; else hi = mid;\n    }\n    return (lo + hi) \/ 2;\n  }\n\n  setStop(n, op) {\n    const e = op * op * (3 - 2 * op);            \/\/ smoothstep\n    const o = e.toFixed(3);\n    if (n.cardEl && n.cardEl.style.opacity !== o) {\n      n.cardEl.style.transition = 'none';\n      n.cardEl.style.opacity = o;\n      \/\/ content unfolds top -> bottom as you arrive (and folds back as you leave)\n      n.cardEl.style.clipPath = e > 0.995 ? 'none' : ('inset(0 0 ' + ((1 - e) * 100).toFixed(1) + '% 0 round 28px)');\n      n.cardEl.style.transform = 'translateY(' + (10 * (1 - e)).toFixed(1) + 'px)';\n      n.cardEl.style.pointerEvents = op > 0.5 ? 'auto' : 'none';\n    }\n    if (n.mkEl) n.mkEl.style.opacity = o;\n    if (n.motifEl) {\n      n.motifEl.style.opacity = (e * 0.82).toFixed(3);\n      n._motifScale = 0.94 + 0.12 * e;                 \/\/ base fade-in zoom; the arrival pulse ADDS to this (so no scale jump on becoming active)\n      n.motifEl.style.transform = 'scale(' + n._motifScale.toFixed(3) + ')';\n    }\n    if (n.connEl) {\n      \/\/ connector draws out later than the card \u2014 only once the stop is well into view\n      const cg = this.clamp01((op - 0.5) \/ 0.42);\n      const ce = cg * cg * (3 - 2 * cg);\n      if (n.cFrom) {\n        if (ce <= 0.004) { n.connEl.setAttribute('d', ''); }\n        else {\n          const ex = n.cFrom.x + (n.cTo.x - n.cFrom.x) * ce;\n          n.connEl.setAttribute('d', `M${n.cFrom.x},${n.cFrom.y} L${ex.toFixed(1)},${n.cFrom.y}`);\n        }\n      }\n      n.connEl.style.opacity = (ce * 0.6).toFixed(3);\n    }\n  }\n\n  wave(n) {\n    if (!n.wvEl) return;\n    n.wvEl.style.animation = 'none';\n    void n.wvEl.getBoundingClientRect();\n    n.wvEl.style.animation = 'mceArrive 1.15s cubic-bezier(.22,1,.36,1)';\n    if (this.vehicle) { this.vehicle.style.animation = 'none'; void this.vehicle.getBoundingClientRect(); this.vehicle.style.animation = 'mceVeh .6s cubic-bezier(.34,1.56,.64,1), mceVehPulse 2.6s ease-in-out infinite .6s'; }\n  }\n  }\n  function init(){\n    var inst = new MceAbout();\n    inst.rootEl = document.getElementById('mceAboutRoot');\n    if (!inst.rootEl) return;\n    \/\/ CTA hover (was DC style-hover \u2014 replicated so it beats Elementor's a:hover)\n    var b1 = document.getElementById('mceCtaPrimary');\n    if (b1){ b1.addEventListener('mouseenter', function(){ b1.style.transform='translateY(-2px)'; });\n             b1.addEventListener('mouseleave', function(){ b1.style.transform='translateY(0)'; }); }\n    var b2 = document.getElementById('mceCtaSecondary');\n    if (b2){ b2.addEventListener('mouseenter', function(){ b2.style.borderColor='#fff'; b2.style.background='rgba(255,255,255,.08)'; });\n             b2.addEventListener('mouseleave', function(){ b2.style.borderColor='rgba(255,255,255,.45)'; b2.style.background='transparent'; }); }\n    var h1 = document.getElementById('mceHeroPrimary');\n    if (h1){ h1.addEventListener('mouseenter', function(){ h1.style.transform='translateY(-2px)'; h1.style.boxShadow='0 18px 38px -10px rgba(101,18,190,.6)'; });\n             h1.addEventListener('mouseleave', function(){ h1.style.transform='translateY(0)'; h1.style.boxShadow='0 12px 30px -10px rgba(101,18,190,.5)'; }); }\n    var h2 = document.getElementById('mceHeroSecondary');\n    if (h2){ h2.addEventListener('mouseenter', function(){ h2.style.borderColor='var(--accent,#6512BE)'; h2.style.background='#F4EEFF'; });\n             h2.addEventListener('mouseleave', function(){ h2.style.borderColor='#E4D6FB'; h2.style.background='#fff'; }); }\n    inst.componentDidMount();\n    window.__mceAbout = inst;\n  }\n  if (document.readyState !== 'loading') init();\n  else document.addEventListener('DOMContentLoaded', init);\n})();\n<\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>All-in-one Map and Field Team Productivity Platform We build the platform that runs field operations\u2014routing, territories, automation, and analytics, layered on top of the CRMs and data your team already uses. 15+ CRMs &amp; data sources Custom Apps Advanced Field Operations Platform Scroll to begin \u2193 The Gap Your customers live on a map\u2014but your [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-273","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Company - Mapsly<\/title>\n<meta name=\"description\" content=\"Mapsly is a fully customizable CRM map that adapts to your workflow. Visualize leads, automate territories, and integrate location intelligence into any CRM.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mapsly.com\/zh\/company-2\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Company - Mapsly\" \/>\n<meta property=\"og:description\" content=\"Mapsly is a fully customizable CRM map that adapts to your workflow. Visualize leads, automate territories, and integrate location intelligence into any CRM.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mapsly.com\/zh\/company-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Mapsly\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-16T17:29:17+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mapsly.com\\\/company-2\\\/\",\"url\":\"https:\\\/\\\/mapsly.com\\\/company-2\\\/\",\"name\":\"Company - Mapsly\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mapsly.com\\\/#website\"},\"datePublished\":\"2025-06-26T12:55:10+00:00\",\"dateModified\":\"2026-07-16T17:29:17+00:00\",\"description\":\"Mapsly is a fully customizable CRM map that adapts to your workflow. Visualize leads, automate territories, and integrate location intelligence into any CRM.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mapsly.com\\\/company-2\\\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mapsly.com\\\/company-2\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mapsly.com\\\/company-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mapsly.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Company\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mapsly.com\\\/#website\",\"url\":\"https:\\\/\\\/mapsly.com\\\/\",\"name\":\"Mapsly\",\"description\":\"The Ultimate CRM Map\",\"publisher\":{\"@id\":\"https:\\\/\\\/mapsly.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mapsly.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mapsly.com\\\/#organization\",\"name\":\"Mapsly\",\"url\":\"https:\\\/\\\/mapsly.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\\\/\\\/mapsly.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/mapsly.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/Mapsly-Logo-2x-BIG.png\",\"contentUrl\":\"https:\\\/\\\/mapsly.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/Mapsly-Logo-2x-BIG.png\",\"width\":280,\"height\":85,\"caption\":\"Mapsly\"},\"image\":{\"@id\":\"https:\\\/\\\/mapsly.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u516c\u53f8 - Mapsly","description":"Mapsly \u662f\u4e00\u4e2a\u5b8c\u5168\u53ef\u5b9a\u5236\u7684 CRM \u5730\u56fe\uff0c\u53ef\u9002\u5e94\u60a8\u7684\u5de5\u4f5c\u6d41\u7a0b\u3002\u53ef\u89c6\u5316\u6f5c\u5728\u5ba2\u6237\uff0c\u81ea\u52a8\u5316\u533a\u57df\u5212\u5206\uff0c\u5e76\u5c06\u4f4d\u7f6e\u667a\u80fd\u96c6\u6210\u5230\u4efb\u4f55 CRM \u4e2d\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mapsly.com\/zh\/company-2\/","og_locale":"zh_CN","og_type":"article","og_title":"Company - Mapsly","og_description":"Mapsly is a fully customizable CRM map that adapts to your workflow. Visualize leads, automate territories, and integrate location intelligence into any CRM.","og_url":"https:\/\/mapsly.com\/zh\/company-2\/","og_site_name":"Mapsly","article_modified_time":"2026-07-16T17:29:17+00:00","twitter_card":"summary_large_image","twitter_misc":{"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mapsly.com\/company-2\/","url":"https:\/\/mapsly.com\/company-2\/","name":"\u516c\u53f8 - Mapsly","isPartOf":{"@id":"https:\/\/mapsly.com\/#website"},"datePublished":"2025-06-26T12:55:10+00:00","dateModified":"2026-07-16T17:29:17+00:00","description":"Mapsly \u662f\u4e00\u4e2a\u5b8c\u5168\u53ef\u5b9a\u5236\u7684 CRM \u5730\u56fe\uff0c\u53ef\u9002\u5e94\u60a8\u7684\u5de5\u4f5c\u6d41\u7a0b\u3002\u53ef\u89c6\u5316\u6f5c\u5728\u5ba2\u6237\uff0c\u81ea\u52a8\u5316\u533a\u57df\u5212\u5206\uff0c\u5e76\u5c06\u4f4d\u7f6e\u667a\u80fd\u96c6\u6210\u5230\u4efb\u4f55 CRM \u4e2d\u3002","breadcrumb":{"@id":"https:\/\/mapsly.com\/company-2\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mapsly.com\/company-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/mapsly.com\/company-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mapsly.com\/"},{"@type":"ListItem","position":2,"name":"Company"}]},{"@type":"WebSite","@id":"https:\/\/mapsly.com\/#website","url":"https:\/\/mapsly.com\/","name":"Mapsly","description":"\u7ec8\u6781 CRM \u5730\u56fe","publisher":{"@id":"https:\/\/mapsly.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mapsly.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-Hans"},{"@type":"Organization","@id":"https:\/\/mapsly.com\/#organization","name":"Mapsly","url":"https:\/\/mapsly.com\/","logo":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/mapsly.com\/#\/schema\/logo\/image\/","url":"https:\/\/mapsly.com\/wp-content\/uploads\/2025\/06\/Mapsly-Logo-2x-BIG.png","contentUrl":"https:\/\/mapsly.com\/wp-content\/uploads\/2025\/06\/Mapsly-Logo-2x-BIG.png","width":280,"height":85,"caption":"Mapsly"},"image":{"@id":"https:\/\/mapsly.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/pages\/273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/comments?post=273"}],"version-history":[{"count":10,"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/pages\/273\/revisions"}],"predecessor-version":[{"id":31836,"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/pages\/273\/revisions\/31836"}],"wp:attachment":[{"href":"https:\/\/mapsly.com\/zh\/wp-json\/wp\/v2\/media?parent=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}