@font-face{font-family:Fraunces;font-style:normal;font-weight:300 600;font-display:swap;src:url(/fonts/fraunces-latin-v38.woff2) format("woff2");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:Fraunces;font-style:italic;font-weight:300 400;font-display:swap;src:url(/fonts/fraunces-italic-latin-v38.woff2) format("woff2");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:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-400-latin-v20.woff2) format("woff2");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:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500-latin-v20.woff2) format("woff2");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}:root{color-scheme:light;--paper: #f3f1ea;--paper-2: #ebe8df;--ink: #1b1a17;--ink-2: #4a4841;--pencil: #6b6862;--rule: #d9d5ca;--rule-soft: #e6e2d8;--accent: #2743a8;--accent-hover: #1b2f7a;--accent-soft: rgba(39, 67, 168, .08);--danger: #8b1e1e;--scrim: rgba(243, 241, 234, .82);--nav-bg: rgba(243, 241, 234, .9);--font-serif: "Fraunces", "Iowan Old Style", "Palatino Linotype", Georgia, serif;--font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--radius: 4px;--margin-col: 300px;--gutter: 64px;--page-x: 96px;--measure: 66ch;--nav-h: 60px;--ease: cubic-bezier(.4, 0, .2, 1);--t: .16s var(--ease)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper: #141311;--paper-2: #1b1a17;--ink: #ede9df;--ink-2: #c9c4b8;--pencil: #9b968a;--rule: #2e2c27;--rule-soft: #262420;--accent: #93a7ec;--accent-hover: #b3c2f4;--accent-soft: rgba(147, 167, 236, .1);--danger: #e08a8a;--scrim: rgba(20, 19, 17, .82);--nav-bg: rgba(20, 19, 17, .9)}}:root[data-theme=dark]{color-scheme:dark;--paper: #141311;--paper-2: #1b1a17;--ink: #ede9df;--ink-2: #c9c4b8;--pencil: #9b968a;--rule: #2e2c27;--rule-soft: #262420;--accent: #93a7ec;--accent-hover: #b3c2f4;--accent-soft: rgba(147, 167, 236, .1);--danger: #e08a8a;--scrim: rgba(20, 19, 17, .82);--nav-bg: rgba(20, 19, 17, .9)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--font-serif);font-optical-sizing:auto;font-size:17px;line-height:1.55;overflow-x:hidden;-webkit-font-smoothing:antialiased;transition:background-color .2s var(--ease),color .2s var(--ease)}a{color:inherit}ul,ol{list-style:none}img,svg{display:block;max-width:100%}button,input,select,textarea{font:inherit;color:inherit}strong{font-weight:600;color:var(--ink)}h1,h2,h3{font-weight:500;letter-spacing:-.02em;line-height:1.1}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}::selection{background:var(--ink);color:var(--paper)}.page{width:100%;padding:0 var(--page-x)}.mono{font-family:var(--font-mono)}.meta{font-family:var(--font-mono);font-size:13px;line-height:1.6;color:var(--ink-2)}.meta-small{font-family:var(--font-mono);font-size:12px;color:var(--pencil)}.caps{font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}.mark{font-family:var(--font-mono);font-size:13px;color:var(--accent)}.body{color:var(--ink-2);line-height:1.6}.prose p{color:var(--ink-2);font-size:19px;line-height:1.65;max-width:var(--measure)}.prose p+p{margin-top:18px}.u{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--rule);transition:text-decoration-color var(--t)}.u:hover{text-decoration-color:currentColor}.u-accent{color:var(--accent);text-decoration:underline;text-underline-offset:4px}.u-accent:hover{color:var(--accent-hover)}.btn{display:inline-flex;align-items:center;gap:8px;height:48px;padding:0 22px;border:1px solid var(--ink);border-radius:var(--radius);font-size:17px;text-decoration:none;white-space:nowrap;cursor:pointer;background:transparent;color:var(--ink);transition:background-color var(--t),color var(--t),transform var(--t)}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--ink);color:var(--paper)}.btn-primary:hover{background:var(--ink-2);border-color:var(--ink-2)}.btn-ghost:hover{background:var(--paper-2)}.btn-sm{height:40px;padding:0 16px;font-size:15px}.icon-btn{display:grid;place-items:center;width:40px;height:40px;border:1px solid var(--rule);border-radius:var(--radius);background:transparent;color:var(--ink-2);cursor:pointer;transition:color var(--t),border-color var(--t),background-color var(--t)}.icon-btn:hover{color:var(--ink);border-color:var(--ink)}.note{font-family:var(--font-mono);font-size:13px;line-height:1.6;color:var(--accent);border-left:1px solid var(--accent);padding-left:16px}.stamp{display:inline-block;transform:rotate(-4deg);padding:14px 18px;border:2px solid var(--accent);border-radius:6px;color:var(--accent);font-family:var(--font-mono);font-size:13px;line-height:1.5;letter-spacing:.1em;text-transform:uppercase;text-align:center;opacity:.92}.stamp small{display:block;font-size:11px;letter-spacing:.14em}#navbar{position:fixed;top:0;left:0;right:0;z-index:1000;background:var(--nav-bg);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--ink)}.nav-inner{height:var(--nav-h);padding:0 var(--page-x);display:flex;align-items:center;gap:28px;font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}.nav-logo{color:var(--ink);text-decoration:none;font-family:var(--font-serif);font-size:19px;font-weight:500;letter-spacing:-.01em;text-transform:none;margin-right:auto;animation:logoIn .2s var(--ease)}.nav-logo.is-compact{font-family:var(--font-mono);font-size:14px;letter-spacing:0}.nav-logo.is-compact span{color:var(--accent)}@keyframes logoIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}.nav-links{display:flex;align-items:center;gap:22px}.nav-links a{text-decoration:none;color:var(--ink-2);padding:8px 0;border-bottom:1px solid transparent;transition:color var(--t),border-color var(--t)}.nav-links a:hover{color:var(--ink)}.nav-links a.active-nav{color:var(--ink);border-bottom-color:var(--ink)}.nav-actions{display:flex;align-items:center;gap:12px}.nav-cta{color:var(--ink);text-decoration:underline;text-underline-offset:4px}.hamburger{display:none;flex-direction:column;justify-content:center;gap:5px;padding:0 10px}.hamburger span{display:block;width:100%;height:1.5px;background:var(--ink);transition:transform .25s var(--ease),opacity .2s var(--ease)}.hamburger.open span:nth-child(1){transform:translateY(6.5px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0}.hamburger.open span:nth-child(3){transform:translateY(-6.5px) rotate(-45deg)}.mobile-menu{display:flex;flex-direction:column;padding:8px 20px 18px;background:var(--paper);border-bottom:1px solid var(--ink)}.mobile-menu a{padding:14px 0;border-bottom:1px solid var(--rule);font-family:var(--font-serif);font-size:19px;text-decoration:none;color:var(--ink);text-transform:none;letter-spacing:0}.mobile-menu a:last-child{border-bottom:0;color:var(--accent)}.section{display:grid;grid-template-columns:var(--margin-col) minmax(0,1fr);column-gap:var(--gutter);padding:88px var(--page-x);border-bottom:1px solid var(--rule)}.section-aside{display:flex;flex-direction:column;gap:18px}.section-aside .meta+.meta{margin-top:0}.section-aside .aside-rule{margin-top:6px;padding-top:18px;border-top:1px solid var(--rule)}.section-title{font-size:clamp(34px,3.6vw,52px);margin-bottom:40px;text-wrap:balance}#hero{padding-top:calc(var(--nav-h) + 96px)}.hero-body{position:relative;display:flex;flex-direction:column;gap:28px}.hero-title{font-size:clamp(56px,8.9vw,128px);font-weight:500;line-height:.95;letter-spacing:-.03em;font-variation-settings:"opsz" 144,"WONK" 1}.hero-title .role{display:block;font-style:italic;font-weight:400;font-size:.5em;letter-spacing:-.015em;color:var(--ink);margin-top:10px}.hero-lede{max-width:760px;font-size:clamp(22px,2.1vw,30px);line-height:1.35;color:var(--ink)}.hero-desc{max-width:680px;font-size:19px;line-height:1.6;color:var(--ink-2)}.hero-cta{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:8px}.hero-stamp{margin-left:auto}.rows{display:flex;flex-direction:column}.row{display:grid;grid-template-columns:56px minmax(0,1fr) 260px;column-gap:32px;padding:30px 0;border-top:1px solid var(--rule);cursor:pointer;transition:background-color var(--t)}.row:first-child{border-top-color:var(--ink)}.row:last-child{border-bottom:1px solid var(--ink)}.row-num{padding-top:8px}.row-body{display:flex;flex-direction:column;gap:10px;min-width:0}.row-title{font-size:30px;font-weight:500;letter-spacing:-.01em}.row:hover .row-title{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:6px;text-decoration-color:var(--rule)}.row-text{font-size:17px;line-height:1.55;color:var(--ink-2);max-width:var(--measure)}.row-side{padding-top:6px}.row-more{margin-top:4px}.xp{display:grid;grid-template-columns:200px minmax(0,1fr);column-gap:48px;padding:34px 0;border-top:1px solid var(--rule)}.xp:first-child{border-top-color:var(--ink)}.xp:last-child{border-bottom:1px solid var(--ink)}.xp-year{font-size:64px;font-weight:300;line-height:1;letter-spacing:-.03em;font-variation-settings:"opsz" 144}.xp-when{margin-top:10px}.xp-body{display:flex;flex-direction:column;gap:12px;min-width:0}.xp-role{font-size:30px;font-weight:500;letter-spacing:-.01em}.xp-role .at{font-style:italic;font-weight:300;color:var(--ink-2)}.points{padding-left:20px;display:flex;flex-direction:column;gap:8px;list-style:disc}.points li{font-size:17px;line-height:1.55;color:var(--ink-2);max-width:var(--measure)}.points li::marker{color:var(--pencil)}.xp-readall{display:none}.modal-points li{display:list-item!important}.proj-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:48px;border-top:1px solid var(--ink)}.proj{padding:22px 0;border-bottom:1px solid var(--rule);cursor:pointer;min-width:0}.proj:nth-last-child(-n+2){border-bottom-color:var(--ink)}.proj-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 12px}.proj-title{font-size:24px;font-weight:500;color:var(--ink)}.proj-title a{color:inherit}.proj-text{margin-top:8px;font-size:16px;line-height:1.55;color:var(--ink-2)}.skills{border-top:1px solid var(--ink)}.skills-row{display:grid;grid-template-columns:200px minmax(0,1fr);column-gap:48px;padding:20px 0;border-bottom:1px solid var(--rule)}.skills-row:last-child{border-bottom-color:var(--ink)}.skills-row dt{font-size:20px;font-weight:500}.skills-row dd{font-family:var(--font-mono);font-size:14px;line-height:1.8;color:var(--ink-2)}.facts{display:flex;flex-direction:column;gap:14px}.facts .meta-small{display:block;margin-bottom:2px}.contact-email{font-size:clamp(26px,3.2vw,44px);font-weight:500;letter-spacing:-.02em;color:var(--ink);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:8px;text-decoration-color:var(--accent);width:fit-content;word-break:break-all;transition:text-decoration-color var(--t)}.contact-email:hover{text-decoration-color:var(--ink)}.contact-links{display:flex;flex-wrap:wrap;gap:12px 28px}.contact-links a{font-family:var(--font-mono);font-size:14px;color:var(--ink);text-decoration:underline;text-underline-offset:4px}footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px 24px;padding:22px var(--page-x);border-top:1px solid var(--ink)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--scrim);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);animation:fadeIn .16s var(--ease)}.modal-content{position:relative;width:100%;max-width:680px;max-height:86vh;overflow-y:auto;padding:36px 40px;background:var(--paper);border:1px solid var(--ink);border-radius:var(--radius);animation:modalIn .2s var(--ease)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes modalIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.modal-close{position:absolute;top:18px;right:18px}.modal-title{font-size:34px;padding-right:52px;margin-bottom:8px}.modal-body{margin-top:20px;display:flex;flex-direction:column;gap:20px}.modal-block{display:flex;flex-direction:column;gap:8px}.modal-block p{font-size:17px;line-height:1.6;color:var(--ink-2)}.modal-links{display:flex;flex-wrap:wrap;gap:20px;padding-top:18px;border-top:1px solid var(--rule)}@media(max-width:1100px){:root{--page-x: 48px;--margin-col: 220px;--gutter: 40px}.row{grid-template-columns:48px minmax(0,1fr)}.row-side{grid-column:2;padding-top:0;margin-top:4px}}@media(max-width:860px){:root{--page-x: 24px}.section{grid-template-columns:1fr;row-gap:20px;padding:56px var(--page-x)}.section-aside{gap:8px}.section-aside .aside-rule{display:none}.section-title{margin-bottom:24px}#hero{padding-top:calc(var(--nav-h) + 40px)}.hero-stamp{margin-left:0;transform:rotate(-3deg);margin-top:6px}.nav-links,.nav-cta{display:none}.hamburger{display:flex}.xp{grid-template-columns:1fr;row-gap:10px;padding:22px 0}.xp-year{font-size:44px;display:inline;margin-right:14px}.xp-when{display:inline;margin:0}.xp-role{font-size:24px}.points li:not(:first-child){display:none}.xp-readall{display:inline-block}.proj-grid{grid-template-columns:1fr}.proj:nth-last-child(-n+2){border-bottom-color:var(--rule)}.proj:last-child{border-bottom-color:var(--ink)}.skills-row{grid-template-columns:1fr;row-gap:4px}.row-title{font-size:24px}.modal-content{padding:26px 22px}}@media(max-width:520px){:root{--page-x: 20px}.hero-cta .btn{flex:1 1 auto;justify-content:center}.modal-overlay{padding:0;align-items:flex-end}.modal-content{max-height:92vh;border-radius:var(--radius) var(--radius) 0 0;border-bottom:0}footer{flex-direction:column;align-items:flex-start}}.reveal{opacity:0;transform:translateY(12px);transition:opacity .6s var(--ease),transform .6s var(--ease)}.reveal.is-visible{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}.reveal{opacity:1;transform:none;transition-delay:0s!important}}
