:root{color-scheme:light dark;--paper:#F4F1EA;--ink:#252C27;--muted:#68716A;--line:#DCDDD4;--red:#52664D;--accent:#52664D}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:5px}a:focus-visible{outline:2px solid var(--ink);outline-offset:6px;border-radius:3px}.page{width:min(660px,calc(100% - 64px));margin:0 auto;padding:96px 0 32px}h1{font-size:clamp(32px,5vw,40px);font-weight:600;letter-spacing:-.05em;line-height:1.1;margin:0 0 18px}.dot{color:var(--red)}.bio{font-size:17px;line-height:1.6;margin:0;color:var(--muted)}.personal-links{display:flex;flex-wrap:wrap;gap:25px;margin:24px 0 38px;font-size:14px}.personal-links span{color:var(--muted);margin-left:3px}.projects{border-top:1px solid var(--line)}.project-row{display:flex;align-items:center;gap:20px;padding:26px 0;border-bottom:1px solid var(--line)}.project-row:hover{text-decoration:none}.project-row:hover h2{text-decoration:underline;text-underline-offset:5px}.app-icon{flex:none;object-fit:cover;border-radius:22%}.project-copy{flex:1;min-width:0}.project-copy h2{font-size:19px;font-weight:500;letter-spacing:-.025em;margin:0 0 7px}.project-copy p{font-size:14px;line-height:1.5;color:var(--muted);margin:0}.outbound{font-size:20px;color:var(--muted)}footer{display:flex;justify-content:space-between;padding-top:26px;font-size:13px;color:var(--muted)}footer a span{margin-left:8px}.skip{position:absolute;top:12px;left:12px;transform:translateY(-200%);padding:10px;background:var(--paper);z-index:10}.skip:focus{transform:none}.back{font-size:14px;color:var(--muted);display:inline-block;margin-bottom:38px}.experiments-header{margin-bottom:35px}.experiments-header h1{margin-bottom:15px}.experiments-header p{color:var(--muted);line-height:1.6}.experiment-list{border-top:1px solid var(--line)}.experiment{padding:25px 0;border-bottom:1px solid var(--line)}.experiment .title-row{display:flex;justify-content:space-between;align-items:baseline;gap:15px}.experiment h2{font-size:20px;font-weight:500;margin:0;letter-spacing:-.02em}.experiment .year{color:var(--muted);font-size:12px}.experiment p{font-size:15px;line-height:1.6;color:var(--muted);margin:12px 0 0}.experiment-footer{margin-top:38px}
@media(prefers-color-scheme:dark){:root{--paper:#151C18;--ink:#ECEFE6;--muted:#A2ADA2;--line:#344138;--red:#B7C9A5;--accent:#B7C9A5}}
@media(max-width:600px){.page{width:calc(100% - 40px);padding-top:48px}.bio{font-size:16px}.personal-links{gap:20px;margin-bottom:30px}.project-row{gap:15px;padding:24px 0}.app-icon{width:52px;height:52px}.project-copy h2{font-size:17px}.project-copy p{font-size:13px}.outbound{font-size:18px}footer{padding-top:24px}}

/* Motion direction: LottieFiles motion-design, restrained editorial personality. */
:root{--motion-ease:cubic-bezier(.4,0,.2,1);--motion-quick:90ms;--motion-standard:220ms;--motion-slow:480ms;--hover-wash:rgba(82,102,77,.055)}
.page{animation:arrive var(--motion-slow) var(--motion-ease) both}
@keyframes arrive{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.personal-links a,footer a{position:relative;text-decoration:none;transition:color var(--motion-standard) var(--motion-ease)}
.personal-links a::after,footer a::after{content:"";position:absolute;left:0;right:0;bottom:-5px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform var(--motion-standard) var(--motion-ease)}
.personal-links a:hover,footer a:hover{color:var(--accent);transition-duration:var(--motion-quick)}
.personal-links a:hover::after,.personal-links a:focus-visible::after,footer a:hover::after,footer a:focus-visible::after{transform:scaleX(1);transition-duration:var(--motion-quick)}
.project-row{position:relative;isolation:isolate}
.project-row::before{content:"";position:absolute;inset:8px -14px;z-index:-1;border-radius:10px;background:var(--hover-wash);opacity:0;transition:opacity var(--motion-standard) var(--motion-ease)}
.project-row:hover::before,.project-row:focus-visible::before{opacity:1;transition-duration:var(--motion-quick)}
.project-row:hover h2{text-decoration:none}
.project-row .app-icon{transition:transform var(--motion-standard) var(--motion-ease)}
.project-row .outbound{color:var(--accent);transition:transform var(--motion-standard) var(--motion-ease)}
.project-row:hover .app-icon,.project-row:focus-visible .app-icon{transform:translateY(-1px);transition-duration:var(--motion-quick)}
.project-row:hover .outbound,.project-row:focus-visible .outbound{transform:translate(2px,-2px);transition-duration:var(--motion-quick)}
.project-row:active .app-icon{transform:scale(.98);transition-duration:80ms}
@media(prefers-color-scheme:dark){:root{--hover-wash:rgba(183,201,165,.045)}}
@media(max-width:600px){:root{--motion-slow:380ms}}
@media(prefers-reduced-motion:reduce){.page{animation:none}.personal-links a,.personal-links a::after,footer a,footer a::after,.project-row::before,.project-row .app-icon,.project-row .outbound{transition:none}.project-row:hover .app-icon,.project-row:focus-visible .app-icon,.project-row:active .app-icon,.project-row:hover .outbound,.project-row:focus-visible .outbound{transform:none}}

.personal-links .resume-link{color:var(--accent);font-weight:500}




.location{display:flex;align-items:center;gap:10px;margin:14px 0 0;font-size:13px;line-height:20px;color:var(--muted)}.location svg{display:block;flex:none;width:16px;height:16px}

.personal-links a:hover,footer a:hover{ text-decoration:none }
