:root{--color-woodsmoke:#16161d;--color-dolphin:#626177;--color-gunpowder:#8888a2;--color-manatee:#8888a2;--color-cadet-blue:#abb2bf;--color-whisper:#ebebf7;--color-selago:rgba(133,187,89,0.09);--color-white-lilac:#f8f8fc;--color-white:#fff;--color-green-haze:#00ab47;--color-dodger-blue:#85bb59;--color-dodger-blue-hover:rgba(88,81,255,0.2);--color-old-lace:#fdf5e4;--color-wheatfield:#f1e3c5;--color-pirate-gold:#9a6400;--button-shadow:0 8px 16px rgba(0,0,0,0.1),0 3px 6px rgba(0,0,0,0.08);--button-shadow-hover:0 4px 6px rgba(0,0,0,0.12),0 1px 3px rgba(0,0,0,0.08);--ease-out-expo:cubic-bezier(0.19,1,0.22,1);--bg-primary:#fff;--bg-secondary:#f8f8fc;--bg-section:#fff;--text-primary:#16161d;--text-secondary:#626177;--border-color:rgba(133,187,89,0.09);--promo-bg:#30323d;--promo-bg-hover:#0b0b0c;--promo-text:#e8c547;--button-learn-more-bg:#fff;--input-border:#abb0b2;--card-bg:#fff;--card-shadow:0 2px 4px 0 rgba(0,0,0,0.09);--card-shadow-hover:0 2px 8px 0 rgba(0,0,0,0.1);--btn-secondary-bg:#fff;--btn-tertiary-bg:rgba(133,187,89,0.09);--btn-tertiary-hover-bg:rgba(48,50,61,0.08);--footer-bg:#f8f8fc;--footer-text:#6c7078;--header-bg:#fff;--header-menu-link:#8888a2;--header-menu-link-hover:rgba(136,136,162,0.2);--header-mobile-bg:#16161d;--header-mobile-link:rgba(235,235,247,0.7);--header-mobile-link-hover:rgba(235,235,247,0.4);--menu-section-label:#16161d;--menu-link:#6c6c8b;--menu-link-hover:#16161d}@media (prefers-color-scheme:dark){:root{--bg-primary:#16161d;--bg-secondary:#1e1e28;--bg-section:#232331;--text-primary:#e8e8f0;--text-secondary:#abb2bf;--border-color:rgba(133,187,89,0.15);--promo-bg:#2a2c3a;--promo-bg-hover:#1a1b24;--promo-text:#ffd95b;--button-learn-more-bg:#2a2c3a;--input-border:#4a4a5a;--card-bg:#2a2c3a;--card-shadow:0 2px 4px 0 rgba(0,0,0,0.3);--card-shadow-hover:0 4px 12px 0 rgba(133,187,89,0.2);--btn-secondary-bg:#2a2c3a;--btn-tertiary-bg:rgba(133,187,89,0.15);--btn-tertiary-hover-bg:rgba(133,187,89,0.25);--footer-bg:#0f0f15;--footer-text:#9a9aa8;--header-bg:#1e1e28;--header-menu-link:#b0b0c0;--header-menu-link-hover:rgba(176,176,192,0.3);--header-mobile-bg:#0f0f15;--header-mobile-link:rgba(235,235,247,0.8);--header-mobile-link-hover:rgba(133,187,89,0.4);--menu-section-label:#e8e8f0;--menu-link:#9a9aaa;--menu-link-hover:#e8e8f0}}.btn{-webkit-transition:all .15s ease;transition:all .15s ease;text-decoration:none;border:none;outline:none;font-size:13px;font-weight:700;text-transform:uppercase;padding:16px 20px;border-radius:2px;letter-spacing:.04em;-webkit-box-shadow:var(--button-shadow);box-shadow:var(--button-shadow);cursor:pointer;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}.btn app-icon{margin-right:8px;opacity:.8}.btn:hover{text-decoration:none;-webkit-transform:translateY(1px);transform:translateY(1px);-webkit-box-shadow:var(--button-shadow-hover);box-shadow:var(--button-shadow-hover)}.btn--primary{background:var(--color-dodger-blue);color:var(--color-white)}.btn--secondary{background:var(--btn-secondary-bg);color:var(--color-dodger-blue)}.btn--tertiary{background:var(--btn-tertiary-bg);color:var(--color-dodger-blue)}.btn--tertiary,.btn--tertiary:hover{-webkit-box-shadow:none;box-shadow:none}.btn--tertiary:hover{background-color:var(--btn-tertiary-hover-bg);-webkit-transform:none;transform:none}.btn--small{letter-spacing:-.02em;text-transform:none;font-size:15px;padding:5px 12px 7px;font-weight:500;border-radius:8px;min-height:38px}.bs-chart,.bs-chart__card,.bs-chart__cards{display:-ms-flexbox;display:flex}.bs-chart{margin:40px 0;-ms-flex-pack:justify;justify-content:space-between}.bs-chart__card+.bs-chart__card,.bs-chart__group+.bs-chart__group{margin-left:8px}.bs-chart__group:first-child .bs-chart__card{background:#39b54a}.bs-chart__group:last-child .bs-chart__card{background:#96d01a}.bs-chart__card{width:117px;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;border-radius:8px;color:#fff;padding:12px;font-size:13px;font-weight:600}.bs-chart__card app-icon{background:hsla(0,0%,100%,.15);padding:8px;border-radius:100px;margin:6px 0 8px}.bs-chart__card app-icon svg{fill:#fff}.bs-chart__group-label{display:block;text-align:center;font-size:11px;color:#646464;margin-top:6px}@media screen and (max-width:872px){.bs-chart__card{width:100%}.bs-chart,.bs-chart__cards,.bs-chart__group{-ms-flex-direction:column;flex-direction:column}.bs-chart__group+.bs-chart__group{margin-left:0;margin-top:20px}.bs-chart__card+.bs-chart__card{margin-left:0;margin-top:8px}}.headline{margin-top:0;margin-bottom:80px}@media screen and (max-width:768px){.headline{text-align:center;margin-bottom:60px}}.text-link{-webkit-transition:border .3s;transition:border .3s;font-size:13px;line-height:20px;text-transform:uppercase;letter-spacing:.05em;text-decoration:none;font-weight:700;border-bottom:2px solid transparent;padding-bottom:3px}.text-link--primary{color:var(--color-dodger-blue)}.text-link--primary:hover{border-bottom-color:var(--color-dodger-blue-hover)}.text-link--secondary{color:var(--color-manatee)}.text-link--secondary:hover{border-bottom-color:rgba(136,136,162,.2)}stencil-route-link:hover{cursor:pointer}.list--unstyled{list-style-type:none;margin:0;padding:0}.list--icon li{position:relative;padding-left:28px}.list--icon app-icon{position:absolute;top:0;left:0}.list--columns{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:42px}.list--columns li{-ms-flex:0 0 25%;flex:0 0 25%;line-height:1.4;margin-bottom:10px;padding-right:18px}@media screen and (max-width:1024px){.list--columns li{-ms-flex:0 0 33.33%;flex:0 0 33.33%}}@media screen and (max-width:768px){.list--columns li{-ms-flex:0 0 50%;flex:0 0 50%}}@media screen and (max-width:480px){.list--columns li{-ms-flex:0 0 100%;flex:0 0 100%}}.list--numbered-badge{margin:30px 0;padding:0;list-style-type:none}.list--numbered-badge li{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;counter-increment:step-counter;margin-bottom:10px}.list--numbered-badge li+li{margin-top:36px}.list--numbered-badge li:before{-ms-flex:0 0 32px;flex:0 0 32px;content:counter(step-counter);margin-right:5px;width:32px;height:32px;border-radius:32px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-right:16px;background:var(--color-dodger-blue);color:var(--color-white);font-size:15px;font-weight:700;-webkit-box-shadow:var(--card-shadow);box-shadow:var(--card-shadow)}.measure-xl{max-width:720px}.measure-lg{max-width:660px}.measure-md{max-width:460px}.screenshot{max-width:100%;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.1);box-shadow:0 2px 4px rgba(0,0,0,.1);border-radius:4px}code{font-weight:400;font-family:SFMono-Regular,Lucida Console,Monaco,monospace;font-size:14px}ol code,p code,table code,ul code{font-size:14px;padding:2px 6px 3px;background-color:var(--color-whisper);color:var(--color-woodsmoke);border-radius:3px}h1 code,h2 code,h3 code{font-size:.8em;font-weight:700}blockquote code{font-size:13px;background-color:var(--color-wheatfield)}code[class*=language-],pre[class*=language-]{-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:normal;word-wrap:normal;font-size:14px;line-height:20px;color:#e4e4e4;text-shadow:none}:not(pre)>code[class*=language-],pre[class*=language-]{background:#212431}pre[class*=language-]{border-radius:4px;border:1px solid #e1e1e8;overflow:auto}pre[class*=language-] code{white-space:pre;margin:22px 24px!important;display:block}:not(pre)>code[class*=language-]{padding:.15em .2em .05em;border-radius:.3em;border:.13em solid #7a6652;-webkit-box-shadow:1px 1px .3em -.1em #000 inset;box-shadow:inset 1px 1px .3em -.1em #000}pre[class*=language-]{position:relative}pre .line-highlight{position:absolute;left:0;right:0;padding:0 0 0 22px;background:rgba(86,90,101,.4)}.token.comment{color:#5c6370;font-style:italic}.token.function{color:#61aeee}.token.builtin,.token.class-name{color:#e6c07b}.token.namespace{opacity:.7}.token.cdata,.token.doctype,.token.prolog{color:#6f705e}.token.boolean,.token.number{color:#a77afe}.token.string{color:#98c379}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#e6d06c}.token.inserted,.token.selector{color:#a6e22d}.token.atrule,.token.deleted,.token.important,.token.keyword{color:#c678dd}.token.regex,.token.statement{color:#76d9e6}.token.placeholder,.token.variable{color:#fff}.token.bold,.token.important,.token.statement{font-weight:700}.token.operator,.token.punctuation{color:#bebec5}.token.entity{cursor:help}.token.italic{font-style:italic}code.language-markup{color:#f9f9f9}.token.tag,code.language-markup .token.tag{color:#da5686}.token.attr-name,code.language-markup .token.attr-name{color:#98c379}.token.attr-value,code.language-markup .token.attr-value{color:#e6d06c}code.language-markup .token.script,code.language-markup .token.script .token.keyword,code.language-markup .token.style{color:#76d9e6}table{width:100%;overflow:auto;margin-top:28px;margin-bottom:18px;border-spacing:0;border-collapse:collapse;overflow-x:auto}tr{background-color:#fff;border-top:1px solid #c6cbd1}th{font-size:13px;font-weight:700}td,th{padding:10px 10px}td,th{border:1px solid #dfe2e5}td{vertical-align:top;font-size:14px;line-height:1.5}table code{font-size:13px}tr:nth-child(2n){background-color:#f6f8fa}@media screen and (max-width:590px){table{display:block}}.modal,.modal__background,.modal__content{top:0;left:0;width:100vw;height:100vh}.modal__background,.modal__content{position:absolute;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.modal{display:none;position:fixed;z-index:999}.modal__background{background:rgba(0,0,0,.8)}.modal--hide .modal__background{-webkit-animation-name:fade-modal-out;animation-name:fade-modal-out}.modal--show .modal__background{-webkit-animation-name:fade-modal-in;animation-name:fade-modal-in}@-webkit-keyframes fade-modal-in{0%{opacity:0}to{opacity:1}}@keyframes fade-modal-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes fade-modal-out{0%{opacity:1}to{opacity:0}}@keyframes fade-modal-out{0%{opacity:1}to{opacity:0}}.modal__content{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.modal--show .modal__content{-webkit-animation-name:slide-modal-in;animation-name:slide-modal-in;-webkit-animation-timing-function:cubic-bezier(.19,1,.22,1);animation-timing-function:cubic-bezier(.19,1,.22,1);-webkit-animation-duration:.6s;animation-duration:.6s}.modal--hide .modal__content{-webkit-animation-name:slide-modal-out;animation-name:slide-modal-out;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes slide-modal-in{0%{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:1;-webkit-transform:translateY(-30px);transform:translateY(-30px)}}@keyframes slide-modal-in{0%{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:1;-webkit-transform:translateY(-30px);transform:translateY(-30px)}}@-webkit-keyframes slide-modal-out{0%{opacity:1;-webkit-transform:translateY(-30px);transform:translateY(-30px)}to{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slide-modal-out{0%{opacity:1;-webkit-transform:translateY(-30px);transform:translateY(-30px)}to{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}}.feature-list{display:-ms-flexbox;display:flex}.feature-list__item{padding-right:32px;-ms-flex:1;flex:1}.feature-list__item app-icon{padding:1px}.feature-list__item svg{fill:#000!important;width:32px;height:32px;margin:0 0 8px}.feature-list__item h3{margin-bottom:8px;color:var(--color-woodsmoke)}.feature-list__item p{max-width:270px;font-size:15px}@media screen and (max-width:540px){.feature-list{-ms-flex-direction:column;flex-direction:column}.feature-list__item{position:relative;padding-left:38px;margin-top:24px}.feature-list__item app-icon{position:absolute;top:0;left:0}.feature-list__item svg{margin:0;width:24px;height:24px}.feature-list__item p{max-width:100%}}.card-links{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-left:-4px;width:100%}.card-links li{margin:6px}.card-links__item a{-webkit-transition:-webkit-transform .2s,-webkit-box-shadow .2s;transition:-webkit-transform .2s,-webkit-box-shadow .2s;transition:transform .2s,box-shadow .2s;transition:transform .2s,box-shadow .2s,-webkit-transform .2s,-webkit-box-shadow .2s;display:block;background:var(--card-bg);color:var(--text-primary);font-size:13px;font-weight:400;padding:4px;border-radius:8px;-webkit-box-shadow:var(--card-shadow);box-shadow:var(--card-shadow);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;border-bottom:none;width:96px}@media screen and (max-width:940px){.card-links li{-ms-flex:0 0 50%;flex:0 0 50%;margin:0;padding:6px}.card-links__item a{width:100%}}.card-links__item a:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:var(--card-shadow-hover);box-shadow:var(--card-shadow-hover)}.card-links__item .fw-icon{margin:8px 0 6px}body,html{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;width:100%;height:100%;padding:0;margin:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}h1,h1 a{font-size:28px}h1,h1 a,h2,h2 a{font-weight:700;color:var(--color-woodsmoke)}h2,h2 a{font-size:20px}h3,h3 a{font-size:17px;font-weight:700;color:var(--color-woodsmoke)}h4,h4 a{font-size:14px;margin-top:32px;margin-bottom:8px;text-transform:uppercase;letter-spacing:.04em}h4,h4 a,ol,p,ul{color:var(--color-gunpowder)}ol,p,ul{font-size:15px;line-height:1.8;margin:14px 0}ol,ul{padding:0 0 0 16px}ol a,p a,td a,ul a{-webkit-transition:border .3s;transition:border .3s;color:var(--color-dodger-blue);text-decoration:none;border-bottom:1px solid transparent;font-weight:500}ol a:hover,p a:hover,td a:hover,ul a:hover{border-bottom-color:var(--color-dodger-blue-hover)}blockquote{background:var(--color-old-lace);margin:0;padding:1px 18px 4px;border-radius:4px}blockquote p{color:var(--color-pirate-gold);line-height:1.6;font-size:14px}.fw-icon{display:block;width:35px;height:35px;background-image:url(/assets/img/frameworks-sprite.png);background-repeat:no-repeat;background-size:35px 140px}.fw-icon--react{background-position:0 0}.fw-icon--angular{background-position:0 -35px}.fw-icon--vue{background-position:0 -70px}.fw-icon--ember{background-position:0 -105px}.fw-icon-tilt{background-image:url(/assets/img/devices/tilt-logo.png);background-size:35px 35px}.fw-icon-brewtools{background-image:url(/assets/img/devices/brewtools.png);background-size:35px 35px}.fw-icon-rapt{background-image:url(/assets/img/devices/rapt.svg);background-size:35px 35px}.fw-icon-plaato{background-image:url(/assets/img/devices/plaato_icon.svg);background-size:35px 35px}.fw-icon-smartpid{background-image:url(/assets/img/devices/smartpid.png);background-size:35px 35px}.fw-icon-mybrewbot{background-image:url(/assets/img/devices/mybrewbot.png);background-size:35px 35px}.fw-icon-brewbrain{background-image:url(/assets/img/devices/float.svg);background-size:35px 35px;border-radius:50%}.fw-icon-ispindel{background-image:url(/assets/img/devices/iSpindel.svg);background-size:35px 35px;opacity:.8}.fw-icon-floaty{background-image:url(/assets/img/devices/floaty.jpg);background-size:35px 35px;border-radius:50%}.fw-icon-gf{background-image:url(/assets/img/devices/controlboxm.svg);background-size:55px 55px;background-position-x:-10px;background-position-y:-5px;opacity:.8}.fw-icon-customdevice{background-image:url(/assets/img/devices/customdevice.svg);background-size:35px 35px;opacity:.7}.push{margin-top:70px}.push-sm{margin-top:36px}.block{display:block}.pull-left{float:left}.pull-right{float:right}.no-scroll{overflow:hidden}.sticky{position:-webkit-sticky;position:sticky;top:24px}*{-webkit-box-sizing:border-box;box-sizing:border-box}::-moz-selection,::selection{background:var(--color-whisper)}body{background-color:var(--bg-primary);color:var(--text-primary);-webkit-transition:background-color .3s ease,color .3s ease;transition:background-color .3s ease,color .3s ease}