@font-face{font-family:Urbanist;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/urbanist-latin-ext-400-normal.DZynuzUy.woff2) format("woff2"),url(/_astro/urbanist-latin-ext-400-normal.AR80KGOc.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,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:Urbanist;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/urbanist-latin-400-normal.ClbGNxcV.woff2) format("woff2"),url(/_astro/urbanist-latin-400-normal.BHTGe-Vj.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Urbanist;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/urbanist-latin-ext-500-normal.DjtxgPdH.woff2) format("woff2"),url(/_astro/urbanist-latin-ext-500-normal.DU_MVRy-.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,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:Urbanist;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/urbanist-latin-500-normal.CTXUkCRo.woff2) format("woff2"),url(/_astro/urbanist-latin-500-normal.DpQ4Tjrd.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Urbanist;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/urbanist-latin-ext-600-normal.Edu9tcYw.woff2) format("woff2"),url(/_astro/urbanist-latin-ext-600-normal.D22gvnSM.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,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:Urbanist;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/urbanist-latin-600-normal.BuXRW95m.woff2) format("woff2"),url(/_astro/urbanist-latin-600-normal.cDQtY_pk.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Urbanist;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/urbanist-latin-ext-700-normal.B8Y3NOrp.woff2) format("woff2"),url(/_astro/urbanist-latin-ext-700-normal.LzPfOSk1.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,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:Urbanist;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/urbanist-latin-700-normal.BtsT2zLv.woff2) format("woff2"),url(/_astro/urbanist-latin-700-normal.Zdugn5sa.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/outfit-latin-ext-500-normal.zeox_O30.woff2) format("woff2"),url(/_astro/outfit-latin-ext-500-normal.DrCvqoFD.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,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:Outfit;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/outfit-latin-500-normal.DKnIMDSk.woff2) format("woff2"),url(/_astro/outfit-latin-500-normal.ClnHRwRh.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/outfit-latin-ext-600-normal.B85nYjL1.woff2) format("woff2"),url(/_astro/outfit-latin-ext-600-normal.CWJcPgd7.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,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:Outfit;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/outfit-latin-600-normal.B7SfZ07L.woff2) format("woff2"),url(/_astro/outfit-latin-600-normal.BEfTtDA7.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/outfit-latin-ext-700-normal.CI4iH74K.woff2) format("woff2"),url(/_astro/outfit-latin-ext-700-normal.fjS8-Gm7.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,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:Outfit;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/outfit-latin-700-normal.Cu9v6i1X.woff2) format("woff2"),url(/_astro/outfit-latin-700-normal.D4itBLBr.woff) format("woff");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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Syne;font-style:normal;font-display:swap;font-weight:800;src:url(/_astro/syne-latin-800-normal.EehdNYzx.woff2) format("woff2"),url(/_astro/syne-latin-800-normal.BuJcbPcX.woff) format("woff")}:root{--ink: #161616;--text: #3c3c3c;--muted: #5e5e5e;--blue: #53a1d5;--blue-deep: #145a82;--peach: #ffbc7d;--peach-deep: #e39a55;--cream: #f4eae1;--cream-deep: #eedfd2;--mist: #e7f1f6;--line: #e6ddd4;--white: #ffffff;--code: #f7f3ee;--font-display: "Outfit", "Avenir Next", sans-serif;--font-wordmark: "Syne", "Outfit", sans-serif;--font-body: "Urbanist", "Avenir Next", sans-serif;--max: 1120px;--header: 4.75rem}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;color:var(--text);background:var(--white);font-family:var(--font-body);font-size:1.0625rem;font-weight:500;line-height:1.65}img{max-width:100%;height:auto}a{color:var(--blue-deep)}a:hover{text-decoration:none}:focus-visible{outline:3px solid var(--blue);outline-offset:3px}.skip-link{position:absolute;left:1rem;top:-4rem;z-index:20;background:var(--ink);color:var(--white);padding:.6rem .9rem;text-decoration:none}.skip-link:focus{top:.75rem}.wrap{width:min(var(--max),calc(100% - 2rem));margin-inline:auto}.site-header{position:sticky;top:0;z-index:10;background:#fffffff0;border-bottom:1px solid var(--line);backdrop-filter:blur(10px)}.header-inner{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:1rem;min-height:var(--header)}.wordmark{display:inline-block;color:var(--ink);font-family:var(--font-wordmark);font-size:1.5rem;font-weight:800;letter-spacing:.25em;line-height:1;padding-inline-end:.25em;text-decoration:none;text-rendering:geometricPrecision;white-space:nowrap;-webkit-font-smoothing:antialiased}.nav-toggle{display:none;border:1px solid var(--line);background:var(--white);color:var(--ink);font:inherit;font-weight:700;padding:.45rem .75rem;border-radius:999px}.site-nav ul{display:flex;justify-content:center;gap:1.5rem;list-style:none;margin:0;padding:0}.site-nav a{color:var(--ink);font-weight:700;text-decoration:none}.site-nav a[aria-current=page]{color:var(--blue-deep);text-decoration:underline;text-underline-offset:.3rem}.button{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-height:2.75rem;padding:.55rem 1.1rem;border-radius:999px;border:2px solid transparent;font-family:var(--font-display);font-weight:600;text-decoration:none;line-height:1;transition:background-color .2s ease,color .2s ease,border-color .2s ease,filter .2s ease}.button-peach{background:var(--peach);color:var(--ink);border-color:var(--peach)}.button-peach:hover{background:var(--peach-deep);border-color:var(--peach-deep)}.button-blue{background:var(--blue);color:var(--ink);border-color:var(--blue)}.button-blue:hover{filter:brightness(.95)}.button-ghost{background:transparent;color:var(--ink);border-color:var(--ink)}.button-ghost:hover{background:var(--ink);color:var(--white)}.hero{background-color:var(--cream);background-image:radial-gradient(circle at 85% 20%,rgba(83,161,213,.35),transparent 28%);background-repeat:no-repeat;padding:3.5rem 0 4rem}.hero-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:2.5rem;align-items:center}.eyebrow,.section-kicker{margin:0;color:var(--blue-deep);font-family:var(--font-display);font-weight:600;letter-spacing:.04em;text-transform:uppercase;font-size:.85rem}h1,h2,h3,.job-org{font-family:var(--font-display);color:var(--ink);line-height:1.15}.hero h1{margin:.35rem 0 .4rem;font-size:clamp(2.4rem,5vw,4.2rem);font-weight:700;max-width:12ch}.hero-role{margin:0;font-family:var(--font-display);font-size:clamp(1.3rem,2vw,1.8rem);font-weight:600;color:var(--ink)}.hero-lead{max-width:42rem;font-size:1.15rem}.socials{display:flex;flex-wrap:wrap;gap:.75rem 1rem;margin:1rem 0;padding:0;list-style:none}.socials a{color:var(--ink);font-weight:700;text-decoration:none}.hero-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.25rem}.portrait-wrap{justify-self:center;width:min(100%,26rem);aspect-ratio:1;border-radius:50% 45% 50% 40%;background:var(--blue);padding:.8rem}.portrait-wrap img{width:100%;height:100%;object-fit:cover;border-radius:50%;border:6px solid var(--white)}.section{padding:3.5rem 0}.section-mist{background:var(--mist)}.section-cream{background:var(--cream)}.section h2{margin:.2rem 0 1.25rem;font-size:clamp(1.8rem,3vw,2.4rem)}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-top:-2.5rem;position:relative}.stat{background:var(--white);border:1px solid var(--line);border-radius:1rem;padding:1.25rem 1.4rem}.stat strong{display:block;font-family:var(--font-display);font-size:2.4rem;color:var(--ink);line-height:1}.role-grid,.card-grid,.bar-grid,.project-grid{display:grid;gap:1rem}.role-grid{grid-template-columns:1fr 1fr}.card,.job,.project,.post-card{background:var(--white);border:1px solid var(--line);border-radius:1rem}.card-grid>.post-card{box-shadow:0 10px 24px #16161612}.card,.job{padding:1.25rem 1.35rem}.card .job{border:0;background:transparent;padding:.75rem 0 0}.card .job+.job{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--line)}.job-dates,.meta{color:var(--muted);font-size:.92rem}.job h3,.project h3,.post-card h2,.post-card h3{margin:.15rem 0;font-size:1.25rem}.job-org{margin:0 0 .5rem;font-weight:600}.job ul{margin:.5rem 0 0;padding-left:1.15rem}.experience-disclosure{margin-top:1rem;border:1px solid var(--line);border-radius:1rem;background:var(--mist)}.experience-disclosure summary{display:block;position:relative;min-height:3.25rem;padding:.9rem 2.75rem .9rem 1.25rem;background:var(--white);border-radius:1rem;cursor:pointer;list-style:none;font-family:var(--font-display);font-size:1.35rem;font-weight:600;line-height:1.3;color:var(--ink)}.experience-disclosure summary::-webkit-details-marker{display:none}.experience-disclosure summary:after{content:"";position:absolute;top:50%;right:1.25rem;width:.65rem;height:.65rem;border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);transform:translateY(-70%) rotate(45deg)}.experience-disclosure[open] summary{border-bottom:1px solid var(--line);border-radius:1rem 1rem 0 0}.experience-disclosure[open] summary:after{transform:translateY(-30%) rotate(225deg)}.experience-disclosure summary:focus-visible{outline:3px solid var(--blue);outline-offset:3px}.experience-panel{display:grid;gap:.75rem;padding:.9rem}.skill-list{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;list-style:none;margin:0;padding:0}.skill-list li{background:var(--white);border:1px solid var(--line);border-radius:.75rem;padding:.9rem 1rem;color:var(--ink);font-weight:700}.skill-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:.8rem;list-style:none;margin:0;padding:0}.skill{display:flex;flex-direction:column;align-items:center;gap:.55rem;text-align:center;background:var(--white);border-radius:1rem;padding:1rem .5rem;color:var(--ink);text-decoration:none;border:1px solid var(--line)}.skill img{width:4.5rem;height:3.2rem;object-fit:contain}.skill span{font-size:.92rem;font-weight:700}.cert-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.bar-grid{grid-template-columns:repeat(3,1fr);align-items:start}.bar+.bar{margin-top:.9rem}.bar-label{display:flex;justify-content:space-between;gap:1rem;font-weight:700;color:var(--ink)}.bar-track{height:.55rem;background:#d5e3ea;border-radius:999px;overflow:hidden;margin-top:.3rem}.bar-fill{height:100%;background:var(--blue-deep);border-radius:inherit}.project-grid,.card-grid{grid-template-columns:repeat(3,1fr)}.project,.post-card{overflow:hidden;display:flex;flex-direction:column;color:inherit;text-decoration:none}.project img,.post-card img{width:100%;aspect-ratio:16 / 9;object-fit:cover;background:var(--mist)}.post-card a:has(img){position:relative;display:block;overflow:hidden}.post-card a:has(img):after{content:"";position:absolute;inset:0;background-image:linear-gradient(0deg,rgba(0,0,0,.35),transparent 75%);opacity:0;pointer-events:none}.project div,.post-card div{padding:1rem 1.1rem 1.2rem}.project p,.post-card p{margin:.4rem 0 0}.chip{display:inline-block;margin-bottom:.35rem;color:var(--blue-deep);font-size:.82rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;text-decoration:none}.more{display:inline-block;margin-top:.8rem;font-weight:700}.section-action{margin-top:1.4rem}.prose{width:min(46rem,100%)}.prose :where(h2,h3,h4){margin:1.6rem 0 .5rem}.prose p,.prose ul,.prose ol,.prose blockquote,.prose pre{margin:.9rem 0}.prose img{display:block;margin:1rem auto;border-radius:.6rem;border:1px solid var(--line)}.prose blockquote{margin-left:0;padding-left:1rem;border-left:4px solid var(--blue);color:var(--ink)}.prose pre,.prose code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.92rem}.prose pre{overflow-x:auto;padding:.9rem 1rem;background:var(--code);border-radius:.6rem;border:1px solid var(--line)}.prose li+li{margin-top:.25rem}.article-hero img{width:100%;max-height:28rem;object-fit:cover;border-radius:1rem}.tag-list{display:flex;flex-wrap:wrap;gap:.45rem;padding:0;margin:1rem 0 0;list-style:none}.tag-list a{text-decoration:none;background:var(--mist);color:var(--ink);border-radius:999px;padding:.2rem .65rem;font-size:.9rem}.comments{margin-top:2.5rem;width:min(46rem,100%)}.comment{list-style:none;margin:.8rem 0;padding:.9rem 1rem;background:var(--cream);border-radius:.8rem}.comment ul{padding-left:.5rem}.pager{display:flex;justify-content:space-between;gap:1rem;margin-top:1.5rem}.pager a{font-weight:700}.contact-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.contact-card{display:block;padding:1.2rem;background:var(--white);border:1px solid var(--line);border-radius:1rem;text-decoration:none;color:var(--ink)}.contact-card span{display:block;color:var(--muted);font-size:.9rem}.contact-card strong{font-family:var(--font-display);font-size:1.15rem}.empty-note{color:var(--muted)}.site-footer{background:var(--cream);margin-top:2rem}.footer-cta{display:grid;grid-template-columns:1fr 2fr;gap:1.5rem;padding:2.5rem 0}.footer-cta h2{margin:0;font-size:2rem}.footer-links{display:grid;grid-template-columns:repeat(3,1fr);gap:.8rem}.footer-links a{color:var(--ink);text-decoration:none;font-weight:700}.footer-links span{display:block;font-weight:500;color:var(--muted)}.footer-bar{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:1rem 0 1.4rem;border-top:1px solid #e2d5c8;color:var(--ink)}.footer-bar ul{display:flex;gap:1rem;list-style:none;margin:0;padding:0}.footer-bar a{color:var(--ink);font-weight:700}.post-nav{display:flex;justify-content:space-between;gap:1rem;margin-top:2rem;width:min(46rem,100%)}.post-nav a{font-weight:700}@media(max-width:860px){.nav-toggle{display:inline-flex}.header-inner{grid-template-columns:auto auto 1fr}.site-nav{display:none;grid-column:1 / -1}.site-nav.is-open{display:block}.site-nav ul{flex-direction:column;align-items:flex-start;padding:.2rem 0 .8rem}.header-cta{justify-self:end}.wordmark{font-size:1.25rem;letter-spacing:.2em;padding-inline-end:.2em}.hero-grid,.role-grid,.skill-grid,.skill-list,.cert-grid,.bar-grid,.project-grid,.card-grid,.contact-grid,.footer-cta,.footer-links,.stats{grid-template-columns:1fr}.skill-grid{grid-template-columns:repeat(2,1fr)}.hero{padding-top:2rem}.portrait-wrap{order:-1}.hero-grid{display:flex;flex-direction:column-reverse}}@media(prefers-reduced-motion:no-preference){.hero{background-size:140% 140%;animation:hero-drift 18s ease-in-out infinite alternate}.portrait-wrap img{animation:portrait-float 7.5s ease-in-out infinite}.button:hover,.button:focus-visible{transform:scale(.94)}.button{transition:background-color .2s ease,color .2s ease,border-color .2s ease,filter .2s ease,transform .3s ease}:is(.role-grid,.cert-grid)>.card,.card-grid>.post-card,.contact-grid>.contact-card{transition:transform .3s ease,box-shadow .3s ease}:is(.role-grid,.cert-grid)>.card:hover,.card-grid>.post-card:hover,.contact-grid>.contact-card:hover{transform:translateY(-6px);box-shadow:0 16px 34px #1616161a}.post-card img{transition:transform .45s ease}.post-card a:has(img):after{transition:opacity .35s ease}.post-card:hover a:has(img):after,.post-card:focus-within a:has(img):after{opacity:.5}html.motion :is(.hero-grid>*,.role-grid>.card,.experience-disclosure,.section>.wrap>h2,.section>.wrap>h1,.skill-list>li,.cert-grid>.card,.card-grid>.post-card,.contact-grid>.contact-card,.article-hero,.footer-cta){opacity:0;transform:translate3d(0,1.15rem,0);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1),box-shadow .3s ease;transition-delay:var(--reveal-delay, 0ms)}html.motion .hero-grid>:first-child{transform:translate3d(-1.35rem,0,0)}html.motion .hero-grid>:last-child{transform:translate3d(1.35rem,0,0)}html.motion :is(.hero-grid>*,.role-grid>.card,.experience-disclosure,.section>.wrap>h2,.section>.wrap>h1,.skill-list>li,.cert-grid>.card,.card-grid>.post-card,.contact-grid>.contact-card,.article-hero,.footer-cta).is-in{opacity:1;transform:none}html.motion :is(.role-grid,.cert-grid)>.card.is-in:hover,html.motion .card-grid>.post-card.is-in:hover,html.motion .contact-grid>.contact-card.is-in:hover{transform:translateY(-6px);transition-delay:0ms}}@keyframes hero-drift{0%{background-position:70% 0%}to{background-position:100% 40%}}@keyframes portrait-float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.hero,.portrait-wrap img,.button{animation:none}}
