:root{--bg:#fff;--bg-subtle:#f6f7f9;--bg-raised:#fff;--border:#e3e6ea;--border-strong:#cfd4da;--text:#14181d;--text-muted:#5b646e;--accent:#1f6feb;--accent-contrast:#fff;--accent-soft:#1f6feb1a;--shadow:0 1px 2px #10141a0f, 0 8px 24px #10141a0f;--shadow-sm:0 1px 2px #10141a14;--font-sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Inter, "Helvetica Neue", Arial, sans-serif;--step--1:.9rem;--step-0:clamp(1rem, .96rem + .2vw, 1.09rem);--step-1:clamp(1.2rem, 1.12rem + .4vw, 1.45rem);--step-2:clamp(1.5rem, 1.35rem + .75vw, 2rem);--step-3:clamp(2rem, 1.7rem + 1.5vw, 3.05rem);--radius:14px;--radius-sm:9px;--gutter:clamp(1.15rem, .9rem + 1.2vw, 2rem);--gutter-start:max(var(--gutter), env(safe-area-inset-left));--gutter-end:max(var(--gutter), env(safe-area-inset-right));--measure:68ch;--content-width:1120px;--header-height:62px}@media (prefers-color-scheme:dark){:root{--bg:#0d1117;--bg-subtle:#11161d;--bg-raised:#161b22;--border:#262c36;--border-strong:#39414d;--text:#e7edf5;--text-muted:#99a4b2;--accent:#58a6ff;--accent-contrast:#06121f;--accent-soft:#58a6ff24;--shadow:0 1px 2px #00000080, 0 12px 32px #0006;--shadow-sm:0 1px 2px #00000080}}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-height) + 1rem);-webkit-text-size-adjust:100%}body{background-color:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:var(--step-0);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;line-height:1.65}h1,h2,h3{letter-spacing:-.02em;text-wrap:balance;margin:0;line-height:1.15}p{text-wrap:pretty;margin:0}ul{margin:0;padding:0;list-style:none}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto;display:block}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:100;background-color:var(--accent);color:var(--accent-contrast);border-radius:0 0 var(--radius-sm) var(--radius-sm);padding:.7rem 1.2rem;font-weight:600;transition:translate .15s;position:absolute;top:0;left:50%;translate:-50% -120%}.skip-link:focus-visible{translate:-50%}.icon{flex:none;width:1.15em;height:1.15em}.site-header{z-index:50;background-color:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:saturate(180%)blur(12px);backdrop-filter:saturate(180%)blur(12px);border-bottom:1px solid #0000;transition:border-color .2s,box-shadow .2s;position:sticky;top:0}.site-header.is-scrolled{border-bottom-color:var(--border);box-shadow:var(--shadow-sm)}.nav{min-height:var(--header-height);max-width:var(--content-width);padding-inline:var(--gutter-start) var(--gutter-end);align-items:center;gap:clamp(.75rem,2vw,2rem);margin-inline:auto;display:flex}.nav__brand{letter-spacing:-.015em;white-space:nowrap;font-weight:650}.nav__list{gap:clamp(.5rem,1.5vw,1.25rem);margin-inline-start:auto;display:flex}.nav__link{color:var(--text-muted);font-size:var(--step--1);white-space:nowrap;padding:.4rem .15rem;font-weight:550;transition:color .15s;display:inline-block;position:relative}.nav__link:after{content:"";inset-inline:0;background-color:var(--accent);border-radius:2px;height:2px;transition:scale .2s;position:absolute;bottom:.1rem;scale:0 1}.nav__link:hover,.nav__link.is-active{color:var(--text)}.nav__link.is-active:after{scale:1}.nav__social{border-inline-start:1px solid var(--border);gap:.15rem;padding-inline-start:clamp(.25rem,1vw,.75rem);display:flex}.icon-link{border-radius:var(--radius-sm);width:2.15rem;height:2.15rem;color:var(--text-muted);place-items:center;transition:color .15s,background-color .15s;display:grid}.icon-link:hover{color:var(--text);background-color:var(--bg-subtle)}main{max-width:var(--content-width);padding-inline:var(--gutter-start) var(--gutter-end);margin-inline:auto}.section{border-top:1px solid var(--border);padding-block:clamp(3rem,8vw,6rem)}.section__header{margin-block-end:clamp(1.75rem,4vw,2.75rem)}.section__title{font-size:var(--step-2);margin-block-end:.6rem}.section__intro{max-width:var(--measure);color:var(--text-muted);font-size:var(--step-1)}.subsection__title{font-size:var(--step--1);color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-block:clamp(2.5rem,6vw,3.5rem) 1.5rem;font-weight:600}.hero{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);align-items:center;gap:clamp(2rem,6vw,4.5rem);padding-block:clamp(3rem,10vw,7rem);display:grid}.hero__eyebrow{color:var(--accent);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.1em;margin-block-end:1rem;font-weight:650}.hero__title{font-size:var(--step-3);font-weight:700}.hero__lead{max-width:46ch;color:var(--text-muted);font-size:var(--step-1);margin-block-start:1.25rem}.hero__meta{color:var(--text-muted);font-size:var(--step--1);flex-wrap:wrap;gap:.4rem 1.5rem;margin-block-start:1.5rem;display:flex}.hero__meta li{align-items:center;gap:.5rem;display:flex}.hero__meta a:hover{color:var(--accent);text-decoration:underline}.hero__actions{flex-wrap:wrap;gap:.75rem;margin-block-start:2rem;display:flex}.hero__portrait{position:relative}.hero__portrait img{border-radius:var(--radius);border:1px solid var(--border);width:100%;box-shadow:var(--shadow);aspect-ratio:700/936;object-fit:cover;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;pointer-events:none}.hero__portrait:after{content:"";border-radius:var(--radius);position:absolute;inset:0}.button{border-radius:var(--radius-sm);font-size:var(--step--1);border:1px solid #0000;justify-content:center;align-items:center;padding:.7rem 1.35rem;font-weight:600;transition:background-color .15s,border-color .15s,translate .15s;display:inline-flex}.button:hover{translate:0 -1px}.button--primary{background-color:var(--accent);color:var(--accent-contrast)}.button--primary:hover{background-color:color-mix(in srgb, var(--accent) 88%, var(--text))}.button--ghost{border-color:var(--border-strong);color:var(--text)}.button--ghost:hover{background-color:var(--bg-subtle);border-color:var(--text-muted)}.cards{grid-template-columns:repeat(auto-fit,minmax(min(100%,265px),1fr));gap:clamp(.85rem,2vw,1.25rem);display:grid}.card{background-color:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);padding:clamp(1.25rem,3vw,1.7rem);transition:border-color .15s,translate .15s,box-shadow .15s}.card:hover{border-color:var(--border-strong);box-shadow:var(--shadow);translate:0 -2px}.card__title{font-size:var(--step-1);margin-block-end:.55rem}.card__body{color:var(--text-muted);font-size:var(--step--1)}.note{max-width:var(--measure);background-color:var(--bg-subtle);border-inline-start:3px solid var(--accent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin-block-end:clamp(1.5rem,4vw,2.25rem);padding:clamp(.9rem,2vw,1.15rem) clamp(1rem,2.5vw,1.35rem)}.note__title{font-size:var(--step--1);letter-spacing:.02em;margin-block-end:.3rem;font-weight:650}.note__text{color:var(--text-muted);font-size:var(--step--1)}.cards--projects{grid-template-columns:repeat(auto-fit,minmax(min(100%,330px),1fr));align-items:start}.project{flex-direction:column;height:100%;display:flex}.project__context{color:var(--accent);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.08em;margin-block-end:.5rem;font-weight:650}.project__body{gap:.85rem;margin:.9rem 0 0;display:grid}.project__label{color:var(--text);text-transform:uppercase;letter-spacing:.09em;font-size:.72rem;font-weight:650}.project__text{color:var(--text-muted);font-size:var(--step--1);margin:.15rem 0 0}.project__stack{gap:.35rem;margin-block-start:auto;padding-block-start:1.25rem}.project__stack .tag{padding:.25rem .6rem;font-size:.75rem}.timeline{counter-reset:none;gap:clamp(1.75rem,4vw,2.75rem);display:grid}.timeline__item{grid-template-columns:11rem minmax(0,1fr);gap:clamp(1rem,3vw,2.5rem);display:grid}.timeline__period{color:var(--text-muted);font-size:var(--step--1);font-variant-numeric:tabular-nums;padding-block-start:.2rem;position:relative}.timeline__body{border-inline-start:2px solid var(--border);padding-inline-start:clamp(1.25rem,3vw,1.75rem);position:relative}.timeline__body:before{content:"";inset-inline-start:-.4rem;background-color:var(--accent);width:.65rem;height:.65rem;box-shadow:0 0 0 4px var(--bg);border-radius:50%;position:absolute;top:.55rem}.timeline__role{font-size:var(--step-1)}.timeline__employer{color:var(--accent);font-weight:600;font-size:var(--step--1);margin-block:.15rem .75rem}.timeline__location{color:var(--text-muted);margin-inline-start:.4rem;font-weight:400}.timeline__text{max-width:var(--measure);color:var(--text-muted);font-size:var(--step--1)}.timeline__text+.timeline__text{margin-block-start:.7rem}.timeline__list{color:var(--text-muted);font-size:var(--step--1);gap:.3rem;margin-block-start:.8rem;display:grid}.timeline__list li{padding-inline-start:1.1rem;position:relative}.timeline__list li:before{content:"";inset-inline-start:0;background-color:var(--border-strong);border-radius:50%;width:.35rem;height:.35rem;position:absolute;top:.62em}.timeline--compact .timeline__item{grid-template-columns:7.5rem minmax(0,1fr)}@media (max-width:640px){.timeline__item,.timeline--compact .timeline__item{grid-template-columns:1fr;gap:.35rem}.timeline__body{border-inline-start:0;padding-inline-start:0}.timeline__body:before{display:none}.timeline{gap:1.6rem}.timeline__item+.timeline__item{border-top:1px solid var(--border);padding-block-start:1.6rem}}.tags{flex-wrap:wrap;gap:.5rem;display:flex}.tag{background-color:var(--bg-subtle);border:1px solid var(--border);color:var(--text-muted);font-size:var(--step--1);border-radius:999px;padding:.4rem .85rem;font-weight:550}.skill-group:first-of-type .subsection__title{margin-block-start:0}.split{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));align-items:start;gap:clamp(1.5rem,4vw,3rem);display:grid}.split .subsection__title{margin-block-start:0}.definition{gap:.5rem;display:grid}.definition li{border-bottom:1px solid var(--border);font-size:var(--step--1);justify-content:space-between;gap:1rem;padding-block:.5rem;display:flex}.definition__term{font-weight:600}.definition__value{color:var(--text-muted)}.contact-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:clamp(.75rem,2vw,1rem);display:grid}.contact-item{background-color:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:auto 1fr;align-items:center;gap:.25rem .9rem;padding:clamp(1rem,2.5vw,1.35rem);transition:border-color .15s,background-color .15s,translate .15s;display:grid}.contact-item:hover{border-color:var(--accent);background-color:var(--accent-soft);translate:0 -2px}.contact-item .icon{width:1.5rem;height:1.5rem;color:var(--accent);grid-row:span 2}.contact-item__label{font-size:var(--step--1);color:var(--text-muted)}.contact-item__value{overflow-wrap:anywhere;font-weight:600}.site-footer{max-width:var(--content-width);padding:2.5rem var(--gutter-end) 3rem var(--gutter-start);border-top:1px solid var(--border);color:var(--text-muted);font-size:var(--step--1);margin-inline:auto}@media (hover:none){.nav__link{padding-block:.7rem}.nav__link:after{bottom:.45rem}.icon-link{width:2.75rem;height:2.75rem}}@media (max-width:760px){.nav__brand{font-size:var(--step--1)}}@media (max-width:640px){.hero{flex-wrap:wrap;align-items:center;gap:0 1.1rem;padding-block:clamp(2rem,8vw,3.5rem) clamp(2.5rem,9vw,4rem);display:flex}.hero__content{display:contents}.hero__portrait{order:-1;width:clamp(80px,23vw,100px)}.hero__intro{flex:10rem}.hero__eyebrow{margin-block-end:.35rem}.hero__lead,.hero__meta,.hero__actions{flex-basis:100%}.nav__social{display:none}.hero__lead,.section__intro,.note__text,.card__body,.project__text,.timeline__text,.timeline__list{-webkit-hyphens:auto;hyphens:auto}}@media (max-width:540px){.nav__brand{display:none}.nav__list{scrollbar-width:none;flex:1;justify-content:space-between;gap:.25rem;margin-inline-start:0;padding-block:3px;overflow-x:auto}.nav__list::-webkit-scrollbar{display:none}}@media (max-width:480px){.hero__actions{flex-direction:column;align-items:stretch}}@media print{:root{--bg:#fff;--bg-subtle:#fff;--bg-raised:#fff;--border:#ccc;--border-strong:#999;--text:#000;--text-muted:#333;--accent:#000;--accent-soft:transparent;--shadow:none;--shadow-sm:none;--content-width:100%}@page{margin:16mm 14mm}body{font-size:10.5pt;line-height:1.45}.site-header,.skip-link,.hero__actions,.nav__social,.site-footer{display:none!important}main{max-width:none;padding:0}.hero{border-bottom:1px solid var(--border);grid-template-columns:minmax(0,1fr) 30mm;align-items:start;gap:8mm;padding-block:0 6mm;display:grid}.hero__content{display:block}.hero__portrait{order:0;width:auto;max-width:30mm}.hero__portrait img{border:1px solid var(--border);box-shadow:none}.hero__title{font-size:22pt}.hero__lead{font-size:11pt}.hero__eyebrow{letter-spacing:.06em;margin-block-end:2mm;font-size:9pt}.section{border-top:0;padding-block:6mm 0}.section__header{margin-block-end:4mm}.section__title{border-bottom:1px solid var(--border);padding-block-end:1mm;font-size:14pt}.section__intro{font-size:10pt}.timeline__item,.card,.contact-item{break-inside:avoid;page-break-inside:avoid}.section__title,.subsection__title,.timeline__role{break-after:avoid;page-break-after:avoid}.timeline{gap:5mm}.timeline__body{border-inline-start-color:var(--border)}.timeline__body:before{box-shadow:none;background-color:#000}.card,.tag,.contact-item{border-color:var(--border)}.card:hover,.contact-item:hover{translate:none}.note{border-inline-start:1px solid var(--border-strong);break-inside:avoid;border-radius:0;padding:2mm 0 2mm 3mm}.cards--projects{grid-template-columns:1fr;gap:4mm}.project{border:0;border-top:1px solid var(--border);border-radius:0;padding:3mm 0}.project__stack{padding-block-start:2mm}.contact-list{grid-template-columns:repeat(3,1fr);gap:4mm}.contact-item{padding:3mm}a{color:var(--text);text-decoration:none}.contact-item[href^=http]:after{content:" (" attr(href) ")";color:var(--text-muted);overflow-wrap:anywhere;grid-column:2;font-size:8pt}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
