article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;font-size:100%;touch-action:manipulation;font-family:Arial, sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1,h2,h3,h4,h5,h6{margin:0 0 1em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:1em 40px;overflow:hidden}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{color:#000;background:#ff0}p,pre{margin:0 0 1em}code,kbd,pre,samp{border:1px solid #e8e8e8;border-radius:3px;background-color:#eef;font-family:monospace, serif;font-size:1em}code{border:none}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word;overflow:hidden}q{quotes:none}q:after,q:before{content:'';content:none}small{font-size:81.25%}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sup{top:-0.5em}sub{bottom:-0.25em}dl,menu,ol,ul{margin:0 0 1em}dd{margin:0 0 0 40px}menu,ol,ul{padding:0}nav ol,nav ul{list-style:none;list-style-image:none}img{border:0;height:auto}svg:not(:root){overflow:hidden}figure{margin:0}table{border-collapse:collapse;border-spacing:0}body{background-color:#fff}iframe,img,object,video{max-width:100%}audio,canvas,img,svg,video{vertical-align:middle}li{list-style-position:inside}@media screen and (min-width: 19.25em){li{margin-left:1em;list-style-position:outside}}@media screen and (min-width: 30em){li{margin-left:0}}/*! Components */body{color:#4f4f4f;background-color:#f2f2f2;font-family:'Avenir', 'Avenir Next LT Pro', 'Montserrat', 'Corbel', 'URW Gothic', 'source-sans-pro', sans-serif;font-size:18px;font-weight:300;line-height:1.6}nav a{text-decoration:none}a{color:#004f6f;transition:color 0.25s}a:hover{color:#ff8c00}.main-article p a{text-decoration:underline}.main-article li a{text-decoration:underline}h1,h2,h3,h4{color:#1a1a1a;font-family:'Inter', 'Roboto', 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', 'Arial', sans-serif;font-weight:bold;line-height:1.4}h1{margin-bottom:1rem;font-size:2.25rem}h2{margin-bottom:0.666666667rem;font-size:1.75rem}h3{margin-bottom:0.8rem;font-size:1.25rem}.footer-header{margin-bottom:0.8rem;text-transform:uppercase;font-size:0.875rem;letter-spacing:1px}@media screen and (min-width: 40em){h1{margin-bottom:0.333333333rem;font-size:3rem}h2{margin-bottom:1rem;font-size:2.25rem}h3{margin-bottom:0.666666667rem;font-size:1.75rem}}.lead{font-size:1.25rem}.section{padding:1.5rem 0}footer.section{padding-bottom:0}.section--large{padding:3rem 0}@media screen and (min-width: 60em){.section{padding:3rem 0}.section--large{padding:6rem 0}}.section--black{background-color:#1a1a1a}.section--white{background-color:#fff}.header{padding:1rem 0 0;color:#fff;background-color:#1a1a1a;text-align:center}@media screen and (min-width: 40em){.header{text-align:left}}.logo-parent{display:flex;flex-direction:row;align-items:center;text-decoration:none}.logo{margin-right:0.5rem;width:2rem;float:left}@media screen and (min-width: 40em){.logo{width:3rem}}.logo-text{display:inline-block;text-transform:uppercase;font-size:0.875rem;font-weight:300;letter-spacing:2px;color:white !important;margin:0}.header ul{margin:0;list-style:none}@media screen and (min-width: 40em){.header ul{text-align:right}}.header ul li{display:inline-block;margin:0}.header ul li a{display:block;margin:0 0.5rem;padding:0.5rem 0;color:#fff}@media screen and (min-width: 40em){.header ul li a{margin:0 1rem}}.header ul li a:hover{color:#ff8c00;text-decoration:underline;text-decoration-color:#ff8c00;text-underline-offset:16px;text-decoration-thickness:2px}.header ul li a.active{color:#ff8c00;text-decoration:underline;text-decoration-color:#ff8c00;text-underline-offset:16px;text-decoration-thickness:2px}.main-banner{margin-top:-1rem;margin-bottom:1rem;padding:0.75rem 0.25rem;color:#3e3e3e;background-color:#ff8c00;text-align:center;font-size:0.875rem;font-weight:bold}.main-banner a{color:black}.main-banner a:hover{text-decoration:underline}.hero{padding:2rem 0 1.5rem;color:#fff;background-color:#1a1a1a;text-align:center}@media screen and (min-width: 60em){.hero{padding:3.5rem 0 5.5rem}}.hero h1{color:#fff;line-height:1.1}.hero a{color:#ff8c00}.hero a:hover{color:#004f6f}.hero p{margin:0}.image-overlap-top{position:relative;margin-top:3rem}.image-overlap-top img{height:100%}@media screen and (min-width: 40em){.image-overlap-top{margin-top:-6rem;margin-bottom:-6rem}}@media screen and (min-width: 60em){.image-overlap-top{margin-top:-9rem;margin-bottom:-9rem}}.image-overlap-top:after{content:"";display:block;position:absolute;top:2rem;right:2rem;bottom:2rem;left:2rem;border:0.625rem solid #fff}.client-logo-list{text-align:center;display:grid;column-gap:1.5rem;row-gap:1.5rem}.client-logo-list a{padding:3rem;border-radius:5px;background-color:#f2f2f2;line-height:3.5rem}.client-logo-list img{height:3.5rem}@media screen and (min-width: 50em){.client-logo-list{grid-template-columns:repeat(3, 1fr)}}.entry{margin-bottom:1.5rem;border-radius:5px;background-color:#f2f2f2}.entry__date{color:#1a1a1a;font-size:0.75rem;font-weight:700}.tag{display:inline-block;margin:0 0.25rem 0.5rem 0;padding:0.25rem;color:#fff;border-radius:5px;background-color:#004f6f;text-transform:uppercase;font-size:0.625rem;letter-spacing:1px}.next_prev{display:inline-block;margin:0 0.6rem 0.6rem 0;padding:0.6rem;color:#fff;border-radius:5px;background-color:#004f6f;text-transform:uppercase;font-size:0.625rem;letter-spacing:1px;text-decoration:none !important}.heading-link{vertical-align:middle;font-size:1.5rem}.heading-link:before{content:"/";display:inline-block;margin-right:0.5rem;color:#e2e2e2;font-weight:300}.heading-link:after{content:"→";display:inline-block;margin-left:0.25rem;transition:all 0.2s}.ads{width:11.5625rem;margin:1rem auto;border:1px solid #f2f2f2;text-align:center;font-size:medium}.gray-back{background-color:#f2f2f2}@media screen and (min-width: 30em){.ads{float:right;margin:0 0 1rem 1rem}}.post-meta{margin-bottom:2rem;padding-bottom:1rem;color:#767676;border-bottom:1px solid #f2f2f2;text-align:center;font-size:1rem}.post-meta__list{margin:0;list-style:none}.post-meta__list:before{content:"";display:block;width:4rem;height:1px;margin:1rem auto;background-color:#f2f2f2}.post-meta__item{display:inline-block;margin:0 0.75rem;padding-left:1.25rem;background-repeat:no-repeat;background-position:left center;background-size:0.875rem}.post-meta__item--calendar{background-image:url(../img/calendar.svg)}.post-meta__item--clock{background-image:url(../img/clock.svg)}.post-meta__item--book{background-image:url(../img/book.svg)}.post-meta__item--folder{background-image:url(../img/folder.svg)}.cta-box{margin-bottom:1rem;padding:1.5rem;background-color:#f2f2f2;margin-left:0}.sponsored{background-color:#f2f2f2;padding:0.5rem;display:inline-block}.sponsored p{margin:0}.sponsored-pill{margin:0}.share-section{margin-top:2rem;padding-top:1rem;border-top:1px solid #f2f2f2;text-align:center}.footer p,.footer ul{font-size:18px}.footer ul{margin-left:0;font-weight:300;line-height:2;list-style:none}.footer__copyright p{font-size:16px}.button{display:inline-block;padding:0.625rem 1rem;color:#fff;border:1px solid #004f6f;border-radius:5px;background-color:#004f6f;transition:all 0.2s;text-decoration:none !important}.button:hover{color:#fff;border-color:#007bac;background-color:#007bac}.text-light{font-weight:300}.text-center{text-align:center}.mt-1{margin-top:1rem}.mt-2{margin-top:2rem}.mt-3{margin-top:3rem}.mb-1{margin-bottom:1rem}.mb-2{margin-bottom:2rem}.mb-3{margin-bottom:3rem}/*! Layout */.l-wrap{position:relative;width:95%;margin:0 auto}@media screen and (min-width: 60em){.l-wrap{width:88%;max-width:66.25em}}@media screen and (min-width: 60em){.l-wrap--two-thirds{width:66.6666667%;max-width:66.25em}}.l-grid{margin-left:-2.5%}.l-grid__item-half,.l-grid__item-quarter,.l-grid__item-third,.l-grid__item-third-half,.l-grid__item-three-quarters,.l-grid__item-two-thirds{display:inline-block;width:97.5%;margin-left:2.5%;vertical-align:top}@media screen and (min-width: 40em){.l-grid__item-half{width:47.5%}}@media screen and (min-width: 40em){.l-grid__item-third{width:30.833333333%}.l-grid__item-third-half{width:47.5%}}@media screen and (min-width: 60em){.l-grid__item-third-half{width:30.833333333%}}@media screen and (min-width: 40em){.l-grid__item-two-thirds{width:64.166666667%}}@media screen and (min-width: 40em){.l-grid__item-quarter{width:22.5%}}@media screen and (min-width: 40em){.l-grid__item-three-quarters{width:72.5%}}.l-media{margin-bottom:1em}.l-media,.l-media__body{overflow:hidden}.l-media__img-wrap{display:block;margin-bottom:1em}@media screen and (min-width: 20em){.l-media__img-wrap{width:33%;float:left;margin-right:6%}}.l-media__img{display:block;margin:0 auto}@media screen and (min-width: 20em){.l-stretch{text-align:right}}.l-stretch__item{display:block;clear:left;margin-bottom:1em}@media screen and (min-width: 20em){.l-stretch__item{display:inline-block;clear:none}}.l-stretch__left{display:block;clear:left;margin-bottom:1em}@media screen and (min-width: 20em){.l-stretch__left{float:left}}/*! Helper */.main-article>p:first-of-type{font-size:1.25rem}.clients{margin-left:0;display:grid;grid-template-columns:1fr;grid-auto-rows:minmax(100px, auto);grid-row-gap:1em;grid-column-gap:1em}@media screen and (min-width: 60em){.clients{grid-template-columns:1fr 1fr}}.client-list{color:inherit;text-decoration:none;display:block;margin-bottom:1rem;padding:1.5rem;background-color:#f2f2f2;margin-left:0}.clients-list:hover{color:#ff8c00}.clients img{min-height:80px;margin-bottom:1em}.client-title{font-size:2em;color:inherit}.no-bullet{padding-bottom:10px;list-style:none}.article-box{padding-bottom:20px;border:1px solid #f2f2f2;margin:1rem auto;padding:1rem}.article-box a{font-weight:bold}blockquote{padding:15px;color:#5a5a5a;border:4px solid #e8e8e8;border-left:12px solid #e8e8e8;overflow:hidden}blockquote li{list-style-position:inside}blockquote>:last-child{margin-bottom:0}.printed-footer{display:none;visibility:hidden}figure{font-size:90%;margin-bottom:1em}.img-figure{background-color:#eef;padding:0.5em}@media screen and (min-width: 60em){.img-figure{padding:2em}}.half-width img,.half-width figcaption{width:100%;margin:0 auto;display:block}@media screen and (min-width: 60em){.half-width img,.half-width figcaption{width:50%}}.ruby-conf-table.upcoming-confs{display:table;overflow-x:inherit;white-space:normal}@media screen and (max-width: 60em){.ruby-conf-table.upcoming-confs{vertical-align:top;display:block;max-width:100%}.ruby-conf-table.upcoming-confs tbody{display:block}.ruby-conf-table.upcoming-confs th{display:none}.ruby-conf-table.upcoming-confs tr{display:block;margin-bottom:2em}.ruby-conf-table.upcoming-confs td{display:block;width:100%}.ruby-conf-table.upcoming-confs tr:nth-child(even){background-color:#f0f0f0}.ruby-conf-table.upcoming-confs .unessential{display:none}}.ruby-conf-table{vertical-align:top;display:inline-block;max-width:100%;overflow-x:auto;white-space:nowrap;border-collapse:collapse;border-spacing:0}.ruby-conf-table td,.ruby-conf-table th{padding:0.5em;text-align:left}.ruby-conf-table tr:nth-child(even){background-color:#f0f0f0}.end-of-article-cta a{font-weight:600}.footer-promo{padding:1em;text-align:center}.logo-image{text-align:center}.logo-image img{max-height:120px;box-shadow:0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.no-padding-top{padding-top:0}blockquote cite{display:block;text-align:right}footer blockquote{margin-left:0;border-top:none;border-right:none;border-bottom:none}footer blockquote p{font-size:inherit !important}footer blockquote ul{font-size:inherit !important;list-style-type:disc !important}.homepage-lede{padding:0 1em}.categories.featured li{margin-bottom:1em}.categories.regular{display:inline}.categories.regular li{display:inline}.categories.regular li::after{content:", "}.categories.regular li:last-child::after{content:""}.table-of-contents{padding-left:1em;margin:0}code,kbd{padding:0.2em}.menu-direction{font-weight:bold}summary{padding:0.2em;font-size:1.1em}.client-project{display:flex;gap:3ch;justify-content:space-between;align-items:stretch;flex-wrap:wrap;border-bottom:solid thick grey;padding-bottom:1em;margin-bottom:1em}.tech-used{flex-basis:23ch;flex-grow:1;container:tech / inline-size}.tech-used li{list-style:none}.tech-used-content{border-left:solid thick grey;padding-left:1em}.project-details{flex-basis:50ch;flex-grow:2}@container tech (min-width: 320px){.tech-used-content{border-left:none;padding-left:0}}@media print{*{color:#000 !important;background:transparent !important;box-shadow:none !important;text-shadow:none !important}body{font-size:16pt}a{text-decoration:none;font-weight:700}a[href^=http]:after{content:" (" attr(href) ") ";font-weight:400}a[href^="/"]:after{content:" (https://tosbourn.com" attr(href) ") ";font-weight:400}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}h2,h3,p{widows:3;orphans:3}h2,h3{page-break-after:avoid}.printed-footer{display:block;visibility:visible;text-align:center;padding-top:20px;border-top:solid #000 3px}header.header,.post-meta,.ads,.share-section,.recent-posts,footer.footer{display:none}}

/*# sourceMappingURL=style.css.map */