@font-face{font-family:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/fonts/newsreader-latin-wght-normal.woff2) format("woff2-variations");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+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/fonts/newsreader-latin-ext-wght-normal.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Newsreader Variable;font-style:italic;font-display:swap;font-weight:200 800;src:url(/fonts/newsreader-latin-wght-italic.woff2) format("woff2-variations");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+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Newsreader Variable;font-style:italic;font-display:swap;font-weight:200 800;src:url(/fonts/newsreader-latin-ext-wght-italic.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/fonts/inter-tight-latin-wght-normal.woff2) format("woff2-variations");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+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/fonts/inter-tight-latin-ext-wght-normal.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Tight Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/fonts/inter-tight-latin-wght-italic.woff2) format("woff2-variations");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+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Tight Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/fonts/inter-tight-latin-ext-wght-italic.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/fonts/jetbrains-mono-latin-wght-normal.woff2) format("woff2-variations");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+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/fonts/jetbrains-mono-latin-ext-wght-normal.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--font-serif: "Newsreader Variable", "Iowan Old Style", Georgia, "Times New Roman", serif;--font-sans: "Inter Tight Variable", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-mono: "JetBrains Mono Variable", ui-monospace, "SF Mono", "Cascadia Code", Menlo, monospace;--step--1: clamp(.83rem, .79rem + .18vw, .94rem);--step-0: clamp(1rem, .95rem + .24vw, 1.13rem);--step-1: clamp(1.2rem, 1.11rem + .43vw, 1.5rem);--step-2: clamp(1.44rem, 1.29rem + .73vw, 2rem);--step-3: clamp(1.73rem, 1.49rem + 1.18vw, 2.66rem);--step-4: clamp(2.07rem, 1.71rem + 1.83vw, 3.55rem);--step-5: clamp(2.49rem, 1.93rem + 2.78vw, 4.73rem);--step-6: clamp(2.99rem, 2.16rem + 4.14vw, 6.31rem);--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-6: 1.5rem;--sp-8: 2rem;--sp-12: 3rem;--sp-16: 4rem;--sp-24: 6rem;--sp-32: 8rem;--measure: 66ch;--container: 72rem;--radius: 2px;--border-thin: 1px;--shadow-light: 0 1px 2px rgba(0, 0, 0, .05);--shadow-dark: 0 1px 0 rgba(255, 255, 255, .03)}:root{--bg: #ffffff;--bg-raised: #fafafa;--ink: #0a0a0a;--ink-soft: #45474b;--ink-faint: #6a6c70;--rule: #e6e6e6;--accent: #2563eb;--accent-ink: #ffffff;--pos: #047857;--shadow: var(--shadow-light);color-scheme:light}[data-mode=dark]{--bg: #0a0a0a;--bg-raised: #141414;--ink: #f2f2f2;--ink-soft: #b0b0b2;--ink-faint: #8a8a8d;--rule: #222222;--accent: #3b82f6;--accent-ink: #0a0a0a;--pos: #34d399;--shadow: var(--shadow-dark);color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-sans);font-size:var(--step-0);line-height:1.6;font-feature-settings:"kern" 1,"liga" 1,"cv11" 1;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;transition:background-color .4s ease,color .4s ease}h1,h2,h3,h4{line-height:1.08;font-weight:600;letter-spacing:-.02em;margin:0;text-wrap:balance}p{margin:0;text-wrap:pretty}a{color:inherit;text-decoration-color:currentColor;text-underline-offset:.2em}img{max-width:100%;display:block}::selection{background:var(--accent);color:var(--accent-ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--radius)}:is(#main,#work,#projects,#experience,#about,#contact){scroll-margin-top:5rem}.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--sp-6)}.mono{font-family:var(--font-mono);font-feature-settings:"tnum" 1}.eyebrow{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:var(--sp-4);top:-3rem;background:var(--ink);color:var(--bg);padding:var(--sp-2) var(--sp-4);border-radius:var(--radius);z-index:100;transition:top .2s ease}.skip-link:focus{top:var(--sp-4)}.card[data-astro-cid-mspuyifq]{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-6);background:var(--bg-raised);border:var(--border-thin) solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow);height:100%;transition:border-color .25s ease,transform .25s ease}.card[data-astro-cid-mspuyifq]:hover{border-color:var(--accent);transform:translateY(-2px)}.card--featured[data-astro-cid-mspuyifq]{border-left:3px solid var(--accent)}.card__head[data-astro-cid-mspuyifq]{display:flex;align-items:center;justify-content:space-between}.card__year[data-astro-cid-mspuyifq]{font-size:var(--step--1);color:var(--ink-faint)}.card__title[data-astro-cid-mspuyifq]{font-size:var(--step-1);line-height:1.15}.card__blurb[data-astro-cid-mspuyifq]{color:var(--ink-soft);font-size:var(--step-0);flex-grow:1}.card__stack[data-astro-cid-mspuyifq]{list-style:none;display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-2);margin:0;padding:0}.card__stack[data-astro-cid-mspuyifq] li[data-astro-cid-mspuyifq]{font-size:.72rem;color:var(--ink-faint);border:var(--border-thin) solid var(--rule);border-radius:999px;padding:.1rem .55rem}.card__foot[data-astro-cid-mspuyifq]{display:flex;align-items:center;gap:var(--sp-4);margin-top:var(--sp-1)}.card__link[data-astro-cid-mspuyifq]{font-size:var(--step--1);font-weight:500;text-decoration:none;border-bottom:1px solid transparent;padding-bottom:1px}.card__link[data-astro-cid-mspuyifq]:hover{border-bottom-color:currentColor}.card__link--accent[data-astro-cid-mspuyifq]{color:var(--accent)}.card__private[data-astro-cid-mspuyifq]{font-size:var(--step--1);color:var(--ink-faint);font-style:italic}.switch[data-astro-cid-su6xvggn]{display:inline-flex;align-items:center}.switch__track[data-astro-cid-su6xvggn]{display:inline-flex;border:var(--border-thin) solid var(--rule);border-radius:999px;padding:2px;background:var(--bg-raised)}.switch__opt[data-astro-cid-su6xvggn]{font-family:var(--font-mono);font-size:.72rem;font-weight:500;letter-spacing:.04em;text-decoration:none;line-height:1;display:inline-flex;align-items:center;justify-content:center;padding:.32rem .6rem;border-radius:999px;color:var(--ink-soft);transition:background-color .2s ease,color .2s ease}.switch__opt[data-astro-cid-su6xvggn].is-active{background:var(--accent);color:var(--accent-ink)}.switch__opt[data-astro-cid-su6xvggn]:not(.is-active):hover{color:var(--ink)}.tc__mode[data-astro-cid-7tqq6o3h]{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:var(--border-thin) solid var(--rule);border-radius:999px;background:var(--bg-raised);color:var(--ink-soft);cursor:pointer;transition:color .2s ease,border-color .2s ease}.tc__mode[data-astro-cid-7tqq6o3h]:hover{color:var(--ink)}.tc__icon[data-astro-cid-7tqq6o3h]{display:block}.tc__icon--moon[data-astro-cid-7tqq6o3h],[data-mode=dark] .tc__icon--sun[data-astro-cid-7tqq6o3h]{display:none}[data-mode=dark] .tc__icon--moon[data-astro-cid-7tqq6o3h]{display:block}.ed{--gutter: clamp(1.5rem, 5vw, 5rem)}.ed-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:saturate(120%) blur(6px);border-bottom:var(--border-thin) solid var(--rule)}.ed-header__inner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding-block:var(--sp-3)}.ed-header__controls{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;justify-content:flex-end}.ed-wordmark{font-family:var(--font-serif);font-size:var(--step-1);font-weight:600;letter-spacing:-.02em;text-decoration:none;opacity:0;transform:translateY(.3em);transition:opacity .35s ease,transform .35s ease;pointer-events:none}.ed-wordmark.is-visible{opacity:1;transform:translateY(0);pointer-events:auto}.ed-wordmark span{color:inherit}.ed-nav{display:none;gap:var(--sp-6)}.ed-nav a{text-decoration:none;font-size:var(--step--1);color:var(--ink-soft);letter-spacing:.02em}.ed-nav a:hover{color:var(--ink)}@media(min-width:56rem){.ed-nav{display:flex}}.ed-section{padding-block:var(--sp-24);border-top:var(--border-thin) solid var(--rule)}.ed-section:first-of-type{border-top:0}.ed-section__head{display:grid;gap:var(--sp-2);margin-bottom:var(--sp-12)}.ed-section__num{font-family:var(--font-mono);font-size:var(--step--1);color:var(--accent);letter-spacing:.1em}.ed-section__title{font-family:var(--font-serif);font-size:var(--step-3);font-weight:600}.ed-hero{padding-block:clamp(3rem,9vw,7rem) var(--sp-16)}.ed-hero__status{display:inline-flex;align-items:center;font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.02em;color:var(--ink-faint);border:var(--border-thin) solid var(--rule);border-radius:999px;padding:.3rem .8rem;margin-bottom:var(--sp-6)}.ed-hero__title{font-family:var(--font-serif);font-size:var(--step-6);font-weight:600;letter-spacing:-.03em;max-width:16ch}.ed-hero__title em{font-style:italic;color:var(--accent)}.ed-hero__lede{font-size:var(--step-1);color:var(--ink-soft);max-width:46ch;margin-top:var(--sp-6)}.ed-hero__role{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-top:var(--sp-8)}.ed-cta{display:flex;flex-wrap:wrap;gap:var(--sp-3);margin-top:var(--sp-6)}.btn{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--step-0);font-weight:500;text-decoration:none;padding:.7rem 1.3rem;border-radius:var(--radius);border:var(--border-thin) solid var(--ink);transition:background-color .2s ease,color .2s ease,transform .2s ease}.btn--primary{background:var(--ink);color:var(--bg)}.btn--primary:hover{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn--ghost:hover{background:var(--ink);color:var(--bg)}.ed-hero__avail{display:inline-flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-4);font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.02em;color:var(--ink-soft)}.ed-hero__avail-dot{width:8px;height:8px;border-radius:50%;background:var(--pos);box-shadow:0 0 color-mix(in srgb,var(--pos) 50%,transparent);animation:avail-pulse 2.4s ease-out infinite;flex:none}@keyframes avail-pulse{0%{box-shadow:0 0 color-mix(in srgb,var(--pos) 45%,transparent)}70%{box-shadow:0 0 0 7px color-mix(in srgb,var(--pos) 0%,transparent)}to{box-shadow:0 0 color-mix(in srgb,var(--pos) 0%,transparent)}}.ed-cases{display:grid;gap:var(--sp-12)}.ed-case{display:grid;gap:var(--sp-4);grid-template-columns:1fr;padding-bottom:var(--sp-12);border-bottom:var(--border-thin) solid var(--rule)}.ed-case:last-child{border-bottom:0;padding-bottom:0}@media(min-width:52rem){.ed-case{grid-template-columns:1fr 1.4fr;gap:var(--sp-12)}}.ed-case__meta{display:flex;flex-direction:column;gap:var(--sp-3)}.ed-case__flag{align-self:flex-start;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);border:1px solid var(--accent);border-radius:999px;padding:.15rem .6rem}.ed-case__org{font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-faint)}.ed-case__title{font-family:var(--font-serif);font-size:var(--step-2);font-weight:600}.ed-case__nums{display:flex;flex-wrap:wrap;gap:var(--sp-6);margin-top:var(--sp-2)}.ed-case__num{display:flex;flex-direction:column}.ed-case__num b{font-family:var(--font-mono);font-size:var(--step-2);color:var(--accent);letter-spacing:-.02em}.ed-case__num span{font-size:var(--step--1);color:var(--ink-faint)}.ed-prose{color:var(--ink-soft)}.ed-prose h3{font-family:var(--font-serif);font-size:var(--step-1);color:var(--ink);margin-top:1.25rem;margin-bottom:var(--sp-2)}.ed-prose h3:first-child{margin-top:0}.ed-prose p{margin-bottom:var(--sp-4);max-width:var(--measure)}.ed-prose ul{margin:0 0 var(--sp-4);padding-left:var(--sp-4)}.ed-prose li{margin-bottom:var(--sp-2)}.ed-prose strong{color:var(--ink)}.ed-chips{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-2)}.ed-chip{font-family:var(--font-mono);font-size:.72rem;color:var(--ink-faint);border:var(--border-thin) solid var(--rule);border-radius:999px;padding:.15rem .6rem}.ed-grid{display:grid;gap:var(--sp-6);grid-template-columns:1fr}@media(min-width:40rem){.ed-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:60rem){.ed-grid{grid-template-columns:repeat(3,1fr)}}.ed-subhead{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin:var(--sp-12) 0 var(--sp-6)}.ed-timeline{display:grid;gap:var(--sp-12)}.ed-exp{display:grid;gap:var(--sp-4);grid-template-columns:1fr}@media(min-width:52rem){.ed-exp{grid-template-columns:14rem 1fr;gap:var(--sp-8)}}.ed-exp__period{font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-faint)}.ed-exp__role{font-family:var(--font-serif);font-size:var(--step-1);font-weight:600}.ed-exp__company{color:var(--accent)}.ed-exp__bullets{margin:var(--sp-3) 0 0;padding-left:var(--sp-4);color:var(--ink-soft)}.ed-exp__bullets li{margin-bottom:var(--sp-2);max-width:var(--measure)}.ed-two{display:grid;gap:var(--sp-16);grid-template-columns:1fr}@media(min-width:52rem){.ed-two{grid-template-columns:1.2fr 1fr}}.ed-skillgroup{margin-bottom:var(--sp-6)}.ed-skillgroup h4{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:var(--sp-2)}.ed-skillgroup ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--sp-2)}.ed-skillgroup li{font-size:var(--step--1);border:var(--border-thin) solid var(--rule);border-radius:var(--radius);padding:.25rem .6rem}.ed-edu{display:grid;gap:var(--sp-6)}.ed-edu__item{display:grid;gap:var(--sp-1);padding-bottom:var(--sp-4);border-bottom:var(--border-thin) solid var(--rule)}.ed-edu__item:last-child{border-bottom:0}.ed-edu__item.is-hl .ed-edu__school{color:var(--accent)}.ed-edu__school{font-family:var(--font-serif);font-size:var(--step-1);font-weight:600}.ed-edu__degree{color:var(--ink-soft)}.ed-edu__meta{font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-faint)}.ed-langs{display:flex;flex-wrap:wrap;gap:var(--sp-4);margin-top:var(--sp-6)}.ed-lang b{font-family:var(--font-serif)}.ed-lang span{color:var(--ink-faint);font-family:var(--font-mono);font-size:var(--step--1);margin-left:var(--sp-1)}.ed-contact__title{font-family:var(--font-serif);font-size:var(--step-4);font-weight:600;max-width:14ch}.ed-contact__avail{max-width:54ch;margin-top:var(--sp-5);color:var(--ink-soft);font-size:var(--step-0)}.ed-contact__links{display:flex;flex-wrap:wrap;gap:var(--sp-6);margin-top:var(--sp-6)}.ed-contact__links a{font-size:var(--step-1);text-decoration:none;border-bottom:2px solid var(--ink-soft);padding-bottom:2px;transition:border-color .2s ease}.ed-contact__links a:hover{border-color:var(--accent)}.ed-footer{border-top:var(--border-thin) solid var(--rule);padding-block:var(--sp-8);display:flex;flex-wrap:wrap;gap:var(--sp-4);justify-content:space-between;align-items:center;color:var(--ink-faint);font-size:var(--step--1)}
