/*! elementor - v3.16.0 - 20-09-2023 */ .dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-top:15px;right:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-hidden{display:none}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}#elementor-change-exit-preference-dialog .dialog-message a{cursor:pointer}#elementor-change-exit-preference-dialog .dialog-message>div{margin-block-end:10px}#e-experiments-messages-dialog .dialog-confirm-header{font-weight:600}#e-kit-elements-defaults-create-dialog label{display:flex;align-items:center;justify-content:center;gap:10px;margin-block-start:20px}@media (min-width:1024px){body.admin-bar .dialog-lightbox-widget{height:calc(100vh - 32px)}}@media (max-width:1024px){body.admin-bar .dialog-type-lightbox{position:sticky;height:100vh}}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,sans-serif;background-color:var(--e-a-bg-default);width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{border-block-end:var(--e-a-border);padding:0;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{border-block-start:var(--e-a-border);padding:10px;display:flex;justify-content:flex-end;gap:15px}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow-y:auto;padding:20px}.elementor-templates-modal .dialog-content{height:100%;text-align:center}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:flex;align-items:center;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{line-height:1;text-transform:uppercase;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:start;padding-inline-start:15px}.elementor-templates-modal__header__logo-area>*{display:flex;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{margin-inline-end:10px;font-size:12px}.elementor-templates-modal__header__logo__title{color:var(--e-a-color-txt-active);padding-block-start:2px}.elementor-templates-modal__header__items-area{display:flex;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:flex;align-items:center;justify-content:center;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;transition:var(--e-a-transition-hover);cursor:pointer}.elementor-templates-modal__header__item>i:hover{color:var(--e-a-color-txt-hover)}.elementor-templates-modal__header__close--normal{width:47px;border-inline-start:var(--e-a-border)}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px;padding-inline-start:20px;margin-inline-end:10px;font-size:11px;font-weight:400;line-height:1;border-radius:var(--e-a-border-radius);cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-inline-start:10px;margin-inline-start:15px;border-inline-start:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:var(--e-a-color-white)}.elementor-templates-modal__sidebar{flex-shrink:0;width:25%;border-inline-end:var(--e-a-border)}.elementor-templates-modal__content{flex-grow:1}#elementor-toast{position:absolute;width:280px;padding:20px;border-radius:5px;color:var(--e-a-dark-color-txt);background-color:rgba(0,0,0,.8);z-index:10000}#elementor-toast.dialog-position-window{position:fixed}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:flex;justify-content:flex-end}#elementor-toast .dialog-buttons-wrapper:not(:empty){margin-top:15px}#elementor-toast .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;margin-right:10px;color:var(--e-a-dark-color-txt);border-radius:var(--e-a-border-radius);transition:var(--e-a-transition-hover);cursor:pointer}#elementor-toast .dialog-button:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#elementor-toast .dialog-button:last-child{margin-right:0}#wpadminbar #wp-admin-bar-elementor_edit_page .elementor-general-section+.elementor-second-section{border-block-start:1px solid #464b50;margin-block-start:6px}.e-logo-wrapper{background:var(--e-a-bg-logo);display:inline-block;padding:.75em;border-radius:50%;line-height:1}.e-logo-wrapper i{color:var(--e-a-color-logo);font-size:1em}#elementor-finder__modal{background:none;z-index:99999}#elementor-finder__modal .dialog-widget-content{width:650px;max-width:98%;top:18vh;left:calc(50% - 650px / 2)}#elementor-finder__modal .dialog-content{text-align:start}#elementor-finder__modal .dialog-message{height:auto;min-height:0;padding:0;text-align:left}#elementor-finder__search{padding:15px;display:flex}#elementor-finder__search i{font-size:16px;margin-inline-end:15px}#elementor-finder__search__input{border:none;background:none;outline:none;padding:0;margin:0;flex-grow:1;font-size:14px;box-shadow:none}#elementor-finder__search__input::-moz-placeholder{font-style:italic;font-weight:300}#elementor-finder__search__input::placeholder{font-style:italic;font-weight:300}#elementor-finder__results{max-height:50vh;overflow:auto}#elementor-finder__no-results{display:none;padding:20px}#elementor-finder__lock-dialog{z-index:100000}.elementor-finder__results__category{position:relative}.elementor-finder__results__category__title{padding:5px 25px;font-size:10px;border-bottom:var(--e-a-border)}.elementor-finder__results__category--dynamic .elementor-finder__results__category__items{min-height:26px}.elementor-finder__results__category .eicon-loading{display:none;position:absolute;right:10px;top:30px;color:var(--e-a-color-info);font-size:14px}.elementor-finder__results__item{display:flex}.elementor-finder__results__item a{text-decoration:none;color:inherit}.elementor-finder__results__item.elementor-active{background-color:var(--e-a-bg-hover)}.elementor-finder__results__item.elementor-active a{color:inherit}.elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions{display:none}.elementor-finder__results__item__link{display:flex;align-items:center;height:35px;flex-grow:1}.elementor-finder__results__item__icon{width:60px;text-align:center;font-size:17px}.elementor-finder__results__item__title{font-size:13px}.elementor-finder__results__item__description{margin-inline-start:5px;font-style:italic}.elementor-finder__results__item__badge{text-transform:uppercase;position:absolute;inset-inline-end:16px;font-size:8px;font-weight:500;display:flex;align-items:center;gap:4px}.elementor-finder__results__item__actions{display:flex}.elementor-finder__results__item__action{display:flex;align-items:center;justify-content:center;height:100%;width:35px}.elementor-finder__results__item__action:hover{background-color:rgba(0,0,0,.07)}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:100000}.tipsy-inner{background-color:#000;color:#fff;font-weight:500;max-width:200px;padding:5px 12px;text-align:center;border-radius:3px;box-shadow:0 0 5px 0 rgba(0,0,0,.5)}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-arrow-n{border-bottom-color:#000}.tipsy-arrow-s{border-top-color:#000}.tipsy-arrow-e{border-left-color:#000}.tipsy-arrow-w{border-right-color:#000}.tipsy-n .tipsy-arrow,.tipsy-nw .tipsy-arrow{border-left-color:transparent;border-right-color:transparent;top:0;border-bottom-style:solid;border-top:none}.tipsy-n .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-nw .tipsy-arrow{left:10px}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow,.tipsy-se .tipsy-arrow,.tipsy-sw .tipsy-arrow{bottom:0;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-sw .tipsy-arrow{left:10px}.tipsy-se .tipsy-arrow{right:10px}.tipsy-e .tipsy-arrow,.tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;border-top-color:transparent;border-bottom-color:transparent}.tipsy-e .tipsy-arrow{right:0;border-left-style:solid;border-right:none}.tipsy-w .tipsy-arrow{left:0;border-right-style:solid;border-left:none}{"id":55481,"date":"2021-02-12T12:11:23","date_gmt":"2021-02-12T18:11:23","guid":{"rendered":"https:\/\/datadynamics-inc.com\/?p=55481"},"modified":"2021-07-27T12:14:07","modified_gmt":"2021-07-27T17:14:07","slug":"serverless-computing-2","status":"publish","type":"post","link":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/","title":{"rendered":"Serverless Computing"},"content":{"rendered":"
Serverless computing is a misnomer.\u00a0Computing is impossible without the presence of a machine.\u00a0Just like a virus needs a host, code can also not run in thin air, it needs machine resources to take input, process, and then produce output.\u00a0So then what is serverless computing, and why is it gaining so much popularity?\u00a0Basically serverless computing is a relatively new variant of existing cloud computing model PaaS (Platform as a Service), where machine (server) resources are made available on demand by the cloud provider right at the time of code execution.\u00a0Such a model frees up the client from provisioning, scaling, and maintaining server(s), even if it is on the cloud, and focus exclusively on application code.\u00a0The cloud provider takes on full responsibility of making the server resources available just in time, and client pays for the bursts of usage and for the storage where the resulting output data may reside.<\/div>\n
<\/div>\n
In this edition, we discuss two (2) serverless architectures at a high-level from cloud providers Amazon and Microsoft:<\/div>\n
<\/div>\n
\n
1) Amazon Web Services:<\/div>\n
AWS serverless architecture rests on two (2) key offerings by Amazon: 1) Amazon API Gateway and 2) AWS Lambda.\u00a0Although there are other offerings such as Amazon RDS, DynamoDB, Amazon S3, that invariably become integral part of a complete solution, it is these two that any AWS based serverless computing solution cannot be developed without.<\/div>\n
\n
    \n
  • AWS Lambda:\u00a0AWS Lambda is an environment that supports code (business logic) written in one of many languages as part of web service that are triggered in response to an event.\u00a0These are basically functions (micro-services), also called handlers, which are triggered by events, which in turn are triggered by an API call from a client that flows through the Amazon API Gateway.\u00a0AWS Lambda provisions computing resources and scales them according to the usage of these Lambda functions.<\/li>\n<\/ul>\n
    <\/div>\n
      \n
    • Other AWS Offerings:\u00a0As previously mentioned, other AWS offerings may be integrated with these two to make a complete standalone solution depending on the needs and requirements. For example, AWS Lambda and the data tier (RDS, S3, DynamoDB, etc.) can be deployed in an Amazon VPC (Virtual Private Cloud) or integrate IAM (Identity Access Management) to make the application and data more secure.<\/li>\n<\/ul>\n
      <\/div>\n
      2) Microsoft Azure:<\/div>\n
      Azure Functions is a cloud service, similar to AWS Lambda, offered by Microsoft, that offers machine resources on demand to process requests without having a server deployed on permanent basis. Azure Functions extends existing Azure application platform with capabilities to implement code triggered by events in Azure, or 3rd party services. it provides an intuitive, browser-based user interface allowing one to create scheduled or triggered pieces of code implemented in a variety of programming languages. A wide range or triggers and connectors allows for the code to react to events in Azure services. Just like AWS, Azure offers data services (Azure Storage, Azure SQL DB, etc.) for functions to persist data on these servers. Data passed from one function to another or from a data source to a function rely on bindings which make it transparent to the developer who then just needs to focus on its usage rather than worrying about how it is flowing from one system to another. A set of pre-configured operating system image, that don’t require patching, obviate the need for any server maintenance in addition to separating OS layer from the code.<\/div>\n
      <\/div>\n
      Comparison Between the Two:<\/div>\n
      While this is a topic that requires an email on its own just for a high-level coverage, we will just touch upon a few important differences. AWS serverless model is very tightly integrated with the programming model making the code developed and deployed uniquely targeted towards the AWS serverless paradigm. On the other hand, Microsoft’s approach allows for more flexibility in that code developed for Azure Functions can also be deployed and executed in the hosting models offered by Microsoft. Lambda provides a wider choice in maximum memory allocation (128MB – 3GB), whereas Azure functions comes standard with a 1.5GB memory, unless of course one opts for the premium plan, which is more expensive. They both support a variety of programming languages. Lambda reserves separate instance for each execution which makes performance predictable and stable, but not necessarily efficient. Azure on the other hand, spawns off multiple concurrent executions sharing the same resources like memory and CPU cycles, which makes it efficient for normal executions, but may slow down the performance during high-resource usage. On the face of it, unit pricing of both offerings seem to be comparable, but the devil is always in the detail. Only a detailed analysis for a specific computing scenario can reveal which offering is more cost-effective in the long run.<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"

      Serverless computing is a misnomer.\u00a0Computing is impossible without the presence of a machine.\u00a0Just like a virus needs a host, code can also not run in thin air, it needs machine resources to take input, process, and then produce output.\u00a0So then what is serverless computing, and why is it gaining so much popularity?\u00a0Basically serverless computing is…<\/p>\n","protected":false},"author":4943,"featured_media":55277,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[263],"tags":[],"class_list":["post-55481","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-managed-services","category-263","description-off"],"yoast_head":"\nServerless Computing - Data Dynamics<\/title>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Serverless Computing - Data Dynamics\" \/>\n<meta property=\"og:description\" content=\"Serverless computing is a misnomer.\u00a0Computing is impossible without the presence of a machine.\u00a0Just like a virus needs a host, code can also not run in thin air, it needs machine resources to take input, process, and then produce output.\u00a0So then what is serverless computing, and why is it gaining so much popularity?\u00a0Basically serverless computing is…\" \/>\n<meta property=\"og:url\" content=\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Data Dynamics\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-12T18:11:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-27T17:14:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mvlfea.p3cdn1.secureserver.net\/wp-content\/uploads\/2021\/06\/computer_server.jpg?time=1667560402\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"ddadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ddadmin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ddadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/\"},\"author\":{\"name\":\"ddadmin\",\"@id\":\"https:\/\/datadynamics-inc.com\/#\/schema\/person\/a99f214d98995ad3f97f5aaf368cfd4c\"},\"headline\":\"Serverless Computing\",\"datePublished\":\"2021-02-12T18:11:23+00:00\",\"dateModified\":\"2021-07-27T17:14:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/\"},\"wordCount\":781,\"publisher\":{\"@id\":\"https:\/\/datadynamics-inc.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg\",\"articleSection\":[\"Managed Services\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/\",\"url\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/\",\"name\":\"Serverless Computing - Data Dynamics\",\"isPartOf\":{\"@id\":\"https:\/\/datadynamics-inc.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg\",\"datePublished\":\"2021-02-12T18:11:23+00:00\",\"dateModified\":\"2021-07-27T17:14:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage\",\"url\":\"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg\",\"contentUrl\":\"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg\",\"width\":1024,\"height\":683,\"caption\":\"Computer Server\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/datadynamics-inc.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Serverless Computing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/datadynamics-inc.com\/#website\",\"url\":\"https:\/\/datadynamics-inc.com\/\",\"name\":\"Data Dynamics\",\"description\":\"where it\u2019s ebusiness as usual\",\"publisher\":{\"@id\":\"https:\/\/datadynamics-inc.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/datadynamics-inc.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/datadynamics-inc.com\/#organization\",\"name\":\"Data Dynamics\",\"url\":\"https:\/\/datadynamics-inc.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/datadynamics-inc.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2019\/10\/logo-146x38.png\",\"contentUrl\":\"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2019\/10\/logo-146x38.png\",\"width\":146,\"height\":38,\"caption\":\"Data Dynamics\"},\"image\":{\"@id\":\"https:\/\/datadynamics-inc.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/datadynamics-inc.com\/#\/schema\/person\/a99f214d98995ad3f97f5aaf368cfd4c\",\"name\":\"ddadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/datadynamics-inc.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8d884f8d65fe02b33d6a7d089e733015?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8d884f8d65fe02b33d6a7d089e733015?s=96&d=mm&r=g\",\"caption\":\"ddadmin\"},\"sameAs\":[\"https:\/\/x.com\/ddadmin\"],\"url\":\"https:\/\/datadynamics-inc.com\/author\/data-dynamics\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Serverless Computing - Data Dynamics","robots":{"index":"noindex","follow":"follow"},"og_locale":"en_US","og_type":"article","og_title":"Serverless Computing - Data Dynamics","og_description":"Serverless computing is a misnomer.\u00a0Computing is impossible without the presence of a machine.\u00a0Just like a virus needs a host, code can also not run in thin air, it needs machine resources to take input, process, and then produce output.\u00a0So then what is serverless computing, and why is it gaining so much popularity?\u00a0Basically serverless computing is…","og_url":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/","og_site_name":"Data Dynamics","article_published_time":"2021-02-12T18:11:23+00:00","article_modified_time":"2021-07-27T17:14:07+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/mvlfea.p3cdn1.secureserver.net\/wp-content\/uploads\/2021\/06\/computer_server.jpg?time=1667560402","type":"image\/jpeg"}],"author":"ddadmin","twitter_card":"summary_large_image","twitter_creator":"@ddadmin","twitter_misc":{"Written by":"ddadmin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#article","isPartOf":{"@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/"},"author":{"name":"ddadmin","@id":"https:\/\/datadynamics-inc.com\/#\/schema\/person\/a99f214d98995ad3f97f5aaf368cfd4c"},"headline":"Serverless Computing","datePublished":"2021-02-12T18:11:23+00:00","dateModified":"2021-07-27T17:14:07+00:00","mainEntityOfPage":{"@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/"},"wordCount":781,"publisher":{"@id":"https:\/\/datadynamics-inc.com\/#organization"},"image":{"@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage"},"thumbnailUrl":"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg","articleSection":["Managed Services"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/","url":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/","name":"Serverless Computing - Data Dynamics","isPartOf":{"@id":"https:\/\/datadynamics-inc.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage"},"image":{"@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage"},"thumbnailUrl":"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg","datePublished":"2021-02-12T18:11:23+00:00","dateModified":"2021-07-27T17:14:07+00:00","breadcrumb":{"@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/datadynamics-inc.com\/serverless-computing-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#primaryimage","url":"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg","contentUrl":"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2021\/06\/computer_server.jpg","width":1024,"height":683,"caption":"Computer Server"},{"@type":"BreadcrumbList","@id":"https:\/\/datadynamics-inc.com\/serverless-computing-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/datadynamics-inc.com\/"},{"@type":"ListItem","position":2,"name":"Serverless Computing"}]},{"@type":"WebSite","@id":"https:\/\/datadynamics-inc.com\/#website","url":"https:\/\/datadynamics-inc.com\/","name":"Data Dynamics","description":"where it\u2019s ebusiness as usual","publisher":{"@id":"https:\/\/datadynamics-inc.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/datadynamics-inc.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/datadynamics-inc.com\/#organization","name":"Data Dynamics","url":"https:\/\/datadynamics-inc.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/datadynamics-inc.com\/#\/schema\/logo\/image\/","url":"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2019\/10\/logo-146x38.png","contentUrl":"https:\/\/datadynamics-inc.com\/wp-content\/uploads\/2019\/10\/logo-146x38.png","width":146,"height":38,"caption":"Data Dynamics"},"image":{"@id":"https:\/\/datadynamics-inc.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/datadynamics-inc.com\/#\/schema\/person\/a99f214d98995ad3f97f5aaf368cfd4c","name":"ddadmin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/datadynamics-inc.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8d884f8d65fe02b33d6a7d089e733015?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d884f8d65fe02b33d6a7d089e733015?s=96&d=mm&r=g","caption":"ddadmin"},"sameAs":["https:\/\/x.com\/ddadmin"],"url":"https:\/\/datadynamics-inc.com\/author\/data-dynamics\/"}]}},"_links":{"self":[{"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/posts\/55481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/users\/4943"}],"replies":[{"embeddable":true,"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/comments?post=55481"}],"version-history":[{"count":1,"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/posts\/55481\/revisions"}],"predecessor-version":[{"id":55482,"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/posts\/55481\/revisions\/55482"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/media\/55277"}],"wp:attachment":[{"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/media?parent=55481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/categories?post=55481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datadynamics-inc.com\/wp-json\/wp\/v2\/tags?post=55481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}