:root{--bg:#fbf4ea;--text:#0e0e0e;--line:color-mix(in oklab, var(--text) 10%, var(--bg));--code-bg:color-mix(in oklab, var(--bg) 97%, var(--text));--accent:#0e0e0e;--selection-bg:var(--text);--selection-text:var(--bg)}@media (prefers-color-scheme:dark){:root{--bg:#0e0e0e;--text:#fbf4ea;--line:color-mix(in oklab, var(--text) 12%, var(--bg));--code-bg:color-mix(in oklab, var(--bg) 97%, var(--text));--accent:#fbf4ea;--selection-bg:color-mix(in oklab, var(--text) 82%, var(--bg));--selection-text:var(--bg)}}*{box-sizing:border-box;margin:0;padding:0}::selection{background:var(--selection-bg);color:var(--selection-text)}::selection{background:var(--selection-bg);color:var(--selection-text)}:root{scrollbar-color:var(--line) transparent;scrollbar-width:thin}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--line)}::-webkit-scrollbar-thumb:hover{background:var(--text)}pre{scrollbar-color:var(--line) transparent;scrollbar-width:thin}html{scroll-behavior:smooth;font-size:calc(.5rem + .45vw)}body{color:var(--text);background:var(--bg);font-family:Work Sans,sans-serif;font-weight:300;line-height:1.65}.hero{cursor:pointer;width:100%;height:100vh;margin-bottom:-35.5vh;overflow:hidden}@media (orientation:portrait){.hero{transform:translateY(-10%)}}.hero svg{width:100%;height:100%;display:block}article{max-width:72rem;padding:8vh 1.5rem 20vh 3rem}.intro-text small{margin-top:1rem;margin-left:5rem;display:block}.section-row{grid-template-columns:1.2fr .8fr;align-items:start;gap:4rem;margin-top:8rem;display:grid}.section-row .section-demo{position:sticky;top:1.5rem}.section-row .section-text h2{border-top:none;padding-top:9rem}.section-text{min-width:0}.section-text p{margin-left:4rem}.section-full{max-width:54.5455%;margin-top:8rem}@media (width<=56rem){.section-row,.section-full{grid-template-columns:1fr}.section-row .section-demo{position:static}.section-full{max-width:none}h1{font-size:3rem}h2{font-size:2.5rem}h2,pre{width:100%}}.intro{grid-template-columns:1.2fr .8fr;align-items:start;gap:2rem;display:grid}.intro nav{position:sticky;top:1.5rem}@media (width<=56rem){.intro{grid-template-columns:1fr}}h1,h2,h3{overflow-wrap:normal;word-break:normal;text-wrap:balance;margin-top:1.5em;font-family:Aboreto,cursive}h1{letter-spacing:-.05em;margin-bottom:1.52em;margin-left:-.06em;font-size:5rem;font-weight:400;line-height:1}h1 .version{letter-spacing:0;vertical-align:.35em;color:color-mix(in oklab, var(--text) 40%, var(--bg));font-family:Work Sans,sans-serif;font-size:.18em;font-weight:300}h1 small{letter-spacing:0;color:color-mix(in oklab, var(--text) 50%, var(--bg) 50%);margin-top:.5em;font-family:Work Sans,sans-serif;font-size:.2em;font-weight:300;display:block}h2{letter-spacing:-.03em;width:120%;margin-top:0;margin-bottom:1.2em;font-size:4.5rem;font-weight:400;line-height:1}h3{margin-top:2.5rem;margin-bottom:.8em;font-size:1.3rem;font-weight:400}p,ul{margin-bottom:1em;font-size:.95rem}ul{margin-top:2rem;padding-left:1.2em}a{color:var(--text)}.demo{overflow:hidden}.demo-canvas{aspect-ratio:1;background:var(--bg);justify-content:center;align-items:center;width:100%;display:flex}.demo-canvas svg{width:100%;height:100%}.demo-controls{border-top:1px solid var(--line);flex-flow:row-reverse wrap;gap:.8rem;padding:2rem;font-size:.8rem;display:flex}.demo-controls label{gap:.4rem;font-weight:400;display:flex}.range-wrap{cursor:pointer;width:7rem;height:1.4rem;margin-left:.4rem;margin-right:.4rem;position:relative}.range-wrap input[type=range]{opacity:0;cursor:pointer;z-index:2;width:100%;height:100%;margin:0;position:absolute;inset:0}.range-wrap:before{content:"";background:var(--text);height:1px;position:absolute;bottom:0;left:0;right:0}.range-wrap:after{content:"";background:repeating-linear-gradient(to right, var(--text) 0px, var(--text) 1px, transparent 1px, transparent 8px);pointer-events:none;background-size:8px 100%;height:.25rem;position:absolute;bottom:0;left:0;right:0}.range-thumb{bottom:.45rem;left:calc(var(--val,.5) * 100%);background:var(--bg);border:1px solid var(--text);pointer-events:none;z-index:1;border-radius:50%;width:.5rem;height:.5rem;transition:transform .15s;position:absolute;transform:translate(-50%)}.range-wrap:hover .range-thumb,.range-wrap:active .range-thumb{transform:translate(-50%)scale(1.3)}.range-cap-left,.range-cap-right{background:var(--text);pointer-events:none;width:1px;height:.4rem;position:absolute;bottom:0}.range-cap-left{left:0}.range-cap-right{right:0}.demo-controls select{color:var(--text);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;text-decoration:underline}.demo-controls .value{text-align:right;font-variant-numeric:tabular-nums;min-width:2em}pre{border:1px dashed var(--line);background:0 0;border-width:0 0 0 1px;border-radius:0;width:120%;margin:4rem 0;padding:2rem 0 2rem 2rem;font-size:.82rem;line-height:1.5;overflow-x:auto}code{font-family:SF Mono,Fira Code,Fira Mono,Menlo,monospace;font-size:.8em}[class*=shj-lang-]{font-size:inherit!important;line-height:inherit!important;box-shadow:none!important;background:0 0!important;border:none!important;border-radius:0!important;margin:0!important;padding:0!important;font-family:SF Mono,Fira Code,Fira Mono,Menlo,monospace!important}p code{background:var(--code-bg);border-radius:2px;padding:.15em .35em}nav{margin:22rem 0 3rem 4rem;font-size:.85rem;line-height:1.9}nav ol{counter-reset:toc;list-style:none}li+li{margin-top:.5em}nav li{counter-increment:toc}nav li:before{content:counter(toc, upper-roman) ". ";color:color-mix(in oklab, var(--text) 40%, var(--bg));width:6ch;display:inline-block}nav a{text-decoration:none}nav a:hover{text-decoration:underline}button{background:var(--bg);color:var(--text);border:1px solid var(--line);cursor:pointer;border-radius:3px;padding:.4em 1em;font-family:Aboreto,cursive;font-size:.85rem}button:hover{border-color:var(--text)}.camera-panel{background:var(--bg);border:1px solid var(--line);z-index:100;opacity:0;pointer-events:none;border-radius:3px;font-size:.8rem;transition:opacity .2s;position:fixed;top:1.2rem;right:1.2rem;overflow:hidden}.camera-panel.visible{opacity:1;pointer-events:auto}.camera-panel summary.camera-title{cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:1rem;padding:.6rem .8rem;font-family:Aboreto,cursive;font-size:.8rem;list-style:none;display:flex}.camera-panel summary.camera-title::-webkit-details-marker{display:none}.camera-panel summary.camera-title:after{content:" −"}.camera-panel:not([open]) summary.camera-title:after{content:" +"}.camera-panel .camera-section-title{border-top:1px solid var(--line);padding:.6rem .8rem;font-family:Aboreto,cursive;font-size:.8rem}.camera-panel .camera-fields{flex-direction:column;display:flex}.camera-panel .camera-grid-panel{border-top:1px solid var(--line);padding:.7rem .8rem .8rem}.camera-panel .camera-grid-header{justify-content:space-between;gap:.8rem;margin-bottom:.5rem;font-weight:400;display:flex}.camera-panel .camera-grid-values{font-variant-numeric:tabular-nums}.camera-panel .camera-grid-separator{opacity:.5;padding:0 .35em}.camera-panel .camera-grid{--x:87.5%;--y:50%;--distance:37.5%;--angle:0deg;aspect-ratio:1;background-color:var(--bg);background-image:repeating-linear-gradient(0deg, var(--line) 0, var(--line) 1px, transparent 1px, transparent calc(100% / 8)), repeating-linear-gradient(90deg, var(--line) 0, var(--line) 1px, transparent 1px, transparent calc(100% / 8));cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none;width:100%;position:relative;box-shadow:inset 0 0 0 1px}.camera-panel .camera-grid__indicator{width:var(--distance);transform-origin:0;height:0;transform:rotate(var(--angle));pointer-events:none;border-top:1px dashed;position:absolute;top:50%;left:50%}.camera-panel .camera-grid__dot,.camera-panel .camera-grid:after,.camera-panel .camera-grid__center{pointer-events:none;border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.camera-panel .camera-grid__dot,.camera-panel .camera-grid:after{left:var(--x);top:var(--y)}.camera-panel .camera-grid__dot{background:var(--bg);width:.7rem;height:.7rem;box-shadow:0 0 0 1px currentColor, 0 0 0 .22rem var(--bg)}.camera-panel .camera-grid:after{content:"";width:.35rem;height:.35rem;box-shadow:0 0 0 1px currentColor, 0 0 0 2px var(--bg);background:currentColor}.camera-panel .camera-grid__center{background:var(--bg);width:.3rem;height:.3rem;top:50%;left:50%;box-shadow:0 0 0 1px}.camera-panel label{border-top:1px solid var(--line);align-items:end;gap:.4rem;padding:.45rem .8rem;font-weight:400;display:flex}.camera-panel label span:first-child{min-width:4.5em}.camera-panel .range-wrap{flex:1;min-width:7rem}input[type=color]{appearance:none;border:1px solid var(--line);cursor:pointer;background:0 0;width:2rem;height:1.2rem;padding:1px}input[type=color]::-webkit-color-swatch-wrapper{padding:0}input[type=color]::-webkit-color-swatch{border:none;border-radius:1px}.camera-panel select{color:var(--text);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;flex:1;text-decoration:underline}.camera-panel .value{text-align:right;font-variant-numeric:tabular-nums;min-width:2.2em}.note{color:color-mix(in oklab, var(--text) 60%, var(--bg) 40%);margin-top:-.3em;margin-bottom:1.2em;font-size:.85rem}.gallery{grid-template-columns:repeat(auto-fill,minmax(20rem,1fr));gap:2rem;margin-top:3rem;display:grid}.gallery .demo{margin:0}.gallery .demo-canvas{aspect-ratio:1}.gallery-caption{border-top:1px solid var(--line);color:color-mix(in oklab, var(--text) 60%, var(--bg));padding:.5rem .8rem;font-size:.8rem;font-style:italic}.site-footer{grid-template-columns:1.2fr .8fr;align-items:start;gap:4rem;max-width:72rem;padding:6rem 1.5rem 8rem 3rem;font-size:.9rem;display:grid}.footer-heart{position:sticky;top:1.5rem}.footer-heart svg{width:100%;height:auto}.footer-text h2{border-top:none;width:auto;padding-top:9rem}@media (width<=56rem){.site-footer{grid-template-columns:1fr}.footer-heart{order:0;max-width:16rem;position:static}}.site-footer .kofi-link{opacity:.7;margin:1rem 0;transition:opacity .2s;display:inline-block}.site-footer .kofi-link:hover{opacity:1}.site-footer .credit{color:color-mix(in oklab, var(--text) 50%, var(--bg));margin-top:2rem;font-size:.8rem}
