CINXE.COM
Pull Requests—The Good, the Bad and Really, Not That Ugly - 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-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' /> <!-- This site is optimized with the Yoast SEO Premium plugin v23.7 (Yoast SEO v23.7) - https://yoast.com/wordpress/plugins/seo/ --> <title>Pull Requests—The Good, the Bad and Really, Not That Ugly - Building Productive</title> <meta name="description" content="Recently, I stumbled upon an article on the disadvantages of pull requests—and immediately started writing a follow-up." /> <link rel="canonical" href="https://productive.io/engineering/blog/pull-requests-the-good-the-bad-and-really-not-that-ugly/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Pull Requests—The Good, the Bad and Really, Not That Ugly" /> <meta property="og:description" content="Recently, I stumbled upon an article on the disadvantages of pull requests—and immediately started writing a follow-up." /> <meta property="og:url" content="https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/" /> <meta property="og:site_name" content="Building Productive" /> <meta property="article:published_time" content="2022-11-09T08:34:20+00:00" /> <meta property="article:modified_time" content="2023-03-07T22:31:21+00:00" /> <meta property="og:image" content="https://productive.io/engineering/wp-content/uploads/sites/2/2022/11/BP_pull_requests.png" /> <meta property="og:image:width" content="1900" /> <meta property="og:image:height" content="796" /> <meta property="og:image:type" content="image/png" /> <meta name="author" content="Ivan Lučin" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:label1" content="Written by" /> <meta name="twitter:data1" content="Ivan Lučin" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/","url":"https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/","name":"Pull Requests—The Good, the Bad and Really, Not That Ugly - Building Productive","isPartOf":{"@id":"https://productive.io/engineering/#website"},"primaryImageOfPage":{"@id":"https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/#primaryimage"},"image":{"@id":"https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/#primaryimage"},"thumbnailUrl":"https://website-assets.productive.io/uploads/sites/2/2022/11/BP_pull_requests.png","datePublished":"2022-11-09T08:34:20+00:00","dateModified":"2023-03-07T22:31:21+00:00","author":{"@id":"https://productive.io/engineering/#/schema/person/32a9827994fe8109baebc97c0be0c762"},"description":"Recently, I stumbled upon an article on the disadvantages of pull requests—and immediately started writing a follow-up.","breadcrumb":{"@id":"https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/#primaryimage","url":"https://website-assets.productive.io/uploads/sites/2/2022/11/BP_pull_requests.png","contentUrl":"https://website-assets.productive.io/uploads/sites/2/2022/11/BP_pull_requests.png","width":1900,"height":796},{"@type":"BreadcrumbList","@id":"https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://productive.io/engineering/"},{"@type":"ListItem","position":2,"name":"Pull Requests—The Good, the Bad and Really, Not That Ugly"}]},{"@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/32a9827994fe8109baebc97c0be0c762","name":"Ivan Lučin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://productive.io/engineering/#/schema/person/image/","url":"https://secure.gravatar.com/avatar/d117e3b7209134e74b706e03de15df1c?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/d117e3b7209134e74b706e03de15df1c?s=96&d=mm&r=g","caption":"Ivan Lučin"},"description":"VP of Engineering @ Productive. Frontend engineer under the hood. Outside of working hours—a happy husband, dad of two girls and a wannabe musician.","url":"https://productive.io/engineering/author/ivan-lucin/"}]}</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 » Pull Requests—The Good, the Bad and Really, Not That Ugly Comments Feed" href="https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly/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-32dd51df9af718b07bc4.css?ver=20241121151712.11956160953' media='all' /> <link rel='stylesheet' id='Productive-theme-styles-css' href='https://productive.io/engineering/wp-content/themes/productive/public/application-254597429f580bc12780.css?ver=20241121151712.11956160953' 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.1.8' 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.1.8' media='all' /> <link rel='stylesheet' id='Productive-block-frontend-style-css' href='https://productive.io/engineering/wp-content/themes/productive/public/applicationBlocksFrontend-d74e1f17959c7c66139a.css?ver=20241121151712.11956160953' 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/44" /><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=44' /> <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%2Fpull-requests-the-good-the-bad-and-really-not-that-ugly%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%2Fpull-requests-the-good-the-bad-and-really-not-that-ugly%2F&format=xml" /> <meta name="generator" content="WP Rocket 3.17.2" data-wpr-features="wpr_desktop wpr_preload_links" /></head> <body data-page-category="engineering, workflow" class="post-template-default single single-post postid-44 single-format-standard theme-engineering"> <div data-rocket-location-hash="7f8640e2c800c8267a8fe194d03297db" 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" width=180 height=36 /> </a> <div data-rocket-location-hash="f1f6a309f7c84d63266c9fe1a4d079c4" 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 data-rocket-location-hash="6d1b2ccbea02e65506374ff0c6c8c799" 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='44' 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="ef54d35a" 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="39892c10" 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='ef54d35a']{--es-field-width: calc((12 / 12) * 100%);} .es-field[data-id='39892c10']{--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 data-rocket-location-hash="f5e02911bb7619186ef3b17af9bc394f" class="block-navbar__flyout js-block-navbar-flyout"> <div data-rocket-location-hash="601cd433bb6a51f86c84242d1f8a5b93" 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 data-rocket-location-hash="46ccfc1855959cdb1045c2e68a88e1b0" 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='44' 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="ef54d35a" 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="39892c10" 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='ef54d35a']{--es-field-width: calc((12 / 12) * 100%);} .es-field[data-id='39892c10']{--es-field-width: calc((12 / 12) * 100%);} </style> </div> </div> </div><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 data-rocket-location-hash="950389ae077130fc6228b3e229f430fd" class="main-content"> <div class="wrapper" data-id="e5a1b974" > <div data-rocket-location-hash="bd4592b4165de400d0652d037585401a" class="wrapper__inner"> <div class="block-group" data-id="8865ed99"> <div class="wrapper wrapper--simple" data-id="c8335eff" > <div data-rocket-location-hash="41a911d69968347b035b71356072d094" class="wrapper__skip-dom"> <div class="block-columns" data-id="386b79e8"> <div class="block-column" data-id="18d351cb"> <div class="wrapper wrapper--simple" data-id="710d91cf" > <div data-rocket-location-hash="7b54553ad76770de4f94a1504eeddc2d" class="wrapper__skip-dom"> <div class="block-post-meta js-block-post-meta" data-id="5572bfe1"> <p class="typography block-post-meta__category" data-id="6eaaa766" > <a href='https://productive.io/engineering/category/engineering/'>Engineering</a></p> <span> – </span> <p class="typography block-post-meta__reading-time js-reading-time is-reading-time-hidden" data-id="913e7e79" > {{minutes}} min read</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="16ddbb72" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="84749361"> <h1 class="typography block-heading__heading" data-id="5ffc803b" > Pull Requests—The Good, the Bad and Really, Not That Ugly</h1></div> </div> </div> </div> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="7a51e2c6" > <div class="wrapper__skip-dom"> <div class="block-columns" data-id="b9e7fecb"> <div class="block-column" data-id="0571ef1f"> <div class="wrapper wrapper--simple" data-id="a87237b4" > <div class="wrapper__skip-dom"> <div class="block-author-meta js-block-author-meta" data-id="b8823ef4"> <a href="https://productive.io/engineering/author/ivan-lucin/"> <div class="block-author-meta__image-wrapper"> </div> </a> <div class="block-author-meta__content-wrapper"> <a href="https://productive.io/engineering/author/ivan-lucin/"> <p class="typography block-author-meta__author" data-id="6d0c4fad" > Ivan Lučin</p></a> <div class="typography block-author-meta__info" data-id="9183a802" > VP of Engineering @ Productive. Frontend engineer under the hood. Outside of working hours—a happy husband, dad of two girls and a wannabe musician.</div><p class="typography block-author-meta__date" data-id="988e98e0" > November 9, 2022</p> </div> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="5f9a1698" > <div class="wrapper__skip-dom"> <div class="block-share-icons" data-id="9379bac0"> <a aria-hidden="false" class="icon icon__link block-share-icons__icon" data-id="62015ccd" href=https://www.facebook.com/sharer.php?u=https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly 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="6693f5c7" href=https://twitter.com/intent/tweet?text=Pull%20Requests%E2%80%94The%20Good%2C%20the%20Bad%20and%20Really%2C%20Not%20That%20Ugly&url=https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly 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="751fb9df" href=https://www.linkedin.com/shareArticle?mini=true&url=https://productive.io/engineering/pull-requests-the-good-the-bad-and-really-not-that-ugly 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> <div class="block-column" data-id="a0b64beb"> <div class="wrapper wrapper--simple" data-id="eaac0eab" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="03a6fc52" > <picture class="image media__image-picture" data-id="2b9af178" > <img src="https://productive.io/engineering/wp-content/uploads/sites/2/2022/11/BP_pull_requests.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="3c1e6f42" > <div class="wrapper__skip-dom"> <div class="block-columns" data-id="6098faf1"> <div class="block-column" data-id="0cf416ff"> </div> <div class="block-column" data-id="1df08e98"> </div> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="703164cc" > <div class="wrapper__skip-dom"> <div class="block-columns" data-id="0db34d38"> <div class="block-column" data-id="e808a477"> </div> <div class="block-column" data-id="60a97cd5"> <div class="wrapper wrapper--simple" data-id="aa643b13" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="ca5996c9" > <p class="typography block-paragraph__paragraph" data-id="ab31b841" > Recently, I stumbled upon an article on <a href="https://arkency.com/">arkency</a>—<a href="https://blog.arkency.com/disadvantages-of-pull-requests/">Disadvantages of pull requests</a>.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="c33a3667" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="60c26015" > <p class="typography block-paragraph__paragraph" data-id="a005fdb7" > I soon realized this was interesting stuff, worth sharing with my colleagues. Immediately I started writing a follow-up article, debating every claim made in the text.<br><br>We practice PR review workflow in <a href="http://productive.io/" rel="noreferrer noopener" target="_blank">Productive’s</a> engineering team daily. This workflow helps us with:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="ca44cecc" > <div class="wrapper__skip-dom"> <div class="list block-list__list" data-id="cdcfd96f"> <ul class="typography list__list-element" data-id="47a1bd0e" > <li>Ensuring code quality and stability</li><li>Domain knowledge sharing in the team</li><li>Organized mentoring activities</li></ul></div> </div> </div> <div class="wrapper wrapper--simple" data-id="e375f069" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="451a7dd5" > <p class="typography block-paragraph__paragraph" data-id="46c8deb2" > Productive’s Engineering team builds one SaaS product and works on two <strong>massive codebases</strong>—the backend (API) and the frontend (web app).</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="cfdfdf1e" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="1a3423ce" > <picture class="image media__image-picture" data-id="e0814b39" > <source srcset="https://productive.io/wp-content/uploads/2022/02/1_UTUP1yGK_vdrxnhtxTlGog.webp" media="(max-width: 479px)" /> <source srcset="https://productive.io/wp-content/uploads/2022/02/1_UTUP1yGK_vdrxnhtxTlGog.webp" media="(max-width: 1279px)" /> <source srcset="https://productive.io/wp-content/uploads/2022/02/1_UTUP1yGK_vdrxnhtxTlGog.webp" media="(max-width: 2159px)" /> <img src="https://productive.io/wp-content/uploads/2022/02/1_UTUP1yGK_vdrxnhtxTlGog.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="187d2fe9" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="b425b816" > <p class="typography block-paragraph__paragraph" data-id="edec4738" > Every process comes with overhead, and so does this one, but I’ll argue it’s worth it. <br><br>In this blog post, I’ll quote key points from the mentioned article and give my thoughts on the matter.<br><br>Now, let’s discuss the disadvantages of pull requests! </p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="0336cce6" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="ea718bbd"> <h2 class="typography block-heading__heading" data-id="2d2fef17" > 1. <strong>More Long-Living Branches, More Merge Conflicts</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="afb5925f" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="3d59c4e4" > <p class="typography block-quote__paragraph" data-id="7aa5fa2b" > PRs promote developing code in branches, which increases the time and the amount of code staying in a divergent state, which increases chances of merge conflicts. And merge conflicts can be terrible, especially if the branch waited for a long time.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="e31d5119" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="8debda39" > <p class="typography block-paragraph__paragraph" data-id="d253bee3" > Yes, this is true. But it shouldn’t be that big of an issue if you practice a good distribution of work in your team. <br><br>Most products consist of many modules which are usually different screens or sections in the app. You should always divide work across those modules, in a way that one PR doesn’t interact with the other.<br><br>If your codebase is not that modularized, you can ensure a few good practices to avoid this issue:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="15e376d0" > <div class="wrapper__skip-dom"> <div class="list block-list__list" data-id="69edd21c"> <ul class="typography list__list-element" data-id="984dbcec" > <li>Always split a big chunk of work into smaller, but functional PRs.</li><li>Rebase the branch daily and update it with new changes from the master/develop (I usually do this before every code review).</li><li>Always separate preparatory refactorings and merge them before implementing the actual feature changes. This is great advice given in the original article!</li></ul></div> </div> </div> <div class="wrapper wrapper--simple" data-id="f8d0f73b" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="5e40dc2a" > <p class="typography block-paragraph__paragraph" data-id="e6c21930" > The most common mistake developers do is putting too much work into one PR, making both the review and merge process harder than it should be.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="0f8175f2" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="0e94070d"> <h2 class="typography block-heading__heading" data-id="9a163046" > 2. <strong>The Reviewability of a Change Decreases With Size</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="f7e6866c" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="6c9de6f6" > <p class="typography block-quote__paragraph" data-id="3f78842d" > PRs tend to promote reviewing bigger chunks of code.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="7b155f84" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="9ca35c7d" > <p class="typography block-paragraph__paragraph" data-id="a962b39d" > More often than not, developers fall into this trap. They think something like “I’ll just refactor this while I’m already here” or “I need to complete the whole thing before sending it for review”. This leads to oversized PRs and a slow development process.<br><br><strong>3 PRs with 100 lines are reviewed and merged faster than 1 PR of 300 lines.</strong><br><br>Of course, not all changes are the same. If we have 100 lines of boilerplate code, which is usually framework scaffolding, there’s no complexity there. Tests take a lot of lines but should be easy to read. Code with fewer dependencies will always be easier to grasp too.<br><br>Basically, the more a developer is experienced and familiar with the codebase, the more lines he/she is allowed to put in one PR. Less experienced developers on the project should strive to make their PRs as thin as possible.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="cdab59dc" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="19efec93"> <h2 class="typography block-heading__heading" data-id="dc0bd5ed" > 3. <strong>Short Feedback Loop Makes Programming Fun</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="e4aad39d" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="b5c3ea91" > <p class="typography block-quote__paragraph" data-id="e8648c8a" > You code something up but it’s nowhere close to being integrated and working. You now have to wait for the reviewer, go through his remarks, discuss them, change the code…</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="db31a12e" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="f24eb426" > <p class="typography block-paragraph__paragraph" data-id="245814dd" > I couldn’t agree more. There’s nothing more exciting in programming than getting a great idea, implementing it fast, and testing it out instantly.<br><br>The original author’s claim is that PR reviews kill that short feedback loop which makes programming less fun. But if that’s true, then it also means that:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="9e96ad7f" > <div class="wrapper__skip-dom"> <div class="list block-list__list" data-id="3db79d82"> <ul class="typography list__list-element" data-id="d4d82a57" > <li>Your team is producing large and overcomplicated pull requests.</li><li>You don’t have a good deployment and review environment setup.</li><li>You’re not coding features in safe-enough isolation.</li></ul></div> </div> </div> <div class="wrapper wrapper--simple" data-id="32400b35" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="63baafc0" > <p class="typography block-paragraph__paragraph" data-id="12ed2cd6" > Again, it all revolves around making small and easily reviewable PRs, but we’ve already acknowledged that, so let’s move on.<br><br>If you do have a large PR waiting review, that doesn’t mean you can’t try it out in the wild. You could easily deploy the code to a staging environment, or even production, but on a separate domain so only you and your team can try out the new changes.<br><br>At Productive, for our main frontend app, we have an automated PR deployment setup. When you create a new PR on Github or push commits to an existing PR, a Github action is triggered that deploys the code to the “review” environment.<br><br>It takes the name of the git branch and deploys the frontend app to the subdomain with the same name. For example <a href="https://cool-new-stuff.review.productive.io/" rel="noreferrer noopener" target="_blank">https://cool-new-stuff.review.productive.io</a>.<br><br>Voilà, now you can try your PR changes in the live environment two minutes after you’ve created the PR. <br><br>Plus, there’s another Github action that posts a comment with a test link, so you don’t need to type it into the browser’s URL bar manually:</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="9b22da56" > <div class="wrapper__skip-dom"> <div class="media block-media__media media__aspect-ratio--auto" data-id="b9094d8f" > <picture class="image media__image-picture" data-id="c86860b3" > <source srcset="https://productive.io/wp-content/uploads/2022/02/1_dlRh7wHgv9thSNAXIhV52w.webp" media="(max-width: 479px)" /> <source srcset="https://productive.io/wp-content/uploads/2022/02/1_dlRh7wHgv9thSNAXIhV52w.webp" media="(max-width: 1279px)" /> <source srcset="https://productive.io/wp-content/uploads/2022/02/1_dlRh7wHgv9thSNAXIhV52w.webp" media="(max-width: 2159px)" /> <img src="https://productive.io/wp-content/uploads/2022/02/1_dlRh7wHgv9thSNAXIhV52w.webp" class="image image__img media__image-img" alt="" /> </picture> </div> </div> </div> <div class="wrapper wrapper--simple" data-id="4a67e014" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="1e1843e7" > <p class="typography block-paragraph__paragraph" data-id="ff90b69d" > This is a frontend app example hosted as a static asset on a CDN, but you could do it similarly with backend apps.<br><br>There’s another mechanism for achieving a short feedback loop which is safe if done properly. With <a href="https://martinfowler.com/articles/feature-toggles.html" rel="noreferrer noopener" target="_blank">feature flags</a>, you can ensure that your PR is not introducing any breaking changes and that new code is implemented in isolation from existing features.<br><br>Feature flags allow you to try the new changes in an isolated scope, without changing anything in the rest of the system. The scope can be either one user, one account, or just one API request. It’s a powerful mechanism that our team uses on a daily basis. It allows us to push new changes to the live environment rapidly, without worrying about breaking things.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="c9a8b7e6" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="44d52b0c"> <h2 class="typography block-heading__heading" data-id="8f8cd926" > <strong>4. Reviews Tend To Be Superficial</strong><br></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="c24f32e4" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="306bdb86" > <p class="typography block-quote__paragraph" data-id="428415a8" > Proper review takes the same amount of focus as actual coding. Why not pair-program instead?</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="0b8a90e5" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="e3c5d98a" > <p class="typography block-paragraph__paragraph" data-id="91442c4b" > I agree that PR reviews tend to be superficial, especially when there’s too much to review. That only means that the reviewer is doing their job poorly. You can recognize this situation when you see a complex PR that only has code-style comments like “Fix naming” or “Wrong indentation”, etc.<br><br><strong>If the PR seems like it’s too complicated—why not pair-review instead?</strong><br><br>Pair programming (not to be confused with pair-reviewing) is useful for mentoring junior developers, but it’s a waste of time in a lot of other cases. That’s because you’re not solving complex problems all the time.<br><br>A better way to do it is to pair-review the PR with the author after most of the boilerplate is done and proper research has been made. Then you only talk about the complex stuff and you can leave the author of the PR to explain their thought process in detail.<br><br>There’s one more thing here… Programmers usually get this “feeling” when something stinks about their solution. They should be honest and leave comments in the PR, in every place where they feel they could be doing something wrong. That greatly increases the reviewability of the PR.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="771b9119" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="30fbbccc"> <h2 class="typography block-heading__heading" data-id="3609efc9" > 5. <strong>Merging Is Blocked by Remarks That Shouldn’t Be Blocking</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="f7b3ca6e" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="713505fa" > <p class="typography block-quote__paragraph" data-id="91cc9d12" > Remarks made by the reviewer can fall anywhere on the spectrum of whether they should block merging or not: from a mistake that’ll bring production down to cosmetic suggestions or opinions.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="5d167030" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="bddf0c93" > <p class="typography block-paragraph__paragraph" data-id="f7fb8828" > These situations happen quite often with inexperienced reviewers. When commenting on the PR, you should tell the author if the comment is a merge-blocker or not, and never insist on details too much.<br><br>When I’m working with inexperienced developers, I’ll usually tell them exactly how to fix something, with an explanation. For non-blocking mistakes, I’ll just comment to watch out for that in the next PR. Usually, I’m the one to merge the PR, so they don’t have to wonder whether the PR is finished or not.<br><br>When reviewing experienced dev’s PR, I’ll tell them what I think about the problematic places in the code, but I’ll mostly approve the changes and leave them to the author to do the fixes the way they want to.<br><br><strong>Not everything the reviewer says is always correct or the right thing to do. The author should be the one to decide on the comments—because it’s their work.</strong></p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="bc719171" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="aa3b671a"> <h2 class="typography block-heading__heading" data-id="85710df6" > 6. It’s Easier To Fix Than To Explain the Fix</h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="2d149354" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="512dba4a" > <p class="typography block-quote__paragraph" data-id="6680918d" > The original author has to understand it first, agree with it, and then is expected to implement it. Often it’s better to let the original author merge his thing, and let the reviewer implement his remark post-factum?</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="27526e98" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="dd24f3aa" > <p class="typography block-paragraph__paragraph" data-id="fc9b9c82" > A lot of times it’s hard to explain the fix to the author and it would be more efficient just to implement the fix yourself. But merging the unfinished PR could be dangerous, so I’d never suggest that. You’d also be missing the opportunity to educate the original author about the problem.<br><br>Pull requests don’t have to be done by only one person. Why wouldn’t you, the reviewer, just pull the branch, implement, and push the fixes back upstream? That way the author gets notified about what you did and you both have an opportunity to discuss the issue.<br><br>That’s also an effective thing to do when there are a few simple fixes required on the PR. Let’s say you notice a typo somewhere in the PR. It’s much faster to fix it yourself than to leave a comment and wait for the author to do the fix. You could do that directly in Github and it would take like 30 seconds.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="484a82db" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="1b1315fb"> <h2 class="typography block-heading__heading" data-id="43afc657" > 7. <strong>Developers Are Slower To Adapt the Responsibility Mindset</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="1713823a" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="48d2daf3" > <p class="typography block-quote__paragraph" data-id="1ceb0c1a" > The second one knows that every line they write can screw up things for other developers or even bring production down. They watch their step, they know they are the only one responsible for this change. It shortens the delay between making a mistake and seeing the effect of it.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="12a77f78" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="325e984b" > <p class="typography block-paragraph__paragraph" data-id="a06ae1e3" > This is an interesting and important claim. Can your business afford to tear the live server down just to teach the developers some responsibility? Sometimes it’s worth it, but in most cases, you wouldn’t want to do that.<br><br>Code stability is not the only reason why we should be reviewing our PRs. There are also benefits of mentoring, knowledge sharing, better release organization, feature completeness, structured discussion around a diff, etc.<br><br>At Productive, we encourage people to self-merge PRs without a review when they’re confident that the changes are fine. The developer should have the freedom to do that in the part of the codebase where they have more ownership. I believe this is how the responsibility mindset can be trained. When people build something from the ground up, they will feel the responsibility to keep everything in great shape.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="42451e77" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="84aad951"> <h2 class="typography block-heading__heading" data-id="47dbeba5" > <strong>8. PRs Discourage Continuous Refactoring</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="fc0251f7" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="59379323" > <p class="typography block-quote__paragraph" data-id="446af38f" > It’s good to follow boy scouts’ rule: always leave the place better than it was before. With PRs, though, this rule is harder to apply.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="10fb2681" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="63442e8a" > <p class="typography block-paragraph__paragraph" data-id="e816b881" > PRs will slow you down on refactoring. When you realize that some refactoring is needed, you need to switch to another branch to implement the refactoring separately, submit the PR to review, wait for the approval and merge the changes back into the original branch.<br><br>But it’s still better to do it that way, in my opinion. Refactoring PRs shouldn’t be complicated to review since there shouldn’t be any changes in the logic, only the code structure. That’s especially true if you have good test coverage. If you don’t, then maybe you should write the tests first? <br><br>Maybe the refactoring PR doesn’t need to go through the review process if everything is trivial. If it does, then mention to the reviewer that this is a refactoring-only PR that’s blocking feature development and the reviewer should prioritize the approval.<br><br><strong>Having good team communication around PRs will minimize most of the downsides of the PR review process.</strong></p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="f3de66c4" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="3da2fa26"> <h2 class="typography block-heading__heading" data-id="f22dd64b" > <strong><strong>9. Negative Emotions</strong></strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="1ce2a7ee" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="3f064506" > <p class="typography block-quote__paragraph" data-id="d1b83bf9" > Mandatory PR reviews can induce way more negative emotions than needed. We all have limited emotional budgets — it’s better not to waste it on avoidable stuff.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="40053124" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="8eacdcc6" > <p class="typography block-paragraph__paragraph" data-id="53f65630" > When it comes to pull request reviewing, the responsibility is both the author’s and reviewer’s. There’s one simple rule to follow:<br><br><strong>Don’t be a prick when reviewing or authoring the PR.</strong><br><br>The original article is basically saying that we should let developers do what they want because they might get offended by the review comments. <br><br>Obviously, that’s ridiculous. This doesn’t have anything to do with PR reviewing itself—it’s a communication problem. If your engineering team doesn’t know how to communicate, then you’ll have bigger issues than developers offended by a PR review.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="bcfecfe7" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="dec29c2b"> <h2 class="typography block-heading__heading" data-id="a2e3314e" > 10. <strong><strong>How Do You Switch to Branches With Migrations</strong></strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="a2a137ae" > <div class="wrapper__skip-dom"> <div class="block-quote" data-id="58698fbd" > <p class="typography block-quote__paragraph" data-id="5c6fa4f7" > You obviously sometimes need migrations while working on a branch. What do you do if you then have to switch back to another branch locally? Cumbersome.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="0d2e19cf" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="aefb6c83" > <p class="typography block-paragraph__paragraph" data-id="c96c1554" > Well, just do the migration separately on the main branch, before implementing the remaining logic in the PR. The world won’t collapse if you don’t always work on branches with PR reviews. You can always omit the process if you have a good reason for it.</p></div> </div> </div> <div class="wrapper wrapper--simple" data-id="02c22ab4" > <div class="wrapper__skip-dom"> <div class="block-heading" data-id="b06c9434"> <h2 class="typography block-heading__heading" data-id="f37e9887" > <strong>Conclusion</strong></h2></div> </div> </div> <div class="wrapper wrapper--simple" data-id="049ed3b9" > <div class="wrapper__skip-dom"> <div class="block-paragraph" data-id="1617529d" > <p class="typography block-paragraph__paragraph" data-id="2a010a00" > The original article contains a <a href="https://blog.arkency.com/disadvantages-of-pull-requests#now__how_to_make_the__em_10__change__em__in_your_team_today" rel="noreferrer noopener nofollow" target="_blank">list of suggestions</a> on how to improve your team’s PR workflow. Those are all great ideas, which I encourage you to try. Thanks to <a href="https://arkency.com/" target="_blank" rel="noreferrer noopener nofollow">arkency</a> for writing a great and educational article! We’ve also published a copy of this article on Medium.<br><br>As with other organizational processes, we shouldn’t take them too seriously because they tend to generate overhead and slow work down. We should be pragmatic about PR reviews and when we notice they’re becoming a burden—we can skip them sometimes. <br><br>Don’t follow the rules blindly, try thinking with your head and do the right thing depending on the situation you’re in.<br><br>And a little remark for the end—<strong>let’s all be humble and respectful towards each other while reviewing each other’s code!</strong><br></p></div> </div> </div> </div> </div> </div> </div> <div class="wrapper" data-id="930c589d" > <div data-rocket-location-hash="c569182169106c8d04555ccd39a20279" class="wrapper__inner"> <div class="block-author-meta-position js-block-author-meta-position" data-id="fe71e35b"> <div class="block-author-meta-position__wrapper"> <div class="block-author-meta-position__image-wrapper"> </div> <div class="block-author-meta-position__content-wrapper"> <p class="typography block-author-meta-position__author" data-id="27f82f3d" > Ivan Lučin</p><div class="typography block-author-meta-position__info" data-id="65c55117" > VP of Engineering @ Productive. Frontend engineer under the hood. Outside of working hours—a happy husband, dad of two girls and a wannabe musician.</div><a href="https://productive.io/engineering/author/ivan-lucin/" class="btn btn__as-link btn__type--primary block-author-meta-position__button" id="" aria-label="" data-id="7667aaa0" > More From This Author<div aria-hidden="true" class="icon btn__icon" data-id="eb1547ed" > <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> </div> </div> <div class="wrapper" data-id="b781140a" > <div data-rocket-location-hash="6c662d8228c352a4a1d379138f400a5b" class="wrapper__inner"> <div class="block-heading" data-id="21364983"> <h2 class="typography block-heading__heading" data-id="65123f41" > Related articles</h2></div> </div> </div> <div class="wrapper" data-id="ec9739ca" > <div data-rocket-location-hash="3aaa0094e585bf405e4fe65d724a27b7" 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=42a29c75 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 article data-block-class=post-listing data-nonce=ccabd9cae0 data-page=1 data-skip=0 data-categories=7,14 data-exclude=44 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/integrations-series-authentication-and-connection/" class="card-simple post-listing__card-simple" data-id="b6a543a5" > <picture class="image card-simple__image-picture" data-id="361d77a0" > <img src="https://website-assets.productive.io/uploads/sites/2/2024/01/Blog@3x-768x322.webp" class="image image__img card-simple__image-img" alt="" /> </picture><p class="typography card-simple__intro" data-id="dbf91eae" > Engineering</p><h2 class="typography card-simple__heading" data-id="5ad4ba3e" > Integrations Series: Authentication And Connection</h2> </a><a href="https://productive.io/engineering/how-to-keep-your-project-from-stagnating/" class="card-simple post-listing__card-simple" data-id="6b8ddb9d" > <picture class="image card-simple__image-picture" data-id="1448350f" > <img src="https://website-assets.productive.io/uploads/sites/2/2023/05/Keep_from_stagnating-blog_post_2x-8-768x322.webp" class="image image__img card-simple__image-img" alt="" /> </picture><p class="typography card-simple__intro" data-id="6f4d771b" > Workflow</p><h2 class="typography card-simple__heading" data-id="c4fbaa70" > How to Keep Your Project From Stagnating</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="c497cf23" > <div data-rocket-location-hash="1efae64b68eaf498abb903f943f1b7ec" class="wrapper__inner"> <div class="block-heading" data-id="1be157aa"> <h2 class="typography block-heading__heading" data-id="b559c508" > Related jobs</h2></div> </div> </div> <div class="wrapper" data-id="83c76f59" > <div data-rocket-location-hash="5a59a2a611983f87fb50072404c8127c" 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="923c31b2"> <div class="job-card__col job-card__col--left"> <p class="typography job-card__heading" data-id="2d6d395c"> Open Job Application</p><p class="typography job-card__paragraph" data-id="84dbf58c"> </p> </div> <div class="job-card__col job-card__col--right"> <button class="chevron job-card__chevron" aria-label="" data-id="d5e2005e"> <div aria-hidden="true" class="icon chevron__icon" data-id="cd671441"> <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> <div data-rocket-location-hash="2fa1522ecd20b959c68bf65ee84cae0b" class="layout footer-partial"> <div data-rocket-location-hash="3a1357c5c87731b24d45885173092e4e" class="layout__main footer-partial__main"> <div data-rocket-location-hash="434773ce087a0269e65487d9f34985f8" 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="6b16f934" > <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="eff737c5" 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="f2a54660" 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="b3e9bbe7" 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="ee47de88" 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 data-rocket-location-hash="36cd4e11932228c9e2c6d4579e76c8d8" class="gdpr-modal__backdrop js-gdpr-modal-backdrop"></div> <div data-rocket-location-hash="d63c8f5b984ba2b3b1d2512486a17099" class="gdpr-modal js-gdpr-modal" data-modal="gdpr"> <div data-rocket-location-hash="4b977acd7d361fd8038ce998fb424397" class="gdpr-modal__container"> <div data-rocket-location-hash="ac233df6b8166ac1832a08d656a2096e" 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="068282c7" > 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="2da2aa2c" > Necessary cookies</h3><p class="typography gdpr-modal__paragraph gdpr-modal__selection-item-summary" data-id="4eb212a9" > Cookies for the basic functionality of the Productive website.</p> </div> <div class="gdpr-modal__toggle"> <p class="typography gdpr-modal__paragraph" data-id="8b25678b" > 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="dd53004f" > Functional cookies</h3><p class="typography gdpr-modal__paragraph gdpr-modal__selection-item-summary" data-id="e6dbdd7c" > 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="08f20fe3"> <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="7a9fa7b8" > Targeting cookies</h3><p class="typography gdpr-modal__paragraph gdpr-modal__selection-item-summary" data-id="8493b865" > 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="1ea840e7"> <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="e57fbf35" data-level=2 > <p class="typography btn__label js-gdpr-modal__btn-advance js-gdpr-modal-btn js-gdpr-modal-btn-advance js-button-label" data-id="086950f8" > 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="aebec7e8" target=_blank rel="noopener noreferrer" > <p class="typography btn__label js-button-label" data-id="51016526" > Privacy Policy</p> </button> </div> </div> </div> <div data-rocket-location-hash="8d5e19a4107449ad9d8ee1c933da23c9" 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="10f5bc86" > <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="5064e356" data-level=2 > <p class="typography btn__label js-gdpr-modal-btn js-button-label" data-id="2bd3704f" > I agree</p> </button> </div> </div> </div><style id='esCssVariables'> .block-post-meta[data-id='5572bfe1']{ --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='6eaaa766']{ --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='913e7e79']{ --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='710d91cf']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='84749361']{ --heading-align: left; } .typography[data-id='5ffc803b']{ --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='16ddbb72']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='18d351cb']{ --column-horizontal-padding: calc(var(--base-font-size) * 0rem); --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='18d351cb']{ --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='386b79e8']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='c8335eff']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-author-meta[data-id='b8823ef4']{ --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='94f56d64']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .typography[data-id='6d0c4fad']{ --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='9183a802']{ --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='988e98e0']{ --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.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='a87237b4']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-share-icons[data-id='9379bac0']{ --share-icons-align: flex-start; } .icon[data-id='62015ccd']{ --icon-backplate-color: var(--global-colors-white); --icon-color: var(--global-colors-white); --icon-on-backplate-color: var(--global-colors-black); --icon-size: calc(var(--base-font-size) * 4rem); } .icon[data-id='6693f5c7']{ --icon-backplate-color: var(--global-colors-white); --icon-color: var(--global-colors-white); --icon-on-backplate-color: var(--global-colors-black); --icon-size: calc(var(--base-font-size) * 4rem); } .icon[data-id='751fb9df']{ --icon-backplate-color: var(--global-colors-white); --icon-color: var(--global-colors-white); --icon-on-backplate-color: var(--global-colors-black); --icon-size: calc(var(--base-font-size) * 4rem); } .wrapper[data-id='5f9a1698']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='0571ef1f']{ --column-horizontal-padding: calc(var(--base-font-size) * 0rem); --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='0571ef1f']{ --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='03a6fc52']{ --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='2b9af178']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='eaac0eab']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='a0b64beb']{ --column-horizontal-padding: calc(var(--base-font-size) * 0rem); --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='a0b64beb']{ --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='b9e7fecb']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='7a51e2c6']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-group[data-id='8865ed99']{ --group-border-radius: 0; } .wrapper[data-id='e5a1b974']{ --wrapper-z-index: 1; --wrapper-bg-color-solid: #1b0066; --wrapper-display-type: grid; } .block-column[data-id='0cf416ff']{ --column-horizontal-padding: calc(var(--base-font-size) * 0rem); --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='0cf416ff']{ --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-column[data-id='1df08e98']{ --column-horizontal-padding: calc(var(--base-font-size) * 0rem); --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='1df08e98']{ --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='6098faf1']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='3c1e6f42']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='e808a477']{ --column-horizontal-padding: calc(var(--base-font-size) * 0rem); --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='e808a477']{ --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='ca5996c9']{ --paragraph-align: left; } .typography[data-id='ab31b841']{ --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); --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='aa643b13']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='60c26015']{ --paragraph-align: left; } .typography[data-id='a005fdb7']{ --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='c33a3667']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .list[data-id='cdcfd96f']{ --list-icon-type: ''; --list-icon-size: calc(var(--base-font-size) * 0.8rem); --list-icon-position-top-mobile: calc(var(--es-ft-list-sm-font-size) * 0.5rem); --list-icon-position-top-tablet: calc(var(--es-ft-list-md-font-size) * 0.5rem); --list-icon-position-top-desktop: calc(var(--es-ft-list-lg-font-size) * 0.5rem); --list-icon-position-top-large: calc(var(--es-ft-list-lg-font-size) * 0.5rem); --list-icon-position-transform: none; --list-icon-color: var(--global-colors-black); --es-ft-list-sm-font-size: 1.125; --es-ft-list-md-font-size: 1.25; --es-ft-list-lg-font-size: 1.625; --checkmark-top-margin: calc(var(--base-font-size) * 0.2rem); } .typography[data-id='47a1bd0e']{ --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='ca44cecc']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='451a7dd5']{ --paragraph-align: left; } .typography[data-id='46c8deb2']{ --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='e375f069']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='1a3423ce']{ --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='e0814b39']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='cfdfdf1e']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='b425b816']{ --paragraph-align: left; } .typography[data-id='edec4738']{ --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='187d2fe9']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='ea718bbd']{ --heading-align: left; } .typography[data-id='2d2fef17']{ --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='0336cce6']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='3d59c4e4']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='7aa5fa2b']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='afb5925f']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='8debda39']{ --paragraph-align: left; } .typography[data-id='d253bee3']{ --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='e31d5119']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .list[data-id='69edd21c']{ --list-icon-type: ''; --list-icon-size: calc(var(--base-font-size) * 0.8rem); --list-icon-position-top-mobile: calc(var(--es-ft-list-sm-font-size) * 0.5rem); --list-icon-position-top-tablet: calc(var(--es-ft-list-md-font-size) * 0.5rem); --list-icon-position-top-desktop: calc(var(--es-ft-list-lg-font-size) * 0.5rem); --list-icon-position-top-large: calc(var(--es-ft-list-lg-font-size) * 0.5rem); --list-icon-position-transform: none; --list-icon-color: var(--global-colors-black); --list-item-margin-bottom: calc(var(--base-font-size) * 2.4rem); --es-ft-list-sm-font-size: 1.125; --es-ft-list-md-font-size: 1.25; --es-ft-list-lg-font-size: 1.625; --checkmark-top-margin: calc(var(--base-font-size) * 0.2rem); } .typography[data-id='984dbcec']{ --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='15e376d0']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='5e40dc2a']{ --paragraph-align: left; } .typography[data-id='e6c21930']{ --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='f8d0f73b']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='0e94070d']{ --heading-align: left; } .typography[data-id='9a163046']{ --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='0f8175f2']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='6c9de6f6']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='3f78842d']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='f7e6866c']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='9ca35c7d']{ --paragraph-align: left; } .typography[data-id='a962b39d']{ --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='7b155f84']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='19efec93']{ --heading-align: left; } .typography[data-id='dc0bd5ed']{ --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='cdab59dc']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='b5c3ea91']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='e8648c8a']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='e4aad39d']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='f24eb426']{ --paragraph-align: left; } .typography[data-id='245814dd']{ --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='db31a12e']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .list[data-id='3db79d82']{ --list-icon-type: ''; --list-icon-size: calc(var(--base-font-size) * 0.8rem); --list-icon-position-top-mobile: calc(var(--es-ft-list-sm-font-size) * 0.5rem); --list-icon-position-top-tablet: calc(var(--es-ft-list-md-font-size) * 0.5rem); --list-icon-position-top-desktop: calc(var(--es-ft-list-lg-font-size) * 0.5rem); --list-icon-position-top-large: calc(var(--es-ft-list-lg-font-size) * 0.5rem); --list-icon-position-transform: none; --list-icon-color: var(--global-colors-black); --es-ft-list-sm-font-size: 1.125; --es-ft-list-md-font-size: 1.25; --es-ft-list-lg-font-size: 1.625; --checkmark-top-margin: calc(var(--base-font-size) * 0.2rem); } .typography[data-id='d4d82a57']{ --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='9e96ad7f']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='63baafc0']{ --paragraph-align: left; } .typography[data-id='12ed2cd6']{ --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='32400b35']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .media[data-id='b9094d8f']{ --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='c86860b3']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .wrapper[data-id='9b22da56']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='1e1843e7']{ --paragraph-align: left; } .typography[data-id='ff90b69d']{ --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='4a67e014']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='44d52b0c']{ --heading-align: left; } .typography[data-id='8f8cd926']{ --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='c9a8b7e6']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='306bdb86']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='428415a8']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='c24f32e4']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='e3c5d98a']{ --paragraph-align: left; } .typography[data-id='91442c4b']{ --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='0b8a90e5']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='30fbbccc']{ --heading-align: left; } .typography[data-id='3609efc9']{ --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='771b9119']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='713505fa']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='91cc9d12']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='f7b3ca6e']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='bddf0c93']{ --paragraph-align: left; } .typography[data-id='f7fb8828']{ --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='5d167030']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='aa3b671a']{ --heading-align: left; } .typography[data-id='85710df6']{ --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='bc719171']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='512dba4a']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='6680918d']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='2d149354']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='dd24f3aa']{ --paragraph-align: left; } .typography[data-id='fc9b9c82']{ --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='27526e98']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='1b1315fb']{ --heading-align: left; } .typography[data-id='43afc657']{ --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='484a82db']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='48d2daf3']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='1ceb0c1a']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='1713823a']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='325e984b']{ --paragraph-align: left; } .typography[data-id='a06ae1e3']{ --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='12a77f78']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='84aad951']{ --heading-align: left; } .typography[data-id='47dbeba5']{ --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='42451e77']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='59379323']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='446af38f']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='fc0251f7']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='63442e8a']{ --paragraph-align: left; } .typography[data-id='e816b881']{ --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='10fb2681']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='3da2fa26']{ --heading-align: left; } .typography[data-id='f22dd64b']{ --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='f3de66c4']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='3f064506']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='d1b83bf9']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='1ce2a7ee']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='8eacdcc6']{ --paragraph-align: left; } .typography[data-id='53f65630']{ --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='40053124']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='dec29c2b']{ --heading-align: left; } .typography[data-id='a2e3314e']{ --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='bcfecfe7']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-quote[data-id='58698fbd']{ --quote-border-color: var(--global-colors-grey400); } .typography[data-id='5c6fa4f7']{ --typography-color: var(--typography-color-override, var(--global-colors-grey400)); --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='a2a137ae']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='aefb6c83']{ --paragraph-align: left; } .typography[data-id='c96c1554']{ --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='0d2e19cf']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-heading[data-id='b06c9434']{ --heading-align: left; } .typography[data-id='f37e9887']{ --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='02c22ab4']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-paragraph[data-id='1617529d']{ --paragraph-align: left; } .typography[data-id='2a010a00']{ --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='049ed3b9']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-column[data-id='60a97cd5']{ --column-horizontal-padding: calc(var(--base-font-size) * 0rem); --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='60a97cd5']{ --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='0db34d38']{ --columns-grid-side-columns: var(--wrapper-grid-side-columns); } .wrapper[data-id='703164cc']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: block; } .block-author-meta-position[data-id='fe71e35b']{ --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='daf27001']{ --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='27f82f3d']{ --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='65c55117']{ --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='7667aaa0']{ --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: calc(var(--base-font-size) * 3rem); --button-padding-vertical: calc(var(--base-font-size) * 1.3rem); --button-padding-horizontal: calc(var(--base-font-size) * 2.4rem); --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-icon-left-space: calc(var(--base-font-size) * 1rem); --button-icon-right-space: 0; --button-flex-direction: row; } .icon[data-id='eb1547ed']{ --icon-size: calc(var(--base-font-size) * 1.6rem); } .wrapper[data-id='930c589d']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .block-heading[data-id='21364983']{ --heading-align: left; } .typography[data-id='65123f41']{ --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='b781140a']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .card-simple[data-id='b6a543a5']{ --card-text-align: left; --card-content-align: flex-start; --card-media-align: flex-start; --card-intro-margin-top: 0; --card-intro-margin-bottom: calc(var(--base-font-size) * 1.25rem); --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='361d77a0']{ --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: calc(var(--base-font-size) * 2rem); } .typography[data-id='dbf91eae']{ --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='5ad4ba3e']{ --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='6b8ddb9d']{ --card-text-align: left; --card-content-align: flex-start; --card-media-align: flex-start; --card-intro-margin-top: 0; --card-intro-margin-bottom: calc(var(--base-font-size) * 1.25rem); --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='1448350f']{ --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: calc(var(--base-font-size) * 2rem); } .typography[data-id='6f4d771b']{ --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='c4fbaa70']{ --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='42a29c75']{ --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='ec9739ca']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .block-heading[data-id='1be157aa']{ --heading-align: left; } .typography[data-id='b559c508']{ --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='c497cf23']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .typography[data-id='2d6d395c']{ --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='84dbf58c']{ --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='d5e2005e']{ --chevron-color: var(--global-colors-black); --chevron-background-color: var(--global-colors-white); --chevron-background-color-inverse: var(--global-colors-grey100); } .chevron[data-id='d5e2005e']{ --chevron-size: calc(var(--base-font-size) * 4rem) } .icon[data-id='cd671441']{ --icon-size: calc(var(--base-font-size) * 1.6rem); } .wrapper[data-id='83c76f59']{ --wrapper-z-index: 1; --wrapper-bg-color-gradient: none; --wrapper-display-type: grid; } .image[data-id='6b16f934']{ --image-scale: 1; --image-overflow: hidden; --image-object-fit: cover; --image-default-border-radius: 0; } .icon[data-id='eff737c5']{ --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='f2a54660']{ --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='b3e9bbe7']{ --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='ee47de88']{ --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='068282c7']{ --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='2da2aa2c']{ --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='4eb212a9']{ --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='8b25678b']{ --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='dd53004f']{ --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='e6dbdd7c']{ --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='08f20fe3']{ --toggle-color: var(--global-colors-indigo); } .typography[data-id='7a9fa7b8']{ --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='8493b865']{ --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='1ea840e7']{ --toggle-color: var(--global-colors-indigo); } .btn[data-id='e57fbf35']{ --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: calc(var(--base-font-size) * 3rem); --button-padding-vertical: calc(var(--base-font-size) * 1.3rem); --button-padding-horizontal: calc(var(--base-font-size) * 2.4rem); --button-display: inline-flex; --button-width: auto; --button-icon-left-space: calc(var(--base-font-size) * 1rem); --button-icon-right-space: 0; --button-flex-direction: row; } .typography[data-id='086950f8']{ --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='aebec7e8']{ --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: calc(var(--base-font-size) * 3rem); --button-padding-vertical: calc(var(--base-font-size) * 1.3rem); --button-padding-horizontal: calc(var(--base-font-size) * 2.4rem); --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-icon-left-space: calc(var(--base-font-size) * 1rem); --button-icon-right-space: 0; --button-flex-direction: row; } .typography[data-id='51016526']{ --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='10f5bc86']{ --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='5064e356']{ --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: calc(var(--base-font-size) * 3rem); --button-padding-vertical: calc(var(--base-font-size) * 1.3rem); --button-padding-horizontal: calc(var(--base-font-size) * 2.4rem); --button-display: inline-flex; --button-width: auto; --button-icon-left-space: calc(var(--base-font-size) * 1rem); --button-icon-right-space: 0; --button-flex-direction: row; } .typography[data-id='2bd3704f']{ --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:2159px){ .list[data-id='cdcfd96f']{ --checkmark-top-margin: calc(var(--base-font-size) * 0.1rem); } .list[data-id='69edd21c']{ --checkmark-top-margin: calc(var(--base-font-size) * 0.1rem); } .list[data-id='3db79d82']{ --checkmark-top-margin: calc(var(--base-font-size) * 0.1rem); } } .wrapper[data-id='710d91cf']{ --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='16ddbb72']{ --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='18d351cb']{ --column-width: 9; --column-hide: flex; --column-position: unset; --column-space-between: unset; } .block-columns[data-id='386b79e8']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='c8335eff']{ --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='a87237b4']{ --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='5f9a1698']{ --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='0571ef1f']{ --column-width: 3; --column-offset: 1; --column-vertical-align: flex-end; --column-hide: flex; --column-position: unset; --column-space-between: unset; } .wrapper[data-id='eaac0eab']{ --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='a0b64beb']{ --column-width: 11; --column-offset: 4; --column-hide: flex; --column-position: unset; --column-space-between: unset; } .block-columns[data-id='b9e7fecb']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='7a51e2c6']{ --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='e5a1b974']{ --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='0cf416ff']{ --column-width: 3; --column-offset: 2; --column-hide: flex; --column-position: unset; --column-space-between: unset; } .block-column[data-id='1df08e98']{ --column-width: 9; --column-hide: flex; --column-position: unset; --column-space-between: unset; } .block-columns[data-id='6098faf1']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='3c1e6f42']{ --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='e808a477']{ --column-width: 3; --column-offset: 2; --column-hide: flex; --column-position: sticky; --column-top-offset: calc(var(--header-height) + calc(var(--base-font-size) * 2rem)); --column-vertical-align: start; --column-space-between: unset; } .wrapper[data-id='aa643b13']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 20; --wrapper-spacing-bottom-in: 50; --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='c33a3667']{ --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='ca44cecc']{ --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='e375f069']{ --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='cfdfdf1e']{ --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='187d2fe9']{ --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='0336cce6']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-bottom: 25; --wrapper-spacing-top-in: 60; --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='afb5925f']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 20; --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='e31d5119']{ --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='15e376d0']{ --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='f8d0f73b']{ --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='0f8175f2']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top: 0; --wrapper-spacing-bottom: 25; --wrapper-spacing-top-in: 60; --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='f7e6866c']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 20; --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='7b155f84']{ --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='cdab59dc']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='e4aad39d']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='db31a12e']{ --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='9e96ad7f']{ --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='32400b35']{ --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='9b22da56']{ --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='4a67e014']{ --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='c9a8b7e6']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-bottom: 0; --wrapper-spacing-top-in: 60; --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='c24f32e4']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='0b8a90e5']{ --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='771b9119']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='f7b3ca6e']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='5d167030']{ --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='bc719171']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='2d149354']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='27526e98']{ --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='484a82db']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='1713823a']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='12a77f78']{ --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='42451e77']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='fc0251f7']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='10fb2681']{ --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='f3de66c4']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='1ce2a7ee']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='40053124']{ --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='bcfecfe7']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='a2a137ae']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top: -20; --wrapper-spacing-bottom: 25; --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='0d2e19cf']{ --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='02c22ab4']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top-in: 60; --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='049ed3b9']{ --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='60a97cd5']{ --column-width: 8; --column-hide: flex; --column-position: unset; --column-space-between: unset; } .block-columns[data-id='0db34d38']{ --columns-vertical-spacing: 0vw; } .wrapper[data-id='703164cc']{ --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='930c589d']{ --wrapper-width: 7; --wrapper-offset: 4; --wrapper-spacing-top: 1; --wrapper-spacing-bottom: 1; --wrapper-spacing-top-in: 1; --wrapper-spacing-bottom-in: 70; --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='b781140a']{ --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='b6a543a5']{ --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='6b8ddb9d']{ --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='ec9739ca']{ --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='c497cf23']{ --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='83c76f59']{ --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='e808a477']{ --column-position: sticky; --column-top-offset: calc(var(--header-height) + calc(var(--base-font-size) * 2rem)); --column-vertical-align: start; } } @media (max-width:1279px){ .wrapper[data-id='710d91cf']{ --wrapper-spacing-bottom-in: 16; } .block-column[data-id='18d351cb']{ --column-width: 14; --column-offset: 1; } .wrapper[data-id='a87237b4']{ --wrapper-spacing-bottom-in: 4; } .block-column[data-id='0571ef1f']{ --column-width: 14; --column-offset: 1; } .block-column[data-id='a0b64beb']{ --column-width: 14; --column-offset: 1; } .block-column[data-id='0cf416ff']{ --column-width: 12; --column-offset: 2; --column-order: 2; --column-hide: none; } .block-column[data-id='1df08e98']{ --column-width: 12; --column-offset: 2; --column-order: 1; } .block-column[data-id='e808a477']{ --column-width: 12; --column-offset: 2; --column-position: unset; } .wrapper[data-id='aa643b13']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='c33a3667']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='e375f069']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='187d2fe9']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0336cce6']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='e31d5119']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='f8d0f73b']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0f8175f2']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='7b155f84']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='cdab59dc']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='db31a12e']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='32400b35']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='4a67e014']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='c9a8b7e6']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='0b8a90e5']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='771b9119']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='5d167030']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bc719171']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='27526e98']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='484a82db']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='12a77f78']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='42451e77']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='10fb2681']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='f3de66c4']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='40053124']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bcfecfe7']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='0d2e19cf']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='02c22ab4']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-top-in: 24; } .wrapper[data-id='049ed3b9']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='60a97cd5']{ --column-width: 12; --column-offset: 2; } .wrapper[data-id='930c589d']{ --wrapper-width: 12; --wrapper-offset: 1; --wrapper-spacing-bottom-in: 70; } .wrapper[data-id='b781140a']{ --wrapper-spacing-top-in: 0; } .wrapper[data-id='ec9739ca']{ --wrapper-spacing-top-in: 4; --wrapper-spacing-bottom-in: 40; } .wrapper[data-id='c497cf23']{ --wrapper-spacing-top-in: 0; } .wrapper[data-id='83c76f59']{ --wrapper-spacing-top-in: 4; --wrapper-spacing-bottom-in: 40; } } @media (max-width:479px){ .wrapper[data-id='710d91cf']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='16ddbb72']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='c8335eff']{ --wrapper-offset: 1; } .wrapper[data-id='a87237b4']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='5f9a1698']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='eaac0eab']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='7a51e2c6']{ --wrapper-offset: 1; } .wrapper[data-id='e5a1b974']{ --wrapper-width: 12; --wrapper-offset: 1; } .block-column[data-id='0cf416ff']{ --column-hide: none; } .wrapper[data-id='3c1e6f42']{ --wrapper-offset: 1; } .block-column[data-id='e808a477']{ --column-position: unset; } .wrapper[data-id='aa643b13']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='c33a3667']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='ca44cecc']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='e375f069']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='cfdfdf1e']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='187d2fe9']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0336cce6']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='afb5925f']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='e31d5119']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='15e376d0']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='f8d0f73b']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0f8175f2']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='f7e6866c']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='7b155f84']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='cdab59dc']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='e4aad39d']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='db31a12e']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='9e96ad7f']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='32400b35']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='9b22da56']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='4a67e014']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='c9a8b7e6']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='c24f32e4']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0b8a90e5']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='771b9119']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='f7b3ca6e']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='5d167030']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bc719171']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='2d149354']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='27526e98']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='484a82db']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='1713823a']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='12a77f78']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='42451e77']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='fc0251f7']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='10fb2681']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='f3de66c4']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='1ce2a7ee']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='40053124']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='bcfecfe7']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='a2a137ae']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='0d2e19cf']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='02c22ab4']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='049ed3b9']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='703164cc']{ --wrapper-offset: 1; } .wrapper[data-id='930c589d']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='b781140a']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='ec9739ca']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='c497cf23']{ --wrapper-width: 12; --wrapper-offset: 1; } .wrapper[data-id='83c76f59']{ --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-9f8518e5de2e9481b36e.js?ver=20241121151712.11956160953" 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=\"f65f7665\"\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-7eb600a1824877250da2.js?ver=5.1.8" id="eightshift-forms-block-frontend-scripts-js"></script> <script src="https://productive.io/engineering/wp-content/themes/productive/public/application-4bdf92b622426c75c09b.js?ver=20241121151712.11956160953" id="Productive-scripts-js"></script> <script>var rocket_beacon_data = {"ajax_url":"https:\/\/productive.io\/engineering\/wp-admin\/admin-ajax.php","nonce":"ade12b823a","url":"https:\/\/productive.io\/engineering\/pull-requests-the-good-the-bad-and-really-not-that-ugly","is_mobile":false,"width_threshold":1600,"height_threshold":700,"delay":500,"debug":null,"status":{"atf":true,"lrc":true},"elements":"img, video, picture, p, main, div, li, svg, section, header, span","lrc_threshold":1800}</script><script data-name="wpr-wpr-beacon" src='https://productive.io/engineering/wp-content/plugins/wp-rocket/assets/js/wpr-beacon.min.js' async></script></body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me -->