@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/034d78ad42e9620c-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/fe0777f1195381cb-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/eafabf029ad39a43-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/db911767852bc875-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/f10b8e9d91f3edcb-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/8888a3826f4a3af4-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/29e7bbdce9332268-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/c3bc380753a8436c-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/0484562807a97172-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins Fallback;src:local("Arial");ascent-override:93.62%;descent-override:31.21%;line-gap-override:8.92%;size-adjust:112.16%}.__className_cc80f9{font-family:Poppins,Poppins Fallback;font-style:normal}.__variable_cc80f9{--font-body:"Poppins","Poppins Fallback"}@font-face{font-family:Lobster Two;font-style:italic;font-weight:700;font-display:swap;src:url(/_next/static/media/5ee457a0da602c9f-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Lobster Two Fallback;src:local("Arial");ascent-override:122.47%;descent-override:30.62%;line-gap-override:0.00%;size-adjust:81.65%}.__className_82e2b2{font-family:Lobster Two,Lobster Two Fallback;font-weight:700;font-style:italic}.__variable_82e2b2{--font-script:"Lobster Two","Lobster Two Fallback"}:root{--bg:#12141a;--card:#16191f;--line:#262a33;--text:#f2f4f7;--muted:#a3a9b5;--dim:#6f7684;--chip-bg:#1b2231;--chip-text:#8ea0c4;--green:#3fb950;color-scheme:dark}*{box-sizing:border-box}body{background:var(--bg);color:var(--muted);font-family:var(--font-body),system-ui,-apple-system,"Segoe UI",sans-serif;font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased}body,h1,h2,h3,h4,p,ul{margin:0}ul{padding:0;list-style:none}a{color:inherit;text-decoration:none}a:focus-visible{outline:2px solid var(--chip-text);outline-offset:3px;border-radius:4px}strong{color:var(--text);font-weight:500}.page{max-width:920px;margin:0 auto;padding-inline:clamp(16px,4vw,32px);padding-block:clamp(56px,10vh,120px) 56px}.hero{display:flex;align-items:center;gap:24px;flex-wrap:wrap}.hero img{width:104px;height:104px;border-radius:50%;border:1px solid var(--line);object-fit:cover}.hero h1{color:var(--text);font-size:clamp(30px,4.5vw,40px);font-weight:600;line-height:1.15}.hero .tag{margin-top:6px;font-size:18px;color:var(--muted)}.section{padding-block:44px;border-top:1px solid var(--line)}.section:first-of-type{border-top:0}.section h2{font-family:var(--font-script),"Brush Script MT",cursive;font-style:italic;font-weight:700;color:var(--text);font-size:clamp(28px,3.4vw,34px);line-height:1.2;margin-bottom:22px}.section h2 small{font-size:.62em;color:var(--muted);margin-left:10px}.stack{display:grid;grid-gap:18px;gap:18px}.about p{font-size:17.5px}.links{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:22px}.links a{display:inline-flex;align-items:center;gap:7px;color:var(--muted);transition:color .15s}.links a:hover{color:var(--text)}.links svg{width:17px;height:17px;fill:currentColor;flex:none}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:22px 22px 20px}.card h3{color:var(--text);font-size:21px;font-weight:500;line-height:1.3;display:flex;align-items:center;gap:10px}.card h3 svg{width:16px;height:16px;fill:var(--dim);flex:none}.card h3 a:hover{text-decoration:underline;text-underline-offset:4px;-webkit-text-decoration-color:var(--dim);text-decoration-color:var(--dim)}.card>p{margin-top:8px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.chips li{background:var(--chip-bg);color:var(--chip-text);font-size:12.5px;font-weight:500;padding:4px 10px;border-radius:6px;line-height:1.4}.project{display:grid;grid-gap:18px;gap:18px}@media (min-width:720px){.project{grid-template-columns:280px minmax(0,1fr);align-items:start}}.shot{display:block;aspect-ratio:16/10;max-width:100%;border-radius:8px;overflow:hidden;border:1px solid var(--line);background:var(--chip-bg)}.shot img{width:100%;height:100%;object-fit:cover;object-position:top;display:block;transition:transform .3s}.placeholder{height:100%;display:grid;place-items:center;font-family:var(--font-script),cursive;font-style:italic;font-weight:700;font-size:30px;color:var(--chip-text);background:radial-gradient(120% 90% at 20% 0,#232c40 0,var(--chip-bg) 60%)}.project:hover .shot img{transform:scale(1.03)}.more,.project>div>p{margin-top:8px}.more{display:flex;justify-content:center}.more a{display:inline-flex;align-items:center;gap:8px;color:var(--muted);padding:10px 14px;border-radius:8px;transition:color .15s,background .15s}.more a:hover{color:var(--text);background:var(--card)}.more svg{width:18px;height:18px;fill:currentColor}.org{display:flex;align-items:center;gap:14px}.logo{width:52px;height:52px;border-radius:10px;background:var(--chip-bg);color:var(--chip-text);display:grid;place-items:center;font-weight:600;flex:none}.logo,.org h3{font-size:20px}.org .when{font-size:15px;color:var(--dim);margin-top:2px}.roles{margin-top:18px;margin-left:26px;padding-left:26px;border-left:2px solid var(--line);display:grid;grid-gap:18px;gap:18px}.role{position:relative}.role:before{content:"";position:absolute;left:-33px;top:9px;width:12px;height:12px;border-radius:50%;background:var(--dim);border:2px solid var(--card)}.role h4{color:var(--text);font-weight:500;font-size:18px}.role .meta{color:var(--dim);font-size:15px;margin-top:2px}.role .lead{margin-top:12px;color:var(--text);font-size:16px}.role ul{margin-top:10px;display:grid;grid-gap:6px;gap:6px;padding-left:18px;list-style:disc;font-size:15.5px}.role li::marker{color:var(--dim)}.oss h3 svg{fill:var(--green);width:20px;height:20px}.prs{margin-top:18px;border-top:1px solid var(--line);display:grid}.prs li{display:grid;grid-template-columns:1fr;grid-gap:2px 18px;gap:2px 18px;padding-block:10px;border-bottom:1px solid var(--line);font-size:15px}@media (min-width:600px){.prs li{grid-template-columns:78px 1fr auto;align-items:baseline}}.prs .date{color:var(--dim);font-size:13.5px}.prs a{color:var(--text);font-weight:400}.prs a:hover{text-decoration:underline;text-underline-offset:4px;-webkit-text-decoration-color:var(--dim);text-decoration-color:var(--dim)}.prs .repo{color:var(--dim);font-size:13px}.group{margin-top:22px}.group:first-of-type{margin-top:0}.group h3{color:var(--muted);font-size:17px;font-weight:400;margin-bottom:12px}.pills{display:flex;flex-wrap:wrap;gap:10px}.pills li{border:1px solid var(--line);border-radius:999px;padding:9px 18px;color:var(--text);font-size:15px;line-height:1.3;transition:border-color .15s}.pills li:hover{border-color:var(--dim)}footer{border-top:1px solid var(--line);padding-top:28px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;color:var(--dim);font-size:14px}@media (prefers-reduced-motion:reduce){*{transition:none!important}}