.prose{font-family:var(--serif);font-size:1.1875rem;line-height:1.65}.prose+.prose{margin-top:1.1em}.about-subtitle{margin-top:3rem;margin-bottom:1rem;font-size:var(--step-0);font-weight:600}.outcomes{padding:0;list-style:none;border-top:1px solid var(--rule)}.outcomes li{display:grid;grid-template-columns:6.5rem 1fr;gap:1rem;align-items:baseline;padding-block:.85rem;border-bottom:1px solid var(--rule)}.outcome-figure{font-family:var(--serif);font-size:var(--step-2);font-weight:400;line-height:1;font-variant-numeric:lining-nums tabular-nums;color:var(--signal)}.skills{display:grid;gap:1.25rem}.skills dt{font-weight:500}.skills dd{color:var(--graphite)}@media (max-width: 480px){.outcomes li{grid-template-columns:1fr;gap:.25rem}}.timeline{padding:0;list-style:none}.timeline-item{display:grid;grid-template-columns:4rem 1fr;gap:1.25rem;padding-bottom:2.25rem;position:relative}.timeline-item:before{content:"";position:absolute;left:4.6rem;top:.55rem;bottom:0;width:1px;background:var(--rule)}.timeline-item:last-child:before{display:none}.timeline-item>div{padding-left:1.25rem}.timeline-year{font-family:var(--serif);font-size:var(--step-1);line-height:1.3;font-variant-numeric:lining-nums tabular-nums;color:var(--graphite)}.timeline-role{font-family:var(--serif);font-size:var(--step-1);font-weight:500;line-height:1.3}.timeline-company{color:var(--graphite);margin-bottom:.6rem}.timeline-description{font-family:var(--serif);font-size:1.0625rem;line-height:1.65}.contact-lead{font-family:var(--serif);font-size:1.1875rem;line-height:1.65}.contact-email{margin-top:1rem;font-family:var(--serif);font-size:clamp(1.5rem,4vw,var(--step-3));line-height:1.15;letter-spacing:-.015em;overflow-wrap:anywhere}.contact-email a{color:var(--signal);text-decoration-color:currentColor}.contact-email a:hover{color:var(--ink)}.contact-details{display:grid;gap:1.1rem;margin-top:3rem}.contact-details>div{display:grid;grid-template-columns:8.5rem 1fr;gap:0 1rem}.contact-details dt{color:var(--graphite)}.contact-details dd{grid-column:2}.footer{padding-block:2rem 3rem;border-top:1px solid var(--rule);color:var(--graphite);font-size:.875rem}@media (max-width: 480px){.contact-details>div{grid-template-columns:1fr}.contact-details dd{grid-column:1}}.footer-quiet,.footer-quiet:hover{color:inherit;text-decoration:none;cursor:text}.landing{padding-block:clamp(4rem,12vh,8rem) 5rem}.landing-title{font-family:var(--serif);font-size:clamp(2.6rem,7.2vw,5.75rem);font-weight:300;font-variation-settings:"opsz" 72;line-height:1.02;letter-spacing:-.025em;max-width:18ch;text-wrap:balance}.landing-line{display:block;animation:line-in .9s cubic-bezier(.2,.7,.2,1) both}@keyframes line-in{0%{opacity:0;transform:translateY(.35em);clip-path:inset(0 0 100% 0)}to{opacity:1;transform:none;clip-path:inset(0 0 -20% 0)}}.landing-meta{display:grid;gap:1.25rem;max-width:36rem;margin-top:3rem;margin-left:calc(var(--margin-col) + var(--gutter))}.landing-intro{font-size:1.125rem;line-height:1.6}.landing-status{display:flex;align-items:center;gap:.6rem;color:var(--graphite)}.status-dot{width:.55rem;height:.55rem;border-radius:50%;background:#1a9a5b;flex:none}.landing-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:.5rem}.landing-social{display:flex;gap:1.5rem}@media (max-width: 860px){.landing-meta{margin-left:0}}.header{position:sticky;top:0;z-index:10;background:var(--paper);border-bottom:1px solid var(--rule)}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:3.75rem}.header-name{font-family:var(--serif);font-size:1.125rem;font-weight:500;text-decoration:none}.header-links{display:flex;align-items:center;gap:1.5rem;padding:0;list-style:none;font-size:.9375rem}.header-links a{text-decoration:none}.theme-toggle{padding:.3rem .7rem;border:1px solid var(--rule);border-radius:999px;background:none;color:var(--graphite);font:inherit;cursor:pointer}.theme-toggle:hover{color:var(--ink);border-color:var(--ink)}@media (max-width: 640px){.header-name{display:none}.header-inner{justify-content:center}.header-links{gap:1.1rem}}.projects{row-gap:3.5rem}.project{display:grid;grid-column:1 / -1;grid-template-columns:subgrid}.project+.project{padding-top:3.5rem;border-top:1px solid var(--rule)}.project-meta{color:var(--graphite);font-size:.9375rem;line-height:1.5;padding-top:.45rem}.project-title{font-family:var(--serif);font-size:var(--step-2);font-weight:400;line-height:1.2;letter-spacing:-.01em;margin-bottom:1rem}.project-description{font-family:var(--serif);font-size:1.125rem;line-height:1.65}.project-description p+p{margin-top:.9em}.project-kind{color:var(--ink);font-weight:500}.project-featured .project-body{padding-top:1.5rem;border-top:3px solid var(--signal)}.project-featured .project-meta{padding-top:1.9rem}.project-featured .project-kind{color:var(--signal)}.project-featured .project-title{font-size:clamp(1.9rem,3.4vw,var(--step-3));line-height:1.12;letter-spacing:-.02em;margin-bottom:1.25rem;text-wrap:balance}.project-featured .project-description{font-size:1.1875rem}.project-tech{margin-top:1.25rem;color:var(--graphite);font-size:.9375rem}.project-link{display:inline-block;margin-top:1rem;font-weight:500;color:var(--signal);text-decoration-color:currentColor}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media (max-width: 860px){.project{grid-template-columns:minmax(0,1fr);row-gap:.75rem}.project-meta{order:2;padding-top:0}.project-meta p{display:inline}.project-meta p+p:before{content:", "}.project-body{display:contents}.project-title{order:1;margin-bottom:0}.project-featured .project-meta{padding-top:0}.project-featured .project-title{padding-top:1.25rem;border-top:3px solid var(--signal);margin-bottom:0}.project-description,.project-tech,.project-link{order:3}.project-link{justify-self:start}}@font-face{font-family:Newsreader;src:url(/fonts/newsreader-latin.woff2) format("woff2");font-weight:300 600;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Sans;src:url(/fonts/ibm-plex-sans-latin.woff2) format("woff2");font-weight:400 600;font-style:normal;font-display:swap}:root{--paper: #eef0ea;--ink: #16181d;--graphite: #5b6068;--rule: #c9cdc4;--signal: #7a2e6b;--signal-ink: #ffffff;--serif: "Newsreader", "Iowan Old Style", Georgia, serif;--sans: "IBM Plex Sans", system-ui, -apple-system, sans-serif;--step-0: 1rem;--step-1: 1.25rem;--step-2: 1.75rem;--step-3: 2.75rem;--measure: 42rem;--margin-col: 13rem;--gutter: 3rem;--page: calc(var(--margin-col) + var(--gutter) + var(--measure));color-scheme:light}[data-theme=dark]{--paper: #15171c;--ink: #e6e8e1;--graphite: #9ba1a8;--rule: #2e3238;--signal: #e39bd4;--signal-ink: #15171c;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:5rem}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:var(--step-0);line-height:1.55;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}h1,h2,h3,p,ul,ol,dl,dd{margin:0}a{color:inherit;text-decoration-color:var(--rule);text-decoration-thickness:1px;text-underline-offset:.2em}a:hover{color:var(--signal);text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:2px}::selection{background:var(--signal);color:var(--signal-ink)}.skip-link{position:absolute;left:1rem;top:-3rem;padding:.5rem .9rem;background:var(--ink);color:var(--paper);z-index:100}.skip-link:focus{top:1rem}.page{width:min(var(--page),100% - 3rem);margin-inline:auto}.section{display:grid;grid-template-columns:var(--margin-col) minmax(0,var(--measure));column-gap:var(--gutter);padding-block:4.5rem;border-top:1px solid var(--rule)}.section-title{font-family:var(--serif);font-size:var(--step-1);font-weight:500;line-height:1.3}@media (max-width: 860px){.section{grid-template-columns:minmax(0,1fr);row-gap:1.75rem;padding-block:3.5rem}}.button{display:inline-flex;align-items:center;min-height:2.75rem;padding:.6rem 1.25rem;border:1px solid var(--ink);border-radius:4px;font:500 var(--step-0) / 1 var(--sans);text-decoration:none;transition:background-color .15s,color .15s}.button:hover{background:var(--ink);color:var(--paper)}.button-primary{background:var(--signal);border-color:var(--signal);color:var(--signal-ink)}.button-primary:hover{background:var(--ink);border-color:var(--ink);color:var(--paper)}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
