CINXE.COM

Integrations Series: Authentication And Connection - Building Productive

<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8" /> <!-- Responsive --> <meta content="width=device-width, initial-scale=1.0" name="viewport"> <!-- Remove IE's ability to use compatibility mode --> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- Correct type --> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- Disable phone formatting on safari --> <meta name="format-detection" content="telephone=no"> <!-- Speed up fetching of external assets --> <link rel="dns-prefetch" href="//fonts.googleapis.com"> <link rel="dns-prefetch" href="//ajax.googleapis.com"> <link rel="dns-prefetch" href="//www.google-analytics.com"> <!-- Win phone Meta --> <meta name="application-name" content="Building Productive"/> <!-- Apple --> <meta name="apple-mobile-web-app-title" content="Building Productive"> <meta name="apple-mobile-web-app-capable" content="yes"> <link rel="apple-touch-startup-image" href="/wp-content/themes/productive/public/logo.svg"> <!-- Favicon --> <link rel="icon" type="image/svg+xml" href="/wp-content/themes/productive/public/favicon.svg"> <link rel="alternate icon" href="/wp-content/themes/productive/public/favicon.ico"> <style id='esCssVariables-global'>:root {--global-custom-blocks-name: eightshift-block; --global-main-content-width: 12; --global-easing: cubic-bezier(0.55, 0, 0.45, 1); --global-base-font: InterVariable; --global-breakpoints-mobile: 479; --global-breakpoints-tablet: 1279; --global-breakpoints-desktop: 2159; --global-breakpoints-large: 2160; --global-grid-gutter: 2.78vw; --global-grid-side-padding: 5.56vw; --global-grid-max-content-width: 120rem; --global-section-spacing-min: -600; --global-section-spacing-max: 600; --global-section-spacing-step: 1; --global-section-in-spacing-min: 0; --global-section-in-spacing-max: 600; --global-section-in-spacing-step: 1; --global-z-index-compact-header: 101; --global-z-index-header: 102; --global-z-index-header-overlay: 99999; --global-z-index-drawer-cta: 100; --global-z-index-drawer: 99; --global-z-index-overlay: 98; --global-z-index-cookie-modal: 95; --global-z-index-featured-price-item: 1; --global-z-index-progress-bar: 101; --global-z-index-small: 2; --global-colors-primary: #C3151B; --global-colors-primary-values: 195 21 27; --global-colors-black: #111111; --global-colors-black-values: 17 17 17; --global-colors-white: #FFFFFF; --global-colors-white-values: 255 255 255; --global-colors-light: #CCCCCC; --global-colors-light-values: 204 204 204; --global-colors-indigo: #5D2BFF; --global-colors-indigo-values: 93 43 255; --global-colors-indigoLight: #A79EFA; --global-colors-indigoLight-values: 167 158 250; --global-colors-indigoDark: #2D00AD; --global-colors-indigoDark-values: 45 0 173; --global-colors-indigo100: #ECE5FF; --global-colors-indigo100-values: 236 229 255; --global-colors-indigo700: #5000E5; --global-colors-indigo700-values: 80 0 229; --global-colors-indigo800: #20007A; --global-colors-indigo800-values: 32 0 122; --global-colors-indigo900: #130047; --global-colors-indigo900-values: 19 0 71; --global-colors-violet: #AB40FF; --global-colors-violet-values: 171 64 255; --global-colors-violetLight: #D6DDFF; --global-colors-violetLight-values: 214 221 255; --global-colors-violetDark: #5D2BFF; --global-colors-violetDark-values: 93 43 255; --global-colors-grey50: #F7F9FC; --global-colors-grey50-values: 247 249 252; --global-colors-grey100: #F2F5FF; --global-colors-grey100-values: 242 245 255; --global-colors-grey200: #DFE5F5; --global-colors-grey200-values: 223 229 245; --global-colors-grey300: #BABDD8; --global-colors-grey300-values: 186 189 216; --global-colors-grey400: #7F82A4; --global-colors-grey400-values: 127 130 164; --global-colors-grey500: #3C3F58; --global-colors-grey500-values: 60 63 88; --global-colors-red100: #FAF1ED; --global-colors-red100-values: 250 241 237; --global-colors-red200: #FFCCCB; --global-colors-red200-values: 255 204 203; --global-colors-red300: #FF6666; --global-colors-red300-values: 255 102 102; --global-colors-red400: #E45353; --global-colors-red400-values: 228 83 83; --global-colors-red500: #A52828; --global-colors-red500-values: 165 40 40; --global-colors-green100: #E6F9ED; --global-colors-green100-values: 230 249 237; --global-colors-green200: #8CEAB7; --global-colors-green200-values: 140 234 183; --global-colors-green300: #21D191; --global-colors-green300-values: 33 209 145; --global-colors-green400: #00AA6C; --global-colors-green400-values: 0 170 108; --global-colors-green500: #004F32; --global-colors-green500-values: 0 79 50; --global-colors-yellow100: #FFF6DD; --global-colors-yellow100-values: 255 246 221; --global-colors-yellow200: #FFE194; --global-colors-yellow200-values: 255 225 148; --global-colors-yellow300: #FFC837; --global-colors-yellow300-values: 255 200 55; --global-colors-yellow400: #F1B203; --global-colors-yellow400-values: 241 178 3; --global-colors-yellow500: #B86300; --global-colors-yellow500-values: 184 99 0; --global-colors-orange100: #FFEEE9; --global-colors-orange100-values: 255 238 233; --global-colors-orange200: #FFBDA7; --global-colors-orange200-values: 255 189 167; --global-colors-orange300: #FF784B; --global-colors-orange300-values: 255 120 75; --global-colors-orange350: #FF9875; --global-colors-orange350-values: 255 152 117; --global-colors-orange400: #ED5D2D; --global-colors-orange400-values: 237 93 45; --global-colors-orange500: #C53506; --global-colors-orange500-values: 197 53 6; --global-colors-blue100: #E0F6FF; --global-colors-blue100-values: 224 246 255; --global-colors-blue200: #96DFFF; --global-colors-blue200-values: 150 223 255; --global-colors-blue300: #55C9FB; --global-colors-blue300-values: 85 201 251; --global-colors-blue400: #0699EC; --global-colors-blue400-values: 6 153 236; --global-colors-blue500: #0062BD; --global-colors-blue500-values: 0 98 189; --global-colors-burgundy100: #FFF0F4; --global-colors-burgundy100-values: 255 240 244; --global-colors-burgundy200: #ECA7C8; --global-colors-burgundy200-values: 236 167 200; --global-colors-burgundy300: #CA6696; --global-colors-burgundy300-values: 202 102 150; --global-colors-burgundy400: #AC366F; --global-colors-burgundy400-values: 172 54 111; --global-colors-burgundy500: #850442; --global-colors-burgundy500-values: 133 4 66; --global-colors-turquoise100: #D2FFFA; --global-colors-turquoise100-values: 210 255 250; --global-colors-turquoise200: #6DEDE5; --global-colors-turquoise200-values: 109 237 229; --global-colors-turquoise300: #42DAD1; --global-colors-turquoise300-values: 66 218 209; --global-colors-turquoise400: #07B2A8; --global-colors-turquoise400-values: 7 178 168; --global-colors-turquoise500: #006B6B; --global-colors-turquoise500-values: 0 107 107; --global-colors-limegreen100: #F3FCE8; --global-colors-limegreen100-values: 243 252 232; --global-colors-limegreen200: #CFF5A3; --global-colors-limegreen200-values: 207 245 163; --global-colors-limegreen300: #9EE250; --global-colors-limegreen300-values: 158 226 80; --global-colors-limegreen400: #7FB540; --global-colors-limegreen400-values: 127 181 64; --global-colors-limegreen500: #4F7128; --global-colors-limegreen500-values: 79 113 40; --global-colors-celticBlue300: #B3BFFF; --global-colors-celticBlue300-values: 179 191 255; --global-colors-celticBlue500: #4F6BF8; --global-colors-celticBlue500-values: 79 107 248; --global-gradients-gradient-1: linear-gradient(90deg, #AB40FF 0%, #5D2BFF 100%); }</style><script> // Define dataLayer and the gtag function. window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} // Set default consent to 'denied' as a placeholder gtag('consent', 'default', { 'ad_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'analytics_storage': 'denied' }); </script> <!-- Google Tag Manager --> <script id="google-tag-manager-script">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-56RMXVV');</script> <!-- END Google Tag Manager --> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56RMXVV" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <!-- This site is optimized with the Yoast SEO Premium plugin v24.3 (Yoast SEO v24.3) - https://yoast.com/wordpress/plugins/seo/ --> <title>Integrations Series: Authentication And Connection - Building Productive</title><link rel="preload" data-rocket-preload as="image" href="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" media="(max-width: 479px)" fetchpriority="high"><link rel="preload" data-rocket-preload as="image" href="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" media="(min-width: 479.1px) and (max-width: 1279px)" fetchpriority="high"><link rel="preload" data-rocket-preload as="image" href="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" media="(min-width: 1279.1px) and (max-width: 2159px)" fetchpriority="high"><link rel="preload" data-rocket-preload as="image" href="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" media="(min-width: 2159.1px)" fetchpriority="high"> <meta name="description" content="Integrations are a big part of any software, but they’re crucial to the functionality of a tool like Productive." /> <link rel="canonical" href="https://productive.io/engineering/blog/integrations-series-authentication-and-connection/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Integrations Series: Authentication And Connection" /> <meta property="og:description" content="Integrations are a big part of any software, but they’re crucial to the functionality of a tool like Productive." /> <meta property="og:url" content="https://productive.io/engineering/integrations-series-authentication-and-connection/" /> <meta property="og:site_name" content="Building Productive" /> <meta property="article:published_time" content="2024-02-20T08:26:33+00:00" /> <meta property="article:modified_time" content="2025-01-29T10:20:04+00:00" /> <meta property="og:image" content="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.png" /> <meta property="og:image:width" content="2850" /> <meta property="og:image:height" content="1195" /> <meta property="og:image:type" content="image/png" /> <meta name="author" content="Antonio Bajivić" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:label1" content="Written by" /> <meta name="twitter:data1" content="Antonio Bajivić" /> <meta name="twitter:label2" content="Est. reading time" /> <meta name="twitter:data2" content="8 minutes" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://productive.io/engineering/integrations-series-authentication-and-connection/","url":"https://productive.io/engineering/integrations-series-authentication-and-connection/","name":"Integrations Series: Authentication And Connection - Building Productive","isPartOf":{"@id":"https://productive.io/engineering/#website"},"primaryImageOfPage":{"@id":"https://productive.io/engineering/integrations-series-authentication-and-connection/#primaryimage"},"image":{"@id":"https://productive.io/engineering/integrations-series-authentication-and-connection/#primaryimage"},"thumbnailUrl":"https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.png","datePublished":"2024-02-20T08:26:33+00:00","dateModified":"2025-01-29T10:20:04+00:00","author":{"@id":"https://productive.io/engineering/#/schema/person/e284c887d48ef8811062b28036d13d15"},"description":"Integrations are a big part of any software, but they’re crucial to the functionality of a tool like Productive.","breadcrumb":{"@id":"https://productive.io/engineering/integrations-series-authentication-and-connection/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://productive.io/engineering/integrations-series-authentication-and-connection/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://productive.io/engineering/integrations-series-authentication-and-connection/#primaryimage","url":"https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.png","contentUrl":"https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.png","width":2850,"height":1195},{"@type":"BreadcrumbList","@id":"https://productive.io/engineering/integrations-series-authentication-and-connection/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://productive.io/engineering/"},{"@type":"ListItem","position":2,"name":"Integrations Series: Authentication And Connection"}]},{"@type":"WebSite","@id":"https://productive.io/engineering/#website","url":"https://productive.io/engineering/","name":"Building Productive","description":"Just another Productive Sites site","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://productive.io/engineering/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https://productive.io/engineering/#/schema/person/e284c887d48ef8811062b28036d13d15","name":"Antonio Bajivić","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://productive.io/engineering/#/schema/person/image/","url":"https://secure.gravatar.com/avatar/8dba4b6adc4d56f0154f7231c443cecd?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/8dba4b6adc4d56f0154f7231c443cecd?s=96&d=mm&r=g","caption":"Antonio Bajivić"},"description":"Working in web development and having fun with electronics brings me joy. In my free time, I mix working out, socializing, and reading.","honorificPrefix":"Mr","honorificSuffix":"MD","birthDate":"1997-07-11","gender":"male","jobTitle":"Frontend Engineer","url":"https://productive.io/engineering/author/antoniobajivic1/"}]}</script> <!-- / Yoast SEO Premium plugin. --> <link rel='dns-prefetch' href='//js.chilipiper.com' /> <link rel='dns-prefetch' href='//website-assets.productive.io' /> <link rel="alternate" type="application/rss+xml" title="Building Productive &raquo; Integrations Series: Authentication And Connection Comments Feed" href="https://productive.io/engineering/integrations-series-authentication-and-connection/feed/" /> <style id='wp-emoji-styles-inline-css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='Productive-block-style-css' href='https://productive.io/engineering/wp-content/themes/productive/public/applicationBlocks-180f64734784fa971291.css?ver=20250213134939.13309144674' media='all' /> <link rel='stylesheet' id='Productive-theme-styles-css' href='https://productive.io/engineering/wp-content/themes/productive/public/application-fc1abff301f64528d12f.css?ver=20250213134939.13309144674' media='all' /> <link rel='stylesheet' id='eightshift-forms-block-frontend-mandatory-style-css' href='https://productive.io/engineering/wp-content/plugins/eightshift-forms/public/applicationBlocksFrontendMandatory-ba98b730b52f609c16db.css?ver=5.4.2' media='all' /> <link rel='stylesheet' id='eightshift-forms-block-frontend-style-css' href='https://productive.io/engineering/wp-content/plugins/eightshift-forms/public/applicationBlocksFrontend-bc136984875f746cf206.css?ver=5.4.2' media='all' /> <link rel='stylesheet' id='Productive-block-frontend-style-css' href='https://productive.io/engineering/wp-content/themes/productive/public/applicationBlocksFrontend-82469e9fb59e4cdd8bb5.css?ver=20250213134939.13309144674' media='all' /> <link rel="https://api.w.org/" href="https://productive.io/engineering/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://productive.io/engineering/wp-json/wp/v2/posts/893" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://productive.io/engineering/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://productive.io/engineering/?p=893' /> <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://productive.io/engineering/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fproductive.io%2Fengineering%2Fintegrations-series-authentication-and-connection%2F" /> <link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://productive.io/engineering/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fproductive.io%2Fengineering%2Fintegrations-series-authentication-and-connection%2F&#038;format=xml" /> <meta name="generator" content="WP Rocket 3.18" data-wpr-features="wpr_oci wpr_desktop wpr_preload_links" /></head> <body data-page-category="engineering" class="post-template-default single single-post postid-893 single-format-standard theme-engineering"> <nav class="block-navbar js-block-navbar navbar-bp block-navbar--theme-light"> <a class="logo block-navbar__logo" href="https://productive.io" aria-label="Homepage" > <img src="https://website-assets.productive.io/uploads/sites/2/2022/11/logo-white.svg" alt="Building Productive" title="Building Productive" class="logo__img logo__img--default" width=180 height=36 /> <img src="" alt="Building Productive" title="Building Productive" class="logo__img logo__img--dark" width=180 height=36 /> </a> <div class="block-navbar-left js-block-navbar-left"> <a class="block-navbar-item js-block-navbar-item" href="https://productive.io/engineering/"> <div class="block-navbar-item__link"> <span>Building Productive</span> </div> </a> <a class="block-navbar-item js-block-navbar-item" href="https://productive.io/about-us/"> <div class="block-navbar-item__link"> <span>Company</span> </div> </a> </div> <div class="block-navbar-cta js-navbar-cta"> <style id='esFormsCssVariables-global'>:root {--global-custom-blocks-name: eightshift-block;--global-es-max-cols: 12;--global-esf-spacing-xs: 0.25rem;--global-esf-spacing-s: 0.5rem;--global-esf-spacing-m: 1rem;--global-esf-spacing-l: 1.5rem;--global-esf-spacing-xl: 2rem;--global-esf-ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);--global-esf-box-shadow: 0 0 0.5rem rgb(0 0 0 / 0.04);--global-esf-box-shadow-l: 0 0 0.125rem rgb(0 0 0 / 0.16), 0 0 0.5rem rgb(0 0 0 / 0.16);--global-esf-max-width: 36rem;--global-esf-input-height: 2.625rem;--global-breakpoints-mobile: 480;--global-breakpoints-tablet: 960;--global-breakpoints-desktop: 1920;--global-breakpoints-large: 1921;--global-colors-esf-admin-accent: #29A3A3;--global-colors-esf-admin-accent-values: 41 163 163;--global-colors-esf-admin-accent-50: #29A3A380;--global-colors-esf-admin-accent-50-values: 0 0 0;--global-colors-esf-admin-accent-30: #29a3a333;--global-colors-esf-admin-accent-30-values: 0 0 0;--global-colors-esf-admin-accent-10: #29A3A31A;--global-colors-esf-admin-accent-10-values: 0 0 0;--global-colors-esf-admin-accent-05: #29A3A30D;--global-colors-esf-admin-accent-05-values: 0 0 0;--global-colors-esf-admin-accent-dark: #218282;--global-colors-esf-admin-accent-dark-values: 33 130 130;--global-colors-esf-border: #DEDEDE;--global-colors-esf-border-values: 222 222 222;--global-colors-esf-black: #181818;--global-colors-esf-black-values: 24 24 24;--global-colors-esf-white: #FFFFFF;--global-colors-esf-white-values: 255 255 255;--global-colors-esf-gray: #484848;--global-colors-esf-gray-values: 72 72 72;--global-colors-esf-yellow-50: #FFFBEB;--global-colors-esf-yellow-50-values: 255 251 235;--global-colors-esf-yellow-100: #FEF3C7;--global-colors-esf-yellow-100-values: 254 243 199;--global-colors-esf-yellow-200: #FDE68A;--global-colors-esf-yellow-200-values: 253 230 138;--global-colors-esf-yellow-500: #EAB308;--global-colors-esf-yellow-500-values: 234 179 8;--global-colors-esf-yellow-950: #451A03;--global-colors-esf-yellow-950-values: 69 26 3;--global-colors-esf-sky-50: #F0F9FF;--global-colors-esf-sky-50-values: 240 249 255;--global-colors-esf-sky-100: #E0F2FE;--global-colors-esf-sky-100-values: 224 242 254;--global-colors-esf-sky-200: #BAE6FD;--global-colors-esf-sky-200-values: 186 230 253;--global-colors-esf-sky-500: #0EA5E9;--global-colors-esf-sky-500-values: 14 165 233;--global-colors-esf-sky-950: #082F49;--global-colors-esf-sky-950-values: 8 47 73;--global-colors-esf-gray-50: #F9FAFB;--global-colors-esf-gray-50-values: 249 250 251;--global-colors-esf-gray-100: #F3F4F6;--global-colors-esf-gray-100-values: 243 244 246;--global-colors-esf-gray-200: #E5E7EB;--global-colors-esf-gray-200-values: 229 231 235;--global-colors-esf-gray-300: #D1D5DB;--global-colors-esf-gray-300-values: 209 213 219;--global-colors-esf-gray-400: #9CA3AF;--global-colors-esf-gray-400-values: 156 163 175;--global-colors-esf-gray-500: #6B7280;--global-colors-esf-gray-500-values: 107 114 128;--global-colors-esf-gray-600: #4B5563;--global-colors-esf-gray-600-values: 75 85 99;--global-colors-esf-gray-950: #030712;--global-colors-esf-gray-950-values: 3 7 18;--global-colors-esf-red-50: #FEF2F2;--global-colors-esf-red-50-values: 254 242 242;--global-colors-esf-red-100: #FEE2E2;--global-colors-esf-red-100-values: 254 226 226;--global-colors-esf-red-200: #FECACA;--global-colors-esf-red-200-values: 254 202 202;--global-colors-esf-red-500: #EF4444;--global-colors-esf-red-500-values: 239 68 68;--global-colors-esf-red-400: #F87171;--global-colors-esf-red-400-values: 248 113 113;--global-colors-esf-red-600: #DC2626;--global-colors-esf-red-600-values: 220 38 38;--global-colors-esf-red-800: #991B1B;--global-colors-esf-red-800-values: 153 27 27;--global-colors-esf-red-950: #450A0A;--global-colors-esf-red-950-values: 69 10 10;--global-colors-esf-green-50: #F0FDF4;--global-colors-esf-green-50-values: 240 253 244;--global-colors-esf-green-100: #DCFCE7;--global-colors-esf-green-100-values: 220 252 231;--global-colors-esf-green-200: #BBF7D0;--global-colors-esf-green-200-values: 187 247 208;--global-colors-esf-green-500: #22C55E;--global-colors-esf-green-500-values: 34 197 94;--global-colors-esf-green-950: #052E16;--global-colors-esf-green-950-values: 5 46 22;}</style> <div class="es-block-forms js-es-block-forms" > <form class="es-form js-es-block-form" data-phone-sync='1' data-form-id='17' data-post-id='893' data-form-type='hubspot' data-conditional-tags='[]' method='post' data-block-ssr='false' data-disabled-default-styles='false' novalidate onsubmit="event.preventDefault();" > <div class="es-global-msg js-es-block-global-msg" > </div> <div class="es-form__fields"> <div class="es-field es-field--input js-es-block-field" data-id="c1544f67" data-hubspot-type-id='0-1' data-field-name='email' data-field-type='input' data-type-custom='email' data-tracking='email'> <div class="es-field__inner"> <div class="es-field__content"> <div class="es-field__content-wrap"> <input class="es-input" name="email" id="email" type="email" placeholder='Your email, please' /> </div> </div> <div class="es-error es-field__es-error js-es-block-error" data-id="email" ></div> </div> </div><div class="es-field es-field--submit js-es-block-field" data-id="7f11776a" data-field-type='submit'> <div class="es-field__inner"> <div class="es-field__content"> <div class="es-field__content-wrap"> <button class="es-submit es-submit--default" ><span class="es-submit__inner"> Get Engineering Updates</span></button> </div> </div> </div> </div> </div> <div class="es-loader js-es-block-loader es-loader__form"> <svg xmlns='http://www.w3.org/2000/svg' width='44' height='44' viewBox='0 0 44 44'><g fill='none' fill-rule='evenodd' stroke-width='2'><circle cx='22' cy='22' r='1' stroke='var(--loader-color-1, currentColor)'><animate attributeName='r' begin='0s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='0s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle><circle cx='22' cy='22' r='1' stroke='var(--loader-color-2, currentColor)'><animate attributeName='r' begin='-0.9s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='-0.9s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle></g></svg></div></form><div class="es-loader js-es-block-loader es-loader__geolocation"> <svg xmlns='http://www.w3.org/2000/svg' width='44' height='44' viewBox='0 0 44 44'><g fill='none' fill-rule='evenodd' stroke-width='2'><circle cx='22' cy='22' r='1' stroke='var(--loader-color-1, currentColor)'><animate attributeName='r' begin='0s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='0s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle><circle cx='22' cy='22' r='1' stroke='var(--loader-color-2, currentColor)'><animate attributeName='r' begin='-0.9s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='-0.9s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle></g></svg></div></div> <style id='esFormsCssVariables'>.es-field[data-id='c1544f67']{--es-field-width: calc((12 / 12) * 100%);} .es-field[data-id='7f11776a']{--es-field-width: calc((12 / 12) * 100%);} </style> </div> <button class="hamburger js-hamburger" style="--hamburger-background: var(--global-colors-grey100); --hamburger-foreground: var(--global-colors-black);" > <div class="hamburger__icon-line hamburger__icon-line--1"></div> <div class="hamburger__icon-line hamburger__icon-line--2"></div> </button> <div class="block-navbar__flyout js-block-navbar-flyout"> <div class="block-navbar-left js-block-navbar-left"> <a class="block-navbar-item js-block-navbar-item" href="https://productive.io/engineering/"> <div class="block-navbar-item__link"> <span>Building Productive</span> </div> </a> <a class="block-navbar-item js-block-navbar-item" href="https://productive.io/about-us/"> <div class="block-navbar-item__link"> <span>Company</span> </div> </a> </div> <div class="block-navbar-cta js-navbar-cta"> <style id='esFormsCssVariables-global'>:root {--global-custom-blocks-name: eightshift-block;--global-es-max-cols: 12;--global-esf-spacing-xs: 0.25rem;--global-esf-spacing-s: 0.5rem;--global-esf-spacing-m: 1rem;--global-esf-spacing-l: 1.5rem;--global-esf-spacing-xl: 2rem;--global-esf-ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);--global-esf-box-shadow: 0 0 0.5rem rgb(0 0 0 / 0.04);--global-esf-box-shadow-l: 0 0 0.125rem rgb(0 0 0 / 0.16), 0 0 0.5rem rgb(0 0 0 / 0.16);--global-esf-max-width: 36rem;--global-esf-input-height: 2.625rem;--global-breakpoints-mobile: 480;--global-breakpoints-tablet: 960;--global-breakpoints-desktop: 1920;--global-breakpoints-large: 1921;--global-colors-esf-admin-accent: #29A3A3;--global-colors-esf-admin-accent-values: 41 163 163;--global-colors-esf-admin-accent-50: #29A3A380;--global-colors-esf-admin-accent-50-values: 0 0 0;--global-colors-esf-admin-accent-30: #29a3a333;--global-colors-esf-admin-accent-30-values: 0 0 0;--global-colors-esf-admin-accent-10: #29A3A31A;--global-colors-esf-admin-accent-10-values: 0 0 0;--global-colors-esf-admin-accent-05: #29A3A30D;--global-colors-esf-admin-accent-05-values: 0 0 0;--global-colors-esf-admin-accent-dark: #218282;--global-colors-esf-admin-accent-dark-values: 33 130 130;--global-colors-esf-border: #DEDEDE;--global-colors-esf-border-values: 222 222 222;--global-colors-esf-black: #181818;--global-colors-esf-black-values: 24 24 24;--global-colors-esf-white: #FFFFFF;--global-colors-esf-white-values: 255 255 255;--global-colors-esf-gray: #484848;--global-colors-esf-gray-values: 72 72 72;--global-colors-esf-yellow-50: #FFFBEB;--global-colors-esf-yellow-50-values: 255 251 235;--global-colors-esf-yellow-100: #FEF3C7;--global-colors-esf-yellow-100-values: 254 243 199;--global-colors-esf-yellow-200: #FDE68A;--global-colors-esf-yellow-200-values: 253 230 138;--global-colors-esf-yellow-500: #EAB308;--global-colors-esf-yellow-500-values: 234 179 8;--global-colors-esf-yellow-950: #451A03;--global-colors-esf-yellow-950-values: 69 26 3;--global-colors-esf-sky-50: #F0F9FF;--global-colors-esf-sky-50-values: 240 249 255;--global-colors-esf-sky-100: #E0F2FE;--global-colors-esf-sky-100-values: 224 242 254;--global-colors-esf-sky-200: #BAE6FD;--global-colors-esf-sky-200-values: 186 230 253;--global-colors-esf-sky-500: #0EA5E9;--global-colors-esf-sky-500-values: 14 165 233;--global-colors-esf-sky-950: #082F49;--global-colors-esf-sky-950-values: 8 47 73;--global-colors-esf-gray-50: #F9FAFB;--global-colors-esf-gray-50-values: 249 250 251;--global-colors-esf-gray-100: #F3F4F6;--global-colors-esf-gray-100-values: 243 244 246;--global-colors-esf-gray-200: #E5E7EB;--global-colors-esf-gray-200-values: 229 231 235;--global-colors-esf-gray-300: #D1D5DB;--global-colors-esf-gray-300-values: 209 213 219;--global-colors-esf-gray-400: #9CA3AF;--global-colors-esf-gray-400-values: 156 163 175;--global-colors-esf-gray-500: #6B7280;--global-colors-esf-gray-500-values: 107 114 128;--global-colors-esf-gray-600: #4B5563;--global-colors-esf-gray-600-values: 75 85 99;--global-colors-esf-gray-950: #030712;--global-colors-esf-gray-950-values: 3 7 18;--global-colors-esf-red-50: #FEF2F2;--global-colors-esf-red-50-values: 254 242 242;--global-colors-esf-red-100: #FEE2E2;--global-colors-esf-red-100-values: 254 226 226;--global-colors-esf-red-200: #FECACA;--global-colors-esf-red-200-values: 254 202 202;--global-colors-esf-red-500: #EF4444;--global-colors-esf-red-500-values: 239 68 68;--global-colors-esf-red-400: #F87171;--global-colors-esf-red-400-values: 248 113 113;--global-colors-esf-red-600: #DC2626;--global-colors-esf-red-600-values: 220 38 38;--global-colors-esf-red-800: #991B1B;--global-colors-esf-red-800-values: 153 27 27;--global-colors-esf-red-950: #450A0A;--global-colors-esf-red-950-values: 69 10 10;--global-colors-esf-green-50: #F0FDF4;--global-colors-esf-green-50-values: 240 253 244;--global-colors-esf-green-100: #DCFCE7;--global-colors-esf-green-100-values: 220 252 231;--global-colors-esf-green-200: #BBF7D0;--global-colors-esf-green-200-values: 187 247 208;--global-colors-esf-green-500: #22C55E;--global-colors-esf-green-500-values: 34 197 94;--global-colors-esf-green-950: #052E16;--global-colors-esf-green-950-values: 5 46 22;}</style> <div class="es-block-forms js-es-block-forms" > <form class="es-form js-es-block-form" data-phone-sync='1' data-form-id='17' data-post-id='893' data-form-type='hubspot' data-conditional-tags='[]' method='post' data-block-ssr='false' data-disabled-default-styles='false' novalidate onsubmit="event.preventDefault();" > <div class="es-global-msg js-es-block-global-msg" > </div> <div class="es-form__fields"> <div class="es-field es-field--input js-es-block-field" data-id="c1544f67" data-hubspot-type-id='0-1' data-field-name='email' data-field-type='input' data-type-custom='email' data-tracking='email'> <div class="es-field__inner"> <div class="es-field__content"> <div class="es-field__content-wrap"> <input class="es-input" name="email" id="email" type="email" placeholder='Your email, please' /> </div> </div> <div class="es-error es-field__es-error js-es-block-error" data-id="email" ></div> </div> </div><div class="es-field es-field--submit js-es-block-field" data-id="7f11776a" data-field-type='submit'> <div class="es-field__inner"> <div class="es-field__content"> <div class="es-field__content-wrap"> <button class="es-submit es-submit--default" ><span class="es-submit__inner"> Get Engineering Updates</span></button> </div> </div> </div> </div> </div> <div class="es-loader js-es-block-loader es-loader__form"> <svg xmlns='http://www.w3.org/2000/svg' width='44' height='44' viewBox='0 0 44 44'><g fill='none' fill-rule='evenodd' stroke-width='2'><circle cx='22' cy='22' r='1' stroke='var(--loader-color-1, currentColor)'><animate attributeName='r' begin='0s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='0s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle><circle cx='22' cy='22' r='1' stroke='var(--loader-color-2, currentColor)'><animate attributeName='r' begin='-0.9s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='-0.9s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle></g></svg></div></form><div class="es-loader js-es-block-loader es-loader__geolocation"> <svg xmlns='http://www.w3.org/2000/svg' width='44' height='44' viewBox='0 0 44 44'><g fill='none' fill-rule='evenodd' stroke-width='2'><circle cx='22' cy='22' r='1' stroke='var(--loader-color-1, currentColor)'><animate attributeName='r' begin='0s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='0s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle><circle cx='22' cy='22' r='1' stroke='var(--loader-color-2, currentColor)'><animate attributeName='r' begin='-0.9s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='-0.9s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle></g></svg></div></div> <style id='esFormsCssVariables'>.es-field[data-id='c1544f67']{--es-field-width: calc((12 / 12) * 100%);} .es-field[data-id='7f11776a']{--es-field-width: calc((12 / 12) * 100%);} </style> </div> </div> </nav><progress class="progress-bar js-progress-bar" max="100" value="0" > </progress><svg class="icon-defs" aria-hidden="true" viewBox="0 0 0 0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id='icon-business__b' x1='26.5' y1='12.5' x2='22.5' y2='16.5' gradientUnits='userSpaceOnUse'> <stop stop-color='#FFC837' /> <stop offset='1' stop-color='#F1B203' /> </linearGradient> <linearGradient id='icon-business__c' x1='9' y1='29.5' x2='24' y2='17' gradientUnits='userSpaceOnUse'> <stop stop-color='#F1B203' /> <stop offset='1' stop-color='#FFC837' /> </linearGradient> <clipPath id='icon-business__a'> <path fill='#fff' transform='translate(6 4)' d='M0 0h29.6v29.6H0z' /> </clipPath> <linearGradient id='icon-project-management__a' x1='22.175' y1='22.297' x2='28.276' y2='26.18' gradientUnits='userSpaceOnUse'> <stop stop-color='#0062BD' /> <stop offset='1' stop-color='#0699EC' /> </linearGradient> <linearGradient id='icon-project-management__b' x1='22.73' y1='18.97' x2='13.856' y2='27.289' gradientUnits='userSpaceOnUse'> <stop stop-color='#0062BD' /> <stop offset='1' stop-color='#0699EC' /> </linearGradient> <linearGradient id='icon-billing__a' x1='34.15' y1='1.797' x2='11.361' y2='29.92' gradientUnits='userSpaceOnUse'> <stop stop-color='#FF784B' /> <stop offset='1' stop-color='#ED5D2D' /> </linearGradient> <linearGradient id='icon-sales__b' x1='32' y1='26' x2='24.5' y2='33.5' gradientUnits='userSpaceOnUse'> <stop stop-color='#21D191' /> <stop offset='1' stop-color='#00AA6C' /> </linearGradient> <clipPath id='icon-sales__a'> <path fill='#fff' transform='translate(4 5)' d='M0 0h31.33v29.67H0z' /> </clipPath> <linearGradient id='icon-resource-planning__a' x1='20.5' y1='16' x2='35' y2='16' gradientUnits='userSpaceOnUse'> <stop stop-color='#E45353' /> <stop offset='1' stop-color='#F66' /> </linearGradient> <linearGradient id='icon-resource-planning__b' x1='21' y1='27' x2='31' y2='27' gradientUnits='userSpaceOnUse'> <stop stop-color='#E45353' /> <stop offset='1' stop-color='#F66' /> </linearGradient> <clipPath id="icon-youtube-play-button__clip-path"> <rect width="98" height="69" fill="white"/> </clipPath> <linearGradient id="reporting_icon_gradient_1" x1="33.4027" y1="19.7828" x2="5.59725" y2="19.7828" gradientUnits="userSpaceOnUse"> <stop stop-color="#CA6696"/> <stop offset="1" stop-color="#AC366F"/> </linearGradient> <linearGradient id="reporting_icon_gradient_2" x1="22.2805" y1="6.12167" x2="22.2805" y2="28.366" gradientUnits="userSpaceOnUse"> <stop stop-color="#CA6696"/> <stop offset="1" stop-color="#AC366F"/> </linearGradient> <clipPath id="reporting_icon_clip"> <rect width="27.8055" height="28.4345" fill="white" transform="translate(5.59726 5.56555)"/> </clipPath> <linearGradient id='c-billing-40-a' x1='34.15' y1='1.797' x2='11.361' y2='29.92' gradientUnits='userSpaceOnUse'><stop stop-color='#FF784B' fill='none'/><stop offset='1' stop-color='#ED5D2D' fill='none'/></linearGradient> <clipPath id='c-budgeting-40-a'><path fill='#fff' transform='translate(6 4)' d='M0 0h29.6v29.6H0z'/></clipPath> <linearGradient id='c-budgeting-40-b' x1='26.5' y1='12.5' x2='22.5' y2='16.5' gradientUnits='userSpaceOnUse'><stop stop-color='#FFC837'/><stop offset='1' stop-color='#F1B203'/></linearGradient> <linearGradient id='c-budgeting-40-c' x1='9' y1='29.5' x2='24' y2='17' gradientUnits='userSpaceOnUse'><stop stop-color='#F1B203'/><stop offset='1' stop-color='#FFC837'/></linearGradient> <clipPath id='c-crm-40-a'><path fill='#fff' transform='translate(4 5)' d='M0 0h31.33v29.67H0z'/></clipPath> <linearGradient id='c-crm-40-b' x1='32' y1='26' x2='24.5' y2='33.5' gradientUnits='userSpaceOnUse'><stop stop-color='#21D191'/><stop offset='1' stop-color='#00AA6C'/></linearGradient> <linearGradient id='c-project-management-40-a' x1='22.175' y1='22.298' x2='28.276' y2='26.18' gradientUnits='userSpaceOnUse'><stop stop-color='#0062BD'/><stop offset='1' stop-color='#0699EC'/></linearGradient> <linearGradient id='c-project-management-40-b' x1='22.73' y1='18.97' x2='13.856' y2='27.289' gradientUnits='userSpaceOnUse'><stop stop-color='#0062BD' fill='none'/><stop offset='1' stop-color='#0699EC' fill='none'/></linearGradient> <linearGradient id='c-resource-planning-40-a' x1='20.5' y1='16' x2='35' y2='16' gradientUnits='userSpaceOnUse'><stop stop-color='#E45353'/><stop offset='1' stop-color='#F66'/></linearGradient> <linearGradient id='c-resource-planning-40-b' x1='21' y1='27' x2='31' y2='27' gradientUnits='userSpaceOnUse'><stop stop-color='#E45353' fill='none'/><stop offset='1' stop-color='#F66' fill='none'/></linearGradient> <clipPath id='c-time-tracking-40-a'><path fill='#fff' transform='translate(9 5)' d='M0 0h22.49v29.4H0z'/></clipPath> <linearGradient id='c-time-tracking-40-b' x1='23.5' y1='21.5' x2='16' y2='8' gradientUnits='userSpaceOnUse'><stop stop-color='#42DAD1'/><stop offset='1' stop-color='#07B2A8'/></linearGradient> <clipPath id='c-reporting-40-a'><path fill='#fff' transform='translate(5.597 5.566)' d='M0 0h27.805v28.434H0z'/></clipPath> <linearGradient id='c-reporting-40-b' x1='33.403' y1='19.783' x2='5.597' y2='19.783' gradientUnits='userSpaceOnUse'><stop stop-color='#CA6696'/><stop offset='1' stop-color='#AC366F'/></linearGradient> <linearGradient id='c-reporting-40-c' x1='22.28' y1='6.122' x2='22.28' y2='28.366' gradientUnits='userSpaceOnUse'><stop stop-color='#CA6696'/><stop offset='1' stop-color='#AC366F'/></linearGradient> </defs> </svg> <main class="main-content"> <div class="wrapper" data-id="b2ca3a0f" > <div class="wrapper__inner"> <div class="block-group" data-id="6c420125"> <div class="wrapper wrapper--simple" data-id="dd8a96f6" > <div class="wrapper__skip-dom"> <div class="block-columns" data-id="60a012dc"> <div class="block-column" data-id="d90986b4"> <div class="wrapper wrapper--simple" data-id="586cffef" > <div class="wrapper__skip-dom"> <div class="block-post-meta js-block-post-meta" data-id="ab285587"> <p class="typography block-post-meta__category" data-id="90bdf3bf" > <a href='https://productive.io/engineering/category/engineering/'>Engineering</a></p> <span> &#8211; </span> <p class="typography block-post-meta__reading-time js-reading-time is-reading-time-hidden" data-id="a9cd65a3" > {{minutes}} min read</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="a7df7229" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="26fc9413"> <h1 class="typography block-heading__heading" data-id="71217fdb" > Integrations Series: Authentication And Connection</h1></div> </div> </div> </div> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="ec25bf14" > <div class="wrapper__skip-dom"> <div class="block-columns" data-id="b3de169c"> <div class="block-column" data-id="5da10ceb"> <div class="wrapper wrapper--simple" data-id="6bf2b5a1" > <div class="wrapper__skip-dom"> <div class="block-author-meta js-block-author-meta" data-id="428dcc72"> <a href="https://productive.io/engineering/author/antoniobajivic1/"> <div class="block-author-meta__image-wrapper"> <picture class="image block-author-meta__image-picture" data-id="1779233b" > <img src="https://website-assets.productive.io/uploads/2024/02/1672844976889.webp" class="image image__img block-author-meta__image-img" alt="" /> </picture> </div> </a> <div class="block-author-meta__content-wrapper"> <a href="https://productive.io/engineering/author/antoniobajivic1/"> <p class="typography block-author-meta__author" data-id="ccd98c8d" > Antonio Bajivić</p></a> <div class="typography block-author-meta__info" data-id="2f58b29d" > Working in web development and having fun with electronics brings me joy. In my free time, I mix working out, socializing, and reading.</div><p class="typography block-author-meta__date" data-id="e8fd88af" > February 20, 2024</p> </div> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="338f1bad" > <div class="wrapper__skip-dom"> <div class="block-share-icons" data-id="903e7cca"> </div> </div> </div> </div> <div class="block-column" data-id="4de629db"> <div class="wrapper wrapper--simple" data-id="372e24bf" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="7cb4996a" > <picture class="image media__image-picture" data-id="d5aabd95" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" media="(max-width: 2159px)" /> <img fetchpriority="high" src="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="d5dfe288" > <div class="wrapper__skip-dom"> <div class="block-columns" data-id="7ab47b76"> <div class="block-column" data-id="bf57ebbc"> </div> <div class="block-column" data-id="70827fc5"> <div class="wrapper wrapper--simple" data-id="abc75739" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="a0fe7761" > <p class="typography block-paragraph__paragraph" data-id="da7578c1" > Integrations are a big part of any software, but <strong>they’re crucial to the functionality of a tool like Productive.</strong></p></div> </div> </div> </div> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="95452cb1" > <div class="wrapper__skip-dom"> <div class="block-columns" data-id="6bbaaa12"> <div class="block-column" data-id="5691a199"> </div> <div class="block-column" data-id="e0b80bae"> <div class="wrapper wrapper--simple" data-id="b5a3ab1f" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="88acdecd" > <p class="typography block-paragraph__paragraph" data-id="be8aeaf8" > That’s why we decided to dedicate a post series to discussing the importance of integrations in Productive. From enhancing functionality by connecting different tools to streamlining processes and improving user experience, integrations make life easier. We’ll showcase one of our most-used integrations, the one between Productive and Xero, which allows users to seamlessly transfer invoices and synchronize payments between the two tools.<br><br>Your agency uses Productive for managing client projects and project financials. At month&#8217;s end, you face the daunting task of issuing and sending invoices upon invoices, then replicating the process in Xero. Afterward, you also have to individually mark each payment as received.<br><br>And this is where the power of integrations kicks in. With one simple integration, invoices are synced between Xero and Productive, and any payment received in Xero is automatically recorded in Productive.<br><br>The integration between Productive and Xero looks interesting, right?<br><br>But before actually using the integration, we need to set it up first, and that&#8217;s the main focus of this blog post! We&#8217;re exploring the implementation of the OAuth 2.0 protocol.<br><br>Let&#8217;s dive right in!</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="aae51d75" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="f523fe32"> <h2 class="typography block-heading__heading" data-id="e16ca637" > <strong>First, How Do You Connect Xero and Productive?</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="a87b6300" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="fa400c5a" > <p class="typography block-paragraph__paragraph" data-id="19388225" > OAuth 2.0 (Open Authorization 2.0) is an authentication protocol that is considered an industry standard.<br><br>Utilizing the OAuth protocol, Productive is granted access to the Xero account without accessing the user&#8217;s credentials.<br><br>Key features of the OAuth 2.0 protocol:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="9dd6d581" > <div class="wrapper__skip-dom"> <div class="list block-list__list list__list--bullet" data-id="c2d078c7"> <ul class="typography list__list-element" data-id="62bf4875" > <li>Granular access control</li><li>Authentication without sharing credentials</li><li>Token-based authentication (access_token &amp; refresh_token)</li></ul></div> </div> </div> <div class="wrapper wrapper--simple" data-id="942f8ddc" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="7044e48e" > <picture class="image media__image-picture" data-id="f9418c11" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-pt1.-png.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-pt1.-png.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-pt1.-png.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-pt1.-png.webp" class="image image__img media__image-img" alt="" /> </picture> </div> <p class="typography media__caption" data-id="f72eee6f" > <br>OAuth2 flow</p> </div> </div> <div class="wrapper wrapper--simple" data-id="893d5d9a" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="3cb08c8e" > <p class="typography block-paragraph__paragraph" data-id="421bc173" > In the following steps, the authentication process is explained:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="51dfb30d" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="84746dbc" > <p class="typography block-paragraph__paragraph" data-id="e638f129" > 1. The user authorizes Productive, granting access to their own data on the Xero platform:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="d31c4668" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="047903c1" > <picture class="image media__image-picture" data-id="49259dca" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap7.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap7.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap7.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap7.webp" class="image image__img media__image-img" alt="" /> </picture> </div> <p class="typography media__caption" data-id="3f49fcbf" > <br></p> </div> </div> <div class="wrapper wrapper--simple" data-id="0867d2c3" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="e2f413b0" > <p class="typography block-paragraph__paragraph" data-id="a600caae" > 2. After successful authentication, the user is redirected back to the <code>redirect_uri</code> defined in the previous step with two values added as query params:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="a9c25214" > <div class="wrapper__skip-dom"> <div class="list block-list__list list__list--bullet" data-id="16b68816"> <ul class="typography list__list-element" data-id="6233a21d" > <li><code>code</code> → short-lived token that needs to be exchanged for <code>access_token</code></li><li><code>state</code> → serves as protection against Cross-Site Request Forgery (CSRF) attacks: if the received state attribute value does not match the value submitted in the previous step, the authentication process is terminated</li></ul></div> </div> </div> <div class="wrapper wrapper--simple" data-id="d9041cc0" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="d30c38f8" > <p class="typography block-paragraph__paragraph" data-id="d1f71c80" > Ensuring the redirection of users back to the Productive app is a crucial aspect of the OAuth flow due to the sensitivity of the information contained in the <code>redirect_uri</code>.<br>To ensure the user&#8217;s redirection to the correct location, we have securely stored the redirect URI within the Xero app.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="abd8e7cb" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="285f2cc5" > <p class="typography block-paragraph__paragraph" data-id="59a646b9" > 3. Exchanging the verification code (<code>code</code>) for an access token (<code>access_token</code>):</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="bfb582ee" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="181df877" > <picture class="image media__image-picture" data-id="d3d23440" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap6.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap6.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap6.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap6.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="2715833c" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="c8df5653" > <p class="typography block-paragraph__paragraph" data-id="32f1e569" > 4. Retrieving the generated tokens:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="4ad0052b" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="e9875a43" > <picture class="image media__image-picture" data-id="87ad3e82" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap5.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap5.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap5.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap5.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="b666fcb5" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="bd014161" > <p class="typography block-paragraph__paragraph" data-id="288f0d6f" > <code>access_token</code> is used to call the Xero API, while the <code>refresh_token</code> is used to refresh the access token once it has expired.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="03e53d14" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="84d13f64" > <p class="typography block-paragraph__paragraph" data-id="93d4373b" > 5. Retrieving and selecting the tenant whose resources are being accessed:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="84b71b40" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="a77bc339" > <p class="typography block-paragraph__paragraph" data-id="432dd829" > Each user can have multiple Xero organizations (referred to as tenants).<br>Xero requires that the <code>xero_tenant_id</code> field is sent as a header param in every HTTP request.<br><br>The following code snippet shows the retrieval of all available tenants, from which the user later selects a tenant for current integration in the Marketplace settings:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="e441df10" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="fdda4a5c" > <picture class="image media__image-picture" data-id="c9238855" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap4.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap4.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap4.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap4.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="268975ee" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="89b17f3e"> <h2 class="typography block-heading__heading" data-id="6ed69e04" > <strong>Now, Let’s Create an Integration</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="0f794794" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="3b78550e" > <p class="typography block-paragraph__paragraph" data-id="cecca95b" > In Productive, as well as in many other applications, there is a list of applications called the <em>marketplace</em>. In the marketplace, customers choose the integration they want to use. When the integration is selected, the connection process begins by clicking the &#8220;Connect app&#8221; button. The connection flow will be demonstrated using the example of Xero.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="346f9fff" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="731c7a0f" > <picture class="image media__image-picture" data-id="aca4af3a" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-part1.-png.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-part1.-png.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-part1.-png.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/integrations-part1.-png.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="7d202b68" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="b8765c07"> <h3 class="typography block-heading__heading" data-id="24baf63e" > <strong>1. Creating and Connecting An Integration</strong></h3></div> </div> </div> <div class="wrapper wrapper--simple" data-id="6de7f34f" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="e215396e" > <p class="typography block-paragraph__paragraph" data-id="eb27fdae" > When establishing an integration, it’s generated in the system. However, to ensure its successful creation, it must align with the authentication requirements on the backend. All integrations require a redirect URI. This URI is used to redirect to Productive after connecting the integration to adjust the settings of each integration. After generating the URI, the integration creation process begins.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="a3ac18d9" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="6c91cb66" > <picture class="image media__image-picture" data-id="ffe2cc23" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap3.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap3.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap3.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap3.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="8e8f3c6c" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="4b3444d3" > <p class="typography block-paragraph__paragraph" data-id="86f2ba42" > If the organization has branches or subsidiaries, you&#8217;ll first need to select the subsidiary (branch) for which you want to use Xero.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="bce9b1e3" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="d0de137e" > <picture class="image media__image-picture" data-id="8d84b46b" > <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/attachments_files_003_513_372_original_image.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="1e4f0142" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="1908714a" > <p class="typography block-paragraph__paragraph" data-id="c1bdc84b" > When creating an integration on the backend, authentication verification is performed, and if all requirements are met, the integration process begins.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="0d0f6c73" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="9a7079be" > <picture class="image media__image-picture" data-id="83e597d0" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap2.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap2.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap2.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap2.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="bf919ac8" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="dccf03ef" > <p class="typography block-paragraph__paragraph" data-id="a16889cf" > During the integration connection, the customer is directed to the interface of the system they want to integrate with, where they also need to provide information to verify if the user is existing and valid. Once completed, the process returns to the marketplace via the redirect URI, initiating the setup of the integration.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="e4028f56" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="a191c8bd"> <h2 class="typography block-heading__heading" data-id="bc75287d" > <strong>2. Redirect</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="227ce1fd" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="842d42e7" > <p class="typography block-paragraph__paragraph" data-id="d6497357" > After the customer is redirected to Productive, the data obtained from the external tool is set on the integration model. For example, Xero requires that there is always a code and org representing the code and organization to which the integration connects and exports data in Xero.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="b767c316" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="9c1791b7" > <picture class="image media__image-picture" data-id="7cf75f4e" > <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap1.webp" media="(max-width: 479px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap1.webp" media="(max-width: 1279px)" /> <source srcset="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap1.webp" media="(max-width: 2159px)" /> <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Snap1.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="0c9018ab" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="99510d45" > <p class="typography block-paragraph__paragraph" data-id="c21efd10" > Once the integration model has been updated, a call to the backend occurs again to update the integration with new data.<br><br>After updating the model, if there are no errors, we set the parameters of the model to transition to the integration setup route, i.e., editing the integration settings.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="91f953a7" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="74fbb05b"> <h2 class="typography block-heading__heading" data-id="ed9fabfe" > <strong>Conclusion</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="652bb525" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="1a9d6a9a" > <p class="typography block-paragraph__paragraph" data-id="8b7b1f0b" > With successful authentication and integration connection, we’re finishing the first part of the integration posts series. As described in this blog post, understanding OAuth 2.0 becomes not just a necessity but a powerful tool to enhance user experience, safeguard sensitive information, and foster a more trustworthy digital ecosystem. After successful authentication, due to settings related to the external system redirect, in this case, Xero, it brings us back to Productive to continue with further integration setup.<br><br>In our next post, we&#8217;ll break down data mapping and show you why it&#8217;s a must-know for smooth integrations. Don&#8217;t miss out!</p></div> </div> </div> </div> </div> </div> </div> <div class="wrapper" data-id="7c1c2b08" > <div class="wrapper__inner"> <div class="block-share-icons" data-id="37375c1c"> <a aria-hidden="false" class="icon icon__link block-share-icons__icon" data-id="6a5bbcb9" href=https://www.facebook.com/sharer.php?u=https://productive.io/engineering/integrations-series-authentication-and-connection target=_blank rel="noopener noreferrer" > <div class="icon__backplate" > <i class="block-share-icons__icon-elem" data-name="facebook-24"> <svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='m22 11.9941c0-5.52239-4.4776-9.99996-10-9.99996-5.52243 0-10 4.47757-10 9.99996 0 4.9909 3.65631 9.1282 8.4376 9.8791v-6.9878h-2.5397v-2.8913h2.5397v-2.20359c0-2.50597 1.4935-3.89115 3.7773-3.89115 1.0941 0 2.2388.19547 2.2388.19547v2.46098h-1.2615c-1.2417 0-1.6298.77063-1.6298 1.56239v1.8759h2.7731l-.4429 2.8913h-2.3302v6.9878c4.7813-.7495 8.4376-4.8868 8.4376-9.8791z' fill='currentColor'/></svg> </i> </div> </a><a aria-hidden="false" class="icon icon__link block-share-icons__icon" data-id="3373bbe2" href=https://twitter.com/intent/tweet?text=Integrations%20Series%3A%20Authentication%20And%20Connection&amp;url=https://productive.io/engineering/integrations-series-authentication-and-connection target=_blank rel="noopener noreferrer" > <div class="icon__backplate" > <i class="block-share-icons__icon-elem" data-name="twitter-24"> <svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='m22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05-.79-.86-1.9-1.36-3.16-1.36-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98-3.55996-.18-6.72996-1.89-8.83996-4.48-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21-.36.1-.74.15-1.13.15-.27 0-.54-.03-.8-.08.54 1.69 2.11 2.95 4 2.98-1.46 1.16-3.31 1.84-5.33 1.84-.34 0-.68-.02-1.02-.06 1.9 1.22 4.16 1.93 6.58 1.93 7.87996 0 12.20996-6.54 12.20996-12.21 0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z' fill='currentColor'/></svg> </i> </div> </a><a aria-hidden="false" class="icon icon__link block-share-icons__icon" data-id="057d63e5" href=https://www.linkedin.com/shareArticle?mini=true&amp;url=https://productive.io/engineering/integrations-series-authentication-and-connection target=_blank rel="noopener noreferrer" > <div class="icon__backplate" > <i class="block-share-icons__icon-elem" data-name="linkedin-24"> <svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m21 5c0-1.10457-.8954-2-2-2h-14c-1.10457 0-2 .89543-2 2v14c0 1.1046.89543 2 2 2h14c1.1046 0 2-.8954 2-2zm-2.5 8.2v5.3h-2.79v-4.93c0-.7732-.6268-1.4-1.4-1.4-.77 0-1.39.63-1.39 1.4v4.93h-2.79v-8.37h2.79v1.11c.48-.78 1.47-1.3 2.32-1.3 1.8004 0 3.26 1.4596 3.26 3.26zm-11.62-4.64c.92784 0 1.68-.75216 1.68-1.68 0-.93-.75-1.69-1.68-1.69-.93336 0-1.69.75664-1.69 1.69 0 .93.76 1.68 1.69 1.68zm1.39 1.57v8.37h-2.77v-8.37z' fill='currentColor' fill-rule='evenodd'/></svg> </i> </div> </a></div> </div> </div> <div class="wrapper" data-id="52ab13c2" > <div class="wrapper__inner"> <div class="block-author-meta-position js-block-author-meta-position" data-id="1700651e"> <div class="block-author-meta-position__wrapper"> <div class="block-author-meta-position__image-wrapper"> <picture class="image block-author-meta-position__image-picture" data-id="122e0788" > <img src="https://website-assets.productive.io/uploads/2024/02/1672844976889.webp" class="image image__img block-author-meta-position__image-img" alt="" /> </picture> </div> <div class="block-author-meta-position__content-wrapper"> <p class="typography block-author-meta-position__author" data-id="200e5c68" > Antonio Bajivić</p><div class="typography block-author-meta-position__info" data-id="9ef8516c" > Working in web development and having fun with electronics brings me joy. In my free time, I mix working out, socializing, and reading.</div><a href="https://productive.io/engineering/author/antoniobajivic1/" class="btn btn__as-link btn__type--primary block-author-meta-position__button" id="" aria-label="" data-id="24975c81" > More From This Author<div aria-hidden="true" class="icon btn__icon" data-id="f0f84aaf" > <i class="btn__icon-elem" data-name="arrow-right-16"> <svg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'><path fill='none' d='M0 8h14M8.678 13.36L14 8 8.678 2.64' stroke='currentColor' stroke-width='2'/></svg> </i> </div> </a> </div> </div> <div class="block-author-meta-position__inner-blocks"> </div> </div> </div> </div> <div class="wrapper" data-id="bb8368c8" > <div class="wrapper__inner"> <div class="block-heading" data-id="19a94038"> <h2 class="typography block-heading__heading" data-id="5b5b7a74" > Related articles</h2></div> </div> </div> <div class="wrapper" data-id="2b681ba8" > <div class="wrapper__inner"> <div class="post-listing js-post-listing block-post-listing post-listing--related-posts js-post-listing" data-blog-slug="/engineering/" data-id=17d16d57 data-per-page=2 data-display-as=card data-show-featured-img=true data-show-read-btn=false data-show-excerpt=false data-show-category=true data-read-btn-text=Read&nbsp;article data-block-class=post-listing data-nonce=ccbf010ca8 data-page=1 data-skip=0 data-categories=7 data-exclude=893 data-card-caption-color=green500 data-card-heading-color=black data-card-heading-highlight-color=black data-card-heading-font-size=24-bold data-card-paragraph-color=black data-card-paragraph-font-size=18-regular data-card-image-left=false > <div class="post-listing__posts js-post-listing-posts"> <a href="https://productive.io/engineering/custom-fields-give-your-customers-the-fields-they-need/" class="card-simple post-listing__card-simple" data-id="3dd7abbd" > <picture class="image card-simple__image-picture" data-id="4ae209fc" > <img src="https://website-assets.productive.io/uploads/sites/2/2022/11/Asset_11-768x322.webp" class="image image__img card-simple__image-img" alt="" /> </picture><p class="typography card-simple__intro" data-id="40b502b4" > Backend • Engineering</p><h2 class="typography card-simple__heading" data-id="dc554b79" > Custom Fields: Give Your Customers the Fields They Need</h2> </a><a href="https://productive.io/engineering/learning-ember-easier-way/" class="card-simple post-listing__card-simple" data-id="ebbfdbf7" > <picture class="image card-simple__image-picture" data-id="55cbaf3f" > <img src="https://website-assets.productive.io/uploads/sites/2/2022/11/BP_ember-768x322.webp" class="image image__img card-simple__image-img" alt="" /> </picture><p class="typography card-simple__intro" data-id="09502abe" > Engineering • Frontend</p><h2 class="typography card-simple__heading" data-id="1b0a5519" > Learning Ember: The Easier Way</h2> </a> </div> <div class="post-listing__loader js-post-listing-loader"> <div class="loader"> <svg xmlns='http://www.w3.org/2000/svg' width='44' height='44' viewBox='0 0 44 44'><g fill='none' fill-rule='evenodd' stroke-width='2'><circle cx='22' cy='22' r='1' stroke='var(--loader-color-1, currentColor)'><animate attributeName='r' begin='0s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='0s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle><circle cx='22' cy='22' r='1' stroke='var(--loader-color-2, currentColor)'><animate attributeName='r' begin='-0.9s' dur='1.8s' values='1; 20' calcMode='spline' keyTimes='0; 1' keySplines='0.165, 0.84, 0.44, 1' repeatCount='indefinite'/><animate attributeName='stroke-opacity' begin='-0.9s' dur='1.8s' values='1; 0' calcMode='spline' keyTimes='0; 1' keySplines='0.3, 0.61, 0.355, 1' repeatCount='indefinite'/></circle></g></svg></div> </div> </div> </div> </div> <div class="wrapper" data-id="2d44edb5" > <div class="wrapper__inner"> <div class="block-heading" data-id="acf7d142"> <h2 class="typography block-heading__heading" data-id="49790c7b" > Related jobs</h2></div> </div> </div> <div class="wrapper" data-id="b32d9a8f" > <div class="wrapper__inner"> <div class="block-job-listing job-listing"> <div> <a href="https://productive.io/careers/open-job-application/" class="job-card" data-id="8e2cda63"> <div class="job-card__col job-card__col--left"> <p class="typography job-card__heading" data-id="6b2b3ce9"> Open Job Application</p><p class="typography job-card__paragraph" data-id="93d64d6e"> </p> </div> <div class="job-card__col job-card__col--right"> <button class="chevron job-card__chevron" aria-label="" data-id="77199a05"> <div aria-hidden="true" class="icon chevron__icon" data-id="9f2bd0d6"> <i class="chevron__icon-elem" data-name="chevron-right-16"> <svg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M6 2.64L11.322 8 6 13.36' fill='none' stroke='currentColor' stroke-width='2' /></svg> </i> </div> </button> </div> </a> </div> </div> </div> </div> </main> <footer > <div class="layout footer-partial"> <div class="layout__main footer-partial__main"> <div class="layout__main-inner footer-partial__main-inner"> <div class="block-footer-minimal"> <a href="https://productive.io"> <div class="block-footer-minimal__logo"> <picture class="image block-footer-minimal__logo-picture" data-id="9ad4bc43" > <img src="https://productive.io/engineering/wp-content/uploads/sites/2/2022/11/logo-white.svg" class="image image__img block-footer-minimal__logo-img" alt="" /> </picture> </div> </a> <div class="block-footer-minimal__social"> <a aria-hidden="false" class="icon icon__link block-footer-minimal__icon" data-id="bd706f68" href=https://www.facebook.com/productiveio/ target=_blank rel="noopener noreferrer" > <div class="icon__backplate" > <i class="block-footer-minimal__icon-elem" data-name="facebook-24"> <svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='m22 11.9941c0-5.52239-4.4776-9.99996-10-9.99996-5.52243 0-10 4.47757-10 9.99996 0 4.9909 3.65631 9.1282 8.4376 9.8791v-6.9878h-2.5397v-2.8913h2.5397v-2.20359c0-2.50597 1.4935-3.89115 3.7773-3.89115 1.0941 0 2.2388.19547 2.2388.19547v2.46098h-1.2615c-1.2417 0-1.6298.77063-1.6298 1.56239v1.8759h2.7731l-.4429 2.8913h-2.3302v6.9878c4.7813-.7495 8.4376-4.8868 8.4376-9.8791z' fill='currentColor'/></svg> </i> </div> </a><a aria-hidden="false" class="icon icon__link block-footer-minimal__icon" data-id="06772722" href=https://www.linkedin.com/company/productive-io/ target=_blank rel="noopener noreferrer" > <div class="icon__backplate" > <i class="block-footer-minimal__icon-elem" data-name="linkedin-24"> <svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m21 5c0-1.10457-.8954-2-2-2h-14c-1.10457 0-2 .89543-2 2v14c0 1.1046.89543 2 2 2h14c1.1046 0 2-.8954 2-2zm-2.5 8.2v5.3h-2.79v-4.93c0-.7732-.6268-1.4-1.4-1.4-.77 0-1.39.63-1.39 1.4v4.93h-2.79v-8.37h2.79v1.11c.48-.78 1.47-1.3 2.32-1.3 1.8004 0 3.26 1.4596 3.26 3.26zm-11.62-4.64c.92784 0 1.68-.75216 1.68-1.68 0-.93-.75-1.69-1.68-1.69-.93336 0-1.69.75664-1.69 1.69 0 .93.76 1.68 1.69 1.68zm1.39 1.57v8.37h-2.77v-8.37z' fill='currentColor' fill-rule='evenodd'/></svg> </i> </div> </a><a aria-hidden="false" class="icon icon__link block-footer-minimal__icon" data-id="79dc4aee" href=https://www.instagram.com/productive.io/ target=_blank rel="noopener noreferrer" > <div class="icon__backplate" > <i class="block-footer-minimal__icon-elem" data-name="instagram-24"> <svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m7.8 2h8.4c3.2 0 5.8 2.6 5.8 5.8v8.4c0 3.2033-2.5967 5.8-5.8 5.8h-8.4c-3.2 0-5.8-2.6-5.8-5.8v-8.4c0-3.20325 2.59675-5.8 5.8-5.8zm-.2 2c-1.98823 0-3.6 1.61177-3.6 3.6v8.8c0 1.99 1.61 3.6 3.6 3.6h8.8c1.9882 0 3.6-1.6118 3.6-3.6v-8.8c0-1.99-1.61-3.6-3.6-3.6zm10.9 2.75c0-.69036-.5596-1.25-1.25-1.25s-1.25.55964-1.25 1.25.5596 1.25 1.25 1.25 1.25-.55964 1.25-1.25zm-6.5.25c2.7614 0 5 2.23858 5 5 0 2.7614-2.2386 5-5 5-2.76142 0-5-2.2386-5-5 0-2.76142 2.23858-5 5-5zm-3 5c0-1.6569 1.3431-3 3-3s3 1.3431 3 3-1.3431 3-3 3-3-1.3431-3-3z' fill='currentColor' fill-rule='evenodd'/></svg> </i> </div> </a><a aria-hidden="false" class="icon icon__link block-footer-minimal__icon" data-id="bd347076" href=https://twitter.com/productiveio target=_blank rel="noopener noreferrer" > <div class="icon__backplate" > <i class="block-footer-minimal__icon-elem" data-name="twitter-24"> <svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='m22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05-.79-.86-1.9-1.36-3.16-1.36-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98-3.55996-.18-6.72996-1.89-8.83996-4.48-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21-.36.1-.74.15-1.13.15-.27 0-.54-.03-.8-.08.54 1.69 2.11 2.95 4 2.98-1.46 1.16-3.31 1.84-5.33 1.84-.34 0-.68-.02-1.02-.06 1.9 1.22 4.16 1.93 6.58 1.93 7.87996 0 12.20996-6.54 12.20996-12.21 0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z' fill='currentColor'/></svg> </i> </div> </a> </div> </div> </div> </div> </div><div class="gdpr-modal__backdrop js-gdpr-modal-backdrop"></div> <div class="gdpr-modal js-gdpr-modal" data-modal="gdpr"> <div class="gdpr-modal__container"> <div class="gdpr-modal__content gdpr-modal__content--advance js-gdpr-modal-screen-advance"> <div class="gdpr-modal__header"> <p class="typography gdpr-modal__heading gdpr-modal__title" data-id="04934953" > We need your consent to continue</p> <i class="gdpr-modal__close js-gdpr-modal-hide-advance"></i> </div> <div class="gdpr-modal__body"> <div class="gdpr-modal__level"> <div class="gdpr-modal__level-content"> <h3 class="typography gdpr-modal__heading gdpr-modal__selection-item-title" data-id="41b594d7" > Necessary cookies</h3><p class="typography gdpr-modal__paragraph gdpr-modal__selection-item-summary" data-id="549c378a" > Cookies for the basic functionality of the Productive website.</p> </div> <div class="gdpr-modal__toggle"> <p class="typography gdpr-modal__paragraph" data-id="a324d9af" > Always on</p> </div> </div> <div class="gdpr-modal__level"> <div class="gdpr-modal__level-content"> <h3 class="typography gdpr-modal__heading gdpr-modal__selection-item-title" data-id="eaebbf87" > Functional cookies</h3><p class="typography gdpr-modal__paragraph gdpr-modal__selection-item-summary" data-id="10999c5f" > Cookies for additional functionality and increased website security.</p> </div> <div class="gdpr-modal__toggle"> <div class="toggle gdpr-modal__toggle js-gdpr-modal-toggle" data-id="4aa038b4"> <label class="toggle__label"> <input name="" class="toggle__checkbox js-gdpr-modal-toggle-input js-gdpr-modal-toggle-input-functional" value="functional" type="checkbox" data-level=1 /> <span class="toggle__background"></span> <span class="toggle__toggle-circle"></span> <span class="toggle__hidden-label"></span> </label> </div> </div> </div> <div class="gdpr-modal__level"> <div class="gdpr-modal__level-content"> <h3 class="typography gdpr-modal__heading gdpr-modal__selection-item-title" data-id="a53a437c" > Targeting cookies</h3><p class="typography gdpr-modal__paragraph gdpr-modal__selection-item-summary" data-id="5c88e603" > Advertising and analytics service cookies that create day-to-day statistics and show ads on their site and on the advertiser’s partners websites.</p> </div> <div class="gdpr-modal__toggle"> <div class="toggle gdpr-modal__toggle js-gdpr-modal-toggle" data-id="9e7f6c5e"> <label class="toggle__label"> <input name="" class="toggle__checkbox js-gdpr-modal-toggle-input js-gdpr-modal-toggle-input-marketing" value="marketing" type="checkbox" data-level=2 /> <span class="toggle__background"></span> <span class="toggle__toggle-circle"></span> <span class="toggle__hidden-label"></span> </label> </div> </div> </div> </div> <div class="gdpr-modal__description"> <div class="gdpr-modal__btn-container"> <button name="" class="btn btn__type--primary gdpr-modal__btn js-gdpr-modal__btn-advance js-gdpr-modal-btn js-gdpr-modal-btn-advance" id="" aria-label="" data-id="383de60d" data-level=2 > <p class="typography btn__label js-button-label" data-id="db383237" > Save changes</p> </button> </div> <div class="gdpr-modal__btn-container"> <button name="" class="btn btn__as-link btn__type--primary gdpr-modal__btn" id="" aria-label="" data-id="24b0af8b" target=_blank rel="noopener noreferrer" > <p class="typography btn__label js-button-label" data-id="1ff2ea2c" > Privacy Policy</p> </button> </div> </div> </div> <div class="gdpr-modal__content gdpr-modal__content--basic js-gdpr-modal-screen-basic"> <span class="gdpr-modal__intro"> <p class="typography gdpr-modal__paragraph gdpr-modal__selection-item-summary" data-id="af01ece1" > <a href="#" class="gdpr-modal__more-link js-gdpr-modal-show-advance"><strong>Manage cookies</strong></a> and help us deliver our services. By using our services, you agree to our use of cookies.</p> </span> <button name="" class="btn btn__type--primary gdpr-modal__btn js-gdpr-modal-btn" id="" aria-label="" data-id="1180d4d6" data-level=2 > <p class="typography btn__label js-button-label" data-id="84ccc5d0" > I agree</p> </button> </div> </div> </div><style id='esCssVariables'> .block-post-meta[data-id='ab285587']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .typography[data-id='90bdf3bf']{ --typography-color: var(--typography-color-override, var(--global-colors-green300)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-sm-font-size: 0.6875; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; --typography-font-weight: bold; } .typography[data-id='a9cd65a3']{ --typography-color: var(--typography-color-override, var(--global-colors-grey300)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-sm-font-size: 0.6875; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; --typography-font-weight: bold; } .wrapper[data-id='586cffef']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='26fc9413']{ --heading-align: left; } .typography[data-id='71217fdb']{ --typography-color: var(--typography-color-override, var(--global-colors-white)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-font-family: var(--global-font-family); --typography-letter-spacing: -3px; --es-ft-sm-font-size: 3; --es-ft-md-font-size: 4.375; --es-ft-lg-font-size: 5.625; --typography-line-height: 1.07; --typography-font-weight: bold; } .wrapper[data-id='a7df7229']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='d90986b4']{ --column-background-color: var(--global-colors-unset); --column-border-color-mobile: var(--global-colors-indigo); --column-border-color-desktop: var(--global-colors-indigo); } .block-column[data-id='d90986b4']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .block-columns[data-id='60a012dc']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='dd8a96f6']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-author-meta[data-id='428dcc72']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .image[data-id='1779233b']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .typography[data-id='ccd98c8d']{ --typography-color: var(--typography-color-override, var(--global-colors-green300)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-sm-font-size: 0.6875; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; --typography-font-weight: bold; } .typography[data-id='2f58b29d']{ --typography-color: var(--typography-color-override, var(--global-colors-white)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.875; --es-ft-md-font-size: 1; --es-ft-lg-font-size: 1.25; --typography-line-height: 1.5; } .typography[data-id='e8fd88af']{ --typography-color: var(--typography-color-override, var(--global-colors-green300)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.75; --es-ft-md-font-size: 0.875; --es-ft-lg-font-size: 1.0625; --typography-letter-spacing: 0.2px; --typography-line-height: 1.43; } .wrapper[data-id='6bf2b5a1']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-share-icons[data-id='903e7cca']{ --share-icons-align: flex-start; } .wrapper[data-id='338f1bad']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='5da10ceb']{ --column-background-color: var(--global-colors-unset); --column-border-color-mobile: var(--global-colors-indigo); --column-border-color-desktop: var(--global-colors-indigo); } .block-column[data-id='5da10ceb']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .media[data-id='7cb4996a']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(10 / 10) * 2rem)); } .image[data-id='d5aabd95']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='372e24bf']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='4de629db']{ --column-background-color: var(--global-colors-unset); --column-border-color-mobile: var(--global-colors-indigo); --column-border-color-desktop: var(--global-colors-indigo); } .block-column[data-id='4de629db']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .block-columns[data-id='b3de169c']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='ec25bf14']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-group[data-id='6c420125']{ --group-border-radius: 0; } .wrapper[data-id='b2ca3a0f']{ --wrapper-z-index: 1; --wrapper-bg-color-solid: #1b0066; --wrapper-display-type: grid; } .block-column[data-id='bf57ebbc']{ --column-background-color: var(--global-colors-unset); --column-border-color-mobile: var(--global-colors-indigo); --column-border-color-desktop: var(--global-colors-indigo); } .block-column[data-id='bf57ebbc']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .block-paragraph[data-id='a0fe7761']{ --paragraph-align: left; } .typography[data-id='da7578c1']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; } .wrapper[data-id='abc75739']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='70827fc5']{ --column-background-color: var(--global-colors-unset); --column-border-color-mobile: var(--global-colors-indigo); --column-border-color-desktop: var(--global-colors-indigo); } .block-column[data-id='70827fc5']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .block-columns[data-id='7ab47b76']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='d5dfe288']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='5691a199']{ --column-background-color: var(--global-colors-unset); --column-border-color-mobile: var(--global-colors-indigo); --column-border-color-desktop: var(--global-colors-indigo); } .block-column[data-id='5691a199']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .block-paragraph[data-id='88acdecd']{ --paragraph-align: left; } .typography[data-id='be8aeaf8']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='b5a3ab1f']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='f523fe32']{ --heading-align: left; } .typography[data-id='e16ca637']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; } .wrapper[data-id='aae51d75']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='fa400c5a']{ --paragraph-align: left; } .typography[data-id='19388225']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='a87b6300']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .list[data-id='c2d078c7']{ --list-icon-type: ''; --list-icon-position-transform: none; --list-icon-color: var(--global-colors-black); --list-item-margin-bottom: 1.5rem; --es-ft-list-sm-font-size: 1.125; --es-ft-list-md-font-size: 1.25; --es-ft-list-lg-font-size: 1.625; --list-icon-position-top-checkmark: 0; } .typography[data-id='62bf4875']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='9dd6d581']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='7044e48e']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='f9418c11']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; --image-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1); } .typography[data-id='f72eee6f']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; } .wrapper[data-id='942f8ddc']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='3cb08c8e']{ --paragraph-align: left; } .typography[data-id='421bc173']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='893d5d9a']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='84746dbc']{ --paragraph-align: left; } .typography[data-id='e638f129']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='51dfb30d']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='047903c1']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='49259dca']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .typography[data-id='3f49fcbf']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; } .wrapper[data-id='d31c4668']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='e2f413b0']{ --paragraph-align: left; } .typography[data-id='a600caae']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='0867d2c3']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .list[data-id='16b68816']{ --list-icon-type: ''; --list-icon-position-transform: none; --list-icon-color: var(--global-colors-black); --list-item-margin-bottom: 1.5rem; --es-ft-list-sm-font-size: 1.125; --es-ft-list-md-font-size: 1.25; --es-ft-list-lg-font-size: 1.625; --list-icon-position-top-checkmark: 0; } .typography[data-id='6233a21d']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='a9c25214']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='d30c38f8']{ --paragraph-align: left; } .typography[data-id='d1f71c80']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='d9041cc0']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='285f2cc5']{ --paragraph-align: left; } .typography[data-id='59a646b9']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='abd8e7cb']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='181df877']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='d3d23440']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='bfb582ee']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='c8df5653']{ --paragraph-align: left; } .typography[data-id='32f1e569']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='2715833c']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='e9875a43']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='87ad3e82']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='4ad0052b']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='bd014161']{ --paragraph-align: left; } .typography[data-id='288f0d6f']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='b666fcb5']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='84d13f64']{ --paragraph-align: left; } .typography[data-id='93d4373b']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='03e53d14']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='a77bc339']{ --paragraph-align: left; } .typography[data-id='432dd829']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-indigo); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='84b71b40']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='fdda4a5c']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='c9238855']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='e441df10']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='89b17f3e']{ --heading-align: left; } .typography[data-id='6ed69e04']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; } .wrapper[data-id='268975ee']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='3b78550e']{ --paragraph-align: left; } .typography[data-id='cecca95b']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='0f794794']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='731c7a0f']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='aca4af3a']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; --image-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1); } .wrapper[data-id='346f9fff']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='b8765c07']{ --heading-align: left; } .typography[data-id='24baf63e']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.25; --es-ft-md-font-size: 1.5; --es-ft-lg-font-size: 1.875; --typography-letter-spacing: -0.5px; --typography-line-height: 1.33; } .wrapper[data-id='7d202b68']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='e215396e']{ --paragraph-align: left; } .typography[data-id='eb27fdae']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='6de7f34f']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='6c91cb66']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='ffe2cc23']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='a3ac18d9']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='4b3444d3']{ --paragraph-align: left; } .typography[data-id='86f2ba42']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='8e8f3c6c']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='d0de137e']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='8d84b46b']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; --image-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1); } .wrapper[data-id='bce9b1e3']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='1908714a']{ --paragraph-align: left; } .typography[data-id='c1bdc84b']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='1e4f0142']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='9a7079be']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='83e597d0']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='0d0f6c73']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='dccf03ef']{ --paragraph-align: left; } .typography[data-id='a16889cf']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='bf919ac8']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='a191c8bd']{ --heading-align: left; } .typography[data-id='bc75287d']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.25; --es-ft-md-font-size: 1.5; --es-ft-lg-font-size: 1.875; --typography-letter-spacing: -0.5px; --typography-line-height: 1.33; } .wrapper[data-id='e4028f56']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='842d42e7']{ --paragraph-align: left; } .typography[data-id='d6497357']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-indigo); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='227ce1fd']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='9c1791b7']{ --media-align-horizontal: center; --media-align-vertical: center; --media-object-position: center center; --media-rounded-corners: calc(var(--base-font-size) * (calc(0 / 10) * 2rem)); } .image[data-id='7cf75f4e']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='b767c316']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='99510d45']{ --paragraph-align: left; } .typography[data-id='c21efd10']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-indigo); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='0c9018ab']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='74fbb05b']{ --heading-align: left; } .typography[data-id='ed9fabfe']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; } .wrapper[data-id='91f953a7']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='1a9d6a9a']{ --paragraph-align: left; } .typography[data-id='8b7b1f0b']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-indigo); --es-ft-sm-font-size: 1.125; --es-ft-md-font-size: 1.25; --es-ft-lg-font-size: 1.625; --typography-line-height: 1.4; } .wrapper[data-id='652bb525']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='e0b80bae']{ --column-background-color: var(--global-colors-unset); --column-border-color-mobile: var(--global-colors-indigo); --column-border-color-desktop: var(--global-colors-indigo); } .block-column[data-id='e0b80bae']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .block-columns[data-id='6bbaaa12']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='95452cb1']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-share-icons[data-id='37375c1c']{ --share-icons-align: flex-end; } .icon[data-id='6a5bbcb9']{ --icon-backplate-color: var(--global-colors-black); --icon-color: var(--global-colors-black); --icon-on-backplate-color: var(--global-colors-white); --icon-size: calc(var(--base-font-size) * 4rem); } .icon[data-id='3373bbe2']{ --icon-backplate-color: var(--global-colors-black); --icon-color: var(--global-colors-black); --icon-on-backplate-color: var(--global-colors-white); --icon-size: calc(var(--base-font-size) * 4rem); } .icon[data-id='057d63e5']{ --icon-backplate-color: var(--global-colors-black); --icon-color: var(--global-colors-black); --icon-on-backplate-color: var(--global-colors-white); --icon-size: calc(var(--base-font-size) * 4rem); } .wrapper[data-id='7c1c2b08']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .block-author-meta-position[data-id='1700651e']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .image[data-id='122e0788']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .typography[data-id='200e5c68']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1.25; --es-ft-md-font-size: 1.5; --es-ft-lg-font-size: 1.875; --typography-letter-spacing: -0.5px; --typography-line-height: 1.33; --typography-font-weight: bold; } .typography[data-id='9ef8516c']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.875; --es-ft-md-font-size: 1; --es-ft-lg-font-size: 1.25; --typography-line-height: 1.5; } .btn[data-id='24975c81']{ --button-color: var(--global-colors-white); --button-color-hover: var(--global-colors-white); --button-secondary-color: var(--global-colors-indigo); --button-secondary-color-hover: var(--global-colors-white); --button-border-color: var(--global-colors-indigo); --button-background-color: var(--global-colors-indigo); --button-background-color-hover: var(--global-gradients-gradient-1); --button-color-is-link: var(--global-colors-indigo); --button-color-is-link-hover: var(--global-colors-black); --button-border-radius: 1.875rem; --button-padding-vertical: 0.812rem; --button-padding-horizontal: 1.5rem; --button-display: inline-flex; --button-width: auto; --button-border-radius: 0; --button-background-color: transparent; --button-background-color-hover: transparent; --button-padding-vertical: 0; --button-padding-horizontal: 0; --button-color: var(--button-color-is-link); --button-color-hover: var(--button-color-is-link-hover); --button-display: inline; --button-flex-direction: row; } .icon[data-id='f0f84aaf']{ --icon-size: calc(var(--base-font-size) * 1.6rem); } .block-author-meta-position[data-id='1700651e']{ --wrapper-spacing-top: initial;; --wrapper-spacing-bottom: initial;; --wrapper-spacing-top-in: initial;; --wrapper-spacing-bottom-in: initial;; --wrapper-divider-top: initial; --wrapper-divider-bottom: initial;; --wrapper-display: initial;; --wrapper-is-full-width: initial;; --wrapper-grid-template-columns: initial;; --wrapper-display-type: initial; } .wrapper[data-id='52ab13c2']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .block-heading[data-id='19a94038']{ --heading-align: left; } .typography[data-id='5b5b7a74']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; --typography-font-weight: bold; } .wrapper[data-id='bb8368c8']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .card-simple[data-id='3dd7abbd']{ --card-text-align: left; --card-content-align: flex-start; --card-media-align: flex-start; --card-intro-margin-top: 0; --card-intro-margin-bottom: 0.781rem; --card-template-rows: repeat(7, max-content); --card-template-cols: 1fr; --card-template-areas: 'a' 'b' 'c' 'd' 'e' 'f' 'g'; --card-forced-background-color: var(--global-colors-initial); --card-forced-border-radius: initial; } .image[data-id='4ae209fc']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 1.25rem; } .typography[data-id='40b502b4']{ --typography-color: var(--typography-color-override, var(--global-colors-green500)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-sm-font-size: 0.6875; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; --typography-font-weight: bold; } .typography[data-id='dc554b79']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.25; --es-ft-md-font-size: 1.5; --es-ft-lg-font-size: 1.875; --typography-letter-spacing: -0.5px; --typography-line-height: 1.33; --typography-font-weight: bold; } .card-simple[data-id='ebbfdbf7']{ --card-text-align: left; --card-content-align: flex-start; --card-media-align: flex-start; --card-intro-margin-top: 0; --card-intro-margin-bottom: 0.781rem; --card-template-rows: repeat(7, max-content); --card-template-cols: 1fr; --card-template-areas: 'a' 'b' 'c' 'd' 'e' 'f' 'g'; --card-forced-background-color: var(--global-colors-initial); --card-forced-border-radius: initial; } .image[data-id='55cbaf3f']{ --image-width: 100%; --image-img-width: 100%; --image-height: 100%; --image-img-height: 100%; --image-img-max-width: 100%; --image-img-max-height: 100%; --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 1.25rem; } .typography[data-id='09502abe']{ --typography-color: var(--typography-color-override, var(--global-colors-green500)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-sm-font-size: 0.6875; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; --typography-font-weight: bold; } .typography[data-id='1b0a5519']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-highlight-color: var(--global-colors-black); --es-ft-sm-font-size: 1.25; --es-ft-md-font-size: 1.5; --es-ft-lg-font-size: 1.875; --typography-letter-spacing: -0.5px; --typography-line-height: 1.33; --typography-font-weight: bold; } .post-listing[data-id='17d16d57']{ --post-listing-title-max-lines: 2; --post-listing-excerpt-max-lines: 4; --post-listing-column-template: repeat(2, 1fr); --post-listing-columns-mobile: 2; } .wrapper[data-id='2b681ba8']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .block-heading[data-id='acf7d142']{ --heading-align: left; } .typography[data-id='49790c7b']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; --typography-font-weight: bold; } .wrapper[data-id='2d44edb5']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .typography[data-id='6b2b3ce9']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; --typography-font-weight: bold; } .typography[data-id='93d64d6e']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.75; --es-ft-md-font-size: 0.875; --es-ft-lg-font-size: 1.0625; --typography-letter-spacing: 0.2px; --typography-line-height: 1.43; } .chevron[data-id='77199a05']{ --chevron-color: var(--global-colors-black); --chevron-background-color: var(--global-colors-white); --chevron-background-color-inverse: var(--global-colors-grey100); } .chevron[data-id='77199a05']{ --chevron-size: 2.5rem } .icon[data-id='9f2bd0d6']{ --icon-size: calc(var(--base-font-size) * 1.6rem); } .wrapper[data-id='b32d9a8f']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .image[data-id='9ad4bc43']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .icon[data-id='bd706f68']{ --icon-backplate-color: var(--global-colors-indigo); --icon-color: var(--global-colors-indigo); --icon-on-backplate-color: var(--global-colors-white); --icon-size: calc(var(--base-font-size) * 4rem); } .icon[data-id='06772722']{ --icon-backplate-color: var(--global-colors-indigo); --icon-color: var(--global-colors-indigo); --icon-on-backplate-color: var(--global-colors-white); --icon-size: calc(var(--base-font-size) * 4rem); } .icon[data-id='79dc4aee']{ --icon-backplate-color: var(--global-colors-indigo); --icon-color: var(--global-colors-indigo); --icon-on-backplate-color: var(--global-colors-white); --icon-size: calc(var(--base-font-size) * 4rem); } .icon[data-id='bd347076']{ --icon-backplate-color: var(--global-colors-indigo); --icon-color: var(--global-colors-indigo); --icon-on-backplate-color: var(--global-colors-white); --icon-size: calc(var(--base-font-size) * 4rem); } .typography[data-id='04934953']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-letter-spacing: -1px; --es-ft-sm-font-size: 1.5; --es-ft-md-font-size: 2.25; --es-ft-lg-font-size: 3; --typography-line-height: 1.167; --typography-font-weight: bold; } .typography[data-id='41b594d7']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1; --es-ft-md-font-size: 1.125; --es-ft-lg-font-size: 1.4375; --typography-line-height: 1.44; --typography-font-weight: bold; } .typography[data-id='549c378a']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.75; --es-ft-md-font-size: 0.875; --es-ft-lg-font-size: 1.0625; --typography-letter-spacing: 0.2px; --typography-line-height: 1.43; } .typography[data-id='a324d9af']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --typography-uppercase: uppercase; --typography-letter-spacing: 0.4px; --es-ft-md-font-size: 0.75; --es-ft-lg-font-size: 0.875; --typography-line-height: 1.33; } .typography[data-id='eaebbf87']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1; --es-ft-md-font-size: 1.125; --es-ft-lg-font-size: 1.4375; --typography-line-height: 1.44; --typography-font-weight: bold; } .typography[data-id='10999c5f']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.75; --es-ft-md-font-size: 0.875; --es-ft-lg-font-size: 1.0625; --typography-letter-spacing: 0.2px; --typography-line-height: 1.43; } .toggle[data-id='4aa038b4']{ --toggle-color: var(--global-colors-indigo); } .typography[data-id='a53a437c']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 1; --es-ft-md-font-size: 1.125; --es-ft-lg-font-size: 1.4375; --typography-line-height: 1.44; --typography-font-weight: bold; } .typography[data-id='5c88e603']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.75; --es-ft-md-font-size: 0.875; --es-ft-lg-font-size: 1.0625; --typography-letter-spacing: 0.2px; --typography-line-height: 1.43; } .toggle[data-id='9e7f6c5e']{ --toggle-color: var(--global-colors-indigo); } .btn[data-id='383de60d']{ --button-color: var(--global-colors-white); --button-color-hover: var(--global-colors-white); --button-secondary-color: var(--global-colors-indigo); --button-secondary-color-hover: var(--global-colors-white); --button-border-color: var(--global-colors-indigo); --button-background-color: var(--global-colors-indigo); --button-background-color-hover: var(--global-gradients-gradient-1); --button-color-is-link: var(--global-colors-indigo); --button-color-is-link-hover: var(--global-colors-black); --button-border-radius: 1.875rem; --button-padding-vertical: 0.812rem; --button-padding-horizontal: 1.5rem; --button-display: inline-flex; --button-width: auto; --button-flex-direction: row; } .typography[data-id='db383237']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.875; --es-ft-md-font-size: 1; --es-ft-lg-font-size: 1.25; --typography-line-height: 1.5; } .btn[data-id='24b0af8b']{ --button-color: var(--global-colors-white); --button-color-hover: var(--global-colors-white); --button-secondary-color: var(--global-colors-indigo); --button-secondary-color-hover: var(--global-colors-white); --button-border-color: var(--global-colors-indigo); --button-background-color: var(--global-colors-indigo); --button-background-color-hover: var(--global-gradients-gradient-1); --button-color-is-link: var(--global-colors-indigo); --button-color-is-link-hover: var(--global-colors-black); --button-border-radius: 1.875rem; --button-padding-vertical: 0.812rem; --button-padding-horizontal: 1.5rem; --button-display: inline-flex; --button-width: auto; --button-border-radius: 0; --button-background-color: transparent; --button-background-color-hover: transparent; --button-padding-vertical: 0; --button-padding-horizontal: 0; --button-color: var(--button-color-is-link); --button-color-hover: var(--button-color-is-link-hover); --button-display: inline; --button-flex-direction: row; } .typography[data-id='1ff2ea2c']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.875; --es-ft-md-font-size: 1; --es-ft-lg-font-size: 1.25; --typography-line-height: 1.5; } .typography[data-id='af01ece1']{ --typography-color: var(--typography-color-override, var(--global-colors-black)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.75; --es-ft-md-font-size: 0.875; --es-ft-lg-font-size: 1.0625; --typography-letter-spacing: 0.2px; --typography-line-height: 1.43; } .btn[data-id='1180d4d6']{ --button-color: var(--global-colors-white); --button-color-hover: var(--global-colors-white); --button-secondary-color: var(--global-colors-indigo); --button-secondary-color-hover: var(--global-colors-white); --button-border-color: var(--global-colors-indigo); --button-background-color: var(--global-colors-indigo); --button-background-color-hover: var(--global-gradients-gradient-1); --button-color-is-link: var(--global-colors-indigo); --button-color-is-link-hover: var(--global-colors-black); --button-border-radius: 1.875rem; --button-padding-vertical: 0.812rem; --button-padding-horizontal: 1.5rem; --button-display: inline-flex; --button-width: auto; --button-flex-direction: row; } .typography[data-id='84ccc5d0']{ --typography-color: var(--typography-color-override, var(--global-colors-white)); --typography-link-color: var(--typography-link-color-override, var(--global-colors-indigo)); --es-ft-sm-font-size: 0.875; --es-ft-md-font-size: 1; --es-ft-lg-font-size: 1.25; --typography-line-height: 1.5; } @media (min-width:1279px){ .list[data-id='c2d078c7']{ --list-icon-position-top-checkmark: 0.12em; } .list[data-id='16b68816']{ --list-icon-position-top-checkmark: 0.12em; } } @media (min-width:2159px){ .list[data-id='c2d078c7']{ --list-icon-position-top-checkmark: 0; } .list[data-id='16b68816']{ --list-icon-position-top-checkmark: 0; } } .wrapper[data-id='586cffef']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: 1; --wrapper-spacing-bottom: 1; --wrapper-spacing-top-in: 1; --wrapper-spacing-bottom-in: 26; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='a7df7229']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .block-column[data-id='d90986b4']{ --column-width: 9; --column-hide: flex; --column-position: unset; --column-space-between: unset; --column-horizontal-padding: 0rem; } .block-columns[data-id='60a012dc']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='dd8a96f6']{ --wrapper-width: 14; --wrapper-offset: 1; --wrapper-spacing-top: 0; --wrapper-spacing-bottom: 0; --wrapper-spacing-top-in: 0; --wrapper-spacing-bottom-in: 0; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='6bf2b5a1']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: 1; --wrapper-spacing-bottom: 1; --wrapper-spacing-top-in: 1; --wrapper-spacing-bottom-in: 8; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='338f1bad']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .block-column[data-id='5da10ceb']{ --column-width: 3; --column-offset: 1; --column-vertical-align: flex-end; --column-hide: flex; --column-position: unset; --column-space-between: unset; --column-horizontal-padding: 0rem; } .wrapper[data-id='372e24bf']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .block-column[data-id='4de629db']{ --column-width: 11; --column-offset: 4; --column-hide: flex; --column-position: unset; --column-space-between: unset; --column-horizontal-padding: 0rem; } .block-columns[data-id='b3de169c']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='ec25bf14']{ --wrapper-width: 14; --wrapper-offset: 1; --wrapper-spacing-top: 0; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='b2ca3a0f']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: 100; --wrapper-spacing-top-in: 64; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 0; --wrapper-grid-template-columns: repeat(var(--global-main-content-width), minmax(0, 1fr)); --wrapper-rounded-corners: 0; } .block-column[data-id='bf57ebbc']{ --column-width: 3; --column-offset: 2; --column-hide: flex; --column-position: unset; --column-space-between: unset; --column-horizontal-padding: 0rem; } .wrapper[data-id='abc75739']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .block-column[data-id='70827fc5']{ --column-width: 8; --column-hide: flex; --column-position: unset; --column-space-between: unset; --column-horizontal-padding: 0rem; } .block-columns[data-id='7ab47b76']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='d5dfe288']{ --wrapper-width: 14; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .block-column[data-id='5691a199']{ --column-width: 3; --column-offset: 2; --column-hide: flex; --column-position: sticky; --column-top-offset: calc(var(--header-height) + 1.25rem); --column-vertical-align: start; --column-space-between: unset; --column-horizontal-padding: 0rem; } .wrapper[data-id='b5a3ab1f']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='aae51d75']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='a87b6300']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='9dd6d581']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='942f8ddc']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='893d5d9a']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='51dfb30d']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='d31c4668']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='0867d2c3']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='a9c25214']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='d9041cc0']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='abd8e7cb']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='bfb582ee']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='2715833c']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='4ad0052b']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='b666fcb5']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='03e53d14']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='84b71b40']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='e441df10']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='268975ee']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='0f794794']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='346f9fff']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='7d202b68']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='6de7f34f']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='a3ac18d9']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='8e8f3c6c']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='bce9b1e3']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='1e4f0142']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='0d0f6c73']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='bf919ac8']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='e4028f56']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='227ce1fd']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='b767c316']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='0c9018ab']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='91f953a7']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='652bb525']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .block-column[data-id='e0b80bae']{ --column-width: 8; --column-hide: flex; --column-position: unset; --column-space-between: unset; --column-horizontal-padding: 0rem; } .block-columns[data-id='6bbaaa12']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='95452cb1']{ --wrapper-width: 14; --wrapper-offset: 1; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 1; --wrapper-grid-template-columns: var(--wrapper-grid-side-columns) repeat(var(--global-main-content-width), minmax(0, 1fr)) var(--wrapper-grid-side-columns); --wrapper-rounded-corners: 0; } .wrapper[data-id='7c1c2b08']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 0; --wrapper-grid-template-columns: repeat(var(--global-main-content-width), minmax(0, 1fr)); --wrapper-rounded-corners: 0; } .wrapper[data-id='52ab13c2']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top: 1; --wrapper-spacing-bottom: 1; --wrapper-spacing-top-in: 1; --wrapper-spacing-bottom-in: 140; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 0; --wrapper-grid-template-columns: repeat(var(--global-main-content-width), minmax(0, 1fr)); --wrapper-rounded-corners: 0; } .wrapper[data-id='bb8368c8']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 0; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 0; --wrapper-grid-template-columns: repeat(var(--global-main-content-width), minmax(0, 1fr)); --wrapper-rounded-corners: 0; } .card-simple[data-id='3dd7abbd']{ --card-content-inset: calc(var(--base-font-size) * 0rem); --card-media-inset: calc(var(--base-font-size) * 0rem); --card-media-inset: var(--card-content-inset); --card-media-inset: calc(var(--base-font-size) * 0rem); --card-content-inset: calc(var(--base-font-size) * 0rem); --card-media-inset: var(--card-content-inset); } .card-simple[data-id='ebbfdbf7']{ --card-content-inset: calc(var(--base-font-size) * 0rem); --card-media-inset: calc(var(--base-font-size) * 0rem); --card-media-inset: var(--card-content-inset); --card-media-inset: calc(var(--base-font-size) * 0rem); --card-content-inset: calc(var(--base-font-size) * 0rem); --card-media-inset: var(--card-content-inset); } .wrapper[data-id='2b681ba8']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; --wrapper-spacing-bottom-in: 160; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 0; --wrapper-grid-template-columns: repeat(var(--global-main-content-width), minmax(0, 1fr)); --wrapper-rounded-corners: 0; } .wrapper[data-id='2d44edb5']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 0; --wrapper-spacing-bottom-in: 20; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 0; --wrapper-grid-template-columns: repeat(var(--global-main-content-width), minmax(0, 1fr)); --wrapper-rounded-corners: 0; } .wrapper[data-id='b32d9a8f']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; --wrapper-spacing-bottom-in: 160; --wrapper-divider-top: 0; --wrapper-divider-bottom: 0; --wrapper-display: var(--wrapper-display-type, grid); --wrapper-is-full-width: 0; --wrapper-grid-template-columns: repeat(var(--global-main-content-width), minmax(0, 1fr)); --wrapper-rounded-corners: 0; } @media (max-width:2159px){ .block-column[data-id='d90986b4']{ --column-horizontal-padding: 0rem; } .block-column[data-id='5da10ceb']{ --column-horizontal-padding: 0rem; } .block-column[data-id='4de629db']{ --column-horizontal-padding: 0rem; } .block-column[data-id='bf57ebbc']{ --column-horizontal-padding: 0rem; } .block-column[data-id='70827fc5']{ --column-horizontal-padding: 0rem; } .block-column[data-id='5691a199']{ --column-position: sticky; --column-top-offset: calc(var(--header-height) + 1.25rem); --column-vertical-align: start; --column-horizontal-padding: 0rem; } .block-column[data-id='e0b80bae']{ --column-horizontal-padding: 0rem; } } @media (max-width:1279px){ .wrapper[data-id='586cffef']{ --wrapper-spacing-bottom-in: 16; } .block-column[data-id='d90986b4']{ --column-width: 14; --column-offset: 1; --column-horizontal-padding: 0rem; } .wrapper[data-id='6bf2b5a1']{ --wrapper-spacing-bottom-in: 4; } .block-column[data-id='5da10ceb']{ --column-width: 14; --column-offset: 1; --column-horizontal-padding: 0rem; } .block-column[data-id='4de629db']{ --column-width: 14; --column-offset: 1; --column-horizontal-padding: 0rem; } .block-column[data-id='bf57ebbc']{ --column-width: 12; --column-offset: 2; --column-order: 2; --column-hide: none; --column-horizontal-padding: 0rem; } .block-column[data-id='70827fc5']{ --column-width: 12; --column-offset: 2; --column-order: 1; --column-horizontal-padding: 0rem; } .block-column[data-id='5691a199']{ --column-width: 12; --column-offset: 2; --column-position: unset; --column-horizontal-padding: 0rem; } .wrapper[data-id='b5a3ab1f']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='a87b6300']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='893d5d9a']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='51dfb30d']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0867d2c3']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='d9041cc0']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='abd8e7cb']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='2715833c']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='b666fcb5']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='03e53d14']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='84b71b40']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0f794794']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='6de7f34f']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='8e8f3c6c']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='1e4f0142']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bf919ac8']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='227ce1fd']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0c9018ab']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='652bb525']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='e0b80bae']{ --column-width: 12; --column-offset: 2; --column-horizontal-padding: 0rem; } .wrapper[data-id='7c1c2b08']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='52ab13c2']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-bottom-in: 70; } .wrapper[data-id='bb8368c8']{ --wrapper-spacing-top-in: 0; } .wrapper[data-id='2b681ba8']{ --wrapper-spacing-top-in: 4; --wrapper-spacing-bottom-in: 40; } .wrapper[data-id='2d44edb5']{ --wrapper-spacing-top-in: 0; } .wrapper[data-id='b32d9a8f']{ --wrapper-spacing-top-in: 4; --wrapper-spacing-bottom-in: 40; } } @media (max-width:479px){ .wrapper[data-id='586cffef']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='a7df7229']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='d90986b4']{ --column-horizontal-padding: 0rem; } .wrapper[data-id='dd8a96f6']{ --wrapper-offset: 1; } .wrapper[data-id='6bf2b5a1']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='338f1bad']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='5da10ceb']{ --column-horizontal-padding: 0rem; } .wrapper[data-id='372e24bf']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='4de629db']{ --column-horizontal-padding: 0rem; } .wrapper[data-id='ec25bf14']{ --wrapper-offset: 1; } .wrapper[data-id='b2ca3a0f']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='bf57ebbc']{ --column-hide: none; --column-horizontal-padding: 0rem; } .wrapper[data-id='abc75739']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='70827fc5']{ --column-horizontal-padding: 0rem; } .wrapper[data-id='d5dfe288']{ --wrapper-offset: 1; } .block-column[data-id='5691a199']{ --column-position: unset; --column-horizontal-padding: 0rem; } .wrapper[data-id='b5a3ab1f']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='aae51d75']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='a87b6300']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='9dd6d581']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='942f8ddc']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='893d5d9a']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='51dfb30d']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='d31c4668']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0867d2c3']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='a9c25214']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='d9041cc0']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='abd8e7cb']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bfb582ee']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='2715833c']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='4ad0052b']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='b666fcb5']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='03e53d14']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='84b71b40']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='e441df10']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='268975ee']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0f794794']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='346f9fff']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='7d202b68']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='6de7f34f']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='a3ac18d9']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='8e8f3c6c']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bce9b1e3']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='1e4f0142']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0d0f6c73']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bf919ac8']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='e4028f56']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='227ce1fd']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='b767c316']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0c9018ab']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='91f953a7']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='652bb525']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='e0b80bae']{ --column-horizontal-padding: 0rem; } .wrapper[data-id='95452cb1']{ --wrapper-offset: 1; } .wrapper[data-id='7c1c2b08']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='52ab13c2']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bb8368c8']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='2b681ba8']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='2d44edb5']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='b32d9a8f']{ --wrapper-width: 12; --wrapper-offset: 1; } } :root {--es-loaded-opacity: 1;}</style><script src="https://js.chilipiper.com/marketing.js?ver=1.0.0" id="chili-piper-js"></script> <script id="rocket-browser-checker-js-after"> "use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); </script> <script id="rocket-preload-links-js-extra"> var RocketPreloadLinksConfig = {"excludeUris":"\/(?:.+\/)?feed(?:\/(?:.+\/?)?)?$|\/(?:.+\/)?embed\/|\/(index.php\/)?(.*)wp-json(\/.*|$)|\/refer\/|\/go\/|\/recommend\/|\/recommends\/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https:\/\/productive.io\/engineering","onHoverDelay":"100","rateThrottle":"3"}; </script> <script id="rocket-preload-links-js-after"> (function() { "use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}();function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=function(){function n(e,t){i(this,n),this.browser=e,this.config=t,this.options=this.browser.options,this.prefetched=new Set,this.eventTime=null,this.threshold=1111,this.numOnHover=0}return e(n,[{key:"init",value:function(){!this.browser.supportsLinkPrefetch()||this.browser.isDataSaverModeOn()||this.browser.isSlowConnection()||(this.regex={excludeUris:RegExp(this.config.excludeUris,"i"),images:RegExp(".("+this.config.imageExt+")$","i"),fileExt:RegExp(".("+this.config.fileExt+")$","i")},this._initListeners(this))}},{key:"_initListeners",value:function(e){-1<this.config.onHoverDelay&&document.addEventListener("mouseover",e.listener.bind(e),e.listenerOptions),document.addEventListener("mousedown",e.listener.bind(e),e.listenerOptions),document.addEventListener("touchstart",e.listener.bind(e),e.listenerOptions)}},{key:"listener",value:function(e){var t=e.target.closest("a"),n=this._prepareUrl(t);if(null!==n)switch(e.type){case"mousedown":case"touchstart":this._addPrefetchLink(n);break;case"mouseover":this._earlyPrefetch(t,n,"mouseout")}}},{key:"_earlyPrefetch",value:function(t,e,n){var i=this,r=setTimeout(function(){if(r=null,0===i.numOnHover)setTimeout(function(){return i.numOnHover=0},1e3);else if(i.numOnHover>i.config.rateThrottle)return;i.numOnHover++,i._addPrefetchLink(e)},this.config.onHoverDelay);t.addEventListener(n,function e(){t.removeEventListener(n,e,{passive:!0}),null!==r&&(clearTimeout(r),r=null)},{passive:!0})}},{key:"_addPrefetchLink",value:function(i){return this.prefetched.add(i.href),new Promise(function(e,t){var n=document.createElement("link");n.rel="prefetch",n.href=i.href,n.onload=e,n.onerror=t,document.head.appendChild(n)}).catch(function(){})}},{key:"_prepareUrl",value:function(e){if(null===e||"object"!==(void 0===e?"undefined":r(e))||!1 in e||-1===["http:","https:"].indexOf(e.protocol))return null;var t=e.href.substring(0,this.config.siteUrl.length),n=this._getPathname(e.href,t),i={original:e.href,protocol:e.protocol,origin:t,pathname:n,href:t+n};return this._isLinkOk(i)?i:null}},{key:"_getPathname",value:function(e,t){var n=t?e.substring(this.config.siteUrl.length):e;return n.startsWith("/")||(n="/"+n),this._shouldAddTrailingSlash(n)?n+"/":n}},{key:"_shouldAddTrailingSlash",value:function(e){return this.config.usesTrailingSlash&&!e.endsWith("/")&&!this.regex.fileExt.test(e)}},{key:"_isLinkOk",value:function(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&&(!this.prefetched.has(e.href)&&e.origin===this.config.siteUrl&&-1===e.href.indexOf("?")&&-1===e.href.indexOf("#")&&!this.regex.excludeUris.test(e.href)&&!this.regex.images.test(e.href))}}],[{key:"run",value:function(){"undefined"!=typeof RocketPreloadLinksConfig&&new n(new RocketBrowserCompatibilityChecker({capture:!0,passive:!0}),RocketPreloadLinksConfig).init()}}]),n}();t.run(); }()); </script> <script id="Productive-block-frontend-scripts-js-extra"> var productiveBlocks = {"initialCookieLevelBasic":"2","initialCookieLevelAdvanced":"2"}; var registrationEndpoints = {"thankYouPagePath":"","registrationEndpointPagePath":""}; var bookADemoValues = {"Tier1CompanyValues":[],"Tier1RedirectUrl":"","Tier2CompanyValues":[],"Tier2RedirectUrl":"","Tier3CompanyValues":[],"Tier3RedirectUrl":"","Tier4CompanyValues":[],"Tier4RedirectUrl":"","Tier5CompanyValues":[],"Tier5RedirectUrl":"","Tier6CompanyValues":[],"Tier6RedirectUrl":""}; </script> <script src="https://productive.io/engineering/wp-content/themes/productive/public/applicationBlocksFrontend-85e98d0d0effad085c84.js?ver=20250213134939.13309144674" id="Productive-block-frontend-scripts-js"></script> <script id="eightshift-forms-block-frontend-scripts-js-before"> const esFormsLocalization = {"restRoutes":{"prefix":"https:\/\/productive.io\/engineering\/wp-json\/eightshift-forms\/v1","prefixProject":"eightshift-forms\/v1","prefixSubmit":"submit","prefixTestApi":"test-api","files":"files","captcha":"captcha","geolocation":"geolocation","validationStep":"validate-step"},"hideGlobalMessageTimeout":6000,"redirectionTimeout":300,"fileRemoveLabel":"<div \n\taria-hidden=\"true\"\n\tclass=\"icon\"\n\tdata-id=\"2dd49ee3\"\n\t>\n\t\t\t<i class=\"\" data-name=\"remove-attachment-24\">\n\t\t\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path fill-rule='evenodd' clip-rule='evenodd' d='M12 1C5.925 1 1 5.925 1 12s4.925 11 11 11 11-4.925 11-11S18.075 1 12 1zM3 12a9 9 0 1 1 18 0 9 9 0 0 1-18 0zm5 1h8v-2H8v2z' fill='currentColor'\/><\/svg>\t\t<\/i>\n\t<\/div>","formDisableScrollToFieldOnError":false,"formDisableScrollToGlobalMessageOnSuccess":false,"formDisableAutoInit":false,"formResetOnSuccess":true,"formServerErrorMsg":"A server error occurred while submitting your form. Please try again.","formCaptchaErrorMsg":"A ReCaptcha error has occured. Please try again.","formMisconfigured":"","enrichment":{"isUsed":false,"isUsedPrefill":false,"isUsedPrefillUrl":false},"geolocation":{"isUsed":false},"captcha":{"isUsed":false},"isAdmin":false} </script> <script src="https://productive.io/engineering/wp-content/plugins/eightshift-forms/public/applicationBlocksFrontend-299576fcd48265186006.js?ver=5.4.2" id="eightshift-forms-block-frontend-scripts-js"></script> <script src="https://productive.io/engineering/wp-content/themes/productive/public/application-9b328b8e1e357b4a952a.js?ver=20250213134939.13309144674" id="Productive-scripts-js"></script> </footer> </body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me -->

Pages: 1 2 3 4 5 6 7 8 9 10