a,abbr,acronym,address,applet,big,blockquote,body,caption,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,iframe,img,ins,figure,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,ul,var{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}:focus{outline:0}body{line-height:1;color:#000;background:#fff}ol,ul{list-style:none}table{border-collapse:separate;border-spacing:0}caption,td,th{text-align:left;font-weight:normal}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote,q{quotes:"" ""}html{font-size:18px}body{font-family:Lora,sans-serif;line-height:1.8em}p{margin-top:1.5em;margin-bottom:2em}h1,h2,h3{font-family:Noto Serif,serif;margin:1em 0;font-weight:bold}h1{font-size:150%}h2{font-size:130%}h3{font-size:120%}code,pre{font-family:Inconsolata,monospace;line-height:1.1em}figcaption{font-weight:bold}img,canvas,iframe,video,svg,select,textarea{max-width:98%}.overflow-container{overflow-x:scroll}nav{font-size:90%}.navMenuButton{position:absolute;top:0;right:0;margin-right:5px;border:none;background-color:#3d95d6;color:#0a1122;font-size:48px;font-weight:normal;padding:0;line-height:.8em}.navMenuButton:hover{cursor:pointer}nav.site{margin-left:1vw;margin-top:2vw}nav.site a{display:block;line-height:1.6em;text-decoration:none}nav.site a.current{color:#e5f1fa;font-weight:bold}nav.site a.current:before{content:"〉 "}nav.site .close{display:none;border:none;background-color:#3d95d6;cursor:pointer;position:absolute;top:0;right:0}nav.site section a{margin-left:1.2rem}nav.site.open{position:absolute;top:0;right:0;background-color:#3d95d6;margin:0;border-left:.2em solid #3d95d6;border-bottom:.2em solid #3d95d6;padding:0 1em 1em}nav.site.open .close{display:inline-block;font-size:25px}.navigationHorizontal section{float:left;margin-right:2rem}.navigationHorizontal section a{margin-left:0}.navigationHorizontal section:after{clear:both;content:"";display:block}body>nav{position:fixed;display:none}@media only screen and (min-width: 1000px){body>nav{display:block}}body>nav.open{display:block;position:absolute;top:0;right:0;z-index:10;background-color:#3d95d6;margin:0;border-left:1px solid #3d95d6}.navMenuButton{display:inline}@media only screen and (min-width: 1000px){.navMenuButton{display:none}}header{margin-bottom:2rem}header a{display:block;text-decoration:none}header a:visited{color:#0a1122}header h1{border-bottom:3px solid #0a1122;letter-spacing:.3em;line-height:1.1em;padding-bottom:.5em;margin:0}.content{margin:1vw auto;max-width:95vw}@media only screen and (min-width: 1000px){.content{margin:5px auto;max-width:40em}}.license{clear:both;border-top:solid 1px #bbdaf1;padding-top:2rem;color:#bbdaf1}.license img{margin-right:2em}.license p{font-size:80%;margin-top:1em}.license a{color:#bbdaf1}footer{margin-top:4em}footer p{margin-bottom:0}footer>nav{display:block}@media only screen and (min-width: 1000px){footer>nav{display:none}}body{background-color:#3d95d6;color:#0a1122}button{background-color:#bbdaf1;color:#213871;border-color:#213871;border-radius:.4em;font-weight:bold;border:4px}button:focus{outline:none}button:disabled{color:#3d95d6;border:none}blockquote{background-color:#3d95d6;padding:.5em 1em}a{color:#0a1122}a:hover{color:#274285;text-decoration:none}em{font-style:italic}figure~figure{padding-top:50px}h1,h2,h3{color:#0a1122}strong{font-weight:bold}li{margin-left:2em}ul li{list-style-type:disc}ol li{list-style-type:decimal}pre:has(code),pre:has(code) code{color:#3d95d6;background-color:#0a1122}code,pre{color:#213871;background-color:#3d95d6}pre{margin:1em 0;overflow:auto;padding:1em}.clear{clear:both}.none{display:none}.content.navOpen{opacity:.5}.intro img{display:block;margin:auto}.intro p{text-align:center;font-weight:bold;margin-top:1.5em;margin-bottom:1em}.intro .highlight{font-weight:400;margin:auto;text-align:center}img.hero{max-height:300px}.intro .highlight{font-family:Noto Serif,serif;font-size:120%}#subscribe{display:block}.posts{margin-top:2em}.post{display:grid;grid-template-columns:100%;justify-items:center;margin-bottom:1em}.post:nth-child(even){background-color:#67acdf}.post:nth-child(odd){background-color:#bbdaf1}.postTitle{text-decoration:none;font-weight:bold;font-family:Noto Serif,serif}.postTitle:hover{text-decoration:underline}.postDate{width:100%;text-align:center;font-size:90%}article img{display:block}article .date{width:100%;text-align:right}nav.blog{margin-top:2em}nav.blog li{list-style-type:none;margin-top:1em}#toggleComments{border:none;cursor:pointer;margin-top:2em;padding:.2em}.testimonial p{margin-top:1em;margin-bottom:2em}.testimonial .testimonial-body{max-height:10em;overflow-y:hidden}.testimonial .testimonial-body.expanded{max-height:initial}.testimonial .expand-control{display:block;width:100%;text-align:right;border:none;cursor:pointer}.testimonial .expand-control.hidden{display:none}.contact a{margin-bottom:3rem}.contact a.email{font-size:3rem;text-decoration:none}.contact th,.contact td{border:1px solid #0a1122;padding:0 1em;line-height:2em}.contact a{color:#e5f1fa}article.talk{padding-left:.5em}article.talk h2{margin-bottom:0}article.talk p{margin-bottom:1em;margin-top:0}article.talk:nth-child(even){background-color:#67acdf}article.talk:nth-child(odd){background-color:#bbdaf1}.plus-party button{padding:.5em;float:right}.plus-party textarea{width:100%;height:8em}.plus-party li{list-style-type:none;text-align:right}.plus-party .total{text-align:right;margin-bottom:1em;font-size:120%;border-top:2px solid #000}.plus-party .total,.plus-party li{font-family:Inconsolata,monospace}section.project{padding:.5em;margin-bottom:1em}section.project h2{margin-top:0}section.project:nth-child(even){background-color:#67acdf}section.project:nth-child(odd){background-color:#bbdaf1}img.screenshot{border:2px dashed #000}button.js-debug{display:block;margin-bottom:2em}.youtube-video-container{position:relative;overflow:hidden;width:100%}.youtube-video-container:after{display:block;content:"";padding-top:56.25%}.youtube-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.plop-album{margin:2em 0}.album-viewer{display:block}.album-main{display:flex;flex-direction:column;align-items:center}.album-photo{max-width:100%;height:auto;display:block}.album-caption{margin-top:1em;text-align:center;font-style:italic}.album-controls{display:flex;justify-content:center;align-items:center;gap:1em;margin-top:1em}.album-btn{padding:.25em 1em;cursor:pointer;border:none;line-height:1.2}.album-btn:hover:not(:disabled){background-color:#274285}.album-counter{min-width:5em;text-align:center}