@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/roboto-mono-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/roboto-mono-latin-ext-400-normal.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--bg: #e7e7e7;--ink: #0e0e0e;--line: #9e9e9e;--speed: .25s;--trans-timing: cubic-bezier(.65,0,.35,1)}:root.dark{--bg: #0E0E0E;--ink: #e7e7e7;--line: #2a2a30}*{box-sizing:border-box}html{margin:0;min-height:100%;background:var(--bg);scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--ink) transparent}body{margin:0;min-height:100vh;display:flex;flex-direction:column;font-family:Roboto Mono,monospace;background:var(--bg);color:var(--ink);overflow-x:hidden}body.no-page-scroll{overflow-y:hidden}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--ink);border:3px solid var(--bg);border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--line)}a{color:inherit;text-decoration:none}a,button,[role=button],label,select,input[type=submit],input[type=checkbox],input[type=radio]{cursor:pointer}.portfolio-page{width:100%;min-height:100vh;margin-top:auto;margin-bottom:auto;background:var(--bg)}.portfolio-canvas{max-width:1440px;margin:0 auto;padding:16px 12px 24px}.portfolio-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}.brand{margin:0;font-family:Roboto Mono,monospace;font-size:clamp(22px,6vw,32px);font-weight:400;letter-spacing:-2px;line-height:1.2;white-space:nowrap}.header-links{display:flex;align-items:center;gap:24px;font-size:14px;line-height:1}.header-icon-link{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px}.theme-icon{display:block;position:relative;width:24px;height:24px}.theme-icon-body{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:2px solid var(--ink);transition:background var(--speed) var(--trans-timing)}html:not(.dark) .theme-icon-body{background:var(--ink)}html.dark .theme-icon-body{background:transparent}.theme-icon-crescent{position:absolute;width:20px;height:20px;border-radius:50%;background:var(--bg);top:2px;left:8px;transition:transform var(--speed) var(--trans-timing),opacity var(--speed) var(--trans-timing)}html.dark .theme-icon-crescent{transform:scale(0);opacity:0}.theme-icon-ray{position:absolute;top:50%;left:50%;width:2px;height:7px;margin-left:-1px;margin-top:-3px;border-radius:1px;background:var(--ink);transform:rotate(calc(var(--r) * 1deg)) translateY(-14px);transition:transform var(--speed) var(--trans-timing),opacity var(--speed) var(--trans-timing)}html:not(.dark) .theme-icon-ray{transform:rotate(calc(var(--r) * 1deg)) translateY(-14px) scale(0);opacity:0}html.dark .theme-icon-ray{transform:rotate(calc(var(--r) * 1deg)) translateY(-14px) scale(1);opacity:1}.layout-grid{display:grid;grid-template-columns:1fr;gap:0;width:100%}.hero-card,.work-card,.about-card,.contact-card,.cv-card,.social-card{background:var(--bg);border:1px solid var(--line)}.hero-card{position:relative;padding:20px 16px;display:flex;flex-direction:column;justify-content:center;gap:20px}.hero-title{margin:0;font-size:clamp(44px,9vw,56px);font-weight:400;letter-spacing:-2px;line-height:1.32}.hero-portrait{display:block;width:min(314px,100%);height:auto;align-self:flex-end;aspect-ratio:1 / 1;object-fit:cover;clip-path:polygon(14% 0,100% 0,100% 86%,86% 100%,0 100%,0 14%)}.hero-bio{margin:0;font-size:clamp(16px,4vw,20px);line-height:1.35;max-width:100%}.hero-roles{width:100%;display:flex;flex-direction:column;gap:12px}.hero-role{display:grid;grid-template-columns:minmax(140px,1fr) minmax(110px,1fr) auto;align-items:center;gap:8px;font-size:clamp(13px,3.5vw,15px);line-height:1.3}.hero-role span:first-child{min-width:0}.hero-role span:nth-child(2){min-width:0}.hero-role-year{font-family:Roboto Mono,monospace;opacity:.5}.hero-dot{display:none}.work-card{display:flex;flex-direction:column;position:relative;overflow:hidden}.accordion-item{border-bottom:1px solid var(--line);cursor:pointer;overflow:clip;transition:background-color .3s}.accordion-item:hover{background:#00000008}.open-source-icons{display:flex;flex-direction:column;gap:20px;padding:12px 0}.os-row{display:flex;align-items:center;gap:16px}.os-label{font-size:13px;opacity:.5;min-width:48px;text-transform:uppercase;letter-spacing:1px}.os-icons{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.os-icons a{display:inline-flex;align-items:center;transition:opacity .2s}.open-source-icons a[aria-label*=npm] svg{width:74px;height:auto}.open-source-icons a[aria-label*=GitHub] svg{width:42px;height:42px}.os-icons a:hover{opacity:.7}.accordion-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px}.accordion-header h2{margin:0}.accordion-header p{margin:0;font-size:clamp(18px,5vw,25px);font-weight:400;line-height:1.32}.accordion-arrow{display:inline-flex;align-items:center;transition:transform .35s var(--trans-timing)}.accordion-actions{display:flex;align-items:center;gap:16px}.accordion-view{font-size:20px;color:var(--ink);text-decoration:underline;text-underline-offset:4px;opacity:0;transform:translate(10px);transition:opacity .3s,transform .3s;pointer-events:none}.accordion-item[data-open=true]{cursor:pointer}.accordion-item[data-open=true]:hover{background:#0000000d}.accordion-item[data-open=true] .accordion-view{opacity:1;transform:translate(0);pointer-events:auto}.accordion-item[data-open=true] .accordion-arrow{transform:rotate(45deg)}.accordion-body{display:grid;grid-template-rows:0fr;overflow:hidden;opacity:0;transition:grid-template-rows .35s var(--trans-timing),opacity .2s var(--trans-timing)}.accordion-item[data-open=true]>.accordion-body{grid-template-rows:1fr;opacity:1}.open-source-accordion-item[data-open=true]>.accordion-body{display:block}.accordion-content{display:flex;flex-direction:column;gap:16px;padding:0 20px;min-height:0;overflow:hidden;justify-content:center}.project-accordion-item[data-open=true] .accordion-content{min-height:200px;padding-bottom:20px}.open-source-accordion-item[data-open=true] .accordion-content{min-height:0;padding-bottom:20px;overflow:visible;justify-content:flex-start}.accordion-image-wrap{width:100%;max-height:140px;overflow:hidden;border-radius:4px}.accordion-image-wrap img{display:block;width:100%;height:100%;object-fit:cover}.accordion-desc{margin:0;font-size:15px;line-height:1.4;opacity:.7}.about-card{position:relative;min-height:260px;padding:20px 16px;display:flex;align-items:center}.about-text{margin:0;font-size:clamp(16px,4vw,20px);line-height:1.25}.corner{position:absolute;width:23px;height:16px;border-color:var(--line);border-style:solid;pointer-events:none}.corner-top-left{top:12px;left:12px;border-width:2px 0 0 2px}.corner-top-right{top:12px;right:9px;border-width:2px 2px 0 0}.corner-bottom-right{right:9px;bottom:11px;border-width:0 2px 2px 0}.corner-bottom-left{left:12px;bottom:11px;border-width:0 0 2px 2px}.contact-card{position:relative;min-height:180px;display:flex;flex-direction:column;gap:24px;padding:20px 16px;cursor:pointer}.contact-card:focus-visible{outline:1px solid var(--ink);outline-offset:-4px}.contact-top{display:flex;align-items:flex-start;justify-content:space-between}.contact-prompt{margin:0;font-size:16px;line-height:1.32}.contact-email{margin:0;display:inline-block;width:fit-content;border:0;padding:0;background:none;color:inherit;text-align:left;font-family:Roboto Mono,monospace;font-size:clamp(28px,5vw,32px);font-weight:400;letter-spacing:-1px;line-height:1.2;word-break:break-word}.contact-copy-button{border:0;padding:0;background:none;color:inherit;display:inline-flex;align-items:center;justify-content:center}.copy-morph{width:30px;height:30px;display:grid;place-items:center}.copy-icon-layer{grid-area:1 / 1;display:inline-flex;transform-origin:center;transition:opacity .25s var(--trans-timing),transform .35s var(--trans-timing)}.copy-icon-check{opacity:0;transform:scale(.45) rotate(-18deg)}.copy-morph.is-copied .copy-icon-copy{opacity:0;transform:scale(.45) rotate(18deg)}.copy-morph.is-copied .copy-icon-check{opacity:1;transform:scale(1) rotate(0)}.copy-alert{position:absolute;right:16px;bottom:16px;border:1px solid var(--line);background:var(--bg);color:var(--ink);padding:6px 8px;font-size:12px;line-height:1;opacity:0;transform:translateY(6px);pointer-events:none;transition:opacity .2s var(--trans-timing),transform .25s var(--trans-timing)}.copy-alert.is-visible{opacity:1;transform:translateY(0)}.cv-card{display:flex;align-items:center;justify-content:space-between;min-height:80px;padding:16px 20px}.cv-card span{font-family:Roboto Mono,monospace;font-size:clamp(32px,8vw,48px);font-weight:400;letter-spacing:-2px;line-height:1}.social-card{min-height:80px;display:flex;align-items:center;justify-content:center;padding:16px 20px}.social-links{width:100%;display:flex;justify-content:center;flex-wrap:wrap;column-gap:24px;row-gap:8px;font-size:clamp(16px,4vw,20px);line-height:1.3}@media (max-width: 1023px){.portfolio-canvas{min-height:100svh;padding:12px 8px 0}.portfolio-header{margin-bottom:12px}.brand{font-size:clamp(18px,4.8vw,24px);letter-spacing:0}.hero-card{min-height:220px;padding:18px 14px}.hero-bio{font-size:clamp(14px,3.6vw,17px);line-height:1.45}.accordion-header{min-height:58px;padding:18px}.accordion-header p{font-size:clamp(17px,4.5vw,21px)}.accordion-view{font-size:15px}.project-accordion-item[data-open=true] .accordion-content{min-height:clamp(340px,52vh,480px);padding:0 18px 24px;justify-content:flex-start}.open-source-accordion-item[data-open=true] .accordion-content{min-height:0;padding:0 18px 18px}.open-source-icons{gap:14px;padding:4px 0 0}.os-row{align-items:flex-start;gap:12px}.os-label{min-width:58px;font-size:12px}.os-icons{gap:12px}.os-icons svg{max-width:68px;height:auto}.open-source-icons a[aria-label*=GitHub] svg{width:34px;height:34px}.accordion-image-wrap{height:clamp(220px,38vh,340px);max-height:none}.accordion-desc{font-size:13px}.about-card{min-height:150px;padding:26px 28px;justify-content:center}.corner-top-left{top:10px;left:10px}.corner-top-right{top:10px;right:10px}.corner-bottom-right{right:10px;bottom:10px}.corner-bottom-left{left:10px;bottom:10px}.about-text{width:100%}.hero-roles{gap:8px}.hero-role{grid-template-columns:minmax(94px,1.1fr) minmax(82px,1fr) auto;gap:6px;font-size:clamp(9px,2.55vw,12px)}.contact-card{min-height:145px;padding:18px 14px;justify-content:space-between}.contact-prompt{font-size:13px}.contact-email{font-size:clamp(20px,5.4vw,28px)}.cv-card{min-height:90px;padding:18px}.cv-card span{font-size:clamp(34px,9vw,46px);letter-spacing:0}.social-card{min-height:72px;padding:18px}.social-links{font-size:clamp(12px,3.2vw,16px);column-gap:20px}}@media (min-width: 1024px){.portfolio-canvas{padding:28px 24px 40px}.header-links{gap:40px;font-size:16px}.layout-grid{grid-template-columns:1fr 1fr}.hero-card,.work-card{grid-column:1 / span 2}.about-card{grid-column:1}.contact-card{grid-column:2}.cv-card{grid-column:1}.social-card{grid-column:2}}@media (min-width: 1200px){.portfolio-canvas{max-width:1440px;width:100%;margin:0 auto;padding:28px 24px 40px}.portfolio-header{margin-bottom:32px}.header-links{gap:40px;font-size:16px}.layout-grid{grid-template-columns:1fr 1fr 1fr;grid-template-rows:500px 180px 160px}.hero-card{grid-column:1 / span 2;padding:28px 24px 24px;min-height:500px}.hero-dot{display:block;position:absolute;width:11.42px;height:12px;background:var(--ink)}.dot-top-left{left:16px;top:20px}.dot-bottom-left{left:16px;bottom:19px}.dot-top-right{right:20px;top:24px}.dot-bottom-right{right:24px;bottom:13px}.work-card{grid-column:3;grid-row:1 / span 2;height:680px;min-height:0}.accordion-header{padding:28px 24px}.accordion-item{min-height:91px}.project-accordion-item[data-open=true] .accordion-content{padding:0 24px 30px;min-height:316px}.open-source-accordion-item{border-bottom:0}.open-source-accordion-item[data-open=true] .accordion-content{padding:0 24px 18px;min-height:0}.accordion-image-wrap{max-width:100%;max-height:200px}.open-source-icons{gap:14px;padding:0}.os-row{gap:18px}.os-icons{gap:22px;flex-wrap:nowrap}.about-card{grid-column:1;grid-row:2 / span 2;position:relative}.about-text{max-width:448px;padding:50px 13px}.hero-role{grid-template-columns:minmax(210px,1.45fr) minmax(150px,1fr) auto}.contact-card{grid-column:2;grid-row:2;min-height:180px;padding:30px 36px 41px}.contact-top{width:100%}.contact-email{font-size:32px;letter-spacing:0;word-break:normal}.cv-card{grid-column:2;grid-row:3;padding:20px 36px;min-height:160px}.social-card{grid-column:3;grid-row:3;min-height:160px;padding:0 24px;align-items:center}.social-links{max-width:334px;justify-content:space-between;flex-wrap:nowrap;column-gap:0;row-gap:0}}mark{--lightness: 80%;--highlighted: 1;--highlight: hsl(var(--hue, 45) 80% var(--lightness));background:transparent;color:inherit;position:relative}mark a{color:inherit;text-decoration:none}.dark mark{--lightness: 35%}mark span{background:linear-gradient(120deg,var(--highlight, lightblue) 50%,transparent 50%) 110% 0 / 200% 100% no-repeat;background-position:calc((1 - var(--highlighted)) * 110%) 0;transition:background-position 1s;display:inline-block}mark a span{border-bottom:1px solid currentColor;padding-bottom:1px}.hero-bio mark span{background-position:110% 0;animation:slideHighlight 1s ease-out both}.hero-bio mark:nth-of-type(1) span{animation-delay:.8s}.hero-bio mark:nth-of-type(2) span{animation-delay:1.2s}.hero-bio mark:nth-of-type(3) span{animation-delay:1.6s}@keyframes slideHighlight{0%{background-position:110% 0}to{background-position:0% 0}}@keyframes popIn{0%{scale:0}to{scale:1}}.case-study-page{width:100%;background:var(--bg);color:var(--ink)}.case-study-canvas{max-width:1200px;margin:0 auto;padding:40px 24px 80px}.case-study-layout{display:grid;grid-template-columns:200px 1fr;gap:80px}.case-study-index{position:sticky;top:40px;height:fit-content;display:flex;flex-direction:column;gap:32px}.index-back{display:inline-flex;align-items:center;gap:8px;font-size:14px;color:var(--ink);opacity:.5;transition:opacity .2s}.index-back:hover{opacity:1}.index-heading{display:inline-flex;align-items:center;gap:8px;font-size:12px;line-height:1;letter-spacing:1px;text-transform:uppercase;color:var(--ink);opacity:.45}.index-heading svg{flex:0 0 auto}.index-links{display:flex;flex-direction:column;gap:12px}.index-link{font-size:14px;line-height:1.4;color:var(--ink);opacity:.5;transition:opacity .2s}.index-link:hover,.index-link.is-active{opacity:1}.index-link.is-active{text-decoration:underline;text-underline-offset:4px}.case-study-content{max-width:640px}.case-study-header{margin-bottom:64px}.case-study-title{margin:0 0 12px;font-family:Roboto Mono,monospace;font-size:48px;font-weight:400;letter-spacing:-2px;line-height:1.1}.case-study-subtitle{margin:0 0 16px;font-size:20px;line-height:1.4;opacity:.7}.case-study-date{display:inline-flex;font-size:14px;opacity:.5}.case-study-product-link{width:fit-content;margin:0 0 0 40px;display:inline-flex;align-items:center;gap:8px;color:inherit;font-family:Roboto Mono,monospace;font-size:14px;line-height:1;text-decoration:none;border-bottom:1px solid currentColor;padding-bottom:4px}.case-study-product-link:hover{opacity:.65}.case-study-section{margin-bottom:64px}.case-study-section h2{margin:0 0 24px;font-family:Roboto Mono,monospace;font-size:28px;font-weight:400;letter-spacing:-1px;line-height:1.2}.case-study-section h3{margin:32px 0 16px;font-family:Roboto Mono,monospace;font-size:18px;font-weight:400;line-height:1.3}.case-study-section p{margin:0 0 16px;font-size:16px;line-height:1.6}.case-study-section ul{margin:0 0 16px 20px;padding:0;font-size:16px;line-height:1.6}.case-study-section li{margin-bottom:8px}@media (max-width: 768px){.case-study-layout{grid-template-columns:1fr;gap:40px}.case-study-index{position:static;flex-direction:row;flex-wrap:wrap;gap:16px}.index-back{width:100%}.index-links{flex-direction:row;flex-wrap:wrap;gap:8px 16px}.case-study-title{font-size:36px}.case-study-date,.case-study-product-link{display:flex}.case-study-product-link{margin:18px 0 0}.case-study-canvas{padding:24px 16px 60px}}
