@font-face{font-family:Apple Garamond;src:url(/assets/AppleGaramond-Light-CcDGGGE9.ttf) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:Apple Garamond;src:url(/assets/AppleGaramond-LightItalic-BHAZDKoW.ttf) format("truetype");font-weight:300;font-style:italic}@font-face{font-family:JetBrains Mono;src:url(/assets/JetBrainsMono-Regular-RruCX7RW.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--fg: #e8e8e8;--dim: rgba(255, 255, 255, .45);--body-size: 1rem;--body-muted: #b8b8b8;--rule: #333;--wash: rgba(255, 255, 255, .08);--green: #3ddc84;--serif: "Apple Garamond", Georgia, serif;--mono: "JetBrains Mono", "Courier New", monospace}*{box-sizing:border-box;margin:0;padding:0}body,html{background:#000;color:var(--fg);font-family:var(--mono);width:100%}a{color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--dim)}a:hover{text-decoration-color:#fff;background:var(--wash)}:focus-visible{outline:1px solid #fff;outline-offset:2px}.about-links a,.resume-links a,.demo-links a,.fin-contact a{text-decoration:none}.about-links a:hover,.resume-links a:hover,.demo-links a:hover,.fin-contact a:hover{background:none;text-decoration:underline}.linkish{appearance:none;background:none;border:0;color:var(--dim);font:inherit;cursor:pointer;padding:0}.linkish:hover{color:#fff}.pillnav{position:fixed;top:1.1rem;left:50%;transform:translate(-50%);z-index:1000;display:flex;align-items:center;padding:.3rem .4rem .3rem 1rem;border-radius:999px;background:#ffffff12;border:1px solid rgba(255,255,255,.16);box-shadow:0 8px 32px #0006,inset 0 1px #ffffff1f;-webkit-backdrop-filter:blur(18px) saturate(150%);backdrop-filter:blur(18px) saturate(150%);font-size:12px;letter-spacing:.02em;white-space:nowrap}.pillnav-name{color:#ffffff8c;padding-right:.9rem;margin-right:.4rem;border-right:1px solid rgba(255,255,255,.16);text-decoration:none}.pillnav-name:hover{color:#fff;background:none}.pillnav-links{display:flex;gap:.15rem}.pillnav-links a{color:#fff9;padding:.38rem .85rem;border-radius:999px;text-decoration:none;transition:color .15s,background .15s}.pillnav-links a:hover{color:#fff;background:#ffffff14;text-decoration:none}.pillnav-links a[aria-current=page]{color:#fff;background:#ffffff24;box-shadow:inset 0 1px #ffffff24}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){.pillnav{background:#000000c7}}@media(prefers-reduced-transparency:reduce){.pillnav{background:#000000d9;-webkit-backdrop-filter:none;backdrop-filter:none}}@media(prefers-reduced-motion:reduce){.pillnav-links a{transition:none}}.grid-section{width:100%;background:var(--rule);display:grid;gap:1px;border-bottom:1px solid var(--rule);margin-bottom:1vh}.cell{background:#000;padding:2rem;position:relative;display:flex;flex-direction:column;justify-content:center;overflow:hidden}.cell-label{font-size:11px;letter-spacing:.06em;color:var(--dim)}.page-title{font-family:var(--serif);font-weight:300;font-size:3.5rem;line-height:.9;letter-spacing:-.01em}.page-title em,.demo-title em{font-style:normal;color:var(--dim)}.page-sub{font-size:var(--body-size);line-height:1.65;color:var(--body-muted);text-transform:lowercase;max-width:52ch}.page-head{min-height:32vh;grid-template-columns:1fr}.page-head .cell{justify-content:flex-end;gap:.9rem;padding:3rem 2rem 2rem}.frame{position:relative;border:1px solid var(--rule);overflow:hidden}.intro{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:4rem;align-items:start;padding:5.5rem 2rem 3.5rem;border-bottom:1px solid var(--rule)}.intro.no-nav{padding-top:2rem}.intro-visual{aspect-ratio:428 / 240}.intro-left{min-width:0}.socials{display:flex;gap:1.4rem;list-style:none;margin-top:1.4rem}.social{position:relative;display:block;color:var(--dim);line-height:0;text-decoration:none;transition:color .15s}.social:hover,.social:focus-visible{color:#fff;background:none}.social svg{width:20px;height:20px}.social-note{position:absolute;left:50%;top:calc(100% + 6px);transform:translate(-50%);font:11px var(--mono);color:var(--dim);line-height:1.2;white-space:nowrap}@media(prefers-reduced-motion:reduce){.social{transition:none}}.signature{font:400 1rem Times New Roman,serif;color:#fff}.signature-line{display:block;font-size:5.25rem;line-height:.9}.italic{font-style:italic}.intro-role{margin-top:1.1rem;font:20px/1.45 var(--mono);letter-spacing:.02em;text-transform:lowercase;color:#ffffffbf}.intro-role .keep-case{text-transform:none}.intro-label{margin:2.25rem 0 .9rem}.about-blurb{font:300 1.85rem/1.35 var(--serif);max-width:34ch}.links-row{display:grid;grid-template-columns:minmax(0,6fr) minmax(0,5fr);gap:4rem;align-items:start;padding:3rem 2rem 2rem}.links-visual{aspect-ratio:854 / 480;margin-top:4.5rem}.work-label{padding-bottom:.75rem}.work-list ul{list-style:none}.work-list li{border-top:1px solid var(--rule)}.work-list li:last-child{border-bottom:1px solid var(--rule)}.work-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.25rem;align-items:baseline;padding:1rem .75rem;text-decoration:none}.work-item:hover{background:var(--wash)}.work-body{display:flex;flex-wrap:wrap;align-items:baseline;gap:.2rem 1rem}.work-body b{font:300 1.75rem/1.1 var(--serif);color:#fff}.work-dek{font-size:14px;color:var(--body-muted);text-transform:lowercase}.work-tag{color:var(--dim);font-size:1.1rem}.work-item:hover .work-tag{color:#fff}.home-foot{padding:1.5rem 2rem 2rem;font-size:12px;color:var(--dim)}.resume-head{min-height:42vh;grid-template-columns:1fr 1fr}.resume-intro{justify-content:flex-end;gap:.9rem;padding:3rem 2rem 2rem}.resume-visual{padding:0}.resume-links{display:flex;flex-wrap:wrap;gap:.4rem 1rem;font-size:12px;margin-top:.4rem}.ledger-page{grid-template-columns:1fr}.resume-ledger{justify-content:flex-start;padding:1rem 2rem 2rem}.ledger-rows{list-style:none;counter-reset:group}.ledger-row+.ledger-row{border-top:1px solid var(--rule)}.ledger-head{display:grid;grid-template-columns:150px minmax(0,1fr) 150px 3rem;gap:1.25rem;padding:1rem .5rem;line-height:1.6;font-size:var(--body-size)}.ledger-row.expandable .ledger-head{cursor:pointer}.ledger-row.expandable .ledger-head:hover{background:var(--wash)}.ledger-when,.ledger-tags,.ledger-caret{color:var(--dim);font-size:13px;padding-top:2px;text-transform:lowercase}.ledger-tags{text-align:right}.ledger-caret{text-align:right;white-space:nowrap}.ledger-row.expandable .ledger-head:hover .ledger-caret{color:#fff}.ledger-row:has(b) .ledger-head>span:not(.ledger-body){padding-top:.55rem}.ledger-body{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:.75rem}.ledger-body b{font-family:var(--serif);font-weight:300;font-size:1.75rem;line-height:1.1;color:#fff}.ledger-body .meta{color:var(--dim);font-size:14px}.ledger-sub{flex-basis:100%;margin-top:.3rem;font-size:14px;color:var(--body-muted);text-transform:lowercase}.ledger-sub .ledger-links{margin-left:.75rem}.ledger-row.is-current .ledger-body .meta,.ledger-row.is-current .ledger-sub{font-family:var(--serif);font-weight:300;font-size:1.75rem;line-height:1.1;color:#fff}.ledger-toggle,.ledger-text{text-transform:lowercase}.ledger-text.keep{text-transform:none}.ledger-toggle{appearance:none;background:none;border:0;color:inherit;font:inherit;text-align:left;padding:0;cursor:pointer}.ledger-links{font-size:14px}.ledger-links a{text-decoration:none;color:var(--dim);margin-right:.5rem}.ledger-links a:hover{color:#fff;background:none}.ledger-detail{padding:0 .5rem 1.25rem calc(150px + 1.75rem)}.ledger-stack{color:var(--body-muted);font-size:13px;padding:.1rem 0 .75rem}.ledger-note{color:var(--body-muted);font-size:var(--body-size);line-height:1.7;max-width:68ch;padding:.1rem 0 .2rem}.ledger-bullets{list-style:none;color:var(--body-muted);font-size:14px;line-height:1.7;max-width:68ch}.ledger-bullets li{padding:.2rem 0 .2rem 1.4em;text-indent:-1.4em}.ledger-bullets li:before{content:"⤷ ";color:var(--fg)}.ledger-group{counter-increment:group;font-family:var(--serif);font-style:italic;font-weight:300;font-size:2.75rem;line-height:1;color:var(--fg);padding:2.75rem .5rem 1rem;border-top:1px solid var(--rule)}.ledger-group:before{content:counter(group,decimal-leading-zero);font:12px var(--mono);font-style:normal;color:var(--dim);vertical-align:top;margin-right:.9rem}.ledger-group:first-child{border-top:0;padding-top:.6rem}.ledger-group+.ledger-row{border-top:0}.demo-title{font-family:var(--serif);font-weight:300;font-size:3rem;line-height:.95;letter-spacing:-.01em}.demo-desc{font-size:var(--body-size);line-height:1.65}.demo-links{display:flex;flex-wrap:wrap;gap:.4rem 1rem;font-size:12.5px}.fin-note{align-items:center;text-align:center;gap:.75rem}.fin-note p{font-size:12px;color:var(--dim)}.fin-contact{gap:.5rem;font-size:12.5px}.site-footer{grid-template-columns:1fr 1fr;min-height:230px}@media print{body,html{background:#fff;color:#000}.pillnav,.resume-visual,.resume-links,.ledger-links,.ledger-caret{display:none}.grid-section{background:#000;border-bottom:0;margin:0}.cell{background:#fff;color:#000;padding:.5rem 0;overflow:visible}.resume-head{min-height:0;grid-template-columns:1fr}.resume-intro{padding:0 0 .5rem}.page-title em,.page-sub,.ledger-when,.ledger-tags,.ledger-stack,.ledger-note,.ledger-bullets,.ledger-group,.ledger-body .meta{color:#444}.ledger-body b,.ledger-bullets li:before,.ledger-row.is-current .ledger-body .meta,.ledger-row.is-current .ledger-sub{color:#000}.ledger-row+.ledger-row,.ledger-group{border-color:#000}.ledger-row.open .ledger-head{background:none}.ledger-detail[hidden]{display:block}.ledger-row{break-inside:avoid}}@media(max-width:768px){.grid-section{display:flex;flex-direction:column;height:auto;min-height:0}.cell{min-height:300px;border-bottom:1px solid var(--rule)}.pillnav{top:.75rem;padding:.25rem .3rem;font-size:11px}.pillnav-name{display:none}.pillnav-links a{padding:.32rem .7rem}.intro,.links-row{grid-template-columns:minmax(0,1fr);gap:0;padding:0}.intro{padding-bottom:2rem}.frame{border-width:0 0 1px}.intro-text{padding:1.75rem 1.25rem 0}.socials{margin:1.25rem 1.25rem 0}.social:after{content:"";position:absolute;inset:-12px}.signature-line{font-size:3rem}.intro-role{font-size:15px}.intro-label{margin-top:1.75rem}.about-blurb{font-size:1.35rem}.page-head .cell,.resume-intro{min-height:0}.page-head .cell,.resume-intro{padding-top:4.5rem}.resume-visual{min-height:220px}.resume-ledger{padding:.5rem 1.25rem 1.5rem}.ledger-head{grid-template-columns:1fr;gap:.15rem;position:relative}.ledger-caret{position:absolute;top:1rem;right:.5rem}.ledger-row .ledger-head>span:not(.ledger-body){padding-top:0}.ledger-tags{text-align:left}.ledger-detail{padding-left:.5rem}.ledger-links,.ledger-sub .ledger-links{display:block;margin:.2rem 0 0}.links-visual{order:-1;margin-top:0}.work-list{padding:1.75rem 0 1.5rem}.work-label{padding-left:1.25rem;padding-right:1.25rem}.work-item{gap:.75rem;padding:1rem 1.25rem}.work-body b{font-size:1.5rem}.home-foot{padding:1.25rem}.pillnav-links a,.resume-links a,.resume-links .linkish,.resume-links .copy-email,.demo-links a,.fin-contact a,.fin-contact .copy-email,.ledger-links a{position:relative}.pillnav-links a:after,.resume-links a:after,.resume-links .linkish:after,.resume-links .copy-email:after,.demo-links a:after,.fin-contact a:after,.fin-contact .copy-email:after,.ledger-links a:after{content:"";position:absolute;inset:-10px -6px}.pillnav-links a:after{inset:-10px 0}.ledger-links a:after{inset:-8px -4px}.resume-links,.demo-links{row-gap:1.25rem}.fin-contact{gap:1.25rem}.site-footer .cell{min-height:0;padding:1.5rem}}:where(.copy-email){appearance:none;background:none;border:0;padding:0;margin:0;color:inherit;font:inherit;letter-spacing:inherit;text-align:inherit;cursor:pointer}.copy-email:hover{text-decoration:underline}.copy-email.work-item{width:100%;text-align:left}.copy-email.work-item:hover{text-decoration:none}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.nowrap{white-space:nowrap}
