:root{--font-sans:var(--font-inter,ui-sans-serif, system-ui, sans-serif);--font-serif:var(--font-fraunces,ui-serif, Georgia, "Times New Roman", serif);--font-mono:var(--font-jetbrains-mono,ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);--paper:#fff;--desk:#eceae3;--ink:#1c1b19;--ink-soft:#4c4a45;--ink-muted:#78756e;--hairline:#e4e1d9;--accent:#2d4a63;--chip:#f3f1ea;--measure:46rem}@media (prefers-color-scheme:dark){:root{--paper:#1a1917;--desk:#100f0e;--ink:#eae7e0;--ink-soft:#c3bfb6;--ink-muted:#8f8b82;--hairline:#302e2a;--accent:#8fb3d6;--chip:#24221f}}*,:before,:after{box-sizing:border-box}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}html{text-size-adjust:100%}body{background:var(--desk);color:var(--ink);font-family:var(--font-sans);font-feature-settings:"kern", "liga", "calt";-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.6}:root{--pad-block:3.4rem;--pad-inline:4rem}body{padding:clamp(0px,4vw,3rem) 1rem}.page{background:var(--paper);max-width:calc(var(--measure) + var(--pad-inline) * 2);padding:var(--pad-block) var(--pad-inline);border-radius:6px;margin:0 auto;box-shadow:0 1px 2px #1413110f,0 12px 40px -12px #1413112e}.masthead{align-items:center;gap:1.6rem;margin-bottom:2rem;display:flex}.masthead-text{min-width:0}.avatar{object-fit:cover;object-position:50% 40%;border:3px solid var(--paper);width:112px;height:112px;box-shadow:0 0 0 1px var(--hairline), 0 4px 14px -4px #1413114d;border-radius:50%;flex:none}.name{font-family:var(--font-serif);letter-spacing:-.015em;margin:0;font-size:clamp(2.1rem,5vw,2.9rem);font-weight:560;line-height:1.05}.headline{color:var(--accent);letter-spacing:.005em;margin:.55rem 0 0;font-size:1.02rem;font-weight:500}.contact{color:var(--ink-muted);flex-wrap:wrap;gap:.35rem 1.1rem;margin-top:1rem;font-size:.85rem;display:flex}.contact a{color:var(--ink-soft);border-bottom:1px solid var(--hairline);text-decoration:none;transition:border-color .15s,color .15s}.contact a:hover{color:var(--accent);border-color:var(--accent)}.contact .sep{color:var(--hairline)}.summary{color:var(--ink-soft);max-width:42rem;margin:0 0 .5rem;font-size:1.06rem;line-height:1.65}.summary p{margin:0}.section{margin-top:2.4rem}.section-label{letter-spacing:.16em;text-transform:uppercase;color:var(--ink-muted);align-items:baseline;gap:1rem;margin:0 0 1.25rem;font-size:.72rem;font-weight:600;display:flex}.section-label:after{content:"";background:var(--hairline);flex:1;height:1px}.skills{grid-template-columns:9.5rem 1fr;gap:.85rem 1.5rem;display:grid}.skills dt{color:var(--ink);padding-top:.1rem;font-size:.9rem;font-weight:600}.skills dd{color:var(--ink-soft);margin:0;font-size:.94rem}.skills dd .dot{color:var(--hairline);padding:0 .3rem}.entry{margin-bottom:1.9rem}.entry:last-child{margin-bottom:0}.entry-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.entry-role{color:var(--ink);margin:0;font-size:1.06rem;font-weight:600;line-height:1.3}.entry-dates{font-family:var(--font-mono);color:var(--ink-muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.78rem}.entry-sub{color:var(--ink-soft);flex-wrap:wrap;align-items:baseline;gap:.4rem .6rem;margin:.15rem 0 .6rem;font-size:.92rem;display:flex}.entry-company{color:var(--accent);font-weight:500;text-decoration:none}.entry-company:hover{text-underline-offset:2px;text-decoration:underline}.entry-location{color:var(--ink-muted)}.entry-location:before{content:"·";color:var(--hairline);padding-right:.55rem}.prose{color:var(--ink-soft);font-size:.95rem;line-height:1.6}.prose ul{margin:0;padding-left:1.05rem;list-style:none}.prose li{margin:.3rem 0;padding-left:.15rem;position:relative}.prose li:before{content:"";background:var(--accent);opacity:.65;border-radius:50%;width:4px;height:4px;position:absolute;top:.62em;left:-.85rem}.prose strong{color:var(--ink);font-weight:600}.prose p{margin:.3rem 0}.entry-tags{flex-wrap:wrap;gap:.35rem;margin-top:.7rem;display:flex}.tag{font-family:var(--font-mono);color:var(--ink-muted);background:var(--chip);letter-spacing:0;border-radius:999px;padding:.14rem .58rem;font-size:.7rem}.edu{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.edu-school{color:var(--ink);font-weight:600}.edu-program{color:var(--ink-soft);font-size:.95rem}.edu-meta{font-family:var(--font-mono);color:var(--ink-muted);text-align:right;font-variant-numeric:tabular-nums;font-size:.78rem}.edu-note{color:var(--accent)}.colophon{border-top:1px solid var(--hairline);color:var(--ink-muted);flex-wrap:wrap;justify-content:space-between;gap:1rem;margin-top:2.6rem;padding-top:1.1rem;font-size:.75rem;display:flex}@media (width<=640px){:root{--pad-block:2.2rem;--pad-inline:1.6rem}.masthead{gap:1.1rem}.avatar{width:84px;height:84px}.skills{grid-template-columns:1fr;gap:.2rem 0}.skills dt{padding-top:.9rem}.skills dt:first-child{padding-top:0}}@media print{:root{--paper:#fff;--desk:#fff;--ink:#16150f;--ink-soft:#33322c;--ink-muted:#5f5d55;--hairline:#d9d6cd;--accent:#223c52;--chip:#f1efe8}html,body{background:#fff;margin:0;padding:0}.page{width:100%;max-width:none;box-shadow:none;border-radius:0;margin:0;padding:14mm 16mm}.no-print{display:none!important}.avatar{box-shadow:0 0 0 1px var(--hairline);width:104px;height:104px}a{color:inherit}.entry,.edu{break-inside:avoid}*{print-color-adjust:exact}}.print-fab[data-astro-cid-pzah5oji]{z-index:50;font:500 .9rem/1 var(--font-sans);color:#fff;background:var(--accent);cursor:pointer;border:none;border-radius:999px;align-items:center;gap:.5rem;padding:.6rem 1rem;transition:transform .12s,box-shadow .12s,opacity .12s;display:inline-flex;position:fixed;bottom:clamp(1rem,4vw,2.25rem);right:clamp(1rem,4vw,2.25rem);box-shadow:0 6px 20px -6px #14131173}.print-fab[data-astro-cid-pzah5oji]:hover{transform:translateY(-1px);box-shadow:0 10px 26px -8px #14131180}.print-fab[data-astro-cid-pzah5oji]:active{transform:translateY(0)}.print-fab[data-astro-cid-pzah5oji] svg[data-astro-cid-pzah5oji]{flex:none}@media (prefers-color-scheme:dark){.print-fab[data-astro-cid-pzah5oji]{color:#14130f}}
