:root{--font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;--font-mono: ui-monospace, "SFMono-Regular", "JetBrains Mono", "Menlo", "Consolas", monospace;--color-bg: #ffffff;--color-surface: #fbfbfa;--color-text: #1f2328;--color-text-muted: #5c6470;--color-heading: #14171a;--color-border: #e7e9ec;--color-border-strong: #d4d8dd;--color-link: #1f6feb;--color-link-hover: #1452c4;--color-accent: #1f6feb;--update-bg: #fff8e1;--update-border: #f4b400;--update-text: #6b5400;--warning-bg: #fef3f2;--warning-border: #ef6c4d;--warning-text: #8a2c12;--info-bg: #eef5ff;--info-border: #4b8bf5;--info-text: #18467a;--success-bg: #eefcf3;--success-border: #34c177;--success-text: #14663a;--note-bg: #f6f8fa;--note-border: #d0d7de;--note-text: #3a4149;--update-link: #8a5b00;--maxw-page: 1080px;--maxw-prose: 720px;--space-page-x: clamp(1rem, 4vw, 2rem);--radius: 8px;--radius-sm: 5px;--text-base: 1.0625rem;--leading-body: 1.7}[data-theme=dark]{--color-bg: #0d1117;--color-surface: #161b22;--color-text: #e6edf3;--color-text-muted: #8b949e;--color-heading: #f0f6fc;--color-border: #30363d;--color-border-strong: #484f58;--color-link: #58a6ff;--color-link-hover: #79c0ff;--color-accent: #58a6ff;--update-bg: #2a2013;--update-border: #9e7a0a;--update-text: #e8c44c;--update-link: #e8c44c;--warning-bg: #2a1410;--warning-border: #b8432a;--warning-text: #f0917a;--info-bg: #111a2e;--info-border: #3b6ec7;--info-text: #8db8f5;--success-bg: #0f2418;--success-border: #268c55;--success-text: #5cd88a;--note-bg: #161b22;--note-border: #30363d;--note-text: #c9d1d9}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:5rem}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}}body{margin:0;background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;display:flex;flex-direction:column;min-height:100vh}img{max-width:100%;height:auto}.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}a{color:var(--color-link);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,h5,h6{color:var(--color-heading);line-height:1.25;font-weight:650;letter-spacing:-.011em}.container{width:100%;max-width:var(--maxw-page);margin-inline:auto;padding-inline:var(--space-page-x)}main{flex:1 0 auto;width:100%;padding-block:clamp(2rem,5vw,3.5rem)}.site-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--color-bg) 88%,transparent);backdrop-filter:saturate(180%) blur(8px);border-bottom:1px solid var(--color-border)}.site-header__inner{position:relative;display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:60px}.site-brand{display:inline-flex;align-items:center;gap:.55rem;font-weight:700;letter-spacing:-.01em;color:var(--color-heading);font-size:1.02rem}.site-brand:hover{text-decoration:none}.site-brand__mark{display:block;width:26px;height:26px;flex:none}.site-header__right{display:flex;align-items:center;gap:.25rem}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:2.2rem;height:2.2rem;padding:0;color:var(--color-text-muted);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);cursor:pointer}.theme-toggle:hover{color:var(--color-heading);border-color:var(--color-border-strong)}.theme-toggle svg{width:1.15rem;height:1.15rem;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.theme-toggle__sun,[data-theme=dark] .theme-toggle__moon{display:none}[data-theme=dark] .theme-toggle__sun{display:block}.site-nav-toggle{display:none;width:2.5rem;height:2.5rem;flex:none;align-items:center;justify-content:center;color:var(--color-heading);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);cursor:pointer}.site-nav-toggle:hover,.site-nav-toggle:focus-visible{border-color:var(--color-border-strong)}.site-nav-toggle:focus-visible{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 18%,transparent)}.site-nav-toggle svg{width:1.35rem;height:1.35rem;stroke:currentColor;stroke-width:2;stroke-linecap:round}.site-nav{display:flex;align-items:center;gap:clamp(.9rem,2.5vw,1.6rem)}.site-nav__close{display:none}.site-nav a{color:var(--color-text-muted);font-size:.95rem;font-weight:500}.site-nav a:hover{color:var(--color-heading);text-decoration:none}.site-footer{flex-shrink:0;border-top:1px solid var(--color-border);margin-top:4rem;padding-block:2rem;color:var(--color-text-muted);font-size:.9rem}.site-footer__inner{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;align-items:center;justify-content:space-between}.site-footer a{color:var(--color-text-muted)}@media (max-width: 640px){.site-header__inner{min-height:56px}.site-nav-toggle{display:inline-flex}.site-nav{position:fixed;top:0;right:0;bottom:0;z-index:60;display:none;width:min(15rem,58vw);height:100dvh;padding:1rem 1.1rem;flex-direction:column;align-items:stretch;gap:0;background:#14171a;border:1px solid var(--color-border);border-right:0;border-top:0;border-radius:0;overflow-y:auto}.site-nav[data-open=true]{display:flex}.site-nav__close{display:inline-flex;align-self:flex-end;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;margin:-.25rem -.35rem .25rem 0;padding:0;color:#fff;background:transparent;border:0;border-radius:var(--radius-sm);cursor:pointer}.site-nav__close svg{width:1.5rem;height:1.5rem;stroke:currentColor;stroke-width:2;stroke-linecap:round}.site-nav__close:focus-visible{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,#fff 30%,transparent)}.site-nav a{display:block;padding:.7rem 0;color:#fff;font-size:1rem;font-weight:400;border-bottom:1px solid rgb(255 255 255 / .1)}}.prose{max-width:var(--maxw-prose);margin-inline:auto;font-size:var(--text-base);line-height:var(--leading-body);color:var(--color-text)}.prose>h1:first-child,.prose>h1{font-size:clamp(1.9rem,4.5vw,2.6rem);line-height:1.15;margin:0 0 .6rem;font-weight:720}.prose h2{font-size:clamp(1.45rem,3vw,1.75rem);margin-top:2.4em;margin-bottom:.6em;padding-bottom:.2em;border-bottom:1px solid var(--color-border)}.prose h3{font-size:1.28rem;margin-top:1.9em;margin-bottom:.5em}.prose h4{font-size:1.08rem;margin-top:1.6em;margin-bottom:.4em}.prose h2 strong,.prose h3 strong,.prose h4 strong{font-weight:inherit}.prose p{margin:0 0 1.2em;overflow-wrap:anywhere}.prose a{color:var(--color-link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;text-decoration-color:color-mix(in srgb,var(--color-link) 35%,transparent);overflow-wrap:anywhere}.prose a:hover{text-decoration-color:var(--color-link)}.prose ul,.prose ol{margin:0 0 1.2em;padding-left:1.4em}.prose li{margin:.35em 0;overflow-wrap:anywhere}.prose li>ul,.prose li>ol{margin:.35em 0}.prose img{display:block;max-width:100%;height:auto;margin:1.6em auto;border-radius:var(--radius-sm)}.prose p>img:only-child{margin-block:1.6em}.prose figure{margin:1.8em 0}.prose figcaption{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted);text-align:center}.prose blockquote{margin:1.6em 0;padding:.4em 1.2em;border-left:3px solid var(--color-border-strong);color:var(--color-text-muted);font-style:italic}.prose blockquote p:last-child{margin-bottom:0}.prose :not(pre)>code{font-family:var(--font-mono);font-size:.875em;background:var(--note-bg);border:1px solid var(--color-border);border-radius:4px;padding:.12em .38em}.prose pre{margin:1.6em 0;padding:1rem 1.15rem;background:#1b1f24;color:#e6edf3;border-radius:var(--radius);overflow-x:auto;font-size:.9rem;line-height:1.55}.prose pre code{font-family:var(--font-mono);background:none;border:0;padding:0;color:inherit;font-size:inherit}.prose hr{border:0;border-top:1px solid var(--color-border);margin:2.5em 0}.prose table{width:100%;border-collapse:collapse;margin:0;font-size:.95rem}.table-scroll{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:1.6em 0;border:1px solid var(--color-border);border-radius:var(--radius)}.table-scroll>table{margin:0}.prose th,.prose td{padding:.6em .85em;border-bottom:1px solid var(--color-border);text-align:left;vertical-align:top}.prose thead th{background:var(--note-bg);font-weight:650;color:var(--color-heading);border-bottom:2px solid var(--color-border-strong);white-space:nowrap}.prose tbody tr:last-child td{border-bottom:0}.prose tbody tr:nth-child(2n){background:color-mix(in srgb,var(--note-bg) 55%,transparent)}.prose strong{font-weight:670;color:var(--color-heading)}.callout{margin:1.8em 0;padding:1rem 1.15rem;border:1px solid var(--note-border);border-left-width:4px;border-radius:var(--radius);background:var(--note-bg);color:var(--note-text)}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout p{margin:0 0 .6em}.callout__title{display:flex;align-items:center;gap:.5rem;font-weight:700;color:inherit;margin:0 0 .4em;line-height:1.35}.callout__icon{flex:none;font-size:1.05em;line-height:1}.callout--update{background:var(--update-bg);border-color:var(--update-border);color:var(--update-text)}.callout--update a{color:var(--update-link)}.callout--warning{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.callout--warning a{color:var(--warning-text)}.callout--info{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}.callout--success{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.callout--note{background:var(--note-bg);border-color:var(--note-border);color:var(--note-text)}.post-layout__crumbs{grid-column:1 / -1}.post-layout--toc{display:grid;grid-template-columns:minmax(0,1fr) 15rem;column-gap:clamp(2rem,5vw,4rem);max-width:var(--maxw-page);margin-inline:auto;align-items:start}.post-layout--toc .post-content{grid-column:1;grid-row:2;min-width:0}.post-layout--toc .post-toc{grid-column:2;grid-row:2}.post-layout--toc .post-content .prose,.post-layout--toc .breadcrumbs{max-width:none;margin-inline:0}.post-toc{position:sticky;top:5rem;align-self:start}.toc{font-size:.9rem;line-height:1.45;max-height:calc(100vh - 7rem);overflow-y:auto}.post-toc .toc__nav{display:block}.toc__title{cursor:pointer;list-style:none;font-size:.72rem;font-weight:650;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);padding:0 0 .7rem;margin-bottom:.4rem;border-bottom:1px solid var(--color-border)}.toc__title::-webkit-details-marker{display:none}.toc__nav{margin-top:.3rem}.toc__list,.toc__sublist{list-style:none;margin:0;padding:0}.toc__sublist{padding-left:.9rem;margin:.1rem 0 .3rem}.toc__item{margin:.1rem 0}.toc__link{display:block;color:var(--color-text-muted);text-decoration:none;border-left:2px solid transparent;padding:.2rem 0 .2rem .7rem;margin-left:-.7rem;transition:color .12s ease,border-color .12s ease}.toc__link:hover{color:var(--color-link);text-decoration:none}.toc__link.is-active{color:var(--color-heading);border-left-color:var(--color-accent);font-weight:600}.toc--mobile{display:none}@media (max-width: 900px){.post-layout--toc{display:block;max-width:var(--maxw-prose)}.post-toc{display:none}.toc--mobile{display:block;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);padding:.4rem 1.1rem .8rem;max-height:none;overflow:visible;margin:1.5rem 0 2rem}.toc--mobile .toc__title{padding-top:.7rem;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.toc--mobile .toc__title:after{content:"−";font-size:1rem;line-height:1;flex-shrink:0}.toc--mobile:not([open]) .toc__title:after{content:"+"}}.breadcrumbs{max-width:var(--maxw-prose);margin:0 auto 1.4rem;font-size:.85rem;color:var(--color-text-muted);display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.breadcrumbs a{color:var(--color-text-muted)}.breadcrumbs a:hover{color:var(--color-link)}.breadcrumbs__sep{color:var(--color-border-strong);user-select:none}.breadcrumbs__current{color:var(--color-text)}.article-meta{margin:0 0 2rem;font-size:.9rem;color:var(--color-text-muted);display:flex;flex-wrap:wrap;gap:.4rem 1.1rem}.article-meta__item{display:inline-flex;align-items:center;gap:.35rem}.article-meta__icon{flex:none;color:var(--color-text-muted);opacity:.85}.article-meta time{white-space:nowrap}.affiliate-disclosure{font-size:.85rem;color:var(--color-text-muted);font-style:italic;border-top:1px solid var(--color-border);margin-top:2.5rem;padding-top:1rem}.home-intro{display:grid;grid-template-columns:minmax(0,280px) 1fr;gap:clamp(1.5rem,4vw,2.75rem);align-items:start}.home-intro__photo{width:100%;border-radius:var(--radius);filter:grayscale(100%)}.home-intro__body .prose{max-width:none;margin:0;font-size:1.05rem}.home-intro__body .prose h1{margin-top:0;font-size:clamp(1.7rem,4vw,2.3rem)}.home-intro__social{margin-top:1rem}.home-intro__social a{display:inline-flex;color:#0a66c2;transition:opacity .15s ease}.home-intro__social a:hover{opacity:.75;text-decoration:none}.home-intro__linkedin{width:22px;height:22px}@media (max-width: 640px){.home-intro{grid-template-columns:1fr;gap:1.25rem}.home-intro__photo{display:block;max-width:240px;margin-inline:auto}}.category-head{max-width:var(--maxw-prose);margin:0 auto 2.2rem}.category-head h1{font-size:clamp(1.9rem,4.5vw,2.6rem);margin:0 0 .4rem}.category-head__blurb{margin:0;color:var(--color-text-muted);font-size:1.05rem}.post-list{list-style:none;margin:0 auto;padding:0;max-width:var(--maxw-prose)}.post-list__item{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:.75rem 0;border-bottom:1px solid var(--color-border)}.post-list__item:first-child{border-top:1px solid var(--color-border)}.post-list__title{font-size:1.05rem;font-weight:550;color:var(--color-heading);text-decoration:none}.post-list__title:hover{color:var(--color-link)}.post-list__date{flex-shrink:0;font-size:.85rem;color:var(--color-text-muted);white-space:nowrap}.pagination{display:flex;align-items:center;justify-content:center;gap:1rem;margin-top:2rem;font-size:.95rem}.pagination__link{font-weight:550;color:var(--color-link)}.pagination__link:hover{text-decoration:underline}.pagination__link--disabled{color:var(--color-text-muted);cursor:default}.pagination__info{color:var(--color-text-muted)}.contact-form{margin-top:2rem;display:flex;flex-direction:column;gap:1.1rem}.contact-form__row{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem}.contact-form__field{display:flex;flex-direction:column;gap:.4rem}.contact-form__label{font-size:.9rem;font-weight:550;color:var(--color-heading)}.contact-form input,.contact-form textarea{width:100%;font:inherit;color:var(--color-text);background:var(--color-bg);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);padding:.6rem .7rem}.contact-form input:focus,.contact-form textarea:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 18%,transparent)}.contact-form textarea{resize:vertical}.contact-form input[aria-invalid=true],.contact-form textarea[aria-invalid=true]{border-color:var(--warning-border)}.contact-form__error{display:block;min-height:1.2em;font-size:.85rem;color:var(--warning-text)}.contact-form__error:empty{display:none}.contact-form__status{margin:0;font-size:.95rem;font-weight:550}.contact-form__status:empty{display:none}.contact-form__status[data-tone=success]{color:var(--success-text)}.contact-form__status[data-tone=error]{color:var(--warning-text)}.contact-form__status[data-tone=info]{color:var(--color-text-muted)}.contact-form__honeypot{position:absolute;width:0;height:0;overflow:hidden;opacity:0;pointer-events:none}.contact-form__honeypot input{width:0;height:0;border:0;padding:0}.contact-form__submit{align-self:flex-start;font:inherit;font-weight:600;color:#fff;background:var(--color-accent);border:0;border-radius:var(--radius-sm);padding:.65rem 1.4rem;cursor:pointer;transition:background .15s ease}.contact-form__submit:hover{background:var(--color-link-hover)}.contact-form__submit:disabled{opacity:.7;cursor:not-allowed}@media (max-width: 540px){.contact-form__row{grid-template-columns:1fr}}.embed-frame{display:block;width:100%;max-width:100%;margin:1.8em 0;border:0;background:transparent}.page-body{max-width:var(--maxw-prose);margin-inline:auto}.page-body>h1{font-size:clamp(1.9rem,4.5vw,2.6rem);margin:0 0 1.2rem}.not-found{min-height:min(58vh,34rem);max-width:var(--maxw-prose);margin-inline:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.not-found__art{margin:0 0 1.4rem;padding:1rem 1.15rem;overflow-x:auto;color:var(--color-heading);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);font-family:var(--font-mono);font-size:clamp(.82rem,2vw,.95rem);line-height:1.25;text-align:left}.not-found h1{margin:0 0 .75rem;font-size:clamp(1.9rem,4.5vw,2.6rem);text-wrap:balance}.not-found p{max-width:34rem;margin:0 0 1.15rem;color:var(--color-text-muted)}.not-found__link{font-weight:600}.resume-page{--resume-border: var(--color-border);--resume-border-strong: var(--color-border-strong);--resume-space: clamp(1rem, 2.4vw, 1.5rem);max-width:var(--maxw-prose);margin-inline:auto}.resume-page,.resume-page *{box-sizing:border-box}.resume-hero{padding-bottom:1.2rem;border-bottom:1px solid var(--resume-border)}.resume-hero h1{margin:0;font-size:clamp(2.05rem,5vw,3.1rem);line-height:1.05;letter-spacing:-.03em}.resume-hero__copy{margin-top:.8rem;max-width:66ch}.resume-hero__copy>p{margin:0 0 .7rem;overflow-wrap:anywhere}.resume-hero__copy>p:first-child{font-weight:650;color:var(--color-heading);font-size:1.06rem}.resume-hero__copy>p:last-child{margin-bottom:0;color:var(--color-text-muted);font-size:1.01rem}.resume-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(260px,.95fr);gap:clamp(1.5rem,4vw,3rem);align-items:start;padding-top:1.4rem}.resume-main,.resume-sidebar{min-width:0;overflow-wrap:anywhere}.resume-main>h2,.resume-sidebar>h2{margin:0 0 .85rem;padding-bottom:.45rem;border-bottom:1px solid var(--resume-border);font-size:1.16rem;letter-spacing:-.01em}.resume-main>h2:not(:first-child),.resume-sidebar>h2:not(:first-child){margin-top:1.7rem}.resume-main>:first-child,.resume-sidebar>:first-child{margin-top:0}.resume-main p,.resume-main ul,.resume-main ol,.resume-sidebar p,.resume-sidebar ul,.resume-sidebar ol{margin:0 0 .95rem}.resume-main ul,.resume-main ol,.resume-sidebar ul,.resume-sidebar ol{padding-left:1.2rem}.resume-main li,.resume-sidebar li{margin:.3rem 0}.resume-main h3,.resume-sidebar h3{margin:1.35rem 0 .35rem;font-size:1rem;line-height:1.35;letter-spacing:-.01em}.resume-main h3+.resume-role-line,.resume-sidebar h3+.resume-role-line{margin-top:.15rem}.resume-company{padding-top:1rem;border-top:1px solid var(--resume-border)}.resume-company:first-of-type{padding-top:0;border-top:0}.resume-role-line{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.25rem .8rem;margin:0 0 .65rem;color:var(--color-text-muted);font-size:.93rem}.resume-role-line strong{color:var(--color-heading);font-weight:650}.resume-role-line span{white-space:nowrap}.resume-note{color:var(--color-text-muted)}.resume-list{list-style:none;padding:0;margin:0}.resume-list>li{padding:.7rem 0;border-top:1px solid var(--resume-border)}.resume-list>li:first-child{border-top:0;padding-top:0}.resume-list__title{display:block;color:var(--color-heading);font-weight:650}.resume-list__meta{display:block;color:var(--color-text-muted);font-size:.93rem;margin-top:.15rem}.resume-cert-list,.resume-language-list{list-style:none;padding:0;margin:0}.resume-cert-list>li,.resume-language-list>li{padding:.6rem 0;border-top:1px solid var(--resume-border)}.resume-cert-list>li:first-child,.resume-language-list>li:first-child{border-top:0;padding-top:0}.resume-cert-list strong,.resume-language-list strong{color:var(--color-heading);font-weight:650}@media (max-width: 900px){.resume-grid{grid-template-columns:1fr}}@media (max-width: 640px){.resume-shell{max-width:100%}.resume-page{padding:1rem}.resume-role-line{align-items:flex-start}.resume-role-line span{white-space:normal}}@media print{.site-header,.site-footer,.breadcrumbs{display:none!important}main{padding:0}.resume-shell{width:100%}.resume-page{margin:0}.resume-hero{padding-bottom:.75rem}.resume-grid{grid-template-columns:1.5fr .9fr;gap:1rem;padding-top:1rem}.resume-page a{color:inherit;text-decoration:none}.resume-page h1,.resume-page h2,.resume-page h3{break-after:avoid}.resume-company,.resume-list>li,.resume-cert-list>li,.resume-language-list>li,.resume-main p,.resume-main ul,.resume-main ol,.resume-sidebar p,.resume-sidebar ul,.resume-sidebar ol{break-inside:avoid}}
