@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-400-normal-C38fXH4l.woff2)format("woff2"),url(/assets/inter-latin-400-normal-CyCys3Eg.woff)format("woff")}@font-face{font-family:Inter;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/inter-latin-400-italic-D1l0FflY.woff2)format("woff2"),url(/assets/inter-latin-400-italic-BmFrN47l.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-600-normal-LgqL8muc.woff2)format("woff2"),url(/assets/inter-latin-600-normal-CiBQ2DWP.woff)format("woff")}@font-face{font-family:Inter;font-style:italic;font-display:swap;font-weight:600;src:url(/assets/inter-latin-600-italic-BJYrns_i.woff2)format("woff2"),url(/assets/inter-latin-600-italic-CIYS91tl.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-700-normal-Yt3aPRUw.woff2)format("woff2"),url(/assets/inter-latin-700-normal-BLAVimhd.woff)format("woff")}@font-face{font-family:Inter;font-style:italic;font-display:swap;font-weight:700;src:url(/assets/inter-latin-700-italic-BsEzapPQ.woff2)format("woff2"),url(/assets/inter-latin-700-italic-QsoQop6F.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-ext-400-normal-C1nco2VV.woff2)format("woff2"),url(/assets/inter-latin-ext-400-normal-77YHD8bZ.woff)format("woff")}@font-face{font-family:Inter;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/inter-latin-ext-400-italic-CGFCRmTM.woff2)format("woff2"),url(/assets/inter-latin-ext-400-italic-DpQ6ZOoA.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2)format("woff2"),url(/assets/inter-latin-ext-600-normal-CIVaiw4L.woff)format("woff")}@font-face{font-family:Inter;font-style:italic;font-display:swap;font-weight:600;src:url(/assets/inter-latin-ext-600-italic-4pxPPAsx.woff2)format("woff2"),url(/assets/inter-latin-ext-600-italic-DgI6rDWk.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2)format("woff2"),url(/assets/inter-latin-ext-700-normal-TidjK2hL.woff)format("woff")}@font-face{font-family:Inter;font-style:italic;font-display:swap;font-weight:700;src:url(/assets/inter-latin-ext-700-italic-DtYkv-XI.woff2)format("woff2"),url(/assets/inter-latin-ext-700-italic-sscBbOod.woff)format("woff")}:root{--text:#5c5566;--text-h:#0f0d14;--text-muted:#7a7385;--bg:#faf9f7;--border:#e8e6e3;--code-bg:#f0eeea;--accent:#047857;--accent-bg:#0478571f;--accent-bg-strong:#04785733;--accent-border:#04785773;--social-bg:#f0eeeacc;--sans:"Inter", system-ui, sans-serif;--heading:"Inter", system-ui, sans-serif;--mono:ui-monospace, Consolas, monospace;--type-title:clamp(1.52rem, 3.2vw, 1.9rem);--type-title-lh:1.18;--type-title-track:-.03em;--type-lede:1.05rem;--type-lede-lh:1.55;--type-subheading:1.15rem;--type-h3:1rem;--page-content-pad-top:2.25rem;--page-heading-to-card-gap:1.25rem;--page-content-footer-gap:2rem;font:17px/150% var(--sans);letter-spacing:.01em;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--text:#b4b0bc;--text-h:#f4f2f8;--text-muted:#8a8594;--bg:#121116;--border:#2a282f;--code-bg:#1c1b22;--accent:#34d399;--accent-bg:#34d39926;--accent-bg-strong:#34d39947;--accent-border:#34d39973;--social-bg:#2a282f99}}html{scroll-behavior:smooth;scroll-padding-bottom:env(safe-area-inset-bottom,0px)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}#root{max-width:56rem;padding-top:0;padding-right:max(1.25rem, env(safe-area-inset-right,0px));padding-bottom:max(0px, env(safe-area-inset-bottom,0px));padding-left:max(1.25rem, env(safe-area-inset-left,0px));box-sizing:border-box;min-height:100svh;margin:0 auto}@media (width<=720px){#root{padding-left:max(1.35rem, env(safe-area-inset-left,0px));padding-right:max(1.35rem, env(safe-area-inset-right,0px))}}body{margin:0}main{text-align:left;padding-bottom:var(--page-content-footer-gap)}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:600}p{margin:0}.hero-lede.api-hint{color:var(--text-muted);font-size:.95em}code{font-family:var(--mono);background:var(--code-bg);color:var(--text-h);border-radius:4px;padding:.15em .35em;font-size:.92em}.site{box-sizing:border-box;flex-direction:column;min-height:100%;display:flex}.site-header{border-bottom:1px solid var(--border);flex-direction:column;align-items:flex-start;padding:1rem 0 1.5rem;display:flex}.site-header-brand{flex-direction:column;align-items:flex-start;gap:.65rem;width:100%;min-width:0;display:flex}.site-name{letter-spacing:-.02em;color:var(--text-h);margin:0;font-size:1.6rem;font-weight:600;line-height:1.2}.site-nav{flex-wrap:wrap;align-items:center;gap:1rem 1.25rem;width:100%;display:flex}.site-nav-pages,.site-nav-social{flex-wrap:wrap;align-items:center;gap:1rem 1.25rem;display:flex}.site-footer-lang .site-lang{background:var(--bg);box-shadow:0 2px 8px #0f0d1414,0 8px 24px #0f0d141a}@media (prefers-color-scheme:dark){.site-footer-lang .site-lang{box-shadow:0 2px 12px #0006,0 8px 28px #00000073}}.site-lang.site-lang-dropdown{border:1px solid var(--border);background:var(--social-bg);border-radius:6px;flex-shrink:0;align-items:center;gap:.12rem;padding:.2rem;display:inline-flex;position:relative}.site-lang-dropdown-trigger{border:1px solid var(--accent-border);background:var(--accent-bg);font:inherit;letter-spacing:.06em;color:var(--text-h);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:.28rem;padding:.38rem .55rem;font-size:.78rem;font-weight:600;line-height:1;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.site-lang-dropdown-trigger:hover{color:var(--text-h)}.site-lang-dropdown-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.site-lang-dropdown-trigger-label{text-overflow:ellipsis;white-space:nowrap;max-width:7.5rem;overflow:hidden}.site-lang-dropdown-chevron{color:var(--text-muted);flex-shrink:0;transition:transform .18s;display:inline-flex}.site-lang-dropdown--open .site-lang-dropdown-chevron{transform:rotate(180deg)}.site-lang-dropdown-menu{z-index:102;border:1px solid var(--border);background:var(--bg);border-radius:6px;flex-direction:column;gap:.12rem;min-width:9.25rem;margin:0;padding:.2rem;list-style:none;display:flex;position:absolute;bottom:calc(100% + .4rem);right:0;box-shadow:0 2px 8px #0f0d1414,0 8px 24px #0f0d141a}@media (prefers-color-scheme:dark){.site-lang-dropdown-menu{box-shadow:0 2px 12px #0006,0 8px 28px #00000073}}.site-lang-dropdown-item{margin:0}.site-lang-dropdown-option{width:100%;font:inherit;letter-spacing:.06em;text-align:center;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:.38rem .55rem;font-size:.78rem;font-weight:600;line-height:1;transition:background .15s,color .15s,box-shadow .15s;display:inline-flex}.site-lang-dropdown-option:hover{color:var(--text-h);text-decoration:none}.site-lang-dropdown-option:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.site-lang-dropdown-option--selected{color:var(--text-h);background:var(--accent-bg);border-color:var(--accent-border)}.site-nav-social{margin-left:auto}.site-nav a{color:var(--text);font-size:.95rem;text-decoration:none}.site-nav a:hover{color:var(--text-h);text-decoration:underline}.site-nav a[aria-current=page]{color:var(--text-h);font-weight:600;text-decoration:none}.resume-page{padding-top:var(--page-content-pad-top);font-family:var(--sans)}.projects-page{padding:var(--page-content-pad-top) 0 0}.projects-page .page-header{margin-bottom:var(--page-heading-to-card-gap);padding:0}.resume-card{box-shadow:none;background:0 0;border:none;border-radius:0;padding:0;position:relative;overflow:visible}.projects-body--md{gap:var(--page-heading-to-card-gap);flex-direction:column;display:flex}.projects-lede{font-size:var(--type-lede);line-height:var(--type-lede-lh);color:var(--text);margin:0 0 .25rem}.projects-lede p{margin:0 0 .75rem}.projects-lede p:last-child{margin-bottom:0}.projects-page .project-card,.contact-page .project-card,.about-page .project-card,.hero .project-card,.resume-page .project-card{border:1px solid var(--border);border-left:3px solid var(--accent);background:var(--bg);border-radius:12px;align-self:stretch;width:100%;margin:0;padding:0;box-shadow:0 1px 2px #0f0d140d,0 0 0 1px #0f0d1405}@media (prefers-color-scheme:dark){.projects-page .project-card,.contact-page .project-card,.about-page .project-card,.hero .project-card,.resume-page .project-card{box-shadow:0 1px 3px #00000059,0 0 0 1px #ffffff0a}}.project-card-body{padding:1.15rem 1.25rem 1.2rem}.project-card-body h2:not(.resume-card-heading){font-size:var(--type-subheading);letter-spacing:-.02em;color:var(--text-h);border:none;margin:0 0 .75rem;padding:0;font-weight:600;line-height:1.3}.project-card-body p{color:var(--text);margin:0 0 .65rem;font-size:1rem;line-height:1.6}.project-card-body p:last-child{margin-bottom:0}.project-card-body table{border-collapse:collapse;width:100%;margin:.75rem 0 1rem;font-size:.95rem;line-height:1.5}.project-card-body th,.project-card-body td{border:1px solid var(--border);text-align:left;vertical-align:top;background:0 0;padding:.5rem .7rem}.project-card-body thead th{color:var(--text-h);font-weight:600}.project-card-body tbody td:first-child{width:9.5rem}@media (width<=520px){.project-card-body table{font-size:.88rem}.project-card-body tbody td:first-child{width:6.5rem}}.project-card-body p:last-child:has(a:nth-of-type(2)){border-top:1px solid var(--border);flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem .85rem;margin-top:1rem;margin-bottom:0;padding-top:.85rem;font-size:.92rem;display:flex}.project-card-body p:last-child:has(a:nth-of-type(2)) a{color:var(--text-h);background:var(--accent-bg);border:1px solid var(--accent-border);border-radius:8px;align-items:center;padding:.42rem .95rem;font-size:.88rem;font-weight:600;text-decoration:none;transition:background .15s,border-color .15s;display:inline-flex}.project-card-body p:last-child:has(a:nth-of-type(2)) a:hover{background:var(--accent-bg-strong);text-decoration:none}.projects-page .project-card-body p:last-child:has(a:nth-of-type(2)){border-top:none;padding-top:0}.project-card-body a{color:var(--text-h);font-weight:600;text-decoration:none}.project-card-body a:hover{text-decoration:underline}.project-card-body p:last-child:has(a:nth-of-type(2)) a:hover{text-decoration:none}.about-page{gap:var(--page-heading-to-card-gap);flex-direction:column;display:flex}.about-page .page-header{padding-bottom:0}.contact-page{gap:var(--page-heading-to-card-gap);flex-direction:column;display:flex}.contact-page .page-header{padding-bottom:0}.resume-page-layout{flex-direction:column;gap:1rem;display:flex}.resume-page-main{min-width:0}.resume-page-sidebar{border-top:1px solid var(--border);flex-direction:column;align-items:flex-start;gap:2.75rem;width:100%;padding-top:1rem;display:flex}.resume-toc{padding:0;position:static}.resume-toc-list{flex-wrap:wrap;gap:.5rem 1.1rem;margin:0;padding:0;list-style:none;display:flex}.resume-toc-link{color:var(--text);font-size:.88rem;text-decoration:none;transition:color .15s}.resume-toc-link:hover{color:var(--text-h)}.resume-toc-link--active{color:var(--text-h);font-weight:600}.resume-downloads{flex-direction:column;align-items:flex-start;gap:.45rem;width:100%;margin-top:1.25rem;display:flex}.resume-downloads .btn{border-radius:5px;padding:.34rem .72rem;font-size:.74rem}@media (width>=900px){.resume-page-layout{grid-template-columns:minmax(0,1fr) 11rem;align-items:start;gap:2.25rem;display:grid}.resume-page-sidebar{border-top:none;align-self:start;width:auto;padding-top:0;position:sticky;top:1rem}.resume-toc-list{flex-flow:column;gap:.4rem}.resume-toc-link{border-left:2px solid #0000;margin-left:-.65rem;padding:.2rem 0 .2rem .65rem;transition:color .15s,border-color .15s;display:block}.resume-toc-link--active{color:var(--text-h);border-left-color:var(--text-h)}}.resume-anchor{scroll-margin-top:1.25rem}.resume-page-single{min-height:12rem;padding:0}.resume-summary-plain{gap:var(--page-heading-to-card-gap);flex-direction:column;width:100%;display:flex}.resume-summary-heading{margin:0 0 .75rem}.resume-experience-stack,.resume-education-stack{gap:var(--page-heading-to-card-gap);flex-direction:column;width:100%;display:flex}.resume-experience-heading,.resume-education-heading{margin:0 0 .75rem}.resume-experience-preamble,.resume-education-preamble{margin-bottom:0}.resume-experience-cards,.resume-education-cards{gap:var(--page-heading-to-card-gap);flex-direction:column;display:flex}.resume-experience-cards .resume-card--section .resume-body--md h3,.resume-education-cards .resume-card--section .resume-body--md h3{font-size:var(--type-subheading);letter-spacing:-.02em;border-left:none;margin-left:0;padding-left:0;line-height:1.3}.resume-experience-cards .resume-body--md h3:first-child,.resume-education-cards .resume-body--md h3:first-child{margin-top:0}.resume-cards{flex-direction:column;gap:1.5rem;padding:0;display:flex}.resume-preamble{padding:0 0 1rem}.resume-preamble.resume-body--md h1{margin-top:0}.resume-card--section{overflow:visible}.resume-card-header{z-index:1;margin:0 0 .85rem;position:relative}.resume-card-heading{font-size:var(--type-title);line-height:var(--type-title-lh);letter-spacing:var(--type-title-track);color:var(--text-h);border-bottom:none;margin:0;padding-bottom:0;font-weight:600}.resume-card--section .resume-body--md h3{border-left:3px solid var(--border);margin-left:0;padding-left:.85rem}.resume-body--md h1{font-size:var(--type-title);line-height:var(--type-title-lh);letter-spacing:var(--type-title-track);color:var(--text-h);margin:0 0 .75rem;font-weight:600}.resume-body--md h2{font-size:var(--type-subheading);color:var(--text-h);border-bottom:1px solid var(--border);margin:1.75rem 0 .65rem;padding-bottom:.35rem;font-weight:600}.resume-body--md h2:first-of-type{margin-top:.5rem}.resume-body--md h3{font-size:var(--type-h3);color:var(--text-h);margin:1.25rem 0 .4rem;font-weight:600}.resume-body--md p{margin:0 0 .65rem;line-height:1.55}.resume-body--md p:last-child{margin-bottom:0}.resume-body--md ul,.resume-body--md ol{margin:0 0 .75rem;padding-left:1.35rem}.resume-body--md li{margin:.35rem 0;line-height:1.5}.resume-body--md li>p{margin:.25rem 0}.resume-body--md a{color:var(--text-h)}.resume-body--md a:hover{text-decoration:underline}.resume-body--md em,.resume-body--md i{color:var(--text-muted);font-style:italic}.btn{border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:.45rem .9rem;font-size:.9rem;font-weight:500;text-decoration:none;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.btn-primary{color:var(--text-h);background:var(--accent-bg);border-color:var(--accent-border)}.btn-primary:hover{background:var(--accent-bg-strong)}.btn-ghost{color:var(--text-h);border-color:var(--border);background:0 0}.btn-ghost:hover{background:var(--social-bg)}.hero{padding:var(--page-content-pad-top) 0 0}.hero .page-header{margin-bottom:var(--page-heading-to-card-gap);padding:0}.hero .project-card{max-width:38rem}.hero-lede{max-width:38rem;font-size:var(--type-lede);line-height:var(--type-lede-lh);margin:0}.page-header{padding:var(--page-content-pad-top) 0 var(--page-heading-to-card-gap);flex-direction:column;align-items:flex-start;display:flex}.page-header h1{font-size:var(--type-title);line-height:var(--type-title-lh);letter-spacing:var(--type-title-track);margin:0 0 .75rem}.page-lede{max-width:40rem;font-size:var(--type-lede);line-height:var(--type-lede-lh);color:var(--text);margin:0}.page-header--resume{padding:.5rem 0}.page-header--resume .page-lede{max-width:none}.page-list{max-width:40rem;margin:0;padding-left:1.2rem;line-height:1.65}.page-list li{margin-bottom:.35rem}.site-footer{padding:2rem 0 max(1.5rem, env(safe-area-inset-bottom,0px));border-top:1px solid var(--border);color:var(--text-muted);margin-top:auto;font-size:.85rem}.site-footer-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1.25rem;display:flex}.site-footer-copy{flex:auto;min-width:min(100%,12rem);margin:0}.site-footer-lang{flex-shrink:0;justify-content:flex-end;align-items:center;display:flex}@media (width<=720px){.site-header{align-items:stretch}.site-nav{flex-direction:column;align-items:flex-start;gap:.65rem}.site-nav-pages,.site-nav-social{gap:.6rem .85rem}.site-nav-social{border-top:1px solid var(--border);width:100%;margin-left:0;padding-top:.55rem}}.hero-lede--md p{margin:0 0 .75rem}.hero-lede--md p:last-child{margin-bottom:0}.hero-lede--md a{color:var(--text-h)}
