1<!DOCTYPE html> 2 3<html class="no-js" lang="en-US"> 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" > 7 <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 8 <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> 9 10 <!-- This site is optimized with the Yoast SEO plugin v26.1.1 - https://yoast.com/wordpress/plugins/seo/ --> 11 <title>Nylas: Email, Calendar, Meeting Intelligence API & AI Agent Accounts</title> 12 <meta name="description" content="Nylas API lets you integrate with 250+ email, calendar and meeting providers (including Gmail, Microsoft, IMAP, Zoom and others) in 5 minutes. We also provide agent accounts for giving unique identities to your AI Agents under the same API platform." /> 13 <link rel="canonical" href="https://www.nylas.com/" /> 14 <meta property="og:locale" content="en_US" /> 15 <meta property="og:type" content="website" /> 16 <meta property="og:title" content="Nylas: Email, Calendar, Meeting Intelligence API & AI Agent Accounts" /> 17 <meta property="og:description" content="Nylas API lets you integrate with 250+ email, calendar and meeting providers (including Gmail, Microsoft, IMAP, Zoom and others) in 5 minutes. We also provide agent accounts for giving unique identities to your AI Agents under the same API platform." /> 18 <meta property="og:url" content="https://www.nylas.com/" /> 19 <meta property="og:site_name" content="Nylas" /> 20 <meta property="article:modified_time" content="2026-09-22T17:32:42+00:00" /> 21 <meta property="og:image" content="https://www.nylas.com/wp-content/uploads/nylas-1.png" /> 22 <meta property="og:image:width" content="1920" /> 23 <meta property="og:image:height" content="1005" /> 24 <meta property="og:image:type" content="image/png" /> 25 <meta name="twitter:card" content="summary_large_image" /> 26 <meta name="twitter:site" content="@nylas" /> 27 <!-- / Yoast SEO plugin. --> 28 29 30<link rel='dns-prefetch' href='//www.google.com' /> 31<link rel='dns-prefetch' href='//fonts.googleapis.com' />
32<script type="text/javascript"> 33/* <![CDATA[ */ 34window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.nylas.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.10"}}; 35/*! This file is auto-generated */ 36!function(s,n){var o,i,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),a=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===a[t]})}function u(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);for(var n=e.getImageData(16,16,1,1),a=0;a<n.data.length;a++)if(0!==n.data[a])return!1;return!0}function f(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\udedf")}return!1}function g(e,t,n,a){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):s.createElement("canvas"),o=r.getContext("2d",{willReadFrequently:!0}),i=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(function(e){i[e]=t(o,e,n,a)}),i}function t(e){var t=s.createElement("script");t.src=e,t.defer=!0,s.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",i=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){s.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+g.toString()+"("+[JSON.stringify(i),f.toString(),p.toString(),u.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"}),r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=function(e){c(n=e.data),r.terminate(),t(n)})}catch(e){}c(n=g(i,f,p,u))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); 37/* ]]> */ 38</script>
38 39<style id='wp-emoji-styles-inline-css' type='text/css'> 40 41 img.wp-smiley, img.emoji { 42 display: inline !important; 43 border: none !important; 44 box-shadow: none !important; 45 height: 1em !important; 46 width: 1em !important; 47 margin: 0 0.07em !important; 48 vertical-align: -0.1em !important; 49 background: none !important; 50 padding: 0 !important; 51 } 52</style> 53<link rel='stylesheet' id='wp-block-library-css' href='https://www.nylas.com/wp-includes/css/dist/block-library/style.min.css?ver=6.8.10' type='text/css' media='all' /> 54<style id='classic-theme-styles-inline-css' type='text/css'> 55/*! This file is auto-generated */ 56.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 57</style> 58<style id='acf-nylas-pricing-hero-style-inline-css' type='text/css'> 59.ny-pricing-hero { 60 --ny-pricing-black: #000000; 61 --ny-pricing-white: #ffffff; 62 --ny-pricing-teal: #0b9b8a; 63 --ny-pricing-teal-text: #16A392; 64 --ny-pricing-teal-bright: #39dac7; 65 --ny-pricing-card-border: #404040; 66 --ny-pricing-muted-dark: rgba(255, 255, 255, 0.7); 67 --ny-pricing-muted-light: rgba(0, 0, 0, 1); 68 --ny-pricing-heading: "Manrope", "Poppins", -apple-system, BlinkMacSystemFont, sans-serif; 69 --ny-pricing-body: "Inter", "Poppins", -apple-system, BlinkMacSystemFont, sans-serif; 70 position: relative; 71 isolation: isolate; 72 overflow: hidden; 73 background: var(--ny-pricing-black); 74 color: var(--ny-pricing-white); 75 font-family: var(--ny-pricing-body); 76 line-height: 1.45; 77 padding-block: clamp(28px, 4vw, 44px) clamp(72px, 8vw, 120px) !important; 78 -webkit-font-smoothing: antialiased; 79} 80 81.ny-pricing-hero *, 82.ny-pricing-hero *::before, 83.ny-pricing-hero *::after { 84 box-sizing: border-box; 85} 86 87 88.ny-pricing-hero::before{ 89 content: ""; 90 position: absolute; 91 top: -22%; left: -12%; 92 width: 70%; height: 95%; 93 background: radial-gradient(closest-side, rgba(57,218,199,.42), rgba(34,160,150,.16) 55%, transparent 78%); 94 filter: blur(10px); 95 pointer-events: none; z-index: 0; 96} 97.ny-pricing-hero::after{ 98 content: ""; 99 position: absolute; 100 top: -18%; right: -14%; 101 width: 60%; height: 80%; 102 background: radial-gradient(closest-side, rgba(36,110,140,.28), transparent 72%); 103 filter: blur(24px); 104 pointer-events: none; z-index: 0; 105} 106 107.ny-pricing-hero::before{animation: ny-pricing-hero-aurora 16s ease-in-out infinite;} 108@keyframes ny-pricing-hero-aurora { 0%, 100% { transform: translate3d(0,0,0) scale(1); opacity: .92; } 50% { transform: translate3d(4%, 3%, 0) scale(1.07); opacity: 1; } } 109 110 111.ny-pricing-hero :where(h1, h2, h3, p, ul) { 112 margin: 0; 113 padding: 0; 114} 115 116.ny-pricing-hero :where(ul) { 117 list-style: none; 118} 119 120.ny-pricing-hero :where(a) { 121 color: inherit; 122 text-decoration: none; 123} 124 125.ny-pricing-hero :where(button) { 126 border: 0; 127 font: inherit; 128} 129 130.ny-pricing-hero__container { 131 width: min(100% - clamp(32px, 8vw, 80px), 1280px); 132 margin-inline: auto; 133} 134 135.ny-pricing-hero__back { 136 display: inline-flex; 137 align-items: center; 138 gap: 8px; 139 min-height: 42px; 140 aspect-ratio: 1 / 1; 141 padding: 8px 12px 8px 8px; 142 border-radius: 999px; 143 color: rgba(255, 255, 255, 0.82); 144 font-size: 0.875rem; 145 font-weight: 500; 146 transition: color 180ms ease, background-color 180ms ease, transform 180ms ease; 147} 148 149.ny-pricing-hero__back svg { 150 width: 28px; 151 height: 28px; 152} 153 154.ny-pricing-hero__back:hover, 155.ny-pricing-hero__back:focus-visible { 156 background: rgba(255, 255, 255, 0.09); 157 color: var(--ny-pricing-white); 158 transform: translateX(-3px); 159} 160 161.ny-pricing-hero__back:focus-visible, 162.ny-pricing-card__cta:focus-visible, 163.ny-pricing-card__help:focus-visible, 164.ny-pricing-hero .ny-pricing-switch__option:focus-visible { 165 outline: 2px solid var(--ny-pricing-teal-bright); 166 outline-offset: 3px; 167} 168 169.ny-pricing-hero__header { 170 max-width: 860px; 171 margin: 0 auto clamp(42px, 6vw, 50px); 172 text-align: center; 173 174 animation: ny-pricing-hero-fade-up .6s cubic-bezier(.22, .61, .36, 1) backwards; 175} 176 177.ny-pricing-hero__title { 178 color: var(--ny-pricing-white); 179 font-family: var(--ny-pricing-heading); 180 font-size: clamp(1.9rem, 4.4vw, 3.125rem); 181 font-weight: 500; 182 letter-spacing: 0; 183 line-height: 1.25; 184} 185 186.ny-pricing-hero__subtitle { 187 margin: 6px auto 0; 188 color: var(--ny-pricing-white); 189 font-size: 1rem; 190 line-height: 1.5; 191} 192 193.ny-pricing-hero__cards { 194 display: grid; 195 grid-template-columns: repeat(auto-fit, minmax(min(100%, 265px), 1fr)); 196 align-items: stretch; 197 gap: 15px; 198} 199 200.ny-pricing-card { 201 position: relative;
202 display: flex; 203 min-width: 0; 204 min-height: 100%; 205 flex-direction: column; 206 padding: clamp(20px, 2.4vw, 28px); 207 border: 1px solid var(--ny-pricing-card-border); 208 border-radius: 6px; 209 background: rgba(0, 0, 0, 0.78); 210 color: var(--ny-pricing-white); 211 box-shadow: 0 18px 44px -32px rgba(57, 218, 199, 0.5); 212 transition: transform 220ms ease, border-color 220ms ease, box-shadow 220ms ease; 213 214 animation: ny-pricing-hero-fade-up .5s cubic-bezier(.22, .61, .36, 1) backwards; 215} 216 217.ny-pricing-card:nth-child(1){ animation-delay: .14s; } 218.ny-pricing-card:nth-child(2){ animation-delay: .21s; } 219.ny-pricing-card:nth-child(3){ animation-delay: .28s; } 220.ny-pricing-card:nth-child(4){ animation-delay: .35s; } 221 222.ny-pricing-card:hover { 223 transform: translateY(-5px); 224 border-color: rgba(57, 218, 199, 0.62); 225 box-shadow: 0 26px 52px -30px rgba(57, 218, 199, 0.66); 226} 227 228.ny-pricing-card.is-enterprise { 229 border-color: #d8d8d8; 230 background: #fafafa; 231 color: #000000; 232 box-shadow: 0 20px 44px -30px rgba(0, 0, 0, 0.42); 233} 234 235.ny-pricing-card.has-badge { 236 position: relative; 237} 238 239.ny-pricing-card.has-badge::before { 240 content: ''; 241 position: absolute; 242 z-index: 0; 243 inset: 0px; 244 border-radius: inherit; 245 padding: 1px; 246 247 background: linear-gradient(13.89deg, #404040 -2.04%, #0b9b8a 86.59%); 248 -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); 249 mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); 250 -webkit-mask-composite: xor; 251 mask-composite: exclude; 252 pointer-events: none; 253 254 /* border: 1px solid transparent; 255 border-image: linear-gradient(13.89deg, #404040 -2.04%, #0b9b8a 86.59%) 1; */ 256} 257 258.ny-pricing-card__badge { 259 position: absolute; 260 z-index: 2; 261 top: -12px; 262 left: 10%; 263 max-width: calc(100% - 24px); 264 min-width: 120px; 265 /* transform: translateX(-50%); */ 266 border-radius: 4px; 267 background: #0b9b8a; 268 color: #ffffff; 269 font-size: 0.75rem; 270 font-weight: 600; 271 line-height: 1.25; 272 padding: 3px 12px; 273 text-align: center; 274} 275 276.ny-pricing-card__head { 277 min-height: 64px; 278} 279 280.ny-pricing-card__title-wrap { 281 display: flex; 282 flex-direction: row; 283 justify-content: space-between; 284 align-items: center; 285 flex-wrap: wrap; 286} 287 288.ny-pricing-card__title, 289.ny-pricing-card__head h2 { 290 color: inherit; 291 font-family: var(--ny-pricing-heading); 292 font-size: 1.625rem; 293 font-weight: 600; 294 letter-spacing: 0; 295 line-height: 1.2; 296} 297 298.ny-pricing-card__description { 299 margin-top: 16px !important; 300 color: var(--ny-pricing-white); 301 font-size: 0.875rem; 302 line-height: 1.25; 303} 304 305.ny-pricing-card.is-enterprise .ny-pricing-card__description { 306 color: var(--ny-pricing-muted-light); 307} 308 309.ny-pricing-card__billing { 310 display: flex; 311 flex-direction: column; 312 align-items: flex-end; 313 justify-content: flex-end; 314 gap: 7px; 315 316 position: relative; 317 margin-left: auto; 318} 319 320.ny-pricing-card__annual-badge { 321 display: inline-flex; 322 max-width: 100%; 323 border-radius: 4px; 324 background: #0b9b8acc; 325 color: #ffffff; 326 font-size: 0.625rem; 327 font-weight: 500; 328 line-height: 1.25; 329 padding: 4px 4px; 330 text-align: right; 331 332 position: absolute; 333 z-index: 5; 334 top: -16px; 335 right: -10px; 336} 337 338.ny-pricing-hero .ny-pricing-switch { 339 position: relative; 340 display: inline-grid; 341 grid-template-columns: 1fr 1fr; 342 gap: 0; 343 min-width: 130px; 344 padding: 3px; 345 border-radius: 30px; 346 background: #484848; 347 color: #ffffff; 348 cursor: pointer; 349 box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05); 350} 351 352.ny-pricing-hero .ny-pricing-switch__option { 353 font-family: var(--ny-pricing-body); 354 position: relative; 355 z-index: 1; 356 min-width: 0; 357 width: 100%; 358 min-height: 26px; 359 padding: 5px 7px; 360 border-radius: 30px; 361 background: transparent; 362 color: #ffffff; 363 cursor: pointer; 364 font-size: 0.75rem; 365 font-weight: 500; 366 line-height: 1; 367 transition: color 220ms ease, transform 180ms ease; 368} 369 370.ny-pricing-hero .ny-pricing-switch__option:not(.is-active):hover { 371 background: rgba(255, 255, 255, 0.11); 372} 373 374.ny-pricing-hero .ny-pricing-switch__option.is-active { 375 color: #0a0a0a; 376} 377 378.ny-pricing-hero .ny-pricing-switch::before { 379 position: absolute; 380 z-index: 0; 381 top: 3px; 382 left: 3px; 383 width: calc(50% - 3px); 384 height: calc(100% - 6px); 385 border-radius: 30px; 386 background: #ffffff; 387 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.22); 388 content: ""; 389 transform: translateX(0); 390 transition: transform 300ms cubic-bezier(0.22, 0.61, 0.36, 1); 391} 392 393.ny-pricing-hero .ny-pricing-switch[data-active-period="annual"]::before { 394 transform: translateX(100%); 395} 396 397.ny-pricing-hero .ny-pricing-switch__option:active { 398 transform: scale(0.97); 399} 400 401.ny-pricing-card__price { 402 min-height: 56px; 403 margin-top: 24px !important; 404 font-family: var(--ny-pricing-heading); 405 line-height: 1; 406} 407 408.ny-pricing-card__price > span { 409 display: inline-flex; 410 align-items: baseline; 411 gap: 5px; 412} 413 414.ny-pricing-card__price-value { 415 font-family: var(--ny-pricing-body); 416 font-size: 2.25rem; 417 font-weight: 600; 418 letter-spacing: 0; 419} 420 421.ny-pricing-card__price-period { 422 color: var(--ny-pricing-muted-dark); 423 font-family: var(--ny-pricing-body); 424 font-size: 1rem; 425} 426 427.ny-pricing-card__price-description { 428 min-height: 20px; 429 margin-top: 8px; 430 color: var(--ny-pricing-muted-dark); 431 font-size: 0.75rem; 432 line-height: 1.45; 433} 434 435.ny-pricing-card.is-enterprise .ny-pricing-card__price-description { 436 color: var(--ny-pricing-muted-light); 437} 438 439.ny-pricing-card.is-enterprise .ny-pricing-card__price-period { 440 color: var(--ny-pricing-muted-light); 441} 442 443.ny-pricing-card__cta-wrap { 444 margin-top: 22px; 445 min-height: 76px; 446} 447 448.ny-pricing-card__cta { 449 position: relative;
450 display: flex; 451 min-height: 48px; 452 align-items: center; 453 justify-content: center; 454 overflow: hidden; 455 width: 100%; 456 border: 1px solid #535353; 457 border-radius: 999px; 458 background: #ffffff; 459 color: #000000 !important; 460 font-size: 0.9375rem; 461 font-weight: 600 !important; 462 padding: 12px 18px; 463 text-align: center; 464 transition: transform 180ms ease, box-shadow 180ms ease, opacity 180ms ease; 465} 466 467.ny-pricing-card.is-enterprise .ny-pricing-card__cta { 468 background: #000000; 469 color: #ffffff !important; 470} 471 472.ny-pricing-card__cta::after { 473 position: absolute; 474 inset: 0 auto 0 -70%; 475 width: 55%; 476 background: linear-gradient(100deg, transparent, rgba(57, 218, 199, 0.48), transparent); 477 content: ""; 478 transform: skewX(-18deg); 479 transition: left 620ms cubic-bezier(0.22, 0.61, 0.36, 1); 480} 481 482.ny-pricing-card__cta:hover { 483 transform: translateY(-2px); 484 box-shadow: 0 10px 20px -12px rgba(0, 0, 0, 0.8); 485} 486 487.ny-pricing-card__cta:hover::after { 488 left: 125%; 489} 490 491.ny-pricing-card__cta.is-disabled { 492 cursor: not-allowed; 493 opacity: 0.58; 494} 495 496.ny-pricing-card__cta-description { 497 margin-top: 8px; 498 color: var(--ny-pricing-muted-dark); 499 font-size: 0.75rem; 500 line-height: 1.5; 501 text-align: center; 502} 503 504.ny-pricing-card.is-enterprise .ny-pricing-card__cta-description { 505 color: var(--ny-pricing-muted-light); 506} 507 508.ny-pricing-card__features { 509 display: flex; 510 flex-direction: column; 511 gap: 2px; 512 margin-top: 8px; 513} 514 515.ny-pricing-card.is-enterprise .ny-pricing-card__features { 516 border-top-color: rgba(0, 0, 0, 0.12); 517} 518 519.ny-pricing-card__features-label, 520.ny-pricing-card__feature-title { 521 color: inherit; 522 font-size: 0.875rem; 523 font-weight: 500; 524} 525 526.ny-pricing-card__features-label { 527 margin-bottom: .4rem; 528} 529 530.ny-pricing-card.is-enterprise .ny-pricing-card__features-label { 531 margin-bottom: 0rem; 532} 533 534 535.ny-pricing-card__feature-title { 536 color: var(--ny-pricing-teal-text); 537 line-height: 1.25; 538} 539 540.ny-pricing-card__feature-group { 541 display: flex; 542 flex-direction: column; 543 gap: 4px; 544} 545 546.ny-pricing-card__feature-description { 547 color: var(--ny-pricing-muted-dark); 548 font-size: 0.75rem; 549 line-height: 1.45; 550} 551 552.ny-pricing-card.is-enterprise .ny-pricing-card__feature-description { 553 color: var(--ny-pricing-muted-light); 554} 555 556.ny-pricing-card__feature-list { 557 display: flex; 558 flex-direction: column; 559 gap: 11px; 560 margin: 5px 0; 561} 562 563.ny-pricing-card__feature-item { 564 display: flex; 565 align-items: flex-start; 566 gap: 10px; 567 color: var(--ny-pricing-white); 568 font-size: 0.875rem; 569 line-height: 1.45; 570 /* text-wrap-style: pretty; */ 571} 572 573.ny-pricing-card.is-enterprise .ny-pricing-card__feature-item { 574 color: var(--ny-pricing-muted-light); 575} 576 577.ny-pricing-card__feature-icon { 578 display: inline-flex; 579 width: 20px; 580 height: 20px; 581 flex: 0 0 20px; 582 align-items: center; 583 justify-content: center; 584 color: var(--ny-pricing-white); 585} 586 587.ny-pricing-card.is-enterprise .ny-pricing-card__feature-icon { 588 color: #000000; 589} 590 591.ny-pricing-card__feature-icon svg, 592.ny-pricing-card__feature-image { 593 display: block; 594 width: 20px; 595 height: 20px; 596 object-fit: contain; 597} 598 599.ny-pricing-card__feature-text { 600 display: inline; 601} 602 603.ny-pricing-card__help { 604 display: inline-flex; 605 width: 15px; 606 height: 15px; 607 flex: 0 0 auto; 608 align-items: center; 609 justify-content: center; 610 margin-left: 4px; 611 border: 1px solid rgba(255, 255, 255, 0.45); 612 border-radius: 50%; 613 background: transparent; 614 color: rgba(255, 255, 255, 0.72); 615 cursor: help; 616 font-size: 0.625rem; 617 font-weight: 700; 618 line-height: 1; 619 vertical-align: 1px; 620 transition: color 160ms ease, border-color 160ms ease, transform 160ms ease; 621} 622 623.ny-pricing-card.is-enterprise .ny-pricing-card__help { 624 border-color: #b8bec5; 625 color: #8b949e; 626} 627 628.ny-pricing-card__help:hover, 629.ny-pricing-card__help[aria-expanded="true"] { 630 border-color: var(--ny-pricing-teal-bright); 631 color: var(--ny-pricing-teal-bright); 632 transform: scale(1.08); 633} 634 635.ny-pricing-card.is-enterprise .ny-pricing-card__help:hover, 636.ny-pricing-card.is-enterprise .ny-pricing-card__help[aria-expanded="true"] { 637 border-color: var(--ny-pricing-teal); 638 color: var(--ny-pricing-teal); 639} 640 641.ny-pricing-tooltip { 642 position: fixed; 643 z-index: 100000; 644 max-width: min(300px, calc(100vw - 24px)); 645 padding: 10px 12px; 646 border-radius: 8px; 647 background: #111418; 648 box-shadow: 0 12px 30px rgba(0, 0, 0, 0.26); 649 color: #ffffff; 650 font-family: "Inter", "Poppins", -apple-system, BlinkMacSystemFont, sans-serif; 651 font-size: 0.8125rem; 652 font-weight: 400; 653 line-height: 1.5; 654 opacity: 0; 655 pointer-events: none; 656 transform: translateY(4px) scale(0.98); 657 transition: opacity 140ms ease, transform 140ms ease; 658 visibility: hidden; 659} 660 661.ny-pricing-tooltip.is-visible { 662 opacity: 1; 663 transform: translateY(0) scale(1); 664 visibility: visible; 665} 666 667.ny-pricing-tooltip::after { 668 position: absolute; 669 left: var(--ny-pricing-tooltip-arrow, 50%); 670 border: 6px solid transparent; 671 content: ""; 672 transform: translateX(-50%); 673} 674 675.ny-pricing-tooltip.is-above::after { 676 top: 100%; 677 border-top-color: #111418; 678} 679 680.ny-pricing-tooltip.is-below::after { 681 bottom: 100%; 682 border-bottom-color: #111418; 683} 684 685.ny-pricing-block-notice { 686 margin: 16px 0; 687 padding: 14px 16px; 688 border-left: 4px solid #0b9b8a; 689 background: #ffffff; 690 color: #0a0a0a; 691} 692 693@media (max-width: 720px) { 694 .ny-pricing-hero__container { 695 width: min(100% - 32px, 1280px); 696 } 697 698 .ny-pricing-hero__back span { 699 position: absolute; 700 width: 1px; 701 height: 1px; 702 overflow: hidden; 703 clip: rect(0 0 0 0); 704 clip-path: inset(50%); 705 white-space: nowrap; 706 } 707 708 .ny-pricing-card__head { 709 min-height: 0; 710 } 711 712 .ny-pricing-hero__title { 713 font-size: 2.5rem; 714 } 715 716 .ny-pricing-hero__subtitle { 717 font-size: 1rem; 718 } 719 720 .ny-pricing-card__title, 721 .ny-pricing-card__head h2 { 722 font-size: 1.35rem; 723 } 724 725 .ny-pricing-card__price-value { 726 font-size: 2.15rem; 727 } 728} 729 730@media (prefers-reduced-motion: reduce) { 731 .ny-pricing-hero::before, 732 .ny-pricing-hero::after, 733 .ny-pricing-hero *, 734 .ny-pricing-hero *::before, 735 .ny-pricing-hero *::after, 736 .ny-pricing-tooltip { 737 animation-duration: 0.01ms !important; 738 animation-iteration-count: 1 !important; 739 scroll-behavior: auto !important; 740 transition-duration: 0.01ms !important; 741 } 742} 743 744.ny-pricing-hero *[hidden] {
745 display: none !important; 746} 747 748 749@keyframes ny-pricing-hero-fade-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } } 750</style> 751<link rel='stylesheet' id='acf-nylas-pricing-comparison-style-css' href='https://www.nylas.com/wp-content/themes/nylas/template-parts/blocks/pricing-comparison/style.css?ver=1.0.2' type='text/css' media='all' /> 752<link rel='stylesheet' id='podcast-archive-css' href='https://www.nylas.com/wp-content/plugins/nylas-podcasts/blocks/podcast-archive/style.css?ver=1747071323' type='text/css' media='all' /> 753<style id='global-styles-inline-css' type='text/css'> 754:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
754--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
754.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 755:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} 756:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} 757:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} 758</style> 759<link rel='stylesheet' id='tabs-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/tabs.css?ver=6.8.10' type='text/css' media='all' /> 760<link rel='stylesheet' id='aos-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/aos.css?ver=6.8.10' type='text/css' media='all' /> 761<link rel='stylesheet' id='style-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/build/css/styles.css?ver=1781049796.1234114' type='text/css' media='all' /> 762<link rel='stylesheet' id='google-fonts-inter-poppins-css' href='https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@400;500;600&display=swap' type='text/css' media='all' /> 763<link rel='stylesheet' id='header-figma-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/header-figma.css?ver=1781220009.31174' type='text/css' media='all' /> 764<link rel='stylesheet' id='google-fonts-manrope-css' href='https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap' type='text/css' media='all' /> 765<link rel='stylesheet' id='homepage-2025-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/homepage-2025.css?ver=1781015735.58744' type='text/css' media='all' /> 766<link rel='stylesheet' id='tablepress-default-css' href='https://www.nylas.com/wp-content/tablepress-combined.min.css?ver=9' type='text/css' media='all' /> 767<link rel='stylesheet' id='enlighterjs-css' href='https://www.nylas.com/wp-content/plugins/enlighter/cache/enlighterjs.min.css?ver=nBGpNqTfHqCvwcY' type='text/css' media='all' />
768<script type="text/javascript" src="https://www.nylas.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
vendor: 1 bytes, line 768
768
769<script type="text/javascript" src="https://www.nylas.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
769 770<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.nylas.com/xmlrpc.php?rsd" /> 771<meta name="generator" content="WordPress 6.8.10" /> 772<link rel='shortlink' href='https://www.nylas.com/' /> 773<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.nylas.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.nylas.com%2F" /> 774<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.nylas.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.nylas.com%2F&format=xml" /> 775<meta name="generator" content="Redux 4.5.15" /><!-- HubSpot WordPress Plugin v11.3.75: embed JS disabled as a portalId has not yet been configured --> 776<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin /> 777<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 778<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin /> 779<meta name="generator" content="Elementor 4.3.1; features: e_font_icon_svg, additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-swap"> 780 781<!-- Schema & Structured Data For WP v1.66 - -->
782<script type="application/ld+json" class="saswp-schema-markup-output"> 783[{"@context":"https:\/\/schema.org\/","@type":"WebSite","@id":"https:\/\/www.nylas.com#website","headline":"Nylas","name":"Nylas","url":"https:\/\/www.nylas.com","description":"Nylas API lets you integrate with 250+ email, calendar and meeting providers (including Gmail, Microsoft, IMAP, Zoom and others) in 5 minutes. We also provide agent accounts for giving unique identities to your AI Agents under the same API platform.","potentialAction":{"@type":"SearchAction","target":"https:\/\/www.nylas.com?s={search_term_string}","query-input":"required name=search_term_string"}}, 784 785{"@context":"https:\/\/schema.org\/","@type":"Organization","@id":"https:\/\/www.nylas.com#Organization","name":"Nylas","url":"https:\/\/www.nylas.com","sameAs":[]}] 786</script>
786 787 788 <style> 789 .e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload), 790 .e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) * { 791 background-image: none !important; 792 } 793 @media screen and (max-height: 1024px) { 794 .e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload), 795 .e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) * { 796 background-image: none !important; 797 } 798 } 799 @media screen and (max-height: 640px) { 800 .e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload), 801 .e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) * { 802 background-image: none !important; 803 } 804 } 805 </style> 806 <link rel="icon" href="https://www.nylas.com/wp-content/uploads/favicon-1-150x150.png" sizes="32x32" /> 807<link rel="icon" href="https://www.nylas.com/wp-content/uploads/favicon-1-300x300.png" sizes="192x192" /> 808<link rel="apple-touch-icon" href="https://www.nylas.com/wp-content/uploads/favicon-1-300x300.png" /> 809<meta name="msapplication-TileImage" content="https://www.nylas.com/wp-content/uploads/favicon-1-300x300.png" /> 810 <style type="text/css" id="wp-custom-css"> 811 @import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;600;700;800&display=swap'); 812 813 814/*Temp styles for phase 1a*/ 815.page-template-template-casestudy h6 { 816 color:white; 817} 818#blog-subscribe-container .mktoForm #Email::-webkit-input-placeholder { 819 color:white; 820} 821#blog-subscribe-container .mktoForm #Email::-moz-placeholder { 822 color:white; 823} 824#blog-subscribe-container .mktoForm #Email:-ms-input-placeholder { 825 color:white; 826} 827#blog-subscribe-container .mktoForm #Email::-ms-input-placeholder { 828 color:white; 829} 830#blog-subscribe-container .mktoForm #Email::placeholder { 831 color:white; 832} 833 834#blog-subscribe-container .mktoForm #Email{ 835 color:white; 836} 837#blog-subscribe-container .mktoForm .mktoError .mktoErrorMsg { 838 color:white!important; 839} 840 841.page-template-template-solutions{ 842 margin-top:50px; 843 border-top:solid thin transparent; 844} 845 846.page-template-template-form-gated .form-header { 847 background:white!important; 848} 849 850.press-release-single { 851 background-color:#f7f7f7; 852} 853 854 855 856@media screen and (max-width:700px){ 857 858 .page-template-template-roi .company_sizes__ul { 859 margin-top:15px!important; 860 flex-direction:row!important; 861 flex-wrap:wrap!important; 862 } 863 .page-template-template-roi .company_sizes__ul li{ 864 margin:15px!important; 865 } 866 .page-template-template-roi .roi-calculator__button{ 867 margin-bottom:50px!important; 868 } 869 870 .main-nav #menu-item-10434 .main-menu-drop { 871 width: 100% 872} 873 874} 875 876/*Stycky TOC for Evergreen Template */ 877 878.page-template-template-everngreen .sticky-element-inner { 879 position:sticky; 880 top:66px; 881} 882 883.page-template-template-everngreen .sticky-element { 884 885 align-self:stretch; 886 887} 888 889.page-template-template-everngreen .sticky-element-wrap-css { 890 891position:relative; 892 893} 894 895.page-template-template-everngreen .main--no-padding, .page-template-template-everngreen .wrapper { 896 897 overflow:visible; 898} 899 900 .no-touch .main-header-links .menu-item-12073 a:not(.button-link):hover { 901 902 color:#fff; 903} 904 905li#menu-item-12073 { 906 padding: 10px 0px; 907} 908 909.menu-item-12073 a{ 910 911padding: 10px 30px; 912 913} 914 915.section-light-blue { 916 917 background-color: #f6f8fd; 918} 919 920.page-id-9569 .newsroom-liked-section .wave, .page-id-9962 .newsroom-liked-section .wave { 921 922 display:none; 923} 924 925section.use-case-product--module .heading-wrap small { 926 font-size: 16px; 927} 928 929@media screen and (min-width: 1200px) { 930section.hero-section .breadcrumbs-wrap { 931 top: 100px; 932 933} 934} 935 936.hs-button:hover { 937background: #fff !important; 938border: 1px solid #4169e1 !important; 939color: #4169e1 !important; 940cursor: pointer; 941} 942.hs-button { 943border: 1px solid #4169e1 !important; 944} 945 946/* API Guide */ 947 948.apig-page-content h1 { 949 950 color: #293056 !important; 951 952} 953 954.apig-page-content h2 { 955 956 border-bottom: 2px solid #DDE0EE; 957 width: fit-content; 958color: #293056 !important; 959margin-top: 40px; 960 961} 962 963.agip-code-module.developer-api-prod--module .heading-wrap h2, .product-promo-banner h2 { 964 border: none; 965 padding: 0; 966 margin-top: 0; 967} 968 969.apig-page-content ul li { 970 971 padding-bottom: 10px; 972 973} 974 975.apig-page-content ul { 976 977 padding-top: 10px; 978 979} 980 981.apig-menu-content ul a { 982 padding: .6rem .5rem; 983} 984 985@media screen and (max-width:800px){ 986 987 988 .main-nav #menu-item-10434 .main-menu-drop { 989 width: 100% 990} 991 .template--use-case-lander .nylas-buttons { 992 display: grid 993} 994 .nylas-button.nylas-button--arrow { 995 margin:auto; 996 } 997 998} 999 1000 .main-nav .drop-menu-list p { 1001 font-size: 14px; 1002 1003} 1004 1005.lp-hero-module__banner-info p { 1006 font-size: 16px; 1007 1008} 1009 1010.main-nav .main-nav-columns img { 1011 1012 filter: none; 1013 1014} 1015 1016select#country___hubspot-233f68cd-2d1c-4526-b8aa-dc90d695a52d { 1017 height: 50px !important; 1018 margin: 0px !important; 1019} 1020 1021.apig-header-title .apig-header-icon, .apig-header-title svg 1022 1023{ 1024 width: 50px; 1025 margin-left: 10px; 1026} 1027 1028@media only screen and (min-width: 1024px) { 1029 .press-release-sidebar .share-box { 1030 padding: 20px 20px; 1031 } 1032} 1033 1034.header-featured-content .image { 1035 background-size: contain; 1036} 1037 1038.np-authors.np-desktop { 1039 padding-top: 20px; 1040} 1041 1042.blog-press-release-details-section .press-release-content h2 { 1043 margin: 30px 0; 1044} 1045 1046h2#ready-to-get-started { 1047 margin: 0 0 15px 0; 1048} 1049 1050@media only screen and (min-width: 1200px) { 1051 .leadership-section .team-list .item { 1052 1053 width: calc(25% - 40px); 1054 } 1055} 1056.page-id-44138 .fractal-glass-bar--progress{ 1057 background-color: #1AA780; 1058} 1059.page-id-44138 #agentic-ai-is-already-shipping{ 1060 margin-top: 0; 1061} 1062.home-page-presentation__code{ 1063 z-index:9; 1064} 1065 1066.page-template-template-home-2024 .main-header .menu-header_additional_menu-container + a.button-link { 1067 border-radius: 50px!important; 1068} 1069 1070.page-template-template-email-api-landing-2024 main{ 1071 font-family: Manrope; 1072} 1073 1074.main-nav #menu-item-48802 .item.active .subtitle { 1075 min-height: 0; 1076 margin: 0; 1077 padding: 0; 1078 line-height: 0; 1079} </style> 1080 <style type="text/css" id="c4wp-checkout-css"> 1081 .woocommerce-checkout .c4wp_captcha_field { 1082 margin-bottom: 10px; 1083 margin-top: 15px; 1084 position: relative; 1085 display: inline-block; 1086 } 1087 </style> 1088 <style type="text/css" id="c4wp-v3-lp-form-css"> 1089 .login #login, .login #lostpasswordform { 1090 min-width: 350px !important; 1091 } 1092 .wpforms-field-c4wp iframe { 1093 width: 100% !important; 1094 } 1095 </style> 1096 <!-- 1097 1098
1098<script> 1099 !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="EjY6shL6jO55pw7LuKXETLkhvYAaGuqr";;analytics.SNIPPET_VERSION="4.15.3"; 1100 analytics.load("EjY6shL6jO55pw7LuKXETLkhvYAaGuqr"); 1101 analytics.page(); 1102 }}(); 1103 </script>
1103--> 1104 1105 <!--
1105<script src="https://js.qualified.com/qualified.js?token=C8Zh5jUb7EKvA5Vm"></script>
1105 --> 1106 <!-- Google Tag Manager --> 1107
1107<script>
vendor: 375 bytes, lines 1107-1111
1107(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1108 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1109 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 1110 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1111 })(window,document,'script','dataLayer','
1111GTM-WQ6VGV2
vendor: 3 bytes, line 1111
1111');
1111</script>
1111 1112 <!-- End Google Tag Manager --> 1113 1114 <!-- HOTJAR--> 1115 <!--
1115<script>
vendor: 116 bytes, lines 1115-1118
1115 1116 (function(h,o,t,j,a,r){ 1117 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 1118 h._hjSettings={hjid:
11182683626
vendor: 243 bytes, lines 1118-1124
1118,hjsv:6}; 1119 a=o.getElementsByTagName('head')[0]; 1120 r=o.createElement('script');r.async=1; 1121 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 1122 a.appendChild(r); 1123 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); 1124
1124</script>
1124 --> 1125 <!-- END HOTJAR--> 1126
1126<script> 1127 // (function(w, q) { 1128 // w['QualifiedObject'] = q; 1129 // w[q] = w[q] || function() { 1130 // (w[q].q = w[q].q || []).push(arguments) 1131 // }; 1132 // })(window, 'qualified') 1133 </script>
1133 1134 1135 1136 1137 <meta name="traceparent" content="00-a4007aa92dac122a0000001790239172-a4007aa92dac122a-01"></head> 1138 1139 1140 <body class="home wp-singular page-template-default page page-id-44594 wp-embed-responsive wp-theme-nylas elementor-default elementor-kit-37372"><a href="https://www.nylas.com/cdn-cgi/content?id=QV0FYeY_SG5xF8cwpCWL6b7SFIyij9tk4Dt_6b3bfJk-1790239172.0218601-1.2.1.1-RDByYF9dxC97zy8QgYdJOf1koVeEY5f3dULfVIx102neTOeBJ3XaKjRNHVSWqLm8" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a> 1141 <!-- Google Tag Manager (noscript) -->
vendor: 70 bytes, lines 1141-1142
1141 1142 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1142GTM-WQ6VGV2
vendor: 87 bytes, lines 1142-1144
1142" 1143 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 1144
1144<!-- End Google Tag Manager (noscript) --> 1145 <div class="main-header-box"> 1146 <div class="header-banner-info"> 1147 <div class="main-container"> 1148 <p>Notetaker's biggest update since launch: five new features, live now</p> 1149 <a target="_blank" href="https://www.nylas.com/blog/notetaker-configurations">Read what's new</a> 1150 </div> 1151 <button class="banner-info-close"> 1152 <svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 1153 <path opacity="0.7" 1154 d="M6 4.80001L1.2 0L0 1.2L4.8 6L1.05198e-05 10.8L1.20001 12L6 7.20001L10.8 12L12 10.8L7.2 6L12 1.2L10.8 0L6 4.80001Z" 1155 fill="white"/> 1156 </svg> 1157 </button> 1158 </div> 1159 <header class="main-header "> 1160 <div class="main-header-holder"> 1161 <strong class="main-logo"> 1162 <a href="https://www.nylas.com/"> 1163 <!-- <img src="https://www.nylas.com/wp-content/uploads/main-logo.svg" 1164 alt="Nylas"> --> 1165 <svg width="143" height="40" viewBox="0 0 143 40" fill="none" xmlns="http://www.w3.org/2000/svg"> 1166<g clip-path="url(#clip0_962_839)"> 1167<path d="M142.412 21.2841C142.027 20.5676 141.488 19.9445 140.834 19.459C140.14 18.9509 139.369 18.556 138.55 18.289C137.682 18.0021 136.788 17.7528 135.892 17.5505C134.891 17.3153 133.868 17.0578 132.85 16.7815C131.813 16.5016 130.951 16.1488 130.292 15.7314C130.049 15.6138 129.768 15.3692 129.768 14.8165C129.77 14.5954 129.824 14.3779 129.926 14.1815L129.944 14.1509C130.18 13.8217 130.55 13.5312 131.091 13.262C131.631 12.9927 132.412 12.8633 133.486 12.8633C134.333 12.8633 135.059 12.9809 135.642 13.209C136.164 13.4027 136.649 13.6843 137.075 14.0416C137.431 14.3473 137.737 14.7068 137.982 15.107C138.144 15.3774 138.29 15.6326 138.415 15.8678L142.149 13.4525C141.893 12.8859 141.576 12.3482 141.205 11.8485C140.716 11.1918 140.131 10.6109 139.471 10.1246C138.701 9.56151 137.848 9.12116 136.942 8.81934C135.962 8.4795 134.797 8.30664 133.484 8.30664C131.94 8.30664 130.64 8.51478 129.618 8.924C128.596 9.33322 127.763 9.83533 127.14 10.4104C126.564 10.9286 126.09 11.55 125.743 12.2424C125.464 12.7978 125.249 13.3828 125.102 13.9863C125.075 14.1474 125.046 14.3391 125.017 14.5366C124.991 14.7142 124.977 14.8934 124.976 15.0729C124.976 16.1241 125.24 17.012 125.762 17.7093C126.309 18.4357 126.995 19.0471 127.78 19.5084C128.619 20.0031 129.516 20.3922 130.451 20.6667C131.427 20.9572 132.361 21.2064 133.228 21.4075C134.072 21.611 134.88 21.8179 135.632 22.0237C136.306 22.192 136.948 22.4702 137.531 22.8468C137.984 23.1996 138.209 23.6135 138.209 24.0992C138.218 24.3375 138.167 24.5741 138.061 24.7881C137.955 25.002 137.798 25.1867 137.604 25.3257C137.222 25.601 136.797 25.8126 136.346 25.9524C135.88 26.1033 135.398 26.2023 134.91 26.2476C134.438 26.2923 134.044 26.3146 133.743 26.3146C132.95 26.3308 132.159 26.2394 131.39 26.043C130.845 25.8998 130.322 25.6843 129.834 25.4021C129.479 25.1971 129.16 24.9353 128.89 24.6272C128.722 24.431 128.569 24.2236 128.43 24.0063L128 23.3819L124.271 25.7949C124.613 26.3234 124.983 26.8337 125.38 27.3236C125.928 27.9941 126.57 28.583 127.285 29.0722C128.133 29.6508 129.059 30.105 130.036 30.4209C131.091 30.7737 132.337 30.956 133.739 30.956C134.769 30.9679 135.798 30.8669 136.806 30.6549C137.608 30.4846 138.387 30.2193 139.125 29.8647C139.723 29.5768 140.273 29.1997 140.757 28.7464C141.163 28.3607 141.528 27.9334 141.845 27.4717C142.529 26.4353 142.924 25.2367 142.992 23.9981C142.999 22.9233 142.802 22.0049 142.412 21.2841Z" fill="#4169E1"/> 1168<path d="M54.6917 8.13477C52.1153 8.13788 49.6453 9.15924 47.8235 10.9748C46.0016 12.7904 44.9768 15.252 44.9736 17.8196V30.5113H49.6262V17.8196C49.6262 16.4808 50.1599 15.1967 51.1099 14.25C52.0598 13.3033 53.3483 12.7714 54.6917 12.7714C56.0352 12.7714 57.3237 13.3033 58.2736 14.25C59.2236 15.1967 59.7573 16.4808 59.7573 17.8196V30.5113H64.4099V17.8196C64.4067 15.252 63.3819 12.7904 61.56 10.9748C59.7382 9.15924 5
11687.2682 8.13788 54.6917 8.13477Z" fill="#4169E1"/> 1169<path d="M111.222 8.13477C109.431 8.13492 107.665 8.55377 106.065 9.35765C104.466 10.1615 103.078 11.328 102.013 12.7635C100.948 14.1989 100.236 15.8632 99.9339 17.6228C99.6315 19.3823 99.7475 21.1879 100.272 22.8947C100.797 24.6014 101.717 26.1617 102.957 27.4501C104.196 28.7385 105.722 29.7192 107.411 30.3133C109.101 30.9074 110.906 31.0984 112.683 30.871C114.459 30.6436 116.158 30.004 117.641 29.0038L118.022 28.7451V30.5089H122.675V19.5494C122.672 16.5232 121.464 13.6218 119.317 11.4819C117.17 9.34194 114.259 8.13819 111.222 8.13477ZM111.222 26.3262C109.877 26.3264 108.562 25.9291 107.443 25.1844C106.325 24.4397 105.453 23.3811 104.938 22.1426C104.423 20.904 104.288 19.5411 104.551 18.2262C104.813 16.9113 105.461 15.7034 106.412 14.7555C107.363 13.8075 108.575 13.1619 109.895 12.9004C111.214 12.6389 112.582 12.7732 113.824 13.2864C115.067 13.7996 116.129 14.6685 116.877 15.7833C117.624 16.8981 118.023 18.2087 118.022 19.5494C118.02 21.346 117.303 23.0685 116.028 24.3389C114.754 25.6093 113.025 26.324 111.222 26.3262Z" fill="#4169E1"/> 1170<path d="M94.7951 21.2841V0H90.1484V21.2841C90.1512 23.8094 91.1427 26.234 92.9117 28.0421C94.6808 29.8501 97.088 30.899 99.6211 30.9654V26.3206C98.3223 26.2573 97.0975 25.6995 96.1994 24.7622C95.3014 23.825 94.7987 22.58 94.7951 21.2841Z" fill="#4169E1"/> 1171<path d="M86.7883 8.58398H82.1995V21.3039C82.1995 23.4746 80.7918 25.4337 78.7776 26.0687C77.1575 26.579 75.4737 26.3192 74.1475 25.3537C73.5057 24.8848 72.9833 24.2722 72.6224 23.5653C72.2615 22.8584 72.0721 22.077 72.0696 21.2839V8.58398H67.417V21.2439C67.417 25.6324 70.2949 29.4753 74.4165 30.5948C76.9676 31.2862 79.6083 30.9887 81.8372 29.7552L82.1995 29.5541V30.3173C82.1975 31.6132 81.6963 32.8589 80.7993 33.7972C79.9023 34.7355 78.6781 35.2948 77.3794 35.3596V39.9998C79.9127 39.933 82.32 38.884 84.0892 37.0758C85.8585 35.2676 86.8501 32.8428 86.8532 30.3173V9.03906H86.681L86.7883 8.58398Z" fill="#4169E1"/> 1172<path d="M32.6844 5.55139C31.4962 4.36226 30.0832 3.41979 28.527 2.77853C26.9709 2.13726 25.3027 1.80994 23.6188 1.8155C21.9349 1.80981 20.2665 2.13707 18.7104 2.77834C17.1543 3.41962 15.7413 4.36216 14.5532 5.55139L1.44269 18.6158C1.1346 18.9241 0.962009 19.3417 0.962894 19.7768C0.963779 20.2119 1.13806 20.6289 1.44741 20.9359C1.75675 21.2429 2.17582 21.4149 2.61241 21.4141C3.04901 21.4132 3.46737 21.2395 3.77546 20.9312L16.8848 7.86677C18.6808 6.12697 21.092 5.16174 23.5966 5.17984C26.1012 5.19795 28.4981 6.19794 30.2686 7.96351C32.0392 9.72909 33.0411 12.1183 33.0578 14.6144C33.0744 17.1105 32.1044 19.5128 30.3575 21.3016L17.2482 34.3661C16.9392 34.6734 16.7653 35.0905 16.7649 35.5256C16.7644 35.9607 16.9374 36.3782 17.2458 36.6861C17.5542 36.9941 17.9728 37.1674 18.4094 37.1678C18.846 37.1683 19.2649 36.9958 19.5739 36.6885L32.6844 23.6205C35.0851 21.2225 36.4333 17.9734 36.4333 14.586C36.4333 11.1985 35.0851 7.94943 32.6844 5.55139Z" fill="#4169E1"/> 1173<path d="M30.8477 14.5814C30.8478 13.1562 30.4236 11.763 29.629 10.5781C28.8344 9.3931 27.705 8.46962 26.3836 7.92443C25.0623 7.37925 23.6084 7.23686 22.2058 7.51528C20.8033 7.7937 19.5151 8.48041 18.5042 9.48855L1.0857 26.8474C0.792938 27.158 0.633026 27.57 0.639859 27.996C0.646691 28.4221 0.819731 28.8287 1.1223 29.1298C1.42487 29.4309 1.8332 29.6027 2.26073 29.6089C2.68826 29.615 3.10139 29.4551 3.41257 29.1628L20.6399 12.0144L20.6671 11.9827C20.7202 11.9227 20.7721 11.8651 20.8299 11.8039C20.8877 11.7428 20.9632 11.6863 21.034 11.6205L21.073 11.5852C21.8129 10.9602 22.7582 10.6293 23.7278 10.6559C24.6973 10.6824 25.623 11.0646 26.3273 11.7291C27.0317 12.3936 27.4653 13.2938 27.545 14.2571C27.6246 15.2205 27.3449 16.1792 26.7592 16.9497L26.7474 16.9662C26.6425 17.1048 26.5286 17.2364 26.4064 17.3601C26.2786 17.4865 26.1426 17.6044 25.9993 17.7129L8.98787 34.7226C8.6793 35.0301 8.50596 35.4471 8.50596 35.882C8.50596 36.3169 8.6793 36.734 8.98787 37.0415C9.29643 37.349 9.71493 37.5217 10.1513 37.5217C10.5877 37.5217 11.0062 37.349 11.3147 37.0415L28.7321 19.6826C29.4059 19.0141 29.9399 18.219 30.303 17.3434C30.6662 16.4677 30.8514 15.5289 30.8477 14.5814Z" fill="#4169E1"/> 1174<path d="M21.9847 18.1574C21.1168 17.7706 20.4224 17.0786 20.0343 16.2136L19.9163 15.9561L0.674748 35.1329C0.306608 35.489 0.0721262 35.96 0.0104335 36.4676C-0.0208502 36.6917 -0.000793865 36.9199 0.0690973 37.1352C0.138988 37.3505 0.256899 37.5472 0.413978 37.7105C0.554816 37.8459 0.721192 37.9521 0.903476 38.0229C1.08576 38.0937 1.28034 38.1279 1.47594 38.1233C2.05612 38.1088 2.60722 37.8672 3.00988 37.4506L22.2432 18.275L21.9847 18.1574Z" fill="#4169E1"/> 1175</g> 1176<defs> 1177<clipPath id="clip0_962_839"> 1178<rect width="143" height="40" fill="white"/> 1179</clipPath> 1180</defs> 1181</svg> 1182 </a> 1183 </strong> 1184 <div class="main-nav-holder" style="background-image: url(https://www.nylas.com/wp-content/uploads/mobile-menu-bg.svg);"> 1185 <div class="main-nav-wrap"> 1186 <div class="main-nav"> 1187 <ul id="menu-main_menu" class=""><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10434 menu-item-has-children" id="menu-item-10434"><a href="https://www.nylas.com/products/">Products</a> <div class="main-menu-drop"> 1188 <div class="main-menu-drop-container"> 1189 <div class="drop-menu-list"> 1190 <div class="main-nav-columns"> 1191 <div class="item active"> 1192 <div class="subtitle">Products</div> 1193 <ul style="display: block;"> 1194 <li> 1195 <a href="/products/email-api/" ><img src="https://www.nylas.com/wp-content/uploads/email-menu-icon.svg" alt="">Email and Contacts API</a> <p>Unified bi-directional sync and parsing for any provider.</p> 1196 </li> 1197 <li> 1198 <a href="/products/calendar-api/" ><img src="https://www.nylas.com/wp-content/uploads/calendar-menu-icon.svg" alt="">Calendar API & Scheduler</a> <p>Real-time availability and embeddable white-label booking.</p> 1199 </li> 1200 <li> 1201 <a href="https://www.nylas.com/products/notetaker-api" ><img src="https://www.nylas.com/wp-content/uploads/notetaker-menu-icon.svg" alt="">Notetaker API</a> <p>Capture, transcribe, and extract structured data from meetings.</p> 1202 </li> 1203 <li> 1204 <a href="https://www.nylas.com/products/agent-accounts" ><img src="https://www.nylas.com/wp-content/uploads/agent-menu-icon.svg" alt="">Agent Accounts</a> <p>A real inbox and calendar for every AI agent, in one API call.</p> 1205 </li> 1206 </ul> 1207 </div> 1208 </div> 1209 <div class="products-menu-cta">
1210 <span class="products-menu-cta__text">Connect to every major email and calendar provider</span> 1211 <a class="products-menu-cta__link" href="/integrations/">Explore Integrations <svg width="16" height="14" viewBox="0 0 18 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.3818 0.228882C10.8658 -0.142684 11.5599 -0.0523199 11.9322 0.430717L18 8.30347L11.9053 15.6029C11.5144 16.0711 10.8172 16.1344 10.3481 15.7442C9.87906 15.3541 9.81568 14.6583 10.2066 14.1901L14.2234 9.37932H1.10559C0.49499 9.37932 0 8.88529 0 8.27588C0 7.66646 0.49499 7.17243 1.10559 7.17243H14.3386L10.1796 1.77628C9.80731 1.29324 9.89785 0.600449 10.3818 0.228882Z" fill="currentColor"/></svg> 1212 </a> 1213 </div> 1214 </div> 1215 <div class="header-featured-blocks"> 1216 <div class="header-featured-content-blocks"> 1217 <div class="header-featured-content header-featured-content-1"> 1218 <div class="header-featured-content-item"> 1219 <div class="category">Blog</div> 1220 <div class="image" 1221 style="background-image: url('https://www.nylas.com/wp-content/uploads/Notetaker-Blog-Hero-768x402.png')"> 1222 <a href="https://www.nylas.com/blog/notetaker-configurations/" ></a> 1223 </div> 1224 <a href="https://www.nylas.com/blog/notetaker-configurations/" ><h5>Notetaker's biggest update since launch: five new features, live now</h5></a> 1225 <div class="read-more"><a href="https://www.nylas.com/blog/notetaker-configurations/" target="_blank" >Learn more</a> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div> 1226 </div> 1227 </div> 1228 </div> 1229 </div> 1230 </div> 1231 </div> 1232 </li> 1233<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10267 menu-item-has-children" id="menu-item-10267"><a href="https://www.nylas.com/solutions/">Solutions</a> <div class="main-menu-drop"> 1234 <div class="main-menu-drop-container"> 1235 <div class="drop-menu-list"> 1236 <div class="main-nav-columns"> 1237 <div class="item active"> 1238 <div class="subtitle"> </div> 1239 <ul style="display: block;"> 1240 <li> 1241 <a href="/solutions/sales-crm" ><img src="https://www.nylas.com/wp-content/uploads/sales-crm-menu-icon.svg" alt="">Sales & CRM </a> </li> 1242 <li> 1243 <a href="/solutions/recruiting-ats" ><img src="https://www.nylas.com/wp-content/uploads/recruiting-ats-menu-icon.svg" alt="">Recruiting & ATS </a> </li> 1244 <li> 1245 <a href="/solutions/healthcare" ><img src="https://www.nylas.com/wp-content/uploads/healthcare-menu-icon.svg" alt="">Healthcare</a> </li> 1246 <li> 1247 <a href="/solutions/financial/" ><img src="https://www.nylas.com/wp-content/uploads/financial-menu-icon.svg" alt="">Financial</a> </li> 1248 </ul> 1249 </div> 1250 <div class="item"> 1251 <div class="subtitle"> </div> 1252 <ul > 1253 <li> 1254 <a href="/solutions/legal" ><img src="https://www.nylas.com/wp-content/uploads/legal-menu-icon.svg" alt="">Legal</a> </li> 1255 <li> 1256 <a href="/solutions/real-estate" ><img src="https://www.nylas.com/wp-content/uploads/real-estate-menu-icon.svg" alt="">Real Estate</a> </li> 1257 <li> 1258 <a href="/solutions/education" ><img src="https://www.nylas.com/wp-content/uploads/education-menu-icon.svg" alt="">Education</a> </li> 1259 <li> 1260 <a href="/solutions/field-services" ><img src="https://www.nylas.com/wp-content/uploads/field-services-menu-icon.svg" alt="">Field Services</a> </li> 1261 </ul> 1262 </div> 1263 </div> 1264 <div class="products-menu-cta products-menu-cta--solutions">
1265 <span class="products-menu-cta__text">Connect to every major email and calendar provider</span> 1266 <a class="products-menu-cta__link" href="/case-studies/">Read Customer Stories <svg width="16" height="14" viewBox="0 0 18 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.3818 0.228882C10.8658 -0.142684 11.5599 -0.0523199 11.9322 0.430717L18 8.30347L11.9053 15.6029C11.5144 16.0711 10.8172 16.1344 10.3481 15.7442C9.87906 15.3541 9.81568 14.6583 10.2066 14.1901L14.2234 9.37932H1.10559C0.49499 9.37932 0 8.88529 0 8.27588C0 7.66646 0.49499 7.17243 1.10559 7.17243H14.3386L10.1796 1.77628C9.80731 1.29324 9.89785 0.600449 10.3818 0.228882Z" fill="currentColor"/></svg> 1267 </a> 1268 </div> 1269 </div> 1270 <div class="header-featured-blocks"> 1271 <div class="header-featured-content-blocks"> 1272 <div class="header-featured-content header-featured-content-1"> 1273 <div class="header-featured-content-item"> 1274 <div class="image" 1275 style="background-image: url('https://www.nylas.com/wp-content/uploads/Dana-logo-1-768x378.png')"> 1276 <a href="https://www.nylas.com/case-study/dana-intelligence-agent-accounts/" ></a> 1277 </div> 1278 <a href="https://www.nylas.com/case-study/dana-intelligence-agent-accounts/" ><h5>How Dana Intelligence gave its AI agent a real inbox to act from </h5></a> 1279 <div class="read-more"><a href="https://www.nylas.com/case-study/dana-intelligence-agent-accounts/" target="_blank" ></a> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div> 1280 </div> 1281 </div> 1282 </div> 1283 </div> 1284 </div> 1285 </div> 1286 </li> 1287<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9437 menu-item-has-children" id="menu-item-9437"><a href="https://developer.nylas.com/">Developers</a> <div class="main-menu-drop"> 1288 <div class="main-menu-drop-container"> 1289 <div class="drop-menu-list"> 1290 <div class="main-nav-columns"> 1291 <div class="item active"> 1292 <div class="subtitle">Documentation</div> 1293 <ul style="display: block;"> 1294 <li> 1295 <a href="https://developer.nylas.com/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/docs-menu-icon.svg" alt="">Docs</a> </li> 1296 <li> 1297 <a href="https://developer.nylas.com/docs/v3/sdks/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/sdks-menu-icon.svg" alt="">SDKs</a> </li> 1298 <li> 1299 <a href="https://developer.nylas.com/docs/v3/guides/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/tutorials-menu-icon.svg" alt="">Guides</a> </li> 1300 <li> 1301 <a href="https://www.nylas.com/integrations/" ><img src="https://www.nylas.com/wp-content/uploads/api-ref-icon.svg" alt="">Integrations</a> </li> 1302 </ul> 1303 </div> 1304 <div class="item"> 1305 <div class="subtitle">Support</div> 1306 <ul > 1307 <li> 1308 <a href="https://status-v3.nylas.com/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/api-menu-icon.svg" alt="">API status</a> </li> 1309 <li> 1310 <a href="https://developer.nylas.com/docs/changelogs/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/changelog-menu-icon.svg" alt="">Changelog</a> </li> 1311 <li> 1312 <a href="https://developer.nylas.com/docs/support/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/support-menu-icon.svg" alt="">Support</a> </li> 1313 </ul> 1314 </div> 1315 </div> 1316 <div class="quick-links"> 1317 <a href="https://developer.nylas.com/docs/v3/getting-started/"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none"> <path d="M5.625 2.02246C5.43105 2.02246 5.23975 2.0676 5.06625 2.15429L2.22063 3.57742C2.11683 3.62929 2.02952 3.70903 1.96847 3.80771C1.90743 3.9064 1.87506 4.02013 1.875 4.13617V12.113C1.87474 12.2197 1.90177 12.3246 1.95353 12.4179C2.00529 12.5111 2.08005 12.5896 2.1707 12.6458C2.26135 12.702 2.36487 12.7341 2.47141 12.7389C2.57795 12.7438 2.68397 12.7213 2.77938 12.6737L5.06625 11.5299C5.23975 11.4432 5.43105 11.3981 5.625 11.3981C5.81896 11.3981 6.01025 11.4432 6.18375 11.5299L8.81625 12.8462C8.98975 12.9329 9.18105 12.978 9.375 12.978C9.56896 12.978 9.76025 12.9329 9.93375 12.8462L12.7794 11.423C12.8832 11.3712 12.9705 11.2914 13.0315 11.1927C13.0926 11.0941 13.1249 10.9803 13.125 10.8643V2.88679C13.1252 2.78019 13.098 2.67532 13.0462 2.58216C12.9944 2.48899 12.9197 2.41062 12.829 2.3545C12.7384 2.29838 12.6349 2.26637 12.5284 2.26152C12.4219 2.25667 12.316 2.27914 12.2206 2.32679L9.93375 3.47054C9.76025 3.55724 9.56896 3.60238 9.375 3.60238
1317C9.18105 3.60238 8.98975 3.55724 8.81625 3.47054L6.18375 2.15429C6.01025 2.0676 5.81896 2.02246 5.625 2.02246ZM9.375 3.60238L9.375 12.9774M5.625 2.02246L5.625 11.3975" stroke="#212121" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/></svg>Quickstart Guides</a> 1318 <a href="https://developer.nylas.com/docs/reference/api/"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none"><path d="M10 11.25L13.75 7.5L10 3.75M5 3.75L1.25 7.5L5 11.25" stroke="#212121" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/></svg>API References</a> 1319 <a href="https://developer.nylas.com/docs/reference/ui/"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none"> <path d="M6.25 13.125V5C6.25 4.83424 6.18415 4.67527 6.06694 4.55806C5.94973 4.44085 5.79076 4.375 5.625 4.375H2.5C2.33424 4.375 2.17527 4.44085 2.05806 4.55806C1.94085 4.67527 1.875 4.83424 1.875 5V12.5C1.875 12.6658 1.94085 12.8247 2.05806 12.9419C2.17527 13.0592 2.33424 13.125 2.5 13.125H10C10.1658 13.125 10.3247 13.0592 10.4419 12.9419C10.5592 12.8247 10.625 12.6658 10.625 12.5V9.375C10.625 9.20924 10.5592 9.05027 10.4419 8.93306C10.3247 8.81585 10.1658 8.75 10 8.75H1.875M9.375 1.875H12.5C12.8452 1.875 13.125 2.15482 13.125 2.5V5.625C13.125 5.97018 12.8452 6.25 12.5 6.25H9.375C9.02982 6.25 8.75 5.97018 8.75 5.625V2.5C8.75 2.15482 9.02982 1.875 9.375 1.875Z" stroke="#212121" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/></svg>Component Libraries</a> 1320 </div> 1321 </div> 1322 <div class="header-featured-blocks"> 1323 <div class="header-featured-content-blocks"> 1324 <div class="header-featured-content header-featured-content-1"> 1325 <div class="header-featured-content-item"> 1326 <div class="image" 1327 style="background-image: url('https://www.nylas.com/wp-content/uploads/agentic-ai-768x441.png')"> 1328 <a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/" ></a> 1329 </div> 1330 <a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/" ><h5>The State of Agentic AI in 2026: What teams are actually shipping</h5></a> 1331 <div class="read-more"><a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/" target="_blank" >Read Report</a> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div> 1332 </div> 1333 </div> 1334 </div> 1335 </div> 1336 </div> 1337 </div> 1338 </li> 1339<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48802 menu-item-has-children" id="menu-item-48802"><a href="https://www.nylas.com/enterprise/">Resources</a> <div class="main-menu-drop"> 1340 <div class="main-menu-drop-container"> 1341 <div class="drop-menu-list"> 1342 <div class="main-nav-columns"> 1343 <div class="item active"> 1344 <div class="subtitle"> </div> 1345 <ul style="display: block;"> 1346 <li> 1347 <a href="https://www.nylas.com/blog/" ><img src="https://www.nylas.com/wp-content/uploads/docs-menu-icon.svg" alt="">Blog</a> </li> 1348 <li> 1349 <a href="https://www.nylas.com/case-studies/" ><img src="https://www.nylas.com/wp-content/uploads/email-menu-icon.svg" alt="">Case Studies</a> </li> 1350 <li> 1351 <a href="https://www.nylas.com/leadership-team/" ><img src="https://www.nylas.com/wp-content/uploads/real-estate-menu-icon.svg" alt="">Company</a> </li> 1352 <li> 1353 <a href="https://www.nylas.com/company/jobs/" ><img src="https://www.nylas.com/wp-content/uploads/healthcare-menu-icon.svg" alt="">Careers</a> </li> 1354 <li> 1355 <a href="https://www.nylas.com/enterprise/" ><img src="https://www.nylas.com/wp-content/uploads/component-menu-icon.svg" alt="">Enterprise</a> </li> 1356 </ul> 1357 </div> 1358 </div> 1359 </div> 1360 <div class="header-featured-blocks"> 1361 <div class="header-featured-content-blocks"> 1362 <div class="header-featured-content header-featured-content-1"> 1363 <div class="header-featured-content-item"> 1364 <div class="image" 1365 style="background-image: url('https://www.nylas.com/wp-content/uploads/Introducing-Nylas-Agent-Accounts-768x402.png')"> 1366 <a href="https://www.nylas.com/blog/introducing-nylas-agent-accounts/" ></a> 1367 </div> 1368 <a href="https://www.nylas.com/blog/introducing-nylas-agent-accounts/" ><h5>Agent Accounts is generally available</h5></a> 1369 <div class="read-more"><a href="https://www.nylas.com/blog/introducing-nylas-agent-accounts/" ></a> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div> 1370 </div> 1371 </div> 1372 </div> 1373 </div> 1374 </div> 1375 </div> 1376 </li> 1377<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12080" id="menu-item-12080"><a href="/pricing/">Pricing</a></li> 1378</ul> </div> 1379 <div class="main-header-links"> 1380 <div class="menu-header_additional_menu-container"><ul id="menu-header_additional_menu" class="main-nav-links"><li id="menu-item-12004" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12004"><a href="/contact-sales/">Contact sales</a></li> 1381<li id="menu-item-12073" class="button-link transparent menu-item menu-item-type-custom menu-item-object-custom menu-item-12073"><a target="_blank" href="https://dashboard-v3.nylas.com/login?_gl=1*1joyqh9*_ga*MTIxMzc0MDAyOC4xNjM2MDMyODAw*_ga_5LVXVXFW0C*MTY1MjM2NjM0OS42MC4xLjE2NTIzNjYzNTAuNTk">Log in</a></li> 1382</ul></div> <a href="https://dashboard-v3.nylas.com/register" target="_blank" class="button-link btn">Build for free</a> </div> 1383 </div> 1384 </div> 1385 <button class="mobile-menu-opener"><i></i></button> 1386 </div> 1387 </header>
1388<script> 1389/* Make the description paragraph in the nav dropdowns clickable: the title 1390 sits in an <a> but the description <p> is a sibling, so forward clicks on 1391 the paragraph to the row's link (respecting target="_blank"). Delegated so 1392 it covers Products/Solutions/Developers and the single-column dropdowns. */ 1393(function () { 1394 document.addEventListener('click', function (e) { 1395 if (!e.target.closest) return; 1396 var p = e.target.closest('.main-header .main-nav .main-menu-drop p'); 1397 if (!p) return; 1398 var li = p.closest('li'); 1399 if (!li) return; 1400 var link = li.querySelector('a[href]'); 1401 if (!link || !link.getAttribute('href')) return; 1402 if (link.target === '_blank') { 1403 window.open(link.href, '_blank', 'noopener'); 1404 } else { 1405 window.location.href = link.href; 1406 } 1407 }); 1408})(); 1409</script>
1409 1410 </div> 1411 1412<main id="main-content" role="main"> 1413 1414<!-- Inline CSS for Portability --> 1415<style> 1416@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600&family=Poppins:wght@500&display=swap'); 1417 1418.hero-cta-banner-section { 1419 position: relative; 1420 padding: 80px 0; 1421 min-height: 750px; 1422 display: flex; 1423 align-items: center; 1424 overflow: hidden; 1425 font-family: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 1426 z-index: 20; 1427} 1428 1429.hero-cta-banner-section * { 1430 box-sizing: border-box; 1431} 1432 1433/* Video Background Container */ 1434.hero-cta-banner__video-container { 1435 position: absolute; 1436 top: 0; 1437 left: 0; 1438 width: 100%; 1439 height: 100%; 1440 z-index: 0; 1441 overflow: hidden; 1442} 1443 1444/* Fallback Image - shows until video is ready */ 1445.hero-cta-banner__fallback { 1446 position: absolute; 1447 top: 0; 1448 left: 0; 1449 width: 100%; 1450 height: 100%; 1451 background-size: cover; 1452 background-position: center center; 1453 z-index: 0; 1454 transition: opacity 0.5s ease; 1455} 1456 1457.hero-cta-banner__fallback--hidden { 1458 opacity: 0; 1459 pointer-events: none; 1460} 1461 1462/* Video - hidden until loaded */ 1463.hero-cta-banner__video { 1464 position: absolute; 1465 top: 0; 1466 left: 0; 1467 width: 100%; 1468 height: 100%; 1469 object-fit: cover; 1470 object-position: center center; 1471 opacity: 0; 1472 transition: opacity 0.5s ease; 1473} 1474 1475.hero-cta-banner__video--loaded { 1476 opacity: 1; 1477} 1478 1479.hero-cta-banner__overlay { 1480 position: absolute; 1481 top: 0; 1482 left: 0; 1483 width: 100%; 1484 height: 100%; 1485 z-index: 1; 1486} 1487 1488/* Animated WebGL "veil" background canvas */ 1489.hero-cta-banner__veil { 1490 position: absolute; 1491 top: 0; 1492 left: 0; 1493 width: 100%; 1494 height: 100%; 1495 display: block; 1496 z-index: 0; 1497 border: 0; 1498 pointer-events: none; 1499} 1500 1501/* Container */ 1502.hero-cta-banner__container { 1503 position: relative; 1504 z-index: 2; 1505 width: 100%; 1506 max-width: 1200px; 1507 margin: 0 auto; 1508 padding: 0 24px; 1509} 1510 1511/* Content */ 1512.hero-cta-banner__content { 1513 text-align: center; 1514 max-width: 900px; 1515 margin: 0 auto; 1516} 1517 1518.hero-cta-banner-section .hero-cta-banner__title, 1519.hero-cta-banner__title, 1520.hero-cta-banner-section h1.hero-cta-banner__title, 1521h1.hero-cta-banner__title, 1522.hero-cta-banner-section .hero-cta-banner__content h1, 1523.hero-cta-banner__content h1 { 1524 font-family: 'Manrope', sans-serif !important; 1525 font-style: normal !important; 1526 font-weight: 500 !important; 1527 font-size: 64px !important; 1528 color: #FFFFFF !important; 1529 margin: 0 0 20px 0 !important; 1530 line-height: 1.15 !important; 1531 -webkit-text-fill-color: #FFFFFF !important; 1532} 1533 1534.hero-cta-banner-section .hero-cta-banner__subtitle, 1535.hero-cta-banner__subtitle { 1536 font-family: 'Manrope', sans-serif !important; 1537 font-style: normal !important; 1538 font-weight: 400 !important; 1539 font-size: 18px !important; 1540 line-height: 28px !important; 1541 color: #FFFFFF !important; 1542 margin: 0 auto 50px !important; 1543 max-width: 600px !important; 1544} 1545 1546/* Buttons */ 1547.hero-cta-banner__buttons { 1548 display: flex; 1549 gap: 26px; 1550 justify-content: center; 1551 flex-wrap: wrap; 1552} 1553 1554.hero-cta-banner__btn { 1555 display: inline-flex; 1556 align-items: center; 1557 justify-content: center; 1558 padding: 12px 35px; 1559 font-family: 'Poppins', sans-serif; 1560 font-style: normal; 1561 font-weight: 500; 1562 font-size: 16px; 1563 line-height: 24px; 1564 text-align: center; 1565 text-decoration: none; 1566 border-radius: 55px; 1567 transition: all 0.2s ease; 1568 cursor: pointer; 1569} 1570 1571.hero-cta-banner__btn--primary { 1572 background: #ffffff; 1573 color: #000000; 1574 border: none; 1575} 1576 1577.hero-cta-banner__btn--primary:hover { 1578 background: rgba(255, 255, 255, 0.9); 1579 color: #000000; 1580} 1581 1582.hero-cta-banner__btn--secondary { 1583 background: #000000; 1584 color: #ffffff; 1585 border: none; 1586} 1587 1588.hero-cta-banner__btn--secondary:hover { 1589 background: #222222; 1590 color: #ffffff; 1591} 1592 1593/* Responsive */ 1594@media (max-width: 1024px) { 1595 .hero-cta-banner-section { 1596 min-height: 80vh; 1597 } 1598 1599 .hero-cta-banner-section .hero-cta-banner__title, 1600 .hero-cta-banner__title, 1601 .hero-cta-banner-section h1.hero-cta-banner__title, 1602 h1.hero-cta-banner__title, 1603 .hero-cta-banner-section .hero-cta-banner__content h1, 1604 .hero-cta-banner__content h1 { 1605 font-size: 48px !important; 1606 } 1607 1608 .hero-cta-banner-section .hero-cta-banner__subtitle, 1609 .hero-cta-banner__subtitle { 1610 font-size: 17px !important; 1611 max-width: 570px; 1612 } 1613} 1614 1615@media (max-width: 768px) { 1616 .hero-cta-banner-section { 1617 padding: 60px 0; 1618 min-height: 70vh; 1619 } 1620 1621 .hero-cta-banner__container { 1622 padding: 0 20px; 1623 } 1624 1625 .hero-cta-banner-section .hero-cta-banner__title, 1626 .hero-cta-banner__title, 1627 .hero-cta-banner-section h1.hero-cta-banner__title, 1628 h1.hero-cta-banner__title, 1629 .hero-cta-banner-section .hero-cta-banner__content h1, 1630 .hero-cta-banner__content h1 { 1631 font-size: 36px !important; 1632 } 1633 1634 .hero-cta-banner-section .hero-cta-banner__subtitle, 1635 .hero-cta-banner__subtitle { 1636 font-size: 16px !important; 1637 line-height: 24px !important; 1638 } 1639 1640 .hero-cta-banner__buttons { 1641 flex-direction: column; 1642 } 1643 1644 .hero-cta-banner__btn { 1645 width: 100%; 1646 } 1647} 1648 1649@media (max-width: 480px) { 1650 .hero-cta-banner-section { 1651 min-height: 60vh; 1652 } 1653 1654 .hero-cta-banner-section .hero-cta-banner__title, 1655 .hero-cta-banner__title, 1656 .hero-cta-banner-section h1.hero-cta-banner__title, 1657 h1.hero-cta-banner__title, 1658 .hero-cta-banner-section .hero-cta-banner__content h1, 1659 .hero-cta-banner__content h1 { 1660 font-size: 32px !important; 1661 } 1662 1663 .hero-cta-banner-section .hero-cta-banner__subtitle, 1664 .hero-cta-banner__subtitle { 1665 font-size: 15px !important; 1666 } 1667} 1668</style> 1669 1670<section class="hero-cta-banner-section" id="hero-cta-banner-6ab48bee7b0ce" 1671 style="background: radial-gradient(120% 120% at 50% 0%, #0B9B8A 0%, #06463d 60%, #032c26 100%);" 1672 > 1673 1674 <!-- Animated WebGL green background (falls back to the CSS green above) --> 1675 <canvas class="veil-bg hero-cta-banner__veil" aria-hidden="true"></canvas> 1676 1677 1678 <div class="hero-cta-banner__container"> 1679 <div class="hero-cta-banner__content"> 1680 <h1 class="hero-cta-banner__title" style="font-family: 'Manrope', sans-serif; font-weight: 500; font-size: 64px; color: #FFFFFF; -webkit-text-fill-color: #FFFFFF;">The data layer behind every communication workflow, human or AI</h1> 1681 1682 <p class="hero-cta-banner__subtitle" style="font-family: 'Manrope', sans-serif; font-weight: 400; font-size: 18px; line-height: 28px; color: #FFFFFF; -webkit-text-fill-color: #FFFFFF;">Email, calendar, and meeting data aren't separate integrations. They're one connected layer your product and your AI agents use to read and send across every provider, not just one.</p> 1683 1684 <div class="hero-cta-banner__buttons"> 1685 <a href="https://dashboard-v3.nylas.com/register" 1686 target="_self" 1687 class="hero-cta-banner__btn hero-cta-banner__btn--primary"> 1688 Build Now </a> 1689 1690 <a href="https://developer.nylas.com/" 1691 target="_self" 1692 class="hero-cta-banner__btn hero-cta-banner__btn--secondary"> 1693 See the Docs </a> 1694 </div> 1695 </div> 1696 </div> 1697</section> 1698 1699 1700 1701 1702<section class="sponsor-logos-section"> 1703 <div class="container"> 1704 <div class="sponsor-logos__wrapper"> 1705 1706 <!-- Left Logos (2) --> 1707 <div class="sponsor-logos__left"> 1708 <div class="sponsor-logo-item"> 1709 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Compass-logo.webp" 1710 alt="COMPASS" 1711 class="light-mode-img" /> 1712 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Compass-logo-dark.webp" 1713 alt="COMPASS" 1714 class="dark-mode-img" /> 1715 </div> 1716 <div class="sponsor-logo-item"> 1717 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dialpad.svg" 1718 alt="dialpad" 1719 class="light-mode-img" /> 1720 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dialpad-White-Colour.svg" 1721 alt="dialpad" 1722 class="dark-mode-img" /> 1723 </div> 1724 </div> 1725 1726 <!-- Right Logos (3) --> 1727 <div class="sponsor-logos__right"> 1728 <div class="sponsor-logo-item"> 1729 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dayfor
1729ce.webp" 1730 alt="dayforce" 1731 class="light-mode-img" /> 1732 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dayforce-White.webp" 1733 alt="dayforce" 1734 class="dark-mode-img" /> 1735 </div> 1736 <div class="sponsor-logo-item"> 1737 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/TalentReef.svg" 1738 alt="TalentReef" 1739 class="light-mode-img" /> 1740 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/TalentReef-White.svg" 1741 alt="TalentReef" 1742 class="dark-mode-img" /> 1743 </div> 1744 <div class="sponsor-logo-item"> 1745 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Clio.svg" 1746 alt="Clio" 1747 class="light-mode-img" /> 1748 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Clio-White.svg" 1749 alt="Clio" 1750 class="dark-mode-img" /> 1751 </div> 1752 </div> 1753 1754 </div> 1755 </div> 1756</section> 1757 1758 1759 1760<section class="product-feature-section line-continue"> 1761 <div class="container"> 1762 <div class="product-feature-section__wrapper"> 1763 1764 <!-- Left: Text --> 1765 <div class="product-feature-section__text"> 1766 <h2><p><b>Email API</b> with two-way sync across every provider</p> 1767</h2> 1768 1769 <div class="body-copy"><p>Send, receive, thread, and parse across Gmail, Microsoft Graph, Exchange, and any IMAP server. One normalized JSON schema, zero provider-specific branches, first send in five minutes.</p> 1770</div> 1771 1772 <div class="product-feature-section__buttons"> 1773 <a href="https://www.nylas.com/products/email-api/" 1774 target="_self" 1775 class="btn-primary"> 1776 Learn more </a> 1777 1778 </div> 1779 </div> 1780 1781 <!-- Right: Media --> 1782 <div class="product-feature-section__media"> 1783 <div class="custom-block-wrapper"> 1784<div 1785 id="api-code-6ab48bee7fac7" 1786 class="api-code-showcase-block" 1787 data-variant="default" 1788 style="--bg-color: #000000; --text-color: #ffffff; --accent-color: #ffffff;" 1789> 1790 <div class="api-code-header"> 1791 <h3 class="api-code-title">Send an Email</h3> 1792 <p class="api-code-description"> </p> 1793 </div> 1794 1795 <div class="api-code-tabs"> 1796 <div class="api-code-tabs-nav" role="tablist"> 1797 <button 1798 id="api-code-6ab48bee7fac7-tab-button-0" 1799 type="button" 1800 class="api-code-tab-button active" 1801 data-tab="tab-0" 1802 data-block-id="api-code-6ab48bee7fac7" 1803 role="tab" 1804 aria-controls="api-code-6ab48bee7fac7-tab-0" 1805 aria-selected="true" 1806 tabindex="0" 1807 > 1808 NodeJS </button> 1809 <button 1810 id="api-code-6ab48bee7fac7-tab-button-1" 1811 type="button" 1812 class="api-code-tab-button" 1813 data-tab="tab-1" 1814 data-block-id="api-code-6ab48bee7fac7" 1815 role="tab" 1816 aria-controls="api-code-6ab48bee7fac7-tab-1" 1817 aria-selected="false" 1818 tabindex="-1" 1819 > 1820 Ruby </button> 1821 <button 1822 id="api-code-6ab48bee7fac7-tab-button-2" 1823 type="button" 1824 class="api-code-tab-button" 1825 data-tab="tab-2" 1826 data-block-id="api-code-6ab48bee7fac7" 1827 role="tab" 1828 aria-controls="api-code-6ab48bee7fac7-tab-2" 1829 aria-selected="false" 1830 tabindex="-1" 1831 > 1832 Python </button> 1833 <button 1834 id="api-code-6ab48bee7fac7-tab-button-3" 1835 type="button" 1836 class="api-code-tab-button" 1837 data-tab="tab-3" 1838 data-block-id="api-code-6ab48bee7fac7" 1839 role="tab" 1840 aria-controls="api-code-6ab48bee7fac7-tab-3" 1841 aria-selected="false" 1842 tabindex="-1" 1843 > 1844 Kotlin </button> 1845 <button 1846 id="api-code-6ab48bee7fac7-tab-button-4" 1847 type="button" 1848 class="api-code-tab-button" 1849 data-tab="tab-4" 1850 data-block-id="api-code-6ab48bee7fac7" 1851 role="tab" 1852 aria-controls="api-code-6ab48bee7fac7-tab-4" 1853 aria-selected="false" 1854 tabindex="-1" 1855 > 1856 cURL </button> 1857 </div> 1858 1859 <div class="api-code-tabs-content"> 1860 <div 1861 class="api-code-tab-panel active" 1862 id="api-code-6ab48bee7fac7-tab-0" 1863 data-tab="tab-0" 1864 role="tabpanel" 1865 aria-labelledby="api-code-6ab48bee7fac7-tab-button-0" 1866 > 1867 <div class="api-code-wrapper has-filename"> 1868 <div class="api-code-filename">
1869 <span>NodeJS</span> 1870 </div> 1871 1872 <button 1873 type="button" 1874 class="api-code-copy-btn" 1875 data-panel-id="api-code-6ab48bee7fac7-tab-0" 1876 title="Copy code" 1877 aria-label="Copy code" 1878 > 1879 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1880 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1881 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1882 </svg> 1883 </button> 1884 1885 <pre class="api-code-pre line-numbers" data-language="javascript" data-no-hljs="true"><code class="language-javascript nohighlight nohljsln" data-no-hljs="true">import Nylas from 'nylas'; 1886 1887const nylas = new Nylas({ apiKey: '<NYLAS_API_KEY>' }); 1888const sentMessage = await nylas.messages.send({ 1889 identifier: <USER_GRANT_ID> 1890 requestBody: { 1891 to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }], 1892 subject: '<EMAIL_SUBJECT>', 1893 body: '<EMAIL_BODY>' 1894 } 1895});</code></pre> 1896 </div> 1897 </div> 1898 <div 1899 class="api-code-tab-panel" 1900 id="api-code-6ab48bee7fac7-tab-1" 1901 data-tab="tab-1" 1902 role="tabpanel" 1903 aria-labelledby="api-code-6ab48bee7fac7-tab-button-1" 1904 hidden > 1905 <div class="api-code-wrapper has-filename"> 1906 <div class="api-code-filename"> 1907 <span>Ruby</span> 1908 </div> 1909 1910 <button 1911 type="button" 1912 class="api-code-copy-btn" 1913 data-panel-id="api-code-6ab48bee7fac7-tab-1" 1914 title="Copy code" 1915 aria-label="Copy code" 1916 > 1917 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1918 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1919 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1920 </svg> 1921 </button> 1922 1923 <pre class="api-code-pre line-numbers" data-language="ruby" data-no-hljs="true"><code class="language-ruby nohighlight nohljsln" data-no-hljs="true">require 'nylas' 1924 1925nylas = Nylas::Client.new(api_key: "<NYLAS_API_KEY>") 1926 1927request_body = { 1928 subject: '<EMAIL_SUBJECT>', 1929 body: '<EMAIL_BODY>', 1930 to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }] 1931} 1932 1933email, response = nylas.messages.send('<USER_GRANT_ID>', request_body)</code></pre> 1934 </div> 1935 </div> 1936 <div 1937 class="api-code-tab-panel" 1938 id="api-code-6ab48bee7fac7-tab-2" 1939 data-tab="tab-2" 1940 role="tabpanel" 1941 aria-labelledby="api-code-6ab48bee7fac7-tab-button-2" 1942 hidden > 1943 <div class="api-code-wrapper has-filename"> 1944 <div class="api-code-filename">
1945 <span>Python</span> 1946 </div> 1947 1948 <button 1949 type="button" 1950 class="api-code-copy-btn" 1951 data-panel-id="api-code-6ab48bee7fac7-tab-2" 1952 title="Copy code" 1953 aria-label="Copy code" 1954 > 1955 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1956 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1957 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1958 </svg> 1959 </button> 1960 1961 <pre class="api-code-pre line-numbers" data-language="python" data-no-hljs="true"><code class="language-python nohighlight nohljsln" data-no-hljs="true">from nylas import Client 1962nylas = Client(api_key='<NYLAS_API_KEY>') 1963message = nylas.messages.send( 1964 '<USER_GRANT_ID>', 1965 request_body={ 1966 "to": [{ "name": '<RECIPIENT_NAME>', 1967 "email": '<RECIPIENT_EMAIL>' }], 1968 "subject": '<EMAIL_SUBJECT>', 1969 "body": '<EMAIL_BODY>' 1970 } 1971)</code></pre> 1972 </div> 1973 </div> 1974 <div 1975 class="api-code-tab-panel" 1976 id="api-code-6ab48bee7fac7-tab-3" 1977 data-tab="tab-3" 1978 role="tabpanel" 1979 aria-labelledby="api-code-6ab48bee7fac7-tab-button-3" 1980 hidden > 1981 <div class="api-code-wrapper has-filename"> 1982 <div class="api-code-filename"> 1983 <span>Kotlin</span> 1984 </div> 1985 1986 <button 1987 type="button" 1988 class="api-code-copy-btn" 1989 data-panel-id="api-code-6ab48bee7fac7-tab-3" 1990 title="Copy code" 1991 aria-label="Copy code" 1992 > 1993 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1994 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1995 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1996 </svg> 1997 </button> 1998 1999 <pre class="api-code-pre line-numbers" data-language="kotlin" data-no-hljs="true"><code class="language-kotlin nohighlight nohljsln" data-no-hljs="true">import com.nylas.NylasClient 2000val nylas = NylasClient(apiKey = '<NYLAS_API_KEY>') 2001 2002val recipients = listOf(EmailName('<RECIPIENT_EMAIL>', '<RECIPIENT_NAME>')) 2003 2004val requestBody = SendMessageRequest.Builder(recipients) 2005 .subject('<EMAIL_SUBJECT>') 2006 .body('<EMAIL_BODY>') 2007 .build() 2008 2009val emailResponse = nylas.messages().send('<USER_GRANT_ID>', requestBody)</code></pre> 2010 </div> 2011 </div> 2012 <div 2013 class="api-code-tab-panel" 2014 id="api-code-6ab48bee7fac7-tab-4" 2015 data-tab="tab-4" 2016 role="tabpanel" 2017 aria-labelledby="api-code-6ab48bee7fac7-tab-button-4" 2018 hidden > 2019 <div class="api-code-wrapper has-filename"> 2020 <div class="api-code-filename">
2021 <span>cURL</span> 2022 </div> 2023 2024 <button 2025 type="button" 2026 class="api-code-copy-btn" 2027 data-panel-id="api-code-6ab48bee7fac7-tab-4" 2028 title="Copy code" 2029 aria-label="Copy code" 2030 > 2031 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 2032 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2033 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2034 </svg> 2035 </button> 2036 2037 <pre class="api-code-pre line-numbers" data-language="bash" data-no-hljs="true"><code class="language-bash nohighlight nohljsln" data-no-hljs="true">curl --request POST \ 2038 --url "api.nylas.com/${<USER_GRANT_ID>}/messages/send" \ 2039 --header "Authorization: Bearer ${NYLAS_API_KEY}" \ 2040 --header "Content-Type: application/json" \ 2041 --data '{ 2042 "subject": "<EMAIL_SUBJECT>", 2043 "body": "<EMAIL_BODY>", 2044 "to": [{"name": "<RECIPIENT_NAME>", 2045 "email": "<RECIPIENT_EMAIL>"}] 2046 }'</code></pre> 2047 </div> 2048 </div> 2049 </div> 2050 </div> 2051</div> 2052</div> 2053 <div class="product-feature-section__caption-row"> 2054 <p>Attain <strong>higher deliverability</strong> by using contextual send.</p> 2055 2056 </div> 2057 <div class="product-feature-section__caption-row"> 2058 <p>Control all elements of your email data to make it <span class="gradient">AI-ready</span></p> 2059 2060 </div> 2061 </div> 2062 2063 </div> 2064 </div> 2065</section> 2066 2067 2068 2069 2070<section class="product-feature-section line-continue"> 2071 <div class="container"> 2072 <div class="product-feature-section__wrapper"> 2073 2074 <!-- Left: Text --> 2075 <div class="product-feature-section__text"> 2076 <h2><p><b>Calendar API</b> with bidirectional sync and a native Scheduler</p> 2077</h2> 2078 2079 <div class="body-copy"><p>Google, Microsoft, Exchange, and iCloud through one schema. Embeddable booking components, plus Virtual Calendars for rooms and equipment that have no provider account.</p> 2080</div> 2081 2082 <div class="product-feature-section__buttons"> 2083 <a href="https://www.nylas.com/products/calendar-api/" 2084 target="_self" 2085 class="btn-primary"> 2086 Learn more </a> 2087 2088 </div> 2089 </div> 2090 2091 <!-- Right: Media --> 2092 <div class="product-feature-section__media"> 2093 <div class="calendar-widget" id="calendar-widget-6ab48bee7fd5a"> 2094 <!-- Left Panel: Calendar List --> 2095 <div class="calendar-widget__left"> 2096 <div class="calendar-widget__left-inner"> 2097 <h3 class="calendar-widget__title">Calendar</h3> 2098 2099 <div class="calendar-widget__tabs"> 2100 <button class="calendar-widget__tab active" data-view="agenda">Agenda</button> 2101 <button class="calendar-widget__tab" data-view="day">Day</button> 2102 <button class="calendar-widget__tab" data-view="week">Week</button> 2103 <button class="calendar-widget__tab" data-view="month">Month</button> 2104 <button class="calendar-widget__tab" data-view="year">Year</button> 2105 </div> 2106 2107 <div class="calendar-widget__events"> 2108 <h4 class="calendar-widget__events-title">Upcoming Events</h4> 2109 <div class="calendar-widget__events-list"> 2110 <!-- Events will be populated by JavaScript --> 2111 </div> 2112 </div> 2113 </div> 2114 </div> 2115 2116 <!-- Right Panel: Event Form --> 2117 <div class="calendar-widget__right"> 2118 <div class="calendar-widget__right-inner"> 2119 <div class="calendar-widget__form"> 2120 <input type="text" class="calendar-widget__input calendar-widget__input--title" placeholder="Event Title" readonly> 2121 2122 <div class="calendar-widget__row"> 2123 <div class="calendar-widget__field calendar-widget__field--icon"> 2124 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 2125 <circle cx="10" cy="10" r="9" stroke="#9CA3AF" stroke-width="1.5"/> 2126 <path d="M10 5V10L13 13" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2127 </svg> 2128 <div class="calendar-widget__date-inputs">
2129 <span class="calendar-widget__date-value">2024-12-04</span> 2130 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 2131 <rect x="1" y="2" width="14" height="13" rx="2" stroke="#9CA3AF" stroke-width="1.5"/> 2132 <path d="M1 6H15" stroke="#9CA3AF" stroke-width="1.5"/> 2133 <path d="M5 1V3" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2134 <path d="M11 1V3" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2135 </svg> 2136 </div> 2137 <label class="calendar-widget__checkbox"> 2138 <input type="checkbox" disabled> 2139 <span>All day</span> 2140 </label> 2141 </div> 2142 </div> 2143 2144 <div class="calendar-widget__row"> 2145 <div class="calendar-widget__time-group"> 2146 <span class="calendar-widget__time-input">10:00 am</span> 2147 <span class="calendar-widget__time-separator">â</span> 2148 <span class="calendar-widget__time-input">11:00 am</span> 2149 </div> 2150 <span class="calendar-widget__repeat">Does not repeat</span> 2151 </div> 2152 2153 <div class="calendar-widget__row calendar-widget__row--icon"> 2154 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 2155 <circle cx="5" cy="7" r="2.5" stroke="#9CA3AF" stroke-width="1.5"/> 2156 <circle cx="15" cy="7" r="2.5" stroke="#9CA3AF" stroke-width="1.5"/> 2157 <circle cx="10" cy="13" r="2.5" stroke="#9CA3AF" stroke-width="1.5"/> 2158 </svg> 2159 <input type="text" class="calendar-widget__input" placeholder="Participant email" readonly> 2160 </div> 2161 2162 <div class="calendar-widget__row calendar-widget__row--icon"> 2163 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 2164 <circle cx="10" cy="10" r="9" stroke="#9CA3AF" stroke-width="1.5"/> 2165 <circle cx="10" cy="10" r="3" fill="#9CA3AF"/> 2166 </svg> 2167 <div class="calendar-widget__meeting"> 2168 <img decoding="async" src="https://upload.wikimedia.org/wikipedia/commons/9/9b/Google_Meet_icon_%282020%29.svg" alt="Google Meet" width="24" height="24"> 2169 <span>Google Meet</span> 2170 </div> 2171 </div> 2172 2173 <div class="calendar-widget__row calendar-widget__notetaker"> 2174 <span>Invite Nylas Notetaker</span> 2175 <label class="calendar-widget__toggle"> 2176 <input type="checkbox" checked disabled> 2177 <span class="calendar-widget__toggle-slider"></span> 2178 </label> 2179 <span class="calendar-widget__toggle-label">Invite to join</span> 2180 </div> 2181 2182 <div class="calendar-widget__row calendar-widget__row--icon"> 2183 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 2184 <rect x="2" y="2" width="16" height="16" rx="2" stroke="#9CA3AF" stroke-width="1.5"/> 2185 <path d="M6 6H14" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2186 <path d="M6 10H14" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2187 <path d="M6 14H10" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2188 </svg> 2189 <div class="calendar-widget__organizer">
2190 <span>[email protected]</span> 2191 <span class="calendar-widget__organizer-meta">Busy · Default visibility · Notify 10 minutes before</span> 2192 </div> 2193 </div> 2194 2195 <div class="calendar-widget__row calendar-widget__row--icon"> 2196 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 2197 <path d="M3 5H17" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2198 <path d="M3 10H17" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2199 <path d="M3 15H12" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round"/> 2200 </svg> 2201 <input type="text" class="calendar-widget__input" placeholder="Description" readonly> 2202 </div> 2203 2204 <button class="calendar-widget__submit">Create Event</button> 2205 </div> 2206 </div> 2207 </div> 2208 </div> 2209 2210
2210<script> 2211 (function() { 2212 var container = document.getElementById('calendar-widget-6ab48bee7fd5a'); 2213 if (!container) return; 2214 2215 var eventsData = {"agenda":[{"event_title":"Team Meeting","event_date":"Nov 5, 2025 at 10:00 AM","event_duration":"60 min","event_color":"magenta","event_view":"agenda"},{"event_title":"Project Review","event_date":"Nov 5, 2025 at 2:00 PM","event_duration":"90 min","event_color":"blue","event_view":"agenda"},{"event_title":"Client Call","event_date":"Nov 6, 2025 at 11:00 AM","event_duration":"45 min","event_color":"pink","event_view":"agenda"}],"day":[{"event_title":"Morning Standup","event_date":"9:00 AM","event_duration":"15 min","event_color":"magenta","event_view":"day"},{"event_title":"Product Demo","event_date":"11:30 AM","event_duration":"45 min","event_color":"blue","event_view":"day"},{"event_title":"Lunch & Learn","event_date":"12:30 PM","event_duration":"60 min","event_color":"pink","event_view":"day"}],"week":[{"event_title":"Sprint Planning","event_date":"Monday at 10:00 AM","event_duration":"2 hours","event_color":"magenta","event_view":"week"},{"event_title":"Design Sync","event_date":"Wednesday at 2:00 PM","event_duration":"60 min","event_color":"blue","event_view":"week"},{"event_title":"Friday Retrospective","event_date":"Friday at 4:00 PM","event_duration":"45 min","event_color":"pink","event_view":"week"}],"month":[{"event_title":"Q1 Kickoff","event_date":"January 15, 2026","event_duration":"All day","event_color":"magenta","event_view":"month"},{"event_title":"Team Offsite","event_date":"January 22-23, 2026","event_duration":"2 days","event_color":"blue","event_view":"month"},{"event_title":"Board Meeting","event_date":"January 28, 2026","event_duration":"3 hours","event_color":"pink","event_view":"month"}],"year":[{"event_title":"Annual Conference","event_date":"March 2026","event_duration":"3 days","event_color":"magenta","event_view":"year"},{"event_title":"Summer Hackathon","event_date":"June 2026","event_duration":"1 week","event_color":"blue","event_view":"year"},{"event_title":"Company Retreat","event_date":"September 2026","event_duration":"4 days","event_color":"pink","event_view":"year"}]}; 2216 var tabs = container.querySelectorAll('.calendar-widget__tab'); 2217 var eventsList = container.querySelector('.calendar-widget__events-list'); 2218 2219 function renderEvents(view) { 2220 var events = eventsData[view] || []; 2221 var html = ''; 2222 2223 if (events.length === 0) { 2224 html = '<p class="calendar-widget__no-events">No events for this view</p>'; 2225 } else { 2226 events.forEach(function(event) { 2227 var colorClass = 'calendar-widget__event--' + (event.event_color || 'magenta'); 2228 html += '<div class="calendar-widget__event ' + colorClass + '">'; 2229 html += '<div class="calendar-widget__event-content">'; 2230 html += '<h5 class="calendar-widget__event-title">' + event.event_title + '</h5>'; 2231 html += '<p class="calendar-widget__event-meta">' + event.event_date + ' · ' + event.event_duration + '</p>'; 2232 html += '</div>'; 2233 html += '</div>'; 2234 }); 2235 } 2236 2237 eventsList.innerHTML = html; 2238 } 2239
2240 tabs.forEach(function(tab) { 2241 tab.addEventListener('click', function() { 2242 // Update active tab 2243 tabs.forEach(function(t) { t.classList.remove('active'); }); 2244 tab.classList.add('active'); 2245 2246 // Render events for selected view 2247 var view = tab.getAttribute('data-view'); 2248 renderEvents(view); 2249 }); 2250 }); 2251 2252 // Initial render 2253 renderEvents('agenda'); 2254 })(); 2255 </script>
2255 2256 2257 <div class="product-feature-section__caption-row"> 2258 <p>Ready-to-use Scheduler that gives you <br /> 2259<strong>industry-leading scheduling</strong> right in your application</p> 2260 2261 </div> 2262 </div> 2263 2264 </div> 2265 </div> 2266</section> 2267 2268 2269 2270 2271<section class="product-feature-section line-continue"> 2272 <div class="container"> 2273 <div class="product-feature-section__wrapper"> 2274 2275 <!-- Left: Text --> 2276 <div class="product-feature-section__text"> 2277 <h2><p><b>Agent Accounts</b> give your agent an inbox and a calendar</p> 2278</h2> 2279 2280 <div class="body-copy"><p>Provision both in one API call, hosted by Nylas. Your agent sends, receives, files, and books as [email protected], on an identity your application owns. The mailbox reads and sends across Gmail, Outlook, and IMAP alike, not just one provider.</p> 2281</div> 2282 2283 <div class="product-feature-section__buttons"> 2284 <a href="https://www.nylas.com/products/agent-accounts" 2285 target="_self" 2286 class="btn-primary"> 2287 Learn more </a> 2288 2289 </div> 2290 </div> 2291 2292 <!-- Right: Media --> 2293 <div class="product-feature-section__media"> 2294 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Screenshot-2026-08-06-at-12.13.43-PM.png" alt="" /> 2295 <div class="product-feature-section__caption-row"> 2296 <p><strong>Owned identity for every agent<br /> 2297</strong>(so your agent sends as itself, not as one of your users)</p> 2298 2299 </div> 2300 </div> 2301 2302 </div> 2303 </div> 2304</section> 2305 2306 2307 2308 2309<section class="product-feature-section line-continue"> 2310 <div class="container"> 2311 <div class="product-feature-section__wrapper"> 2312 2313 <!-- Left: Text --> 2314 <div class="product-feature-section__text"> 2315 <h2><p><b>Notetaker API</b> turns meetings into structured data</p> 2316</h2> 2317 2318 <div class="body-copy"><p>A managed bot joins Google Meet, Teams, and Zoom, then delivers recordings, speaker-labeled transcripts, summaries, and action items by webhook. 99% join success rate.</p> 2319</div> 2320 2321 <div class="product-feature-section__buttons"> 2322 <a href="https://www.nylas.com/products/notetaker-api/" 2323 target="_self" 2324 class="btn-primary"> 2325 Learn more </a> 2326 2327 </div> 2328 </div> 2329 2330 <!-- Right: Media --> 2331 <div class="product-feature-section__media"> 2332 <div class="dual-media" id="dual-media-6ab48bee81529"><div class="dual-media__item"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Group-10123046.gif" alt="" /></div><div class="dual-media__item"><div class="dual-media__video-wrapper"><img decoding="async" class="dual-media__poster" src="https://www.nylas.com/wp-content/uploads/Video-Thumbnail.png" alt="" /><video class="dual-media__video" muted loop playsinline preload="none" data-src="https://www.nylas.com/wp-content/uploads/Video-Recording-Call.mp4" poster="https://www.nylas.com/wp-content/uploads/Video-Thumbnail.png"></video></div></div></div>
2332<script> 2333 (function() { 2334 var container = document.getElementById('dual-media-6ab48bee81529'); 2335 if (!container) return; 2336 2337 var videos = container.querySelectorAll('.dual-media__video'); 2338 if (!videos.length) return; 2339 2340 function loadVideos() { 2341 videos.forEach(function(video) { 2342 var src = video.getAttribute('data-src'); 2343 if (!src) return; 2344 2345 video.src = src; 2346 video.load(); 2347 2348 video.addEventListener('canplay', function() { 2349 video.classList.add('loaded'); 2350 video.play().catch(function() {}); 2351 var poster = video.parentElement.querySelector('.dual-media__poster'); 2352 if (poster) poster.classList.add('hidden'); 2353 }); 2354 2355 // Fallback timeout 2356 setTimeout(function() { 2357 if (!video.classList.contains('loaded')) { 2358 video.classList.add('loaded'); 2359 video.play().catch(function() {}); 2360 var poster = video.parentElement.querySelector('.dual-media__poster'); 2361 if (poster) poster.classList.add('hidden'); 2362 } 2363 }, 5000); 2364 }); 2365 } 2366 2367 if (document.readyState === 'complete') { 2368 setTimeout(loadVideos, 100); 2369 } else { 2370 window.addEventListener('load', function() { 2371 setTimeout(loadVideos, 100); 2372 }); 2373 } 2374 })(); 2375 </script>
2375 2376 2377 <div class="product-feature-section__caption-row"> 2378 <p><strong>Notetaker Calendar Sync</strong><br /> 2379(So that your Notetaker shows up when you want and where you want)</p> 2380 2381 </div> 2382 </div> 2383 2384 </div> 2385 </div> 2386</section> 2387 2388 2389 2390 2391<section class="product-feature-section line-continue"> 2392 <div class="container"> 2393 <div class="product-feature-section__wrapper"> 2394 2395 <!-- Left: Text --> 2396 <div class="product-feature-section__text"> 2397 <h2><p>We handle the hard stuff, OAuth, integrations, and normalization.</p> 2398</h2> 2399 2400 <div class="body-copy"><p>Connecting to Google and Microsoft OAuth is notoriously painful. Nylas walks you through it, manages tokens, and abstracts away provider differences, giving you one API to access email, calendar, and conferencing data across every major platform. The same connection powers your AI tools too. Our MCP server plugs into Claude Code, Cursor, and any other MCP-compatible client, so your agent gets the same cross-provider access your product does.</p> 2401</div> 2402 2403 <div class="product-feature-section__buttons"> 2404 <a href="https://www.nylas.com/integrations/" 2405 target="_self" 2406 class="btn-primary"> 2407 Explore integrations </a> 2408 2409 <a href="https://developer.nylas.com/docs/v3/auth/" 2410 target="_self" 2411 class="btn-secondary"> 2412 View OAuth Docs <svg class="btn-arrow-icon" width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.8999 6.8999L8.8999 12.8999M14.8999 6.8999L8.8999 0.899902M14.8999 6.8999L0.899902 6.8999" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg> 2413 </a> 2414 </div> 2415 </div> 2416 2417 <!-- Right: Media --> 2418 <div class="product-feature-section__media"> 2419 <div class="icon-grid"><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Google.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Microsoft.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/IMAP.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Gmail.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Microsoft-Outlook.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/iCloud.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Google-Meet.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Microsoft-Teams.svg" alt="" /></div><div class="icon-grid__cell"><img decoding="async" src="https://www.nylas.com/wp-content/uploads/Zoom-Meetings.svg" alt="" /></div></div> 2420 </div> 2421 2422 </div> 2423 </div> 2424</section> 2425 2426 2427 2428 2429<section class="infrastructure-trust-section"> 2430 <div class="container"> 2431 2432 <!-- Centered Header --> 2433 <div class="infrastructure-trust__header"> 2434 <h2 id="the-infrastructure-trusted-by-the-worlds-best-builders">The infrastructure trusted by the worldâs best builders.</h2> 2435 2436 2437 <div class="infrastructure-trust__header-buttons"> 2438 <a href="https://developer.nylas.com/" 2439 target="_self" 2440 class="btn-primary"> 2441 See the docs </a> 2442 2443 <a href="https://dashboard-v3.nylas.com/login" 2444 target="_self" 2445 class="btn-secondary"> 2446 Get your API key <svg class="btn-arrow-icon" width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.8999 6.8999L8.8999 12.8999M14.8999 6.8999L8.8999 0.899902M14.8999 6.8999L0.899902 6.8999" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg> 2447 </a> 2448 </div> 2449 </div> 2450 2451 <!-- Two Column Layout -->
2452 <div class="infrastructure-trust__content"> 2453 2454 <!-- Left Column --> 2455 <div class="infrastructure-trust__left"> 2456 <div class="infrastructure-trust__intro"> 2457 <h3>The best developers in the world use Nylas </h3> 2458 <p>to handle authentication, synchronization, and data normalization across 250+ providers, freeing them to build world-class applications with speed and precision.</p> 2459 </div> 2460 2461 <div class="infrastructure-trust__grid"> 2462 <div class="grid-item"> 2463 <h4>Seamless authentication</h4> 2464 <p>Handle OAuth across hundreds of providers with zero friction.</p> 2465 </div> 2466 <div class="grid-item"> 2467 <h4>Enterprise reliability</h4> 2468 <p>SOC 2âcompliant infrastructure built to scale with your app.</p> 2469 </div> 2470 <div class="grid-item"> 2471 <h4>Modern SDKs & MCP</h4> 2472 <p>Get up and running in minutes. One install and one API call, or connect any MCP client and give your agent 36 typed tools for email, calendar, contacts, and Notetaker.</p> 2473 </div> 2474 <div class="grid-item"> 2475 <h4>Powerful webhooks</h4> 2476 <p>Stay in sync with every event in real time, no polling, no complexity.</p> 2477 </div> 2478 <div class="grid-item"> 2479 <h4>Developer dashboard</h4> 2480 <p>Monitor, manage, and test your integrations, all in one place.</p> 2481 </div> 2482 <div class="grid-item"> 2483 <h4>Sandbox environments</h4> 2484 <p>Prototype safely and test confidently before going live.</p> 2485 </div> 2486 </div> 2487 </div> 2488 2489 <!-- Right Column --> 2490 <div class="infrastructure-trust__right"> 2491 <div class="infrastructure-trust__custom-block"> 2492 2493<div 2494 id="api-code-6ab48bee867d8" 2495 class="api-code-showcase-block" 2496 data-variant="default" 2497 style="--bg-color: #000000; --text-color: #ffffff; --accent-color: #ffffff;" 2498> 2499 2500 <div class="api-code-tabs"> 2501 <div class="api-code-tabs-nav" role="tablist"> 2502 <button 2503 id="api-code-6ab48bee867d8-tab-button-0" 2504 type="button" 2505 class="api-code-tab-button active" 2506 data-tab="tab-0" 2507 data-block-id="api-code-6ab48bee867d8" 2508 role="tab" 2509 aria-controls="api-code-6ab48bee867d8-tab-0" 2510 aria-selected="true" 2511 tabindex="0" 2512 > 2513 NodeJS </button> 2514 <button 2515 id="api-code-6ab48bee867d8-tab-button-1" 2516 type="button" 2517 class="api-code-tab-button" 2518 data-tab="tab-1" 2519 data-block-id="api-code-6ab48bee867d8" 2520 role="tab" 2521 aria-controls="api-code-6ab48bee867d8-tab-1" 2522 aria-selected="false" 2523 tabindex="-1" 2524 > 2525 Ruby </button> 2526 <button 2527 id="api-code-6ab48bee867d8-tab-button-2" 2528 type="button" 2529 class="api-code-tab-button" 2530 data-tab="tab-2" 2531 data-block-id="api-code-6ab48bee867d8" 2532 role="tab" 2533 aria-controls="api-code-6ab48bee867d8-tab-2" 2534 aria-selected="false" 2535 tabindex="-1" 2536 > 2537 Python </button> 2538 <button 2539 id="api-code-6ab48bee867d8-tab-button-3" 2540 type="button" 2541 class="api-code-tab-button" 2542 data-tab="tab-3" 2543 data-block-id="api-code-6ab48bee867d8" 2544 role="tab" 2545 aria-controls="api-code-6ab48bee867d8-tab-3" 2546 aria-selected="false" 2547 tabindex="-1" 2548 > 2549 Kotlin </button> 2550 <button 2551 id="api-code-6ab48bee867d8-tab-button-4" 2552 type="button" 2553 class="api-code-tab-button" 2554 data-tab="tab-4" 2555 data-block-id="api-code-6ab48bee867d8" 2556 role="tab" 2557 aria-controls="api-code-6ab48bee867d8-tab-4" 2558 aria-selected="false" 2559 tabindex="-1" 2560 > 2561 cURL </button> 2562 </div> 2563 2564 <div class="api-code-tabs-content"> 2565 <div 2566 class="api-code-tab-panel active" 2567 id="api-code-6ab48bee867d8-tab-0" 2568 data-tab="tab-0" 2569 role="tabpanel" 2570 aria-labelledby="api-code-6ab48bee867d8-tab-button-0" 2571 > 2572 <div class="api-code-wrapper has-filename"> 2573 <div class="api-code-filename">
2574 <span>NodeJS</span> 2575 </div> 2576 2577 <button 2578 type="button" 2579 class="api-code-copy-btn" 2580 data-panel-id="api-code-6ab48bee867d8-tab-0" 2581 title="Copy code" 2582 aria-label="Copy code" 2583 > 2584 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 2585 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2586 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2587 </svg> 2588 </button> 2589 2590 <pre class="api-code-pre line-numbers" data-language="javascript" data-no-hljs="true"><code class="language-javascript nohighlight nohljsln" data-no-hljs="true">import Nylas from 'nylas'; 2591 2592const nylas = new Nylas({ apiKey: '<NYLAS_API_KEY>' }); 2593const sentMessage = await nylas.messages.send({ 2594 identifier: <USER_GRANT_ID> 2595 requestBody: { 2596 to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }], 2597 subject: '<EMAIL_SUBJECT>', 2598 body: '<EMAIL_BODY>' 2599 } 2600});</code></pre> 2601 </div> 2602 </div> 2603 <div 2604 class="api-code-tab-panel" 2605 id="api-code-6ab48bee867d8-tab-1" 2606 data-tab="tab-1" 2607 role="tabpanel" 2608 aria-labelledby="api-code-6ab48bee867d8-tab-button-1" 2609 hidden > 2610 <div class="api-code-wrapper has-filename"> 2611 <div class="api-code-filename"> 2612 <span>Ruby</span> 2613 </div> 2614 2615 <button 2616 type="button" 2617 class="api-code-copy-btn" 2618 data-panel-id="api-code-6ab48bee867d8-tab-1" 2619 title="Copy code" 2620 aria-label="Copy code" 2621 > 2622 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 2623 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2624 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2625 </svg> 2626 </button> 2627 2628 <pre class="api-code-pre line-numbers" data-language="ruby" data-no-hljs="true"><code class="language-ruby nohighlight nohljsln" data-no-hljs="true">require 'nylas' 2629 2630nylas = Nylas::Client.new(api_key: "<NYLAS_API_KEY>") 2631 2632request_body = { 2633 subject: '<EMAIL_SUBJECT>', 2634 body: '<EMAIL_BODY>', 2635 to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }] 2636} 2637 2638email, response = nylas.messages.send('<USER_GRANT_ID>', request_body)</code></pre> 2639 </div> 2640 </div> 2641 <div 2642 class="api-code-tab-panel" 2643 id="api-code-6ab48bee867d8-tab-2" 2644 data-tab="tab-2" 2645 role="tabpanel" 2646 aria-labelledby="api-code-6ab48bee867d8-tab-button-2" 2647 hidden > 2648 <div class="api-code-wrapper has-filename"> 2649 <div class="api-code-filename">
2650 <span>Python</span> 2651 </div> 2652 2653 <button 2654 type="button" 2655 class="api-code-copy-btn" 2656 data-panel-id="api-code-6ab48bee867d8-tab-2" 2657 title="Copy code" 2658 aria-label="Copy code" 2659 > 2660 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 2661 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2662 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2663 </svg> 2664 </button> 2665 2666 <pre class="api-code-pre line-numbers" data-language="python" data-no-hljs="true"><code class="language-python nohighlight nohljsln" data-no-hljs="true">from nylas import Client 2667nylas = Client(api_key='<NYLAS_API_KEY>') 2668message = nylas.messages.send( 2669 '<USER_GRANT_ID>', 2670 request_body={ 2671 "to": [{ "name": '<RECIPIENT_NAME>', 2672 "email": '<RECIPIENT_EMAIL>' }], 2673 "subject": '<EMAIL_SUBJECT>', 2674 "body": '<EMAIL_BODY>' 2675 } 2676)</code></pre> 2677 </div> 2678 </div> 2679 <div 2680 class="api-code-tab-panel" 2681 id="api-code-6ab48bee867d8-tab-3" 2682 data-tab="tab-3" 2683 role="tabpanel" 2684 aria-labelledby="api-code-6ab48bee867d8-tab-button-3" 2685 hidden > 2686 <div class="api-code-wrapper has-filename"> 2687 <div class="api-code-filename"> 2688 <span>Kotlin</span> 2689 </div> 2690 2691 <button 2692 type="button" 2693 class="api-code-copy-btn" 2694 data-panel-id="api-code-6ab48bee867d8-tab-3" 2695 title="Copy code" 2696 aria-label="Copy code" 2697 > 2698 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 2699 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2700 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2701 </svg> 2702 </button> 2703 2704 <pre class="api-code-pre line-numbers" data-language="kotlin" data-no-hljs="true"><code class="language-kotlin nohighlight nohljsln" data-no-hljs="true">import com.nylas.NylasClient 2705val nylas = NylasClient(apiKey = '<NYLAS_API_KEY>') 2706 2707val recipients = listOf(EmailName('<RECIPIENT_EMAIL>', '<RECIPIENT_NAME>')) 2708 2709val requestBody = SendMessageRequest.Builder(recipients) 2710 .subject('<EMAIL_SUBJECT>') 2711 .body('<EMAIL_BODY>') 2712 .build() 2713 2714val emailResponse = nylas.messages().send('<USER_GRANT_ID>', requestBody)</code></pre> 2715 </div> 2716 </div> 2717 <div 2718 class="api-code-tab-panel" 2719 id="api-code-6ab48bee867d8-tab-4" 2720 data-tab="tab-4" 2721 role="tabpanel" 2722 aria-labelledby="api-code-6ab48bee867d8-tab-button-4" 2723 hidden > 2724 <div class="api-code-wrapper has-filename"> 2725 <div class="api-code-filename">
2726 <span>cURL</span> 2727 </div> 2728 2729 <button 2730 type="button" 2731 class="api-code-copy-btn" 2732 data-panel-id="api-code-6ab48bee867d8-tab-4" 2733 title="Copy code" 2734 aria-label="Copy code" 2735 > 2736 <svg width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 2737 <path d="M13 5H7C6.44772 5 6 5.44772 6 6V12C6 12.5523 6.44772 13 7 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2738 <path d="M3 10H2C1.44772 10 1 9.55228 1 9V3C1 2.44772 1.44772 2 2 2H8C8.55228 2 9 2.44772 9 3V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2739 </svg> 2740 </button> 2741 2742 <pre class="api-code-pre line-numbers" data-language="bash" data-no-hljs="true"><code class="language-bash nohighlight nohljsln" data-no-hljs="true">curl --request POST \ 2743 --url "api.nylas.com/${<USER_GRANT_ID>}/messages/send" \ 2744 --header "Authorization: Bearer ${NYLAS_API_KEY}" \ 2745 --header "Content-Type: application/json" \ 2746 --data '{ 2747 "subject": "<EMAIL_SUBJECT>", 2748 "body": "<EMAIL_BODY>", 2749 "to": [{"name": "<RECIPIENT_NAME>", 2750 "email": "<RECIPIENT_EMAIL>"}] 2751 }'</code></pre> 2752 </div> 2753 </div> 2754 </div> 2755 </div> 2756</div> 2757 </div> 2758 2759 <div class="infrastructure-trust__stats"> 2760 <div class="stat-item"> 2761 <div class="stat-number">34.5B+</div> 2762 <p>API transactions and 200TB of data processed daily.</p> 2763 </div> 2764 <div class="stat-item"> 2765 <div class="stat-number">99.99%</div> 2766 <p>historical uptime for Nylas services.</p> 2767 </div> 2768 <div class="stat-item"> 2769 <div class="stat-number">2X</div> 2770 <p>Get your feature launched into production 2x faster.</p> 2771 </div> 2772 </div> 2773 2774 <div class="infrastructure-trust__security"> 2775 <h4>Security built into the foundation of our platform</h4> 2776 <p>Our enterprise-grade security is backed by compliance with industry-leading standards. For Google and Microsoft accounts, Nylas doesn't store your message or event data.</p> 2777 </div> 2778 2779 <div class="infrastructure-trust__logos"> 2780 <div class="logo-item"> 2781 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/nylas-email-and-calendar-api-HIPAA-1.png" 2782 alt="HIPAA" /> 2783 </div> 2784 <div class="logo-item"> 2785 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/nylas-email-and-calendar-api-ISO-1.png" 2786 alt="" /> 2787 </div> 2788 <div class="logo-item"> 2789 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/nylas-email-and-calendar-api-SOC2-1.png" 2790 alt="" /> 2791 </div> 2792 <div class="logo-item"> 2793 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/nylas-email-and-calendar-api-GDPR-1.png" 2794 alt="" /> 2795 </div> 2796 <div class="logo-item"> 2797 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/nylas-email-and-calendar-api-CCPA-1.png" 2798 alt="" /> 2799 </div> 2800 </div> 2801 </div> 2802 2803 </div> 2804 </div> 2805</section> 2806 2807 2808 2809 2810<section class="cta-testimonials-section"> 2811 <div class="container"> 2812 2813 <!-- Centered Header --> 2814 <div class="cta-testimonials__header"> 2815 <h2 id="start-building-for-free-upgrade-when-youre-ready">Start building for free; upgrade when youâre ready.</h2> 2816 2817 <p class="subtitle">Get your API key and start integrating communications into your app in minutes.</p> 2818 2819 <div class="cta-testimonials__header-buttons"> 2820 <a href="https://dashboard-v3.nylas.com/login" 2821 target="_self" 2822 class="btn-primary"> 2823 Get your free API key </a> 2824 2825 <a href="http://nylas.com/pricing" 2826 target="_self" 2827 class="btn-secondary"> 2828 View plans <svg class="btn-arrow-icon" width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.8999 6.8999L8.8999 12.8999M14.8999 6.8999L8.8999 0.899902M14.8999 6.8999L0.899902 6.8999" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg> 2829 </a> 2830 </div> 2831 </div> 2832 2833 <!-- Features Row --> 2834 <div class="cta-testimonials__features"> 2835 <div class="feature-item">
2836 <span>No credit card required</span> 2837 </div> 2838 <div class="feature-item"> 2839 <span>Free forever developer plan</span> 2840 </div> 2841 <div class="feature-item"> 2842 <span>Full API access</span> 2843 </div> 2844 <div class="feature-item"> 2845 <span>Instant setup</span> 2846 </div> 2847 </div> 2848 2849 <!-- Trusted By Text --> 2850 <div class="cta-testimonials__trusted"> 2851 <p>Trusted by 1000+ companies</p> 2852 </div> 2853 2854 <!-- Testimonials Grid --> 2855 <div class="cta-testimonials__grid"> 2856 <div class="testimonial-card"> 2857 <!-- Left side: Company logo and quote --> 2858 <div class="testimonial-card__content"> 2859 <div class="testimonial-logo"> 2860 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dialpad.svg" 2861 alt="" 2862 class="light-mode-img" /> 2863 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dialpad-White-Colour.svg" 2864 alt="" 2865 class="dark-mode-img" /> 2866 </div> 2867 2868 <blockquote>âOne of the advantages of integrating with Nylas was how straightforward it was to sync contacts across multiple service providers and regardless of which version of Exchange our customers use.â</blockquote> 2869 </div> 2870 2871 <!-- Right side: Author info --> 2872 <div class="testimonial-author"> 2873 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/SefanRoesch-Dialpad.png" 2874 alt="Stefan Roesch" 2875 class="author-photo" /> 2876 <div class="author-info"> 2877 <strong>Stefan Roesch</strong> 2878 <span>Software Engineer</span> 2879 </div> 2880 </div> 2881 </div> 2882 <div class="testimonial-card"> 2883 <!-- Left side: Company logo and quote --> 2884 <div class="testimonial-card__content"> 2885 <div class="testimonial-logo"> 2886 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Clio.svg" 2887 alt="" 2888 class="light-mode-img" /> 2889 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Clio-White.svg" 2890 alt="" 2891 class="dark-mode-img" /> 2892 </div> 2893 2894 <blockquote>âIt would have cost us at least a year to build out just the Exchange and Google integration. By building on top of the Nylas API, the Clio team was able to focus on other core components of their CRM.ââ¨</blockquote> 2895 </div> 2896 2897 <!-- Right side: Author info --> 2898 <div class="testimonial-author"> 2899 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Aaron-George.png" 2900 alt="Aaron George " 2901 class="author-photo" /> 2902 <div class="author-info"> 2903 <strong>Aaron George </strong> 2904 <span>Co-founder of Lexicata (acquired by Clio)</span> 2905 </div> 2906 </div> 2907 </div> 2908 <div class="testimonial-card"> 2909 <!-- Left side: Company logo and quote --> 2910 <div class="testimonial-card__content"> 2911 <div class="testimonial-logo"> 2912 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dayfor
2912ce-Logo-e1774623461671.png" 2913 alt="" 2914 class="light-mode-img" /> 2915 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Dayforce-White.webp" 2916 alt="" 2917 class="dark-mode-img" /> 2918 </div> 2919 2920 <blockquote>âBy partnering with Nylas we were able to solve technical obstacles that wouldâve taken us a lot longer on our own and required a much larger investment of resources.â</blockquote> 2921 </div> 2922 2923 <!-- Right side: Author info --> 2924 <div class="testimonial-author"> 2925 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/[email protected]" 2926 alt="John Whyte" 2927 class="author-photo" /> 2928 <div class="author-info"> 2929 <strong>John Whyte</strong> 2930 <span>Director of Product Management</span> 2931 </div> 2932 </div> 2933 </div> 2934 <div class="testimonial-card"> 2935 <!-- Left side: Company logo and quote --> 2936 <div class="testimonial-card__content"> 2937 <div class="testimonial-logo"> 2938 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/TalentReef.svg" 2939 alt="" 2940 class="light-mode-img" /> 2941 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/TalentReef-White.svg" 2942 alt="" 2943 class="dark-mode-img" /> 2944 </div> 2945 2946 <blockquote>âThereâs no longer any disconnect with users copying and pasting information for scheduling or sending out manual emails. This has made a huge difference in response times.â</blockquote> 2947 </div> 2948 2949 <!-- Right side: Author info --> 2950 <div class="testimonial-author"> 2951 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/alexander-plum.png" 2952 alt="Alexander Plumb" 2953 class="author-photo" /> 2954 <div class="author-info"> 2955 <strong>Alexander Plumb</strong> 2956 <span>Sr. Product Manager </span> 2957 </div> 2958 </div> 2959 </div> 2960 <div class="testimonial-card"> 2961 <!-- Left side: Company logo and quote --> 2962 <div class="testimonial-card__content"> 2963 <div class="testimonial-logo"> 2964 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/RecruiterPM-logo-1-1.png" 2965 alt="" 2966 /> 2967 </div> 2968 2969 <blockquote>âBringing multiple channels into a single hub powered by Nylas has been a goldmine for user communication.â</blockquote> 2970 </div> 2971 2972 <!-- Right side: Author info --> 2973 <div class="testimonial-author"> 2974 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Daniel-Miller.webp" 2975 alt="Daniel Miller" 2976 class="author-photo" /> 2977 <div class="author-info"> 2978 <strong>Daniel Miller</strong> 2979 <span>Chief Product Officer</span> 2980 </div> 2981 </div> 2982 </div> 2983 <div class="testimonial-card"> 2984 <!-- Left side: Company logo and quote --> 2985 <div class="testimonial-card__content"> 2986 <div class="testimonial-logo"> 2987 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Foundersuite-2.png" 2988 alt="" 2989 class="light-mode-img" /> 2990 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Foundersuite-White.png" 2991 alt="" 2992 class="dark-mode-img" /> 2993 </div> 2994 2995 <blockquote>"We tried building our own Gmail integration, and it was always having issues. Moving to Nylas meant we could support both Gmail and Outlook users through one integration and reach virtually every founder on our platform."</blockquote> 2996 </div> 2997 2998 <!-- Right side: Author info --> 2999 <div class="testimonial-author"> 3000 <img decoding="async" src="https://www.nylas.com/wp-content/uploads/Nathan-Beckford.jpeg" 3001 alt="Nathan Beckord" 3002 class="author-photo" /> 3003 <div class="author-info"> 3004 <strong>Nathan Beckord</strong>
3005 <span>CEO, Foundersuite</span> 3006 </div> 3007 </div> 3008 </div> 3009 </div> 3010 3011 </div> 3012</section> 3013 3014 3015 3016 3017<!-- Font preconnect + stylesheet (faster than @import) --> 3018<link rel="preconnect" href="https://fonts.googleapis.com"> 3019<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 3020<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@600&family=Manrope:wght@400;600&family=Poppins:wght@500&display=swap"> 3021<!-- Inline CSS for Portability --> 3022<style> 3023.cta-banner-section { 3024 position: relative; 3025 padding: 80px 0; 3026 min-height: 330px; 3027 display: flex; 3028 align-items: center; 3029 overflow: hidden; 3030 font-family: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 3031 z-index: 2; 3032} 3033 3034.cta-banner-section * { 3035 box-sizing: border-box; 3036} 3037 3038/* Background Image - always visible, acts as fallback for video */ 3039.cta-banner__bg-image { 3040 position: absolute; 3041 top: 0; 3042 left: 0; 3043 width: 100%; 3044 height: 100%; 3045 background-size: cover; 3046 background-position: center center; 3047 z-index: 0; 3048} 3049 3050/* Video Background Container */ 3051.cta-banner__video-container { 3052 position: absolute; 3053 top: 0; 3054 left: 0; 3055 width: 100%; 3056 height: 100%; 3057 z-index: 0; 3058 overflow: hidden; 3059} 3060 3061/* Video - hidden until loaded */ 3062.cta-banner__video { 3063 position: absolute; 3064 top: 0; 3065 left: 0; 3066 width: 100%; 3067 height: 100%; 3068 object-fit: cover; 3069 object-position: center center; 3070 opacity: 0; 3071 transition: opacity 0.5s ease; 3072} 3073 3074.cta-banner__video--loaded { 3075 opacity: 1; 3076} 3077 3078.cta-banner__overlay { 3079 position: absolute; 3080 top: 0; 3081 left: 0; 3082 width: 100%; 3083 height: 100%; 3084 z-index: 1; 3085} 3086 3087/* Animated WebGL "veil" background canvas */ 3088.cta-banner__veil { 3089 position: absolute; 3090 top: 0; 3091 left: 0; 3092 width: 100%; 3093 height: 100%; 3094 display: block; 3095 z-index: 0; 3096 border: 0; 3097 pointer-events: none; 3098} 3099 3100/* Container */ 3101.cta-banner__container { 3102 position: relative; 3103 z-index: 2; 3104 width: 100%; 3105 max-width: 1200px; 3106 margin: 0 auto; 3107 padding: 0 24px; 3108} 3109 3110/* Content */ 3111.cta-banner__content { 3112 text-align: center; 3113 max-width: 750px; 3114 margin: 0 auto; 3115 padding: 60px 0; 3116} 3117 3118.cta-banner-section .cta-banner__title, 3119.cta-banner__title, 3120.cta-banner__content h2 { 3121 font-family: 'Manrope', sans-serif !important; 3122 font-style: normal !important; 3123 font-weight: 600 !important; 3124 font-size: 55px !important; 3125 color: #ffffff !important; 3126 margin: 0 0 16px 0 !important; 3127 line-height: 1.2 !important; 3128 overflow-wrap: anywhere; 3129} 3130 3131.cta-banner__subtitle { 3132 font-family: 'Manrope', sans-serif; 3133 font-style: normal; 3134 font-weight: 400; 3135 font-size: 20px; 3136 line-height: 26px; 3137 color: #ffffff; 3138 margin: 0 0 50px 0; 3139} 3140 3141/* Buttons */ 3142.cta-banner__buttons { 3143 display: flex; 3144 gap: 16px; 3145 justify-content: center; 3146 flex-wrap: wrap; 3147} 3148 3149/* Consistent pp-v2-btn styling (scoped + self-contained for portability) */ 3150.cta-banner-section .pp-v2-btn { 3151 display: inline-flex; 3152 align-items: center; 3153 justify-content: center; 3154 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 3155 font-style: normal; 3156 font-weight: 600; 3157 font-size: 16px; 3158 line-height: 24px; 3159 letter-spacing: 0.2px; 3160 text-align: center; 3161 text-decoration: none; 3162 padding: 12px 30px; 3163 border-radius: 30px; 3164 white-space: nowrap; 3165 cursor: pointer; 3166 transition: opacity .15s, background-color .2s ease, color .2s ease, border-color .2s ease; 3167} 3168 3169.cta-banner-section .pp-v2-btn:hover { 3170 opacity: .85; 3171} 3172 3173.cta-banner-section .pp-v2-btn--primary { 3174 background: #ffffff; 3175 color: #000000; 3176 border: none; 3177 min-width: 186px; 3178} 3179 3180.cta-banner-section .pp-v2-btn--primary:hover { 3181 background: #ffffff; 3182 color: #000000; 3183 opacity: .85; 3184} 3185 3186/* 2nd button: outline variant with the requested overrides */ 3187.cta-banner-section .pp-v2-btn--outline { 3188 border-radius: 55px; 3189 border: 1px solid #8E8E8E; 3190 background: #000; 3191 color: #ffffff; 3192} 3193 3194.cta-banner-section .pp-v2-btn--outline:hover { 3195 background: #ffffff; 3196 color: #000000; 3197 border-color: #ffffff; 3198 opacity: 1; 3199} 3200 3201/* Responsive */ 3202@media (max-width: 1024px) { 3203 .cta-banner-section .cta-banner__title, 3204 .cta-banner__title, 3205 .cta-banner__content h2 { 3206 font-size: 42px !important; 3207 } 3208} 3209 3210@media (max-width: 768px) { 3211 .cta-banner-section { 3212 padding: 60px 0; 3213 } 3214 3215 .cta-banner__container { 3216 padding: 0 20px; 3217 } 3218 3219 .cta-banner-section .cta-banner__title, 3220 .cta-banner__title, 3221 .cta-banner__content h2 { 3222 font-size: 32px !important; 3223 } 3224 3225 .cta-banner__subtitle { 3226 font-size: 18px; 3227 line-height: 24px; 3228 } 3229 3230 .cta-banner__buttons { 3231 flex-direction: column; 3232 } 3233 3234 .cta-banner-section .pp-v2-btn { 3235 width: 100%; 3236 } 3237} 3238 3239@media (max-width: 480px) { 3240 .cta-banner-section .cta-banner__title, 3241 .cta-banner__title, 3242 .cta-banner__content h2 { 3243 font-size: 28px !important; 3244 } 3245 3246 .cta-banner__subtitle { 3247 font-size: 16px; 3248 } 3249} 3250</style> 3251 3252<section class="cta-banner-section" id="cta-banner-6ab48bee8bc73" 3253 style="background: radial-gradient(120% 120% at 50% 0%, #0B9B8A 0%, #06463d 60%, #032c26 100%);"> 3254 3255 <!-- Animated WebGL green background (falls back to the CSS green above) --> 3256 <canvas class="veil-bg cta-banner__veil" aria-hidden="true"></canvas> 3257 3258 3259 3260 3261 <div class="cta-banner__container"> 3262 <div class="cta-banner__content"> 3263 <h2 id="ready-to-start-building">Ready to start building?</h2> 3264 3265 <p class="cta-banner__subtitle">Discover the power of the Nylas platform and connect up to 5 accounts for free.</p> 3266 3267 <div class="cta-banner__buttons"> 3268 <a href="https://dashboard-v3.nylas.com/register/" 3269 target="_self" 3270 class="cta-banner__btn pp-v2-btn pp-v2-btn--primary"> 3271 Build now </a> 3272 3273 <a href="https://developer.nylas.com/" 3274 target="_self" 3275 class="cta-banner__btn pp-v2-btn pp-v2-btn--outline"> 3276 See the docs </a> 3277 </div> 3278 </div> 3279 </div> 3280</section> 3281 3282</main> 3283 3284 3285 3286 3287 3288 3289 <footer class="site-footer site-footer--2025"> 3290 <div class="main-container"> 3291 3292 <div class="footer-top"> 3293 <div class="footer-nav"> 3294 <ul class="footer-menu"> 3295 <li class="footer-menu__info-item"> 3296 <div class="footer-info"> 3297 <a href="/" class="footer-logo"> 3298 <svg width="114" height="33" viewBox="0 0 114 33" fill="none" xmlns="http://www.w3.org/2000/svg"> 3299<g clip-path="url(#clip0_1433_328)"> 3300<path d="M25.9908 4.71236C24.0672 2.78362 21.5086 1.72266 18.7827 1.72266C16.0568 1.72266 13.4951 2.78362 11.5
3300746 4.71236L1.14782 15.1668C0.901448 15.4139 0.765625 15.7432 0.765625 16.0948C0.765625 16.4463 0.901448 16.7757 1.14782 17.0227C1.3942 17.2698 1.7227 17.4059 2.07332 17.4059C2.42393 17.4059 2.75243 17.2698 2.99881 17.0227L13.4224 6.56826C16.3758 3.60706 21.1865 3.60706 24.1398 6.56826C27.0932 9.53263 27.0963 14.3529 24.1398 17.3141L13.7162 27.7654C13.2076 28.2753 13.2076 29.1082 13.7162 29.6213C13.9626 29.8683 14.2911 30.0045 14.6417 30.0045C14.9923 30.0045 15.3208 29.8683 15.5672 29.6213L25.9908 19.17C27.9144 17.2413 28.9726 14.6759 28.9726 11.9428C28.9726 9.20959 27.9144 6.6411 25.9908 4.71553V4.71236Z" fill="white"/> 3301<path d="M24.5306 11.9422C24.5306 10.3998 23.9336 8.95245 22.8471 7.86615C20.6044 5.61753 16.9561 5.61753 14.7135 7.86615L0.862669 21.7506C0.616292 21.9976 0.480469 22.327 0.480469 22.6785C0.480469 23.03 0.616292 23.3594 0.862669 23.6064C1.10905 23.8535 1.43755 23.9897 1.78816 23.9897C2.13877 23.9897 2.46728 23.8535 2.71365 23.6064L16.4128 9.88673L16.4349 9.8614C16.476 9.81389 16.5202 9.76322 16.5644 9.71888C16.615 9.66821 16.6718 9.6207 16.7255 9.5732L16.7571 9.54469C17.9922 8.49639 19.8558 8.5724 20.9992 9.71888C22.1427 10.8654 22.2185 12.5914 21.2804 13.8361L21.2709 13.8487C21.173 13.9754 21.0877 14.0768 20.9992 14.1654C20.9139 14.2509 20.816 14.3365 20.677 14.4473L7.14843 28.0498C6.90206 28.2969 6.76623 28.6262 6.76623 28.9778C6.76623 29.3293 6.90206 29.6587 7.14843 29.9057C7.39481 30.1528 7.72331 30.2889 8.07393 30.2889C8.42454 30.2889 8.75304 30.1528 8.99942 29.9057L22.8502 16.0182C23.9336 14.9319 24.5338 13.4813 24.5338 11.9422H24.5306Z" fill="white"/> 3302<path d="M17.484 14.7999C17.1365 14.6416 16.827 14.4294 16.5648 14.1665C16.3026 13.9037 16.091 13.5933 15.9331 13.2449L15.8383 13.0391L0.537668 28.3803C0.237593 28.6812 0.0512314 29.0612 0.0101686 29.4476C-0.0308942 29.8403 0.0828181 30.1919 0.332354 30.4421C0.543985 30.6543 0.844059 30.7714 1.17256 30.7714C1.6053 30.7714 2.04751 30.5751 2.38865 30.233L17.6893 14.8918L17.484 14.7968V14.7999Z" fill="white"/> 3303<path d="M113.245 17.2984C112.932 16.7188 112.512 16.2279 111.988 15.8384C111.457 15.4425 110.847 15.1289 110.171 14.9041C109.48 14.6729 108.769 14.4765 108.058 14.3118C107.262 14.125 106.447 13.916 105.639 13.6974C104.814 13.4726 104.129 13.1907 103.605 12.8582C103.412 12.7663 103.188 12.5668 103.188 12.1266C103.188 11.9556 103.229 11.7877 103.314 11.6198L103.33 11.5945C103.513 11.3316 103.81 11.1004 104.243 10.8819C104.672 10.6666 105.294 10.562 106.147 10.562C106.82 10.562 107.398 10.6539 107.862 10.8376C108.324 11.0213 108.706 11.243 109.003 11.5027C109.296 11.7592 109.537 12.0474 109.723 12.3546C109.852 12.57 109.969 12.7758 110.067 12.9627L113.036 11.0308C112.856 10.6222 112.604 10.1915 112.281 9.74811C111.921 9.25088 111.46 8.78849 110.907 8.37044C110.355 7.95238 109.679 7.60084 108.898 7.32847C108.118 7.05611 107.193 6.91992 106.147 6.91992C104.922 6.91992 103.886 7.08778 103.074 7.41398C102.262 7.74336 101.599 8.14241 101.106 8.60163C100.613 9.06086 100.241 9.55492 99.9941 10.068C99.7446 10.5905 99.574 11.0593 99.4856 11.4647C99.4635 11.5945 99.4414 11.7434 99.4193 11.9049C99.3971 12.0569 99.3845 12.1994 99.3845 12.3324C99.3845 13.1749 99.5961 13.8843 100.01 14.4417C100.433 15.0149 100.973 15.4995 101.615 15.8795C102.262 16.2659 102.976 16.5795 103.737 16.8075C104.514 17.0387 105.257 17.2382 105.945 17.3997C106.618 17.5613 107.259 17.7291 107.856 17.8938C108.469 18.0616 108.977 18.2833 109.366 18.5525C109.726 18.8312 109.906 19.167 109.906 19.5533C109.906 19.9682 109.745 20.2976 109.426 20.5351C109.142 20.7442 108.807 20.9152 108.425 21.0355C108.055 21.1559 107.67 21.235 107.281 21.2731C106.905 21.3079 106.593 21.3269 106.353 21.3269C105.617 21.3269 104.985 21.254 104.483 21.1084C103.977 20.9627 103.56 20.7917 103.244 20.5953C102.925 20.3989 102.673 20.1899 102.496 19.9746C102.328 19.7719 102.205 19.604 102.129 19.4773L101.788 18.9769L98.8223 20.9057C99.0592 21.2762 99.3561 21.6879 99.7035 22.1282C100.098 22.6254 100.607 23.0973 101.22 23.528C101.832 23.9587 102.568 24.3229 103.409 24.608C104.249 24.893 105.238 25.0355 106.353 25.0355C107.265 25.0355 108.084 24.9532 108.791 24.7948C109.495 24.6333 110.118 24.4211 110.636 24.1614C111.151 23.9049 111.586 23.604 111.934 23.2651C112.285 22.9263 112.575 22.581 112.799 22.2453C113.336 21.4377 113.643 20.5035 113.712 19.4678C113.712 18.6064 113.554 17.8716 113.245 17.2952V17.2984Z" fill="white"/> 3304<path d="M43.491 6.7793C39.2299 6.7793 35.7617 10.2567 35.7617 14.5291V24.6827H39.4605V14.5291C39.4605 12.3027 41.2673 10.4911 43.4878 10.4911C45.7084 10.4911 47.5151 12.3027 47.5151 14.5291V24.6827H51.214V14.5291C51.214 10.2567 47.7457 6.7793 43.4847 6.7793H43.491Z" fill="white"/> 3305<path d="M88.4424 6.7793C83.4201 6.7793 79.3359 10.8743 79.3359 15.9099C79.3359 20.9456 83.4233 25.0406 88.4424 25.0406C90.2713 25.0406 92.037 24.499 93.5468 23.4729L93.85 23.267V24.6795H97.5489V15.9099C97.5489 10.8743 93.4647 6.7793 88.4424 6.7793ZM88.4424 21.332C85.4606 21.332 83.0347 18.8996 83.0347 15.9099
3305C83.0347 12.9202 85.4606 10.4879 88.4424 10.4879C91.4242 10.4879 93.85 12.9202 93.85 15.9099C93.85 18.8996 91.4242 21.332 88.4424 21.332Z" fill="white"/> 3306<path d="M75.3824 17.2944V0.271484H71.6836V17.2944C71.6836 21.5003 75.0444 24.9366 79.217 25.0411V21.3293C77.0849 21.2279 75.3824 19.4576 75.3824 17.2944Z" fill="white"/> 3307<path d="M65.3648 7.14062V17.3164C65.3648 19.0519 64.2434 20.6196 62.642 21.1295C61.3532 21.5381 60.0108 21.3291 58.959 20.5563C57.9261 19.7962 57.3101 18.5801 57.3101 17.2974V7.14062H53.6113V17.2657C53.6113 20.778 55.9014 23.8532 59.1769 24.7463C61.2048 25.3006 63.3021 25.0599 65.0773 24.0749L65.3648 23.9134V24.5246C65.3648 26.6846 63.6622 28.455 61.5301 28.5595V32.2713C65.7027 32.1668 69.0636 28.7337 69.0636 24.5246V7.14062H65.3648Z" fill="white"/> 3308</g> 3309<defs> 3310<clipPath id="clip0_1433_328"> 3311<rect width="114" height="32" fill="white" transform="translate(0 0.271484)"/> 3312</clipPath> 3313</defs> 3314</svg> 3315 </a> 3316 3317 <div class="social"> 3318 <ul> 3319 <li> 3320 <a href="https://github.com/nylas/" target="_blank" 3321 rel="nofollow" aria-label=" link"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 3322<g clip-path="url(#clip0_22_685)"> 3323<path fill-rule="evenodd" clip-rule="evenodd" d="M11.9642 0.516388C5.34833 0.516388 0 5.90414 0 12.5695C0 17.8975 3.42686 22.4076 8.18082 24.0038C8.77518 24.1238 8.9929 23.7445 8.9929 23.4254C8.9929 23.1459 8.97331 22.1881 8.97331 21.1902C5.64514 21.9087 4.95208 19.7534 4.95208 19.7534C4.41722 18.3565 3.62473 17.9974 3.62473 17.9974C2.53543 17.2591 3.70408 17.2591 3.70408 17.2591C4.91241 17.3389 5.54645 18.4963 5.54645 18.4963C6.61592 20.3321 8.33927 19.8134 9.03257 19.494C9.13151 18.7157 9.44865 18.177 9.78539 17.8777C7.13094 17.5983 4.33812 16.5606 4.33812 11.9308C4.33812 10.6138 4.81322 9.53622 5.56604 8.69818C5.44727 8.39892 5.03118 7.16145 5.68506 5.5052C5.68506 5.5052 6.69527 5.18586 8.97306 6.74243C9.94827 6.47859 10.954 6.34437 11.9642 6.34324C12.9744 6.34324 14.0042 6.48308 14.9552 6.74243C17.2332 5.18586 18.2434 5.5052 18.2434 5.5052C18.8973 7.16145 18.481 8.39892 18.3622 8.69818C19.1349 9.53622 19.5904 10.6138 19.5904 11.9308C19.5904 16.5606 16.7976 17.5782 14.1233 17.8777C14.5592 18.2568 14.9353 18.9751 14.9353 20.1126C14.9353 21.729 14.9158 23.0262 14.9158 23.4251C14.9158 23.7445 15.1337 24.1238 15.7278 24.0041C20.4818 22.4073 23.9087 17.8975 23.9087 12.5695C23.9282 5.90414 18.5603 0.516388 11.9642 0.516388Z" fill="#B3B8D8"/> 3324</g> 3325<defs> 3326<clipPath id="clip0_22_685"> 3327<rect width="24" height="24" fill="white" transform="translate(0 0.271484)"/> 3328</clipPath> 3329</defs> 3330</svg> 3331</a> 3332 </li> 3333 <li> 3334 <a href="https://www.linkedin.com/company/nylas/" target="_blank" 3335 rel="nofollow" aria-label=" link"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 3336<g clip-path="url(#clip0_22_686)"> 3337<path fill-rule="evenodd" clip-rule="evenodd" d="M21.0678 0.271484C22.6861 0.271484 24 1.58539 24 3.2037V21.3393C24 22.9576 22.6861 24.2715 21.0678 24.2715H2.93222C1.31391 24.2715 0 22.9576 0 21.3393V3.2037C0 1.58539 1.31386 0.271484 2.93222 0.271484L21.0678 0.271484ZM7.52161 20.1126V9.53216H4.00411V20.1126H7.52161ZM20.2031 20.1126V14.0452C20.2031 10.7952 18.4679 9.28334 16.154 9.28334C14.2882 9.28334 13.4524 10.3095 12.9845 11.0302V9.53216H9.46786C9.5145 10.525 9.46786 20.1126 9.46786 20.1126H12.9844V14.2038C12.9844 13.8875 13.0072 13.5713 13.1004 13.3453C13.3542 12.7136 13.9332 12.0593 14.9048 12.0593C16.1767 12.0593 16.6864 13.0299 16.6864 14.4516V20.1126H20.2031ZM5.78662 4.43033C4.58316 4.43033 3.79688 5.22153 3.79688 6.25855C3.79688 7.27377 4.55925 8.08677 5.74008 8.08677H5.76277C6.98925 8.08677 7.7527 7.27377 7.7527 6.25855C7.72997 5.22298 6.99141 4.43258 5.78662 4.43033Z" fill="#B3B8D8"/> 3338</g> 3339<defs> 3340<clipPath id="clip0_22_686"> 3341<rect width="24" height="24" fill="white" transform="translate(0 0.271484)"/> 3342</clipPath> 3343</defs> 3344</svg> 3345</a> 3346 </li> 3347 <li> 3348 <a href="https://www.youtube.com/c/nylas" target="_blank" 3349 rel="nofollow" aria-label=" link">
3349<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 3350<path d="M23.4986 6.49485C23.2226 5.46219 22.4094 4.64905 21.3768 4.37305C19.505 3.87149 12 3.87149 12 3.87149C12 3.87149 4.49498 3.87149 2.62317 4.37305C1.5907 4.64905 0.777375 5.46219 0.501422 6.49485C0 8.36647 0 12.2716 0 12.2716C0 12.2716 0 16.1767 0.501422 18.0481C0.777375 19.0808 1.5907 19.8942 2.62317 20.1701C4.49498 20.6715 12 20.6715 12 20.6715C12 20.6715 19.505 20.6715 21.3768 20.1701C22.4094 19.8942 23.2226 19.0808 23.4986 18.0481C24 16.1767 24 12.2716 24 12.2716C24 12.2716 24 8.36647 23.4986 6.49485ZM9.59986 15.8717V8.67154L15.8351 12.2716L9.59986 15.8717Z" fill="#B3B8D8"/> 3351</svg> 3352</a> 3353 </li> 3354 <li> 3355 <a href="https://twitter.com/nylas" target="_blank" 3356 rel="nofollow" aria-label=" link"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 3357<g clip-path="url(#clip0_1433_350)"> 3358<path d="M13.857 10.7793L21.1175 2.52148H19.3976L13.0907 9.69019L8.0571 2.52148H2.25L9.86345 13.3629L2.25 22.0214H3.9699L10.6259 14.4494L15.9429 22.0214H21.75M4.59065 3.79052H7.2329L19.3964 20.8147H16.7534" fill="#B3B8D8"/> 3359</g> 3360<defs> 3361<clipPath id="clip0_1433_350"> 3362<rect width="19.5" height="19.5" fill="white" transform="translate(2.25 2.52148)"/> 3363</clipPath> 3364</defs> 3365</svg> 3366</a> 3367 </li> 3368 </ul> 3369 </div> 3370 </div> 3371 </li> 3372 3373 <li> 3374 <h6>Contact</h6> 3375 <ul id="menu-footer_contact" class=""><li id="menu-item-38147" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38147"><a href="https://www.nylas.com/contact-sales/">Contact Sales</a></li> 3376<li id="menu-item-12070" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12070"><a href="https://developer.nylas.com/docs/support/">Support</a></li> 3377</ul> </li> 3378 <li> 3379 <h6>Products</h6> 3380 <ul id="menu-footer_products" class=""><li id="menu-item-31331" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-31331"><a href="https://www.nylas.com/products/email-api/">Email API</a></li> 3381<li id="menu-item-31330" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-31330"><a href="https://www.nylas.com/products/calendar-api/">Calendar API</a></li> 3382<li id="menu-item-38042" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38042"><a href="https://www.nylas.com/products/scheduler/">Scheduler</a></li> 3383<li id="menu-item-40601" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-40601"><a href="https://www.nylas.com/products/notetaker-api/">Notetaker API</a></li> 3384<li id="menu-item-48779" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48779"><a href="https://www.nylas.com/products/agent-accounts/">Agent Accounts</a></li> 3385<li id="menu-item-38005" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38005"><a href="https://www.nylas.com/pricing/">Pricing</a></li> 3386</ul> </li> 3387 <li> 3388 <h6>Solutions</h6> 3389 <ul id="menu-footer_solutions" class=""><li id="menu-item-48780" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48780"><a href="https://www.nylas.com/solutions/sales-crm/">Sales & CRM</a></li> 3390<li id="menu-item-48781" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48781"><a href="https://www.nylas.com/solutions/recruiting-ats/">Recruiting & ATS</a></li> 3391<li id="menu-item-48783" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48783"><a href="https://www.nylas.com/solutions/healthcare/">Healthcare</a></li> 3392<li id="menu-item-48787" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48787"><a href="https://www.nylas.com/solutions/financial/">Financial</a></li> 3393<li id="menu-item-48786" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48786"><a href="https://www.nylas.com/solutions/legal/">Legal</a></li> 3394<li id="menu-item-48784" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48784"><a href="https://www.nylas.com/solutions/real-estate/">Real Estate</a></li> 3395<li id="menu-item-48785" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48785"><a href="https://www.nylas.com/solutions/education/">Education</a></li> 3396<li id="menu-item-48782" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48782"><a href="https://www.nylas.com/solutions/field-services/">Field Services</a></li> 3397</ul> </li> 3398 <li> 3399 <h6>Developers</h6> 3400 <ul id="menu-footer_developers" class=""><li id="menu-item-25028" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25028"><a href="https://dashboard-v3.nylas.com/register">Build for free</a></li> 3401<li id="menu-item-27943" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27943"><a href="https://developer.nylas.com/docs/v3/getting-started/">Docs</a></li> 3402<li id="menu-item-12077" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12077"><a href="https://developer.nylas.com/docs/v3/sdks/">SDKs</a></li> 3403<li id="menu-item-12078" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12078"><a href="https://developer.nylas.com/docs/dev-guide/">Guides</a></li> 3404<li id="menu-item-27945" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27945"><a href="https://status.nylas.com/">API status</a></li> 3405<li id="menu-item-27946" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27946"><a href="https://developer.nylas.com/docs/changelogs/">Changelog</a></li> 3406<li id="menu-item-12071" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12071"><a href="https://developer.nylas.com/docs/support/">Support</a></li> 3407<li id="menu-item-32159" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-32159"><a href="https://forums.nylas.com/">Developer forums</a></li> 3408<li id="menu-item-48776" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48776"><a href="https://www.nylas.com/integrations/">Integrations</a></li> 3409<li id="menu-item-48943" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-48943"><a href="https://www.nylas.com/resources/guides/">Learning Guides</a></li> 3410</ul> </li> 3411 <li> 3412 <h6>Company</h6> 3413 <ul id="menu-footer_company" class=""><li id="menu-item-12048" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12048"><a href="https://www.nylas.com/leadership-team/">Company</a></li>
3414<li id="menu-item-12049" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12049"><a href="https://www.nylas.com/company/jobs/">Careers</a></li> 3415<li id="menu-item-11224" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11224"><a href="https://www.nylas.com/newsroom/">Newsroom</a></li> 3416<li id="menu-item-48773" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-48773"><a href="https://www.nylas.com/case-studies/">Customer Stories</a></li> 3417<li id="menu-item-48775" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-48775"><a href="https://www.nylas.com/events/">Events</a></li> 3418<li id="menu-item-12061" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12061"><a href="https://www.nylas.com/blog/">Blog</a></li> 3419<li id="menu-item-42079" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-42079"><a href="https://www.nylas.com/resources/podcasts/">Podcasts</a></li> 3420<li id="menu-item-43292" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-43292"><a href="https://www.nylas.com/security/">Security</a></li> 3421</ul> </li> 3422 </ul> 3423 </div> 3424 </div> 3425 3426 3427 <div class="footer-bottom"> 3428 3429 <div class="wrap"> 3430 <p>© 2026 Nylas. All rights reserved.</p> 3431 <ul id="menu-copyright" class="add-nav"><li id="menu-item-12088" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12088"><a rel="httpswwwnylascomlegalterms" href="https://www.nylas.com/legal/terms/">Terms of Use</a></li> 3432<li id="menu-item-12087" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-12087"><a rel="httpswwwnylascomprivacy-policy privacy-policy" href="https://www.nylas.com/privacy-policy/">Privacy Policy</a></li> 3433<li id="menu-item-26916" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26916"><a href="https://www.nylas.com/privacy-settings/">Privacy Settings</a></li> 3434<li id="menu-item-12086" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12086"><a rel="httpswwwnylascomlegalcopyright" href="https://www.nylas.com/legal/copyright/">Copyright Policy</a></li> 3435<li id="menu-item-39366" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-39366"><a target="_blank" href="https://opt-out.nylas.com/">Do Not Sell or Share My Personal Information</a></li> 3436</ul> </div> 3437 </div> 3438 </div> 3439 </footer> 3440 <div class="popups-wrap"> 3441 </div> 3442
3442<script type="speculationrules"> 3443{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/nylas\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 3444</script>
3444 3445
3445<script> 3446 ( () => { 3447 const lazyloadRunObserver = () => { 3448 const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); 3449 const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { 3450 entries.forEach( ( entry ) => { 3451 if ( entry.isIntersecting ) { 3452 let lazyloadBackground = entry.target; 3453 if( lazyloadBackground ) { 3454 lazyloadBackground.classList.add( 'e-lazyloaded' ); 3455 } 3456 lazyloadBackgroundObserver.unobserve( entry.target ); 3457 } 3458 }); 3459 }, { rootMargin: '200px 0px 200px 0px' } ); 3460 lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { 3461 lazyloadBackgroundObserver.observe( lazyloadBackground ); 3462 } ); 3463 }; 3464 const events = [ 3465 'DOMContentLoaded', 3466 'elementor/lazyload/observe', 3467 ]; 3468 events.forEach( ( event ) => { 3469 document.addEventListener( event, lazyloadRunObserver ); 3470 } ); 3471 } )(); 3472 </script>
3472 3473 <link rel='stylesheet' id='sponsor-logos-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/sponsor-logos.css?ver=1781038475.3735' type='text/css' media='all' /> 3474<link rel='stylesheet' id='api-code-block-style-css' href='https://www.nylas.com/wp-content/plugins/api-code-showcase-block/assets/css/api-code-block.css?ver=1.4.0' type='text/css' media='all' />
3475<script type="text/javascript" src="https://www.nylas.com/.cloud/module/mcp-to-angie-connector/assets/dist/angie-mcp-init.js?ver=1.0.10" id="mcp-to-angie-connector-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 3475
3475
3476<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/aos.js?ver=1.0.0" id="aos-js"></script>
vendor: 1 bytes, line 3476
3476
3477<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/circle-progress.min.js?ver=1.0.0" id="cp-js"></script>
vendor: 1 bytes, line 3477
3477
3478<script type="text/javascript" src="https://www.nylas.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3" id="jquery-ui-core-js"></script>
vendor: 1 bytes, line 3478
3478
3479<script type="text/javascript" src="https://www.nylas.com/wp-includes/js/jquery/ui/tabs.min.js?ver=1.13.3" id="jquery-ui-tabs-js"></script>
vendor: 1 bytes, line 3479
3479
3480<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/gwv-polyfill.1.1.0.js?ver=1.1.0" id="gwv-polyfill-js"></script>
vendor: 1 bytes, line 3480
3480
3481<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/gwv.base.umd.js?ver=1.1.0" id="gwv-js"></script>
vendor: 1 bytes, line 3481
3481
3482<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/slick.min.js?ver=6.8.10" id="slick-js"></script>
vendor: 1 bytes, line 3482
3482
3483<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlight.min.js?ver=6.8.10" id="highlight-js"></script>
vendor: 1 bytes, line 3483
3483
3484<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlightjs-line-numbers.min.js?ver=6.8.10" id="highlightjs-line-numbers-js"></script>
vendor: 1 bytes, line 3484
3484
3485<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlightjs-copy.min.js?ver=6.8.10" id="highlightjs-copy-js"></script>
vendor: 1 bytes, line 3485
3485
3486<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlightjs-curl.js?ver=6.8.10" id="highlightjs-curl-js"></script>
vendor: 1 bytes, line 3486
3486
3487<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/build/js/build.js?ver=1781049825" id="build-js"></script>
vendor: 227 bytes, lines 3487-3488
3487 3488<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=c4wp_onloadCallback&render=explicit&hl=en&ver=7.6.2" id="c4wp-method-provider-js" defer="defer" data-wp-strategy="defer"></script>
3489<script type="text/javascript" id="c4wp-method-js-extra"> 3490/* <![CDATA[ */ 3491var c4wpConfig = {"ajax_url":"https:\/\/www.nylas.com\/wp-admin\/admin-ajax.php","captcha_version":"v2_checkbox","disable_submit":"","site_key":"6Lc0y7EZAAAAALZHVaVorwkfhjbNeCIo6SWoqXE_","size":"normal","theme":"light","badge":"bottomright","failure_action":"nothing","additional_js":"","fallback_js":"\"\\t\\t\\t\\n\\t\\t\\t\\\/* @v3-fallback-js:start *\\\/\\n\\t\\t\\tif ( typeof captcha_div == 'undefined' && form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\tvar captcha_div = form.querySelector( '#additional-information-c4wp-c4wp-wc-checkout' );\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( ! captcha_div && form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\tvar captcha_div = form.querySelector( '#order-c4wp-c4wp-wc-checkout' );\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( typeof captcha_div == 'undefined' ) {\\n\\t\\t\\t\\tvar captcha_div = form.querySelector( '.c4wp_captcha_field_div' );\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar parentElem = captcha_div.parentElement;\\n\\n\\t\\t\\tif ( ( form.classList.contains( 'c4wp-primed' ) ) || ( ! form.classList.contains( 'c4wp_verify_underway' ) && captcha_div.parentElement.getAttribute( 'data-c4wp-use-ajax' ) == 'true' ) ) {\\n\\n\\t\\t\\t\\tform.classList.add('c4wp_verify_underway' );\\n\\t\\t\\t\\tconst flagMarkup = '<input id=\\\"c4wp_ajax_flag\\\" type=\\\"hidden\\\" name=\\\"c4wp_ajax_flag\\\" value=\\\"c4wp_ajax_flag\\\">';\\n\\t\\t\\t\\tvar flagMarkupDiv = document.createElement('div');\\n\\t\\t\\t\\tflagMarkupDiv.innerHTML = flagMarkup.trim();\\n\\n\\t\\t\\t\\tform.appendChild( flagMarkupDiv );\\n\\t\\n\\t\\t\\t\\tvar nonce = captcha_div.parentElement.getAttribute( 'data-nonce' );\\n\\n\\t\\t\\t\\tvar formData = new FormData();\\n\\n\\t\\t\\t\\tformData.append( 'action', 'c4wp_ajax_verify' );\\n\\t\\t\\t\\tformData.append( 'nonce', nonce );\\n\\t\\t\\t\\tformData.append( 'response', data );\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tfetch( 'https:\\\/\\\/www.nylas.com\\\/wp-admin\\\/admin-ajax.php', {\\n\\t\\t\\t\\t\\tmethod: 'POST',\\n\\t\\t\\t\\t\\tbody: formData,\\n\\t\\t\\t\\t} ) \\\/\\\/ wrapped\\n\\t\\t\\t\\t\\t.then( \\n\\t\\t\\t\\t\\t\\tres => res.json()\\n\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t.then( data => {\\n\\t\\t\\t\\t\\t\\tif ( data['success'] ) {\\n\\n\\t\\t\\t\\t\\t\\t\\tform.classList.add( 'c4wp_verified' );\\n\\n\\t\\t\\t\\t\\t\\t\\tvar existingFlag = document.getElementById('c4wp_ajax_flag');\\n\\t\\t\\t\\t\\t\\t\\tif (existingFlag) {\\n\\t\\t\\t\\t\\t\\t\\t\\texistingFlag.value = data.data.token; \\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tconst flagMarkup = '<input id=\\\"c4wp_ajax_flag\\\" type=\\\"hidden\\\" name=\\\"c4wp_ajax_flag\\\" value=\\\"' + data.data.token + '\\\">';\\n\\t\\t\\t\\t\\t\\t\\t\\tvar flagMarkupDiv = document.createElement('div');\\n\\t\\t\\t\\t\\t\\t\\t\\tflagMarkupDiv.innerHTML = flagMarkup.trim();\\n\\t\\t\\t\\t\\t\\t\\t\\tform.appendChild( flagMarkupDiv );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\\/\\\/ Submit as usual.\\n\\t\\t\\t\\t\\t\\t\\tif ( foundSubmitBtn ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tfoundSubmitBtn.click();\\n\\t\\t\\t\\t\\t\\t\\t} else if ( form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery( form ).find( '.wc-block-components-checkout-place-order-button:not(.c4wp-submit)' ).click(); \\n\\t\\t\\t\\t\\t\\t\\t} else {\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( typeof form.submit === 'function' ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tform.submit();\\n\\t\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tHTMLFormElement.prototype.submit.call(form);\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\\/\\\/jQuery( '.nf-form-cont' ).trigger( 'nfFormReady' );\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( 'redirect' === 'nothing' ) {\\n\\t\\t\\t\\t\\t\\t\\t\\twindow.location.href = '';\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( 'v2_checkbox' === 'nothing' ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcaptcha_div = captcha_div.parentElement;\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\tcaptcha_div.innerHTML = '';\\n\\t\\t\\t\\t\\t\\t\\t\\tform.classList.add( 'c4wp_v2_fallback_active' );\\n\\t\\t\\t\\t\\t\\t\\t\\tflagMarkupDiv.firstChild.setAttribute( '
3491name', 'c4wp_v2_fallback' );\\n\\n\\t\\t\\t\\t\\t\\t\\t\\tvar c4wp_captcha = grecaptcha.render( captcha_div,{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'sitekey' : '',\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'size' : 'normal',\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'theme' : 'light',\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'expired-callback' : function(){\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tgrecaptcha.reset( c4wp_captcha );\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}); \\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery( '.ninja-forms-field.c4wp-submit' ).prop( 'disabled', false );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( form.parentElement.classList.contains( 'nf-form-layout' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery( '.ninja-forms-field.c4wp-submit' ).prop( 'disabled', false );\\n\\t\\t\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\\/\\\/ Prevent further submission\\n\\t\\t\\t\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} )\\n\\t\\t\\t\\t\\t.catch( err => console.error( err ) );\\n\\n\\t\\t\\t\\t\\\/\\\/ Prevent further submission\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\t\\\/* @v3-fallback-js:end *\\\/\\n\\t\\t\\t\\n\\t\\t\\t\"","flag_markup":"<input id=\"c4wp_ajax_flag\" type=\"hidden\" name=\"c4wp_ajax_flag\" value=\"c4wp_ajax_flag\">","field_markup":"<div class=\"c4wp_captcha_field\" style=\"margin-bottom: 10px;\" data-nonce=\"541f1d6a44\" ><div id=\"c4wp_captcha_field_0\" class=\"c4wp_captcha_field_div\"><\/div><\/div>","redirect":"","failure_v2_site_key":""}; 3492/* ]]> */ 3493</script>
vendor: 1 bytes, line 3493
3493
3494<script type="text/javascript" src="https://www.nylas.com/wp-content/plugins/advanced-nocaptcha-recaptcha/includes/methods/js/c4wp-v2_checkbox.js?ver=7.6.2" id="c4wp-method-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 3494
3494
3495<script type="text/javascript" src="https://www.nylas.com/wp-content/plugins/enlighter/cache/enlighterjs.min.js?ver=nBGpNqTfHqCvwcY" id="enlighterjs-js"></script>
vendor: 1 bytes, line 3495
3495
3496<script type="text/javascript" id="enlighterjs-js-after"> 3497/* <![CDATA[ */ 3498!function(e,n){if("undefined"!=typeof EnlighterJS){var o={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":2,"ampersandCleanup":true,"linehover":false,"rawcodeDbclick":false,"textOverflow":"break","linenumbers":true,"theme":"enlighter","language":"generic","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""}};(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console); 3499/* ]]> */ 3500</script>
vendor: 1 bytes, line 3500
3500
3501<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/veil-background.js?ver=1781015742" id="veil-background-js"></script>
vendor: 1 bytes, line 3501
3501
3502<script type="text/javascript" src="https://www.nylas.com/wp-content/plugins/api-code-showcase-block/assets/js/prism.min.js?ver=1.29.0-ts1" id="api-code-block-prism-js"></script>
vendor: 1 bytes, line 3502
3502
3503<script type="text/javascript" src="https://www.nylas.com/wp-content/plugins/api-code-showcase-block/assets/js/api-code-block.js?ver=1.4.0" id="api-code-block-script-js"></script>
3503 3504
3504<script> 3505 (function() { 3506 /** 3507 * Section Snap Scroll 3508 * âââââââââââââââââââââââââââââââââââââââââââââââââââââ 3509 * Smooth snap between .product-feature-section blocks. 3510 * Desktop only (> 900px). Sections keep natural height. 3511 * 3512 * 1. User scrolls the page freely. 3513 * 2. When scrolling stops and a section top is near the 3514 * viewport top, it nudges into alignment. 3515 * 3. Once aligned, wheel / key / touch gestures move 3516 * one section at a time. 3517 * 4. At the first or last section, normal scroll resumes. 3518 * 5. Rapid aggressive scrolling bypasses snap (escape hatch). 3519 */ 3520 var MOBILE_BP = 900; 3521 3522 function initSectionSnap() { 3523 var sections = Array.prototype.slice.call( 3524 document.querySelectorAll('.product-feature-section') 3525 ); 3526 if (sections.length < 2) return; 3527 3528 var isSnapping = false; 3529 var snapEnabled = window.innerWidth > MOBILE_BP; 3530 3531 /* ââ Tuning constants ââââââââââââââââââââââââââââââ */ 3532 var SNAP_THRESHOLD = 60; // px â top must be this close to count as "snapped" 3533 var NUDGE_THRESHOLD = 50; // px â scroll-end nudge range 3534 var NUDGE_DEAD_ZONE = 3; // px â already aligned, skip nudge 3535 var DELTA_THRESHOLD = 35; // ignore small trackpad deltas 3536 var SNAP_COOLDOWN = 1000; // ms â fallback unlock timer 3537 var NUDGE_DELAY = 320; // ms â pause after scroll stops before nudge 3538 var RAPID_WINDOW = 300; // ms â rapid-scroll detection window 3539 var RAPID_COUNT = 4; // events in window = escape 3540 3541 var hasScrollEnd = 'onscrollend' in window; 3542 var cooldownTimer = null; 3543 var scrollTimer = null; 3544 var wheelTimestamps = []; 3545 3546 /* ââ Helpers âââââââââââââââââââââââââââââââââââââââ */ 3547 3548 /** Get fixed header height to offset scroll targets. */ 3549 function getHeaderOffset() { 3550 var header = document.querySelector('.main-header'); 3551 if (!header) return 0; 3552 var style = window.getComputedStyle(header); 3553 var pos = style.position; 3554 if (pos === 'fixed' || pos === 'sticky') return header.offsetHeight; 3555 return 0; 3556 } 3557 3558 /** Index of section whose top is within SNAP_THRESHOLD of header bottom, or -1. */ 3559 function getSnappedSection() { 3560 var offset = getHeaderOffset(); 3561 for (var i = 0; i < sections.length; i++) { 3562 if (Math.abs(sections[i].getBoundingClientRect().top - offset) < SNAP_THRESHOLD) { 3563 return i; 3564 } 3565 } 3566 return -1; 3567 } 3568 3569 /** Smooth-scroll to a section; lock input until settled. */ 3570 function snapTo(index) { 3571 if (index < 0 || index >= sections.length) return; 3572 isSnapping = true; 3573 3574 var offset = getHeaderOffset(); 3575 var targetY = sections[index].getBoundingClientRect().top + window.pageYOffset - offset; 3576 window.scrollTo({ top: targetY, behavior: 'smooth' }); 3577 3578 // Prefer scrollend event; fall back to timeout 3579 if (hasScrollEnd) { 3580 var done = false; 3581 function unlock() { 3582 if (done) return; 3583 done = true; 3584 isSnapping = false; 3585 window.removeEventListener('scrollend', unlock); 3586 clearTimeout(cooldownTimer); 3587 } 3588 window.addEventListener('scrollend', unlock, { once: true }); 3589 cooldownTimer = setTimeout(unlock, SNAP_COOLDOWN); 3590 } else { 3591 clearTimeout(cooldownTimer); 3592 cooldownTimer = setTimeout(function() { isSnapping = false; }, SNAP_COOLDOWN); 3593 } 3594 } 3595 3596 /** 3597 * Detect rapid scrolling (escape hatch). 3598 * If RAPID_COUNT wheel events fire within RAPID_WINDOW ms 3599 * the user is scrolling aggressively â let them free-scroll. 3600 */ 3601 function isRapidScroll() { 3602 var now = Date.now(); 3603 wheelTimestamps.push(now); 3604 while (wheelTimestamps.length && wheelTimestamps[0] < now - RAPID_WINDOW) { 3605 wheelTimestamps.shift(); 3606 } 3607 return wheelTimestamps.length >= RAPID_COUNT; 3608 } 3609 3610 /* ââ Event handlers ââââââââââââââââââââââââââââââââ */ 3611 3612 /** Scroll-end nudge: after free scrolling stops, gently align. */ 3613 function onScroll() { 3614 if (isSnapping || !snapEnabled) return; 3615 clearTimeout(scrollTimer); 3616 scrollTimer = setTimeout(function() { 3617 if (isSnapping) return; 3618 var offset = getHeaderOffset(); 3619 for (var i = 0; i < sections.length; i++) { 3620 var dist = Math.abs(sections[i].getBoundingClientRect().top - offset); 3621 if (dist > NUDGE_DEAD_ZONE && dist < NUDGE_THRESHOLD) { 3622 snapTo(i); 3623 return; 3624 } 3625 } 3626 }, NUDGE_DELAY); 3627 } 3628 3629 /** Wheel: snap one section when aligned; ignore otherwise. */ 3630 function onWheel(e) { 3631 if (!snapEnabled) return; 3632 if (isSnapping) { e.preventDefault(); return; } 3633 if (Math.abs(e.deltaY) < DELTA_THRESHOLD) return; 3634 3635 // Escape hatch â rapid scrolling bypasses snap 3636 if (isRapidScroll()) return; 3637 3638 var active = getSnappedSection(); 3639 if (active === -1) return; // not in snap zone â normal scroll 3640 3641 var dir = e.deltaY > 0 ? 1 : -1; 3642 var target = active + dir; 3643 3644 // Boundary: release to normal page scroll 3645 if (target < 0 || target >= sections.length) return; 3646 3647 e.preventDefault(); 3648 snapTo(target); 3649 } 3650 3651 /** Keyboard: ArrowDown/Up, PageDown/Up. */ 3652 function onKeydown(e) { 3653 if (!snapEnabled || isSnapping) return; 3654 var dir = 0; 3655 if (e.key === 'ArrowDown' || e.key === 'PageDown') dir = 1; 3656 else if (e.key === 'ArrowUp' || e.key === 'PageUp') dir = -1; 3657 if (!dir) return; 3658 3659 var active = getSnappedSection(); 3660 if (active === -1) return; 3661 3662 var target = active + dir; 3663 if (target < 0 || target >= sections.length) return; 3664 3665 e.preventDefault(); 3666 snapTo(target); 3667 } 3668 3669 /** Touch swipe: deliberate gesture only (>60px, <500ms). */ 3670 var touchStartY = 0; 3671 var touchStartTime = 0; 3672 3673 function onTouchStart(e) { 3674 touchStartY = e.touches[0].clientY; 3675 touchStartTime = Date.now(); 3676 } 3677 3678 function onTouchEnd(e) { 3679 if (!snapEnabled || isSnapping) return; 3680 var dy = touchStartY - e.changedTouches[0].clientY; 3681 if (Math.abs(dy) < 60 || (Date.now() - touchStartTime) > 500) return; 3682 3683 var active = getSnappedSection(); 3684 if (active === -1) return; 3685 3686 var dir = dy > 0 ? 1 : -1; 3687 var target = active + dir; 3688 if (target < 0 || target >= sections.length) return; 3689 snapTo(target); 3690 } 3691 3692 /* ââ Lifecycle âââââââââââââââââââââââââââââââââââââ */ 3693 3694 function attach() { 3695 window.addEventListener('scroll', onScroll, { passive: true }); 3696 document.addEventListener('wheel', onWheel, { passive: false }); 3697 document.addEventListener('keydown', onKeydown); 3698 document.addEventListener('touchstart', onTouchStart, { passive: true }); 3699 document.addEventListener('touchend', onTouchEnd, { passive: true }); 3700 } 3701 3702 function detach() { 3703 window.removeEventListener('scroll', onScroll); 3704 document.removeEventListener('wheel', onWheel); 3705 document.removeEventListener('keydown', onKeydown); 3706 document.removeEventListener('touchstart', onTouchStart); 3707 document.removeEventListener('touchend', onTouchEnd); 3708 clearTimeout(scrollTimer); 3709 clearTimeout(cooldownTimer); 3710 isSnapping = false;
3711 } 3712 3713 /* ââ Resize guard: toggle snap on/off at breakpoint ââ */ 3714 var resizeTimer; 3715 window.addEventListener('resize', function() { 3716 clearTimeout(resizeTimer); 3717 resizeTimer = setTimeout(function() { 3718 var wide = window.innerWidth > MOBILE_BP; 3719 if (wide && !snapEnabled) { 3720 snapEnabled = true; 3721 attach(); 3722 } else if (!wide && snapEnabled) { 3723 snapEnabled = false; 3724 detach(); 3725 } 3726 }, 200); 3727 }); 3728 3729 // Initial attach if desktop 3730 if (snapEnabled) attach(); 3731 } 3732 3733 if (document.readyState === 'loading') { 3734 document.addEventListener('DOMContentLoaded', initSectionSnap); 3735 } else { 3736 initSectionSnap(); 3737 } 3738 })(); 3739 </script>
3739 3740
3740<script> 3741 (function() { 3742 /** 3743 * Section Snap Scroll 3744 * âââââââââââââââââââââââââââââââââââââââââââââââââââââ 3745 * Smooth snap between .product-feature-section blocks. 3746 * Desktop only (> 900px). Sections keep natural height. 3747 * 3748 * 1. User scrolls the page freely. 3749 * 2. When scrolling stops and a section top is near the 3750 * viewport top, it nudges into alignment. 3751 * 3. Once aligned, wheel / key / touch gestures move 3752 * one section at a time. 3753 * 4. At the first or last section, normal scroll resumes. 3754 * 5. Rapid aggressive scrolling bypasses snap (escape hatch). 3755 */ 3756 var MOBILE_BP = 900; 3757 3758 function initSectionSnap() { 3759 var sections = Array.prototype.slice.call( 3760 document.querySelectorAll('.product-feature-section') 3761 ); 3762 if (sections.length < 2) return; 3763 3764 var isSnapping = false; 3765 var snapEnabled = window.innerWidth > MOBILE_BP; 3766 3767 /* ââ Tuning constants ââââââââââââââââââââââââââââââ */ 3768 var SNAP_THRESHOLD = 60; // px â top must be this close to count as "snapped" 3769 var NUDGE_THRESHOLD = 50; // px â scroll-end nudge range 3770 var NUDGE_DEAD_ZONE = 3; // px â already aligned, skip nudge 3771 var DELTA_THRESHOLD = 35; // ignore small trackpad deltas 3772 var SNAP_COOLDOWN = 1000; // ms â fallback unlock timer 3773 var NUDGE_DELAY = 320; // ms â pause after scroll stops before nudge 3774 var RAPID_WINDOW = 300; // ms â rapid-scroll detection window 3775 var RAPID_COUNT = 4; // events in window = escape 3776 3777 var hasScrollEnd = 'onscrollend' in window; 3778 var cooldownTimer = null; 3779 var scrollTimer = null; 3780 var wheelTimestamps = []; 3781 3782 /* ââ Helpers âââââââââââââââââââââââââââââââââââââââ */ 3783 3784 /** Get fixed header height to offset scroll targets. */ 3785 function getHeaderOffset() { 3786 var header = document.querySelector('.main-header'); 3787 if (!header) return 0; 3788 var style = window.getComputedStyle(header); 3789 var pos = style.position; 3790 if (pos === 'fixed' || pos === 'sticky') return header.offsetHeight; 3791 return 0; 3792 } 3793 3794 /** Index of section whose top is within SNAP_THRESHOLD of header bottom, or -1. */ 3795 function getSnappedSection() { 3796 var offset = getHeaderOffset(); 3797 for (var i = 0; i < sections.length; i++) { 3798 if (Math.abs(sections[i].getBoundingClientRect().top - offset) < SNAP_THRESHOLD) { 3799 return i; 3800 } 3801 } 3802 return -1; 3803 } 3804 3805 /** Smooth-scroll to a section; lock input until settled. */ 3806 function snapTo(index) { 3807 if (index < 0 || index >= sections.length) return; 3808 isSnapping = true; 3809 3810 var offset = getHeaderOffset(); 3811 var targetY = sections[index].getBoundingClientRect().top + window.pageYOffset - offset; 3812 window.scrollTo({ top: targetY, behavior: 'smooth' }); 3813 3814 // Prefer scrollend event; fall back to timeout 3815 if (hasScrollEnd) { 3816 var done = false; 3817 function unlock() { 3818 if (done) return; 3819 done = true; 3820 isSnapping = false; 3821 window.removeEventListener('scrollend', unlock); 3822 clearTimeout(cooldownTimer); 3823 } 3824 window.addEventListener('scrollend', unlock, { once: true }); 3825 cooldownTimer = setTimeout(unlock, SNAP_COOLDOWN); 3826 } else { 3827 clearTimeout(cooldownTimer); 3828 cooldownTimer = setTimeout(function() { isSnapping = false; }, SNAP_COOLDOWN); 3829 } 3830 } 3831 3832 /** 3833 * Detect rapid scrolling (escape hatch). 3834 * If RAPID_COUNT wheel events fire within RAPID_WINDOW ms 3835 * the user is scrolling aggressively â let them free-scroll. 3836 */ 3837 function isRapidScroll() { 3838 var now = Date.now(); 3839 wheelTimestamps.push(now); 3840 while (wheelTimestamps.length && wheelTimestamps[0] < now - RAPID_WINDOW) { 3841 wheelTimestamps.shift(); 3842 } 3843 return wheelTimestamps.length >= RAPID_COUNT; 3844 } 3845 3846 /* ââ Event handlers ââââââââââââââââââââââââââââââââ */ 3847 3848 /** Scroll-end nudge: after free scrolling stops, gently align. */ 3849 function onScroll() { 3850 if (isSnapping || !snapEnabled) return; 3851 clearTimeout(scrollTimer); 3852 scrollTimer = setTimeout(function() { 3853 if (isSnapping) return; 3854 var offset = getHeaderOffset(); 3855 for (var i = 0; i < sections.length; i++) { 3856 var dist = Math.abs(sections[i].getBoundingClientRect().top - offset); 3857 if (dist > NUDGE_DEAD_ZONE && dist < NUDGE_THRESHOLD) { 3858 snapTo(i); 3859 return; 3860 } 3861 } 3862 }, NUDGE_DELAY); 3863 } 3864 3865 /** Wheel: snap one section when aligned; ignore otherwise. */ 3866 function onWheel(e) { 3867 if (!snapEnabled) return; 3868 if (isSnapping) { e.preventDefault(); return; } 3869 if (Math.abs(e.deltaY) < DELTA_THRESHOLD) return; 3870 3871 // Escape hatch â rapid scrolling bypasses snap 3872 if (isRapidScroll()) return; 3873 3874 var active = getSnappedSection(); 3875 if (active === -1) return; // not in snap zone â normal scroll 3876 3877 var dir = e.deltaY > 0 ? 1 : -1; 3878 var target = active + dir; 3879 3880 // Boundary: release to normal page scroll 3881 if (target < 0 || target >= sections.length) return; 3882 3883 e.preventDefault(); 3884 snapTo(target); 3885 } 3886 3887 /** Keyboard: ArrowDown/Up, PageDown/Up. */ 3888 function onKeydown(e) { 3889 if (!snapEnabled || isSnapping) return; 3890 var dir = 0; 3891 if (e.key === 'ArrowDown' || e.key === 'PageDown') dir = 1; 3892 else if (e.key === 'ArrowUp' || e.key === 'PageUp') dir = -1; 3893 if (!dir) return; 3894 3895 var active = getSnappedSection(); 3896 if (active === -1) return; 3897 3898 var target = active + dir; 3899 if (target < 0 || target >= sections.length) return; 3900 3901 e.preventDefault(); 3902 snapTo(target); 3903 } 3904 3905 /** Touch swipe: deliberate gesture only (>60px, <500ms). */ 3906 var touchStartY = 0; 3907 var touchStartTime = 0; 3908 3909 function onTouchStart(e) { 3910 touchStartY = e.touches[0].clientY; 3911 touchStartTime = Date.now(); 3912 } 3913 3914 function onTouchEnd(e) { 3915 if (!snapEnabled || isSnapping) return; 3916 var dy = touchStartY - e.changedTouches[0].clientY; 3917 if (Math.abs(dy) < 60 || (Date.now() - touchStartTime) > 500) return; 3918 3919 var active = getSnappedSection(); 3920 if (active === -1) return; 3921 3922 var dir = dy > 0 ? 1 : -1; 3923 var target = active + dir; 3924 if (target < 0 || target >= sections.length) return; 3925 snapTo(target); 3926 } 3927 3928 /* ââ Lifecycle âââââââââââââââââââââââââââââââââââââ */ 3929 3930 function attach() { 3931 window.addEventListener('scroll', onScroll, { passive: true }); 3932 document.addEventListener('wheel', onWheel, { passive: false }); 3933 document.addEventListener('keydown', onKeydown); 3934 document.addEventListener('touchstart', onTouchStart, { passive: true }); 3935 document.addEventListener('touchend', onTouchEnd, { passive: true }); 3936 } 3937 3938 function detach() { 3939 window.removeEventListener('scroll', onScroll); 3940 document.removeEventListener('wheel', onWheel); 3941 document.removeEventListener('keydown', onKeydown); 3942 document.removeEventListener('touchstart', onTouchStart); 3943 document.removeEventListener('touchend', onTouchEnd); 3944 clearTimeout(scrollTimer); 3945 clearTimeout(cooldownTimer); 3946 isSnapping = false;
3947 } 3948 3949 /* ââ Resize guard: toggle snap on/off at breakpoint ââ */ 3950 var resizeTimer; 3951 window.addEventListener('resize', function() { 3952 clearTimeout(resizeTimer); 3953 resizeTimer = setTimeout(function() { 3954 var wide = window.innerWidth > MOBILE_BP; 3955 if (wide && !snapEnabled) { 3956 snapEnabled = true; 3957 attach(); 3958 } else if (!wide && snapEnabled) { 3959 snapEnabled = false; 3960 detach(); 3961 } 3962 }, 200); 3963 }); 3964 3965 // Initial attach if desktop 3966 if (snapEnabled) attach(); 3967 } 3968 3969 if (document.readyState === 'loading') { 3970 document.addEventListener('DOMContentLoaded', initSectionSnap); 3971 } else { 3972 initSectionSnap(); 3973 } 3974 })(); 3975 </script>
3975 3976
3976<script> 3977 (function() { 3978 /** 3979 * Section Snap Scroll 3980 * âââââââââââââââââââââââââââââââââââââââââââââââââââââ 3981 * Smooth snap between .product-feature-section blocks. 3982 * Desktop only (> 900px). Sections keep natural height. 3983 * 3984 * 1. User scrolls the page freely. 3985 * 2. When scrolling stops and a section top is near the 3986 * viewport top, it nudges into alignment. 3987 * 3. Once aligned, wheel / key / touch gestures move 3988 * one section at a time. 3989 * 4. At the first or last section, normal scroll resumes. 3990 * 5. Rapid aggressive scrolling bypasses snap (escape hatch). 3991 */ 3992 var MOBILE_BP = 900; 3993 3994 function initSectionSnap() { 3995 var sections = Array.prototype.slice.call( 3996 document.querySelectorAll('.product-feature-section') 3997 ); 3998 if (sections.length < 2) return; 3999 4000 var isSnapping = false; 4001 var snapEnabled = window.innerWidth > MOBILE_BP; 4002 4003 /* ââ Tuning constants ââââââââââââââââââââââââââââââ */ 4004 var SNAP_THRESHOLD = 60; // px â top must be this close to count as "snapped" 4005 var NUDGE_THRESHOLD = 50; // px â scroll-end nudge range 4006 var NUDGE_DEAD_ZONE = 3; // px â already aligned, skip nudge 4007 var DELTA_THRESHOLD = 35; // ignore small trackpad deltas 4008 var SNAP_COOLDOWN = 1000; // ms â fallback unlock timer 4009 var NUDGE_DELAY = 320; // ms â pause after scroll stops before nudge 4010 var RAPID_WINDOW = 300; // ms â rapid-scroll detection window 4011 var RAPID_COUNT = 4; // events in window = escape 4012 4013 var hasScrollEnd = 'onscrollend' in window; 4014 var cooldownTimer = null; 4015 var scrollTimer = null; 4016 var wheelTimestamps = []; 4017 4018 /* ââ Helpers âââââââââââââââââââââââââââââââââââââââ */ 4019 4020 /** Get fixed header height to offset scroll targets. */ 4021 function getHeaderOffset() { 4022 var header = document.querySelector('.main-header'); 4023 if (!header) return 0; 4024 var style = window.getComputedStyle(header); 4025 var pos = style.position; 4026 if (pos === 'fixed' || pos === 'sticky') return header.offsetHeight; 4027 return 0; 4028 } 4029 4030 /** Index of section whose top is within SNAP_THRESHOLD of header bottom, or -1. */ 4031 function getSnappedSection() { 4032 var offset = getHeaderOffset(); 4033 for (var i = 0; i < sections.length; i++) { 4034 if (Math.abs(sections[i].getBoundingClientRect().top - offset) < SNAP_THRESHOLD) { 4035 return i; 4036 } 4037 } 4038 return -1; 4039 } 4040 4041 /** Smooth-scroll to a section; lock input until settled. */ 4042 function snapTo(index) { 4043 if (index < 0 || index >= sections.length) return; 4044 isSnapping = true; 4045 4046 var offset = getHeaderOffset(); 4047 var targetY = sections[index].getBoundingClientRect().top + window.pageYOffset - offset; 4048 window.scrollTo({ top: targetY, behavior: 'smooth' }); 4049 4050 // Prefer scrollend event; fall back to timeout 4051 if (hasScrollEnd) { 4052 var done = false; 4053 function unlock() { 4054 if (done) return; 4055 done = true; 4056 isSnapping = false; 4057 window.removeEventListener('scrollend', unlock); 4058 clearTimeout(cooldownTimer); 4059 } 4060 window.addEventListener('scrollend', unlock, { once: true }); 4061 cooldownTimer = setTimeout(unlock, SNAP_COOLDOWN); 4062 } else { 4063 clearTimeout(cooldownTimer); 4064 cooldownTimer = setTimeout(function() { isSnapping = false; }, SNAP_COOLDOWN); 4065 } 4066 } 4067 4068 /** 4069 * Detect rapid scrolling (escape hatch). 4070 * If RAPID_COUNT wheel events fire within RAPID_WINDOW ms 4071 * the user is scrolling aggressively â let them free-scroll. 4072 */ 4073 function isRapidScroll() { 4074 var now = Date.now(); 4075 wheelTimestamps.push(now); 4076 while (wheelTimestamps.length && wheelTimestamps[0] < now - RAPID_WINDOW) { 4077 wheelTimestamps.shift(); 4078 } 4079 return wheelTimestamps.length >= RAPID_COUNT; 4080 } 4081 4082 /* ââ Event handlers ââââââââââââââââââââââââââââââââ */ 4083 4084 /** Scroll-end nudge: after free scrolling stops, gently align. */ 4085 function onScroll() { 4086 if (isSnapping || !snapEnabled) return; 4087 clearTimeout(scrollTimer); 4088 scrollTimer = setTimeout(function() { 4089 if (isSnapping) return; 4090 var offset = getHeaderOffset(); 4091 for (var i = 0; i < sections.length; i++) { 4092 var dist = Math.abs(sections[i].getBoundingClientRect().top - offset); 4093 if (dist > NUDGE_DEAD_ZONE && dist < NUDGE_THRESHOLD) { 4094 snapTo(i); 4095 return; 4096 } 4097 } 4098 }, NUDGE_DELAY); 4099 } 4100 4101 /** Wheel: snap one section when aligned; ignore otherwise. */ 4102 function onWheel(e) { 4103 if (!snapEnabled) return; 4104 if (isSnapping) { e.preventDefault(); return; } 4105 if (Math.abs(e.deltaY) < DELTA_THRESHOLD) return; 4106 4107 // Escape hatch â rapid scrolling bypasses snap 4108 if (isRapidScroll()) return; 4109 4110 var active = getSnappedSection(); 4111 if (active === -1) return; // not in snap zone â normal scroll 4112 4113 var dir = e.deltaY > 0 ? 1 : -1; 4114 var target = active + dir; 4115 4116 // Boundary: release to normal page scroll 4117 if (target < 0 || target >= sections.length) return; 4118 4119 e.preventDefault(); 4120 snapTo(target); 4121 } 4122 4123 /** Keyboard: ArrowDown/Up, PageDown/Up. */ 4124 function onKeydown(e) { 4125 if (!snapEnabled || isSnapping) return; 4126 var dir = 0; 4127 if (e.key === 'ArrowDown' || e.key === 'PageDown') dir = 1; 4128 else if (e.key === 'ArrowUp' || e.key === 'PageUp') dir = -1; 4129 if (!dir) return; 4130 4131 var active = getSnappedSection(); 4132 if (active === -1) return; 4133 4134 var target = active + dir; 4135 if (target < 0 || target >= sections.length) return; 4136 4137 e.preventDefault(); 4138 snapTo(target); 4139 } 4140 4141 /** Touch swipe: deliberate gesture only (>60px, <500ms). */ 4142 var touchStartY = 0; 4143 var touchStartTime = 0; 4144 4145 function onTouchStart(e) { 4146 touchStartY = e.touches[0].clientY; 4147 touchStartTime = Date.now(); 4148 } 4149 4150 function onTouchEnd(e) { 4151 if (!snapEnabled || isSnapping) return; 4152 var dy = touchStartY - e.changedTouches[0].clientY; 4153 if (Math.abs(dy) < 60 || (Date.now() - touchStartTime) > 500) return; 4154 4155 var active = getSnappedSection(); 4156 if (active === -1) return; 4157 4158 var dir = dy > 0 ? 1 : -1; 4159 var target = active + dir; 4160 if (target < 0 || target >= sections.length) return; 4161 snapTo(target); 4162 } 4163 4164 /* ââ Lifecycle âââââââââââââââââââââââââââââââââââââ */ 4165 4166 function attach() { 4167 window.addEventListener('scroll', onScroll, { passive: true }); 4168 document.addEventListener('wheel', onWheel, { passive: false }); 4169 document.addEventListener('keydown', onKeydown); 4170 document.addEventListener('touchstart', onTouchStart, { passive: true }); 4171 document.addEventListener('touchend', onTouchEnd, { passive: true }); 4172 } 4173 4174 function detach() { 4175 window.removeEventListener('scroll', onScroll); 4176 document.removeEventListener('wheel', onWheel); 4177 document.removeEventListener('keydown', onKeydown); 4178 document.removeEventListener('touchstart', onTouchStart); 4179 document.removeEventListener('touchend', onTouchEnd); 4180 clearTimeout(scrollTimer); 4181 clearTimeout(cooldownTimer); 4182 isSnapping = false;
4183 } 4184 4185 /* ââ Resize guard: toggle snap on/off at breakpoint ââ */ 4186 var resizeTimer; 4187 window.addEventListener('resize', function() { 4188 clearTimeout(resizeTimer); 4189 resizeTimer = setTimeout(function() { 4190 var wide = window.innerWidth > MOBILE_BP; 4191 if (wide && !snapEnabled) { 4192 snapEnabled = true; 4193 attach(); 4194 } else if (!wide && snapEnabled) { 4195 snapEnabled = false; 4196 detach(); 4197 } 4198 }, 200); 4199 }); 4200 4201 // Initial attach if desktop 4202 if (snapEnabled) attach(); 4203 } 4204 4205 if (document.readyState === 'loading') { 4206 document.addEventListener('DOMContentLoaded', initSectionSnap); 4207 } else { 4208 initSectionSnap(); 4209 } 4210 })(); 4211 </script>
4211 4212
4212<script> 4213 (function() { 4214 /** 4215 * Section Snap Scroll 4216 * âââââââââââââââââââââââââââââââââââââââââââââââââââââ 4217 * Smooth snap between .product-feature-section blocks. 4218 * Desktop only (> 900px). Sections keep natural height. 4219 * 4220 * 1. User scrolls the page freely. 4221 * 2. When scrolling stops and a section top is near the 4222 * viewport top, it nudges into alignment. 4223 * 3. Once aligned, wheel / key / touch gestures move 4224 * one section at a time. 4225 * 4. At the first or last section, normal scroll resumes. 4226 * 5. Rapid aggressive scrolling bypasses snap (escape hatch). 4227 */ 4228 var MOBILE_BP = 900; 4229 4230 function initSectionSnap() { 4231 var sections = Array.prototype.slice.call( 4232 document.querySelectorAll('.product-feature-section') 4233 ); 4234 if (sections.length < 2) return; 4235 4236 var isSnapping = false; 4237 var snapEnabled = window.innerWidth > MOBILE_BP; 4238 4239 /* ââ Tuning constants ââââââââââââââââââââââââââââââ */ 4240 var SNAP_THRESHOLD = 60; // px â top must be this close to count as "snapped" 4241 var NUDGE_THRESHOLD = 50; // px â scroll-end nudge range 4242 var NUDGE_DEAD_ZONE = 3; // px â already aligned, skip nudge 4243 var DELTA_THRESHOLD = 35; // ignore small trackpad deltas 4244 var SNAP_COOLDOWN = 1000; // ms â fallback unlock timer 4245 var NUDGE_DELAY = 320; // ms â pause after scroll stops before nudge 4246 var RAPID_WINDOW = 300; // ms â rapid-scroll detection window 4247 var RAPID_COUNT = 4; // events in window = escape 4248 4249 var hasScrollEnd = 'onscrollend' in window; 4250 var cooldownTimer = null; 4251 var scrollTimer = null; 4252 var wheelTimestamps = []; 4253 4254 /* ââ Helpers âââââââââââââââââââââââââââââââââââââââ */ 4255 4256 /** Get fixed header height to offset scroll targets. */ 4257 function getHeaderOffset() { 4258 var header = document.querySelector('.main-header'); 4259 if (!header) return 0; 4260 var style = window.getComputedStyle(header); 4261 var pos = style.position; 4262 if (pos === 'fixed' || pos === 'sticky') return header.offsetHeight; 4263 return 0; 4264 } 4265 4266 /** Index of section whose top is within SNAP_THRESHOLD of header bottom, or -1. */ 4267 function getSnappedSection() { 4268 var offset = getHeaderOffset(); 4269 for (var i = 0; i < sections.length; i++) { 4270 if (Math.abs(sections[i].getBoundingClientRect().top - offset) < SNAP_THRESHOLD) { 4271 return i; 4272 } 4273 } 4274 return -1; 4275 } 4276 4277 /** Smooth-scroll to a section; lock input until settled. */ 4278 function snapTo(index) { 4279 if (index < 0 || index >= sections.length) return; 4280 isSnapping = true; 4281 4282 var offset = getHeaderOffset(); 4283 var targetY = sections[index].getBoundingClientRect().top + window.pageYOffset - offset; 4284 window.scrollTo({ top: targetY, behavior: 'smooth' }); 4285 4286 // Prefer scrollend event; fall back to timeout 4287 if (hasScrollEnd) { 4288 var done = false; 4289 function unlock() { 4290 if (done) return; 4291 done = true; 4292 isSnapping = false; 4293 window.removeEventListener('scrollend', unlock); 4294 clearTimeout(cooldownTimer); 4295 } 4296 window.addEventListener('scrollend', unlock, { once: true }); 4297 cooldownTimer = setTimeout(unlock, SNAP_COOLDOWN); 4298 } else { 4299 clearTimeout(cooldownTimer); 4300 cooldownTimer = setTimeout(function() { isSnapping = false; }, SNAP_COOLDOWN); 4301 } 4302 } 4303 4304 /** 4305 * Detect rapid scrolling (escape hatch). 4306 * If RAPID_COUNT wheel events fire within RAPID_WINDOW ms 4307 * the user is scrolling aggressively â let them free-scroll. 4308 */ 4309 function isRapidScroll() { 4310 var now = Date.now(); 4311 wheelTimestamps.push(now); 4312 while (wheelTimestamps.length && wheelTimestamps[0] < now - RAPID_WINDOW) { 4313 wheelTimestamps.shift(); 4314 } 4315 return wheelTimestamps.length >= RAPID_COUNT; 4316 } 4317 4318 /* ââ Event handlers ââââââââââââââââââââââââââââââââ */ 4319 4320 /** Scroll-end nudge: after free scrolling stops, gently align. */ 4321 function onScroll() { 4322 if (isSnapping || !snapEnabled) return; 4323 clearTimeout(scrollTimer); 4324 scrollTimer = setTimeout(function() { 4325 if (isSnapping) return; 4326 var offset = getHeaderOffset(); 4327 for (var i = 0; i < sections.length; i++) { 4328 var dist = Math.abs(sections[i].getBoundingClientRect().top - offset); 4329 if (dist > NUDGE_DEAD_ZONE && dist < NUDGE_THRESHOLD) { 4330 snapTo(i); 4331 return; 4332 } 4333 } 4334 }, NUDGE_DELAY); 4335 } 4336 4337 /** Wheel: snap one section when aligned; ignore otherwise. */ 4338 function onWheel(e) { 4339 if (!snapEnabled) return; 4340 if (isSnapping) { e.preventDefault(); return; } 4341 if (Math.abs(e.deltaY) < DELTA_THRESHOLD) return; 4342 4343 // Escape hatch â rapid scrolling bypasses snap 4344 if (isRapidScroll()) return; 4345 4346 var active = getSnappedSection(); 4347 if (active === -1) return; // not in snap zone â normal scroll 4348 4349 var dir = e.deltaY > 0 ? 1 : -1; 4350 var target = active + dir; 4351 4352 // Boundary: release to normal page scroll 4353 if (target < 0 || target >= sections.length) return; 4354 4355 e.preventDefault(); 4356 snapTo(target); 4357 } 4358 4359 /** Keyboard: ArrowDown/Up, PageDown/Up. */ 4360 function onKeydown(e) { 4361 if (!snapEnabled || isSnapping) return; 4362 var dir = 0; 4363 if (e.key === 'ArrowDown' || e.key === 'PageDown') dir = 1; 4364 else if (e.key === 'ArrowUp' || e.key === 'PageUp') dir = -1; 4365 if (!dir) return; 4366 4367 var active = getSnappedSection(); 4368 if (active === -1) return; 4369 4370 var target = active + dir; 4371 if (target < 0 || target >= sections.length) return; 4372 4373 e.preventDefault(); 4374 snapTo(target); 4375 } 4376 4377 /** Touch swipe: deliberate gesture only (>60px, <500ms). */ 4378 var touchStartY = 0; 4379 var touchStartTime = 0; 4380 4381 function onTouchStart(e) { 4382 touchStartY = e.touches[0].clientY; 4383 touchStartTime = Date.now(); 4384 } 4385 4386 function onTouchEnd(e) { 4387 if (!snapEnabled || isSnapping) return; 4388 var dy = touchStartY - e.changedTouches[0].clientY; 4389 if (Math.abs(dy) < 60 || (Date.now() - touchStartTime) > 500) return; 4390 4391 var active = getSnappedSection(); 4392 if (active === -1) return; 4393 4394 var dir = dy > 0 ? 1 : -1; 4395 var target = active + dir; 4396 if (target < 0 || target >= sections.length) return; 4397 snapTo(target); 4398 } 4399 4400 /* ââ Lifecycle âââââââââââââââââââââââââââââââââââââ */ 4401 4402 function attach() { 4403 window.addEventListener('scroll', onScroll, { passive: true }); 4404 document.addEventListener('wheel', onWheel, { passive: false }); 4405 document.addEventListener('keydown', onKeydown); 4406 document.addEventListener('touchstart', onTouchStart, { passive: true }); 4407 document.addEventListener('touchend', onTouchEnd, { passive: true }); 4408 } 4409 4410 function detach() { 4411 window.removeEventListener('scroll', onScroll); 4412 document.removeEventListener('wheel', onWheel); 4413 document.removeEventListener('keydown', onKeydown); 4414 document.removeEventListener('touchstart', onTouchStart); 4415 document.removeEventListener('touchend', onTouchEnd); 4416 clearTimeout(scrollTimer); 4417 clearTimeout(cooldownTimer); 4418 isSnapping = false;
4419 } 4420 4421 /* ââ Resize guard: toggle snap on/off at breakpoint ââ */ 4422 var resizeTimer; 4423 window.addEventListener('resize', function() { 4424 clearTimeout(resizeTimer); 4425 resizeTimer = setTimeout(function() { 4426 var wide = window.innerWidth > MOBILE_BP; 4427 if (wide && !snapEnabled) { 4428 snapEnabled = true; 4429 attach(); 4430 } else if (!wide && snapEnabled) { 4431 snapEnabled = false; 4432 detach(); 4433 } 4434 }, 200); 4435 }); 4436 4437 // Initial attach if desktop 4438 if (snapEnabled) attach(); 4439 } 4440 4441 if (document.readyState === 'loading') { 4442 document.addEventListener('DOMContentLoaded', initSectionSnap); 4443 } else { 4444 initSectionSnap(); 4445 } 4446 })(); 4447 </script>
4447 4448
4448<script> 4449 (function() { 4450 /** 4451 * Section Snap Scroll 4452 * âââââââââââââââââââââââââââââââââââââââââââââââââââââ 4453 * Smooth snap between .product-feature-section blocks. 4454 * Desktop only (> 900px). Sections keep natural height. 4455 * 4456 * 1. User scrolls the page freely. 4457 * 2. When scrolling stops and a section top is near the 4458 * viewport top, it nudges into alignment. 4459 * 3. Once aligned, wheel / key / touch gestures move 4460 * one section at a time. 4461 * 4. At the first or last section, normal scroll resumes. 4462 * 5. Rapid aggressive scrolling bypasses snap (escape hatch). 4463 */ 4464 var MOBILE_BP = 900; 4465 4466 function initSectionSnap() { 4467 var sections = Array.prototype.slice.call( 4468 document.querySelectorAll('.product-feature-section') 4469 ); 4470 if (sections.length < 2) return; 4471 4472 var isSnapping = false; 4473 var snapEnabled = window.innerWidth > MOBILE_BP; 4474 4475 /* ââ Tuning constants ââââââââââââââââââââââââââââââ */ 4476 var SNAP_THRESHOLD = 60; // px â top must be this close to count as "snapped" 4477 var NUDGE_THRESHOLD = 50; // px â scroll-end nudge range 4478 var NUDGE_DEAD_ZONE = 3; // px â already aligned, skip nudge 4479 var DELTA_THRESHOLD = 35; // ignore small trackpad deltas 4480 var SNAP_COOLDOWN = 1000; // ms â fallback unlock timer 4481 var NUDGE_DELAY = 320; // ms â pause after scroll stops before nudge 4482 var RAPID_WINDOW = 300; // ms â rapid-scroll detection window 4483 var RAPID_COUNT = 4; // events in window = escape 4484 4485 var hasScrollEnd = 'onscrollend' in window; 4486 var cooldownTimer = null; 4487 var scrollTimer = null; 4488 var wheelTimestamps = []; 4489 4490 /* ââ Helpers âââââââââââââââââââââââââââââââââââââââ */ 4491 4492 /** Get fixed header height to offset scroll targets. */ 4493 function getHeaderOffset() { 4494 var header = document.querySelector('.main-header'); 4495 if (!header) return 0; 4496 var style = window.getComputedStyle(header); 4497 var pos = style.position; 4498 if (pos === 'fixed' || pos === 'sticky') return header.offsetHeight; 4499 return 0; 4500 } 4501 4502 /** Index of section whose top is within SNAP_THRESHOLD of header bottom, or -1. */ 4503 function getSnappedSection() { 4504 var offset = getHeaderOffset(); 4505 for (var i = 0; i < sections.length; i++) { 4506 if (Math.abs(sections[i].getBoundingClientRect().top - offset) < SNAP_THRESHOLD) { 4507 return i; 4508 } 4509 } 4510 return -1; 4511 } 4512 4513 /** Smooth-scroll to a section; lock input until settled. */ 4514 function snapTo(index) { 4515 if (index < 0 || index >= sections.length) return; 4516 isSnapping = true; 4517 4518 var offset = getHeaderOffset(); 4519 var targetY = sections[index].getBoundingClientRect().top + window.pageYOffset - offset; 4520 window.scrollTo({ top: targetY, behavior: 'smooth' }); 4521 4522 // Prefer scrollend event; fall back to timeout 4523 if (hasScrollEnd) { 4524 var done = false; 4525 function unlock() { 4526 if (done) return; 4527 done = true; 4528 isSnapping = false; 4529 window.removeEventListener('scrollend', unlock); 4530 clearTimeout(cooldownTimer); 4531 } 4532 window.addEventListener('scrollend', unlock, { once: true }); 4533 cooldownTimer = setTimeout(unlock, SNAP_COOLDOWN); 4534 } else { 4535 clearTimeout(cooldownTimer); 4536 cooldownTimer = setTimeout(function() { isSnapping = false; }, SNAP_COOLDOWN); 4537 } 4538 } 4539 4540 /** 4541 * Detect rapid scrolling (escape hatch). 4542 * If RAPID_COUNT wheel events fire within RAPID_WINDOW ms 4543 * the user is scrolling aggressively â let them free-scroll. 4544 */ 4545 function isRapidScroll() { 4546 var now = Date.now(); 4547 wheelTimestamps.push(now); 4548 while (wheelTimestamps.length && wheelTimestamps[0] < now - RAPID_WINDOW) { 4549 wheelTimestamps.shift(); 4550 } 4551 return wheelTimestamps.length >= RAPID_COUNT; 4552 } 4553 4554 /* ââ Event handlers ââââââââââââââââââââââââââââââââ */ 4555 4556 /** Scroll-end nudge: after free scrolling stops, gently align. */ 4557 function onScroll() { 4558 if (isSnapping || !snapEnabled) return; 4559 clearTimeout(scrollTimer); 4560 scrollTimer = setTimeout(function() { 4561 if (isSnapping) return; 4562 var offset = getHeaderOffset(); 4563 for (var i = 0; i < sections.length; i++) { 4564 var dist = Math.abs(sections[i].getBoundingClientRect().top - offset); 4565 if (dist > NUDGE_DEAD_ZONE && dist < NUDGE_THRESHOLD) { 4566 snapTo(i); 4567 return; 4568 } 4569 } 4570 }, NUDGE_DELAY); 4571 } 4572 4573 /** Wheel: snap one section when aligned; ignore otherwise. */ 4574 function onWheel(e) { 4575 if (!snapEnabled) return; 4576 if (isSnapping) { e.preventDefault(); return; } 4577 if (Math.abs(e.deltaY) < DELTA_THRESHOLD) return; 4578 4579 // Escape hatch â rapid scrolling bypasses snap 4580 if (isRapidScroll()) return; 4581 4582 var active = getSnappedSection(); 4583 if (active === -1) return; // not in snap zone â normal scroll 4584 4585 var dir = e.deltaY > 0 ? 1 : -1; 4586 var target = active + dir; 4587 4588 // Boundary: release to normal page scroll 4589 if (target < 0 || target >= sections.length) return; 4590 4591 e.preventDefault(); 4592 snapTo(target); 4593 } 4594 4595 /** Keyboard: ArrowDown/Up, PageDown/Up. */ 4596 function onKeydown(e) { 4597 if (!snapEnabled || isSnapping) return; 4598 var dir = 0; 4599 if (e.key === 'ArrowDown' || e.key === 'PageDown') dir = 1; 4600 else if (e.key === 'ArrowUp' || e.key === 'PageUp') dir = -1; 4601 if (!dir) return; 4602 4603 var active = getSnappedSection(); 4604 if (active === -1) return; 4605 4606 var target = active + dir; 4607 if (target < 0 || target >= sections.length) return; 4608 4609 e.preventDefault(); 4610 snapTo(target); 4611 } 4612 4613 /** Touch swipe: deliberate gesture only (>60px, <500ms). */ 4614 var touchStartY = 0; 4615 var touchStartTime = 0; 4616 4617 function onTouchStart(e) { 4618 touchStartY = e.touches[0].clientY; 4619 touchStartTime = Date.now(); 4620 } 4621 4622 function onTouchEnd(e) { 4623 if (!snapEnabled || isSnapping) return; 4624 var dy = touchStartY - e.changedTouches[0].clientY; 4625 if (Math.abs(dy) < 60 || (Date.now() - touchStartTime) > 500) return; 4626 4627 var active = getSnappedSection(); 4628 if (active === -1) return; 4629 4630 var dir = dy > 0 ? 1 : -1; 4631 var target = active + dir; 4632 if (target < 0 || target >= sections.length) return; 4633 snapTo(target); 4634 } 4635 4636 /* ââ Lifecycle âââââââââââââââââââââââââââââââââââââ */ 4637 4638 function attach() { 4639 window.addEventListener('scroll', onScroll, { passive: true }); 4640 document.addEventListener('wheel', onWheel, { passive: false }); 4641 document.addEventListener('keydown', onKeydown); 4642 document.addEventListener('touchstart', onTouchStart, { passive: true }); 4643 document.addEventListener('touchend', onTouchEnd, { passive: true }); 4644 } 4645 4646 function detach() { 4647 window.removeEventListener('scroll', onScroll); 4648 document.removeEventListener('wheel', onWheel); 4649 document.removeEventListener('keydown', onKeydown); 4650 document.removeEventListener('touchstart', onTouchStart); 4651 document.removeEventListener('touchend', onTouchEnd); 4652 clearTimeout(scrollTimer); 4653 clearTimeout(cooldownTimer); 4654 isSnapping = false;
4655 } 4656 4657 /* ââ Resize guard: toggle snap on/off at breakpoint ââ */ 4658 var resizeTimer; 4659 window.addEventListener('resize', function() { 4660 clearTimeout(resizeTimer); 4661 resizeTimer = setTimeout(function() { 4662 var wide = window.innerWidth > MOBILE_BP; 4663 if (wide && !snapEnabled) { 4664 snapEnabled = true; 4665 attach(); 4666 } else if (!wide && snapEnabled) { 4667 snapEnabled = false; 4668 detach(); 4669 } 4670 }, 200); 4671 }); 4672 4673 // Initial attach if desktop 4674 if (snapEnabled) attach(); 4675 } 4676 4677 if (document.readyState === 'loading') { 4678 document.addEventListener('DOMContentLoaded', initSectionSnap); 4679 } else { 4680 initSectionSnap(); 4681 } 4682 })(); 4683 </script>
4683 4684 <style> 4685 /* ============================================ 4686 GLOBAL DARK MODE TRANSITIONS 4687 ============================================ */ 4688 4689 /* Smooth transition for all elements when dark mode toggles */ 4690 body.dark-mode-transition, 4691 body.dark-mode-transition *, 4692 body.dark-mode-transition *::before, 4693 body.dark-mode-transition *::after { 4694 transition: 4695 background-color 0.4s ease, 4696 color 0.4s ease, 4697 border-color 0.4s ease, 4698 fill 0.4s ease, 4699 stroke 0.4s ease, 4700 box-shadow 0.4s ease !important; 4701 } 4702 4703 /* ============================================ 4704 DARK MODE TOGGLE BUTTON 4705 ============================================ */ 4706 .nylas-darkmode-toggle { 4707 position: fixed; 4708 bottom: 24px; 4709 right: 24px; 4710 width: 48px; 4711 height: 48px; 4712 border-radius: 50%; 4713 background: #1a1a1a; 4714 border: 2px solid #333; 4715 cursor: pointer; 4716 display: flex; 4717 align-items: center; 4718 justify-content: center; 4719 z-index: 99999; 4720 transition: all 0.3s ease; 4721 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 4722 overflow: hidden; 4723 } 4724 4725 .nylas-darkmode-toggle:hover { 4726 transform: scale(1.1); 4727 box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25); 4728 } 4729 4730 .nylas-darkmode-toggle:active { 4731 transform: scale(0.95); 4732 } 4733 4734 /* Icon container for animation */ 4735 .nylas-darkmode-toggle .icon-wrapper { 4736 position: relative; 4737 width: 24px; 4738 height: 24px; 4739 } 4740 4741 .nylas-darkmode-toggle svg { 4742 position: absolute; 4743 top: 0; 4744 left: 0; 4745 width: 24px; 4746 height: 24px; 4747 transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); 4748 } 4749 4750 /* Moon icon (shown in light mode) */ 4751 .nylas-darkmode-toggle .icon-moon { 4752 color: #f5f5f5; 4753 opacity: 1; 4754 transform: rotate(0deg) scale(1); 4755 } 4756 4757 /* Sun icon (hidden in light mode) */ 4758 .nylas-darkmode-toggle .icon-sun { 4759 color: #fbbf24; 4760 opacity: 0; 4761 transform: rotate(-90deg) scale(0.5); 4762 } 4763 4764 /* ============================================ 4765 DARK MODE ACTIVE STATE 4766 ============================================ */ 4767 body.dark-mode .nylas-darkmode-toggle { 4768 background: #ffffff; 4769 border-color: #e5e5e5; 4770 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); 4771 } 4772 4773 body.dark-mode .nylas-darkmode-toggle:hover { 4774 box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); 4775 } 4776 4777 /* Moon hides with rotation */ 4778 body.dark-mode .nylas-darkmode-toggle .icon-moon { 4779 opacity: 0; 4780 transform: rotate(90deg) scale(0.5); 4781 } 4782 4783 /* Sun appears with rotation */ 4784 body.dark-mode .nylas-darkmode-toggle .icon-sun { 4785 opacity: 1; 4786 transform: rotate(0deg) scale(1); 4787 } 4788 4789 /* Sun rays animation on hover */ 4790 body.dark-mode .nylas-darkmode-toggle:hover .icon-sun { 4791 animation: sunPulse 1.5s ease-in-out infinite; 4792 } 4793 4794 @keyframes sunPulse { 4795 0%, 100% { transform: rotate(0deg) scale(1); } 4796 50% { transform: rotate(15deg) scale(1.1); } 4797 } 4798 4799 /* Moon glow animation on hover */ 4800 body:not(.dark-mode) .nylas-darkmode-toggle:hover .icon-moon { 4801 animation: moonGlow 2s ease-in-out infinite; 4802 } 4803 4804 @keyframes moonGlow { 4805 0%, 100% { filter: drop-shadow(0 0 0px rgba(255,255,255,0)); } 4806 50% { filter: drop-shadow(0 0 8px rgba(255,255,255,0.6)); } 4807 } 4808 </style> 4809 4810 <button class="nylas-darkmode-toggle" id="nylas-darkmode-toggle" aria-label="Toggle dark mode" title="Toggle dark mode">
4811 <span class="icon-wrapper"> 4812 <!-- Moon Icon (Light Mode) --> 4813 <svg class="icon-moon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"> 4814 <path stroke-linecap="round" stroke-linejoin="round" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" /> 4815 </svg> 4816 <!-- Sun Icon (Dark Mode) --> 4817 <svg class="icon-sun" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"> 4818 <path stroke-linecap="round" stroke-linejoin="round" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" /> 4819 </svg> 4820 </span> 4821 </button> 4822 4823
4823<script> 4824 (function() { 4825 const toggle = document.getElementById('nylas-darkmode-toggle'); 4826 const body = document.body; 4827 const storageKey = 'nylas-dark-mode'; 4828 4829 // Check for saved preference (apply instantly on load, no transition) 4830 const savedMode = localStorage.getItem(storageKey); 4831 if (savedMode === 'true') { 4832 body.classList.add('dark-mode'); 4833 } 4834 4835 // Toggle handler with smooth transition 4836 toggle.addEventListener('click', function() { 4837 // Add transition class for smooth animation 4838 body.classList.add('dark-mode-transition'); 4839 4840 // Toggle dark mode 4841 body.classList.toggle('dark-mode'); 4842 const isDark = body.classList.contains('dark-mode'); 4843 localStorage.setItem(storageKey, isDark); 4844 4845 // Remove transition class after animation completes 4846 setTimeout(function() { 4847 body.classList.remove('dark-mode-transition'); 4848 }, 500); 4849 }); 4850 })(); 4851 </script>
4851 4852
4852<script defer src="/.cloud/rum/otel-rum-exporter.js?v=1.0.1"></script>
vendor: 1 bytes, line 4852
4852
4853<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"df67842450844fa185a3a8a88950c8ba","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 4853
4853
4854<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4007aa92dac122a',t:'MTc5MDIzOTE3Mg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
4854</body> 4855</html><!-- 4856Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com 4857 4858Retrieved 35285 objects (4 MB) from Redis using PhpRedis (v6.3.0). 4859-->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.