.hover-link{text-wrap:nowrap;display:flex;position:relative;overflow:hidden}.hover-in{transition:all .3s;position:relative}.hover-in div{display:flex;position:absolute;top:100%;left:0}.hover-link:hover .hover-in{color:var(--accentColor);transform:translateY(-100%)}.header{max-width:var(--cMaxWidth);width:var(--cWidth);box-sizing:border-box;z-index:9999;justify-content:space-between;margin-bottom:-100px;padding:20px 0;display:flex;position:fixed;top:0;left:50%;transform:translate(-50%)}.header ul{grid-template-columns:auto auto;place-items:end;gap:8px 16px;margin:0;padding:0;font-size:12px;list-style:none;display:grid}.header ul li{letter-spacing:1px;color:#ccc;cursor:pointer;margin-left:0;font-weight:600}.navbar-connect{letter-spacing:1px;align-self:center;margin-left:40px;font-size:15px;font-weight:500;display:none}.navbar-title{letter-spacing:.2px;font-size:14px;font-weight:700}@media only screen and (min-width:768px){.header{padding:20px 0}.header ul{flex-direction:row;align-items:center;column-gap:40px;font-size:14px;display:flex}.header ul li{color:#eae5ec}.navbar-title{font-size:16px}}@media only screen and (min-width:1200px){.navbar-connect{display:block}.header{padding:35px 0}.header ul{column-gap:56px;font-size:16px}.navbar-connect{font-size:16px}.navbar-title{font-size:18px}}.header>nav:not(.lang-switch){margin-left:auto}.lang-switch{letter-spacing:1px;border-left:1px solid #eae5ec40;align-self:flex-start;align-items:center;gap:8px;margin-left:14px;padding-left:12px;font-size:11px;font-weight:600;line-height:18px;display:flex}.lang-switch a{color:#9a9aa3;border-bottom:1px solid #0000;padding:0 1px;transition:color .3s,border-color .3s}.lang-switch a:hover{color:var(--accentColor)}.lang-switch a[aria-current=page]{color:#eae5ec;border-bottom-color:var(--accentColor)}.lang-switch a:focus-visible{outline:2px solid var(--accentColor);outline-offset:3px}@media only screen and (min-width:768px){.lang-switch{align-self:center;gap:10px;margin-left:28px;padding-left:20px;font-size:12px}}@media only screen and (min-width:1200px){.lang-switch{gap:14px;margin-left:44px;padding-left:28px;font-size:13px}}.project-card{box-sizing:border-box;border:1px solid var(--border);border-radius:var(--radius);background-color:var(--surface);flex-direction:column;height:100%;transition:border-color .3s,box-shadow .3s,transform .3s;display:flex;overflow:hidden}.project-card:hover,.project-card:focus-within{border-color:#5eead473;box-shadow:0 24px 48px -28px #2dd4bf73}.project-media{aspect-ratio:1200/750;border-bottom:1px solid var(--border);background-color:var(--surface-2);overflow:hidden}.project-media img{object-fit:cover;width:100%;height:100%;transition:transform .5s;display:block}.project-card:hover .project-media img{transform:scale(1.025)}.project-body{gap:var(--space-3);padding:var(--space-5);flex-direction:column;flex:1;display:flex}.project-meta{align-items:center;gap:var(--space-2) var(--space-3);flex-wrap:wrap;display:flex}.project-badge{--badge:#5eead4;font-size:var(--fs-xs);letter-spacing:.02em;color:var(--badge);background-color:color-mix(in srgb, var(--badge) 12%, transparent);border:1px solid color-mix(in srgb, var(--badge) 40%, transparent);border-radius:999px;align-items:center;gap:5px;padding:3px 10px;font-weight:600;line-height:1.4;display:inline-flex}.project-badge svg{font-size:13px}.project-badge--personal{--badge:#5eead4}.project-badge--employer{--badge:#93c5fd}.project-badge--takehome{--badge:#fcd34d}.project-badge--client{--badge:#c4b5fd}.project-badge--oss{--badge:#86efac}.project-badge--thesis{--badge:#f9a8d4}.project-year{font-size:var(--fs-xs);color:var(--text-muted);letter-spacing:.04em}.project-title{font-size:var(--fs-lg);color:var(--text);text-wrap:balance;margin:0;font-weight:600;line-height:1.25}.project-oneliner{font-size:var(--fs-base);color:var(--text-soft);margin:0;line-height:1.55}.project-highlights{gap:var(--space-2);font-size:var(--fs-sm);color:var(--text-soft);flex-direction:column;margin:0;padding:0;line-height:1.55;list-style:none;display:flex}.project-highlights li{padding-left:18px;position:relative}.project-highlights li:before{content:"";background-color:var(--accentColor);opacity:.8;border-radius:2px;width:6px;height:6px;position:absolute;top:.62em;left:2px}.project-stack{margin:var(--space-1) 0 0;flex-wrap:wrap;gap:6px;padding:0;list-style:none;display:flex}.project-stack li{font-size:var(--fs-xs);color:#d5dde8;white-space:nowrap;background-color:#ffffff0d;border:1px solid #ffffff1a;border-radius:6px;padding:2px 9px;line-height:1.6}.project-stack li.project-stack-more{color:var(--text-muted)}.project-prs h3{margin:var(--space-2) 0 var(--space-2);font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);font-weight:600}.project-prs ul{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.project-prs li{column-gap:var(--space-2);font-size:var(--fs-sm);grid-template-columns:auto 1fr;align-items:baseline;line-height:1.45;display:grid}.project-prs a{color:var(--text);overflow-wrap:anywhere}.project-prs a:hover .pr-title{text-decoration:underline}.pr-repo{color:var(--text-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.project-prs time{font-size:var(--fs-xs);color:var(--text-muted);grid-column:2}.pr-status{letter-spacing:.03em;border-radius:999px;padding:1px 7px;font-size:11px;font-weight:600}.pr-status--merged{color:#d8b4fe;background-color:#a855f729;border:1px solid #d8b4fe59}.pr-status--open{color:#86efac;background-color:#22c55e1f;border:1px solid #86efac59}.project-links{gap:var(--space-2);padding-top:var(--space-2);flex-wrap:wrap;margin-top:auto;display:flex}.project-link{box-sizing:border-box;border:1px solid var(--border-strong);min-height:36px;font-size:var(--fs-sm);color:var(--text);border-radius:999px;align-items:center;gap:6px;padding:6px 14px;font-weight:500;transition:border-color .2s,color .2s,background-color .2s;display:inline-flex}.project-link:hover{border-color:var(--accentColor);color:var(--accentColor)}.project-link--primary{color:var(--accentColor);border-color:#5eead48c}.project-link--primary:hover{background-color:var(--accentColor);color:var(--backgroundColor)}.project-private{min-height:36px;font-size:var(--fs-sm);color:var(--text-muted);align-items:center;display:inline-flex}@media (prefers-reduced-motion:reduce){.project-card,.project-media img{transition:none}.project-card:hover .project-media img{transform:none}}.site-footer{z-index:2;box-sizing:border-box;padding:var(--space-7) 0 var(--space-6);border-top:1px solid var(--border);background-color:var(--backgroundColor);color:var(--text-soft);font-size:var(--fs-sm);margin:0 auto;position:relative}.site-footer:not(.section-container){width:var(--cWidth);max-width:1300px}.site-footer-in{gap:var(--space-6);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.site-footer h2{margin:0 0 var(--space-3);font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);font-weight:600}.site-footer ul{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.site-footer a{color:var(--text);overflow-wrap:anywhere;border-bottom:1px solid #0000;padding:2px 0;transition:color .2s,border-color .2s;display:inline-block}.site-footer a:hover{color:var(--accentColor);border-bottom-color:currentColor}.site-footer a[aria-current=page]{color:var(--accentColor)}.site-footer-credit{margin:var(--space-7) 0 0;color:var(--text-muted);font-size:var(--fs-xs);letter-spacing:.04em}.site-footer-credit span{color:var(--text)}@media only screen and (max-width:700px){.site-footer-in{grid-template-columns:repeat(2,minmax(0,1fr))}.site-footer-in>:first-child{grid-column:1/-1}.site-footer-in>:first-child ul{column-gap:var(--space-5);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}}
