:root,:root[data-theme=light]{color-scheme:light;--bg:#f5f5f7;--tile:#fff;--reading-bg:#fff;--text:#1d1d1f;--muted:#6e6e73;--line:#00000014;--hairline:#00000024;--soft:#e8e8ed;--link:#06c;--blue:#0071e3;--blue-hover:#0077ed;--header:#fbfbfdcc;--shadow:0 18px 50px #0000000f;--code-bg:#1d1d1f;--code-fg:#f5f5f7;--code-border:#ffffff24;--code-btn-bg:#ffffff1f;--code-btn-fg:#f5f5f7;--max:1100px;--reading:700px;--font-sans:-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-display:-apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-mono:"SF Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;font-family:var(--font-sans)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#000;--tile:#1d1d1f;--reading-bg:#000;--text:#f5f5f7;--muted:#a1a1a6;--line:#ffffff1a;--hairline:#ffffff29;--soft:#2c2c2e;--link:#2997ff;--blue:#0071e3;--blue-hover:#0077ed;--header:#000000b8;--shadow:0 18px 50px #00000059;--code-bg:#1d1d1f;--code-fg:#f5f5f7;--code-border:#ffffff24;--code-btn-bg:#ffffff1a;--code-btn-fg:#f5f5f7}}:root[data-theme=dark]{color-scheme:dark;--bg:#000;--tile:#1d1d1f;--reading-bg:#000;--text:#f5f5f7;--muted:#a1a1a6;--line:#ffffff1a;--hairline:#ffffff29;--soft:#2c2c2e;--link:#2997ff;--blue:#0071e3;--blue-hover:#0077ed;--header:#000000b8;--shadow:0 18px 50px #00000059;--code-bg:#1d1d1f;--code-fg:#f5f5f7;--code-border:#ffffff24;--code-btn-bg:#ffffff1a;--code-btn-fg:#f5f5f7}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:4.5rem}body{background:var(--bg);color:var(--text);letter-spacing:-.012em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:17px;line-height:1.47;transition:background-color .35s,color .35s}::selection{background:color-mix(in srgb, var(--blue) 24%, transparent);color:inherit}a{color:inherit;text-underline-offset:.18em;text-decoration:none;transition:color .2s,background-color .2s,opacity .2s}button,input{font:inherit;color:inherit;letter-spacing:inherit}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.025em;margin-top:0;font-weight:600;line-height:1.07}h1{font-size:clamp(2.5rem,6vw,4.25rem)}h2{font-size:clamp(1.75rem,3vw,2.5rem)}h3{letter-spacing:-.02em;font-size:1.25rem}:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:4px}.shell,.header-inner,.footer-inner{width:min(calc(100% - 2.75rem), var(--max));margin-inline:auto}.skip-link{z-index:100;background:var(--text);color:var(--bg);border-radius:980px;padding:.55rem .9rem;position:fixed;top:1rem;left:1rem;transform:translateY(-200%)}.skip-link:focus{transform:none}.site-header{z-index:20;background:var(--header);border-bottom:1px solid var(--line);-webkit-backdrop-filter:saturate(180%)blur(20px);position:sticky;top:0}.header-inner{grid-template-columns:1fr auto 1fr;align-items:center;gap:1rem;height:48px;display:grid}.wordmark{color:var(--text);letter-spacing:-.022em;grid-column:1;justify-self:start;align-items:center;font-size:17px;font-weight:600;text-decoration:none;display:flex}.wordmark strong{font-weight:600}.desktop-nav,.header-actions,.site-footer nav{align-items:center;display:flex}.desktop-nav{grid-column:2;gap:1.85rem}.header-actions{grid-column:3;justify-self:end;gap:.15rem}.desktop-nav a,.site-footer a{color:var(--muted);letter-spacing:-.01em;font-size:12px;text-decoration:none}.desktop-nav a{color:color-mix(in srgb, var(--text) 80%, transparent);opacity:.92;position:relative}.desktop-nav a:hover,.desktop-nav a[aria-current=page]{color:var(--text);opacity:1;text-decoration:none}.icon-button{width:32px;height:32px;color:var(--text);cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;display:grid}.icon-button:hover{background:color-mix(in srgb, var(--text) 8%, transparent)}.icon-button svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:17px;height:17px}.theme-toggle .moon{display:none}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle .sun{display:none}:root:not([data-theme=light]) .theme-toggle .moon{display:block}}:root[data-theme=dark] .theme-toggle .sun{display:none}:root[data-theme=dark] .theme-toggle .moon,:root[data-theme=light] .theme-toggle .sun{display:block}:root[data-theme=light] .theme-toggle .moon,.menu-toggle{display:none}.mobile-nav{width:min(calc(100% - 2.75rem), var(--max));margin:auto;padding:.25rem 0 .85rem}.mobile-nav a{border-top:1px solid var(--line);color:var(--text);letter-spacing:-.015em;padding:.85rem 0;font-size:17px;text-decoration:none;display:block}.mobile-nav a:hover{color:var(--link)}.hero{text-align:center;background:radial-gradient(ellipse 70% 55% at 50% -10%, #fffffff2, transparent 58%), radial-gradient(ellipse 42% 36% at 78% 8%, #0071e317, transparent 70%), radial-gradient(ellipse 36% 30% at 18% 0%, #8e8e9329, transparent 68%), var(--bg);padding:5.75rem 0 4.75rem;position:relative}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .hero{background:radial-gradient(ellipse 60% 45% at 50% -15%, #2997ff29, transparent 60%), radial-gradient(ellipse 40% 30% at 80% 0%, #ffffff0d, transparent 70%), var(--bg)}}:root[data-theme=dark] .hero{background:radial-gradient(ellipse 60% 45% at 50% -15%, #2997ff29, transparent 60%), radial-gradient(ellipse 40% 30% at 80% 0%, #ffffff0d, transparent 70%), var(--bg)}.hero h1{letter-spacing:-.035em;max-width:11em;margin:0 auto 1.15rem;font-size:clamp(3.15rem,8vw,5.6rem);font-weight:600;line-height:1.02}.eyebrow{color:var(--muted);letter-spacing:-.01em;margin:0 0 .85rem;font-size:14px;font-weight:600}.hero-lede{max-width:38rem;color:var(--muted);letter-spacing:-.018em;margin:0 auto 1.75rem;font-size:clamp(1.15rem,2vw,1.45rem);font-weight:400;line-height:1.35}.actions,.hero-links{flex-wrap:wrap;justify-content:center;align-items:center;gap:1.35rem;display:flex}.hero-links a{color:var(--link);letter-spacing:-.016em;font-size:21px}.hero-links a:after{content:"›";margin-left:.28rem;font-weight:400}.hero-links a:hover{text-decoration:underline}.button{background:var(--soft);min-height:44px;color:var(--text);letter-spacing:-.015em;cursor:pointer;border:0;border-radius:980px;justify-content:center;align-items:center;padding:.65rem 1.2rem;font-size:17px;line-height:1;text-decoration:none;display:inline-flex}.button:hover{background:color-mix(in srgb, var(--text) 12%, var(--soft));color:var(--text);text-decoration:none}.button.primary{background:var(--blue);color:#fff;font-weight:400}.button.primary:hover{background:var(--blue-hover);color:#fff}.section{padding:1.25rem 0 3.75rem}.section+.section{padding-top:.5rem}.section-head{border-bottom:0;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:1.15rem;padding-bottom:0;display:flex}.section-head h2{letter-spacing:-.028em;margin:0;font-size:clamp(1.75rem,3vw,2.4rem);font-weight:600}.section-head .eyebrow{letter-spacing:.01em;margin-bottom:.3rem;font-size:12px;font-weight:600;display:block}.section-head>a{color:var(--link);margin-bottom:.35rem;font-size:17px;text-decoration:none}.section-head>a:hover{text-decoration:underline}.grid,.blog-list{background:var(--tile);box-shadow:inset 0 0 0 1px var(--line);border-radius:28px;padding:.35rem 1.6rem}.post-card{border-bottom:1px solid var(--line);background:0 0;padding:1.35rem .15rem;position:relative}.grid .post-card:last-child,.blog-list .post-card:last-child,.related .post-card:last-child{border-bottom:0}.post-card h3{letter-spacing:-.022em;margin:.28rem 0 .2rem;font-size:1.2rem}.post-card h3 a:hover{color:var(--link)}.post-card p{color:var(--muted);letter-spacing:-.01em;margin:.35rem 0 0;font-size:15px;line-height:1.45}.post-meta{color:var(--muted);letter-spacing:-.005em;flex-wrap:wrap;gap:.4rem;font-size:12px;display:flex}.tag-list,.tech-list{flex-wrap:wrap;gap:.4rem;margin:.95rem 0 0;padding:0;list-style:none;display:flex}.tag-list a,.tech-list li{background:var(--soft);color:var(--muted);letter-spacing:-.005em;border:0;border-radius:980px;padding:.28rem .7rem;font-size:12px;text-decoration:none}.tag-list a:hover{color:var(--link);background:color-mix(in srgb, var(--link) 12%, var(--soft))}.project-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,400px),1fr));gap:12px;display:grid}.project-card{background:radial-gradient(120% 80% at 100% 0%, color-mix(in srgb, var(--blue) 10%, transparent), transparent 52%), var(--tile);min-height:280px;box-shadow:inset 0 0 0 1px var(--line);text-align:center;border:0;border-radius:28px;flex-direction:column;align-items:center;padding:2.6rem 1.75rem 2.1rem;display:flex}.project-card:nth-child(3n+2){background:radial-gradient(90% 70% at 0% 100%, color-mix(in srgb, var(--text) 7%, transparent), transparent 58%), var(--tile)}.project-card:nth-child(3n){background:radial-gradient(80% 60% at 100% 100%, color-mix(in srgb, var(--blue) 8%, transparent), transparent 55%), var(--tile)}.project-card h2{letter-spacing:-.03em;margin:.4rem 0 .35rem;font-size:clamp(1.7rem,2.4vw,2.15rem)}.project-card p{max-width:36rem;color:var(--muted);letter-spacing:-.015em;margin:.35rem 0 0;font-size:17px;line-height:1.4}.project-links{flex-wrap:wrap;justify-content:center;gap:.35rem 1.15rem;margin-top:auto;padding-top:1.5rem;display:flex}.project-links a{color:var(--link);font-size:17px}.project-links a:hover{text-decoration:underline}.page-head{text-align:center;border-bottom:0;padding:4.6rem 0 2.2rem}.page-head h1{letter-spacing:-.035em;max-width:12em;margin:0 auto .9rem;font-size:clamp(2.75rem,6.4vw,4.5rem);line-height:1.02}.page-head p{max-width:36rem;color:var(--muted);letter-spacing:-.016em;margin:0 auto;font-size:clamp(1.05rem,1.6vw,1.3rem);line-height:1.4}.page-head p+p{margin-top:.85rem}.page-head .breadcrumbs{margin-bottom:1.25rem}.page-head .breadcrumbs ol{justify-content:center}.page-head a:not(.breadcrumbs a){color:var(--link)}.page-head a:not(.breadcrumbs a):hover{text-decoration:underline}.filters{flex-wrap:wrap;justify-content:center;gap:.45rem;margin:1.5rem 0 .5rem;display:flex}.filter{background:var(--tile);box-shadow:inset 0 0 0 1px var(--line);color:var(--text);border:0;border-radius:980px;padding:.4rem .8rem;font-size:12px;text-decoration:none}.filter.active{background:var(--text);color:var(--bg)}.topic-list{grid-template-columns:1fr;gap:12px;padding-bottom:3rem;display:grid}.topic-card{background:radial-gradient(90% 80% at 100% 0%, color-mix(in srgb, var(--blue) 12%, transparent), transparent 55%), var(--tile);min-height:240px;box-shadow:inset 0 0 0 1px var(--line);text-align:left;border:0;border-radius:28px;flex-direction:column;justify-content:flex-end;padding:2.2rem 1.8rem;text-decoration:none;display:flex}.topic-card:nth-child(2){background:radial-gradient(80% 70% at 0% 100%, color-mix(in srgb, var(--text) 8%, transparent), transparent 60%), var(--tile)}.topic-card h2{letter-spacing:-.03em;margin:.2rem 0 .45rem;font-size:clamp(1.8rem,3vw,2.4rem)}.topic-card p{color:var(--muted);letter-spacing:-.015em;margin:.2rem 0;font-size:17px;line-height:1.4}.topic-card:hover h2{color:var(--link)}.topic-index{background:var(--tile);box-shadow:inset 0 0 0 1px var(--line);border-radius:28px;margin:0 0 1.25rem;padding:.3rem 1.5rem;list-style:none}.topic-index li{border-bottom:1px solid var(--line);padding:1.15rem .1rem}.topic-index li:last-child{border-bottom:0}.topic-index a{letter-spacing:-.02em;font-size:1.15rem;font-weight:600;text-decoration:none}.topic-index a:hover{color:var(--link)}.topic-index span{color:var(--muted);letter-spacing:-.01em;margin-top:.3rem;font-size:15px;font-weight:400;line-height:1.45;display:block}.blog-series{padding-bottom:.75rem}.blog-series:last-child{padding-bottom:3rem}.series-head{border-bottom:0;padding:1.35rem .2rem .7rem}.series-head h2{color:var(--text);letter-spacing:-.022em;text-transform:none;margin:0;font-size:1.35rem;font-weight:600}.article-header{background:var(--reading-bg);border-bottom:0;padding:4.25rem 0 1.5rem}.article-header .shell{width:min(calc(100% - 2.75rem), var(--reading))}.article-header h1{max-width:16em;font-family:var(--font-display);letter-spacing:-.032em;margin:.85rem 0 1rem;font-size:clamp(2.35rem,5vw,3.35rem);font-weight:600;line-height:1.05}.article-header .hero-lede{color:var(--muted);text-align:left;margin:0 0 1.15rem;font-size:1.2rem}.breadcrumbs{color:var(--muted);font-size:12px}.breadcrumbs ol{flex-wrap:wrap;gap:.4rem;margin:0 0 1.35rem;padding:0;list-style:none;display:flex}.breadcrumbs a{color:var(--link)}.breadcrumbs a:hover{text-decoration:underline}article[data-pagefind-body]{background:var(--reading-bg)}.article-layout{width:min(calc(100% - 2.75rem), var(--reading));background:0 0;margin:auto;padding:.5rem 0 3.5rem;display:block}.toc{background:color-mix(in srgb, var(--soft) 72%, var(--reading-bg));border-radius:18px;margin-bottom:2.25rem;padding:1.15rem 1.3rem 1.2rem}.toc h2{color:var(--muted);letter-spacing:-.01em;text-transform:none;margin:0 0 .7rem;font-size:13px;font-weight:600}.toc ol{columns:2;column-gap:1.75rem;margin:0;padding-left:1.1rem}.toc li{break-inside:avoid;margin:.28rem 0}.toc a{color:var(--text);letter-spacing:-.01em;font-size:13px;text-decoration:none}.toc a:hover{color:var(--link)}.prose{letter-spacing:-.011em;font-size:1.0625rem;line-height:1.7}.prose>p:first-child{letter-spacing:-.016em;color:var(--text);font-size:1.15rem;line-height:1.5}.prose p{margin:1.15em 0}.prose h2{letter-spacing:-.028em;margin-top:2.6rem;font-size:1.7rem}.prose h3{margin-top:2rem;font-size:1.25rem}.prose a{color:var(--link)}.prose a:hover{text-decoration:underline}.prose blockquote{border-left:2px solid var(--hairline);color:var(--muted);margin:1.75rem 0;padding-left:1.1rem}.prose pre{color:var(--code-fg);font-family:var(--font-mono);letter-spacing:0;border-radius:16px;padding:1.15rem 1.15rem 1.2rem;font-size:.82rem;line-height:1.55;position:relative;overflow:auto;background:var(--code-bg)!important}.prose code,.prose pre,.copy-code{font-family:var(--font-mono)}.prose code:not(pre code){background:var(--soft);letter-spacing:0;border-radius:6px;padding:.12rem .38rem;font-size:.88em}.prose table{border-collapse:collapse;font-size:.9rem;display:block;overflow:auto}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;padding:.6rem .7rem}.prose th{letter-spacing:.02em;color:var(--muted);font-size:12px;font-weight:600}.copy-code{border:1px solid var(--code-border);background:var(--code-btn-bg);color:var(--code-btn-fg);letter-spacing:0;cursor:pointer;border-radius:980px;padding:.28rem .6rem;font-size:11px;position:absolute;top:.7rem;right:.7rem}.share-row{border-top:1px solid var(--line);flex-wrap:wrap;gap:.5rem;margin-top:2.75rem;padding-top:1.4rem;display:flex}.share-row button,.share-row a{background:var(--soft);color:var(--link);cursor:pointer;border:0;border-radius:980px;padding:.45rem .85rem;font-size:14px}.share-row button:hover,.share-row a:hover{background:color-mix(in srgb, var(--link) 12%, var(--soft));text-decoration:none}.post-nav{grid-template-columns:1fr 1fr;gap:12px;margin-top:1.25rem;display:grid}.post-nav a{background:color-mix(in srgb, var(--soft) 78%, var(--reading-bg));min-height:96px;color:var(--muted);border:0;border-radius:18px;padding:1rem 1.1rem;font-size:12px;text-decoration:none}.post-nav a strong{color:var(--text);letter-spacing:-.016em;margin-top:.3rem;font-size:15px;font-weight:600;display:inline-block}.post-nav a:last-child{text-align:right}.post-nav a:hover strong{color:var(--link)}.related{width:min(calc(100% - 2.75rem), var(--reading));background:var(--reading-bg);margin:0 auto;padding:.5rem 0 3.5rem}.related h2{margin:0 0 .85rem;font-size:1.7rem}.content-page.shell,.search-wrap{width:min(100% - 2.75rem,720px)}.content-page{padding:.5rem 0 3.5rem}.content-page .hero-lede{text-align:left;max-width:none;margin:0 0 1.15rem;font-size:1.25rem;line-height:1.4}.content-page h2{letter-spacing:-.028em;margin-top:2.4rem;margin-bottom:.8rem;font-size:clamp(1.6rem,2.5vw,2rem);font-weight:600}.content-page a{color:var(--link)}.content-page a:hover{text-decoration:underline}.content-page .button{color:var(--text)}.content-page .button.primary{color:#fff}.content-page .button:hover{text-decoration:none}.content-page ul,.content-page ol{margin:.4rem 0 0;padding-left:1.2rem}.content-page li{margin:.55rem 0}.content-page li::marker{color:var(--muted)}.experience{background:var(--tile);box-shadow:inset 0 0 0 1px var(--line);border-radius:28px;margin:.4rem 0 0;padding:.25rem 1.45rem;list-style:none}.experience li{border-bottom:1px solid var(--line);margin:0;padding:1.2rem .1rem}.experience li:last-child{border-bottom:0}.experience-meta{color:var(--muted);margin:0 0 .15rem;font-size:12px}.experience strong{letter-spacing:-.016em;font-weight:600}.experience p:last-child{color:var(--muted);margin:.3rem 0 0;font-size:15px;line-height:1.45}.content-page .actions{justify-content:flex-start;margin-top:1.6rem}.callout{background:var(--tile);box-shadow:inset 0 0 0 1px var(--line);color:var(--muted);border-radius:18px;margin:0 0 1.25rem;padding:1.15rem 1.3rem;font-size:15px;line-height:1.5}.contact-links{background:var(--tile);box-shadow:inset 0 0 0 1px var(--line);border-top:0;border-radius:28px;margin-top:.5rem;padding:.2rem 1.45rem;display:block}.contact-links a{border-bottom:1px solid var(--line);color:var(--text);justify-content:space-between;gap:1rem;padding:1.15rem .1rem;text-decoration:none;display:flex}.contact-links a:last-child{border-bottom:0}.contact-links a:hover{color:var(--link);text-decoration:none}.contact-links strong{letter-spacing:-.015em;font-weight:600}.search-form{gap:.55rem;margin-top:.4rem;display:grid}.search-input{background:var(--tile);width:100%;height:56px;box-shadow:inset 0 0 0 1px var(--line), var(--shadow);border:0;border-radius:16px;padding:0 1.15rem;font-size:17px}.search-input::placeholder{color:var(--muted)}.search-input:focus{box-shadow:inset 0 0 0 2px var(--blue), var(--shadow);outline:none}.search-results{margin-top:1.35rem}#search-status{min-height:1.4rem;color:var(--muted);margin-top:.85rem;font-size:14px}.site-footer{border-top:1px solid var(--line);background:var(--bg);margin-top:0}.footer-inner{min-height:92px;color:var(--muted);justify-content:space-between;align-items:center;gap:1rem;font-size:12px;display:flex}.footer-inner p{margin:0}.site-footer nav{gap:1.15rem}.site-footer a:hover{color:var(--text);text-decoration:underline}@media (width>=760px){.topic-list{grid-template-columns:1fr 1fr}}@media (width<=760px){.desktop-nav{display:none}.menu-toggle{display:grid}.hero{padding:3.6rem 0 3rem}.hero h1{font-size:clamp(2.6rem,12vw,3.4rem)}.hero-links a{font-size:17px}.section{padding-bottom:2.6rem}.page-head{padding-top:3.2rem}.toc ol{columns:1}.post-nav{grid-template-columns:1fr}.post-nav a:last-child{text-align:left}.footer-inner{flex-direction:column;justify-content:center;align-items:flex-start;gap:.7rem;padding-block:1.3rem}.grid,.blog-list,.topic-index,.experience,.contact-links{border-radius:22px}.project-card,.topic-card{border-radius:22px;min-height:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}
