:root{--bg:oklch(97.5% .005 85);--surface:oklch(99.5% .003 85);--sunk:oklch(94.5% .007 85);--ink:oklch(21% .01 85);--ink-2:oklch(42% .01 85);--mute:oklch(56% .01 85);--line:oklch(21% .01 85/.1);--line-2:oklch(21% .01 85/.2);--accent:oklch(64% .2 37);--ok:oklch(58% .14 150);--warn:oklch(70% .14 75);--display:"Bricolage Grotesque", system-ui, sans-serif;--body:"Geist", system-ui, sans-serif;--mono:"Geist Mono", ui-monospace, monospace;--wrap:1200px;--gut:clamp(16px, 4vw, 40px);--r:14px;--ease:cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:80px}body{background:var(--bg);color:var(--ink);font:17px/1.55 var(--body);-webkit-font-smoothing:antialiased}a{color:inherit}img{max-width:100%;display:block}.wrap{max-width:var(--wrap);padding:0 var(--gut);margin:0 auto}.mono{font-family:var(--mono)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.top{z-index:10;backdrop-filter:saturate(1.4)blur(12px);border-bottom:1px solid var(--line);background:oklch(97.5% .005 85/.88);position:sticky;top:0}.top .wrap{align-items:center;gap:28px;height:64px;display:flex}.logo{font-family:var(--display);letter-spacing:-.02em;align-items:center;gap:10px;font-size:18px;font-weight:700;text-decoration:none;display:flex}.logo .sq{background:var(--ink);width:30px;height:30px;color:var(--bg);letter-spacing:-.04em;border-radius:8px;justify-content:center;align-items:center;font-size:15px;font-weight:800;display:flex}.logo .sq sup{color:var(--accent);margin:-8px 0 0 1px;font-size:9px}.menu{gap:4px;margin-left:auto;list-style:none;display:flex}.menu a{white-space:nowrap;color:var(--ink-2);border-radius:8px;padding:8px 12px;font-size:15px;text-decoration:none;display:block}.menu a:hover,.menu a[aria-current]{color:var(--ink);background:var(--sunk)}.lang{font-family:var(--mono);color:var(--mute);white-space:nowrap;font-size:13px;text-decoration:none}.lang b{color:var(--ink);font-weight:500}.btn{border:1px solid var(--line-2);background:var(--surface);cursor:pointer;transition:background .2s, border-color .2s, transform .2s var(--ease);border-radius:10px;align-items:center;gap:8px;padding:10px 16px;font-size:15px;font-weight:500;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--ink)}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}.btn.primary:hover{background:oklch(32% .01 85)}.pill{font-family:var(--mono);background:var(--sunk);color:var(--ink-2);white-space:nowrap;border-radius:99px;align-items:center;gap:6px;padding:3px 9px;font-size:12px;display:inline-flex}.pill:before{content:"";background:var(--mute);border-radius:50%;width:7px;height:7px}.pill.published{color:oklch(42% .12 150);background:oklch(58% .14 150/.12)}.pill.published:before{background:var(--ok)}.pill.building{color:oklch(45% .1 70);background:oklch(70% .14 75/.16)}.pill.building:before{background:var(--warn)}.pill.paused:before{border:1.5px solid var(--mute);background:0 0}.pmark{object-fit:cover;border-radius:24%;flex:none}.pmark.glyph{background:var(--c);color:oklch(99% .005 85);font-family:var(--display);letter-spacing:-.03em;place-items:center;font-size:.85em;font-weight:800;display:grid}.spark{align-items:flex-end;gap:2px;display:flex}.spark i{background:var(--line-2);border-radius:1.5px;flex:1;min-width:2px}.foot{border-top:1px solid var(--line);color:var(--mute);margin-top:40px;padding:28px 0 40px;font-size:14px}.foot .wrap{flex-wrap:wrap;justify-content:space-between;gap:20px;display:flex}@media (width<=960px){.top .wrap{flex-wrap:wrap;gap:8px 14px;height:auto;padding-top:12px;padding-bottom:6px}.top .lang{margin-left:auto}.menu{scrollbar-width:none;order:3;width:100%;margin:0 -12px;overflow-x:auto}html{scroll-padding-top:116px}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.intro{grid-template-columns:1.05fr 1fr;align-items:start;gap:clamp(28px,5vw,72px);padding:clamp(40px,7vw,88px) 0 clamp(48px,7vw,96px);display:grid}.eyebrow{font-family:var(--mono);color:var(--mute);align-items:center;gap:10px;margin-bottom:22px;font-size:13px;display:flex}.eyebrow .dot{background:var(--ok);border-radius:50%;width:8px;height:8px;box-shadow:0 0 0 4px oklch(58% .14 150/.18)}h1{font-family:var(--display);letter-spacing:-.035em;font-size:clamp(34px,4vw,54px);font-weight:700;line-height:1.06}h1 span{color:var(--mute)}.intro p.lede{color:var(--ink-2);max-width:48ch;margin-top:22px;font-size:clamp(17px,1.4vw,19px)}.intro .ctas{flex-wrap:wrap;gap:10px;margin-top:28px;display:flex}.seek{border-top:1px solid var(--line);grid-template-columns:auto 1fr;gap:6px 16px;margin-top:32px;padding-top:20px;font-size:15px;display:grid}.seek dt{font-family:var(--mono);color:var(--mute);padding-top:2px;font-size:12.5px}.now{background:var(--surface);border:1px solid var(--line);box-shadow:0 1px 0 var(--line), 0 24px 48px -32px oklch(21% .01 85/.25);border-radius:18px;padding:22px 22px 18px}.now header{justify-content:space-between;align-items:baseline;margin-bottom:10px;display:flex}.now h2{font-family:var(--display);letter-spacing:-.02em;font-size:20px;font-weight:700}.now header span{font-family:var(--mono);color:var(--mute);font-size:12px}.now ul{list-style:none}.now li a{border-radius:10px;grid-template-columns:30px 1fr auto;align-items:center;gap:12px;margin:0 -8px;padding:10px 8px;text-decoration:none;transition:background .2s;display:grid}.now li a:hover{background:var(--sunk)}.now li+li a{border-top:1px solid var(--line);border-radius:0}.now li+li a:hover{border-radius:10px}.now .pmark{font-size:12px}.now b{font-size:15px;font-weight:600}.now small{color:var(--ink-2);font-size:13.5px;line-height:1.35;display:block}.now time{font-family:var(--mono);color:var(--mute);white-space:nowrap;font-size:12px}.chart{border-top:1px solid var(--line);margin-top:16px;padding-top:16px}.chart .bars{align-items:flex-end;gap:3px;height:92px;display:flex}.chart .col{flex-direction:column-reverse;flex:1;justify-content:flex-start;gap:1px;height:100%;display:flex}.chart .col i{border-radius:1.5px;min-height:0;display:block}.chart .axis{font-family:var(--mono);color:var(--mute);justify-content:space-between;margin-top:8px;font-size:11.5px;display:flex}.sec{border-top:1px solid var(--line);padding:clamp(48px,7vw,88px) 0}.sec-head{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:24px;margin-bottom:28px;display:flex}h2.title{font-family:var(--display);letter-spacing:-.03em;font-size:clamp(30px,3.4vw,44px);font-weight:700;line-height:1.05}h2.title small{font-family:var(--mono);color:var(--mute);letter-spacing:0;margin-left:10px;font-size:14px;font-weight:400}.sec-head p{color:var(--ink-2);max-width:46ch}.filters{flex-wrap:wrap;gap:8px;margin-bottom:22px;display:flex}.filters button{font:500 14px var(--body);border:1px solid var(--line-2);color:var(--ink-2);cursor:pointer;background:0 0;border-radius:99px;padding:8px 14px;transition:all .2s}.filters button:hover{color:var(--ink);border-color:var(--ink-2)}.filters button[aria-pressed=true]{background:var(--ink);color:var(--bg);border-color:var(--ink)}.filters button span{font-family:var(--mono);opacity:.6;margin-left:4px;font-size:12px}.grid{grid-template-columns:repeat(3,1fr);grid-auto-flow:dense;gap:14px;display:grid}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);transition:border-color .25s, transform .35s var(--ease), box-shadow .35s var(--ease);flex-direction:column;gap:14px;padding:20px;text-decoration:none;display:flex;position:relative;overflow:hidden}.card:hover{border-color:var(--c);box-shadow:0 18px 36px -24px var(--c);transform:translateY(-2px)}.card .head{align-items:center;gap:12px;display:flex}.card h3{font-family:var(--display);letter-spacing:-.02em;font-size:21px;font-weight:700;line-height:1.1}.card .kind{color:var(--mute);font-size:13px}.card .head>div{flex:1;min-width:0}.card .head .pill{flex:none;align-self:flex-start}.card p{color:var(--ink-2);font-size:15.5px;line-height:1.45}.card .doing{color:var(--ink);background:var(--sunk);border-radius:8px;padding:8px 10px;font-size:13.5px;line-height:1.35}.card .doing:before{content:attr(data-prefix) " · ";font-family:var(--mono);color:var(--mute);font-size:12px}.card footer{font-family:var(--mono);color:var(--mute);grid-template-columns:1fr auto;align-items:end;gap:12px;margin-top:auto;font-size:12px;display:grid}.card.wide{flex-direction:row;grid-column:span 2;gap:24px}.card .body{flex-direction:column;flex:1;gap:14px;min-width:0;display:flex}.card.wide .shots{background:color-mix(in oklch, var(--c) 10%, var(--surface));flex:0 0 44%;justify-content:center;align-items:flex-end;gap:10px;margin:-20px -20px -20px 0;padding:20px 20px 0 0;display:flex;overflow:hidden}.card.wide .shots img{width:46%;transition:transform .5s var(--ease);border-radius:10px 10px 0 0;transform:translateY(18%)}.card.wide .shots img+img{transform:translateY(30%)}.card.wide:hover .shots img{transform:translateY(10%)}.card.wide:hover .shots img+img{transform:translateY(20%)}.card[hidden]{display:none}.cli{font-family:var(--mono);background:var(--ink);color:oklch(90% .01 85);border-radius:8px;width:fit-content;padding:7px 10px;font-size:12.5px}.cli:before{content:"$ ";color:var(--accent)}.dodont{grid-template-columns:1fr 1fr;gap:14px;display:grid}.box{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:24px}.box h3{font-family:var(--display);letter-spacing:-.02em;align-items:center;gap:10px;margin-bottom:14px;font-size:22px;font-weight:700;display:flex}.box h3 .ic{border-radius:8px;place-items:center;width:28px;height:28px;font-size:16px;display:grid}.box.yes .ic{color:oklch(45% .13 150);background:oklch(58% .14 150/.14)}.box.no .ic{color:oklch(50% .17 25);background:oklch(60% .18 25/.12)}.box ul{gap:0;list-style:none;display:grid}.box li{border-top:1px solid var(--line);gap:2px;padding:12px 0;display:grid}.box li b{font-size:16px;font-weight:600}.box li span{color:var(--ink-2);font-size:14.5px}.box li em{font-style:normal;font-family:var(--mono);color:var(--mute);font-size:12px}.contact{grid-template-columns:1.2fr 1fr;gap:14px;display:grid}.mailbox{background:var(--ink);color:var(--bg);border-radius:18px;flex-direction:column;gap:18px;padding:clamp(24px,4vw,40px);display:flex}.mailbox h2{font-family:var(--display);letter-spacing:-.03em;font-size:clamp(28px,3vw,40px);font-weight:700;line-height:1.05}.mailbox p{color:oklch(80% .01 85);max-width:40ch}.mailrow{flex-wrap:wrap;gap:8px;margin-top:auto;display:flex}.mailrow a{font-family:var(--mono);color:var(--bg);background:oklch(30% .01 85);border-radius:10px;padding:12px 16px;font-size:clamp(15px,1.6vw,19px);text-decoration:none}.mailrow button{font:500 14px var(--body);color:var(--bg);cursor:pointer;background:0 0;border:1px solid oklch(40% .01 85);border-radius:10px;padding:12px 16px}.mailrow button:hover{border-color:var(--bg)}.elsewhere{gap:10px;display:grid}.elsewhere a{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);justify-content:space-between;align-items:center;padding:18px 20px;font-weight:500;text-decoration:none;transition:border-color .2s;display:flex}.elsewhere a:hover{border-color:var(--ink)}.elsewhere a span{font-family:var(--mono);color:var(--mute);font-size:13px;font-weight:400}@media (width<=980px){.intro{grid-template-columns:1fr}.grid{grid-template-columns:1fr 1fr}.contact,.dodont{grid-template-columns:1fr}}@media (width<=640px){.grid{grid-template-columns:1fr}.card.wide{flex-direction:column;grid-column:auto}.card.wide .shots{height:220px;margin:0 -20px -20px;padding:16px 16px 0}}.crumbs{color:var(--mute);justify-content:space-between;align-items:center;gap:16px;padding:22px 0;font-size:14px;display:flex}.crumbs a{color:var(--ink-2);text-decoration:none}.crumbs a:hover{color:var(--ink)}.crumbs nav{gap:8px;display:flex}.crumbs nav a{border:1px solid var(--line-2);border-radius:8px;padding:6px 12px;font-size:13.5px}.hero{grid-template-columns:auto 1fr auto;align-items:center;gap:22px;padding:18px 0 30px;display:grid}.hero h1{font-family:var(--display);letter-spacing:-.04em;font-size:clamp(40px,5.4vw,72px);font-weight:800;line-height:.98}.hero p{color:var(--ink-2);max-width:52ch;margin-top:8px;font-size:clamp(17px,1.5vw,20px)}.hero .meta{font-family:var(--mono);color:var(--mute);flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;font-size:13px;display:flex}.links{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.band{background:var(--c);border-radius:6px;height:6px;margin-bottom:28px}.gallery{scroll-snap-type:x mandatory;gap:14px;margin-bottom:36px;padding:4px 2px 18px;display:flex;overflow-x:auto}.gallery img{scroll-snap-align:start;border:1px solid var(--line);background:var(--surface);border-radius:18px;width:auto;height:min(62vh,560px)}.pbody{grid-template-columns:1fr 340px;align-items:start;gap:clamp(24px,4vw,56px);padding-bottom:40px;display:grid}.pbody h2{font-family:var(--display);letter-spacing:-.02em;margin:0 0 12px;font-size:24px;font-weight:700}.pbody section+section{margin-top:40px}.pbody .about{color:var(--ink-2);max-width:62ch;font-size:18px}.state{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.state>div{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:18px}.state h3{font-family:var(--mono);color:var(--mute);text-transform:uppercase;letter-spacing:.05em;align-items:center;gap:8px;margin-bottom:10px;font-size:12.5px;font-weight:500;display:flex}.state h3:before{content:"";border-radius:50%;width:10px;height:10px}.state .done h3:before{background:var(--ok)}.state .doing h3:before{background:var(--warn)}.state .next h3:before{border:1.5px solid var(--mute)}.state ul{gap:8px;font-size:15px;line-height:1.4;list-style:none;display:grid}.state li{padding-left:18px;position:relative}.state .done li:before{content:"✓";color:var(--ok);font-weight:600;position:absolute;left:0}.state .doing li:before{content:"◐";color:var(--warn);position:absolute;left:0}.state .next li:before{content:"○";color:var(--mute);position:absolute;left:0}.state li.blocked{color:oklch(50% .17 25)}.state .empty{color:var(--mute);font-size:14px}aside.facts{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:22px;position:sticky;top:88px}.facts dl{grid-template-columns:auto 1fr;gap:10px 16px;font-size:14.5px;display:grid}.facts dt{font-family:var(--mono);color:var(--mute);padding-top:2px;font-size:12.5px}.facts .tags{flex-wrap:wrap;gap:6px;display:flex}.facts .tags span{font-family:var(--mono);background:var(--sunk);border-radius:6px;padding:3px 8px;font-size:12px}.facts .act{border-top:1px solid var(--line);margin-top:20px;padding-top:18px}.facts .act h3{font-family:var(--mono);color:var(--mute);margin-bottom:10px;font-size:12.5px;font-weight:500}.facts .act .axis{font-family:var(--mono);color:var(--mute);justify-content:space-between;margin-top:6px;font-size:11.5px;display:flex}.cli-lg{font-family:var(--mono);background:var(--ink);color:oklch(90% .01 85);border-radius:10px;padding:12px 14px;font-size:14px;display:block}.cli-lg:before{content:"$ ";color:var(--accent)}.pager{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:14px;padding:32px 0 0;display:grid}.pager a{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);align-items:center;gap:14px;padding:18px;text-decoration:none;transition:border-color .2s;display:flex}.pager a:hover{border-color:var(--c)}.pager a:last-child{text-align:right;justify-content:flex-end}.pager small{font-family:var(--mono);color:var(--mute);font-size:12px;display:block}.pager b{font-family:var(--display);letter-spacing:-.02em;font-size:20px}@media (width<=900px){.hero{grid-template-columns:auto 1fr}.links{grid-column:1/-1;justify-content:flex-start}.pbody{grid-template-columns:1fr}aside.facts{position:static}.state{grid-template-columns:1fr}}@media (width<=560px){.crumbs nav{display:none}.pager{grid-template-columns:1fr}}.career{grid-template-columns:1fr 320px;align-items:start;gap:clamp(24px,4vw,56px);display:grid}.jobs{border-top:1px solid var(--line-2);list-style:none}.jobs li{border-bottom:1px solid var(--line);grid-template-columns:150px 1fr;gap:6px 24px;padding:22px 0;display:grid}.jobs time{font-family:var(--mono);color:var(--mute);padding-top:4px;font-size:13px}.jobs li.current time{color:oklch(42% .12 150)}.jobs h3{font-family:var(--display);letter-spacing:-.02em;font-size:21px;font-weight:700;line-height:1.15}.jobs h3 span{font-family:var(--body);color:var(--mute);letter-spacing:0;margin-left:8px;font-size:15px;font-weight:400}.jobs .role{color:var(--ink);font-size:15px;font-weight:500}.jobs p{color:var(--ink-2);grid-column:2;max-width:64ch;font-size:15.5px}.edu{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:22px;position:sticky;top:88px}.edu h3{font-family:var(--mono);color:var(--mute);margin-bottom:6px;font-size:12.5px;font-weight:500}.edu div{border-top:1px solid var(--line);padding:12px 0;font-size:15px}.edu div:first-of-type{border-top:0}.edu b{font-weight:600;display:block}.edu small{color:var(--ink-2);font-size:14px;display:block}.edu time{font-family:var(--mono);color:var(--mute);font-size:12px}.edu .cvlink{justify-content:center;width:100%;margin-top:12px}@media (width<=900px){.career{grid-template-columns:1fr}.edu{position:static}.jobs li{grid-template-columns:1fr}.jobs p{grid-column:auto}}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.changes-note{color:var(--mute);margin:-6px 0 12px;font-size:14px}.changes{border-top:1px solid var(--line);list-style:none}.changes li{border-bottom:1px solid var(--line);grid-template-columns:120px 1fr;gap:16px;padding:12px 0;font-size:15.5px;display:grid}.changes time{font-family:var(--mono);color:var(--mute);padding-top:3px;font-size:12.5px}.changes a{text-decoration-color:var(--line-2);text-underline-offset:3px}.changes a:hover{text-decoration-color:currentColor}@media (width<=560px){.changes li{grid-template-columns:1fr;gap:2px}}
