:root{--hover-bg:#eff6ff;--hover-border:#93c5fd;--hover-text:#1d4ed8}body{margin:0;padding:0;font-family:sans-serif;font-size:1em;line-height:1.65;background-color:#fff}section{margin-top:3em}section:first-child{margin-top:0}hr.page{border:0;border-bottom:1px solid #dee3e7}.flexrow{display:flex;flex-direction:row;gap:1em}header{margin:auto;max-width:720px;padding-top:2em;padding-bottom:2em}header div:first-child{flex-grow:1}header h1 a{font-weight:400}nav{max-width:720px;margin:auto}nav ul{list-style:none;padding:0;margin:0}nav ul li{display:inline-block;vertical-align:top;margin-right:1em;text-align:center}nav ul li a{text-decoration:none;display:block}nav ul li a:hover{text-decoration:underline}nav ul li .nav-indicator{display:block;height:.78em;margin-top:.15em;line-height:0;color:#000}nav ul li.last{float:right}nav ul li.currentPage{border-bottom:1px solid red}a{color:#36f;font-weight:700;text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:3px solid #000;outline-offset:2px}:where(:focus-visible){border-radius:4px}.annotation a:focus-visible{outline-offset:-3px}a:active{color:#fff;background-color:#000;text-decoration:none}main{margin:auto;max-width:720px;padding:.5em}footer{padding:1em;text-align:center}h1{font-family:sans-serif;font-size:2em;font-weight:lighter;max-width:720px;padding:.5em;margin:auto;padding:0}h1 a{color:#000;text-decoration:none}h1 a:hover{text-decoration:underline}h2{font-weight:400;margin:0}h3{font-weight:400}h2 a{text-decoration:none;font-weight:400;color:#000}h2 a:hover{text-decoration:underline}article{background-color:#fff;margin-top:1em;margin-bottom:3em}article li{margin-bottom:1em}article header{padding:0;background-color:#fff;margin-bottom:1em}article img.featured{object-fit:cover;height:320px;width:100%;box-shadow:none;margin:1em auto}footer aside{color:#666;font-size:smaller}article img{box-shadow:0 0 5px #999;margin:2em auto;display:block;max-width:100%}article.project img{margin:0}aside.featuredImageCredit{color:#666;text-align:center;display:block;margin-top:-1em}pre{background-color:beige;border-radius:1em;font-size:1.2em;box-shadow:0 0 5px #999;padding:.5em;padding-top:1em;padding-bottom:1em;overflow:auto}article ul,ul.related{list-style:'\25b9    ';list-style-position:outside}article ul li::marker,ul.related li::marker{color:#000;font-size:1.4em}ul.tags{list-style:none;margin:0;padding:0}ul.tags li{display:inline-block}.tag{font-family:sans;display:inline-flex;align-items:center;vertical-align:middle;padding:.28em .65em;margin-right:.5em;line-height:1.35;font-weight:500;font-size:.9em;letter-spacing:.02em;text-decoration:none;border-radius:6px;border:1px solid #c8d0d8;background:#f8f9fb;color:#1d4ed8;box-shadow:0 1px 2px rgba(15,23,42,6%)}a.tag{font-weight:700}a.tag:active{background-color:#dbeafe;color:#1e3a8a;border-color:#60a5fa;text-decoration:none}strong.tag{font-weight:700;background:#eef2ff;color:#3730a3;border-color:#c7d2fe}ul.terms{list-style:none;padding:0}ul.terms li{margin-bottom:1em}aside.currentPage{padding-top:1em}ul.pagination{list-style:none}ul.pagination li{display:inline-block}.annotation{display:inline-flex;align-items:stretch;vertical-align:middle;max-width:100%;margin-right:.5em;font-size:small;line-height:1.35;border-radius:6px;overflow:hidden;border:1px solid #c8d0d8;background:#fff;box-shadow:0 1px 2px rgba(15,23,42,6%)}.annotation span,.annotation a{font-family:sans;display:inline-flex;align-items:center;padding:.28em .6em;text-decoration:none}.annotation-key{font-weight:600;font-size:.72em;text-transform:uppercase;letter-spacing:.055em;background:#eef1f5;color:#4a5568;border-right:1px solid #d0d7e0}.annotation a.annotation-key{color:#3d4f63}.annotation a.annotation-key:active{background-color:#d8dee6;color:#2d3748;text-decoration:none}.annotation-value{font-weight:500;font-size:.9em;letter-spacing:.02em;background:#f8f9fb;color:#1e293b;margin-right:0}.annotation a.annotation-value{font-weight:700;color:#1d4ed8}.annotation a.annotation-value:active{background-color:#dbeafe;color:#1e3a8a;text-decoration:none}figure img{margin-bottom:0}figcaption{background-color:#f5f5f5;padding:.5em;border-radius:0 0 .5em .5em;box-shadow:0 0 5px #999}img.profile{margin:0;font-size:3em;width:2em;height:2em;border-radius:50%;box-shadow:0 1px 4px rgba(15,23,42,.18)}.project-screenshot-previews{display:flex;flex-wrap:wrap;gap:.5em;margin-top:1em;align-items:center;padding:.65em .75em;border:1px solid #e6eaee;border-radius:6px;background:#f7f8fa;box-shadow:0 1px 2px rgba(15,23,42,4%)}.project-screenshot-previews__link{display:block;line-height:0;border:1px solid #dce1e6;border-radius:4px;overflow:hidden;background:#fff;cursor:zoom-in}.project-screenshot-previews__thumb{display:block;width:auto;height:auto;max-height:5rem;max-width:8rem;margin:0;vertical-align:middle;object-fit:contain;box-shadow:none}.screenshot-lightbox{width:fit-content;width:-moz-fit-content;max-width:96vw;max-height:96vh;padding:0;border:none;background:0 0}.screenshot-lightbox::backdrop{background:rgba(0,0,0,.65)}.screenshot-lightbox__frame{position:relative;display:inline-block;max-width:1200px;max-height:90vh;margin:0;padding:.25rem;background:#fff;border-radius:6px;box-shadow:0 8px 32px rgba(0,0,0,.35)}.screenshot-lightbox__figure{margin:0}.screenshot-lightbox__img{display:block;max-width:100%;max-height:calc(90vh - 4rem);width:auto;height:auto;margin:0 auto;object-fit:contain}.screenshot-lightbox__caption{max-width:100%;margin:0;padding:.5rem .75rem .15rem;font-size:.9rem;line-height:1.35;color:#333;text-align:center;box-sizing:border-box;background:0 0;border-radius:0;box-shadow:none}.screenshot-lightbox__caption[hidden]{display:none!important}.screenshot-lightbox__close{position:absolute;top:.35rem;right:.35rem;z-index:1;font:inherit;font-size:1.5rem;line-height:1;width:2rem;height:2rem;padding:0;border:1px solid #dee3e7;border-radius:4px;background:#fff;color:#333;cursor:pointer}.screenshot-lightbox__close:active{color:#fff;background:#000}.screenshot-lightbox__nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2;font:inherit;font-size:2rem;font-weight:700;line-height:1;min-width:2.25rem;height:2.75rem;padding:0 .35rem;border:1px solid #dee3e7;border-radius:4px;background:rgba(255,255,255,.95);color:#333;cursor:pointer}.screenshot-lightbox__nav--prev{left:.35rem}.screenshot-lightbox__nav--next{right:.35rem}.screenshot-lightbox__nav:active{color:#fff;background:#000}.screenshot-lightbox__nav[hidden]{display:none!important}.project-links{display:flex;align-items:center;gap:1.25em;margin-top:1em}.project-links ul{list-style:none;display:flex;gap:1.25em;margin:0;padding:0}.project-links li{display:flex;margin:0}.project-links a{display:inline-flex;align-items:center;gap:.35em}.project-links svg{font-size:1.5em}.project-explore{margin-top:2em;padding:.75em 1.25em;border:1px solid #e6eaee;border-radius:6px;background:#f7f8fa;box-shadow:0 1px 2px rgba(15,23,42,4%)}.project-explore h2{margin-top:.25em}.project-explore__list{list-style:none;margin:0 0 1em;padding:0}.project-explore__list li{display:flex;align-items:center;gap:1em;margin-bottom:1.5em}.project-explore__list p{display:inline}.project-explore img.project-explore__logo,.project-explore .logo-placeholder.project-explore__logo{flex-shrink:0;box-sizing:border-box;width:3rem;height:3rem;min-height:0;margin:0;object-fit:contain;box-shadow:none}.project-explore .logo-placeholder.project-explore__logo{display:flex;align-items:center;justify-content:center;line-height:1.1;font-size:.6rem}@media(prefers-color-scheme:dark){body{background-color:#333;color:#fff}:root{--hover-bg:#454545;--hover-border:#60a5fa;--hover-text:#bfdbfe}:focus-visible{outline-color:#fff}nav ul li .nav-indicator{color:#fff}hr.page{border-bottom-color:#555}a{color:#83d6ff}a:active{color:#000;background-color:#fff}h1 a,h2 a{color:#fff}article,article header{background-color:initial}footer aside,aside.featuredImageCredit{color:#aaa}article img{box-shadow:0 0 5px #222}article ul li::marker,ul.related li::marker{color:#fff}article table{border-color:#555;box-shadow:0 0 5px #222}article th,article td{border-bottom-color:#555}article th{background-color:#444;color:#eee}article tbody tr:nth-child(even){background-color:#3a3a3a}article tbody tr:hover{background-color:#454545}code{background-color:#444;color:#eee}pre{background-color:#444;color:#eee;box-shadow:0 0 5px #222}pre code{background-color:initial;color:inherit}figcaption{background-color:#444;box-shadow:0 0 5px #222}img.profile{box-shadow:0 1px 4px rgba(0,0,0,.5)}.tag{background:#3a3a3a;color:#93c5fd;border-color:#555;box-shadow:0 1px 2px rgba(0,0,0,.2)}a.tag:active{background-color:#4a5568;color:#dbeafe;border-color:#93c5fd}strong.tag{background:#3730a3;color:#c7d2fe;border-color:#6366f1}ul.pagination li span{color:#999}.annotation{background:#3a3a3a;border-color:#555;box-shadow:0 1px 2px rgba(0,0,0,.2)}.annotation-key{background:#444;color:#cbd5e1;border-right-color:#555}.annotation a.annotation-key{color:#cbd5e1}.annotation a.annotation-key:active{background-color:#555;color:#fff}.annotation-value{background:#3a3a3a;color:#eee}.annotation a.annotation-value{color:#93c5fd}.annotation a.annotation-value:active{background-color:#4a5568;color:#dbeafe}.project-screenshot-previews,.project-explore{background:#3a3a3a;border-color:#555;box-shadow:0 1px 2px rgba(0,0,0,.2)}.project-screenshot-previews__link{background:#2b2b2b;border-color:#555}span.logo-placeholder{background:#444;color:#aaa;border-color:#555}.screenshot-lightbox__frame{background:#2b2b2b;box-shadow:0 8px 32px rgba(0,0,0,.6)}.screenshot-lightbox__caption{color:#eee}.screenshot-lightbox__close,.screenshot-lightbox__nav{background:#3a3a3a;border-color:#555;color:#eee}.screenshot-lightbox__close:active,.screenshot-lightbox__nav:active{color:#000;background:#fff}}a.tag:hover,.annotation a:hover,.screenshot-lightbox__close:hover,.screenshot-lightbox__nav:hover{background:var(--hover-bg);border-color:var(--hover-border);color:var(--hover-text);text-decoration:none}.annotation:has(a:hover){border-color:var(--hover-border)}a:hover>img,.project-screenshot-previews__link:hover{box-shadow:0 0 0 3px var(--hover-border)}a.tag,.annotation,.annotation a,a>img,.project-screenshot-previews__link,.screenshot-lightbox__close,.screenshot-lightbox__nav{transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s}