@font-face{font-family:Inter;src:url(/fonts/InterVariable.woff2)format("woff2");font-weight:100 800;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/InterVariable-Italic.woff2)format("woff2");font-weight:100 800;font-style:italic;font-display:swap}@layer properties,theme,base,components,utilities;@layer site-base{body{min-height:100dvh;font-family:var(--font-sans);background:var(--background);color:var(--foreground);flex-direction:column;margin:0;display:flex}h1,h2,h3,h4{margin:0 0 var(--space-2);text-wrap:balance;line-height:1.2}h1{font-size:clamp(1.953rem, 1.4rem + 2.2vw, var(--ratio-h1));color:var(--site-heading);font-weight:650}h2{font-size:var(--ratio-h2);color:var(--site-heading);font-weight:600}h3{font-size:var(--ratio-h3);font-weight:600}h4{font-size:var(--ratio-h4);font-weight:600}h2,h3,h4{margin-top:var(--space-4)}p{margin:0 0 var(--space-2)}code,kbd,samp,pre{font-family:var(--font-mono);font-size:.9em}code{border:1px solid var(--border);border-radius:var(--radius-sm);padding:.1em .35em}:focus-visible{outline:2px solid var(--ring);outline-offset:2px;border-radius:var(--radius-sm)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}}@layer site-layout{.shell-row{max-width:var(--shell-max);padding:0 var(--space-3);width:100%;margin:0 auto}.skip-link{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip-link:focus-visible{top:var(--space-1);left:var(--space-1);z-index:100;clip-path:none;width:auto;height:auto;padding:var(--space-1) var(--space-2);background:var(--primary);color:var(--primary-foreground);border-radius:var(--radius);text-decoration:none;position:fixed}.site-header,.site-footer{background:var(--site-band);color:var(--site-band-foreground)}.site-header{border-bottom:1px solid var(--site-rule)}.site-footer{border-top:1px solid var(--site-rule)}.site-header .shell-row{justify-content:space-between;align-items:baseline;gap:var(--space-1) var(--space-3);padding-block:var(--space-2);flex-wrap:wrap;display:flex}.wordmark{color:var(--site-link);font-size:1.25rem;font-weight:600;text-decoration:none}.site-nav{gap:var(--space-2);flex-wrap:wrap;display:flex}.site-nav a,.site-footer a{color:var(--site-link);text-decoration:none;transition:color .15s}.site-nav a:hover,.site-footer a:hover{text-underline-offset:2px;text-decoration:underline}.site-nav a:focus-visible{text-underline-offset:2px;text-decoration:underline}.site-footer a:focus-visible{text-underline-offset:2px;text-decoration:underline}.site-nav a[aria-current=page]{font-weight:600}main{width:100%;max-width:var(--shell-max);padding:var(--space-5) var(--space-3);flex:1;margin:0 auto}.site-footer .shell-row{padding-block:var(--space-2);color:var(--muted-foreground);font-size:.9rem}.site-footer p{margin:0}.site-footer .sep{margin:0 .5em}.prose{max-width:var(--measure);font-size:var(--text-body);line-height:var(--line-body);margin-inline:auto}.prose a{color:var(--site-link);text-underline-offset:2px;text-decoration:underline;transition:color .15s}.prose ul,.prose ol{margin:0 0 var(--space-2) var(--space-3);list-style:outside}.prose ol{list-style:decimal}.prose li{margin-bottom:.35em}.prose li::marker{color:var(--site-link)}.prose blockquote{margin:var(--space-2) 0;padding-left:var(--space-2);border-left:3px solid var(--site-rule);color:var(--muted-foreground);font-style:italic}@media print{.site-header,.site-footer,.skip-link{display:none}main{max-width:none;margin:0;padding:0}}}@layer site-pages{.not-found-page{max-width:var(--measure)}.portrait{float:right;width:180px;height:auto;margin:0 0 var(--space-2) var(--space-2);border-radius:var(--radius)}@media (width<=480px){.portrait{float:none;margin:0 auto var(--space-2);display:block}}}.resume-page{--navy:#16243f;--accent:#2563eb;--ink:#232730;--muted:#5b6470;--light:#d6e0f0;--role:#9db8e0;color:var(--ink);text-align:left;-webkit-text-size-adjust:100%;font-family:Inter,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:10.5pt;line-height:1.42}.resume-page *{box-sizing:border-box}.resume-page .resume-frame{flex-direction:column;max-width:864px;margin:32px auto;padding:24px;display:flex}.resume-page .page{max-width:8.5in;color:var(--ink);background:#fff;margin:0 auto;box-shadow:0 2px 14px rgba(0,0,0,.16)}.resume-page .no-print{z-index:10;background:var(--primary);color:var(--primary-foreground);border-radius:var(--radius);font:inherit;cursor:pointer;border:none;align-self:flex-end;margin-bottom:16px;padding:8px 16px;font-weight:600;text-decoration:none;position:sticky;top:16px;box-shadow:0 2px 8px rgba(0,0,0,.2)}.resume-page .no-print:hover{background:color-mix(in oklab, var(--primary) 85%, var(--foreground))}.resume-page .masthead{background:var(--navy);color:#fff;padding:26px 40px 22px}.resume-page .masthead h1{letter-spacing:.4px;color:inherit;margin:0;font-size:27pt;font-weight:700}.resume-page .role{letter-spacing:2px;text-transform:uppercase;color:var(--role);margin:5px 0 12px;font-size:11.5pt;font-weight:500}.resume-page .contact{color:var(--light);margin:0;font-size:9.5pt}.resume-page .contact a{color:var(--light);text-decoration:none}.resume-page .contact .sep{color:#5e7197;margin:0 6px}.resume-page .resume-body{padding:20px 40px 34px}.resume-page section{margin-bottom:16px}.resume-page h2{text-transform:uppercase;letter-spacing:1.6px;color:var(--navy);border-bottom:2px solid var(--accent);margin:0 0 9px;padding-bottom:3px;font-size:11pt;font-weight:700}.resume-page #summary p,.resume-page .skills{margin:0}.resume-page .skill-row{gap:12px;margin-bottom:4px;display:flex}.resume-page .skill-row dt{color:var(--navy);flex:0 0 132px;font-weight:600}.resume-page .skill-row dd{flex:1;margin:0}.resume-page .job,.resume-page .project{margin-bottom:13px}.resume-page .job:last-child,.resume-page .project:last-child{margin-bottom:0}.resume-page .job-head{justify-content:space-between;align-items:baseline;gap:14px;display:flex}.resume-page .job-head h3,.resume-page .project h3{margin:0;font-size:11pt;font-weight:700}.resume-page .job-title{color:#3c424d;font-weight:500}.resume-page .job-sub{color:var(--muted);margin:2px 0 6px;font-size:9.8pt;font-style:italic}.resume-page .dates{color:var(--muted);white-space:nowrap;font-size:9.5pt}.resume-page ul{margin:5px 0 0;padding-left:18px;list-style:outside}.resume-page li{margin-bottom:3px}.resume-page .project p{margin:3px 0 0}.resume-page .proj-tag{color:var(--accent);font-size:10pt;font-weight:500}.resume-page .stack{color:var(--muted);letter-spacing:.2px;font-size:9pt}.resume-page .edu-row{justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:4px;display:flex}.resume-page .edu-name{color:var(--navy);font-weight:600}.resume-page .edu-detail{color:#3c424d;font-weight:400}@media screen and (width<=480px){.resume-page .resume-frame{padding:8px}.resume-page .masthead{padding:22px 20px 18px}.resume-page .resume-body{padding:16px 20px 28px}.resume-page .skill-row{flex-direction:column;gap:0}.resume-page .skill-row dt{flex:none}}@media print{@page{size:Letter;margin:.35in 0}@page:first{margin-top:0}html,body{-webkit-print-color-adjust:exact;print-color-adjust:exact;background:#fff}.resume-page{background:#fff;font-size:10pt;line-height:1.38}.resume-page .resume-frame{max-width:none;margin:0;padding:0}.resume-page .page{max-width:none;box-shadow:none;margin:0}.resume-page .no-print{display:none}.resume-page .masthead{padding:20px 40px 17px}.resume-page .masthead h1{font-size:24pt;line-height:1.1}.resume-page .role{margin:4px 0 10px;font-size:11pt}.resume-page .resume-body{padding:18px 40px 0}.resume-page section{margin-bottom:14px}.resume-page h2{break-after:avoid;margin-bottom:7px;font-size:11pt}.resume-page .skill-row{margin-bottom:3px}.resume-page .job{margin-bottom:12px}.resume-page .job-sub{margin:2px 0 5px}.resume-page ul{margin-top:4px}.resume-page li,.resume-page .edu-row{margin-bottom:3px}.resume-page li,.resume-page .skill-row,.resume-page .edu-row,.resume-page .project,.resume-page .job:not(:first-of-type),.resume-page #education{break-inside:avoid}.resume-page a{color:var(--accent)}}