.resume-root{--ink: #0e0e0e;--muted: #3b3b3b;--subtle: #6a6a6a;--line: #d8d6d2;--paper: #faf9f6;--accent: #c2410c;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--serif: "Source Serif 4", Georgia, "Times New Roman", serif;font-family:var(--sans);font-size:14px;line-height:1.55;color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.resume-root *,.resume-root *:before,.resume-root *:after{box-sizing:border-box}.resume-root .page{background:var(--paper);margin:8px auto 0;padding:56px 64px;width:8.5in;max-width:100%;min-height:11in;box-shadow:0 6px 24px #00000014;color:var(--ink)}.resume-root header.masthead{display:grid;grid-template-columns:1fr auto;align-items:end;gap:24px;padding-bottom:18px;border-bottom:1px solid var(--line)}.resume-root .name{font-family:var(--serif);font-weight:600;font-size:42px;letter-spacing:-.01em;line-height:1;margin:0;color:var(--ink)}.resume-root .name .dot{color:var(--accent)}.resume-root .role{margin-top:8px;font-size:13px;color:var(--muted);letter-spacing:.02em}.resume-root .contact{text-align:right;font-size:12px;color:var(--muted);line-height:1.85;font-style:normal}.resume-root .contact a{color:var(--muted);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .15s ease,color .15s ease}.resume-root .contact a:hover{color:var(--accent);border-bottom-color:var(--accent)}.resume-root .contact .row{display:flex;justify-content:flex-end;gap:10px;align-items:baseline}.resume-root .contact .label{font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--subtle)}.resume-root .tag{font-family:var(--mono);font-size:10.5px;font-weight:500;text-transform:uppercase;letter-spacing:.18em;color:var(--accent);display:inline-block;padding-bottom:4px;border-bottom:1px solid var(--accent)}.resume-root section{margin-top:22px}.resume-root .section-head{margin-bottom:12px}.resume-root .summary{margin-top:18px;font-size:13.5px;color:var(--muted);line-height:1.6}.resume-root .summary strong{color:var(--ink);font-weight:600}.resume-root .grid{display:grid;grid-template-columns:1fr 1fr;column-gap:36px;row-gap:22px;margin-top:4px;align-items:start}.resume-root .grid-col{display:flex;flex-direction:column;gap:18px}.resume-root .grid>section,.resume-root .grid>.grid-col>section{margin-top:0}.resume-root .proj-grid{display:grid;grid-template-columns:1fr 1fr;column-gap:28px;row-gap:14px;margin-top:4px}.resume-root .proj-grid .entry{margin-top:0!important}.resume-root .compact.stacked{margin-top:0}.resume-root .entry{display:grid;grid-template-columns:1fr;gap:0}.resume-root section .entry+.entry,.resume-root .grid-col .entry+.entry{margin-top:28px}.resume-root .entry-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}.resume-root .entry-title{font-family:var(--serif);font-size:16.5px;font-weight:600;color:var(--ink);margin:0;line-height:1.25}.resume-root .entry-meta{font-family:var(--mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;color:var(--subtle);white-space:nowrap}.resume-root .entry-sub{font-size:12.5px;color:var(--muted);margin-top:2px}.resume-root .entry-sub .org{color:var(--ink);font-weight:500}.resume-root .entry-sub .mod{font-family:var(--mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;color:var(--accent);margin-left:6px}.resume-root ul.bullets{margin:0;padding:0;list-style:none}.resume-root ul.bullets li{position:relative;padding-left:16px;font-size:12.5px;color:var(--muted);line-height:1.55;margin-top:3px}.resume-root ul.bullets li:first-child{margin-top:0}.resume-root ul.bullets li:before{content:"";position:absolute;left:0;top:.65em;width:8px;height:1px;background:var(--line)}.resume-root ul.bullets li strong{color:var(--ink);font-weight:600}.resume-root .stack{margin-top:6px;display:flex;flex-wrap:wrap;gap:6px}.resume-root .stack span{font-family:var(--mono);font-size:10px;color:var(--subtle);border:1px solid var(--line);padding:2px 6px;letter-spacing:.04em}.resume-root .skills{display:grid;grid-template-columns:1fr 1fr;gap:10px 24px;margin-top:4px}.resume-root .skill-row{font-size:12.5px;color:var(--muted);line-height:1.5}.resume-root .skill-row .label{font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--subtle);display:block;margin-bottom:2px}.resume-root .skill-row .items{color:var(--ink)}.resume-root .compact .entry-title{font-size:14.5px}.resume-root .compact .entry-sub{font-size:12px}.resume-root .compact .entry-note{font-size:12px;color:var(--muted);margin-top:4px;max-width:60ch}.resume-root .compact .entry-note em{font-style:italic;color:var(--ink)}.resume-root a.link{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--line);transition:border-color .15s ease,color .15s ease}.resume-root a.link:hover{color:var(--accent);border-bottom-color:var(--accent)}.resume-root .certs{display:grid;grid-template-columns:1fr;gap:6px;margin-top:4px}.resume-root .cert{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:12.5px;color:var(--muted);padding:4px 0}.resume-root .cert .cert-name{color:var(--ink);font-weight:500}.resume-root .cert .cert-issuer{color:var(--subtle)}.resume-root .cert .cert-date{font-family:var(--mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;color:var(--subtle);white-space:nowrap}.resume-root .pubs{margin-top:4px}.resume-root .pub{font-size:12.5px;color:var(--muted);line-height:1.55;padding:8px 0;border-top:1px solid var(--line)}.resume-root .pub:first-child{border-top:0;padding-top:4px}.resume-root .pub .pub-title{color:var(--ink);font-weight:600;font-family:var(--serif);font-size:13.5px}.resume-root .pub .pub-venue{color:var(--subtle);font-size:11.5px;margin-top:1px;display:block}.resume-root .resume-download{position:fixed;top:20px;right:20px;z-index:50;display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:var(--ink);color:var(--paper);font-family:var(--sans);font-size:12.5px;font-weight:500;letter-spacing:.01em;border:1px solid var(--ink);border-radius:999px;cursor:pointer;box-shadow:0 6px 20px #0000002e;transition:background .15s ease,color .15s ease,transform .15s ease,box-shadow .15s ease}.resume-root .resume-download:hover,.resume-root .resume-download:focus-visible{background:#b45309;border-color:#b45309;transform:translateY(-1px);box-shadow:0 10px 22px #00000038;outline:none}.resume-root .resume-download:active{transform:translateY(0);box-shadow:0 4px 14px #0000002e}.resume-root .resume-download svg{width:14px;height:14px;flex:none}.resume-root .resume-download .kbd{margin-left:2px;font-family:var(--mono);font-size:10px;color:#faf9f699;border:1px solid rgba(250,249,246,.25);padding:1px 5px;border-radius:4px;letter-spacing:.06em}.resume-root .resume-download:hover .kbd,.resume-root .resume-download:focus-visible .kbd{color:#faf9f6d9;border-color:#faf9f673}.resume-root a.name-link{color:inherit;text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s ease}.resume-root a.name-link:hover,.resume-root a.name-link:focus-visible{border-bottom-color:var(--accent);outline:none}.resume-root footer.foot{margin-top:28px;padding-top:12px;border-top:1px solid var(--line);display:flex;justify-content:space-between;font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.14em;color:var(--subtle)}@page{size:Letter;margin:.5in 0}@media print{html,body{background:#fff!important;font-size:10pt;line-height:1.45}body>*:not(main),main>header,main>footer,.resume-download{display:none!important}main{max-width:100%!important;padding:0!important;margin:0!important}.resume-root .page{margin:0;padding:0 .55in;width:100%;max-width:100%;min-height:0;box-shadow:none;background:#fff}.resume-root a{color:inherit!important}.resume-root a.link,.resume-root .contact a,.resume-root a.name-link{border-bottom-color:transparent!important}.resume-root header.masthead{padding-bottom:10pt}.resume-root .name{font-size:26pt}.resume-root .role{font-size:9.5pt;margin-top:4pt}.resume-root .contact{font-size:9pt;line-height:1.6}.resume-root .contact .label{font-size:7.5pt}.resume-root .tag{font-size:8pt}.resume-root section{margin-top:12pt}.resume-root .section-head{margin-bottom:6pt}.resume-root .summary{margin-top:10pt;font-size:10pt;line-height:1.5}.resume-root .entry-title{font-size:11.5pt}.resume-root .entry-sub{font-size:9.5pt}.resume-root .entry-sub .mod,.resume-root .entry-meta{font-size:7.5pt}.resume-root ul.bullets{margin-top:0}.resume-root ul.bullets li{font-size:9.5pt;line-height:1.4;margin-top:2pt}.resume-root ul.bullets li:first-child{margin-top:0}.resume-root .stack{margin-top:5pt}.resume-root .stack span{font-size:7.5pt}.resume-root .entry{page-break-inside:avoid;break-inside:avoid}.resume-root section .entry+.entry,.resume-root .grid-col .entry+.entry{margin-top:16pt}.resume-root .section-head,.resume-root .tag{page-break-after:avoid;break-after:avoid}.resume-root .skills,.resume-root .skill-row,.resume-root .pub,.resume-root .cert,.resume-root footer.foot{page-break-inside:avoid;break-inside:avoid}.resume-root .grid{column-gap:24pt;row-gap:14pt}.resume-root .grid-col{gap:12pt}.resume-root .proj-grid{column-gap:20pt;row-gap:10pt}.resume-root .compact .entry-title{font-size:10.5pt}.resume-root .compact .entry-sub,.resume-root .compact .entry-note{font-size:9pt}.resume-root .skills{gap:8pt 20pt}.resume-root .skill-row{font-size:9.5pt}.resume-root .skill-row .label{font-size:7.5pt}.resume-root .cert{font-size:9.5pt;padding:2pt 0}.resume-root .cert .cert-date{font-size:7.5pt}.resume-root .pub{font-size:9.5pt;padding:5pt 0}.resume-root .pub .pub-title{font-size:10pt}.resume-root .pub .pub-venue{font-size:8.5pt}.resume-root footer.foot{margin-top:14pt;padding-top:8pt;font-size:7.5pt}}@media screen and (max-width:880px){.resume-root .page{width:auto;margin:0;padding:28px 22px;box-shadow:none}.resume-root header.masthead{grid-template-columns:1fr}.resume-root .contact,.resume-root .contact .row{text-align:left;justify-content:flex-start}.resume-root .grid,.resume-root .skills,.resume-root .proj-grid{grid-template-columns:1fr}.resume-root .cert{flex-wrap:wrap}.resume-root .resume-download{top:12px;right:12px;padding:8px 12px;font-size:12px}}
