@charset "UTF-8";@font-face{font-family:"Stag Sans";src:url("https://www.oreilly.com/library/view/static/fonts/StagSans-Light-Web.woff?68c90dcbdd0f") format("opentype");font-weight:100;font-style:normal}@font-face{font-family:"Stag Sans";src:url("https://www.oreilly.com/library/view/static/fonts/StagSans-Book-Web.woff?68c90dcbdd0f") format("opentype");font-weight:normal;font-style:normal}@font-face{font-family:"Stag Sans";src:url("https://www.oreilly.com/library/view/static/fonts/StagSans-Bold-Web.woff?68c90dcbdd0f") format("opentype");font-weight:bold;font-style:normal}@font-face{font-family:"Stag Web";src:url("https://www.oreilly.com/library/view/static/fonts/Stag-Light-Web.woff?68c90dcbdd0f") format("opentype");font-weight:100;font-style:normal}@font-face{font-family:"Stag Web";src:url("https://www.oreilly.com/library/view/static/fonts/Stag-Book-Web.woff?68c90dcbdd0f") format("opentype");font-weight:normal;font-style:normal}@font-face{font-family:"Stag Web";src:url("https://www.oreilly.com/library/view/static/fonts/Stag-Bold-Web.woff?68c90dcbdd0f") format("opentype");font-weight:bold;font-style:normal}@font-face{font-family:"SSFlow";src:url("https://www.oreilly.com/library/view/static/fonts/ss-flow.woff?68c90dcbdd0f") format("opentype");font-weight:normal;font-style:normal}*{margin:0;padding:0;border:none;text-rendering:optimizeLegibility;-webkit-font-feature-settings:"kern" "liga";-moz-font-feature-settings:"kern" "liga";font-feature-settings:"kern" "liga";font-kerning:normal;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{font-family:"Source Sans Pro",sans-serif;background:#f4f3f0}html{font-size:62.5%;color:#4a3c31}.accessibility{display:none}main,header,hgroup,nav,section,article,aside,figure,figcaption,details,summary,footer,legend{display:block}br:last-child{clear:both}body{-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:#070c0f}.button{background:#f5c517;color:#404040 !important;display:inline-block;padding:10px 15px;font-weight:600;font-size:1.6rem;line-height:1.2em;text-transform:uppercase;letter-spacing:1px;cursor:pointer;text-decoration:none !important}.button.disabled,.button:disabled,.button:disabled:focus,.button:disabled:hover{cursor:default}.button:hover{text-decoration:none;color:#404040;background-color:#e8ba16;border-color:#e8ba16;text-decoration:none}@media (max-width: 46.25em){.button{font-size:1.3rem}}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}*{box-sizing:border-box}body{line-height:1.5em;color:#222}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}a,a:active{color:#222;text-decoration:underline}a:hover{text-decoration:underline}*{box-sizing:border-box}body{background:#fff}main{position:relative;z-index:1}.screen-reader-text{clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;overflow:hidden;position:absolute !important}.nowrap{white-space:nowrap}a:link,a:visited{text-decoration:underline}a:hover{text-decoration:underline}.skipToMain{position:relative;z-index:501;width:100%}.skipToMain a{position:absolute;z-index:0;display:block;padding:8px 12px 0;height:41px;margin:-41px 0 0 10px;cursor:pointer;background:#e5e6e7;border-radius:2px;-webkit-transition:margin .2s ease-in-out;transition:margin .2s ease-in-out;color:#222}.skipToMain a:focus{margin-top:10px;-webkit-transition:margin .2s ease-in;transition:margin .2s ease-in}header.global .global-nav{position:fixed;top:0;z-index:500;width:100%;max-width:100%;background-color:rgba(255,255,255,0.95);backdrop-filter:saturate(200%) blur(16px)}header.global .global-nav .content{width:100%;max-width:1224px;margin:0 auto;padding:20px;background-color:transparent}@media (min-width: 72em){header.global .global-nav .content{padding:24px 20px 24px}}header.global .global-nav .content nav:after{content:"";display:table;clear:both}header.global .global-nav .content .logo{display:block;width:132px;float:left}@media (min-width: 32em){header.global .global-nav .content .logo{width:198px}}header.global .global-nav .content .logo img{display:block;max-width:100%}header.global .global-nav:after{content:"";display:block;height:8px;background:#0045ff;background:linear-gradient(90deg, #0045ff 0%,#16dfda 100%)}header.global .mobileNavButton{position:absolute;z-index:0;right:0;top:0;padding:10px 10px 10px;display:block;cursor:pointer;transition-property:opacity, filter;transition-duration:0.15s;transition-timing-function:linear;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}@media (min-width: 32em){header.global .mobileNavButton{padding:16px 10px}}@media (min-width: 72em){header.global .mobileNavButton{display:none}}header.global .mobileNavButton:hover{opacity:0.7}header.global .mobileNavButton:focus .mobileNavButton-box{outline:auto;outline:-webkit-focus-ring-color auto 5px}header.global .mobileNavButton .mobileNavButton-box{width:48px;height:42px;display:block;position:relative;margin-top:1px}header.global .mobileNavButton .mobileNavButton-inner{display:block;top:50%;left:10px;margin-top:-2px}header.global .mobileNavButton .mobileNavButton-inner,header.global .mobileNavButton .mobileNavButton-inner::before,header.global .mobileNavButton .mobileNavButton-inner::after{width:28px;height:4px;background-color:#222;position:absolute;z-index:0;transition-property:transform;transition-duration:0.15s;transition-timing-function:ease}header.global .mobileNavButton .mobileNavButton-inner::before,header.global .mobileNavButton .mobileNavButton-inner::after{content:"";display:block}header.global .mobileNavButton .mobileNavButton-inner::before{top:-9px}header.global .mobileNavButton .mobileNavButton-inner::after{bottom:-9px}header.global .mobileNavButton .mobileNavButton--3dx .mobileNavButton-box{perspective:80px}header.global .mobileNavButton .mobileNavButton--3dx .mobileNavButton-inner{transition:transform 0.15s cubic-bezier(0.645, 0.045, 0.355, 1),background-color 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1)}header.global .mobileNavButton .mobileNavButton--3dx .mobileNavButton-inner::before,header.global .mobileNavButton .mobileNavButton--3dx .mobileNavButton-inner::after{transition:transform 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1)}header.global .mobileNavButton .mobileNavButton--3dx.isActive .mobileNavButton-inner{background-color:transparent;transform:rotateY(180deg)}header.global .mobileNavButton .mobileNavButton--3dx.isActive .mobileNavButton-inner::before{transform:translate3d(0, 9px, 0) rotate(45deg)}header.global .mobileNavButton .mobileNavButton--3dx.isActive .mobileNavButton-inner::after{transform:translate3d(0, -9px, 0) rotate(-45deg)}header.global .menuList{position:absolute;right:0;top:64px;z-index:100;width:100%}header.global .menuList-itemsP1{padding:10px 0;background:rgba(247,247,247,0.98);border-bottom:1px solid #fff}header.global .menuList.menuList-ctaHidden .menuList-itemsP1{display:none !important}header.global .menuList-itemsP2{padding:10px 0;background:rgba(247,247,247,0.98)}header.global .menuList-item>a,header.global .menuList-subItem>a{display:block;padding:10px 20px 10px;color:#222;font-size:14px;font-size:0.875rem;line-height:1.4em;text-decoration:none}header.global .menuList-item>a:hover,header.global .menuList-subItem>a:active{text-decoration:underline}header.global .menuList-subItem>a{border-left:2px solid #d1d1d1;margin-left:20px}header.global .menuList-item>a[aria-current="page"],header.global .menuList-subItem>a[aria-current="page"]{color:#d30000}header.global .menuList.mobileHidden .menuList-itemsP1,header.global .menuList.mobileHidden .menuList-itemsP2{display:none}header.global .menuList-extra{display:none}@media (min-width: 32em){header.global .menuList{position:static;right:auto;top:auto;z-index:auto;float:left;width:75%;width:calc(100% - 246px);margin-left:0}header.global .menuList .menuList-itemsP1{padding:0;background:none;border-bottom:none}header.global .menuList.mobileHidden .menuList-itemsP1{display:block}header.global .menuList-itemsP1{float:right}header.global .menuList-itemsP2{position:absolute;z-index:100;right:0;top:76px;width:300px;padding:10px 0;background:rgba(247,247,247,0.98)}header.global .menuList-signIn{float:left;margin-right:16px}header.global .menuList-signIn>a{display:block;padding:11px 0 0;height:30px;font-size:15px;font-size:0.9375rem;font-weight:600;line-height:1em;color:#0045ff;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}header.global .menuList-signIn>a[aria-current="page"]{color:#0045ff}header.global .menuList .menuList-signIn a:hover,header.global .menuList .menuList-signIn a:active{text-decoration:none;border-bottom:2px solid #0045ff}header.global .menuList-signIn a[aria-current="page"]:hover,header.global .menuList-signIn a[aria-current="page"]:active{border-bottom:2px solid #0045ff}header.global .menuList-tryNow{float:left;margin-top:2px;margin-right:0}header.global .menuList-item .menuList-cta{border-radius:2px;padding:8px 16px;color:#fff;background-color:#0045ff;font-size:12px;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}header.global .menuList .menuList-cta:hover,header.global .menuList .menuList-cta:active{text-decoration:none;border-bottom:none;box-shadow:0 1px 4px rgba(0,0,0,0.3)}header.global .menuList-cta:after{content:"";display:inline-block;margin:-2px -2px 0 6px;width:13px;height:16px;vertical-align:middle;background:transparent url("https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg") center center no-repeat;background-size:contain}}@media (min-width: 72em){header.global .menuList{position:relative;width:calc(100% - 248px);margin-left:50px}header.global .menuList.mobileHidden .menuList-item,header.global .menuList.mobileHidden .menuList-itemsP2{display:block}header.global .menuList-itemsP2{position:static;z-index:0;right:auto;top:auto;width:auto;padding:0;background:none}header.global .menuList-itemsP2 .menuList-item{position:relative;display:block;float:left;margin-right:24px}header.global .menuList-itemsP2 .menuList-item.menuList-forMarketers{position:absolute;top:-30px;right:0;white-space:nowrap;margin:0;padding:0}header.global .menuList-itemsP2 .menuList-item.menuList-forMarketers>a{display:block;padding:2px 0;height:auto;font-size:15px;font-size:0.9375rem;font-weight:600;line-height:1em;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}header.global .menuList-itemsP2 .menuList-item>a{display:block;padding:12px 0 0;height:36px;font-size:15px;font-size:0.9375rem;font-weight:600;line-height:1em;color:#222;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}header.global .menuList-itemsP2 .menuList-item>a[aria-current="page"]{color:#d30000;border-bottom:2px solid #d30000}header.global .menuList-itemsP2 .menuList-item>a:hover,header.global .menuList-itemsP2 .menuList-item>a:active{text-decoration:none}header.global .menuList-itemsP2 .menuList-item:hover>a{border-bottom:2px solid #222}header.global .menuList-itemsP2 .menuList-item:hover>a[aria-current="page"]{border-bottom:2px solid #d30000}header.global .menuList-itemsP2 .menuList-itemWithSub{margin-right:20px}header.global .menuList-itemsP2 .menuList-itemWithSub>a:after{content:"";display:block;margin:3px 0 0 6px;float:right;border:solid #ccc;border-width:0 2px 2px 0;display:block;padding:2px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}header.global .menuList-itemsP2 .menuList-subList{position:absolute;z-index:100;top:100%;height:1px;opacity:0;overflow:hidden;background:rgba(247,247,247,0.98);min-width:200px;padding:12px 0}header.global .menuList-itemsP2 .menuList-itemWithSub:hover .menuList-subList,header.global .menuList-itemsP2 .menuList-itemWithSub>a:focus ~ .menuList-subList,header.global .menuList-itemsP2 .menuList-itemWithSub .menuList-subList.isFocused{height:auto;opacity:1}header.global .menuList-itemsP2 .menuList-item:focus-within .menuList-subList{height:auto;opacity:1}header.global .menuList-itemsP2 .menuList-subList-conferences{min-width:340px}header.global .menuList-itemsP2 .menuList-subItem a{display:block;padding:10px 20px 10px;line-height:1em;color:#222;border-left:0;margin-left:0;text-decoration:none}header.global .menuList-itemsP2 .menuList-subItem a:hover,header.global .menuList-itemsP2 .menuList-subItem a:active{color:#222;text-decoration:underline}header.global .menuList-extra{display:list-item}}header.global .autocomplete-suggestions{background-color:#070c0f;width:13.979em;font:18px;font-weight:300;color:#fff;margin-top:3px;text-align:left}header.global .autocomplete-suggestions .autocomplete-suggestion{padding:.1875em 1.25em}header.global .autocomplete-suggestions .autocomplete-suggestion b{font-weight:normal}header.global .autocomplete-suggestions .autocomplete-suggestion:hover,header.global .autocomplete-suggestions .autocomplete-suggestion.autocomplete-selected{background-color:#4a3c31;color:#fed100;cursor:pointer}header.global .global-search{padding-top:73px}@media (min-width: 32em){header.global .global-search{padding-top:85px}}@media (min-width: 72em){header.global .global-search{padding-top:92px}}header.global .global-search .content{width:100%;max-width:1224px;margin:0 auto;padding:20px;background-color:#fff}@media (min-width: 72em){header.global .global-search .content{padding:40px 20px 40px}}header.global .global-search .content form{display:flex;justify-content:space-between;vertical-align:center;font-family:"guardian-text-oreilly",Helvetica,sans-serif}header.global .global-search .content form input[type='search']{width:calc(100% - 165px);height:3.25rem;padding:0 20px 0 52px;font-family:"guardian-text-oreilly",Helvetica,sans-serif;font-size:1rem;line-height:1.25em;line-height:normal;font-weight:normal;color:#3d3b49;border:none;-moz-transition:width 0.2s ease-in-out;-webkit-transition:width 0.2s ease-in-out;-o-transition:width 0.2s ease-in-out;transition:width 0.2s ease-in-out;-webkit-appearance:textfield;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:transparent;background-image:url("https://www.oreilly.com/library/view/static/images/icons/icon-search.svg?68c90dcbdd0f");background-size:16px 16px;background-repeat:no-repeat;background-position:20px center;border:1px solid #ccc;border-radius:2px;box-sizing:border-box}header.global .global-search .content form input[type='search']:focus{border:1px solid #222}header.global .global-search .content form input[type='search']:placeholder{color:#706e7c;opacity:1}header.global .global-search .content form input[type='search']::-webkit-search-cancel-button,header.global .global-search .content form input[type='search']::-webkit-search-decoration{-webkit-appearance:none}header.global .global-search .content form .search-submit{width:150px;height:3.25rem;border:none;border-radius:2px;overflow:hidden;background-color:#d30000;color:#fff;font-family:"guardian-text-oreilly",Helvetica,sans-serif;font-size:1rem;line-height:3.25rem;-webkit-appearance:none}header.global .global-search .content form .search-submit:hover,header.global .global-search .content form .search-submit:active{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#fff;cursor:pointer}header.global-test{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzcxNzE3MSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMyMzIzMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #717171),color-stop(100%, #323232));background-image:-moz-linear-gradient(left, #717171,#323232);background-image:-webkit-linear-gradient(left, #717171,#323232);background-image:linear-gradient(to right, #717171,#323232)}@media (max-width: 780px){header.global-test li:not(.mobile-link){display:none}}
footer{background-color:#F1F1F1;vertical-align:top;color:#6F7072;padding:40px 0}@media (min-width: 56.25em){footer{position:relative;overflow:hidden}footer:after{content:"";display:block;position:absolute;top:0;right:0;z-index:0;width:800px;max-width:100%;height:800px;background:transparent url("https://cdn.oreillystatic.com/oreilly/images/odot_white_578x212.svg") right top no-repeat;background-size:contain;background-position:60px -30px;opacity:.5}}footer .content{width:100%;max-width:1224px;padding:0 20px;margin:0 auto}@media (min-width: 56.25em){footer .content{position:relative;z-index:1}}footer .content:after{content:"";display:table;clear:both}footer h2,footer ul,footer p{font-size:14px;font-size:0.875rem;line-height:2em;font-family:"guardian-text-oreilly",Helvetica,sans-serif}footer a:link,footer a:visited{color:#6F7072;text-decoration:none}footer a:hover{text-decoration:underline}footer h2{text-transform:uppercase;font-weight:500}footer .footer-main{margin-bottom:20px}footer .footer-main:after{content:" ";display:table;clear:both}@media (min-width: 37.5em){footer .footer-mainLeft{width:47.5%;margin-right:5%;float:left}}@media (min-width: 56.25em){footer .footer-mainLeft{width:55%;margin-right:5%}footer .footer-mainLeft .footer-mainLeftOne,footer .footer-mainLeft .footer-mainLeftTwo{float:left}footer .footer-mainLeft .footer-mainLeftOne{margin-right:11%;width:50.5%}footer .footer-mainLeft .footer-mainLeftTwo{width:38.5%}}@media (min-width: 75em){footer .footer-mainLeft{width:60%}footer .footer-mainLeft .footer-mainLeftOne{margin-right:7.5%;width:28.3%}footer .footer-mainLeft .footer-mainLeftTwo{width:64.1%}}footer .footer-upcoming,footer .footer-approach,footer .footer-solutions,footer .footer-contact,footer .footer-download,footer .footer-links{margin-bottom:20px}@media (min-width: 75em){footer .footer-solutions,footer .footer-contact{float:left}footer .footer-solutions{width:44.15%;margin-right:11.7%}footer .footer-contact{width:44.15%}}footer .confName{font-weight:500}footer .footer-contact svg{width:32px;height:32px}footer .footer-upcoming li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 320px){footer .footer-upcoming li{max-width:272px}}@media (min-width: 37.5em){footer .footer-download{width:47.5%;float:left}}@media (min-width: 56.25em){footer .footer-download{width:40%}}@media (min-width: 75em){footer .footer-download{width:35%}}footer .footer-download h2,footer .footer-download p,footer .footer-download ul li{line-height:1.5;margin-bottom:8px}footer .footer-download ul{list-style:disc;padding-left:1rem}footer .footer-download ul li{padding-left:.5rem}footer .footer-downloadLinks{line-height:1.5;margin-bottom:8px}footer .footer-downloadLinks a{display:inline-block}footer .footer-downloadLinks a img{display:block;height:44px}footer .footer-donotsell a{text-decoration:underline}footer .footer-subfooter{clear:both;border-top:1px dashed #999;padding-top:40px}footer .footer-subfooter p{font-size:12px;font-size:0.75rem;line-height:1.5em;margin-bottom:4px}footer .footer-subfooter p a{font-weight:500}footer .footer-subfooterLogo{width:118px;height:21px;margin-bottom:20px}#sbo-reader{padding-top:80px;font-size:1rem;line-height:1.1875rem}#sbo-reader .sbo-reader-content{width:100%;margin:0 auto !important;border:0 solid #ddd;color:#333;font-family:"guardian-text-oreilly",Helvetica,sans-serif;font-style:normal;font-weight:300;font-size:1.25rem;line-height:1.5em}#sbo-reader .sbo-reader-content.sbo-sample-reader:before{content:"";display:block;position:absolute;z-index:0;top:0;left:0;width:100%;height:100%;max-height:260px;border-top:1px solid #f4f4f4;background:-moz-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:-webkit-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:linear-gradient(180deg, #f7f7f7 0%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f4f4f4",endColorstr="#ffffff",GradientType=1)}#sbo-reader .sbo-reader-content.sbo-sample-reader .sbo-rt-content{position:relative;z-index:1;width:100%;max-width:1224px;margin:0 auto !important;padding:0 20px 80px}#sbo-reader .sbo-reader-content.sbo-sample-reader.with-recommendations{padding-bottom:21.875rem}#sbo-reader .sbo-reader-content .figure{text-align:center;margin:1.5625rem 0 0.9375rem}#sbo-reader .sbo-reader-content .p{text-indent:0;padding:0}#sbo-reader .sbo-reader-content table{padding-left:0;padding-right:0}#sbo-reader .sbo-reader-content div.booksection{font-family:inherit;margin:0;padding:0}#sbo-reader .sbo-reader-content div.sect1.pattern,#sbo-reader .sbo-reader-content div.sect1.case_study{border:none;background-color:transparent}.video #sbo-reader .sbo-reader-content{padding-top:20px;min-height:2em}#sbo-reader .sbo-reader-content p,#sbo-reader .sbo-reader-content li,#sbo-reader .sbo-reader-content blockquote{line-height:1.5}#sbo-reader .sbo-reader-content li p,#sbo-reader .sbo-reader-content li code{font-size:inherit}#sbo-reader .sbo-reader-content p code{font-size:inherit}#sbo-reader .sbo-reader-content p,#sbo-reader .sbo-reader-content div>p,#sbo-reader .sbo-reader-content p.para_indented,#sbo-reader .sbo-reader-content div.chp .para_indented,#sbo-reader .sbo-reader-content .indent,#sbo-reader .sbo-reader-content .noindent,#sbo-reader .sbo-reader-content .p{margin:0.75em 0 1.25em !important;text-indent:0;text-align:inherit;font-family:inherit !important;line-height:1.5em !important}#sbo-reader .sbo-reader-content ul li{margin:0.5em 0 0.65em !important}#sbo-reader .sbo-reader-content blockquote p{font-weight:inherit}#sbo-reader .sbo-reader-content strong code{font-weight:bold}#sbo-reader .sbo-reader-content sup{height:0;line-height:1;bottom:1em;font-size:.7em;color:#666}#sbo-reader .sbo-reader-content span.inlinemediaobject{height:auto}#sbo-reader .sbo-reader-content h1,#sbo-reader .sbo-reader-content h2,#sbo-reader .sbo-reader-content h3,#sbo-reader .sbo-reader-content h4,#sbo-reader .sbo-reader-content h5,#sbo-reader .sbo-reader-content h6,#sbo-reader .sbo-reader-content .heading-1,#sbo-reader .sbo-reader-content .paragraph-head,#sbo-reader .sbo-reader-content .cn-chapter-number,#sbo-reader .sbo-reader-content .heading-3,#sbo-reader .sbo-reader-content .title_document,#sbo-reader .sbo-reader-content .fm_title_document,#sbo-reader .sbo-reader-content .box_title,#sbo-reader .sbo-reader-content .chaptertitle{font-family:"gilroy",Arial,sans-serif;line-height:1.1;font-style:normal;font-weight:500;color:#3d3b49;margin:1.5em 0 0.35em !important;background-color:transparent;word-wrap:break-word}#sbo-reader .sbo-reader-content h1,#sbo-reader .sbo-reader-content .chaptertitle{font-size:2rem;line-height:1.3em;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto}#sbo-reader .sbo-reader-content h2{font-size:1.75rem;line-height:1.4em}#sbo-reader .sbo-reader-content h3{font-size:1.5rem;line-height:1.5em;text-indent:0px !important}#sbo-reader .sbo-reader-content h4{font-size:1.25rem;line-height:1.5em}#sbo-reader .sbo-reader-content h5,#sbo-reader .sbo-reader-content h6{font-size:1rem}#sbo-reader .sbo-reader-content div.titlepage{margin:1em 0 0.35em}.video #sbo-reader .sbo-reader-content h1,#sbo-reader .sbo-reader-content .transcript-wrapper .video-title{margin:.8em 0 1.2em;padding-bottom:3.125rem;font-weight:bold;font-size:2rem;line-height:1.3em;text-align:center}#sbo-reader .sbo-reader-content a,#sbo-reader .sbo-reader-content a:link,#sbo-reader .sbo-reader-content a:visited{text-decoration:none;border-bottom:1px dashed #bbb;color:#070c0f;-webkit-transition:border-bottom 0.3s ease;-moz-transition:border-bottom 0.3s ease;transition:border-bottom 0.3s ease}#sbo-reader .sbo-reader-content a:focus,#sbo-reader .sbo-reader-content a:hover{border-bottom:1px dashed #333}#sbo-reader .sbo-reader-content hr{display:none}#sbo-reader .sbo-reader-content .small{font-size:.6em}#sbo-reader .sbo-reader-content .sc,#sbo-reader .sbo-reader-content abbr,#sbo-reader .sbo-reader-content acronym{font-size:.85em;text-transform:uppercase;letter-spacing:1px}#sbo-reader .sbo-reader-content .noborder{border:0}#sbo-reader .sbo-reader-content p{-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto}#sbo-reader .sbo-reader-content img{max-width:100%;height:auto}#sbo-reader .sbo-reader-content .footnote p{font-family:"guardian-text-oreilly",Helvetica,sans-serif;font-size:inherit}#sbo-reader .sbo-reader-content .note p{font-family:"guardian-text-oreilly",Helvetica,sans-serif;font-size:1.4em}#sbo-reader .sbo-reader-content div.tip,#sbo-reader .sbo-reader-content .tip,#sbo-reader .sbo-reader-content .note,#sbo-reader .sbo-reader-content div.note,#sbo-reader .sbo-reader-content .warning,#sbo-reader .sbo-reader-content .note1,#sbo-reader .sbo-reader-content .sidebar1,#sbo-reader .sbo-reader-content .boxg,#sbo-reader .sbo-reader-content div.sidebar,#sbo-reader .sbo-reader-content div.warning{border:1px dotted #ddd;padding:1em 2em 1em 2em;background-color:#eee;box-shadow:0 5px 10px #eee;margin:2em 2em 2em;font-size:smaller}#sbo-reader .sbo-reader-content div.tip p,#sbo-reader .sbo-reader-content .tip p,#sbo-reader .sbo-reader-content .note p,#sbo-reader .sbo-reader-content div.note p,#sbo-reader .sbo-reader-content .warning p,#sbo-reader .sbo-reader-content .note1 p,#sbo-reader .sbo-reader-content .sidebar1 p,#sbo-reader .sbo-reader-content .boxg p,#sbo-reader .sbo-reader-content div.sidebar p,#sbo-reader .sbo-reader-content div.warning p{font-size:90%;font-family:"guardian-text-oreilly",Helvetica,sans-serif}#sbo-reader .sbo-reader-content div.tip h3,#sbo-reader .sbo-reader-content div.tip .title,#sbo-reader .sbo-reader-content .tip h3,#sbo-reader .sbo-reader-content .tip .title,#sbo-reader .sbo-reader-content .note h3,#sbo-reader .sbo-reader-content .note .title,#sbo-reader .sbo-reader-content div.note h3,#sbo-reader .sbo-reader-content div.note .title,#sbo-reader .sbo-reader-content .warning h3,#sbo-reader .sbo-reader-content .warning .title,#sbo-reader .sbo-reader-content .note1 h3,#sbo-reader .sbo-reader-content .note1 .title,#sbo-reader .sbo-reader-content .sidebar1 h3,#sbo-reader .sbo-reader-content .sidebar1 .title,#sbo-reader .sbo-reader-content .boxg h3,#sbo-reader .sbo-reader-content .boxg .title,#sbo-reader .sbo-reader-content div.sidebar h3,#sbo-reader .sbo-reader-content div.sidebar .title,#sbo-reader .sbo-reader-content div.warning h3,#sbo-reader .sbo-reader-content div.warning .title{font-family:"gilroy",Arial,sans-serif !important;text-shadow:1px 1px 0 #fff;color:#666;font-weight:500}@media only screen and (max-width: 520px){#sbo-reader .sbo-reader-content div.tip,#sbo-reader .sbo-reader-content .tip,#sbo-reader .sbo-reader-content .note,#sbo-reader .sbo-reader-content div.note,#sbo-reader .sbo-reader-content .warning,#sbo-reader .sbo-reader-content .note1,#sbo-reader .sbo-reader-content .sidebar1,#sbo-reader .sbo-reader-content .boxg,#sbo-reader .sbo-reader-content div.sidebar,#sbo-reader .sbo-reader-content div.warning{margin:1.5em 0 1.5em}}#sbo-reader .sbo-reader-content div.tip hr,#sbo-reader .sbo-reader-content .tip hr,#sbo-reader .sbo-reader-content .note hr,#sbo-reader .sbo-reader-content div.note hr,#sbo-reader .sbo-reader-content .warning hr,#sbo-reader .sbo-reader-content .note1 hr,#sbo-reader .sbo-reader-content .sidebar1 hr,#sbo-reader .sbo-reader-content .boxg hr,#sbo-reader .sbo-reader-content div.sidebar hr,#sbo-reader .sbo-reader-content div.warning hr{display:none}#sbo-reader .sbo-reader-content div.tip img,#sbo-reader .sbo-reader-content div.tip img:hover,#sbo-reader .sbo-reader-content .tip img,#sbo-reader .sbo-reader-content .tip img:hover,#sbo-reader .sbo-reader-content .note img,#sbo-reader .sbo-reader-content .note img:hover,#sbo-reader .sbo-reader-content div.note img,#sbo-reader .sbo-reader-content div.note img:hover,#sbo-reader .sbo-reader-content .warning img,#sbo-reader .sbo-reader-content .warning img:hover,#sbo-reader .sbo-reader-content .note1 img,#sbo-reader .sbo-reader-content .note1 img:hover,#sbo-reader .sbo-reader-content .sidebar1 img,#sbo-reader .sbo-reader-content .sidebar1 img:hover,#sbo-reader .sbo-reader-content .boxg img,#sbo-reader .sbo-reader-content .boxg img:hover,#sbo-reader .sbo-reader-content div.sidebar img,#sbo-reader .sbo-reader-content div.sidebar img:hover,#sbo-reader .sbo-reader-content div.warning img,#sbo-reader .sbo-reader-content div.warning img:hover{border:none;background-color:transparent}#sbo-reader .sbo-reader-content .tip h3,#sbo-reader .sbo-reader-content .note h3,#sbo-reader .sbo-reader-content .warning h3{margin-top:0}#sbo-reader .sbo-reader-content .note1 .note{background:transparent none no-repeat scroll 0 0;border:none;margin:0 !important;padding:0}#sbo-reader .sbo-reader-content .codelink{font-size:80%}#sbo-reader .sbo-reader-content .totri-image-wrapper,#sbo-reader .sbo-reader-content .totri-image-wrapper p{text-align:center}#sbo-reader .sbo-reader-content pre,#sbo-reader .sbo-reader-content .pre,#sbo-reader .sbo-reader-content p.pre,#sbo-reader .sbo-reader-content .pre1,#sbo-reader .sbo-reader-content .pre-ex,#sbo-reader .sbo-reader-content .pre_w{font-family:"Droid Sans Mono",Courier,monospace;line-height:1.5em;margin:0 0 1.5em;padding:1em 2em;background-color:#fbfbfb;font-size:80%;color:#3d3b49;border-top:1px solid #ddd;border-bottom:1px solid #ddd;overflow:auto;overflow-y:hidden;-webkit-hyphens:none;word-wrap:initial;word-break:keep-all;white-space:pre}#sbo-reader .sbo-reader-content pre code{font-size:inherit}#sbo-reader .sbo-reader-content .pd_lightblue,#sbo-reader .sbo-reader-content .skycolor,#sbo-reader .sbo-reader-content .tabcolor,#sbo-reader .sbo-reader-content .tab_num,#sbo-reader .sbo-reader-content .pd_white{color:#3d3b49}#sbo-reader .sbo-reader-content .indenthangingB,#sbo-reader .sbo-reader-content .indenthanging{margin:0 0 0.625rem 2.1875rem}#sbo-reader .sbo-reader-content .bul_hang1,#sbo-reader .sbo-reader-content .bul_hang,#sbo-reader .sbo-reader-content .bul_hang2,#sbo-reader .sbo-reader-content .bul_hang3,#sbo-reader .sbo-reader-content .hanging-i,#sbo-reader .sbo-reader-content .indentbullet{text-indent:-10px}#sbo-reader .sbo-reader-content .bul_hang1:before,#sbo-reader .sbo-reader-content .bul_hang:before,#sbo-reader .sbo-reader-content .bul_hang2:before,#sbo-reader .sbo-reader-content .bul_hang3:before,#sbo-reader .sbo-reader-content .hanging-i:before,#sbo-reader .sbo-reader-content .indentbullet:before{content:"• ";position:relative;left:-10px}#sbo-reader .sbo-reader-content .bul_hang1 img,#sbo-reader .sbo-reader-content .bul_hang img,#sbo-reader .sbo-reader-content .bul_hang2 img,#sbo-reader .sbo-reader-content .bul_hang3 img,#sbo-reader .sbo-reader-content .hanging-i img,#sbo-reader .sbo-reader-content .indentbullet img{display:none}#sbo-reader .sbo-reader-content .box_title{font-size:165%;margin:1em 0 0.5em}#sbo-reader .sbo-reader-content .figure_legend,#sbo-reader .sbo-reader-content .figure{border:none}#sbo-reader .sbo-reader-content .centera,#sbo-reader .sbo-reader-content .centerb{margin:0;text-align:center}#sbo-reader .sbo-reader-content div .fig_num,#sbo-reader .sbo-reader-content div .fig,#sbo-reader .sbo-reader-content div .fig-caption,#sbo-reader .sbo-reader-content div .caption,#sbo-reader .sbo-reader-content div .tab-caption,#sbo-reader .sbo-reader-content div .figleg,#sbo-reader .sbo-reader-content div .FigCapt,#sbo-reader .sbo-reader-content div .ex-caption,#sbo-reader .sbo-reader-content div .fig-title,#sbo-reader .sbo-reader-content div .TabCapt,#sbo-reader .sbo-reader-content div .notetitle,#sbo-reader .sbo-reader-content div .figure p.title,#sbo-reader .sbo-reader-content .annotator-wrapper .fig_num,#sbo-reader .sbo-reader-content .annotator-wrapper .fig,#sbo-reader .sbo-reader-content .annotator-wrapper .fig-caption,#sbo-reader .sbo-reader-content .annotator-wrapper .caption,#sbo-reader .sbo-reader-content .annotator-wrapper .tab-caption,#sbo-reader .sbo-reader-content .annotator-wrapper .figleg,#sbo-reader .sbo-reader-content .annotator-wrapper .FigCapt,#sbo-reader .sbo-reader-content .annotator-wrapper .ex-caption,#sbo-reader .sbo-reader-content .annotator-wrapper .fig-title,#sbo-reader .sbo-reader-content .annotator-wrapper .TabCapt,#sbo-reader .sbo-reader-content .annotator-wrapper .notetitle,#sbo-reader .sbo-reader-content .annotator-wrapper .figure p.title{background-color:transparent;font-size:80%;max-width:75%;margin:10px auto 1.5em}#sbo-reader .sbo-reader-content table{border:1px solid #ddd;padding:10px;max-width:100%;width:100%;background-color:#fff;margin-bottom:1.5em;overflow:scroll}#sbo-reader .sbo-reader-content table pre{border:none;background-color:transparent;padding:0}#sbo-reader .sbo-reader-content table img.totri-border{padding:0;border:none}#sbo-reader .sbo-reader-content thead{font-family:"guardian-text-oreilly",Helvetica,sans-serif;border-bottom:2px solid #ddd;background-color:#e8edff}#sbo-reader .sbo-reader-content thead th{padding:10px;font-weight:bold}#sbo-reader .sbo-reader-content tbody{max-width:100%;overflow:scroll}#sbo-reader .sbo-reader-content tbody td{padding:10px}#sbo-reader .sbo-reader-content tbody tr{border-bottom:1px solid #ddd}#sbo-reader .sbo-reader-content tbody tr:last-child{border-bottom:0}#sbo-reader .sbo-reader-content tbody tr:nth-child(even){background-color:#f7f7f7}#sbo-reader .sbo-reader-content table p{margin:0;font-size:inherit}#sbo-reader .sbo-reader-content ol,#sbo-reader .sbo-reader-content ul,#sbo-reader .sbo-reader-content dl,#sbo-reader .sbo-reader-content menu,#sbo-reader .sbo-reader-content dir{margin:1.5em 0 2em 2em;padding-left:50px}#sbo-reader .sbo-reader-content ul li{list-style:disc outside}#sbo-reader .sbo-reader-content ol li{list-style:decimal outside}#sbo-reader .sbo-reader-content li p{margin-bottom:0}#sbo-reader .sbo-reader-content dt{font-size:1em;line-height:1.5em}#sbo-reader .sbo-reader-content dt code,#sbo-reader .sbo-reader-content ol code,#sbo-reader .sbo-reader-content li pre,#sbo-reader .sbo-reader-content li code{font-size:inherit}#sbo-reader .sbo-reader-content code{font-size:inherit}#sbo-reader .sbo-reader-content code code{font-size:inherit}#sbo-reader .sbo-reader-content .figure table,#sbo-reader .sbo-reader-content .informalfigure,#sbo-reader .sbo-reader-content p.image{text-align:center}#sbo-reader .sbo-reader-content table img{border:0;padding:20px 0;text-align:center;margin:0 auto}#sbo-reader .sbo-reader-content img.totri-border{padding:10px;background-color:#fff;border:2px solid #ddd;max-width:100%;height:auto}#sbo-reader .sbo-reader-content #pdf-main img{padding:0;border:0}#sbo-reader .sbo-reader-content div div,#sbo-reader .sbo-reader-content p p,#sbo-reader .sbo-reader-content li li,#sbo-reader .sbo-reader-content ul,#sbo-reader .sbo-reader-content ul ul,#sbo-reader .sbo-reader-content ol,#sbo-reader .sbo-reader-content li,#sbo-reader .sbo-reader-content ol ol,#sbo-reader .sbo-reader-content table,#sbo-reader .sbo-reader-content td,#sbo-reader .sbo-reader-content div p{line-height:1.65em;text-align:left}#sbo-reader .sbo-reader-content p,#sbo-reader .sbo-reader-content ol,#sbo-reader .sbo-reader-content ul{text-indent:0;margin-left:0;margin-right:0}#sbo-reader .sbo-reader-content .FOOTNOTES,#sbo-reader .sbo-reader-content .endnoteentry,#sbo-reader .sbo-reader-content .footnotes{font-size:small !important}#sbo-reader .sbo-reader-content .footnotes,#sbo-reader .sbo-reader-content .footnote,#sbo-reader .sbo-reader-content .fn-group{border:none}#sbo-reader .sbo-reader-content .footnotes div,#sbo-reader .sbo-reader-content .footnotes p,#sbo-reader .sbo-reader-content .footnote div,#sbo-reader .sbo-reader-content .footnote p,#sbo-reader .sbo-reader-content .fn-group div,#sbo-reader .sbo-reader-content .fn-group p{font-size:85% !important;margin-bottom:1.5em;line-height:1.5em}#sbo-reader .sbo-reader-content>div{margin:0;padding:0}#sbo-reader .sbo-reader-content #js-kaltura-player-region{position:relative;margin-top:0;height:36px;padding-bottom:56.25%}#sbo-reader .sbo-reader-content #js-kaltura-player-region .kaltura-player-container{position:absolute;top:0;left:0;width:100% !important;height:100% !important}.title-info:before{content:"";display:block;position:absolute;z-index:0;top:0;left:0;width:100%;height:100%;max-height:260px;border-top:1px solid #f4f4f4;background:-moz-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:-webkit-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:linear-gradient(180deg, #f7f7f7 0%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f4f4f4",endColorstr="#ffffff",GradientType=1)}.title-info>.content{display:flex;justify-content:space-between;flex-direction:row;position:relative;z-index:1;width:100%;max-width:1224px;margin:0 auto;padding:0 20px 60px}.title-info .t-cover{width:21.1%;margin-top:7px;margin-bottom:20px}.title-info .t-cover>img{display:block;width:100%;box-shadow:0 4px 8px 0 rgba(0,0,0,0.2)}.title-info ul.book-topics{list-style-type:none;display:inline}.title-info ul.book-topics li{display:inline}.title-info ul.book-topics li:after{content:', '}.title-info ul.book-topics li:last-child:after{content:''}.title-info .metadata{width:calc(79.9% - 50px);font-size:1rem;line-height:1.5em;color:#3d3b49}@media (max-width: 46.25em){.title-info .metadata{width:calc(79.9% - 32px)}}.title-info .metadata .t-title{margin:0 0 0.5rem;font-family:"gilroy",Arial,sans-serif;font-weight:400;font-size:2.25rem;line-height:1.25em;color:#3d3b49}.title-info .metadata .t-promo{margin-bottom:20px;font-size:1.25rem;line-height:1.5em;max-width:720px;color:#3d3b49}.title-info .metadata h2.t-promo{margin-bottom:20px;font-weight:700;color:#3d3b49}.title-info .metadata .t-authors .author-name{color:#e00}.title-info .metadata .t-isbn{margin-bottom:24px}.title-info .metadata .t-toc{margin:15px 0px}.title-info .metadata .controls>*{margin-right:15px}.title-info .metadata .controls>*:last-child{margin-right:0}.title-info .metadata .controls .button-primary{position:relative;display:inline-block;vertical-align:top;margin-right:5px;margin-bottom:10px;padding:13px 21px;border-radius:2px;background-color:#e00;font-size:18px;font-size:1.125rem;line-height:1em;color:#fff;font-weight:600;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}.title-info .metadata .controls .button-primary:after{content:"";display:inline-block;margin:-8px -2px -6px 6px;width:13px;height:22px;vertical-align:middle;background:transparent url("https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg") center center no-repeat;background-size:contain}.title-info .metadata .controls .button-primary:hover,.title-info .metadata .controls .button-primary:active{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#fff}.title-info .metadata .controls .button-secondary{display:inline-block;vertical-align:top;margin-right:5px;margin-bottom:10px;padding:12px 20px;border-radius:2px;border:1px solid #e00;background-color:#fff;font-size:18px;font-size:1.125rem;line-height:1em;color:#e00;font-weight:600;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}.title-info .metadata .controls .button-secondary:after{content:"";display:inline-block;margin:-8px -2px -6px 6px;width:13px;height:22px;vertical-align:middle;background:transparent url("https://cdn.oreillystatic.com/images/icons/icon_right_arrow_red.svg") center center no-repeat;background-size:contain}.title-info .metadata .controls .button-secondary:hover,.title-info .metadata .controls .button-secondary:active{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#e00}.title-info .metadata .controls .buy-button-group{display:inline-block;vertical-align:middle}.title-info .metadata .controls .buy-button-group p{display:inline-block;vertical-align:middle;max-width:220px;font-size:0.75rem;line-height:1.5em;color:#706e7c}@media (max-width: 28em){.title-info .metadata .controls .mobile-hide{display:none}}.title-info .metadata .controls .start-reading{padding-left:1.875rem;padding-right:1.875rem;margin-bottom:0.625rem}.title-info .metadata .controls .nav-toc{font-size:0.875rem}#sbo-reader .sbo-reader-content{margin:0 auto}#sbo-reader .sbo-reader-content.title-description{position:relative}#sbo-reader .sbo-reader-content.title-description:before{content:"";display:block;position:absolute;z-index:0;top:0;left:0;width:100%;height:100%;max-height:260px;border-top:1px solid #f4f4f4;background:-moz-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:-webkit-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:linear-gradient(180deg, #f7f7f7 0%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f4f4f4",endColorstr="#ffffff",GradientType=1)}#sbo-reader .sbo-reader-content.title-description>.content{position:relative;z-index:1;width:100%;max-width:1224px;margin:0 auto;padding:74px 20px 54px}#sbo-reader .sbo-reader-content.title-description>.content .t-description-heading{margin-top:0 !important;font-size:2rem;line-height:1.2em;font-weight:400;color:#3d3b49}#sbo-reader .sbo-reader-content.title-description>.content p{font-size:1.25rem;line-height:1.5em;margin:0 0 20px !important;color:#3d3b49}#sbo-reader .sbo-reader-content.title-description>.content ul{list-style-type:disc;margin:0 0 10px !important}#sbo-reader .sbo-reader-content.title-description>.content li{font-size:1.25rem;line-height:1.5em;margin:0 0 10px;color:#3d3b49}#sbo-reader .sbo-reader-content.title-description>.content .showMore{margin-top:40px;text-align:center}#sbo-reader .sbo-reader-content.title-description>.content .showMore.hidden{display:none}#sbo-reader .sbo-reader-content.title-description>.content .showMore button{display:inline-block;padding:10px;color:#e00;font-size:1rem;line-height:1em;cursor:pointer;border-radius:2px;background-color:#fff}#sbo-reader .sbo-reader-content.title-description>.content .showMore button:before{display:inline-block;content:"Show less"}#sbo-reader .sbo-reader-content.title-description>.content .showMore button:after{display:inline-block;content:url("https://cdn.oreillystatic.com/oreilly/images/icon_expand_less.svg");margin-left:10px}#sbo-reader .sbo-reader-content.title-description>.content .showMore button:hover{box-shadow:0 0 8px rgba(0,0,0,0.2)}#sbo-reader .sbo-reader-content.title-description>.content .showMore button.more:before{display:inline-block;content:"Show more"}#sbo-reader .sbo-reader-content.title-description>.content .showMore button.more:after{display:inline-block;content:url("https://cdn.oreillystatic.com/oreilly/images/icon_expand_more.svg");margin-left:10px}#sbo-reader .sbo-reader-content.title-description>.content .publisher-resources{margin-top:40px;padding-top:40px;border-top:1px solid #eee}#sbo-reader .title-tabs{display:block;text-align:center}#sbo-reader .title-tabs .title-tab{position:relative;display:inline-block;vertical-align:top;box-sizing:border-box;margin:0 8px -1px;padding:24px 40px 10px;background:#eee;border-left:1px solid #999;border-right:1px solid #999;border-top:1px solid #999;border-top-right-radius:8px;font-family:'guardian-text-oreilly', Helvetica, sans-serif;font-size:1rem;line-height:1.5em;font-weight:700;color:#3d3b49;cursor:pointer}#sbo-reader .title-tabs .title-tab:hover{background-color:#fff}#sbo-reader .title-tabs .title-tab:focus{outline:none}#sbo-reader .title-tabs .title-tab.title-tab-active{padding-bottom:15px;background-color:#fff;cursor:default}#sbo-reader .title-tabs .title-tab.title-tab-active:hover{background-color:#fff}#sbo-reader .title-tabs .title-tab.title-tab-active:before{content:"";display:block;position:absolute;top:-1px;left:-1px;height:9px;width:calc(100% + 2px);border-top-right-radius:8px;background:#0045ff;background:linear-gradient(90deg, #0045ff 0%,#16dfda 100%)}@media (max-width: 46.25em){#sbo-reader .title-tabs .title-tab{margin:0 4px -1px;padding:24px 12px 10px}}#sbo-reader .title-recommendations{margin:0 auto;position:relative}#sbo-reader .title-recommendations:before{content:"";display:block;position:absolute;z-index:0;top:0;left:0;width:100%;height:100%;max-height:260px;border-top:1px solid #f4f4f4;background:-moz-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:-webkit-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:linear-gradient(180deg, #f7f7f7 0%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f4f4f4",endColorstr="#ffffff",GradientType=1)}#sbo-reader .title-recommendations>.content{position:relative;z-index:1;width:100%;max-width:1224px;margin:0 auto;padding:74px 20px 70px}#sbo-reader .title-recommendations>.content .t-recommendations-heading{margin:0 0 20px 0;font-family:"gilroy",Arial,sans-serif;font-size:2rem;line-height:1.1em;font-style:normal;font-weight:400;color:#3d3b49}#sbo-reader .title-recommendations>.content p{font-size:1.25rem;line-height:1.5em;margin:0 0 20px !important;color:#3d3b49}#sbo-reader .title-recommendations>.content .recommendations{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));grid-template-rows:repeat(2, auto);grid-auto-flow:row;gap:20px}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){#sbo-reader .title-recommendations>.content .recommendations{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:space-between}}@media (min-width: 52em){#sbo-reader .title-recommendations>.content .recommendations{grid-template-columns:repeat(4, minmax(0, 1fr));grid-template-rows:repeat(1, auto)}}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item{position:relative;border:none;padding:calc(100% + 16px) 20px 16px;text-decoration:none;transition:box-shadow 0.2s ease-in-out;box-shadow:0 2px 10px rgba(0,0,0,0.2)}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){#sbo-reader .title-recommendations>.content .recommendations .recommendations-item{width:calc(50% - 10px);padding:calc(50% + 16px) 20px 16px;margin-bottom:20px}}@media all and (-ms-high-contrast: none) and (min-width: 52em), (-ms-high-contrast: active) and (min-width: 52em){#sbo-reader .title-recommendations>.content .recommendations .recommendations-item{width:calc(25% - 15px);padding:calc(25% + 16px) 20px 16px}}
#sbo-reader .title-recommendations>.content .recommendations .recommendations-item:hover{box-shadow:0 2px 10px rgba(0,0,0,0.3)}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item .recommendations-cover{position:absolute;top:0;left:0;width:100%;height:0;padding-top:100%;background-repeat:no-repeat;background-size:contain;background-position:center center;background-color:#f4f4f4}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item p.recommendations-format{margin:0 0 8px !important;font-size:0.625rem;line-height:2em;color:#ee0000;text-transform:uppercase}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item p.recommendations-format:before{content:"";display:inline-block;vertical-align:middle;width:20px;height:20px;margin:0 4px 0 0}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item p.recommendations-format.recommendations-format-video:before{background:transparent url(https://cdn.oreillystatic.com/images/icons/icon-video.svg) center -1px no-repeat}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item p.recommendations-format.recommendations-format-book:before{background:transparent url(https://cdn.oreillystatic.com/images/icons/icon-book.svg) center -2px no-repeat}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item h3.recommendations-title{margin:0 0 4px !important;font-size:1.25rem;line-height:1.2em}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item p.recommendations-authors{margin:0 0 4px !important;font-size:0.875rem;line-height:1.5em}#sbo-reader .title-recommendations>.content .recommendations .recommendations-item p.recommendations-description{margin:0 !important;font-size:0.875rem;line-height:1.5em}.title-toc{padding:54px 0;border-top:0.0625rem solid #999}.title-toc .content{text-align:center;padding:0 20px}.title-toc .content h2{max-width:100%;margin-bottom:20px;font-family:"gilroy",Arial,sans-serif;font-weight:400;font-size:32px;line-height:1.2em;color:#3d3b49}.title-toc .content ol.detail-toc,.title-toc .content ul.detail-toc{display:inline-block;max-width:100%;margin:0;text-align:left;color:#3d3b49}.title-toc .content ol.detail-toc>li,.title-toc .content ul.detail-toc>li{margin:16px 0;padding:0;font-weight:700;border-bottom:0}.title-toc .content ol.detail-toc>li li,.title-toc .content ul.detail-toc>li li{margin:16px 0;font-size:1rem;line-height:1.5em;font-weight:normal}.title-toc .content ol.detail-toc>li a,.title-toc .content ul.detail-toc>li a{padding:0;font-size:1rem;line-height:1.5em;color:#3d3b49}.title-toc .content .showMore{margin-top:40px;text-align:center}.title-toc .content .showMore.hidden{display:none}.title-toc .content .showMore button{display:inline-block;padding:10px;color:#e00;font-size:1rem;line-height:1em;cursor:pointer;border-radius:2px;background-color:#fff}.title-toc .content .showMore button:before{display:inline-block;content:"Show less"}.title-toc .content .showMore button:after{display:inline-block;content:url("https://cdn.oreillystatic.com/oreilly/images/icon_expand_less.svg");margin-left:10px}.title-toc .content .showMore button:hover{box-shadow:0 0 8px rgba(0,0,0,0.2)}.title-toc .content .showMore button.more:before{display:inline-block;content:"Show more"}.title-toc .content .showMore button.more:after{display:inline-block;content:url("https://cdn.oreillystatic.com/oreilly/images/icon_expand_more.svg");margin-left:10px}.title-product-information{padding:54px 0;border-top:0.0625rem solid #999}.title-product-information .content{text-align:center;padding:0 20px}.title-product-information .content h2{max-width:100%;margin-bottom:20px;font-family:"gilroy",Arial,sans-serif;font-weight:400;font-size:32px;line-height:1.2em;color:#3d3b49}.title-product-information .content ul.detail-product-information{display:inline-block;margin:0;max-width:100%;text-align:left;color:#3d3b49}.title-product-information .content ul.detail-product-information li{margin:16px 0;font-size:1rem;line-height:1.5em;font-weight:normal}.title-product-information .content ul.detail-product-information li .name{font-weight:700}.title-product-information .content ul.detail-product-information a{font-size:1rem;line-height:1.5em;color:#3d3b49}.detail-toc{margin-top:0.9375rem}.detail-toc ol{margin:0.125rem 0 0 0}.detail-toc .chapter-running-time{display:block;color:#777}.detail-toc li{display:block;margin:0 0 0.125rem 0;padding-left:2.1875rem;color:#F65D22;position:relative}.detail-toc li .controls{position:absolute;left:0;top:0.1875rem;z-index:1}.detail-toc li .controls button{width:2.0625rem;height:2.0625rem;display:block;font-size:1.5625rem}.detail-toc li .controls button:focus{outline:none}.detail-toc li li .controls{top:0}.detail-toc li a{display:inline-block;padding:0.375rem 0;text-decoration:none;font-size:0.9375rem;line-height:1.125rem}.detail-toc li a:hover{text-decoration:underline}.detail-toc .toc-level-1{padding:0.3125rem 0 0.3125rem 2.1875rem;border-bottom:1px solid #eeeeed}.detail-toc .toc-level-1>a{font-size:1.125rem}.detail-toc .toc-level-1:last-child{border-bottom:none}.sbo-menu-top{position:relative;z-index:1;width:100%;left:0;z-index:35;background-color:#fff;border-bottom:0.0625rem solid #ddd;font-size:1rem;line-height:1.1875rem;-webkit-font-smoothing:antialiased}.sbo-menu-top:before{content:"";display:block;position:absolute;z-index:0;top:0;left:0;width:100%;height:100%;max-height:260px;border-top:1px solid #f4f4f4;background:-moz-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:-webkit-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:linear-gradient(180deg, #f7f7f7 0%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f4f4f4",endColorstr="#ffffff",GradientType=1)}.sbo-menu-top::after{clear:both;content:"";display:table}.sbo-menu-top .sbo-prev,.sbo-menu-top .sbo-next{width:25%}.sbo-menu-top .sbo-prev>a,.sbo-menu-top .sbo-next>a{display:block;width:100%;height:100%;padding:0.5625rem 0.9375rem 0.5625rem 0.9375rem}.sbo-menu-top .sbo-prev>a:hover,.sbo-menu-top .sbo-next>a:hover{text-decoration:none}.sbo-menu-top .sbo-prev>a .pagination-label,.sbo-menu-top .sbo-next>a .pagination-label{text-transform:uppercase;letter-spacing:0.0625rem;color:#777;font-size:0.75rem;-webkit-transition:color 0.2s ease-out;-moz-transition:color 0.2s ease-out;transition:color 0.2s ease-out}.sbo-menu-top .sbo-prev>a .pagination-label:before,.sbo-menu-top .sbo-prev>a .pagination-label:after,.sbo-menu-top .sbo-next>a .pagination-label:before,.sbo-menu-top .sbo-next>a .pagination-label:after{top:0.875rem;position:relative;font-size:0.875rem}.sbo-menu-top .sbo-prev>a .pagination-title,.sbo-menu-top .sbo-next>a .pagination-title{display:inline-block;max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.sbo-menu-top .sbo-prev>a:hover .pagination-label,.sbo-menu-top .sbo-next>a:hover .pagination-label{color:#F65D22}.sbo-menu-top .sbo-prev>a.empty,.sbo-menu-top .sbo-next>a.empty{height:3.6875rem}.sbo-menu-top .sbo-prev{float:left;border-right:0.0625rem solid #ddd}.sbo-menu-top .sbo-prev .pagination-label:before{content:'\23EE';margin-right:7px;float:left;font-family:"SSFlow",sans-serif}.sbo-menu-top .sbo-prev .pagination-title{margin-left:1.3125rem}.sbo-menu-top .sbo-next{float:right;border-left:0.0625rem solid #ddd;text-align:right}.sbo-menu-top .sbo-next .pagination-label:after{content:'\23ED';float:right;margin-left:7px;font-family:"SSFlow",sans-serif}.sbo-menu-top .sbo-next .pagination-title{margin-right:1.3125rem;text-align:right}.sbo-menu-top .sbo-toc-container{position:relative;z-index:1;width:100%;max-width:1224px;margin:0 auto;padding:50px 20px;text-align:center}.sbo-menu-top .sbo-toc-container .ss-list>h1{margin:0;display:inline-block;max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;color:#3d3b49;font-weight:700;font-size:1.125rem;line-height:1.25em}.sbo-menu-top .sbo-toc-container .controls{margin-top:20px}.sbo-menu-top .sbo-toc-container .controls .buy-button-group{display:inline-block;vertical-align:middle}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-primary{position:relative;display:inline-block;vertical-align:top;margin-right:5px;margin-bottom:0;padding:13px 21px;border-radius:2px;background-color:#e00;font-size:18px;font-size:1.125rem;line-height:1em;color:#fff;font-weight:600;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-primary:after{content:"";display:inline-block;margin:-8px -2px -6px 6px;width:13px;height:22px;vertical-align:middle;background:transparent url("https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg") center center no-repeat;background-size:contain}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-primary:hover,.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-primary:active{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#fff}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-primary:last-child{margin-right:0}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-secondary{display:inline-block;vertical-align:top;margin-right:5px;margin-bottom:0;padding:12px 20px;border-radius:2px;border:1px solid #e00;background-color:#fff;font-size:18px;font-size:1.125rem;line-height:1em;color:#e00;font-weight:600;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-secondary:after{content:"";display:inline-block;margin:-8px -2px -6px 6px;width:13px;height:22px;vertical-align:middle;background:transparent url("https://cdn.oreillystatic.com/images/icons/icon_right_arrow_red.svg") center center no-repeat;background-size:contain}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-secondary:hover,.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-secondary:active{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#e00}.sbo-menu-top .sbo-toc-container .controls .buy-button-group .button-secondary:last-child{margin-right:0}.sbo-menu-top .sbo-toc-container .sbo-toc-thumb:hover{text-decoration:none}.sbo-menu-top .sbo-toc-container .sbo-toc-thumb:hover .ss-list:before{color:#e98300}.sbo-menu-top.sbo-menu-free .sbo-toc-container{width:50%;padding-bottom:0;padding-top:1.125rem}@media (max-width: 46.25em){.sbo-menu-top{border-bottom:none}.sbo-menu-top .sbo-prev,.sbo-menu-top .sbo-next{float:none;top:3.5rem;width:50%;position:absolute;background-color:#fff;border-bottom:0.0625rem solid #ddd;border-top:0.0625rem solid #ddd}.sbo-menu-top .sbo-prev>a .pagination-title,.sbo-menu-top .sbo-next>a .pagination-title{max-width:100%}.sbo-menu-top .sbo-prev{left:0;border-right:none}.sbo-menu-top .sbo-next{right:0}.sbo-menu-top .sbo-toc-container{width:100%;padding-bottom:1rem}.sbo-menu-top.sbo-menu-free .sbo-toc-container{padding-bottom:1.25rem;width:100%}}
.toc-contents{position:fixed;top:6.625rem;left:50%;width:100%;height:calc(100% - 60px);margin-left:-22.65625rem;max-width:45.3125rem;max-height:0;opacity:0;overflow:hidden;border:0.625rem solid #ddd;background-color:#fff;z-index:50;-webkit-font-smoothing:antialiased;-webkit-transition:all,0.4s,ease-in-out;-moz-transition:all,0.4s,ease-in-out;transition:all,0.4s,ease-in-out}@media (max-width: 46.25em){.toc-contents{left:0;margin-left:0}}.toc-contents.opened{opacity:1.0;max-height:calc(100% - 103px)}.toc-contents .close{width:auto;position:absolute;top:0;right:0;padding:0.75rem;cursor:pointer;background:transparent}.toc-contents .close span{display:none}.toc-contents .close:before{font-family:"SS Flow";font-size:0.875rem;content:'\2421';color:#777}.toc-contents .sbo-book-meta{padding:0.625rem;height:5.5625rem;border:0.0625rem solid #ddd;background-color:#f7f7f7;line-height:1.25rem}.toc-contents .sbo-book-meta::after{clear:both;content:"";display:table}.toc-contents .sbo-book-meta>span{display:block;color:#786d65}.toc-contents .sbo-book-meta .cover{float:left;margin-right:0.625rem}.toc-contents .sbo-book-meta .cover img{max-width:3.125rem;max-height:4.0625rem;box-shadow:0 4px 8px 0 rgba(0,0,0,0.2)}.toc-contents .sbo-book-meta .title{margin-bottom:0.3125rem;padding-right:1.5625rem;font-size:1.125rem}.toc-contents .sbo-book-meta .title:hover{text-decoration:underline}.toc-contents .sbo-book-meta .publishers{font-style:italic;font-size:0.8125rem}.toc-contents .toc-section{overflow-y:auto;overflow-x:hidden;height:calc(100% - 88px)}.toc-contents .toc-section .detail-toc{margin:0 0 0 2.5rem;font-size:1rem}.toc-contents .toc-section .detail-toc li{padding-left:1.875rem}.toc-contents .toc-section .detail-toc li a{display:block;width:100%}.toc-contents .toc-section .detail-toc li a:before{margin-right:0.625rem;position:relative;content:'\2022';font-size:1.3125rem;line-height:0;color:#999}.toc-contents .toc-section .detail-toc li a:hover{text-decoration:underline}.toc-contents .toc-section .detail-toc li.toc-level-1>a{font-size:1rem}.toc-contents .toc-section .detail-toc li.toc-level-1>a:before{display:none}.toc-contents .toc-section .detail-toc li.toc-level-1>ol{margin-left:-0.9375rem}.toc-contents .toc-section .detail-toc li.currently-reading>a{background-color:#f0f0f0}.sbo-menu-bottom{margin-top:1.875rem;padding-top:0.625rem;border-top:0.0625rem solid #ddd}.sbo-menu-bottom::after{clear:both;content:"";display:table}.sbo-menu-bottom .sbo-prev,.sbo-menu-bottom .sbo-next{width:50%}.sbo-menu-bottom .sbo-prev>a,.sbo-menu-bottom .sbo-next>a{display:block;width:100%;height:100%;padding:0.5625rem 0.9375rem 0.5625rem 0.9375rem;padding-left:0;padding-right:0}.sbo-menu-bottom .sbo-prev>a:hover,.sbo-menu-bottom .sbo-next>a:hover{text-decoration:none}.sbo-menu-bottom .sbo-prev>a .pagination-label,.sbo-menu-bottom .sbo-next>a .pagination-label{text-transform:uppercase;letter-spacing:0.0625rem;color:#777;font-size:0.75rem;-webkit-transition:color 0.2s ease-out;-moz-transition:color 0.2s ease-out;transition:color 0.2s ease-out}.sbo-menu-bottom .sbo-prev>a .pagination-label:before,.sbo-menu-bottom .sbo-prev>a .pagination-label:after,.sbo-menu-bottom .sbo-next>a .pagination-label:before,.sbo-menu-bottom .sbo-next>a .pagination-label:after{top:0.875rem;position:relative;font-size:0.875rem}.sbo-menu-bottom .sbo-prev>a .pagination-title,.sbo-menu-bottom .sbo-next>a .pagination-title{display:inline-block;max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.sbo-menu-bottom .sbo-prev>a:hover .pagination-label,.sbo-menu-bottom .sbo-next>a:hover .pagination-label{color:#F65D22}.sbo-menu-bottom .sbo-prev>a.empty,.sbo-menu-bottom .sbo-next>a.empty{height:3.6875rem}.sbo-menu-bottom .sbo-prev{float:left}.sbo-menu-bottom .sbo-prev .pagination-label:before{content:'\23EE';margin-right:7px;float:left;font-family:"SSFlow",sans-serif}.sbo-menu-bottom .sbo-prev .pagination-title{margin-left:1.3125rem}.sbo-menu-bottom .sbo-next{float:right;text-align:right}.sbo-menu-bottom .sbo-next .pagination-label:after{content:'\23ED';float:right;margin-left:7px;font-family:"SSFlow",sans-serif}.sbo-menu-bottom .sbo-next .pagination-title{margin-right:1.3125rem;text-align:right}#sbo-reader .bottom-cta{position:relative;padding:80px 20px;bottom:0;text-align:center;background:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background:-webkit-gradient(linear, 50% 0%, 50% 90, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background:-moz-linear-gradient(rgba(255,255,255,0) 0%,#ffffff 90px);background:-webkit-linear-gradient(rgba(255,255,255,0) 0%,#ffffff 90px);background:linear-gradient(rgba(255,255,255,0) 0%,#ffffff 90px)}#sbo-reader .bottom-cta:before{content:"";display:block;position:absolute;z-index:0;top:0;left:0;width:100%;height:100%;max-height:260px;border-top:1px solid #f4f4f4;background:-moz-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:-webkit-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:linear-gradient(180deg, #f7f7f7 0%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f4f4f4",endColorstr="#ffffff",GradientType=1)}#sbo-reader .bottom-cta>p{position:relative;z-index:1;display:block;font-size:1.5rem;line-height:1.5em;max-width:800px;margin:0 auto 20px !important}#sbo-reader .bottom-cta .controls{position:relative;z-index:1;margin:0;padding:0;text-align:center}#sbo-reader .bottom-cta .controls>a{padding-left:1.875rem;padding-right:1.875rem;-webkit-font-smoothing:subpixel-antialiased}#sbo-reader .bottom-cta .controls>p{font-size:16px;line-height:24px;margin:12px 0 0;text-align:center;padding:0;font-style:italic}#sbo-reader .bottom-cta a.button-primary{position:relative;display:inline-block;vertical-align:middle;margin-bottom:0;padding:11px 37px 11px 20px;border-radius:2px;border-bottom:0;background-color:#e00;font-size:18px;font-size:1.125rem;line-height:1.2em;color:#fff;font-weight:600;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}#sbo-reader .bottom-cta a.button-primary:visited{border-bottom:0}#sbo-reader .bottom-cta a.button-primary:hover,#sbo-reader .bottom-cta a.button-primary:active{text-decoration:none;border-bottom:0;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#fff}#sbo-reader .bottom-cta a.button-primary:after{content:"";position:absolute;right:18px;top:calc(50% - 11px);display:block;width:13px;height:22px;box-sizing:border-box;background:transparent url("https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg") center center no-repeat;background-size:contain}#sbo-reader .bottom-cta .trial-modal-title{font-weight:bold}#sbo-reader .bottom-cta .summer-sale-trial-modal-title{font-weight:500;margin-bottom:10px}#sbo-reader .bottom-cta .old-annual-price{text-decoration:line-through}#sbo-reader .bottom-cta .summer-sale-trial-body{font-size:1.75rem;line-height:1.5em}#sbo-reader .bottom-cta .recommended{margin-top:2.1875rem;padding-bottom:0.625rem;border-top:0.0625rem solid #eee}#sbo-reader .bottom-cta .recommended>h3{margin-top:1.25rem}#sbo-reader .bottom-cta .recommended .recommended-books{margin-top:1.25rem;text-align:center}#sbo-reader .bottom-cta .recommended .recommended-books>a{border-bottom:none;margin-right:0.9375rem}#sbo-reader .bottom-cta .recommended .recommended-books>a:last-child{margin-right:0}@media only screen and (max-width: 700px){#sbo-reader .bottom-cta .recommended .recommended-books>a:nth-last-child(1){display:none}}@media only screen and (max-width: 520px){#sbo-reader .bottom-cta .recommended .recommended-books>a:nth-last-child(2){display:none}}#sbo-reader .bottom-cta .recommended .recommended-books>a>img{width:auto;height:120px;box-shadow:2px 0 6px 0 rgba(0,0,0,0.2)}@media only screen and (max-width: 410px){#sbo-reader .bottom-cta .recommended .recommended-books>a>img{height:100px}}#sbo-reader .bottom-cta-video{margin-top:0}#sbo-reader .bottom-cta-book{bottom:0}body.video #sbo-reader .bottom-cta{position:relative;padding:80px 20px;background:none}body.video #sbo-reader .bottom-cta:before{content:"";display:block;position:absolute;z-index:0;top:0;left:0;width:100%;height:100%;max-height:260px;border-top:1px solid #f4f4f4;background:-moz-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:-webkit-linear-gradient(180deg, #f7f7f7 0%, #fff 100%);background:linear-gradient(180deg, #f7f7f7 0%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f4f4f4",endColorstr="#ffffff",GradientType=1)}.show-trial-overlay{overflow:hidden}.show-trial-overlay #trial-overlay{display:block}#trial-overlay{display:none;position:fixed;z-index:1000;top:0;left:0;height:100%;width:100%;background:#f4f4f4;background:rgba(244,244,244,0.9)}#trial-overlay .trial-overlay-content{position:absolute;top:20%;left:50%;width:600px;margin-left:-300px;padding:40px;background:#fff;text-align:center;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,0.33);-moz-box-shadow:0 0 20px 0 rgba(0,0,0,0.33);box-shadow:0 0 20px 0 rgba(0,0,0,0.33)}#trial-overlay .trial-overlay-content p{padding:0;color:#3d3b49;margin:0 0 20px;font-size:1.5rem;line-height:1.5em;font-weight:300}@media (max-width: 46.25em){#trial-overlay .trial-overlay-content p{font-size:1.25rem;line-height:1.5em}}#trial-overlay .trial-overlay-content .controls{margin-top:0;text-align:center}#trial-overlay .trial-overlay-content .controls .button-primary{position:relative;display:inline-block;vertical-align:middle;margin-right:24px;margin-bottom:0;padding:11px 37px 11px 20px;border-radius:2px;background-color:#e00;font-size:18px;font-size:1.125rem;line-height:1.2em;color:#fff;font-weight:600;text-transform:uppercase;letter-spacing:.02em;text-decoration:none}#trial-overlay .trial-overlay-content .controls .button-primary:hover,#trial-overlay .trial-overlay-content .controls .button-primary:active{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#fff}#trial-overlay .trial-overlay-content .controls .button-primary:after{content:"";position:absolute;right:18px;top:calc(50% - 11px);display:block;width:13px;height:22px;box-sizing:border-box;background:transparent url("https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg") center center no-repeat;background-size:contain}#trial-overlay .trial-overlay-content .old-annual-price{text-decoration:line-through}#trial-overlay .trial-overlay-content .summer-sale-trial-body{font-size:1.75rem;line-height:1.5em}@media (max-width: 46.25em){#trial-overlay .trial-overlay-content{position:absolute;top:6%;left:0%;width:initial;margin-left:initial;margin:42px;display:inherit;padding:34px}#trial-overlay .trial-overlay-content .summer-sale-trial-body{font-size:1.25rem;line-height:1.1em}}#trial-overlay .modal-dismiss{content:"";display:block;width:20px;height:20px;position:fixed;right:10px;top:10px;background:url("https://cdn.oreillystatic.com/oreilly/images/mobile-menu-close-dark.png") 0 0 no-repeat;background-size:20px 20px;z-index:100;cursor:pointer}@media (max-width: 46.25em){#trial-overlay .modal-dismiss{position:absolute}}
.review-report{margin:5px 0 10px 0}.review-report .review-stars>img{width:19px;vertical-align:text-top}.review-report .review-total{margin-left:5px;position:relative;top:-3px}.review-report .rateit{top:0}@media screen and (min-width: 50.6875em){.review-report .rateit{margin-top:-5px}}.review-report .review-stars.rateit .rateit-range,.review-report .review-stars.rateit .rateit-selected,.review-report .review-stars.rateit .rateit-hover,.review-report .review-rating.rateit .rateit-range,.review-report .review-rating.rateit .rateit-selected,.review-report .review-rating.rateit .rateit-hover,.review-report .editor.rateit .rateit-range,.review-report .editor.rateit .rateit-selected,.review-report .editor.rateit .rateit-hover{height:18px !important;background-size:18px 18px !important}.review-report .review-stars.rateit .rateit-range,.review-report .review-rating.rateit .rateit-range,.review-report .editor.rateit .rateit-range{background:url("https://www.oreilly.com/library/view/static/images/rateit/star-off.png?68c90dcbdd0f");width:91px !important;overflow:hidden;display:inline-block}.review-report .review-stars.rateit .rateit-hover,.review-report .review-stars.rateit .rateit-selected,.review-report .review-rating.rateit .rateit-hover,.review-report .review-rating.rateit .rateit-selected,.review-report .editor.rateit .rateit-hover,.review-report .editor.rateit .rateit-selected{background:url("https://www.oreilly.com/library/view/static/images/rateit/star-on.png?68c90dcbdd0f")}.latest-edition-container{background:rgba(119,119,119,0.13);float:right;width:44%;padding:12px;position:inherit}.latest-edition-container .latest-edition-meta-data a,.latest-edition-container .latest-edition-meta-data p{margin:1px 0px}.latest-edition-container p{font-weight:bold;font-size:14px}.latest-edition-container .latest-edition-publication-date{font-weight:normal}.latest-edition-container .latest-edition-title{font-weight:bold}.latest-edition-container .latest-edition-meta-data{display:inline-block;float:left}.latest-edition-container .latest-edition-meta-data .review-report{margin:7.5px 0 5px 0}.latest-edition-container .latest-edition-image .latest-edition-cover{display:block;width:58px;height:100%;margin:1px 0px;position:static;float:right}@media screen and (max-width: 970px){.latest-edition-container{margin-top:2.8rem;width:100%}}@media screen and (max-width: 41.9375em){.latest-edition-container .latest-edition-meta-data{line-height:17px;width:69%;font-size:12px}.latest-edition-container .latest-edition-meta-data p,.latest-edition-container .latest-edition-meta-data a{font-size:inherit;margin:0.5px 0px;word-wrap:break-word}.latest-edition-container .latest-edition-image .latest-edition-cover{margin:0}}.latest-edition-container-sample{float:none;width:100%;max-width:60rem;margin:0 auto;display:table;margin-top:30px}@media screen and (max-width: 46.25em){.latest-edition-container-sample{margin-top:0}}#academic-modal .centered{text-align:center}#academic-modal .backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,0.3);z-index:999}#academic-modal .modal{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%) !important;width:643px;background-color:#fff;margin:0 auto;font-family:"guardian-text-oreilly",Helvetica,sans-serif}#academic-modal .header{height:71px;border-bottom:1px solid #e9e9e9}#academic-modal .header .brand-logo{margin:22px 0 0 22px;height:30px}#academic-modal .header .uni-logo{float:right;margin:22px 22px 0 0;height:25px}#academic-modal .content{padding:26px 56px}#academic-modal .attention{font-weight:300;font-size:2.2rem;text-align:center}#academic-modal .attention.error{padding-bottom:0}#academic-modal .attention img{margin-bottom:6px}#academic-modal .attention p{margin:0 0 0.5rem;font-family:"gilroy",Arial,sans-serif;font-weight:300;font-size:2.25rem;line-height:1.25em;color:#3d3b49}#academic-modal .attention p .nowrap{white-space:nowrap}#academic-modal .headline{font-size:1.6rem;padding-bottom:18px}#academic-modal .headline p{font-size:1.5rem;line-height:1.5em;color:#3d3b49}#academic-modal .messaging{font-size:1.6rem;margin:0 !important}#academic-modal .messaging.error{padding-bottom:16px}#academic-modal .messaging p{font-size:1rem;line-height:1.5em;color:#3d3b49;padding:6px 0}#academic-modal .messaging p.label{font-size:13px}#academic-modal .messaging .input-container.error{position:relative}#academic-modal .messaging .input-container.error input{border:1px solid #ea6d60;outline:none;padding-right:54px}#academic-modal .messaging .input-container.error:after{position:absolute;top:0;right:0;content:"";width:28px;height:28px;background:url("https://www.oreilly.com/library/view/static/images/icons/exclamation-alert.svg?68c90dcbdd0f") no-repeat;background-size:28px 28px}#academic-modal .messaging input{margin:4px 0;padding:16px 16px;width:100%;background:#fff;border:1px solid #222;border-radius:2px;box-sizing:border-box;line-height:1.2em;color:#3d3b49}#academic-modal .messaging a{font-weight:bold}#academic-modal .messaging small{font-size:1.25rem;font-weight:bold;margin:0 !important;color:#a0a0a0}#academic-modal .messaging small.error{color:#ea6d60}#academic-modal .messaging select{display:block;margin:auto;margin-bottom:1.2rem;font-family:"guardian-text-oreilly",Helvetica,sans-serif;font-size:1.25rem;line-height:1.2em}#academic-modal .messaging select.styled{width:100%;font-size:14px;line-height:20px;padding:8px 35px 8px 15px;-moz-appearance:none;-webkit-appearance:none;-o-appearance:none;appearance:none;background:#fff url("https://www.oreilly.com/library/view/static/images/academics/down_arrow_icon.svg?68c90dcbdd0f") no-repeat 97% center;color:#404040;border:1px solid #777;border-radius:0;cursor:pointer}#academic-modal .messaging select.styled::-ms-expand{display:none}#academic-modal .federatedMessage{text-align:left;padding:20px;font-size:14px;line-height:20px;margin:0 !important}#academic-modal .federatedMessage .institutionLink{font-weight:bold;text-align:left;text-decoration-line:underline;color:#3D3B49;cursor:pointer}#academic-modal .federatedMessage .privacyPolicy{font-size:100%}#academic-modal .federatedMessage button{margin-bottom:1.6rem}#academic-modal .hidden{display:none}#academic-modal .buttonBox{margin:22px 0 9px 0;text-align:center}#academic-modal .buttonBox .cta{display:inline-block;padding:8px 36px;cursor:pointer;border:none;border-radius:2px;overflow:hidden;background-color:#e00;color:#fff;font-family:"guardian-text-oreilly",Helvetica,sans-serif;font-size:1.25rem;line-height:1.5em;text-decoration:none}#academic-modal .buttonBox .cta:hover,#academic-modal .buttonBox .cta:focus{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#fff}#academic-modal .buttonBox .static{cursor:auto}#academic-modal .buttonBox .static:hover,#academic-modal .buttonBox .static:focus{border:2px solid #ff6926}#academic-modal .buttonBox .spinner{height:44px}#academic-modal .ssoModal{max-width:545px}#academic-modal .ssoModal .attention{font-size:3rem}#academic-modal .ssoModal .messaging{font-size:2rem}@media (max-width: 41.9375em){#academic-modal .ssoModal .content{padding:26px 8.5%}}@media (max-width: 32.5625em){#academic-modal .ssoModal .attention{font-size:2.2rem}#academic-modal .ssoModal .messaging{font-size:1.6rem}#academic-modal .ssoModal .content{padding:26px 5%}}#academic-modal .successModal .attention{font-size:3rem}@media (max-width: 32.5625em){#academic-modal .successModal .attention{font-size:2.2rem}}@media (max-width: 41.9375em){#academic-modal .modal{width:95%}#academic-modal .content{padding:26px}#academic-modal .messaging input{width:100%}}@media (max-width: 32.5625em){#academic-modal .header .uni-logo{display:none}#academic-modal .content{padding:16px}#academic-modal .attention span{display:block}}
.academic-backdrop{height:100vh;background-image:linear-gradient(rgba(255,255,255,0.7),rgba(255,255,255,0.7)),url("https://www.oreilly.com/library/view/static/images/academics/academics_background.jpg?68c90dcbdd0f");background-size:cover}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi){.academic-backdrop{background-image:linear-gradient(rgba(255,255,255,0.7),rgba(255,255,255,0.7)),url("https://www.oreilly.com/library/view/static/images/academics/academics_background@2x.jpg?68c90dcbdd0f")}}
#federatedLoginButton{display:inline-block;margin-top:1rem;min-height:8.4rem}#federatedLoginButtonInternal a{display:inline-block;margin:1rem auto;padding:13px 20px 13px 56px;border-radius:2px;background-color:#e00;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIxOSIgdmlld0JveD0iMCAwIDI0IDE5Ij4KICAgICAgPGcgZmlsbD0iI0ZGRiIgdHJh bnNmb3JtPSJ0cmFuc2xhdGUoMCAuNjEzKSI+CiAgICAgICAgPHBhdGggZD0iTTEyLDAgTDAsNi4xNTM4NDYxNSBMMTIsMTIuMzA3NjkyMyBMMTguOTQ3MDQsOC44ODQ3ODM0NyBDMTguOTQ3MDQsOC44ODQ3ODM0NyAxOC45NDcwNCwxMS45ODczMTM1IDE4Ljk0 NzA0LDEzLjUzODIyNzcgQzE4Ljk0NzA0LDE2IDIxLjQ3MzUyLDE2IDIxLjQ3MzUyLDE2IEwyMS40NzM1MiwxNC43NjkyMzA4IEMyMS40NzM1MiwxNC43NjkyMzA4IDIwLjIxMDQsMTQuNjk4ODQxIDIwLjIxMDQsMTMuNTM3OTkzOCBDMjAuMjEwNCwxMS42OTE3 MjMxIDIwLjIxMDQsOC4xOTE4NzY1MyAyMC4yMTA0LDguMTkxODc2NTMgTDI0LDYuMTUzODQ2MTUgTDEyLDAgWiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiwxMiBMNiwxNC40IEM2LDE0Ljk5NjIzNzkgNi40MzMzNTk4OCwxNS43OTQ5NDU4IDcuMzMzMDA1ODgs MTYuMjAwMTE0IEwxMS45OTg5MDY0LDE4IEwxNS45OTc5MjQsMTYuMTk5ODg2IEMxNi44OTc4MjMzLDE1Ljc5NDk0NTggMTguMDYwMzcyNiwxNC45OTMyNzM4IDE3Ljk5NzU1OTUsMTQuMzk5NzcyIEwxNy45OTc1NTk1LDEyIEwxMS45OTg5MDY0LDE0LjYyNDgx NDcgTDYsMTIgWiIgLz4KICAgICAgPC9nPgogICAgPC9zdmc+");background-repeat:no-repeat;background-position:20px 50%;background-size:26px;font-size:1.25rem;line-height:1.2em}#federatedLoginButtonInternal a:link,#federatedLoginButtonInternal a:visited,#federatedLoginButtonInternal a:hover{color:#fff;text-decoration:none}#federatedLoginButtonInternal a:hover{box-shadow:0 1px 4px rgba(0,0,0,0.3)}.exitIntentOverlay,.exitIntentOverlay2{position:fixed;top:0;left:0;bottom:0;right:0;z-index:501;background:rgba(33,33,33,0.8);transform:scale(0);opacity:0;transition:opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1),transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);overflow-y:auto}.exitIntentOverlay.visible,.exitIntentOverlay2.visible{transform:scale(1);opacity:1}.exitIntentOverlay-contents{position:absolute;top:20px;left:20px;background:#fff;padding:40px;width:calc(100% - 40px);max-width:800px;border-radius:8px;box-sizing:border-box}@media (min-width: 32.5625em){.exitIntentOverlay-contents{top:50%;left:50%;transform:translate(-50%, -50%)}}
.exitIntentOverlay-close{display:block;position:absolute;right:20px;top:20px;height:20px;width:20px;border:none;cursor:pointer;background:transparent url(https://cdn.oreillystatic.com/oreilly/images/icon_close_16x16.svg) 0 0 no-repeat;background-size:cover;text-indent:-9999px;overflow:hidden;opacity:.5}.exitIntentOverlay-close:hover{opacity:.75}.exitIntentOverlay-text{text-align:center}.exitIntentOverlay-text h2{margin:0 0 0.5rem;font-family:"gilroy",Arial,sans-serif;font-weight:400;font-size:2.25rem;line-height:1.1em;color:#3d3b49}.exitIntentOverlay-text h3{margin:0 0 1rem;font-family:"gilroy",Arial,sans-serif;font-weight:600;font-size:1.5rem;line-height:1.3em;color:#3d3b49}.exitIntentOverlay-text p{margin-bottom:20px;font-size:1.25rem;line-height:1.5em;max-width:720px;color:#3d3b49}.exitIntentOverlay-columns{display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center}@media (min-width: 32.5625em){.exitIntentOverlay-columns{flex-direction:row}}.exitIntentOverlay-columns .exitIntentOverlay-text{text-align:left}@media (min-width: 32.5625em){.exitIntentOverlay-columns .exitIntentOverlay-text{width:calc(50% - 20px)}}.exitIntentOverlay-columns .exitIntentOverlay-figure img{display:block;width:calc(100% + 80px);margin:0 -40px}@media (min-width: 32.5625em){.exitIntentOverlay-columns .exitIntentOverlay-figure{width:calc(50% - 20px)}}.exitIntentOverlay2 .exitIntentOverlay-columns .exitIntentOverlay-figure{display:none;overflow:hidden}@media (min-width: 32.5625em){.exitIntentOverlay2 .exitIntentOverlay-columns .exitIntentOverlay-figure{display:block;width:calc(50% + 40px);margin:0 -40px}.exitIntentOverlay2 .exitIntentOverlay-columns .exitIntentOverlay-figure img{display:block;margin:0;width:auto;height:319px}}
@media (min-width: 32.5625em){.exitIntentOverlay-3columns{display:flex;flex-direction:row;justify-content:flex-start;margin:0 -20px}}.exitIntentOverlay-3columns .exitIntentOverlay-column{margin:0 20px 40px;display:flex;flex-direction:column}.exitIntentOverlay-3columns .exitIntentOverlay-column:last-child{margin-bottom:0}@media (min-width: 32.5625em){.exitIntentOverlay-3columns .exitIntentOverlay-column{width:calc(100% / 3 - 40px);margin:0 20px;display:flex;flex-direction:column}}.exitIntentOverlay-3columns .exitIntentOverlay-column p{margin:0 auto 20px;text-align:center}.exitIntentOverlay-3columns .exitIntentOverlay-column a.exitIntentOverlay-cta{margin:auto auto 0}.exitIntentOverlay-3columns .exitIntentOverlay-column .exitIntentOverlay-figure{margin:0 auto;width:100%;max-width:215px}.exitIntentOverlay-3columns .exitIntentOverlay-column .exitIntentOverlay-figure img{display:block;width:100%;margin:0}a.exitIntentOverlay-cta{position:relative;display:block;max-width:max-content;vertical-align:top;margin-right:5px;margin-bottom:20px;padding:13px 20px;border-radius:2px;background-color:#e00;font-size:18px;font-size:1.125rem;line-height:1em;color:#fff;font-weight:600;letter-spacing:.02em;text-decoration:none}a.exitIntentOverlay-cta:last-child{margin-bottom:0}a.exitIntentOverlay-cta:hover,a.exitIntentOverlay-cta:active{text-decoration:none;box-shadow:0 1px 4px rgba(0,0,0,0.3);color:#fff}a.exitIntentOverlay-cta:after{content:"";display:inline-block;margin:-10px -2px -6px 6px;width:9px;height:14px;vertical-align:middle;background:transparent url(https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg) center center no-repeat;background-size:contain}
