.site-nav{flex-wrap:wrap;row-gap:var(--space-3xs)}.site-nav-links{display:flex;align-items:center;gap:var(--space-s);order:3;flex-basis:100%;margin-inline-start:calc(var(--space-2xs) * -1)}.site-nav-link{display:inline-flex;align-items:center;min-height:2.75rem;padding-inline:var(--space-2xs);font-size:var(--text-s);font-weight:550;color:var(--night-text-muted);text-decoration:none;border-bottom:2px solid transparent;transition:color .12s ease,border-color .12s ease}.site-nav-link:hover{color:var(--night-text)}.site-nav-link[aria-current=page]{color:var(--night-text);border-bottom-color:var(--lit-aqua)}@media(min-width:34rem){.site-nav-links{order:0;flex-basis:auto;flex:1 1 auto;margin-inline-start:var(--space-m)}}.landing-foot-link{display:inline-flex;align-items:center;min-height:2.75rem;color:var(--night-text-muted);text-decoration:underline;text-decoration-color:var(--night-rule-strong);text-underline-offset:.2em;transition:color .12s ease,text-decoration-color .12s ease}.landing-foot-link:hover{color:var(--night-text);text-decoration-color:var(--lit-aqua)}@font-face{font-family:Satoshi;src:url(/assets/satoshi-500-ByP-Zb-9.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Satoshi;src:url(/assets/satoshi-700-Bd5kKQ_U.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}html:has(.landing),body:has(.landing){background:var(--night-0);color-scheme:dark}.landing{--paper: var(--night-0);--surface: var(--night-2);--surface-sunken: var(--night-1);--ink: var(--night-text);--ink-muted: var(--night-text-muted);--ink-faint: var(--night-text-faint);--rule: var(--night-rule);--rule-strong: var(--night-rule-strong);--accent: var(--lit-aqua);--accent-strong: var(--lit-aqua-strong);--accent-tint: var(--lit-aqua-tint);--accent-ring: rgba(79, 227, 208, .4);--shadow-s: none;--shadow-m: 0 18px 40px rgba(0, 0, 0, .55);color-scheme:dark;display:flex;flex-direction:column;min-height:100vh;background:var(--night-0);color:var(--night-text);border-top:3px solid var(--lit-aqua);border-image:linear-gradient(90deg,var(--lit-aqua),var(--lit-magenta)) 1;overflow-x:clip}.landing .btn-primary{color:var(--night-0)}.landing .btn-primary:focus-visible{outline-color:var(--night-0)}.landing .btn-primary{box-shadow:var(--glow-aqua-soft)}.landing .btn-primary:hover:not(:disabled){box-shadow:var(--glow-aqua)}.landing .btn-primary:disabled{box-shadow:none;background:var(--night-3);border-color:var(--night-rule-strong);color:var(--night-text-muted)}.landing-nav{display:flex;align-items:center;justify-content:space-between;gap:var(--space-s);padding:var(--space-s) var(--space-m);max-width:68rem;width:100%;margin:0 auto}.wordmark{font-family:var(--font-display);font-size:1.6rem;font-weight:700;letter-spacing:var(--tracking-snug);color:var(--night-text);text-decoration:none}.wordmark-small{font-size:1.2rem}.wordmark-mark{width:.86em;height:.86em;vertical-align:-.155em;margin:0 .012em}.hero{position:relative;z-index:0;max-width:68rem;width:100%;margin:0 auto;padding:var(--space-l) var(--space-m) var(--space-2xl)}.hero:before{content:"";position:absolute;inset:-20% -30% auto;height:80%;z-index:-1;pointer-events:none;background:radial-gradient(42% 55% at 22% 32%,var(--lit-aqua-tint),transparent 70%),radial-gradient(44% 56% at 80% 10%,var(--lit-magenta-tint-strong),transparent 72%);filter:blur(12px)}.hero-headline{font-size:var(--text-display);letter-spacing:var(--tracking-display);max-width:30ch;color:var(--night-text)}.hero-phrase{white-space:nowrap}.hero-free{color:var(--lit-aqua);text-shadow:0 0 30px rgba(79,227,208,.45)}.hero-lede{margin-top:var(--space-m);font-size:var(--text-l);color:var(--night-text-muted);max-width:38rem}.paste{position:relative;display:flex;flex-direction:column;gap:var(--space-xs);margin-top:var(--space-xl);background:var(--night-2);border:1px solid var(--night-rule-strong);border-radius:var(--radius-l);box-shadow:var(--shadow-m);padding:var(--space-m);transition:border-color .16s ease,box-shadow .16s ease}.paste:before{content:"";position:absolute;top:-16%;right:-16%;bottom:-16%;left:-16%;z-index:-1;border-radius:50%;background:radial-gradient(50% 50% at 50% 50%,rgba(79,227,208,.3),transparent 70%);filter:blur(30px);opacity:.5;pointer-events:none;animation:bloom 9s ease-in-out infinite}.paste:focus-within{border-color:var(--lit-aqua);box-shadow:var(--glow-focus)}.paste:focus-within:before{opacity:1}@keyframes bloom{0%,to{opacity:.38}50%{opacity:.72}}.paste>*{position:relative}.paste-label{font-size:var(--text-xs);font-weight:600;letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--night-text-muted)}.paste-input{min-height:9rem;background:var(--night-1);border-color:var(--night-rule-strong);color:var(--night-text)}.paste-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2xs)}.paste-picked{min-height:1.25rem;margin:var(--space-2xs) 0 0;font-size:var(--text-xs);line-height:1.25rem;color:var(--night-text-muted)}.btn-large{font-size:var(--text-m);padding:.9rem var(--space-l)}@media(min-width:48rem){.hero{padding-top:var(--space-2xl);padding-bottom:var(--space-2xl)}.paste-input{min-height:11rem}}.waves{position:relative;height:clamp(5rem,8vw,8.5rem);line-height:0;overflow:hidden}.waves svg{display:block;width:100%;height:100%}.waves-down{background:var(--night-0)}.waves-down .wave-front path{fill:var(--night-1)}.waves-up{background:var(--night-1)}.waves-up .wave-front path{fill:var(--night-0)}.wave-back path{fill:var(--lit-cyan-tint)}.wave-mid path{fill:var(--lit-aqua-tint)}.wave-back{animation:drift 240s linear infinite}.wave-mid{animation:drift 175s linear infinite}.wave-front{animation:drift 126s linear infinite}.wave-back .wave-swell{animation:swell-back 23s ease-in-out infinite}.wave-mid .wave-swell{animation:swell-mid 31s ease-in-out infinite}.wave-front .wave-swell{animation:swell-front 17s ease-in-out infinite}@keyframes drift{0%{transform:translate(0)}to{transform:translate(-4320px)}}@keyframes swell-back{0%,to{transform:translateY(0)}50%{transform:translateY(-9px)}}@keyframes swell-mid{0%,to{transform:translateY(0)}50%{transform:translateY(-13px)}}@keyframes swell-front{0%,to{transform:translateY(0)}50%{transform:translateY(-7px)}}.waves-lights{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.waves-light{position:absolute;top:34%;width:9rem;height:44%;border-radius:50%;filter:blur(16px);opacity:.5}.waves-light-a{left:12%;background:radial-gradient(closest-side,rgba(79,227,208,.55),transparent);animation:shimmer 17s ease-in-out infinite}.waves-light-b{left:44%;width:12rem;background:radial-gradient(closest-side,rgba(255,95,168,.85),transparent);animation:shimmer 23s ease-in-out 4s infinite}.waves-light-c{left:76%;width:11rem;background:radial-gradient(closest-side,rgba(255,157,107,.75),transparent);animation:shimmer 29s ease-in-out 9s infinite}.waves-plankton{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.waves-spark{position:absolute;width:7px;height:7px;border-radius:50%;background:radial-gradient(closest-side,var(--spark, var(--lit-aqua)),transparent);filter:blur(1px);opacity:.18;animation:bioluminesce 54s ease-in-out infinite}.waves-spark-3,.waves-spark-6{--spark: var(--lit-magenta)}.waves-spark-1{left:7%;top:46%;animation-duration:61s;animation-delay:-8s}.waves-spark-2{left:21%;top:33%;animation-duration:47s;animation-delay:-23s}.waves-spark-3{left:34%;top:55%;width:9px;height:9px;animation-duration:73s;animation-delay:-41s}.waves-spark-4{left:52%;top:38%;animation-duration:53s;animation-delay:-15s}.waves-spark-5{left:66%;top:58%;animation-duration:67s;animation-delay:-34s}.waves-spark-6{left:79%;top:42%;animation-duration:43s;animation-delay:-5s}.waves-spark-7{left:91%;top:51%;width:9px;height:9px;animation-duration:59s;animation-delay:-27s}@keyframes bioluminesce{0%,to{transform:translate(0);opacity:.1}25%{opacity:.36}50%{transform:translate(-2.5rem,-.5rem);opacity:.16}75%{opacity:.32}}@keyframes shimmer{0%,to{opacity:.38;transform:translate(-1.5rem) scaleX(.9)}50%{opacity:.75;transform:translate(1.5rem) scaleX(1.1)}}.beat{padding-block:var(--space-2xl)}.beat-inner{max-width:68rem;margin:0 auto;padding-inline:var(--space-m)}.beat-no{display:block;font-family:var(--font-mono);font-size:var(--text-s);font-weight:600;color:var(--night-mark);letter-spacing:.14em;line-height:1}.beat-no:after{content:"";display:block;width:2.25rem;height:1px;margin-top:var(--space-2xs);background:var(--night-rule-strong)}.beat-heading{font-size:var(--text-2xl);margin-top:var(--space-s);max-width:18ch;color:var(--night-text);text-wrap:balance}.beat-line{margin-top:var(--space-s);font-size:var(--text-l);color:var(--night-text-muted);max-width:34rem}.beat-cta{margin-top:var(--space-l);align-self:start;width:fit-content}.beat-open .figure{margin-top:var(--space-xl)}.beat-raised,.beat-feature{position:relative;overflow:hidden;background:var(--night-1)}.beat-raised:after,.beat-feature:after{content:"";position:absolute;top:-30%;right:-30%;bottom:-30%;left:-30%;z-index:0;pointer-events:none;background-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='360' height='192' viewBox='0 0 360 192'><g fill='%2396c4dc' font-family='ui-monospace,SFMono-Regular,Menlo,Consolas,monospace' font-size='4'><text x='0' y='4.68' textLength='360' lengthAdjust='spacing'>const want = target - n; switch (kind) { case &quot;join&quot;: return join(msg) }; const id = crypto.randomUUID(); peer.ontrack = (ev) =&gt; attach(ev</text><text x='0' y='10.68' textLength='360' lengthAdjust='spacing'>assert(typeof value === &quot;number&quot;); yield* walk(child, depth + 1); const entries = Object.entries(map).slice(0, 20); for (const [i, n] of nums.entries()); swi</text><text x='0' y='16.68' textLength='360' lengthAdjust='spacing'>const ordered = [...items].sort(byRank); for (const [i, n] of nums.entries()); switch (kind) { case &quot;join&quot;: return join(msg) }; return { ...prev, [key]: value</text><text x='0' y='22.68' textLength='360' lengthAdjust='spacing'>const parsed = Number.parseInt(token, 10); assert(typeof value === &quot;number&quot;); expect(result.cases.every(passed)).toBe(true); if (!doc) return</text><text x='0' y='28.68' textLength='360' lengthAdjust='spacing'>yield* walk(child, depth + 1); type Room = { id: string; peers: Peer[] }; seen.set(n, i); const delta = now - startedAt; socket.send(JSON.stringify({ kind:)</text><text x='0' y='34.68' textLength='360' lengthAdjust='spacing'>const at = clamp(index, 0, len - 1); const seen = new Map(); return { ...prev, [key]: value }; if (!doc) return null; seen.set(n, i); const entrie</text><text x='0' y='40.68' textLength='360' lengthAdjust='spacing'>return { ...prev, [key]: value }; switch (kind) { case &quot;join&quot;: return join(msg) }; type Room = { id: string; peers: Peer[] }; socket.send(JS</text><text x='0' y='46.68' textLength='360' lengthAdjust='spacing'>const at = clamp(index, 0, len - 1); export function twoSum(nums, target); const id = crypto.randomUUID(); socket.send(JSON.stringify({ kind: &quot;patch&quot;, patch }));)</text><text x='0' y='52.68' textLength='360' lengthAdjust='spacing'>let cursor = editor.getPosition(); const patch = diff(prev, next); const seen = new Map(); throw new Error(`unknown frame ${kind}`); pee</text><text x='0' y='58.68' textLength='360' lengthAdjust='spacing'>await db.transaction(async (tx) =&gt; tx.insert(row)); return rows.filter(Boolean).map(normalise); expect(result.cases.every(passed)).toBe(true); socket</text><text x='0' y='64.68' textLength='360' lengthAdjust='spacing'>if (!doc) return null; if (!doc) return null; const delta = now - startedAt; const trimmed = raw.trim().split(/s+/); if (seen.has(want</text><text x='0' y='70.68' textLength='360' lengthAdjust='spacing'>if (seen.has(want)) return [seen.get(want), i]; if (!doc) return null; type Room = { id: string; peers: Peer[] }; const memo = useMemo(() =&gt; build(list), [list]);)</text><text x='0' y='76.68' textLength='360' lengthAdjust='spacing'>const patch = diff(prev, next); element.setAttribute(&quot;aria-live&quot;, &quot;polite&quot;); reject(new TypeError(&quot;expected a buffer&quot;)); const seen = new)</text><text x='0' y='82.68' textLength='360' lengthAdjust='spacing'>queueMicrotask(() =&gt; commit(buffer)); seen.set(n, i); if (seen.has(want)) return [seen.get(want), i]; process.stdout.write(render(frame)); observer.observ</text><text x='0' y='88.68' textLength='360' lengthAdjust='spacing'>const parsed = Number.parseInt(token, 10); const want = target - n; const want = target - n; const id = crypto.randomUUID(); process.stdout.write(render(frame)); co</text><text x='0' y='94.68' textLength='360' lengthAdjust='spacing'>export function twoSum(nums, target); peer.ontrack = (ev) =&gt; attach(ev.streams[0]); const memo = useMemo(() =&gt; build(list), [list]); element.setAttribute(&quot;aria-liv</text><text x='0' y='100.68' textLength='360' lengthAdjust='spacing'>await Promise.all(peers.map(flush)); const ordered = [...items].sort(byRank); const parsed = Number.parseInt(token, 10); const delta = now - startedAt;)</text><text x='0' y='106.68' textLength='360' lengthAdjust='spacing'>assert(typeof value === &quot;number&quot;); if (seen.has(want)) return [seen.get(want), i]; expect(result.cases.every(passed)).toBe(true); const pa</text><text x='0' y='112.68' textLength='360' lengthAdjust='spacing'>const trimmed = raw.trim().split(/s+/); while (queue.length) drain(queue.pop()); const ok = tests.every((t) =&gt; t.status === &quot;pass&quot;); expe</text><text x='0' y='118.68' textLength='360' lengthAdjust='spacing'>let cursor = editor.getPosition(); observer.observe(node, { childList: true }); let cursor = editor.getPosition(); const at = clamp(index</text><text x='0' y='124.68' textLength='360' lengthAdjust='spacing'>assert(typeof value === &quot;number&quot;); useEffect(() =&gt; subscribe(room), [room]); const delta = now - startedAt; reject(new TypeError(&quot;expected a buffer&quot;)); export const</text><text x='0' y='130.68' textLength='360' lengthAdjust='spacing'>observer.observe(node, { childList: true }); const memo = useMemo(() =&gt; build(list), [list]); await Promise.all(peers.map(flush)); useEffect(() =&gt; subscribe(room</text><text x='0' y='136.68' textLength='360' lengthAdjust='spacing'>seen.set(n, i); reject(new TypeError(&quot;expected a buffer&quot;)); const memo = useMemo(() =&gt; build(list), [list]); return rows.filter(Boolean).map(</text><text x='0' y='142.68' textLength='360' lengthAdjust='spacing'>let cursor = editor.getPosition(); socket.send(JSON.stringify({ kind: &quot;patch&quot;, patch })); export const decode = (b) =&gt; new TextDecoder().decode(b); if</text><text x='0' y='148.68' textLength='360' lengthAdjust='spacing'>export const decode = (b) =&gt; new TextDecoder().decode(b); await Promise.all(peers.map(flush)); return []; peer.ontrack = (ev) =&gt; attach(ev.str</text><text x='0' y='154.68' textLength='360' lengthAdjust='spacing'>type Room = { id: string; peers: Peer[] }; return rows.filter(Boolean).map(normalise); const fn = useCallback(handle, [deps]); const seen = new Map(); queueMi</text><text x='0' y='160.68' textLength='360' lengthAdjust='spacing'>reject(new TypeError(&quot;expected a buffer&quot;)); let cursor = editor.getPosition(); const result = await run(suite, source); seen.set(n, i); const want = target</text><text x='0' y='166.68' textLength='360' lengthAdjust='spacing'>export default defineConfig({ plugins }); switch (kind) { case &quot;join&quot;: return join(msg) }; return []; const fn = useCallback(handle, [deps]); while (queue</text><text x='0' y='172.68' textLength='360' lengthAdjust='spacing'>if (!doc) return null; element.setAttribute(&quot;aria-live&quot;, &quot;polite&quot;); const want = target - n; yield* walk(child, depth + 1); if (!doc) return null; assert(</text><text x='0' y='178.68' textLength='360' lengthAdjust='spacing'>const patch = diff(prev, next); const ordered = [...items].sort(byRank); throw new Error(`unknown frame ${kind}`); if (seen.has(want)) return [seen.g</text><text x='0' y='184.68' textLength='360' lengthAdjust='spacing'>const result = await run(suite, source); export default defineConfig({ plugins }); const ordered = [...items].sort(byRank); queueMicrota</text><text x='0' y='190.68' textLength='360' lengthAdjust='spacing'>export function twoSum(nums, target); queueMicrotask(() =&gt; commit(buffer)); const delta = now - startedAt; const want = target - n; const ordered</text></g></svg>");background-repeat:repeat;background-size:360px 192px;transform:rotate(-14deg);opacity:.08}.beat-raised>*,.beat-feature>*{position:relative;z-index:1}.beat-quiet .beat-heading,.beat-close .beat-heading{font-size:var(--text-xl)}.beat-quiet .beat-line,.beat-close .beat-line{font-size:var(--text-m)}.beat-inner-split,.beat-inner-row{display:grid;gap:var(--space-l)}@media(min-width:52rem){.beat{padding-block:var(--space-3xl)}.beat-inner-split{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:var(--space-2xl);align-items:center}.beat-inner-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-2xl);align-items:center}.beat-inner-split .figure,.beat-inner-row .figure{margin-top:0}.beat-heading{font-size:var(--text-2xl)}}.beat-feature:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(45% 45% at 18% 8%,var(--lit-aqua-tint),transparent 70%),radial-gradient(44% 48% at 88% 22%,var(--lit-magenta-tint-strong),transparent 72%)}.beat-heading-big{font-size:var(--text-feature);letter-spacing:var(--tracking-display);max-width:16ch;text-wrap:balance}.beat-heading-big em{color:var(--night-text);font-style:italic}.beat-line-big{font-size:var(--text-l);color:var(--night-text-muted);max-width:44rem}.figure{margin-top:var(--space-l)}.fig-cap{display:block;font-size:var(--text-xs);font-weight:600;letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--night-text-faint);margin-bottom:var(--space-2xs)}.fig-card{background:var(--night-2);border:1px solid var(--night-rule);border-radius:var(--radius-l);padding:var(--space-m)}.figure-prompt{display:grid;justify-items:center;gap:var(--space-s)}.figure-prompt .fig-card{width:100%}.fig-prose{color:var(--night-text);line-height:var(--leading-body)}.fig-code{border-color:var(--night-rule-strong);box-shadow:var(--glow-neutral-soft)}.fig-arrow{width:3.5rem;height:1.25rem;transform:rotate(90deg)}.fig-arrow-line,.fig-arrow-head{fill:none;stroke:var(--night-rule-strong);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.fig-arrow-spark{fill:var(--night-text);filter:var(--glow-neutral-drop);opacity:0}.fig-pre{margin:0;font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.75;color:var(--night-text-muted);white-space:pre;overflow:hidden}.fig-l{display:block}.tok-k{color:var(--lit-magenta)}.tok-t{color:var(--lit-cyan)}.tok-c{color:var(--night-text-faint);font-style:italic}@media(min-width:52rem){.figure-prompt{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:var(--space-m)}.fig-arrow{transform:none}}.is-in .fig-arrow-spark{animation:spark 1.5s ease-in-out .15s both}@keyframes spark{0%{opacity:0;transform:translate(0)}18%,75%{opacity:1}to{opacity:0;transform:translate(52px)}}.is-in .fig-l{animation:line-in .42s ease-out both}.is-in .fig-l:nth-child(1){animation-delay:.6s}.is-in .fig-l:nth-child(2){animation-delay:.68s}.is-in .fig-l:nth-child(3){animation-delay:.76s}.is-in .fig-l:nth-child(4){animation-delay:.84s}.is-in .fig-l:nth-child(5){animation-delay:.92s}.is-in .fig-l:nth-child(6){animation-delay:1s}@keyframes line-in{0%{transform:translateY(5px)}to{transform:none}}.figure-tests{background:var(--night-2);border:1px solid var(--night-rule);border-radius:var(--radius-l);padding:var(--space-m)}.fig-testhead{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-s);padding-bottom:var(--space-2xs);border-bottom:1px solid var(--night-rule)}.fig-testhead .fig-cap{margin-bottom:0}.fig-tally{font-size:var(--text-xs);font-weight:700;color:var(--night-text);background:var(--night-chip);border-radius:var(--radius-s);padding:.15rem .45rem}.fig-testlist{list-style:none;margin:var(--space-s) 0 0;padding:0;display:grid;gap:var(--space-2xs)}.fig-testrow{display:flex;align-items:center;gap:var(--space-2xs);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--night-text-muted)}.fig-tick{width:1.15rem;height:1.15rem;flex:none;filter:var(--glow-aqua-drop)}.fig-tick-ring{fill:none;stroke:var(--lit-aqua);stroke-width:1.4}.fig-tick-path{fill:none;stroke:var(--lit-aqua);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.is-in .fig-tick-ring,.is-in .fig-tick-path{animation:ring-go .6s ease-out both}.is-in .fig-tally{animation:tally-in .5s cubic-bezier(.2,1.1,.3,1) 1.35s both}.is-in .fig-testrow:nth-child(1) .fig-tick-ring,.is-in .fig-testrow:nth-child(1) .fig-tick-path{animation-delay:.25s}.is-in .fig-testrow:nth-child(2) .fig-tick-ring,.is-in .fig-testrow:nth-child(2) .fig-tick-path{animation-delay:.5s}.is-in .fig-testrow:nth-child(3) .fig-tick-ring,.is-in .fig-testrow:nth-child(3) .fig-tick-path{animation-delay:.75s}.is-in .fig-testrow:nth-child(4) .fig-tick-ring,.is-in .fig-testrow:nth-child(4) .fig-tick-path{animation-delay:1s}@keyframes ring-go{0%,55%{stroke:var(--night-rule-strong)}to{stroke:var(--lit-aqua)}}@keyframes tally-in{0%{transform:scale(.8)}to{transform:none}}.figure-video{display:flex;gap:var(--space-s);max-width:22rem}.fig-tile{position:relative;flex:1 1 0;aspect-ratio:4 / 3;display:grid;place-items:center;border:1px solid var(--night-rule);border-radius:var(--radius-m);background:var(--night-2);overflow:hidden}.fig-face{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:100%;height:100%;object-fit:cover}.fig-tile-a .fig-face{object-position:50% 30%}.fig-tile-b .fig-face{object-position:50% 10%}.fig-tilename{position:absolute;left:var(--space-2xs);bottom:var(--space-2xs);font-size:var(--text-xs);font-weight:600;color:var(--night-text);background:var(--night-0);border-radius:var(--radius-s);padding:.05rem .35rem}.fig-tile-a .fig-tilename{color:var(--lit-aqua)}.fig-tile-b .fig-tilename{color:var(--lit-magenta)}.is-in .fig-tile-b{animation:speaking-magenta 6s ease-in-out infinite}.is-in .fig-tile-a{animation:speaking-aqua 6s ease-in-out 3s infinite}@keyframes speaking-aqua{0%,38%,to{border-color:var(--night-rule);box-shadow:none}10%,28%{border-color:var(--lit-aqua);box-shadow:inset 0 0 0 2px var(--lit-aqua),var(--glow-aqua-soft)}}@keyframes speaking-magenta{0%,38%,to{border-color:var(--night-rule);box-shadow:none}10%,28%{border-color:var(--lit-magenta);box-shadow:inset 0 0 0 2px var(--lit-magenta),var(--glow-magenta-soft)}}.figure-point{margin-top:var(--space-xl)}.fig-editor{position:relative;background:var(--night-0);border:1px solid var(--night-rule-strong);border-radius:var(--radius-l);box-shadow:var(--glow-neutral-soft);padding-block:var(--space-s);padding-bottom:var(--space-xl);overflow:hidden}.fig-eline{display:flex;align-items:center;gap:var(--space-s);padding:.35rem var(--space-m) .35rem var(--space-s);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--night-text-muted);white-space:nowrap}.fig-ec{white-space:pre}.fig-ln{flex:none;width:1.4rem;text-align:right;color:var(--night-text-faint)}.fig-eline.is-target{position:relative;color:var(--night-text);background:var(--lit-magenta-tint);box-shadow:inset 2px 0 0 var(--lit-magenta)}.fig-caret{position:relative;display:inline-block;width:2px;height:1.05em;margin-left:2px;vertical-align:text-bottom}.fig-caret:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--lit-aqua);box-shadow:var(--glow-aqua)}.fig-tag{position:absolute;bottom:1.4em;left:-2px;font-family:var(--font-sans);font-size:var(--text-xs);line-height:1.5;white-space:nowrap;border-radius:var(--radius-s);padding:0 .3rem;background:var(--lit-aqua);color:var(--night-0)}.is-in .fig-caret:before{animation:blink 1.15s steps(1,end) infinite}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:.18}}.fig-pointer{position:absolute;left:26%;top:1.5rem;display:flex;align-items:flex-start;gap:.3rem}.fig-pointer-arrow{width:1.15rem;height:1.15rem;flex:none;fill:var(--lit-magenta);filter:var(--glow-magenta-drop)}.fig-bubble{font-family:var(--font-sans);font-size:var(--text-xs);white-space:nowrap;color:var(--night-text);background:var(--night-1);border:1px solid var(--lit-magenta);border-radius:var(--radius-m);padding:.15rem .45rem;box-shadow:var(--glow-magenta)}.fig-pointer:before{content:"";position:absolute;left:-.3rem;top:-.3rem;width:1.7rem;height:1.7rem;border-radius:50%;border:1px solid var(--lit-magenta);opacity:0;pointer-events:none}.is-in .fig-pointer{animation:point-in .85s cubic-bezier(.22,.9,.28,1) .15s both}.is-in .fig-pointer:before{animation:ping 2.8s ease-out 1s infinite}@keyframes point-in{0%{transform:translate(24px,20px)}to{transform:none}}@keyframes ping{0%{opacity:.9;transform:scale(.45)}70%,to{opacity:0;transform:scale(1.9)}}.fig-legend{display:flex;flex-wrap:wrap;gap:var(--space-2xs) var(--space-l);margin-top:var(--space-m);font-size:var(--text-s);color:var(--night-text-muted)}.fig-legend-item{display:inline-flex;align-items:center;gap:var(--space-2xs)}.fig-legend-caret{display:inline-block;width:2px;height:1em;background:var(--lit-aqua)}.fig-legend-arrow{width:.85rem;height:.85rem;fill:var(--lit-magenta)}.fig-room{display:grid;gap:var(--space-s);border-color:var(--night-rule-strong);box-shadow:var(--glow-neutral-soft)}.fig-room .fig-cap{margin-bottom:0}.fig-link{margin:0;min-width:0;display:flex;align-items:center;gap:var(--space-2xs);padding:var(--space-2xs) var(--space-xs);background:var(--night-0);border:1px solid var(--night-rule);border-radius:var(--radius-s)}.fig-linkmark{flex:none;width:1rem;height:1rem;fill:none;stroke:var(--lit-aqua);stroke-width:1.8;stroke-linecap:round}.fig-url{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--night-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fig-copied{margin:0;display:flex;align-items:center;gap:var(--space-2xs);font-size:var(--text-s);color:var(--lit-aqua)}.fig-copied-tick{flex:none;width:1rem;height:1rem;fill:none;stroke:var(--lit-aqua);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;filter:var(--glow-aqua-drop)}.fig-here{margin:0;padding:var(--space-s) 0 0;list-style:none;display:grid;gap:var(--space-2xs);border-top:1px solid var(--night-rule)}.fig-who{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2xs);font-size:var(--text-s);color:var(--night-text);min-width:0}.fig-pip{flex:none;align-self:center;width:.5rem;height:.5rem;border-radius:50%}.fig-who-you .fig-pip{background:var(--lit-aqua);box-shadow:var(--glow-aqua-soft)}.fig-who-them .fig-pip{background:var(--lit-magenta);box-shadow:var(--glow-magenta-soft)}.fig-whoname{font-weight:650}.fig-whonote{min-width:0;font-size:var(--text-xs);color:var(--night-text-muted)}.is-in .fig-copied-tick{animation:pop .56s cubic-bezier(.2,1.1,.3,1) .35s both}.is-in .fig-copied{animation:arrive .52s ease-out .3s both}.is-in .fig-who-them{animation:arrive .62s cubic-bezier(.2,1.05,.3,1) .8s both}@keyframes pop{0%{transform:scale(.86)}to{transform:none}}@keyframes arrive{0%{transform:translateY(.45rem);opacity:.45}to{transform:none;opacity:1}}.landing-foot{margin-top:auto;border-top:1px solid var(--night-rule);padding:var(--space-m);max-width:68rem;width:100%;margin-inline:auto;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2xs);font-size:var(--text-s);color:var(--night-text-muted)}.landing-credit{font-size:var(--text-xs);color:var(--night-text-faint)}.landing-credit a{color:inherit}@media(prefers-reduced-motion:reduce){.landing *,.landing *:before,.landing *:after{animation:none!important;transition:none!important}}@font-face{font-family:Satoshi;src:url(/assets/satoshi-500-ByP-Zb-9.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Satoshi;src:url(/assets/satoshi-700-Bd5kKQ_U.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}:root{--paper: #fbf8f3;--surface: #ffffff;--surface-sunken: #f4f0e7;--ink: #1c1a17;--ink-muted: #6c6458;--ink-faint: #9a9183;--rule: #e6dfd2;--rule-strong: #cfc5b3;--accent: #0c6e62;--accent-strong: #09584e;--accent-tint: #e1efed;--accent-ring: rgba(12, 110, 98, .28);--pass: var(--accent);--fail: #a62a21;--fail-tint: #fbeceb;--warn: #8a6200;--warn-tint: #faf1dc;--font-display: "Satoshi", ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Display", "Segoe UI", Helvetica, Arial, sans-serif;--font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--text-xs: .75rem;--text-s: .8125rem;--text-m: .9375rem;--text-l: 1.0625rem;--text-xl: 1.375rem;--text-2xl: 1.875rem;--text-display: clamp(2rem, 1.1rem + 4.6vw, 4rem);--leading-tight: 1.12;--leading-snug: 1.35;--leading-body: 1.6;--tracking-display: -.03em;--tracking-tight: -.018em;--tracking-snug: -.008em;--tracking-wide: .08em;--space-3xs: .25rem;--space-2xs: .5rem;--space-xs: .75rem;--space-s: 1rem;--space-m: 1.5rem;--space-l: 2rem;--space-xl: 3rem;--space-2xl: 4.5rem;--space-3xl: 7rem;--radius-s: 5px;--radius-m: 9px;--radius-l: 16px;--on-accent: #ffffff;--scrim: rgba(28, 26, 23, .42);--well: #1c1a17;--shadow-s: 0 1px 2px rgba(28, 26, 23, .06);--shadow-m: 0 6px 20px rgba(28, 26, 23, .09), 0 1px 3px rgba(28, 26, 23, .05);--shadow-l: 0 20px 50px rgba(28, 26, 23, .18), 0 3px 10px rgba(28, 26, 23, .07);--measure: 34rem;color-scheme:light}*{box-sizing:border-box}html,body{margin:0}body{background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:var(--text-m);line-height:var(--leading-body);-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-display);font-weight:500;letter-spacing:var(--tracking-tight);line-height:var(--leading-tight);margin:0}p{margin:0}:where(a,button,input,textarea,select,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-s)}.btn{font:inherit;font-size:var(--text-s);font-weight:550;line-height:1;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2xs);padding:.7rem var(--space-s);border-radius:var(--radius-m);border:1px solid var(--rule-strong);background:var(--surface);color:var(--ink);cursor:pointer;text-decoration:none;transition:background-color .12s ease,border-color .12s ease,color .12s ease}.btn:hover:not(:disabled){background:var(--surface-sunken)}.btn:disabled{color:var(--ink-faint);border-color:var(--rule);background:var(--surface);cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);box-shadow:var(--shadow-s)}.btn-primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}.btn-primary:disabled{background:var(--surface-sunken);border-color:var(--rule);color:var(--ink-faint);box-shadow:none}.btn-primary:focus-visible{outline-color:var(--on-accent);outline-offset:-4px;box-shadow:0 0 0 3px var(--accent-ring)}.btn-quiet{border-color:transparent;background:transparent;color:var(--ink-muted)}.btn-quiet:hover:not(:disabled){background:var(--surface-sunken);color:var(--ink)}.btn-icon{width:1.05em;height:1.05em;flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;transform:translateY(-.03em)}.field{font:inherit;font-family:var(--font-mono);font-size:var(--text-s);line-height:var(--leading-snug);width:100%;padding:var(--space-s);border:1px solid var(--rule-strong);border-radius:var(--radius-m);background:var(--surface);color:var(--ink);resize:vertical}.field::placeholder{color:var(--ink-faint)}.field:disabled{background:var(--surface-sunken);color:var(--ink-muted)}.eyebrow{font-size:var(--text-xs);font-weight:600;letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--ink-faint);margin:0}.prose{max-width:var(--measure);color:var(--ink-muted)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}:root{--night-0: #050b13;--night-1: #0a1420;--night-2: #0f1e2e;--night-3: #17293c;--night-rule: rgba(150, 196, 220, .16);--night-rule-strong: rgba(150, 196, 220, .32);--night-text: #eaf4f8;--night-text-muted: #a3bccb;--night-text-faint: #78909f;--lit-aqua: #4fe3d0;--lit-aqua-strong: #7bf0e1;--lit-cyan: #4bb6ff;--lit-magenta: #ff5fa8;--lit-coral: #ff9d6b;--lit-aqua-tint: rgba(79, 227, 208, .14);--lit-magenta-tint: rgba(255, 95, 168, .13);--lit-cyan-tint: rgba(75, 182, 255, .1);--lit-magenta-tint-strong: rgba(255, 95, 168, .22);--night-mark: rgba(234, 244, 248, .55);--night-chip: rgba(234, 244, 248, .1);--text-feature: clamp(1.9rem, 1.1rem + 3.1vw, 3rem);--glow-aqua: 0 0 16px rgba(79, 227, 208, .45), 0 0 54px rgba(79, 227, 208, .2);--glow-aqua-soft: 0 0 22px rgba(79, 227, 208, .22), 0 0 72px rgba(79, 227, 208, .1);--glow-magenta: 0 0 16px rgba(255, 95, 168, .5), 0 0 54px rgba(255, 95, 168, .22);--glow-magenta-soft: 0 0 22px rgba(255, 95, 168, .26), 0 0 72px rgba(255, 95, 168, .12);--glow-neutral-soft: 0 0 22px rgba(234, 244, 248, .07), 0 0 60px rgba(234, 244, 248, .04);--glow-neutral-drop: drop-shadow(0 0 6px rgba(234, 244, 248, .6));--glow-focus: 0 0 0 4px rgba(79, 227, 208, .3), 0 0 38px rgba(79, 227, 208, .32), 0 0 110px rgba(79, 227, 208, .14);--glow-aqua-drop: drop-shadow(0 0 6px rgba(79, 227, 208, .7));--glow-magenta-drop: drop-shadow(0 0 6px rgba(255, 95, 168, .75))}@media(prefers-color-scheme:dark){:root{--paper: var(--night-0);--surface: var(--night-2);--surface-sunken: var(--night-1);--ink: var(--night-text);--ink-muted: var(--night-text-muted);--ink-faint: var(--night-text-faint);--rule: var(--night-rule);--rule-strong: var(--night-rule-strong);--accent: var(--lit-aqua);--accent-strong: var(--lit-aqua-strong);--accent-tint: var(--lit-aqua-tint);--accent-ring: rgba(79, 227, 208, .4);--on-accent: var(--night-0);--pass: var(--accent);--fail: #ff8478;--fail-tint: rgba(255, 92, 78, .14);--warn: #f3c46a;--warn-tint: rgba(243, 196, 106, .12);--shadow-s: var(--glow-aqua-soft);--shadow-m: 0 18px 40px rgba(0, 0, 0, .55);--shadow-l: 0 28px 70px rgba(0, 0, 0, .7), 0 2px 10px rgba(0, 0, 0, .5);--scrim: rgba(2, 6, 11, .66);--well: var(--night-0);color-scheme:dark}.btn-primary:disabled{background:var(--night-3);border-color:var(--night-rule-strong);color:var(--night-text-muted)}}.consent{position:fixed;inset-inline:0;bottom:0;z-index:40;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--space-s);max-width:68rem;margin-inline:auto;padding:var(--space-s) var(--space-m);background:var(--night-2);border-top:1px solid var(--night-rule-strong);border-radius:var(--radius-l) var(--radius-l) 0 0;box-shadow:0 -8px 30px #050b1380}.consent-text{flex:1 1 22rem;margin:0;font-size:var(--text-s);line-height:var(--leading-body);color:var(--night-text)}.consent-link{color:var(--night-text);text-decoration:underline;text-decoration-color:var(--lit-aqua);text-underline-offset:.2em;white-space:nowrap}.consent-link:hover{color:var(--lit-aqua)}.consent-actions{display:flex;gap:var(--space-2xs)}.consent .consent-btn{flex:1 1 auto;min-height:2.75rem;padding-inline:var(--space-m);background:var(--night-3);border:1px solid var(--night-rule-strong);color:var(--night-text);font-size:var(--text-s);white-space:nowrap}.consent .consent-btn:hover{border-color:var(--lit-aqua);color:var(--night-text)}@media(max-width:34rem){.consent{padding:var(--space-s)}.consent-actions{flex:1 1 100%}}
