:root{--paper: #ffffff;--band: #f7f9f8;--surface: #ffffff;--raise: #fbfcfb;--ink: #16181d;--ink-2: #2f343b;--mute: #585e68;--faint: #696f78;--accent: #059669;--accent-2:#10b981;--accent-ink: #047857;--accent-wash: rgba(5, 150, 105, .08);--accent-line: rgba(5, 150, 105, .28);--btn-bg: #047857;--btn-fg: #ffffff;--cyan: #0e7490;--rule: #e2e7e3;--rule-2: #cfd6d1;--sh-1: 0 1px 2px rgba(16, 24, 20, .05);--sh-2: 0 1px 2px rgba(16, 24, 20, .05), 0 6px 16px -6px rgba(16, 24, 20, .12);--sh-3: 0 2px 4px rgba(16, 24, 20, .06), 0 14px 32px -10px rgba(16, 24, 20, .16);--shadow: var(--sh-2);--sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--wrap: 1080px;--gutter: clamp(1.15rem, 4vw, 3rem);--rail-w: 150px;--measure: 46rem;--nav-h: 60px;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--t: .2s cubic-bezier(.4, 0, .2, 1);--t-slow: .38s cubic-bezier(.22, 1, .36, 1)}[data-theme=dark]{--paper: #0b0d0c;--band: #111413;--surface: #121615;--raise: #171b1a;--ink: #e9ece9;--ink-2: #c3c9c5;--mute: #9aa39d;--faint: #8b938d;--accent: #10b981;--accent-2:#34d399;--accent-ink: #34d399;--accent-wash: rgba(52, 211, 153, .1);--accent-line: rgba(52, 211, 153, .32);--btn-bg: #10b981;--btn-fg: #0b0d0c;--cyan: #22d3ee;--rule: rgba(255, 255, 255, .09);--rule-2: rgba(255, 255, 255, .17);--sh-1: 0 1px 2px rgba(0, 0, 0, .5);--sh-2: 0 1px 2px rgba(0, 0, 0, .5), 0 6px 16px -6px rgba(0, 0, 0, .6);--sh-3: 0 2px 4px rgba(0, 0, 0, .5), 0 14px 32px -10px rgba(0, 0, 0, .7)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{font-family:var(--sans);font-size:16px;line-height:1.62;color:var(--ink-2);background:var(--paper);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}img{display:block;max-width:100%;height:auto}h1,h2,h3{color:var(--ink);font-weight:700;line-height:1.2;text-wrap:balance}p{text-wrap:pretty}b,strong{color:var(--ink);font-weight:700}a{color:inherit;text-decoration:none}ul,ol{list-style:none}::selection{background:var(--accent-wash);color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-sm)}.sprite{position:absolute;width:0;height:0;overflow:hidden}.ico{width:1em;height:1em;fill:currentColor;flex:none}.muted{color:var(--mute)}.soft{color:var(--faint)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip{position:fixed;top:-100px;left:1rem;z-index:100;padding:.6rem 1rem;border-radius:var(--r-sm);background:var(--accent);color:#fff;font-weight:600;transition:top var(--t)}.skip:focus{top:1rem}section[id],footer[id]{scroll-margin-top:calc(var(--nav-h) + 14px)}.wrap{width:100%;max-width:var(--wrap);margin:0 auto;padding-inline:var(--gutter)}.nav{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--paper) 82%,transparent);backdrop-filter:blur(14px) saturate(1.4);-webkit-backdrop-filter:blur(14px) saturate(1.4);border-bottom:1px solid transparent;transition:border-color var(--t),box-shadow var(--t)}.nav.stuck{border-bottom-color:var(--rule);box-shadow:var(--sh-1)}.nav-in{display:flex;align-items:center;gap:1rem;height:var(--nav-h)}.nav-brand{font-weight:700;color:var(--ink);font-size:.95rem;letter-spacing:-.01em;margin-right:auto}.nav-links{display:flex;gap:.15rem}.nav-links a{position:relative;font-size:.875rem;color:var(--mute);padding:.4rem .6rem;border-radius:var(--r-sm);transition:color var(--t),background-color var(--t)}.nav-links a:after{content:"";position:absolute;left:.6rem;right:.6rem;bottom:.12rem;height:1.5px;background:var(--accent-ink);transform:scaleX(0);transform-origin:left;transition:transform var(--t)}.nav-links a:hover{color:var(--ink);background:var(--accent-wash)}.nav-links a.on{color:var(--accent-ink)}.nav-links a.on:after{transform:scaleX(1)}.nav-tools{display:flex;align-items:center;gap:.4rem}.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;border:1px solid var(--rule);background:transparent;color:var(--mute);font:inherit;font-size:.78rem;font-weight:700;cursor:pointer;transition:color var(--t),border-color var(--t),background-color var(--t)}.btn-icon:hover{color:var(--accent-ink);border-color:var(--accent-line);background:var(--accent-wash)}.btn-icon .ico{font-size:1.05rem}.btn-lang{width:auto;padding-inline:.6rem;letter-spacing:.06em}.ico-dark,[data-theme=dark] .ico-light{display:none}[data-theme=dark] .ico-dark{display:block}.nav-burger,.nav-burger .ico-shut,.nav-burger[aria-expanded=true] .ico-open{display:none}.nav-burger[aria-expanded=true] .ico-shut{display:block}.nav-progress{height:2px;width:0;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width 90ms linear}.hero{position:relative;isolation:isolate;padding-block:clamp(2.5rem,7vw,5rem) clamp(2.5rem,6vw,4.5rem)}.hero:before{content:"";position:absolute;z-index:-1;pointer-events:none;inset:calc(-1 * var(--nav-h)) 0 0;background:radial-gradient(64ch 34ch at 8% 6%,var(--accent-wash),transparent 72%)}.hero-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(1.75rem,5vw,3.5rem);align-items:center}.hero-photo{width:clamp(112px,26vw,172px);aspect-ratio:1;justify-self:start;border-radius:50%;object-fit:cover;object-position:center 18%;border:1px solid var(--rule);box-shadow:0 0 0 6px var(--accent-wash),var(--sh-2);order:-1}.hero-avail{display:inline-flex;align-items:center;gap:.5rem;margin-bottom:1.1rem;padding:.3rem .75rem .3rem .6rem;border:1px solid var(--accent-line);border-radius:100px;background:var(--accent-wash);font-size:.78rem;font-weight:600;letter-spacing:.02em;color:var(--accent-ink)}.hero-avail .dot{width:7px;height:7px}.hero-name{font-size:clamp(2.1rem,6vw,3.4rem);letter-spacing:-.03em;line-height:1.02}.hero-role{margin-top:.35rem;font-size:clamp(1.7rem,4.6vw,2.7rem);font-weight:700;color:var(--accent);letter-spacing:-.025em;line-height:1.06}.hero-spec{margin-top:.55rem;max-width:54ch;font-size:clamp(1rem,2vw,1.12rem);color:var(--ink-2);letter-spacing:.01em}.hero-lead{margin-top:1.5rem;max-width:62ch;font-size:1.02rem;line-height:1.7}.contact-row{display:flex;flex-wrap:wrap;gap:.5rem 1.4rem;margin-top:1.5rem;font-size:.9rem}.contact-row a,.contact-row span{display:inline-flex;align-items:center;gap:.45rem;min-height:26px;transition:color var(--t)}.contact-row .ico{color:var(--accent-2)}.contact-row a{position:relative}.contact-row a:after{content:"";position:absolute;left:1.45em;right:0;bottom:1px;height:1px;background:currentColor;opacity:0;transform:scaleX(.5);transform-origin:left;transition:opacity var(--t),transform var(--t)}.contact-row a:hover{color:var(--accent-ink)}.contact-row a:hover:after{opacity:.45;transform:scaleX(1)}.contact-row.big{font-size:1rem;gap:.75rem 2rem;margin-top:1.75rem;margin-bottom:.5rem}.cta-row{display:flex;flex-wrap:wrap;gap:.7rem;margin-top:2rem}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.68rem 1.2rem;border-radius:var(--r-md);border:1px solid var(--rule-2);background:var(--surface);color:var(--ink);font-size:.9rem;font-weight:600;cursor:pointer;box-shadow:var(--sh-1);transition:color var(--t),border-color var(--t),background-color var(--t),box-shadow var(--t)}.btn .ico{transition:transform var(--t)}.btn:hover{border-color:var(--accent-line);color:var(--accent-ink);box-shadow:var(--sh-2)}.btn[download]:hover .ico{transform:translateY(2px)}.btn-primary{background:var(--btn-bg);border-color:var(--btn-bg);color:var(--btn-fg);box-shadow:0 1px 2px #04785747,0 8px 20px -8px #04785773}.btn-primary:hover{background:var(--accent);border-color:var(--accent);color:var(--btn-fg);box-shadow:0 2px 4px #0478574d,0 14px 28px -10px #0478578c}.btn-ghost{border-color:transparent;background:transparent;box-shadow:none;color:var(--mute)}.btn-ghost:hover{color:var(--accent-ink);border-color:var(--rule-2);box-shadow:none}.metrics{display:flex;flex-wrap:wrap;align-items:baseline;gap:.9rem 2rem;margin-top:2.5rem;padding-top:1.4rem;border-top:1px solid var(--rule)}.metrics>li{display:flex;align-items:baseline;gap:.5rem}.metrics>li+li{padding-left:2rem;border-left:1px solid var(--rule)}.metric-n{font-size:clamp(1.35rem,2.6vw,1.65rem);font-weight:700;color:var(--ink);letter-spacing:-.02em;line-height:1.15;font-variant-numeric:tabular-nums}.metric-l{font-size:.84rem;color:var(--mute)}@media(max-width:560px){.metrics{gap:.55rem 1.25rem}.metrics>li+li{padding-left:0;border-left:0}.metrics>li{flex-basis:100%}}.band{padding-block:clamp(2.75rem,7vw,5rem);border-top:1px solid var(--rule)}.band-alt{background:var(--band)}.rail{display:grid;grid-template-columns:minmax(0,1fr);gap:1.25rem}.rail-label{position:relative;padding-top:.6rem;font-size:.72rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}.rail-label:before{content:"";position:absolute;top:0;left:0;width:22px;height:2px;background:var(--accent)}.rail-body{min-width:0;max-width:var(--measure)}.section-lead{color:var(--mute);margin-bottom:1.75rem}.about-prose{display:grid;gap:1.1rem}.about-prose p{line-height:1.66}.about-prose b{color:var(--ink);font-weight:600}.facts{margin-top:2.25rem;padding-top:1.5rem;border-top:1px solid var(--rule);display:grid;gap:.35rem .9rem}.facts dt{font-size:.7rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--mute)}.facts dd{margin-bottom:.8rem}.facts dd:last-child{margin-bottom:0}.track{position:relative}.track:before{content:"";position:absolute;left:3px;top:.55rem;bottom:.4rem;width:1px;background:linear-gradient(var(--accent-line),var(--rule) 14%,var(--rule))}.job{position:relative;padding-left:1.85rem}.job+.job{margin-top:2.5rem}.job:before{content:"";position:absolute;left:0;top:.5rem;width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px var(--paper);transition:box-shadow var(--t)}.band-alt .job:before{box-shadow:0 0 0 3px var(--band)}.job:hover:before{box-shadow:0 0 0 3px var(--paper),0 0 0 7px var(--accent-wash)}.band-alt .job:hover:before{box-shadow:0 0 0 3px var(--band),0 0 0 7px var(--accent-wash)}.job-dates{font-size:.8rem;color:var(--mute);letter-spacing:.02em;font-variant-numeric:tabular-nums}.job-role{margin-top:.15rem;font-size:1.12rem;letter-spacing:-.01em}.job-co{margin-top:.1rem;font-size:.95rem;font-weight:600;color:var(--accent-ink);letter-spacing:.04em}.job-about{margin-top:.6rem;font-size:.92rem;color:var(--mute)}.job-about b{color:var(--ink-2)}.stack{margin-top:.7rem;font-size:.88rem}.stack-k{font-size:.68rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--mute);margin-right:.5rem}.bullets{margin-top:.9rem;display:grid;gap:.6rem}.bullets li{position:relative;padding-left:1.05rem;font-size:.94rem}.bullets li:before{content:"";position:absolute;left:0;top:.62em;width:5px;height:5px;border-radius:50%;background:var(--rule-2)}.bullets li.key:before{background:var(--accent)}.skills{display:grid;gap:1.35rem}.skill{padding-left:1rem;border-left:2px solid var(--rule);transition:border-color var(--t)}.skill:hover{border-left-color:var(--accent-line)}.skill dt{font-size:.95rem;font-weight:700;color:var(--ink);margin-bottom:.2rem}.skill dd{font-size:.93rem}.skill .soft:before{content:"· "}.cases{display:grid;gap:1rem;counter-reset:kase}.case{counter-increment:kase;padding:1.4rem 1.5rem;border:1px solid var(--rule);border-radius:var(--r-lg);background:var(--raise);transition:border-color var(--t),box-shadow var(--t)}.case:hover{border-color:var(--accent-line);box-shadow:var(--sh-2)}.case-t{font-size:1.06rem;line-height:1.35;display:grid;grid-template-columns:2.4rem minmax(0,1fr);align-items:baseline}.case-t:before{content:counter(kase,decimal-leading-zero);font-size:.78rem;font-weight:700;letter-spacing:.06em;color:var(--accent-ink);font-variant-numeric:tabular-nums}.case-b{margin-top:.8rem;margin-left:2.4rem;display:grid;gap:.5rem}.case-b dt{font-size:.68rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);padding-top:.22rem}.case-b dd{font-size:.93rem;max-width:70ch}.case-b .k-res{color:var(--accent-ink)}.case-b .d-res{color:var(--ink);font-weight:600}.card-link{display:inline-block;margin-top:.7rem;font-size:.78rem;font-weight:600;color:var(--faint);letter-spacing:.02em}a.card-link{color:var(--accent-ink);transition:opacity var(--t)}a.card-link:hover{opacity:.7}.cards{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(255px,1fr))}.card{display:flex;flex-direction:column;padding:1.4rem;border:1px solid var(--rule);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--sh-1);transition:border-color var(--t),box-shadow var(--t)}.card:hover{border-color:var(--accent-line);box-shadow:var(--sh-2)}.card-top{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.card h3{font-size:1rem;letter-spacing:-.01em}.tag{padding:.16rem .5rem;border-radius:100px;background:var(--accent-wash);border:1px solid var(--accent-line);font-size:.66rem;font-weight:700;letter-spacing:.05em;color:var(--accent-ink);white-space:nowrap}.card p{margin-top:.6rem;font-size:.89rem}.card-stack{margin-top:auto;padding-top:.85rem;font-size:.76rem;color:var(--faint);letter-spacing:.01em}.edu h3{font-size:1.05rem}.edu-fac{margin-top:.2rem;font-size:.95rem;font-weight:600;color:var(--accent-ink);letter-spacing:.04em}.edu .muted{margin-top:.35rem;font-size:.88rem}.edu-lang{margin-top:1rem;font-size:.93rem}.contact-lead{font-size:1.05rem;color:var(--ink);font-weight:600}.status{display:inline-flex;align-items:center;gap:.5rem;margin-top:.9rem;font-size:.88rem;color:var(--mute)}.status .dot,.hero-avail .dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--accent)}.status .dot:after,.hero-avail .dot:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:var(--accent);animation:ping 2.6s cubic-bezier(0,0,.2,1) infinite}@keyframes ping{0%{transform:scale(1);opacity:.5}70%{transform:scale(2.4);opacity:0}to{transform:scale(2.4);opacity:0}}.to-top{position:fixed;right:1.25rem;bottom:1.25rem;z-index:40;display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:var(--r-md);border:1px solid var(--rule);background:var(--surface);color:var(--mute);font-size:1.1rem;cursor:pointer;box-shadow:var(--sh-2);opacity:0;visibility:hidden;transform:translateY(6px);transition:opacity var(--t),visibility var(--t),transform var(--t),color var(--t),border-color var(--t)}.to-top.on{opacity:1;visibility:visible;transform:none}.to-top:hover{color:var(--accent-ink);border-color:var(--accent-line)}.reveal{opacity:0;transform:translateY(12px)}.reveal.in{opacity:1;transform:none;transition:opacity var(--t-slow),transform var(--t-slow);transition-delay:calc(var(--i, 0) * 70ms)}.hero-lead,.section-lead,.about-prose p,.facts dd,.job-about,.stack,.bullets li,.skill dd,.card p,.edu-lang{text-align:justify;text-justify:inter-word;hyphens:auto;-webkit-hyphens:auto;hyphenate-limit-chars:6 3 3}@media(max-width:620px){.hero-lead,.section-lead,.about-prose p,.facts dd,.job-about,.stack,.bullets li,.skill dd,.card p,.edu-lang{text-align:left}}@media(min-width:720px){.hero-grid{grid-template-columns:minmax(0,1fr) auto}.hero-photo{order:0;width:clamp(150px,17vw,210px);justify-self:end}.metrics{gap:2rem}.facts{grid-template-columns:max-content minmax(0,1fr);align-items:baseline}.case-b{grid-template-columns:5.5rem minmax(0,1fr);gap:.45rem 1.25rem}.facts dd{margin-bottom:.25rem}.skills{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem 2.5rem}.skill:nth-child(-n+2){grid-column:1 / -1}}@media(min-width:940px){.rail{grid-template-columns:var(--rail-w) minmax(0,1fr);gap:2.5rem}.rail-label{position:sticky;top:calc(var(--nav-h) + 1.5rem);align-self:start}}@media(max-width:719px){.nav-burger{display:inline-flex}.nav-links{position:absolute;left:0;right:0;top:var(--nav-h);flex-direction:column;gap:0;padding:.5rem var(--gutter) 1rem;background:var(--paper);border-bottom:1px solid var(--rule);box-shadow:var(--sh-2);display:none}.nav-links.open{display:flex}.nav-links a{padding:.7rem 0;border-radius:0;border-bottom:1px solid var(--rule)}.nav-links a:hover{background:transparent}.nav-links a:after{display:none}.case{padding:1.15rem}.case-t{grid-template-columns:1.9rem minmax(0,1fr)}.case-b{margin-left:1.9rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}.status .dot:after,.hero-avail .dot:after{display:none}}@media print{.nav,.to-top,.cta-row,.skip,.hero-avail{display:none}body{background:#fff;color:#000}.band{border:0;padding-block:1rem}.case,.card{border:0;box-shadow:none;padding:0;background:none}}
