@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-variable-latin-v1.woff2)format("woff2");font-weight:100 800;font-style:normal;font-display:swap}@font-face{font-family:Switzer;src:url(/fonts/switzer-variable-latin-v1.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono Fallback;src:local(Menlo),local(Consolas),local(Courier New);ascent-override:102%;descent-override:30%;line-gap-override:0%;size-adjust:100%}@font-face{font-family:Switzer Fallback;src:local(Helvetica Neue),local(Arial);ascent-override:98%;descent-override:25%;line-gap-override:9%;size-adjust:100%}:root{color-scheme:light dark;--bg:light-dark(#f3f4f8,#0b1120);--bg-2:light-dark(#fff,#101830);--fg:light-dark(#0b1120,#e6eaf3);--muted:light-dark(#525c70,#98a2b8);--line:light-dark(#d3d7e2,#233049);--line-soft:light-dark(#e3e6ee,#182238);--accent:light-dark(#5b36d6,#a78bfa);--pass:light-dark(#15803d,#4ade80);--amber:light-dark(#8a5a00,#f5b942);--photo:light-dark(#c9c9c6,#1a2438);--wall-bg:light-dark(#f3f4f8,#0b1120);--wall-pass:light-dark(#15803d,#4ade80);--mono:"JetBrains Mono", "JetBrains Mono Fallback", Menlo, Consolas, monospace;--sans:"Switzer", "Switzer Fallback", "Helvetica Neue", Arial, sans-serif;--header-h:3.5rem;--step--3:.75rem;--step--2:.8125rem;--step--1:.875rem;--step-0:1.0625rem;--step-1:clamp(1.25rem, 1.1rem + .6vw, 1.5rem);--step-2:clamp(1.5rem, 1.2rem + 1.2vw, 2.125rem);--step-3:clamp(1.75rem, 1.2rem + 2.4vw, 3.25rem);--display:clamp(3.4rem, .4rem + 9.2vw, 7.5rem);--ease-out:cubic-bezier(.2, .75, .2, 1)}@property --draw{syntax:"<number>";inherits:true;initial-value:0}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}*,:before,:after{box-sizing:border-box}html{font-family:var(--sans);-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--header-h) + 1rem)}body{background:var(--bg);min-height:100vh;color:var(--fg);font-size:var(--step-0);font-kerning:normal;text-rendering:optimizelegibility;flex-direction:column;margin:0;font-weight:400;line-height:1.55;display:flex;position:relative}p{margin:0 0 1em}p,li,dd,figcaption,.gates li span{text-wrap:pretty}.product-pitch,.skills:not(.notes) dd{text-wrap:balance}a{color:inherit;text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:.22em;text-decoration-thickness:1px;transition:color .15s,text-decoration-color .15s}a:hover{color:var(--accent);text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}img{max-width:100%;height:auto}button{font:inherit;color:inherit}main{flex:1 0 auto}.wrap{width:100%;max-width:76rem;margin-inline:auto;padding-inline:clamp(1.25rem,4vw,3rem)}.mono{font-family:var(--mono)}:root{--cell-pitch:24px;--cell-size:2px;--cell:light-dark(#d8dbe5,#1f2b43);--cell-pass:light-dark(#c2dacf,#193e35)}.ground{z-index:-1;pointer-events:none;background:conic-gradient(at var(--cell-size) var(--cell-size), transparent 75%, var(--cell) 0) calc(var(--cell-pitch) / 2) calc(var(--cell-pitch) / 2) / var(--cell-pitch) var(--cell-pitch);position:absolute;inset:0;overflow:hidden}.ground-pass{height:var(--pass-h,0px);background:conic-gradient(at var(--cell-size) var(--cell-size), transparent 75%, var(--cell-pass) 0) calc(var(--cell-pitch) / 2) calc(var(--cell-pitch) / 2) / var(--cell-pitch) var(--cell-pitch);position:absolute;top:0;left:0;right:0}@media (prefers-reduced-motion:no-preference){html.js .ground.is-live .ground-pass{transition:height .7s var(--ease-out)}}@media print,(prefers-contrast:more),(forced-colors:active){.ground{display:none}}.js-only{display:none}html.js .js-only{display:initial}html.js .no-js-only,.touch-only{display:none}@media (hover:none) and (pointer:coarse){.pointer-only,.key-hint,html .icon-btn .hint{display:none}.touch-only{display:inline}}@media (prefers-reduced-motion:reduce){html.js .js-only{display:none}html.js .no-js-only{display:initial}}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:30;background:var(--fg);color:var(--bg);padding:.5rem .75rem;text-decoration:none;position:absolute;top:-100%;left:1rem}.skip-link:focus{top:1rem}.site-header{z-index:20;min-height:var(--header-h);background:var(--bg);border-bottom:1px solid var(--line-soft);view-transition-name:header;flex-wrap:wrap;align-items:center;gap:.5rem .75rem;padding-block:.375rem;display:flex;position:sticky;top:0}.brand{font-family:var(--mono);font-weight:600;font-size:var(--step--1);letter-spacing:-.01em;white-space:nowrap;margin-block:-.75rem;padding-block:.75rem;text-decoration:none}.pipe{flex:100%;order:3;min-width:0}html.js .site-header{flex-wrap:nowrap}html.js .pipe{flex:auto;order:0;justify-content:center;display:flex}.pipe ol{--progress:0;flex-wrap:wrap;gap:0 .75rem;margin:0;padding:0;list-style:none;display:flex;position:relative}.pipe ol:before,.pipe ol:after{content:"";background:var(--line);display:none;position:absolute}.pipe ol:after{background:var(--pass);transition:transform .25s var(--ease-out)}.pipe li{z-index:1;position:relative}.pipe a{min-height:2.75rem;font-family:var(--mono);font-size:var(--step--1);color:var(--muted);white-space:nowrap;align-items:center;gap:.5rem;padding:.25rem;text-decoration:none;display:flex}.pipe a:before,.pipe-node{content:"";border:2px solid var(--line);background:var(--bg);border-radius:50%;flex:none;width:.625rem;height:.625rem;transition:background-color .2s,border-color .2s,box-shadow .2s}.pipe a:hover{color:var(--fg)}.pipe a:hover:before{border-color:var(--muted)}.pipe a.is-passed{color:var(--fg)}.pipe a.is-passed:before{border-color:var(--pass);background:var(--pass)}.pipe a[aria-current]{color:var(--fg)}.pipe a[aria-current]:before,.pipe-toggle[data-state=running] .pipe-node{border-color:var(--amber);background:var(--amber);box-shadow:0 0 0 .25rem color-mix(in srgb, var(--amber) 25%, transparent)}.pipe a[aria-current] .pipe-label,.pipe-toggle[data-state=running] .pipe-current,.pipe-toggle[data-state=passed] .pipe-current{font-weight:600}.pipe a.is-passed[aria-current]:before,.pipe-toggle[data-state=passed] .pipe-node{border-color:var(--pass);background:var(--pass);box-shadow:0 0 0 .25rem color-mix(in srgb, var(--pass) 25%, transparent)}.pipe-toggle{border:1px solid var(--line);min-width:0;max-width:100%;min-height:2.75rem;color:var(--fg);font-family:var(--mono);font-size:var(--step--2);cursor:pointer;background:0 0;border-radius:.375rem;align-items:center;gap:.375rem;padding:0 .5rem 0 .625rem;transition:border-color .15s,background-color .15s;display:none}html.js .pipe-toggle{display:inline-flex}.pipe-toggle:hover{border-color:var(--muted);background:var(--bg-2)}.pipe-current{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.pipe-chevron{width:.75rem;height:.75rem;color:var(--muted);transition:transform .2s var(--ease-out);flex:none}.pipe-toggle[aria-expanded=true] .pipe-chevron{transform:rotate(180deg)}html.js .pipe ol{max-height:calc(100vh - var(--header-h));background:var(--bg);border-bottom:1px solid var(--line);flex-direction:column;gap:0;padding:.5rem clamp(1.25rem,4vw,3rem) .75rem;display:none;position:absolute;top:100%;left:0;right:0;overflow-y:auto}html.js .pipe.is-open ol{display:flex}html.js .pipe ol:before,html.js .pipe ol:after{width:2px;display:block;top:1.875rem;bottom:2.125rem;left:calc(clamp(1.25rem,4vw,3rem) + .5625rem - 1px)}html.js .pipe ol:after{transform:scaleY(var(--progress));transform-origin:top}.controls{gap:.25rem;margin-left:auto;display:flex}.icon-btn{width:2.25rem;height:2.25rem;color:var(--muted);cursor:pointer;visibility:hidden;background:0 0;border:1px solid #0000;border-radius:.375rem;place-items:center;padding:0;transition:color .15s,border-color .15s,background-color .15s;display:inline-grid}html.js .icon-btn{visibility:visible}.icon-btn:hover{color:var(--fg);border-color:var(--line);background:var(--bg-2)}.icon-btn svg{width:1.125rem;height:1.125rem}.icon-btn .sun{display:none}:root[data-theme=dark] .icon-btn .sun,:root:not([data-theme]) .icon-btn .sun{display:block}:root[data-theme=dark] .icon-btn .moon,:root:not([data-theme]) .icon-btn .moon{display:none}@media (prefers-color-scheme:light){:root:not([data-theme]) .icon-btn .sun{display:none}:root:not([data-theme]) .icon-btn .moon{display:block}}@media (width<=22rem){html.js .site-header{gap:.5rem}html.js .brand{font-size:var(--step--2)}html.js .controls{gap:0}.pipe-toggle{font-size:var(--step--3);padding:0 .375rem 0 .5rem}.pipe-toggle .pipe-node{display:none}}@media (width<=71.99rem){html:not(.js) .site-header{position:static}}@media (width>=40rem){.site-header{gap:.5rem 1rem}}@media (width>=72rem){.site-header{height:var(--header-h);flex-wrap:nowrap;padding-block:0}.pipe,html.js .pipe{flex:auto;order:0;display:block}html.js .pipe-toggle{display:none}.pipe ol,html.js .pipe ol{background:0 0;border-bottom:0;flex-flow:row;justify-content:space-between;align-items:center;gap:0;max-width:56rem;max-height:none;margin:0 auto;padding:0;display:flex;position:relative;top:auto;left:auto;right:auto;overflow:visible}.pipe ol:before,.pipe ol:after,html.js .pipe ol:before,html.js .pipe ol:after{width:auto;height:2px;margin-top:-1px;display:block;inset:50% .75rem auto;transform:none}.pipe ol:after,html.js .pipe ol:after{transform:scaleX(var(--progress));transform-origin:0}.pipe li{background:var(--bg);padding-inline:.25rem}.pipe a{min-height:0;font-size:var(--step--2);padding:.25rem;display:inline-flex}}.hero{gap:2rem;padding-block:clamp(2rem,5vw,5rem) clamp(3rem,8vw,6rem);display:grid}.display{font-family:var(--mono);font-size:var(--display);letter-spacing:-.045em;font-variant-ligatures:none;margin:0 0 1.25rem;font-weight:800;line-height:.95}.display .line{display:block}.role{font-size:var(--step-1);letter-spacing:-.01em;text-wrap:balance;margin:0 0 1rem;font-weight:500;line-height:1.3}.pitch{max-width:38ch;font-size:var(--step-0);text-wrap:pretty;margin:0 0 1.25rem}.meta{color:var(--muted);margin:0}.meta-mono{font-family:var(--mono);font-size:var(--step--1)}.meta-mono .line{text-wrap:balance;display:block}.hero-links{font-family:var(--mono);font-size:var(--step--1);flex-wrap:wrap;gap:.25rem 1.25rem;margin:1.5rem 0 0;padding:0;list-style:none;display:flex}@media (width<=21.5rem){.hero-links li:first-child{flex-basis:100%}}.hero-links a{color:var(--fg);text-decoration-color:var(--line);padding-block:.25rem;display:inline-block}.hero-links a:hover{color:var(--accent);text-decoration-color:currentColor}.wall{width:100%;max-width:27rem;margin:0}.wall-frame{aspect-ratio:1;border:1px solid var(--line);background:var(--photo);position:relative;overflow:hidden}.wall-frame img{width:100%;height:auto;display:block}.wall-canvas{opacity:0;pointer-events:none;width:100%;height:100%;color:var(--wall-pass);border:0 solid var(--wall-bg);outline-color:var(--amber);position:absolute;inset:0}.wall-canvas.is-on{opacity:1}.wall-canvas.is-fading{opacity:0;transition:opacity .9s}.wall-stamp{border:1px solid var(--pass);background:var(--bg);color:var(--pass);font-family:var(--mono);font-size:var(--step--2);opacity:0;pointer-events:none;padding:.3rem .55rem;line-height:1.3;transition:opacity .3s;position:absolute;bottom:.75rem;left:.75rem}.wall-stamp.is-on{opacity:1}.wall-caption{color:var(--muted);font-family:var(--mono);font-size:var(--step--1);margin-top:.75rem;line-height:1.5}.wall-rerun{color:inherit;text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:.22em;cursor:pointer;background:0 0;border:0;padding:0}.wall-rerun:hover{color:var(--accent);text-decoration-color:currentColor}.wall-rerun kbd{vertical-align:.05em;margin-left:.3em;text-decoration:none}@media (width>=56rem){.hero{grid-template-columns:minmax(0,7fr) minmax(0,5fr);align-items:start;gap:3rem}.hero-text{grid-area:1/1}.wall{grid-area:1/2;justify-self:end}}.section{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr);gap:1rem 3rem;padding-block:clamp(2.75rem,6vw,5rem);display:grid}.section>h2{font-family:var(--mono);font-size:var(--step--1);letter-spacing:-.01em;align-items:center;gap:.6rem;margin:0;font-weight:600;line-height:1.55;display:flex}.section>h2:before{content:"";border:2px solid var(--line);background:var(--bg);border-radius:50%;flex:none;width:.625rem;height:.625rem}.section[data-state=running]>h2:before{border-color:var(--amber);background:var(--amber);box-shadow:0 0 0 .25rem color-mix(in srgb, var(--amber) 25%, transparent)}.section[data-state=passed]>h2:before{border-color:var(--pass);background:var(--pass)}.section-body{max-width:68ch}.section-body>:first-child{margin-top:0}.section-body>:last-child{margin-bottom:0}@media (width>=56rem){.section{grid-template-columns:minmax(10rem,1fr) minmax(0,3fr)}.section>h2{top:calc(var(--header-h) + 1.5rem);align-self:start;position:sticky}}h3{font-size:inherit;margin:0;font-weight:600}.lead{font-size:var(--step-1);letter-spacing:-.01em;font-weight:500;line-height:1.35}.product{border:1px solid var(--line);background:var(--bg-2);padding:clamp(1.25rem,3vw,2rem)}.product .gates{grid-template-columns:repeat(auto-fit,minmax(min(18rem,100%),1fr));max-width:96ch}.product .socials{max-width:60ch}.product-name{font-family:var(--mono);font-size:var(--step-2);letter-spacing:-.03em;margin:0 0 .5rem;font-weight:700;line-height:1.05}.product-name a{text-decoration:none}.product-name a:hover{text-decoration:underline 2px}.product-pitch{max-width:48ch}.product-site{font-family:var(--mono);font-size:var(--step--1);margin:1.25rem 0 1rem}.product-links{flex-wrap:wrap;align-items:center;gap:.75rem 1rem;margin:0;padding-block:.5rem;display:flex}.badge{line-height:0;text-decoration:none;display:inline-block}.badge img{width:auto;display:block}.badge-apple{margin:.625rem 0}.badge-apple img{height:2.5rem}.badge-apple .badge-light{display:none}:root[data-theme=dark] .badge-apple .badge-light,:root:not([data-theme]) .badge-apple .badge-light{display:block}:root[data-theme=dark] .badge-apple .badge-dark,:root:not([data-theme]) .badge-apple .badge-dark{display:none}@media (prefers-color-scheme:light){:root:not([data-theme]) .badge-apple .badge-light{display:none}:root:not([data-theme]) .badge-apple .badge-dark{display:block}}.badge-google img{height:3.72rem}.badge:hover img{opacity:.88}.socials{color:var(--muted);margin:1rem 0 0}.socials a{color:var(--fg)}.socials a:hover{color:var(--accent)}.facts-title{border-top:1px solid var(--line-soft);margin:2rem 0 .75rem;padding-top:1.25rem}.gates{grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr));gap:.5rem 2rem;margin:0;padding:0;list-style:none;display:grid}.gates li{align-items:flex-start;gap:.6rem;display:flex}.gates svg{width:1.125rem;height:1.125rem;color:var(--pass);flex:none;margin-top:.3rem}.gates svg path{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.oss{margin:0;padding:0;list-style:none}.oss li{border-top:1px solid var(--line-soft);grid-template-columns:1.25rem minmax(0,1fr);gap:.2rem .75rem;padding-block:.85rem;display:grid}.oss li:first-child{border-top:0}.oss svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:1.125rem;height:1.125rem;margin-top:.25rem}.oss .repo{color:var(--muted)}.oss-title{flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;display:flex}.oss-title a{font-family:var(--mono);font-size:var(--step--1);letter-spacing:-.01em;font-weight:600}.nobreak{white-space:nowrap}.state{font-family:var(--mono);font-size:var(--step--3)}.oss .pr-merged,.state-merged{color:var(--pass)}.oss .pr-open,.state-open{color:var(--amber)}.oss p{color:var(--muted);margin:0}.group-title{font-family:var(--mono);font-size:var(--step--1);color:var(--muted);font-weight:600}.group-title+.oss{margin-top:.5rem}.oss+.group-title{margin-top:2rem}.log{margin:0;padding:0;list-style:none}.log li{grid-template-columns:minmax(0,1fr);gap:.1rem 1.25rem;padding:0 0 1.25rem 1.5rem;display:grid;position:relative}.log li:before{content:"";background:var(--line);width:2px;position:absolute;top:.55rem;bottom:-.55rem;left:.25rem}.log li:last-child:before{bottom:1.25rem}.log li:after{content:"";border:2px solid var(--line);background:var(--bg);border-radius:50%;width:.625rem;height:.625rem;position:absolute;top:.45rem;left:0}.log li.is-now:after{border-color:var(--pass);background:var(--pass)}.log .when{color:var(--muted);font-family:var(--mono);font-size:var(--step--1);font-variant-numeric:tabular-nums;white-space:nowrap;line-height:1.7}.log p{color:var(--muted);margin:0}@media (width>=36rem){.log li{grid-template-columns:8rem minmax(0,1fr)}}.rows{margin:0;padding:0;list-style:none}.rows li{grid-template-columns:minmax(0,1fr);gap:.1rem 1.25rem;padding-block:.6rem;display:grid}.rows .when{color:var(--muted);font-family:var(--mono);font-size:var(--step--1);font-variant-numeric:tabular-nums;white-space:nowrap;line-height:1.7}.rows p{color:var(--muted);margin:0}.rows+.group-title{margin-top:2rem}.group-title+.rows{margin-top:.25rem}@media (width>=36rem){.rows li{grid-template-columns:8rem minmax(0,1fr)}}.skills{grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr));gap:1rem 2rem;margin:0;display:grid}.skills dt{color:var(--muted);font-family:var(--mono);font-size:var(--step--1)}.skills dd{margin:.1rem 0 0}.contact-mail{font-family:var(--mono);font-size:var(--step-3);letter-spacing:-.03em;color:var(--accent);overflow-wrap:anywhere;margin:0 0 1rem;font-weight:600;line-height:1.1;text-decoration:none;display:inline-block}.contact-mail:hover{text-decoration:underline 2px}.contact-links{flex-wrap:wrap;gap:.25rem 1.5rem;margin:0 0 1rem;padding:0;list-style:none;display:flex}.page{max-width:68ch;padding-block:clamp(2rem,5vw,4rem) clamp(3rem,8vw,6rem)}.page h1{font-family:var(--mono);font-size:var(--step-3);letter-spacing:-.04em;margin:0 0 1.5rem;font-weight:700;line-height:1}.page h2{font-family:var(--mono);font-size:var(--step--1);margin:2rem 0 .5rem;font-weight:600}.page address{font-style:normal}.page pre{border:1px solid var(--line);background:var(--bg-2);font-family:var(--mono);font-size:var(--step--1);margin:0 0 1.5rem;padding:1rem 1.25rem;line-height:1.6;overflow-x:auto}.page pre.ls{white-space:pre-wrap}.ls-names{grid-template-columns:repeat(auto-fill,minmax(max(11ch,25% - 1.5ch),1fr));column-gap:2ch;display:grid}.site-footer{border-top:1px solid var(--line);color:var(--muted);font-size:var(--step--1);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1.5rem;padding-block:2rem 3rem;display:flex}.site-footer p{margin:0}.site-footer ul{flex-wrap:wrap;gap:.25rem 1.25rem;margin:0;padding:0;list-style:none;display:flex}.footer-note{max-width:72ch;font-family:var(--mono);font-size:var(--step--2);flex-basis:100%}code{font-family:var(--mono);font-size:var(--step--1)}kbd{border:1px solid var(--line);background:var(--bg-2);min-width:1.4em;font-family:var(--mono);font-size:var(--step--2);text-align:center;border-bottom-width:2px;border-radius:.25rem;padding:0 .35em;line-height:1.6;display:inline-block}dialog{border:1px solid var(--line);background:var(--bg-2);color:var(--fg);padding:0}dialog::backdrop{background:#00000073}.term{width:min(100vw,76rem);max-width:100vw;height:46vh;max-height:46vh;font-family:var(--mono);font-size:var(--step--1);border-bottom:0;grid-template-rows:auto 1fr auto;margin:auto auto 0;line-height:1.55;display:none}.term[open]{display:grid}@media (width<=40rem){.term{height:68dvh;max-height:68dvh}}.term-bar{border-bottom:1px solid var(--line-soft);color:var(--muted);font-size:var(--step--2);justify-content:space-between;align-items:center;gap:1rem;padding:.5rem .75rem .5rem 1rem;display:flex}.term-close{border:1px solid var(--line);color:var(--muted);font-family:var(--mono);font-size:var(--step--2);cursor:pointer;background:0 0;border-radius:.375rem;padding:.25rem .6rem;font-weight:400;line-height:1.5}.term-close:hover{color:var(--fg)}.term-out{overscroll-behavior:contain;white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;max-width:calc(80ch + 2rem);margin:0;padding:0 1rem .25rem;overflow-y:auto}.term-out:before{content:"";z-index:1;background:var(--bg-2);height:.75rem;display:block;position:sticky;top:0}.term-out .cols{--col:20ch;grid-template-columns:var(--col) minmax(0, 1fr);vertical-align:top;column-gap:2ch;width:100%;display:inline-grid}.term-out .cols-13{--col:13ch}.term-out .indent-2,.term-out .indent-4,.term-out .hang-4{vertical-align:top;width:100%;display:inline-block}.term-out .indent-2{padding-left:2ch}.term-out .indent-4{padding-left:4ch}.term-out .hang-4{text-indent:-4ch;padding-left:4ch}@media (width<=30rem){.term-out .cols{--col:13ch}}.term-out .cmd{color:var(--muted)}.term-out .ok{color:var(--pass)}.term-out .err{color:var(--amber)}.term-out a{color:var(--accent)}.term-form{align-items:center;gap:.5rem;padding:.5rem 1rem .75rem;display:flex}.term-prompt{color:var(--pass)}.term-form input{min-width:0;color:inherit;font:inherit;caret-color:var(--pass);background:0 0;border:0;flex:auto;padding:.25rem 0}.term-form input:focus{outline:none}@media (pointer:coarse){.term-form{font-size:max(1rem,16px)}}.keys{width:min(100% - 2rem,24rem);margin:auto;padding:1.25rem 1.5rem 1.5rem}.keys h2{font-family:var(--mono);font-size:var(--step--1);margin:0 0 1rem}.keys dl{grid-template-columns:auto 1fr;align-items:center;gap:.5rem 1rem;margin:0 0 1.25rem;display:grid}.keys dt{font-family:var(--mono)}.keys dd{color:var(--muted);margin:0}.keys .term-close{float:right}.keys-toggle{border-top:1px solid var(--line);font-size:var(--step--1);cursor:pointer;grid-template-columns:auto 1fr;align-items:start;gap:.625rem;padding-top:1rem;display:grid}.keys-toggle input{accent-color:var(--accent);margin:.2rem 0 0}.keys-note{color:var(--muted)}.icon-btn.has-hint{grid-auto-flow:column;gap:.375rem;width:auto;min-width:2.25rem;padding:0 .5rem}.icon-btn .hint{font-size:var(--step--3);color:var(--muted);white-space:nowrap;border-bottom-width:1px;line-height:1.5;display:none}@media (width>=40rem){.icon-btn .hint{display:inline-block}}@media (prefers-reduced-motion:no-preference){.rise{animation:rise .9s var(--ease-out) both}.rise-2{animation-delay:70ms}.rise-3{animation-delay:.14s}.rise-4{animation-delay:.2s}@keyframes rise{0%{transform:translateY(.45em)}to{transform:none}}.pipe a[aria-current]:not(.is-passed):before{animation:1.6s ease-in-out infinite pulse}@keyframes pulse{50%{box-shadow:0 0 0 .45rem color-mix(in srgb, var(--amber) 0%, transparent)}}@supports (animation-timeline:view()){.gates li{animation:linear both draw view();animation-range:entry 10% entry 80%}.gates svg path{stroke-dasharray:24;stroke-dashoffset:var(--draw)}@keyframes draw{0%{--draw:24}to{--draw:0}}}@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:.22s}}.section-wide .section-body{max-width:none}.section-wide .lead{max-width:60ch}.harness{--node:.75rem;--track:2px;--lane-h:1.75rem;--fork-pad:.75rem;--branch-gap:1.25rem;--cell:.25rem;--cell-gap:.125rem;margin:1.5rem 0 0}.board{border:1px solid var(--line);background:var(--bg-2);font-family:var(--mono);font-size:var(--step--2);padding:clamp(1.25rem,3vw,2rem);line-height:1.5}.board-head{flex-wrap:wrap;justify-content:space-between;gap:.25rem 1.5rem;margin:0 0 1rem;display:flex}.harness .group-title{margin:0}.harness-state{color:var(--muted);align-items:center;gap:.5rem;margin:0;display:inline-flex}.harness-state:before{content:"";width:var(--node);height:var(--node);border:2px solid var(--pass);background:var(--pass);border-radius:50%;transition:border-color .2s,background-color .2s}.harness-state[data-state=running]:before{border-color:var(--amber);background:var(--amber);box-shadow:0 0 0 .25rem color-mix(in srgb, var(--amber) 25%, transparent)}.harness-state[data-state=pending]:before{border-color:var(--line);background:var(--bg-2)}.harness-row+.harness-row{border-top:1px solid var(--line-soft);margin-top:1.5rem;padding-top:1.5rem}.harness ol,.harness ul{margin:0;padding:0;list-style:none}.flow,.flow>li{position:relative}.station{min-height:var(--lane-h);align-items:center;gap:.6rem;display:flex}.node{z-index:1;width:var(--node);height:var(--node);flex:none;position:relative}span.node{border:2px solid var(--line);background:var(--bg-2);border-radius:50%;transition:border-color .2s,background-color .2s}.merge{width:1.125rem;height:1.125rem;margin-left:calc(var(--node) / 2 - 1.125rem / 2);background:var(--bg-2);color:var(--line);fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;transition:color .2s}.flow .label{z-index:1;white-space:nowrap;position:relative}.check{vertical-align:-.2rem;width:1rem;height:1rem;color:var(--pass);margin-left:.3rem}.check path{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:24;stroke-dashoffset:0;transition:stroke-dashoffset .45s var(--ease-out)}.cells{grid-template-columns:repeat(12, var(--cell));gap:var(--cell-gap);margin-left:.5rem;display:grid}.cells i{height:var(--cell);background:var(--line-soft);transition:background-color .15s;display:block}.station:before,.station:after,.lane:before,.lane:after,.lane-list:before,.lane-list:after{content:"";background:var(--line);position:absolute}.station:before,.station:after{top:0;bottom:0;left:calc(var(--node) / 2 - var(--track) / 2);width:var(--track)}.station:first-child:before{top:50%}.station:last-child:before{bottom:50%}.station:after{background:var(--pass);height:0;transition:height .35s var(--ease-out);bottom:auto}.station:first-child:after{top:50%}.station.is-running:after{height:50%}.station.is-passed:after{height:100%}.station:first-child.is-running:after{height:0}.station:first-child.is-passed:after,.station:last-child.is-passed:after{height:50%}.harness .lane-list{padding-block:var(--fork-pad);position:relative}.lane-list:before,.lane-list:after{left:calc(var(--node) / 2 - var(--track) / 2);width:calc(3 * var(--branch-gap) + var(--track));height:var(--track);transition:background-color .2s}.lane-list:before{top:0}.lane-list:after{bottom:0}.lane{height:var(--lane-h);padding-left:calc(3 * var(--branch-gap) + var(--node) / 2 + .6rem);align-items:center;display:flex;position:relative}.lane:first-child{--i:0}.lane:nth-child(2){--i:1}.lane:nth-child(3){--i:2}.lane .node{top:50%;left:calc((var(--i) + 1) * var(--branch-gap));position:absolute;transform:translateY(-50%)}.lane:before,.lane:after{top:calc(-1 * (var(--i) * var(--lane-h) + var(--fork-pad)));left:calc((var(--i) + 1) * var(--branch-gap) + var(--node) / 2 - var(--track) / 2);width:var(--track);height:calc(3 * var(--lane-h) + 2 * var(--fork-pad))}.lane:after{background:var(--pass);height:0;transition:height .35s var(--ease-out)}.lane.is-running:after{height:calc(var(--fork-pad) + var(--i) * var(--lane-h) + var(--lane-h) / 2)}.lane.is-passed:after{height:calc(3 * var(--lane-h) + 2 * var(--fork-pad))}.lane .label:before{content:"";top:calc(50% - .5px);left:calc(-1 * ((2 - var(--i)) * var(--branch-gap) + .6rem - var(--node) / 2));background:var(--line);height:1px;transition:background-color .2s;position:absolute;right:calc(100% + .25rem)}.lane.is-passed .label:before,.harness:not(.is-live) .lane .label:before{background:var(--pass)}.harness:not(.is-live) span.node,.is-passed>span.node{border-color:var(--pass);background:var(--pass)}.harness:not(.is-live) .merge,.is-passed>.merge{color:var(--pass)}.is-running>span.node{border-color:var(--amber);background:var(--amber);box-shadow:0 0 0 .25rem color-mix(in srgb, var(--amber) 25%, transparent)}.is-running>.merge{color:var(--amber)}.harness:not(.is-live) .station:after,.harness:not(.is-live) .station:first-child:after{height:100%}.harness:not(.is-live) .station:first-child:after,.harness:not(.is-live) .station:last-child:after{height:50%}.harness:not(.is-live) .lane:after{height:calc(3 * var(--lane-h) + 2 * var(--fork-pad))}.harness:not(.is-live) .lane-list:before,.harness:not(.is-live) .lane-list:after,.lanes.is-running .lane-list:before,.lanes.is-passed .lane-list:before,.lanes.is-passed .lane-list:after{background:var(--pass)}.harness.is-live .gate:not(.is-passed) .check path{stroke-dashoffset:24px}.harness:not(.is-live) .cells i,.cells i.is-on{background:var(--pass)}.harness-caption{color:var(--muted);font-family:var(--mono);font-size:var(--step--1);margin-top:.75rem;line-height:1.5}.notes{grid-template-columns:repeat(auto-fit,minmax(min(20rem,100%),1fr));gap:1.5rem 3rem;margin-top:2.5rem}.notes dd{margin-top:.25rem}@media (width>=72rem){.harness{--node:.875rem;--lane-h:2.125rem;--cell:.375rem;--cell-gap:.1875rem}.board{font-size:var(--step--1);padding:1.5rem 2rem 1.75rem}.board-head{margin-bottom:1.25rem}.check{width:1.125rem;height:1.125rem}.merge{width:1.25rem;height:1.25rem}.flow{min-height:calc(4 * var(--lane-h));align-items:stretch;display:flex}.station{min-height:calc(4 * var(--lane-h));flex:1 1 0;display:block}.station .node{margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.station .label{position:absolute;top:calc(50% + .8rem);left:50%;transform:translate(-50%)}.station .cells{margin:0;position:absolute;top:calc(50% + 2.5rem);left:50%;transform:translate(-50%)}.station:before,.station:after{top:calc(50% - var(--track) / 2);width:auto;height:var(--track);bottom:auto;left:0;right:0}.station:first-child,.station:last-child{flex-grow:.55}.station:first-child .node{left:calc(var(--node) / 2)}.station:first-child .label{left:0;transform:none}.station:last-child .node{left:auto;right:0;transform:translateY(-50%)}.station:last-child .label{left:auto;right:0;transform:none}.station:first-child:before{top:calc(50% - var(--track) / 2);left:calc(var(--node) / 2)}.station:last-child:before{bottom:auto;right:.5625rem}.station:after,.station:first-child:after{top:calc(50% - var(--track) / 2);width:0;height:var(--track);transition:width .35s var(--ease-out);right:auto}.station:first-child:after{left:calc(var(--node) / 2)}.station.is-running:after{width:50%;height:var(--track)}.harness:not(.is-live) .station:first-child:after,.station:first-child.is-passed:after{width:calc(100% - var(--node) / 2);height:var(--track)}.harness:not(.is-live) .station:last-child:after,.station:last-child.is-passed:after,.station:last-child.is-running:after{width:calc(100% - .5625rem);height:var(--track)}.station:first-child.is-running:after{width:0}.station.is-passed:after,.harness:not(.is-live) .station:after{width:100%;height:var(--track)}.lanes{flex-direction:column;flex:2 1 0;justify-content:center;display:flex}.harness .lane-list{padding:0}.lane-list:before,.lane-list:after{top:calc(var(--lane-h) / 2);bottom:calc(var(--lane-h) / 2);width:var(--track);height:auto}.lane-list:before{left:0}.lane-list:after{left:auto;right:0}.lane{gap:.6rem;padding-left:1.25rem}.lane .node{position:relative;top:auto;left:auto;transform:none}.lane .label{background:var(--bg-2);padding-inline:.1rem .3rem}.lane .label:before{display:none}.lane:before,.lane:after{top:calc(50% - var(--track) / 2);width:100%;height:var(--track);left:0}.lane:after{width:0;transition:width .35s var(--ease-out)}.lane.is-running:after{width:calc(1.25rem + var(--node) / 2);height:var(--track)}.lane.is-passed:after,.harness:not(.is-live) .lane:after{width:100%;height:var(--track)}}@media (prefers-reduced-motion:no-preference){.is-running>span.node,.harness-state[data-state=running]:before{animation:1.6s ease-in-out infinite pulse}}@media (forced-colors:active){.display{line-height:1.12}.station:before,.lane:before,.lane-list:before,.lane-list:after,.lane .label:before,.pipe ol:before{forced-color-adjust:none;background:canvastext}.station:after,.lane:after,.pipe ol:after,.harness:not(.is-live) .lane-list:before,.harness:not(.is-live) .lane-list:after,.lanes.is-running .lane-list:before,.lanes.is-passed .lane-list:before,.lanes.is-passed .lane-list:after,.lane.is-passed .label:before,.harness:not(.is-live) .lane .label:before{forced-color-adjust:none;background:highlight}span.node,.pipe a:before,.pipe-node,.section>h2:before,.harness-state:before{forced-color-adjust:none;background:canvas;border-color:canvastext}.is-running>span.node,.pipe a[aria-current]:before,.pipe-toggle[data-state=running] .pipe-node,.section[data-state=running]>h2:before,.harness-state[data-state=running]:before{box-shadow:none;background:canvas;border-color:highlight}.harness:not(.is-live) span.node,.is-passed>span.node,.pipe a.is-passed:before,.pipe a.is-passed[aria-current]:before,.pipe-toggle[data-state=passed] .pipe-node,.section[data-state=passed]>h2:before,.harness-state:before,.harness-state[data-state=passed]:before{box-shadow:none;background:highlight;border-color:highlight}.harness-state[data-state=pending]:before{background:canvas;border-color:canvastext}.merge,.check{forced-color-adjust:none;color:canvastext;background:canvas}.harness:not(.is-live) .merge,.is-passed>.merge,.is-running>.merge{color:highlight}.check{background:0 0}.cells i{forced-color-adjust:none;background:graytext}.harness:not(.is-live) .cells i,.cells i.is-on{background:highlight}}
