::selection{color:#fff;background-color:#0ca40c}@keyframes slideUnderline{0%{width:0;left:0}to{width:100%}}html{box-sizing:border-box}html.gsap-loading .wordmark,html.gsap-loading nav.social a,html.gsap-loading nav.social .sep,html.gsap-loading .eyebrow,html.gsap-loading .hero h1,html.gsap-loading .role,html.gsap-loading .hero p:not(.eyebrow):not(.role),html.gsap-loading #about h2,html.gsap-loading #about p,html.gsap-loading .timeline li,html.gsap-loading #expertise h2,html.gsap-loading .expertise-row,html.gsap-loading #projects h2,html.gsap-loading .project-row,html.gsap-loading #goals h2,html.gsap-loading .goal-row,html.gsap-loading footer p{opacity:0}body,h1,h2,h3,p,ul,li{margin:0;padding:0}body{box-sizing:border-box;color:#fff;background-color:#0d0f11;max-width:720px;margin:0 auto;padding:48px 24px 90px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.6}a{color:#fff;background-image:linear-gradient(#00ff1e,#00ff1e),linear-gradient(#6d7378,#6d7378);background-position:0 100%,0 100%;background-repeat:no-repeat;background-size:0 1px,100% 1px;padding-bottom:1px;text-decoration:none;transition:background-size .3s}a:hover{background-size:100% 1px,100% 1px}a:focus-visible{outline-offset:2px;outline:1px solid #e2a640}.hl{display:inline;position:relative}.hl-bg{transform-origin:0;z-index:0;background-color:#ffffff47;border-radius:2px;height:.5em;position:absolute;bottom:.08em;left:-3px;right:-3px;transform:scaleX(0)}.hl-text{z-index:1;font-weight:inherit;position:relative}header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:10px 20px;margin-bottom:64px;display:flex}.wordmark{color:#9aa1a8;background-image:none;font-size:.95rem}.wordmark:hover{color:#f0f1f2}nav.social a{color:#9aa1a8;font-size:.95rem}nav.social a:hover{color:#f5f5f5}nav.social .sep{color:#444a4f;margin:0 6px}.hero{margin-bottom:45px}.eyebrow{color:#6d7378;margin-bottom:8px;font-size:.85rem}h1{color:#f0f1f2;font-size:clamp(2.2rem,6vw,3.2rem);font-weight:700;line-height:1.1}.role{color:#b7bcc1;margin-top:10px;margin-bottom:24px;font-size:1.1rem}.hero p:not(.eyebrow):not(.role){color:#b7bcc1;max-width:560px;margin-bottom:12px}.skills{flex-wrap:wrap;gap:8px 10px;margin-top:28px;list-style:none;display:flex}.skills li{color:#9aa1a8;border:1px solid #262b2f;border-radius:3px;padding:5px 10px;font-size:.82rem}h2{color:#7f868c;text-transform:lowercase;margin-bottom:24px;font-size:.95rem;font-weight:600}section{margin-bottom:45px;scroll-margin-top:24px}#about p{color:#b7bcc1}.expertise-list{border-top:1px solid #1c1f22}.expertise-row{border-bottom:1px solid #1c1f22;grid-template-columns:44px 190px 1fr;align-items:baseline;gap:4px 24px;padding:18px 0;display:grid}.expertise-row .num{color:#3a4045;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.expertise-row h3{color:#f0f1f2;font-size:1rem;font-weight:600}.expertise-row p{color:#8b929a;grid-column:3;font-size:.92rem}.project-list{flex-direction:column;display:flex}.project-row{border-bottom:1px solid #1c1f22;padding:22px 0}.project-row:first-child{padding-top:0}.project-head{flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin-bottom:8px;display:flex}.project-head .index{color:#3a4045;margin-right:4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.project-head h3{color:#f0f1f2;font-size:1.08rem;font-weight:600}.project-head .tags{flex-wrap:wrap;gap:6px;margin-left:auto;display:flex}.project-head .tags span{color:#6d7378;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem}.project-head .tags span+span:before,.pd-main .tags span+span:before{content:"·";color:#3a4045;margin-right:6px}.project-row p{color:#b7bcc1}.section-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.section-head .year{color:#3a4045;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.goal-list{flex-direction:column;display:flex}.goal-row{border-bottom:1px solid #1c1f22;padding:18px 0}.goal-row:first-child{padding-top:0}.goal-head{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.goal-head h3{color:#f0f1f2;font-size:1rem;font-weight:600}.goal-head .count{color:#6d7378;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.goal-bar{background-color:#1c1f22;border-radius:3px;height:6px;overflow:hidden}.goal-bar-fill{background-color:#00ff1e;border-radius:3px;height:100%}.goal-caption{color:#6d7378;margin-top:8px;font-size:.8rem}.word{display:inline-block}footer{color:#6d7378;margin-top:20px;padding-top:24px;font-size:.9rem}.progress{transform-origin:0;z-index:50;background:#00ff1e;height:2px;position:fixed;top:0;left:0;right:0;transform:scaleX(0)}main,header,footer{z-index:1;position:relative}.rail{display:none}@media (width>=1280px){.rail{z-index:20;display:block;position:fixed;top:50%;left:max(16px,50vw - 640px);transform:translateY(-50%)}}.cycle{transition:opacity .28s,transform .28s;display:inline-block}.cycle.out{opacity:0;transform:translateY(6px)}.timeline{margin:32px 0 0;padding:0;list-style:none}.timeline li{grid-template-columns:110px 1fr;align-items:baseline;gap:0 20px;padding-bottom:16px;display:grid}.timeline .when{color:#6d7378;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.75rem}.timeline .body{flex-direction:column;display:flex}.timeline .what{color:#f0f1f2;font-size:.92rem}.timeline .note{color:#8b929a;font-size:.82rem}.spot{position:relative}.expertise-row h3,.expertise-row .num,.project-head h3,.project-head .index{transition:transform .25s,color .25s}.expertise-row:hover .num,.project-row:hover .index{color:#f0f1f2}.expertise-row:hover h3,.project-row:hover h3{transform:translate(4px)}.project-row{cursor:pointer}.project-row:focus-visible{outline-offset:6px;border-radius:4px;outline:1px solid #e2a640}.open-hint{color:#3a4045;transition:color .25s,transform .25s}.project-row:hover .open-hint{color:#f0f1f2;transform:translate(2px,-2px)}.hint{color:#3a4045;margin-left:10px;font-size:.75rem;font-weight:400}.project-head .tags span{transition:color .2s}.project-row:hover .tags span{color:#b7bcc1}dialog{color:#fff;background:#121518;border:1px solid #262b2f;border-radius:10px;width:min(760px,100vw - 32px);max-height:calc(100vh - 48px);padding:0;animation:.28s cubic-bezier(.2,.8,.2,1) dialog-in;overflow:auto}dialog::backdrop{background:#000000bf;animation:.28s fade-in}dialog.closing{animation:.22s forwards dialog-out}dialog.closing::backdrop{animation:.22s forwards fade-out}@keyframes dialog-in{0%{opacity:0;transform:translateY(14px)scale(.97)}}@keyframes dialog-out{to{opacity:0;transform:translateY(10px)scale(.98)}}@keyframes fade-in{0%{opacity:0}}@keyframes fade-out{to{opacity:0}}.pd-media{aspect-ratio:16/7;background:#15181b;border-bottom:1px solid #1c1f22;place-items:center;display:grid;position:relative;overflow:hidden}.pd-media img{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.pd-index{color:#1f2427;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:4rem;font-weight:700}.pd-main{padding:22px 26px 26px}.pd-head{justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:10px;display:flex}.pd-head h3{color:#f0f1f2;font-size:1.4rem}.pd-close{font:inherit;color:#6d7378;cursor:pointer;background:0 0;border:1px solid #23272b;border-radius:4px;padding:3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.75rem;transition:color .2s,border-color .2s}.pd-close:hover{color:#fff;border-color:#f0f1f2}.pd-main .tags{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.pd-main .tags span{color:#6d7378;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem}.pd-summary{color:#b7bcc1;margin-bottom:14px}.pd-highlights{margin:0 0 18px;padding:0;list-style:none}.pd-highlights li{color:#8b929a;padding:3px 0 3px 18px;font-size:.92rem;position:relative}.pd-highlights li:before{content:"";background:#f0f1f2;width:.85em;height:.85em;position:absolute;top:.55em;left:0;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 6h8M6.5 2.5L10 6l-3.5 3.5'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 6h8M6.5 2.5L10 6l-3.5 3.5'/%3E%3C/svg%3E") 50%/contain no-repeat}.pd-links{flex-wrap:wrap;gap:18px;display:flex}.lead{color:#b7bcc1;margin-bottom:22px}.hc-list{border-top:1px solid #1c1f22}.hc-row{color:inherit;border-bottom:1px solid #1c1f22;grid-template-columns:110px 130px 1fr auto;align-items:baseline;gap:4px 24px;padding:16px 0;text-decoration:none;display:grid}.hc-role,.hc-link{color:#6d7378;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.75rem}.hc-name{color:#f0f1f2;font-weight:600;transition:transform .25s}.hc-text{color:#8b929a;font-size:.92rem}.hc-row:hover .hc-name{transform:translate(4px)}.hc-row:hover .hc-link{color:#fff}.hc-row:focus-visible{outline-offset:2px;outline:1px solid #e2a640}.gear-list{border-top:1px solid #1c1f22}.gear-row{border-bottom:1px solid #1c1f22;grid-template-columns:110px 1fr;align-items:start;gap:8px 24px;padding:14px 0;display:grid}.gear-name{color:#6d7378;padding-top:7px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.75rem}.gear-items{flex-wrap:wrap;gap:8px 24px;list-style:none;display:flex}.gear-items a{color:#b7bcc1;align-items:center;gap:8px;font-size:.92rem;transition:color .2s,background-size .3s;display:inline-flex}.gear-items a svg{fill:currentColor;opacity:.7;flex:none;width:15px;height:15px}.gear-items a:hover{color:#fff}.gear-items a:hover svg{opacity:1}.homeserver{color:#8b929a;margin-top:18px;font-size:.92rem}.life-grid{grid-template-columns:repeat(4,1fr);gap:12px;display:grid}.life-tile{aspect-ratio:4/5;background:#15181b;border:1px solid #1c1f22;border-radius:6px;margin:0;transition:transform .35s cubic-bezier(.2,.8,.2,1),border-color .25s;position:relative;overflow:hidden}.life-tile:nth-child(2n){transform:translateY(14px)}.life-tile:hover{border-color:#f0f1f2;transform:translateY(-4px)rotate(-.6deg)}.life-tile img{object-fit:cover;width:100%;height:100%;transition:transform .6s;position:absolute;inset:0}.life-tile:hover img{transform:scale(1.06)}.life-tile figcaption{color:#b7bcc1;background:#0d0f11b3;border-radius:3px;padding:2px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;position:absolute;bottom:8px;left:8px}#life{margin-bottom:60px}@media (width<=640px){body{padding:40px 20px 70px}.expertise-row{grid-template-columns:32px 1fr;row-gap:6px}.expertise-row p{grid-column:2}.project-head .tags{width:100%;margin-left:0}.timeline li{grid-template-columns:1fr}.life-grid{grid-template-columns:repeat(2,1fr)}.hc-row,.gear-row{grid-template-columns:1fr}.gear-name{padding-top:0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}dialog,dialog::backdrop{animation:none}}.arrow-ne{vertical-align:-.1em;background:currentColor;width:.85em;height:.85em;margin-left:.25em;display:inline-block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5l5-5M4 3.5h4.5V8'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5l5-5M4 3.5h4.5V8'/%3E%3C/svg%3E") 50%/contain no-repeat}.line-sidebar__list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.line-sidebar__item{font:inherit;color:#6d7378;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:5px 0;font-size:.9rem;transition:color .2s;display:flex}.line-sidebar__marker{background:#444a4f;width:14px;height:1px;transition:width .25s,background-color .2s}.line-sidebar__index{opacity:.6;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8em}.line-sidebar__item:hover{color:#f0f1f2}.line-sidebar__item:hover .line-sidebar__marker{background:#9aa1a8;width:24px}.line-sidebar__item[aria-current=true]{color:#00ff1e}.line-sidebar__item[aria-current=true] .line-sidebar__marker{background:#00ff1e;width:32px}.line-sidebar__item:focus-visible{outline-offset:3px;outline:1px solid #e2a640}
