@font-face{font-family:Share Tech Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/share-tech-mono-latin-400-normal.CCqdbj5z.woff2) format("woff2"),url(/_astro/share-tech-mono-latin-400-normal.15MgdvEM.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:B612;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/b612-latin-400-normal.CC98FVm_.woff2) format("woff2"),url(/_astro/b612-latin-400-normal.JbZ7xwUX.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:B612;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/b612-latin-400-italic.a-4GLPtl.woff2) format("woff2"),url(/_astro/b612-latin-400-italic.DePNXA0a.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:B612;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/b612-latin-700-normal.BinQrnoB.woff2) format("woff2"),url(/_astro/b612-latin-700-normal.B_Snq1wd.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:osifont;src:url(/fonts/osifont.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--bg: #fafaf7;--surface: #ffffff;--surface-2: #f2f1ea;--ink: #1a1c1e;--line: #b9b7ac;--line-strong: #1a1c1e;--text: #1a1c1e;--muted: #4c4f52;--faint: #73767a;--accent: #c8242b;--accent-dim: rgba(200, 36, 43, .08);--draw: "osifont", "Share Tech Mono", ui-monospace, monospace;--mono: "osifont", "Share Tech Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sans: "B612", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;--max: 1080px;--rail: 18px}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased}.sheet{position:relative;margin:10px;border:2px solid var(--line-strong);padding:var(--rail);min-height:calc(100vh - 24px);display:flex;flex-direction:column}.sheet:after{content:"";position:absolute;inset:var(--rail);border:1px solid var(--line-strong);pointer-events:none}.sheet>main{flex:1}.zone-rail{position:absolute;display:flex;font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--faint);pointer-events:none}.rail-top,.rail-bottom{left:0;right:0;height:var(--rail)}.rail-top{top:0}.rail-bottom{bottom:0}.rail-top span,.rail-bottom span{flex:1;text-align:center;line-height:var(--rail)}.rail-top span+span,.rail-bottom span+span{border-left:1px solid var(--line)}.rail-left,.rail-right{top:0;bottom:0;width:var(--rail);flex-direction:column}.rail-left{left:0}.rail-right{right:0}.rail-left span,.rail-right span{flex:1;display:flex;align-items:center;justify-content:center}.rail-left span+span,.rail-right span+span{border-top:1px solid var(--line)}@media(max-width:1180px){.sheet{margin:0;border:none;padding:0}.sheet:after{display:none}.zone-rail{display:none}}img{max-width:100%;display:block}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}.container{max-width:var(--max);margin:0 auto;padding:0 24px}.kicker{font-family:var(--mono);font-size:13.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent)}.meta-label{font-family:var(--mono);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}.site-header{border-bottom:1px solid var(--line);background:#fafaf7eb;backdrop-filter:blur(8px);position:sticky;top:0;z-index:10}.site-header .container{display:flex;align-items:center;justify-content:space-between;height:60px}.wordmark{font-family:var(--mono);font-size:15px;letter-spacing:.2em;text-transform:uppercase;color:var(--text);display:flex;align-items:center;gap:12px}.wordmark:hover{text-decoration:none;color:var(--accent)}.rev-chip{font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--accent);border:1px solid var(--accent);padding:2px 7px}.site-nav{display:flex;gap:28px}.site-nav a{font-family:var(--mono);font-size:13.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--accent);text-decoration:none}.site-footer{margin-top:96px;display:flex;flex-direction:column;gap:12px}.title-block{font-family:var(--mono);border:2px solid var(--line-strong);width:min(780px,calc(100% - 48px));margin:0 24px 32px}.tb-row{display:flex;border-bottom:1px solid var(--line-strong)}.tb-cell{flex:1 1 0;min-width:0;padding:7px 12px 9px;border-right:1px solid var(--line-strong);text-align:center}.tb-row>.tb-cell:last-child{border-right:none}.tb-cell.tb-wide{flex-grow:1.9}.tb-projcell{color:var(--text);display:flex;align-items:center;justify-content:center;flex:0 0 auto;aspect-ratio:1 / 1;align-self:stretch;min-width:54px;padding:4px}.tb-main{display:flex}.tb-notes{flex:1.15;padding:8px 14px 10px;border-right:1px solid var(--line-strong);font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;line-height:1.8;color:var(--muted);text-align:left}.tb-notes ol{list-style:none;counter-reset:note}.tb-notes li{counter-increment:note}.tb-notes li:before{content:counter(note) ". "}.tb-right{flex:1.95;display:flex;flex-direction:column}.tb-title-cell{padding:8px 14px 10px;border-bottom:1px solid var(--line-strong);text-align:center}.tb-title{display:block;font-family:var(--draw);font-size:21px;text-transform:uppercase;letter-spacing:.04em;color:var(--text)}.tb-sub{display:flex;flex:1}.tb-sub>.tb-cell{flex:.65 1 0;white-space:nowrap}.tb-sub>.tb-cell.tb-wide{flex:2.7 1 0;white-space:normal;overflow-wrap:anywhere}.tb-sub>.tb-cell:last-child{border-right:none}.tb-people{flex:0 0 auto;border-bottom:1px solid var(--line-strong)}.tb-people>.tb-cell{flex:1 1 0}@media(min-width:1181px){.site-footer{flex-direction:row;align-items:flex-end;justify-content:flex-end;gap:24px}.title-block{border-right:none;border-bottom:none;margin:0}}.title-block .tb-label{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:3px;text-align:left}.title-block .tb-value,.title-block a{font-family:var(--mono);font-size:14.5px;letter-spacing:.04em;color:var(--muted);overflow-wrap:break-word}.title-block a:hover{color:var(--accent)}@media(max-width:640px){.tb-row{flex-wrap:wrap}.tb-row>.tb-cell{flex:1 1 40%}.tb-main{flex-direction:column}.tb-notes{border-right:none;border-bottom:1px solid var(--line-strong)}}.hero{--fs: clamp(2.4rem, 6.5vw, 4.2rem);padding:96px 0 72px;border-bottom:1px solid var(--line)}.hero h1{font-family:var(--draw);text-transform:uppercase;font-size:var(--fs);font-weight:400;letter-spacing:-.02em;line-height:1.05;margin:16px 0 14px}.drawing-hero{--f-t: .07422;--f-cap: .66309;--f-uw: .36816;--f-lw: .29541;--f-rb: .14609;--f-re: .03711;--f-capc: .03209;--f-capt: .00502;--f-adj: 0px;--f-basc: .69517;--f-eink: 9.0433;--f-u1: .67238;--f-l1: 1.44195;--f-i2: 2.44492;--f-rbx: 2.26451;--f-rby: .05086;--f-rex: 1.21501;--f-rey: .72141;position:relative;width:fit-content;max-width:100%;padding:58px 0 44px;margin:10px 0 44px}.drawing-hero h1{margin:0}.fdims{position:absolute;top:58px;left:0;width:0;height:0}.fd{position:absolute}.fd .ex,.fd .dl{position:absolute;background:var(--line-strong)}.fd-w .ex,.fd-cap .dl{transform:translate(-.5px)}.fd-w .dl,.fd-cap .ex-t{transform:translateY(-.5px)}.fd-cap .ex-b{transform:translateY(.5px)}.fd .ah{position:absolute;width:0;height:0}.fd .val{position:absolute;font-family:var(--mono);font-size:13px;line-height:1;letter-spacing:.06em;color:var(--accent);white-space:nowrap}.fd-cap{top:calc(var(--fs) * var(--f-capc) + var(--f-adj));height:calc(var(--fs) * var(--f-cap));left:calc(var(--fs) * var(--f-eink));width:46px}.fd-cap .ex{height:1px;left:4px;width:26px}.fd-cap .ex-t{top:0}.fd-cap .ex-b{bottom:0}.fd-cap .dl{width:1px;left:22px}.fd-cap .dl-t{top:0;height:50%}.fd-cap .dl-b{bottom:0;height:50%}.fd-cap .ah{left:19px;border-left:3px solid transparent;border-right:3px solid transparent}.fd-cap .ah-u{top:0;border-bottom:8px solid var(--accent)}.fd-cap .ah-d{bottom:0;border-top:8px solid var(--accent)}.fd-cap .val{left:32px;top:50%;transform:translateY(-50%)}.fd-w{height:0}.fd-w .ex{width:1px}.fd-w .ex-a{left:0}.fd-w .ex-b{left:100%}.fd-w .dl{height:1px;width:15px;top:0}.fd-w .dl-a{right:calc(100% + 8px)}.fd-w .dl-b{left:calc(100% + 8px)}.fd-w .ah{top:-3px;border-top:3px solid transparent;border-bottom:3px solid transparent}.fd-w .ah-l{left:-8px;border-left:8px solid var(--accent)}.fd-w .ah-r{left:100%;border-right:8px solid var(--accent)}.fd-w .val{left:calc(100% + 31px);top:0;transform:translateY(-50%)}.fd-u{left:calc(var(--fs) * var(--f-u1));width:calc(var(--fs) * var(--f-uw));top:calc(-26px + var(--f-adj))}.fd-u .ex{top:-8px;height:calc(30px - var(--fs) * var(--f-capt))}.fd-l{left:calc(var(--fs) * var(--f-l1));width:calc(var(--fs) * var(--f-lw));top:calc(var(--fs) * var(--f-basc) + 44px + var(--f-adj))}.fd-l .ex{bottom:-8px;height:calc(48px - var(--fs) * var(--f-re))}.fd-t{left:calc(var(--fs) * var(--f-i2));width:calc(var(--fs) * var(--f-t));top:calc(var(--fs) * var(--f-basc) + 20px + var(--f-adj))}.fd-t .ex{bottom:-8px;height:calc(24px - var(--fs) * var(--f-re))}.fd-lead{position:absolute;overflow:visible}.fd-lead path{fill:none;stroke:var(--line-strong);stroke-width:1}.fd-lead .tip{fill:var(--accent);stroke:none}.fd-lead text{font-family:var(--mono);font-size:13px;letter-spacing:.06em;fill:var(--accent)}.fd-rb{left:calc(var(--fs) * var(--f-rbx) - 1.29px);top:calc(var(--fs) * var(--f-rby) - 56.71px + var(--f-adj))}.fd-re{left:calc(var(--fs) * var(--f-rex) - 48.71px);top:calc(var(--fs) * var(--f-rey) - 1.29px + var(--f-adj))}@media(max-width:859px){.fdims{display:none}.drawing-hero{padding:0;margin:16px 0 32px}}.hero .tagline{max-width:56ch;color:var(--muted);font-size:1.15rem}.hero-actions{display:flex;gap:16px;margin-top:36px;flex-wrap:wrap}.btn{display:inline-block;font-family:var(--mono);font-size:13.5px;letter-spacing:.14em;text-transform:uppercase;padding:12px 22px;border:1px solid var(--line-strong);color:var(--text)}.btn:hover{border-color:var(--accent);color:var(--accent);text-decoration:none}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:#a81d23;color:#fff}.section{padding:72px 0 0}.section-head{display:flex;align-items:baseline;gap:16px;margin-bottom:36px}.section-head h2{font-family:var(--draw);text-transform:uppercase;font-size:1.55rem;font-weight:400}.section-head .rule{flex:1;height:1px;background:var(--line)}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:24px}.project-card{border:1px solid var(--line-strong);background:var(--surface);display:flex;flex-direction:column;transition:border-color .15s ease;color:var(--text)}.project-card:hover{border-color:var(--accent);text-decoration:none}.project-card .card-body{padding:20px 22px 24px;display:flex;flex-direction:column;gap:10px;flex:1}.project-card .card-meta{display:flex;justify-content:space-between;font-family:var(--mono);font-size:12.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}.project-card h3{font-size:1.25rem;font-weight:700}.project-card p{color:var(--muted);font-size:.95rem;flex:1}.tag-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.tag{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border:1px solid var(--line);padding:3px 9px}.status-chip{font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;padding:3px 9px;border:1px solid var(--accent);color:var(--accent);background:var(--accent-dim)}.photo-ph{border:1px solid var(--line);background:repeating-linear-gradient(-45deg,transparent 0 14px,rgba(0,0,0,.035) 14px 28px),var(--surface-2);display:flex;align-items:center;justify-content:center;position:relative}.photo-ph:before,.photo-ph:after{content:"";position:absolute;width:14px;height:14px;border-color:var(--line-strong);border-style:solid}.photo-ph:before{top:8px;left:8px;border-width:1px 0 0 1px}.photo-ph:after{bottom:8px;right:8px;border-width:0 1px 1px 0}.photo-ph .ph-label{font-family:var(--mono);font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);text-align:center;padding:12px}.iso-thumb{border-bottom:1px solid var(--line-strong);background:var(--surface);position:relative}.iso-thumb:before,.iso-thumb:after{content:"";position:absolute;width:14px;height:14px;border-color:var(--line-strong);border-style:solid}.iso-thumb:before{top:8px;left:8px;border-width:1px 0 0 1px}.iso-thumb:after{bottom:8px;right:8px;border-width:0 1px 1px 0}.iso-thumb svg{position:absolute;inset:9%;width:82%;height:82%}.photo-ph .ph-scale{position:absolute;bottom:10px;left:32px;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);opacity:.7}.project-header{padding:64px 0 0}.breadcrumb{font-family:var(--mono);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}.breadcrumb a{color:var(--faint)}.breadcrumb a:hover{color:var(--accent)}.project-header h1{font-family:var(--draw);text-transform:uppercase;font-size:clamp(2rem,5vw,3.1rem);font-weight:400;letter-spacing:-.02em;line-height:1.08;margin:14px 0 12px}.project-header .tagline{color:var(--muted);font-size:1.1rem;max-width:62ch}.meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));border:1px solid var(--line-strong);margin:36px 0 0}.meta-grid>div{padding:14px 18px;border-right:1px solid var(--line-strong)}.meta-grid>div:last-child{border-right:none}.meta-grid .meta-value{font-size:.95rem;margin-top:4px}.prose p,.prose ul,.prose h2,.prose .callout{max-width:72ch}.prose h2{font-family:var(--draw);text-transform:uppercase;font-size:1.35rem;font-weight:400;margin:56px 0 16px;display:flex;align-items:baseline;gap:14px}.prose h2 .num{font-family:var(--mono);font-size:.8rem;color:var(--accent);letter-spacing:.1em}.prose p{color:var(--muted);margin-bottom:16px}.prose strong{color:var(--text)}.prose ul{color:var(--muted);padding-left:22px;margin-bottom:16px}.prose li{margin-bottom:8px}.callout{border:1px solid var(--line);border-left:2px solid var(--accent);background:var(--surface);padding:18px 22px;margin:24px 0;color:var(--muted);font-size:.95rem}.media-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:32px 0}.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--line-strong);border:1px solid var(--line-strong);margin:32px 0}.stat{background:var(--surface);padding:20px 18px}.stat .stat-value{font-family:var(--draw);font-size:1.6rem;color:var(--accent)}.stat .stat-label{font-family:var(--mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin-top:6px}.resume-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:20px;padding:64px 0 36px;border-bottom:1px solid var(--line)}.resume-head h1{font-family:var(--draw);text-transform:uppercase;font-size:clamp(2rem,4.5vw,2.8rem);font-weight:400;letter-spacing:-.01em}.resume-section{padding-top:48px}.resume-entry{display:grid;grid-template-columns:180px 1fr;gap:8px 32px;padding:22px 0;border-bottom:1px solid var(--line)}.resume-entry .when{font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--faint);padding-top:4px}.resume-entry h3{font-size:1.1rem;font-weight:700}.resume-entry .org{color:var(--accent);font-size:.95rem;margin-bottom:8px}.resume-entry p,.resume-entry ul{color:var(--muted);font-size:.95rem}.resume-entry ul{padding-left:20px}.resume-entry li{margin-bottom:6px}.skills-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:24px}.skills-grid h3{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-bottom:10px}@media(max-width:640px){.resume-entry{grid-template-columns:1fr}.hero{padding:64px 0 56px}.site-header .container{height:auto;flex-direction:column;align-items:flex-start;gap:8px;padding-top:14px;padding-bottom:14px}.site-nav{gap:22px}}
