@import "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,300..800;1,14..32,300..800&family=JetBrains+Mono:wght@400;500&display=swap";.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}@font-face{font-family:Host Grotesk;font-style:normal;font-weight:300 800;font-display:swap;src:url(/fonts/HostGrotesk-latin.woff2)format("woff2")}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#111117;--bg-2:#16161e;--band:#1a1a24;--tile:#1a1a2499;--fg:#eeeef0;--fg-2:#8b8b9e;--fg-3:#5c5c72;--line:#ffffff0f;--line-2:#ffffff1f;--teal:#14b8a6;--teal-soft:#2dd4bf;--teal-glow:#14b8a626;--lavender:#a78bfa;--lavender-soft:#c4b5fd;--lavender-glow:#a78bfa1f;--accent:var(--teal);--accent-2:var(--teal-soft);--accent-glow:var(--teal-glow);--grad-main:linear-gradient(135deg, var(--teal), var(--lavender));--grad-text:linear-gradient(120deg, var(--teal-soft), var(--lavender-soft));--grad-border:linear-gradient(135deg, #14b8a64d 0%, transparent 40%, transparent 60%, #a78bfa40 100%);--btn-bg:var(--teal);--btn-fg:#fff;--focus:var(--teal);--sun:block;--moon:none;--pill-bg:#111117d1;--glass:#1a1a248c;--glass-border:#ffffff0f;--sans:"Inter", "Host Grotesk", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;--mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--max:72rem;--measure:44rem;--gutter:clamp(1.25rem, 5vw, 3rem);--radius-sm:.5rem;--radius-md:.75rem;--radius-lg:1rem;--radius-xl:1.25rem;--radius-pill:999px;--header:3.5rem;--header-inset:.875rem;--header-offset:calc(var(--header) + 2 * var(--header-inset));--ease:cubic-bezier(.22, 1, .36, 1);--ease-back:cubic-bezier(.34, 1.56, .64, 1)}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fafafa;--bg-2:#f4f4f5;--band:#efefef;--tile:#ffffffb3;--fg:#18181b;--fg-2:#71717a;--fg-3:#a1a1aa;--line:#0000000f;--line-2:#0000001f;--teal:#0d9488;--teal-soft:#14b8a6;--teal-glow:#0d94881a;--lavender:#7c3aed;--lavender-soft:#8b5cf6;--lavender-glow:#7c3aed14;--pill-bg:#fafafae0;--glass:#fff9;--glass-border:#0000000f;--sun:none;--moon:block;--grad-border:linear-gradient(135deg, #0d948840 0%, transparent 40%, transparent 60%, #7c3aed33 100%)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{font-family:var(--sans);color:var(--fg);background-color:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;transition:background-color .5s var(--ease), color .5s var(--ease);margin:0;font-size:1rem;line-height:1.65}body:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(ellipse, var(--teal-glow) 0%, transparent 70%);filter:blur(60px);opacity:.7;width:80vw;height:60vh;position:fixed;top:-20vh;left:50%;transform:translate(-50%)}body:after{content:"";z-index:-1;pointer-events:none;background:radial-gradient(28rem circle at var(--px,50%) var(--py,50%), var(--lavender-glow), transparent 60%);opacity:0;transition:opacity .8s var(--ease);position:fixed;inset:0}html.pointer body:after{opacity:1}@media (hover:none){body:after{display:none}}img,svg{max-width:100%;display:block}h1,h2,h3,h4{text-wrap:balance;margin:0;line-height:1.15}p{margin:0}p+p{margin-top:1em}ul,ol{margin:0;padding:0}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:2px}[id]{scroll-margin-top:calc(var(--header-offset) + 1rem)}main{padding-top:var(--header-offset)}.display{letter-spacing:-.035em;font-size:clamp(2.25rem,1rem + 5.5vw,4.5rem);font-weight:700;line-height:1.05}.display span{color:var(--fg-2);margin-top:.15em;font-weight:400;display:block}.display.brand{line-height:1.08;overflow:visible}.display.brand .name-first{letter-spacing:-.05em;color:var(--fg);font-size:clamp(3.5rem,2rem + 7vw,7rem);font-weight:800;display:block}.display.brand .name-last{letter-spacing:-.04em;background:var(--grad-text);-webkit-text-fill-color:transparent;-webkit-background-clip:text;padding-bottom:.08em;font-size:clamp(3.5rem,2rem + 7vw,7rem);font-weight:500;display:block}.h2{letter-spacing:-.03em;font-size:clamp(1.5rem,.8rem + 2.5vw,2.25rem);font-weight:700}.h3{letter-spacing:-.02em;font-size:1.125rem;font-weight:600}.lede{color:var(--fg-2);max-width:var(--measure);text-wrap:pretty;font-size:clamp(.9375rem,1.2vw,1.0625rem);line-height:1.75}.eyebrow{font-family:var(--mono);color:var(--teal);text-transform:uppercase;letter-spacing:.1em;font-size:.75rem;font-weight:500}.meta{font-family:var(--mono);color:var(--fg-2);font-variant-numeric:tabular-nums;font-size:.8125rem}.muted{color:var(--fg-2)}.prose{max-width:var(--measure);text-wrap:pretty;line-height:1.75}.prose a,.org a,.figure-note a{color:var(--teal);text-underline-offset:.18em;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition:text-decoration-color .25s}.prose a:hover,.org a:hover,.figure-note a:hover{-webkit-text-decoration-color:var(--teal);text-decoration-color:var(--teal)}.more{margin-top:2rem}a{color:inherit;text-decoration:none}.link{color:var(--teal);align-items:center;gap:.25em;font-weight:600;transition:color .2s;display:inline-flex;position:relative}.link:after{content:"";background:var(--grad-main);transform-origin:0;height:1.5px;transition:transform .35s var(--ease);position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.link:hover:after{transform:scaleX(1)}.link .arrow{transition:transform .25s var(--ease);display:inline-block}.link:hover .arrow{transform:translate(4px)}.btn{border-radius:var(--radius-pill);letter-spacing:-.005em;background:var(--teal);color:#fff;min-height:2.75rem;transition:transform .3s var(--ease-back), box-shadow .3s, background .3s;border:1px solid #0000;align-items:center;gap:.45em;padding:.65em 1.5em;font-size:.875rem;font-weight:600;line-height:1.2;display:inline-flex;box-shadow:0 1px 3px #0003,0 0 0 1px #14b8a64d}.btn:hover{background:var(--teal-soft);box-shadow:0 4px 16px #0003, 0 0 0 1px #14b8a666, 0 0 24px -8px var(--teal-glow);transform:translateY(-1px)}.btn:active{transform:scale(.98)}.btn.ghost{color:var(--fg);box-shadow:none;border:1px solid var(--line-2);background:0 0}.btn.ghost:hover{border-color:var(--teal);background:var(--teal-glow);box-shadow:0 0 20px -6px var(--teal-glow);transform:translateY(-1px)}.wrap{max-width:var(--max);padding-inline:max(var(--gutter), env(safe-area-inset-left)) max(var(--gutter), env(safe-area-inset-right));margin-inline:auto}.band{padding-block:clamp(3.5rem,9vw,7rem)}.band.soft{background:linear-gradient(180deg, transparent, color-mix(in srgb, var(--band) 50%, transparent) 20%, color-mix(in srgb, var(--band) 50%, transparent) 80%, transparent)}.band.tint{background:linear-gradient(135deg, var(--teal-glow), var(--lavender-glow));border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.band.rule{border-top:1px solid var(--line)}.band.tight{padding-top:0}.band .h2{margin-bottom:clamp(1.75rem,4vw,2.75rem)}.actions{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.skip{background:var(--teal);color:#fff;z-index:40;padding:.5rem 1rem;position:absolute;top:0;left:-999px}.skip:focus{top:.5rem;left:.5rem}.glow-card{background:var(--glass);border:1px solid var(--glass-border);border-radius:var(--radius-xl);-webkit-backdrop-filter:blur(16px)saturate(140%);backdrop-filter:blur(16px)saturate(140%);transition:border-color .35s, box-shadow .35s, transform .35s var(--ease);position:relative}.glow-card:hover{border-color:var(--line-2);box-shadow:0 4px 32px #00000026, 0 0 0 1px var(--line)}.site-header{top:var(--header-inset);left:env(safe-area-inset-left,0px);right:env(safe-area-inset-right,0px);width:fit-content;max-width:calc(100% - 2 * var(--header-inset));z-index:30;border-radius:var(--radius-pill);background:var(--pill-bg);border:1px solid var(--line);-webkit-backdrop-filter:blur(20px)saturate(160%);backdrop-filter:blur(20px)saturate(160%);transition:box-shadow .4s var(--ease), border-color .4s;margin-inline:auto;position:fixed}.site-header.scrolled{border-color:var(--line-2);box-shadow:0 2px 20px #00000040}.site-header .wrap{height:var(--header);max-width:none;transition:height .4s var(--ease);align-items:center;gap:.75rem;padding-inline:clamp(.9rem,2.5vw,1.5rem) clamp(.5rem,1.5vw,.75rem);display:flex}.site-header.scrolled .wrap{height:calc(var(--header) - .25rem)}.brand{letter-spacing:-.03em;white-space:nowrap;color:var(--fg);font-weight:700}.site-tools{align-items:center;gap:clamp(.4rem,1.5vw,.75rem);display:flex}.site-nav{white-space:nowrap;align-items:center;gap:.1rem;font-size:.875rem;display:flex}.site-nav a{border-radius:var(--radius-pill);color:var(--fg-2);transition:color .2s, background-color .25s var(--ease);padding:.4em .8em;font-weight:500}.site-nav a:hover{color:var(--fg);background:#ffffff0f}.site-nav a[aria-current=page]{color:var(--teal);background:var(--teal-glow);font-weight:600}.theme{border-radius:var(--radius-pill);width:2.125rem;height:2.125rem;color:var(--fg-2);border:1px solid var(--line);transition:color .2s, background .3s, border-color .3s, transform .4s var(--ease-back);background:0 0;flex:none;justify-content:center;align-items:center;display:inline-flex}.theme:hover{color:var(--teal);background:var(--teal-glow);border-color:#14b8a64d;transform:rotate(20deg)}.theme:active{transform:scale(.9)rotate(-10deg)}.theme svg{width:1.0625rem;height:1.0625rem}.theme .sun{display:var(--sun)}.theme .moon{display:var(--moon)}@media (max-width:30rem){.brand{font-size:.9375rem}.brand .last{display:none}.site-nav{font-size:.8125rem}.site-nav a{padding:.35em .55em}}@media (max-width:22.5rem){.site-header{max-width:calc(100% - 1rem);top:.5rem}.site-header .wrap{gap:.5rem;padding-inline:.75rem .4rem}}.site-footer{border-top:1px solid var(--line);color:var(--fg-3);padding-block:2.5rem;font-size:.8125rem}.site-footer .wrap{flex-wrap:wrap;justify-content:space-between;gap:1rem 2rem;display:flex}.site-footer nav{flex-wrap:wrap;gap:1.25rem;display:flex}.site-footer a{transition:color .2s}.site-footer a:hover{color:var(--teal)}.hero{padding-block:clamp(5rem,14vw,9rem) clamp(4rem,10vw,6rem)}.hero.small{padding-block:clamp(4rem,10vw,6rem) clamp(3.5rem,8vw,5rem)}.hero .eyebrow{border-radius:var(--radius-pill);background:var(--teal-glow);border:1px solid #14b8a633;align-items:center;gap:.5rem;margin-bottom:1.25rem;padding:.3em .9em;font-size:.75rem;display:inline-flex}.hero .display{max-width:22ch;margin-block:0 1.25rem}.hero .lede{margin-bottom:2rem}.hero .wrap>:last-child{margin-bottom:0}.links-list{justify-items:start;gap:.75rem;font-size:1.125rem;display:grid}.icon{width:var(--icon,3.5rem);height:var(--icon,3.5rem);background:var(--band);box-shadow:inset 0 0 0 1px var(--line);object-fit:cover;border-radius:22.5%;flex:none;display:block}.apps{border-radius:var(--radius-lg);background:var(--glass);border:1px solid var(--glass-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);flex-wrap:wrap;align-items:center;gap:.75rem;width:fit-content;max-width:100%;margin-top:2.5rem;padding:.75rem 1rem;display:flex}.apps a{transition:transform .4s var(--ease-back);border-radius:22.5%;display:block}.apps .icon{--icon:2.75rem}.apps-note{margin-top:.65rem;font-size:.75rem}.figure{letter-spacing:-.05em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;background:var(--grad-text);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:clamp(3rem,1rem + 10vw,9rem);font-weight:800;line-height:.9}.figure-note{max-width:32rem;color:var(--fg-2);text-wrap:pretty;margin-top:1.25rem;font-size:1.0625rem}.entries{border-top:1px solid var(--line)}.row,.entry{gap:1rem 3rem;padding:2rem 0;display:grid}.entry{border-bottom:1px solid var(--line)}.rows{gap:1rem;display:grid}.row{border-radius:var(--radius-xl);background:var(--glass);border:1px solid var(--glass-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transition:border-color .35s, box-shadow .35s, transform .3s var(--ease);padding:clamp(1.25rem,3.5vw,2rem);position:relative}.row .title{align-items:center;gap:1rem;display:flex}.row h3{letter-spacing:-.025em;font-size:1.375rem;font-weight:700}.row .headline{color:var(--fg-2);margin:.65rem 0;line-height:1.5}.row .meta,.entry .meta{line-height:1.6;display:block}.row ul{max-width:var(--measure);gap:.6rem;list-style:none;display:grid}.row ul li:before{content:"→ ";color:var(--teal);font-weight:500}.row .foot{flex-wrap:wrap;align-items:baseline;gap:1.5rem;margin-top:1rem;display:flex}.row .foot .link{color:var(--teal)}.entry h3{font-size:1.125rem;font-weight:700}.entry .org{color:var(--fg-2);margin:.25rem 0 .5rem}.entry ul{max-width:var(--measure);gap:.5rem;padding-left:1.1rem;display:grid}.entry .note{margin-top:.85rem}@media (hover:hover){.row:hover{border-color:var(--line-2);transform:translateY(-2px);box-shadow:0 4px 24px #00000026}.apps a:hover{transform:translateY(-4px)scale(1.08)}}@media (min-width:48rem){.row,.entry{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}.entry{padding-block:2.5rem}.row .headline{margin-top:.75rem}}.apps a:active{transform:scale(.92)}.list2{counter-reset:item;gap:2rem 3rem;display:grid}.list2>div{counter-increment:item}.list2>div:before{content:counter(item, decimal-leading-zero);font-family:var(--mono);color:var(--teal);letter-spacing:.06em;margin-bottom:.5rem;font-size:.75rem;font-weight:500;display:block}.list2 h3{margin-bottom:.3rem;font-size:1.0625rem;font-weight:700}.list2 p{color:var(--fg-2);font-size:.9375rem}@media (min-width:48rem){.list2{grid-template-columns:1fr 1fr}}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:.8rem 1rem .8rem 0}th{color:var(--fg-3);text-transform:uppercase;letter-spacing:.08em;font-size:.75rem;font-weight:600;font-family:var(--mono)}td.num{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.875rem}td.note{color:var(--fg-2)}td .app{align-items:center;gap:.75rem;display:inline-flex}td .app .icon{--icon:1.75rem}@media (max-width:40rem){table.play thead{display:none}table.play tr{border-bottom:1px solid var(--line);grid-template-columns:1fr auto;gap:0 1rem;padding-block:.8rem;display:grid}table.play td{border:0;padding:0}table.play td.note{grid-column:1/-1;margin-top:.2rem;font-size:.875rem}}dl.skills{max-width:var(--measure);gap:1rem;display:grid}dl.skills dt{font-weight:700}dl.skills dd{color:var(--fg-2);margin:0}@media (min-width:40rem){dl.skills{grid-template-columns:11rem 1fr;gap:1rem 1.5rem;max-width:none}}.display .email{letter-spacing:-.03em;overflow-wrap:anywhere;background:var(--grad-text);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:clamp(1.5rem,.5rem + 4.5vw,3.5rem);line-height:1.1}html.js [data-reveal]{opacity:0;transition:opacity .6s var(--ease), transform .6s var(--ease);transition-delay:calc(var(--i,0) * 70ms);transform:translateY(20px)}html.js [data-reveal].in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}html.js [data-reveal]{opacity:1;transition:none;transform:none}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}@media (prefers-reduced-transparency:reduce){.site-header{background:var(--bg);-webkit-backdrop-filter:none}.row,.apps{background:var(--band);-webkit-backdrop-filter:none}}@media print{@page{margin:18mm}.site-header,.site-footer,.no-print{display:none!important}body{color:#000;background:#fff;font-size:10.5pt}main{padding-top:0}.hero,.hero.small{padding-block:0 1rem}body:before,body:after{display:none}.band,.band.soft,.band.tint{background:0 0;border:none;padding-block:1rem}.band .h2{margin-bottom:.75rem}.entry{grid-template-columns:1fr;gap:.25rem;padding-block:.75rem}html.js [data-reveal]{opacity:1;transform:none}a[href^=http]:after{content:" (" attr(href) ")";color:#555;font-size:.85em}.figure,.display.brand .name-last,.display .email{-webkit-text-fill-color:unset;color:#000;background:0 0}}
