');mask:url('data:image/svg+xml, ');-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;background-color:var(--bloghash-primary)}#main{position:relative;-js-display:flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;-ms-flex-preferred-size:auto;flex-basis:auto;word-break:break-word}#main>.bloghash-container{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}#main>.bloghash-container #primary{min-width:0;min-height:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;-ms-flex-preferred-size:auto;flex-basis:auto}#main>.bloghash-container #secondary{-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.bloghash-widget .wp-block-heading{position:relative}.bloghash-sidebar-position__right-sidebar #primary{padding-right:5rem}.post-category .cat-links a{font-size:12px;padding:7px 12px;letter-spacing:.06em;font-weight:600;line-height:1.2;text-align:center;display:inline-block;margin-bottom:.5rem;text-decoration:none;border-radius:var(--bloghash-radius);background-color:var(--bloghash-primary_80);color:var(--bloghash-primary)}.breadcrumbs{max-width:100%}.breadcrumb-trail{width:100%}.breadcrumb-trail .trail-items li{display:inline}.breadcrumb-trail .trail-items li:after{-webkit-mask-image:url('data:image/svg+xml;utf8, ');mask-image:url('data:image/svg+xml;utf8, ');content:'';margin:0 .4rem;display:inline-block;vertical-align:middle;line-height:1}.breadcrumb-trail .trail-items li:last-child:after{display:none}.bloghash-breadcrumbs{font-size:1.4rem;border-width:0}.bloghash-widget.widget:not(.widget_text):not(.hester-core-custom-list-widget) ul{list-style:none;margin-left:0;margin-right:0}#main .bloghash-widget{overflow:hidden}#main .bloghash-widget{margin-bottom:4rem}.wp-block-heading{margin-top:0;position:relative;display:block;margin-bottom:2.5rem}.widget ul{line-height:1.5}.widget ul:last-child{margin-bottom:0}.widget ul:not(.wp-block-social-links) li{margin-bottom:1rem}.widget ul:not(.wp-block-social-links) li:last-child{margin-bottom:0}.widget.widget_block li a{position:relative;z-index:0}.bloghash-entry>:first-child,.wp-block-group__inner-container>:first-child{margin-top:0}.bloghash-entry>:last-child,.wp-block-group__inner-container>:last-child{margin-bottom:0}.entry-content ul:not(.wp-block-latest-posts) li{margin-bottom:.64rem}.bloghash-entry ul:not(.wp-block-latest-posts){list-style:disc}.bloghash-entry ul ul{list-style:circle}.bloghash-entry ul:not(.wp-block-latest-posts){margin-left:4rem}.bloghash-entry ul:not(.wp-block-social-links) li:not(.blocks-gallery-item):last-child{margin-bottom:0}.bloghash-entry ul ul{margin-top:.64rem;margin-bottom:0}.bloghash-entry ul:not(.wp-block-latest-posts){margin-bottom:2rem;margin-top:2rem}.bloghash-entry p{margin-bottom:1.5rem;margin-top:1.5rem}.author-avatar img{border-radius:var(--bloghash-full-radius);width:3rem;vertical-align:middle;margin-right:.8rem;display:inline-block;outline:1px solid rgba(185,185,185,.4)}#main .content-area .entry-meta a{color:inherit}.entry-meta{font-size:1.3rem;font-weight:600;margin-top:1.2rem}.entry-meta .bloghash-icon{height:1.827rem;margin-right:.7rem;vertical-align:text-bottom}.entry-meta .entry-meta-elements>span{padding:0 1rem;line-height:1.2}.entry-meta .entry-meta-elements>span.posted-on{line-height:1.5}.entry-meta .entry-meta-elements>span,.entry-meta .entry-meta-elements>span .posted-by{-js-display:inline-flex;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.entry-meta .entry-meta-elements>span:first-child{padding-left:0}.entry-meta .entry-meta-elements>span:last-child{margin-right:0;padding-right:0}.entry-meta .entry-meta-elements>span:before{content:'';position:relative;left:-1.1rem;width:4px;height:4px;border-radius:100%;background-color:var(--bloghash-primary)}.entry-meta .entry-meta-elements>span:first-child:before{display:none}.single-post .entry-content{margin-top:4rem}.single .post-category{margin-bottom:.3rem;font-size:1.4rem}.single .post-category a{-js-display:inline-flex;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin:0 .4rem .8rem}.single .entry-header{text-align:start;margin-bottom:1rem}.single .entry-meta{text-align:start;margin-top:1.6rem}.single .entry-content{margin-bottom:5rem}.single.bloghash-page-title-align-left .bloghash-article>.entry-header,.single.bloghash-page-title-align-left .bloghash-article>.post-category{text-align:start}.single.bloghash-page-title-align-left .bloghash-article>.entry-meta>.entry-meta-elements{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}#cancel-comment-reply-link{font-size:1.3rem;border-radius:var(--bloghash-normal-radius);border:.2rem solid currentColor;font-weight:500;padding:.4rem .7rem;line-height:1;text-decoration:none;text-transform:capitalize;margin-left:1.4rem;color:inherit}button.bloghash-animate-arrow{-webkit-appearance:none;border:none;-webkit-box-shadow:none;box-shadow:none;background:0 0;outline:none}.bloghash-animate-arrow .arrow-bar{-webkit-transform:scaleX(0);-ms-transform:scaleX(0);transform:scaleX(0)}.bloghash-animate-arrow svg{vertical-align:middle}.bloghash-animate-arrow.right-arrow svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.bloghash-animate-arrow.right-arrow .arrow-bar{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.bloghash-animate-arrow.right-arrow .arrow-handle{-webkit-transform:translateX(.6rem);-ms-transform:translateX(.6rem);transform:translateX(.6rem)}.bloghash-hamburger{padding:0;display:inline-block;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible}.hamburger-box{width:2.5rem;height:1.4rem;display:inline-block;position:relative}.hamburger-inner{display:block;top:50%;margin-top:-.1rem}.hamburger-inner,.hamburger-inner:before,.hamburger-inner:after{width:2.8rem;height:2px;background-color:#111827;border-radius:var(--bloghash-normal-radius);position:absolute}.hamburger-inner:before,.hamburger-inner:after{content:"";display:block}.hamburger-inner:before{top:-5px}.hamburger-inner:after{bottom:-5px}.bloghash-mobile-nav{order:1;display:none;margin-left:2.4rem}.bloghash-hamburger,.bloghash-mobile-nav{-webkit-box-align:center;-ms-flex-align:center;align-items:center}body:not(.is-mobile-menu-active) .bloghash-hamburger .hamburger-box .hamburger-inner:before{width:1.5rem}.bloghash-hamburger{-js-display:inline-flex;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;border-radius:var(--bloghash-normal-radius)}.bloghash-hamburger .hamburger-inner,.bloghash-hamburger .hamburger-inner:before,.bloghash-hamburger .hamburger-inner:after{background-color:currentColor}#bloghash-header:after{content:'';position:fixed;top:100%;left:0;right:0;height:100vh;background-color:rgba(255,255,255,.85);z-index:991;opacity:0;visibility:hidden;will-change:opacity,visibility;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media only screen and (min-width:600px){.site .bloghash-flex-row .start-sm{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.site .bloghash-flex-row .end-sm{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:end;margin-left:auto}}@media only screen and (min-width:782px){.site .bloghash-flex-row .col-md{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:100%;-ms-flex-preferred-size:0;flex-basis:0}.site .bloghash-flex-row .col-md.flex-basis-auto{-ms-flex-preferred-size:auto;flex-basis:auto}}@media only screen and (max-width:868px){.bloghash-hide-mobile-tablet{display:none!important}.bloghash-container{padding:0 3rem}.bloghash-header-widgets .bloghash-header-widget,.bloghash-header-widgets .bloghash-header-widget.bloghash-header-widget__button{padding-left:1rem;padding-right:1rem}.bloghash-mobile-nav{margin-left:1.6rem}}@media only screen and (max-width:599px){#page .alignleft{float:none;margin:2rem auto}#bloghash-header-inner .bloghash-widget-wrapper,.bloghash-header-element,.bloghash-header-widgets .bloghash-header-widget{position:static}.bloghash-header-widgets .dropdown-item:after{display:none}.author-avatar img{display:none}}@media only screen and (max-width:480px){#page{min-height:-webkit-fill-available}}@media only screen and (max-width:960px){#bloghash-topbar>.bloghash-container>.bloghash-flex-row>div .bloghash-topbar-widget{padding-top:.6rem;padding-bottom:.6rem}#bloghash-topbar .bloghash-topbar-widget{padding-left:.8rem;padding-right:.8rem}.bloghash-topbar__separators-regular #bloghash-topbar .bloghash-topbar-widget:after{margin-left:.8rem}#main>.bloghash-container{display:block}#primary{max-width:100%!important;padding-left:0!important;padding-right:0!important;margin-top:4rem}.site-main #secondary{width:100%;margin-top:4rem}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.site .bloghash-flex-row:after{content:'';display:block;min-height:inherit;font-size:0}.bloghash-btn,body:not(.wp-customizer) input[type=submit]{height:1rem}#main>.bloghash-container #primary{-ms-flex-preferred-size:0%;flex-basis:0%}}.bloghash-btn,input[type=submit]{background-color:var(--bloghash-primary)}#masthead .bloghash-header-widgets .dropdown-item:after{border-bottom-color:var(--bloghash-primary);outline:none!important}.bloghash-header-widgets .dropdown-item{border-top-color:var(--bloghash-primary)}::-webkit-selection{background-color:var(--bloghash-primary);color:var(--bloghash-white)}::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2)}::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.4)}a.bloghash-btn span{vertical-align:baseline;line-height:normal}@media (prefers-reduced-motion:reduce){*{animation-duration:0s!important}}.wp-block-latest-posts.wp-block-latest-posts__list li{margin-bottom:1.6rem}#page .wp-block-latest-posts__featured-image.alignleft{margin-right:1em}.wp-block-latest-posts__featured-image,.wp-block-latest-posts__featured-image img{border-radius:calc(var(--bloghash-radius) - .7rem)}.wp-block-latest-posts__featured-image img{box-shadow:2px 2px 3px 0px rgba(93,112,234,.1)}.wp-block-latest-posts__post-title{margin:1rem 0 0;display:block;font-weight:600}@media only screen and (max-width:599px){#page .wp-block-latest-posts__featured-image{width:100%;max-width:max-content}#page .wp-block-latest-posts__featured-image.alignleft{margin-left:0;margin-right:0}}.post-category .cat-links a.cat-3{color:#525ceb;background:#dddffb}:root{--bloghash-primary:#525ceb;--bloghash-primary_80:#dddffb;--bloghash-primary_15:#6c75ee;--bloghash-primary_27:rgba(82,92,235,.27);--bloghash-primary_10:rgba(82,92,235,.1)}#bloghash-topbar{background:rgba(247,229,183,.35)}#bloghash-topbar{border-style:solid}.bloghash-topbar-widget:after{background-color:#ccc}#bloghash-topbar{color:#002050}.bloghash-topbar-widget__text a{color:#302d55}#bloghash-header-inner{background:#fff}#bloghash-header,.bloghash-header-widgets a:not(.bloghash-btn),.bloghash-logo a,.bloghash-hamburger{color:#131315}.bloghash-header-widget:after{background-color:#ccc}@media screen and (max-width:960px){#bloghash-header-inner .bloghash-nav{display:none;color:#000}.bloghash-mobile-nav{display:inline-flex}#bloghash-header-inner{position:relative}#bloghash-header-inner .bloghash-nav>ul>li>a{color:inherit}#bloghash-header-inner .site-navigation{display:none;position:absolute;top:100%;width:100%;height:100%;min-height:100vh;left:0;right:0;margin:-1px 0 0;background:#fff;border-top:1px solid #eaeaea;box-shadow:0 15px 25px -10px rgba(50,52,54,.125);z-index:999;font-size:1.7rem;padding:0}#bloghash-header-inner .site-navigation>ul{overflow-y:auto;max-height:68vh;display:block}#bloghash-header-inner .site-navigation>ul>li>a{padding:0!important}#bloghash-header-inner .site-navigation>ul li{display:block;width:100%;padding:0;margin:0;margin-left:0!important}#bloghash-header-inner .site-navigation>ul a{padding:0;position:relative;background:0 0}#bloghash-header-inner .site-navigation>ul li{border-bottom:1px solid #eaeaea}#bloghash-header-inner .site-navigation>ul>li:last-child{border-bottom:0}#bloghash-header-inner .site-navigation>ul a>span{padding:10px 30px!important;width:100%;display:block}#bloghash-header-inner .site-navigation>ul a>span:after,#bloghash-header-inner .site-navigation>ul a>span:before{display:none!important}}.bloghash-nav.bloghash-header-element,.bloghash-header-layout-2 .bloghash-header-widgets{font-weight:600;font-family:"Inter Tight",Helvetica,Arial,sans-serif;font-size:1.7rem;line-height:1.5}#secondary{width:30%}body:not(.bloghash-no-sidebar) #primary{max-width:70%}.bloghash-layout__boxed-separated #content>article,.bloghash-layout__boxed-separated.bloghash-sidebar-style-2 #secondary .bloghash-widget{background-color:#fff}body{color:#002050}h1,h2,h4,a,.entry-meta,.wp-block-heading{color:#0a0a0a}:root{--bloghash-secondary:#0a0a0a}.bloghash-container{max-width:1480px}.bloghash-logo img{max-height:44px}.bloghash-logo .logo-inner{margin-top:25px;margin-right:3px;margin-bottom:25px}@media only screen and (max-width:768px){.bloghash-logo .logo-inner{margin-top:25px;margin-right:1px;margin-bottom:25px}}.bloghash-breadcrumbs{padding-top:15px;padding-bottom:15px}.bloghash-breadcrumbs{background:#fff9f3}.bloghash-breadcrumbs{border-color:#ffe7d2;border-style:solid;border-top-width:1px;border-bottom-width:1px}html{font-size:62.5%}@media only screen and (max-width:768px){html{font-size:53%}}@media only screen and (max-width:480px){html{font-size:50%}}*{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}body{font-family:"Be Vietnam Pro",Helvetica,Arial,sans-serif;font-size:1.7rem;line-height:1.75}h1,h2,h4{font-weight:700;font-style:normal;text-transform:none;text-decoration:none;font-family:"Be Vietnam Pro",Helvetica,Arial,sans-serif}h1{font-weight:700;font-size:4rem;line-height:1.4}h2{font-weight:700;font-size:3.6rem;line-height:1.4}h4{font-weight:700;font-size:2.4rem;line-height:1.4}#secondary .bloghash-widget .wp-block-heading{font-size:1.8rem}.single-post .entry-content{font-size:1.6rem}.bloghash-btn,body:not(.wp-customizer) input[type=submit]{color:#fff;border-color:;border-width:.1rem;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.bloghash-btn,body:not(.wp-customizer) input[type=submit]{font-weight:500;font-family:"Be Vietnam Pro",Helvetica,Arial,sans-serif;font-size:1.8rem}.post-category .cat-links a.cat-3{color:#fff;background:#525ceb}.wp-block-heading{margin-top:2.5rem}.noptin-form-footer .noptin-optin-field-wrapper:not(.noptin-optin-field-wrapper-hidden) .noptin-form-field{height:unset!important;min-height:4.6rem!important;font-weight:500;font-size:1.4rem}#bloghash-topbar>.bloghash-container>.bloghash-flex-row>div{display:flex;justify-content:center;text-align:center}:focus{outline:0}button::-moz-focus-inner{padding:0;border:0}.dropdown-item{position:relative}.ekit-wid-con .ekit-review-card--date,.ekit-wid-con .ekit-review-card--desc{grid-area:date}.ekit-wid-con .ekit-review-card--image{width:60px;height:60px;grid-area:thumbnail;min-width:60px;border-radius:50%;background-color:#eae9f7;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1rem;position:relative}.ekit-wid-con .ekit-review-card--thumbnail{grid-area:thumbnail;padding-right:1rem}.ekit-wid-con .ekit-review-card--name{grid-area:name;font-size:14px;font-weight:700;margin:0 0 .25rem}.ekit-wid-con .ekit-review-card--stars{grid-area:stars;color:#f4be28;font-size:13px;line-height:20px}.ekit-wid-con .ekit-review-card--comment{grid-area:comment;font-size:16px;line-height:22px;font-weight:400;color:#32323d}.ekit-wid-con .ekit-review-card--actions{grid-area:actions}.ekit-wid-con .ekit-review-card--posted-on{display:-webkit-box;display:-ms-flexbox;display:flex;grid-area:posted-on}.screen-reader-text{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}:root{--page-title-display:block}h1.entry-title{display:var(--page-title-display)}.e-contact-buttons-var-8 .e-contact-buttons__contact-icon-container{align-items:center;display:flex;grid-area:1/1/3/2}.e-contact-buttons-var-8 .e-contact-buttons__contact-title{color:var(--e-contact-buttons-contact-title-text-color);grid-area:1/2/2/3;font-size:16px;font-weight:600;line-height:24px}.e-contact-buttons-var-8 .e-contact-buttons__contact-description{color:var(--e-contact-buttons-contact-description-text-color);grid-area:2/2/3/3;font-size:12px;font-weight:300;line-height:16px}.ss-popup-overlay .ss-copy-action .ss-button,.ss-popup-overlay .ss-popup .ss-close-modal,.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network>a{border:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;outline:0;text-decoration:none;text-transform:none;letter-spacing:0}.ss-svg-icon{height:16px;width:auto;vertical-align:text-bottom;fill:currentColor}.ss-envelope-color{background-color:#323b43}.ss-facebook-color{background-color:#1877f2}.ss-twitter-color{background-color:#000}.ss-linkedin-color{background-color:#2867b2}.ss-copy-color{background-color:#323b43}.ss-print-color{background-color:#323b43}.ss-mix-color{background-color:#ff8226}.ss-clearfix:after{content:"";display:table;clear:both}:root{--ss-wpadminbar-height:0px}.ss-popup-overlay{display:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,Arial,"Helvetica Neue",sans-serif;-webkit-font-smoothing:initial;content:"";position:fixed;top:0;bottom:0;left:0;right:0;z-index:99999;background:rgba(202,202,202,.75);opacity:0}.ss-popup-overlay .ss-copy-action{position:relative;display:none}.ss-popup-overlay .ss-copy-action .ss-copy-action-field{border:1px solid rgba(0,0,0,.1);border-radius:2px;color:#323b43;font-family:inherit;font-size:16px;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:48px!important;line-height:48px!important;padding:0 120px 0 50px!important;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;outline:0;background-color:#fff;margin:0}.ss-popup-overlay .ss-copy-action .ss-button{font-weight:400;font-family:inherit;position:absolute;right:6px;top:5px;background-color:#557ceb;color:#fff;padding:0;line-height:38px;height:38px;width:105px;font-size:16px;z-index:9;border-radius:2px}.ss-popup-overlay .ss-copy-action svg{position:absolute;height:24px;width:24px;top:50%;left:15px;margin-top:-12px;fill:#dadada}.ss-popup-overlay .ss-popup{opacity:0;border-radius:2px;max-width:90%;max-height:90%;width:720px;height:auto}.ss-popup-overlay .ss-popup .ss-popup-heading{display:block;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px;font-weight:300;color:#323b43;background-color:#fff;line-height:58px;height:58px;padding:0 0 0 24px;margin:0;border-top-left-radius:4px;border-top-right-radius:4px}.ss-popup-overlay .ss-popup .ss-close-modal{margin-left:auto;padding:0 24px;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#a9a9a9}.ss-popup-overlay .ss-popup .ss-close-modal svg{width:16px;height:16px}.ss-popup-overlay .ss-popup .ss-popup-content{position:relative;top:3px;left:0;right:0;bottom:0;max-height:70vh;background-color:#fff;overflow-y:scroll;padding:24px 24px 20px;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ss-popup-overlay .ss-popup .ss-popup-networks{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0 -6px}.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network{-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%;padding:0 6px 6px;-ms-flex-negative:0;flex-shrink:0;float:left;display:inline-block}.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network>a{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;padding:0 15px 0 0;display:-webkit-box;display:-ms-flexbox;display:flex;line-height:40px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;color:#fff;border-radius:2px;font-weight:500;font-size:13px;vertical-align:middle;-webkit-backface-visibility:hidden;white-space:nowrap;text-overflow:ellipsis}.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network>a span:first-child{position:relative;z-index:2;height:40px;width:40px;text-align:center;line-height:40px;font-size:16px;margin-right:10px;background-color:rgba(0,0,0,.15);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network>a svg{fill:#fff;height:16px;width:inherit;z-index:1}.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network>a span:first-child:before{content:"";position:absolute;left:0;top:0;background-color:rgba(0,0,0,.1)}.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network>a span{position:relative;z-index:3}.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network>a:before{position:absolute;content:"";background-color:rgba(255,255,255,0);top:0;left:0;bottom:0;right:0;z-index:1}.ss-share-network-tooltip{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,Arial,"Helvetica Neue",sans-serif;-webkit-font-smoothing:initial;position:absolute;line-height:1;left:100%;margin-left:12px;background-color:rgba(56,70,84,.85);top:50%;width:auto;white-space:nowrap;padding:8px 10px;border-radius:2px;font-size:12px;color:rgba(255,255,255,.9);z-index:2;opacity:0;-webkit-transform:translateX(-7px) translateY(-50%);-ms-transform:translateX(-7px) translateY(-50%);transform:translateX(-7px) translateY(-50%)}.ss-copy-action .ss-share-network-tooltip{left:auto;margin-left:0;right:100%;margin-right:12px;-webkit-transform:translateX(7px) translateY(-50%);-ms-transform:translateX(7px) translateY(-50%);transform:translateX(7px) translateY(-50%)}@media screen and (max-width:782px){.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network{width:50%}}@media screen and (max-width:500px){.ss-popup-overlay .ss-popup .ss-popup-networks .ss-popup-network{width:100%}}.elementor-kit-855{--e-global-color-primary:#6ec1e4;--e-global-color-secondary:#54595f;--e-global-color-text:#7a7a7a;--e-global-color-accent:#61ce70;--e-global-typography-primary-font-family:"Roboto";--e-global-typography-primary-font-weight:600;--e-global-typography-secondary-font-family:"Roboto Slab";--e-global-typography-secondary-font-weight:400;--e-global-typography-text-font-family:"Roboto";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500}h1.entry-title{display:var(--page-title-display)}
Building an HTTP Server in Rust: Using Actix Web Framework - TechAlgoSpotlight
Skip to content Home Blog Rust Building an HTTP Server in Rust: Using Actix Web Framework Creating an HTTP server in Rust is a rewarding experience that combines performance, safety, and concurrency. Rust, with its powerful ecosystem, offers several libraries and frameworks to make web server development efficient and robust. This article will guide you through creating a web server using the Actix Web framework, covering setup, project structure, and a full example with comments. We will also discuss the performance of Actix Web and introduce other popular Rust frameworks for web development.
What is a Web Server? A web server is a system that processes requests via HTTP, the basic network protocol used to distribute information on the World Wide Web. Web servers handle incoming network requests and serve content, such as HTML pages, images, and data.
Ways to Create an HTTP Server in Rust There are multiple ways to create an HTTP server in Rust, including:
Using low-level libraries like hyper
to build a server from scratch.Utilizing high-level frameworks like Actix Web
, Warp, Rocket, or Axum, which provide more abstraction and ease of use.In this article, we will create a web server using Actix Web Framework.
Creating a Web Server Using Actix Web Framework Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust. It uses the Actix actor framework for handling concurrent operations, making it suitable for building high-performance web applications.
Setup of Actix Web Framework To set up an Actix Web project, follow these steps:
1. Install Rust If you haven’t already, install Rust by following the instructions at rust-lang.org .
2. Create a new Rust project : cargo new rust-web-server
cd rust-web-server
3. Add Actix Web to your Cargo.toml
: [dependencies]
actix-web = "4"
Project Structure Your project structure will look like this:
rust-web-server /
├── Cargo .toml
└── src
└── main.rs
HTTP Server Code with Output Here’s a complete example of an HTTP server using Actix Web:
// src/main.rs
use actix_web ::{web, App , HttpResponse , HttpServer , Responder };
// Handler function for the root path
async fn greet () -> impl Responder {
HttpResponse :: Ok (). body ( "Hello, welcome to your Rust server!" )
}
#[actix_web::main]
async fn main () -> std :: io :: Result <()> {
// Start the HTTP server
HttpServer :: new (|| {
// Configure the application
App :: new ()
. route ( "/" , web :: get (). to ( greet )) // Map the root path to the greet handler
})
. bind ( "127.0.0.1:8080" )? // Bind the server to the local address
. run ()
. await
}
Explanation of the Code: Imports : Import necessary modules from actix_web
.Handler Function : Define a handler function greet
that returns a HttpResponse
.Main Function : Set up the server in the main
function: Use HttpServer::new
to create a new server instance. Configure the App
with routes using App::new().route()
. Bind the server to 127.0.0.1:8080
. Run the server asynchronously. Running the Server To run your server, execute:
You should see an output indicating the server is running. Open a browser and navigate to http://127.0.0.1:8080
to see the “Hello, welcome to your Rust server!” message.
Why we used an Actix Web Framework Actix Web is known for its high performance, thanks to its use of the Actix actor framework. It efficiently handles many simultaneous connections and leverages Rust’s concurrency model to maximize performance. Benchmarks often place Actix Web among the fastest web frameworks available for Rust.
Other Top Rust Frameworks In addition to Actix Web, several other frameworks are popular in the Rust community:
Warp : A web framework built on the hyper
library, known for its composable filters.Rocket : Focuses on ease of use and rapid development with a strong type system.Axum : Combines the flexibility of hyper
with the ergonomics of Tower middleware.Tide : A modular framework from the creators of async-std.Conclusion Building an HTTP server in Rust is straightforward and powerful, especially with frameworks like Actix Web. By following this guide, you can set up a basic server, understand its structure, and appreciate its performance. Additionally, exploring other frameworks like Warp, Rocket, and Axum can help you find the best fit for your specific needs in Rust backend development.
With Rust’s growing ecosystem and emphasis on performance and safety, it’s an exciting time to dive into Rust web server development.