@font-face{font-family:Manrope;src:url(/fonts/manrope-variable.ttf) format("truetype");font-weight:200 800;font-style:normal;font-display:swap}:root{color-scheme:light;--bg: oklch(97.662% .01133 252.09);--surface: oklch(100% 0 89.88);--navy: oklch(24.737% .07459 261.39);--navy-lift: oklch(30.768% .06642 261.25);--blue: oklch(42.127% .11754 252.74);--blue-hover: oklch(37.15% .10042 252.07);--blue-soft: oklch(91.105% .04514 248.32);--ink: oklch(24.546% .03683 257.14);--muted: oklch(45.014% .0242 257.52);--subtle: oklch(50.766% .02148 258.37);--line: oklch(89.086% .00882 264.52);--on-dark: oklch(84.049% .08318 248.31);--on-blue: oklch(43.884% .04817 258.73);--band-line: oklch(78.293% .03787 248.31);--sky: oklch(69.356% .1665 251.03);--teal: oklch(52.792% .09216 248.6);--teal-soft: oklch(96.558% .01715 248.01);--coral: oklch(49.079% .08548 248.95);--coral-soft: oklch(92.053% .0405 247.12);--font: "Manrope","Avenir Next","Segoe UI","Helvetica Neue",Arial,sans-serif;--text-caption: .875rem;--text-small: .9375rem;--text-body: 1rem;--text-lead: 1.125rem;--text-title: 1.25rem;--text-subheading: 1.5rem;--text-heading: 1.75rem;--text-page: 2.25rem;--text-code: .875rem;--content-width: 65rem;--space-section: 3rem;--space-layout: 2rem;--mono: "SFMono-Regular",Consolas,"Liberation Mono",monospace;font-family:var(--font);--theme-band-bg: oklch(93.271% .03484 244.19);--theme-band-ink: oklch(24.622% .05779 260.82);--theme-band-muted: oklch(43.884% .04817 258.73);--theme-band-link: oklch(42.127% .11754 252.74);--text: var(--ink);--accent: var(--blue);--accent-strong: var(--blue-hover);--accent-soft: var(--blue-soft);--surface-muted: var(--bg);--line-strong: var(--muted);--green: var(--teal);--action-bg: oklch(42.127% .11754 252.74);--action-hover: oklch(37.15% .10042 252.07);--light-button-hover: oklch(91.105% .04514 248.32)}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;display:flex;flex-direction:column;background:var(--surface);color:var(--ink);font-size:var(--text-body);line-height:1.65;font-kerning:normal}[hidden]{display:none!important}h1,h2,h3,h4,p,figure{margin:0}h1,h2,h3{text-wrap:balance}p{text-wrap:pretty}h1{font-size:var(--text-page);line-height:1.18;letter-spacing:-.035em;font-weight:700;overflow-wrap:anywhere}h2{font-size:var(--text-heading);line-height:1.3;letter-spacing:-.025em;font-weight:700;overflow-wrap:anywhere}h3{font-size:var(--text-title);line-height:1.4;letter-spacing:-.02em;font-weight:700;overflow-wrap:anywhere}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}a{color:var(--blue);text-underline-offset:4px;text-decoration-thickness:1px}a:hover{color:var(--blue-hover)}:focus-visible{outline:2px solid var(--blue);outline-offset:4px}.header-wrap :focus-visible,.hero :focus-visible,.site-footer :focus-visible,.article-header :focus-visible{outline-color:var(--sky)}img{display:block;max-width:100%}.shell{width:min(var(--content-width),calc(100% - 64px));margin-inline:auto}.skip-link{position:absolute;top:8px;left:8px;z-index:2;padding:10px 14px;background:var(--surface);transform:translateY(-160%)}.skip-link:focus{transform:none}.header-wrap{background:var(--navy);padding:0 32px}.site-header{display:flex;min-height:72px;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;padding-block:10px}.wordmark{display:flex;align-items:center;text-decoration:none;color:#fff;min-width:0}.wordmark:hover{color:#fff}.brand-name{font-size:var(--text-lead);font-weight:750;line-height:1.4;overflow-wrap:anywhere}.brand-role{display:block;margin-top:2px;font-size:var(--text-caption);color:var(--on-dark);font-weight:500}.site-nav{display:flex;align-items:center;gap:5px}.site-nav a{display:inline-flex;align-items:center;min-height:44px;padding:8px 11px;color:var(--on-dark);font-size:var(--text-small);font-weight:600;text-decoration:none;border-radius:0}.site-nav a:hover{color:#fff;text-decoration:underline;text-underline-offset:7px}.site-nav a[aria-current=page]{color:#fff;font-weight:750;text-decoration:underline;text-underline-offset:7px}.site-nav .nav-contact{background:#fff;color:var(--navy);border-radius:6px;margin-left:10px;padding-inline:15px}.site-nav .nav-contact:hover{background:var(--blue-soft);color:var(--navy);text-decoration:none}main{padding:0;flex:1}.hero{background:var(--navy);color:#fff}.hero-inner{padding:40px 0 0}.hero-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,.8fr);gap:var(--space-layout);align-items:center}.hero-role{color:var(--sky);font-size:var(--text-small);font-weight:600;margin-bottom:14px}.hero h1{font-size:clamp(2rem,calc(4.4vw + .5rem),3.25rem);line-height:1.14;color:#fff;overflow-wrap:anywhere}.hero h1 span{display:block}.hero .lede{max-width:51ch;color:var(--on-dark);font-size:var(--text-lead);line-height:1.75;margin-top:18px}.hero-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px 22px;margin-top:21px}.button{display:inline-flex;align-items:center;justify-content:center;gap:16px;min-height:44px;padding:10px 16px;background:var(--blue);color:#fff;font-size:var(--text-small);font-weight:750;text-decoration:none;border-radius:6px;transition:background .18s ease-out}.button:hover{background:var(--blue-hover);color:#fff}.button-light{background:#fff;color:var(--navy)}.button-light:hover{background:var(--blue-soft);color:var(--navy)}.hero-actions>a:not(.button){color:var(--sky);font-size:var(--text-small);font-weight:650}.hero-portrait{width:100%;max-width:240px;justify-self:end}.portrait-image{width:100%;aspect-ratio:1;overflow:hidden;border-radius:8px;background:var(--navy-lift)}.portrait-image img{width:100%;height:100%;object-fit:cover}.hero-portrait figcaption{color:var(--on-dark);font-size:var(--text-caption);margin-top:11px}.focus-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:32px;border-top:1px solid var(--navy-lift);padding:20px 0;gap:25px}.focus-strip strong{color:#fff;font-size:var(--text-small);font-weight:650;display:block}.focus-strip span{display:block;color:var(--on-dark);font-size:var(--text-caption);margin-top:3px}.section{padding:var(--space-section) 0}.work-section,.about-section{background:var(--surface)}.writing-section{background:var(--blue);color:#fff}.writing-section .section-head>div>p{color:var(--on-blue)}.writing-section .section-head>a{color:#fff}.section-head{display:flex;justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:19px;flex-wrap:wrap}.section-head>div>p{color:var(--muted);font-size:var(--text-body);margin-top:7px;max-width:65ch}.text-link{display:inline-flex;align-items:center;gap:10px;font-size:var(--text-small);font-weight:700;text-decoration:none}.text-link:hover{text-decoration:underline}.section-head>a{flex:none;font-size:var(--text-small)}.project-grid{display:grid;grid-template-columns:1.65fr 1fr;gap:var(--space-layout)}.project{min-width:0;padding:0;container-type:inline-size}.project-heading{display:flex;gap:14px;justify-content:space-between;align-items:baseline;margin-bottom:12px}.project-company{font-size:var(--text-small);color:var(--blue);font-weight:750}.project-period{font-size:var(--text-caption);color:var(--muted)}.project h3{font-size:var(--text-subheading);max-width:26ch}.project>p{font-size:var(--text-body);color:var(--muted);line-height:1.7;margin-top:12px;max-width:65ch}.project-map{display:grid;grid-template-columns:minmax(0,1fr) 19px minmax(0,1fr) 19px minmax(0,1fr);align-items:center;gap:7px;margin:20px 0 16px;padding:14px;border-radius:7px;background:var(--blue-soft)}.map-node{min-width:0;text-align:center;color:var(--navy)}.map-node .map-label{display:block;font-size:var(--text-caption);font-weight:600;margin-bottom:6px}.map-node strong{display:block;font-size:var(--text-small);font-weight:750;line-height:1.55;overflow-wrap:anywhere}.map-node span:last-child{display:block;margin-top:5px;font-size:var(--text-caption)}.map-node-main{background:var(--navy);color:#fff;border-radius:6px;padding:10px 7px}.map-node-main span:last-child{color:var(--on-dark)}.map-arrow{color:var(--blue);font-size:var(--text-title);text-align:center}.project-foot{display:flex;justify-content:space-between;gap:12px 20px;align-items:center;flex-wrap:wrap}.tools{color:var(--muted);font-size:var(--text-caption);line-height:1.8}.project-oss{border-left:1px solid var(--line);padding-left:26px;display:flex;flex-direction:column;align-items:flex-start}.project-oss .project-company{color:var(--teal)}.project-oss h3{margin-top:12px;font-size:var(--text-heading)}.project-oss>p,.project-oss .tools{color:var(--teal)}.project-oss .text-link{display:flex;width:fit-content;color:var(--teal);margin-top:auto;padding-top:22px}.oss-logo{width:46px;height:46px;object-fit:contain;margin-top:12px}.project-oss .tools{display:block;margin-top:15px}.writing-layout{display:grid;grid-template-columns:1.12fr 1fr;gap:var(--space-layout)}.featured-post{display:block;text-decoration:none;color:inherit;min-width:0}.featured-post:hover{color:inherit}.article-category{display:inline-flex;align-items:center;gap:7px;font-size:var(--text-caption);font-weight:750;color:var(--blue);background:var(--blue-soft);border-radius:4px;padding:4px 8px}.article-category.practice{color:var(--coral);background:var(--coral-soft)}.article-category.ai{color:var(--teal);background:var(--teal-soft)}.featured-post h3,.featured-post h2{margin-top:12px;font-size:var(--text-subheading);line-height:1.38;max-width:28ch}.featured-post>p,.featured-post .feature-copy>p{margin-top:12px;color:var(--on-blue);font-size:var(--text-body);max-width:58ch}.featured-post .feature-meta{margin-top:14px;color:var(--on-blue);font-size:var(--text-caption)}.featured-post .feature-read{color:#fff;font-weight:750;margin-top:14px;display:block;font-size:var(--text-caption)}.mini-code{font:var(--text-code)/1.8 var(--mono);margin:21px 0 0;padding:17px 19px;border-radius:6px;background:var(--navy);color:var(--on-dark);overflow:auto;font-size:var(--text-code)}.mini-code .token-type{color:var(--sky)}.mini-code .token-name{color:#fff}.post-list{border-left:1px solid var(--band-line);padding-left:26px}.home-post{display:block;text-decoration:none;padding:22px 0;color:#fff}.home-post:first-child{padding-top:0}.home-post:last-child{padding-bottom:0}.home-post+.home-post{border-top:1px solid var(--band-line)}.home-post:hover{color:#fff}.home-post:hover h3{text-decoration:underline;text-underline-offset:4px}.home-post h3{font-size:var(--text-title);margin-top:10px;line-height:1.45}.home-post p{color:var(--on-blue);font-size:var(--text-body);line-height:1.7;margin-top:8px}.home-post .reading-time{display:block;color:var(--on-blue);font-size:var(--text-caption);margin-top:12px}.about-panel{display:grid;grid-template-columns:1.3fr 1fr;gap:var(--space-layout)}.about-panel p{color:var(--muted);font-size:var(--text-body);margin-top:12px;line-height:1.7;max-width:65ch}.education-note{border-left:1px solid var(--line);padding-left:26px;align-self:start}.education-note h3{font-size:var(--text-lead);color:var(--teal)}.education-note p{color:var(--teal);font-size:var(--text-small)}.education-note a{color:var(--teal);font-size:var(--text-small);font-weight:750;margin-top:13px;display:inline-block}.site-footer{background:var(--navy);color:#fff;padding:24px 0}.footer-inner{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:22px}.footer-name{font-weight:750;font-size:var(--text-lead)}.footer-inner p{color:var(--on-dark);font-size:var(--text-caption);margin-top:4px}.footer-links{display:flex;gap:20px;flex-wrap:wrap;align-items:center}.footer-links a{color:var(--sky);font-size:var(--text-small);font-weight:650}.page-heading{padding:36px 0}.writing-heading-band,.article-heading-band{background:var(--navy);color:#fff;padding:20px 0 36px}.page-body{background:var(--surface);padding:28px 0 var(--space-section)}.article-heading-band{padding:20px 0 36px}.page-heading h1{font-size:var(--text-page)}.page-heading>p{color:var(--on-dark);font-size:var(--text-body);margin-top:12px;max-width:64ch}.page-intro{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:18px 30px}.page-intro>div>p{color:var(--on-dark);margin-top:12px;font-size:var(--text-body)}.writing-heading-band .text-link{color:var(--sky)}.tabs{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:0 0 23px}.tabs button{padding:10px 12px;border:1px solid var(--line);border-radius:6px;background:var(--surface);font-size:var(--text-small);font-weight:650;color:var(--muted);min-height:44px}.tabs button:hover{color:var(--blue);border-color:var(--blue)}.tabs button[aria-pressed=true]{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:750}.result-count{color:var(--subtle);margin-left:auto;font-size:var(--text-caption)}.featured-post.featured-wide{display:grid;grid-template-columns:1.3fr 1fr;align-items:center;gap:45px;padding:11px 0 33px;color:var(--ink)}.featured-wide .feature-copy h2{margin-top:18px;font-size:var(--text-heading);line-height:1.35}.featured-wide .feature-copy>p,.featured-wide .feature-meta{color:var(--muted)}.featured-wide .feature-read{color:var(--blue)}.featured-wide .mini-code{margin:0;font-size:var(--text-code);padding:24px;background:var(--navy)}.post-row{display:grid;grid-template-columns:118px minmax(0,1fr) 44px;gap:23px;align-items:center;padding:22px 0;border-bottom:1px solid var(--line)}.post-row:last-child{border-bottom:0}.post-row h2{font-size:var(--text-title);line-height:1.45;max-width:44ch}.post-row h2 a{color:var(--ink);text-decoration:none}.post-row h2 a:hover{color:var(--blue);text-decoration:underline}.post-row p{margin-top:9px;color:var(--muted);font-size:var(--text-body);max-width:65ch}.post-date{color:var(--subtle);font-size:var(--text-caption)}.post-topics{display:flex;flex-wrap:wrap;align-items:center;gap:9px 15px;margin-top:13px;color:var(--subtle);font-size:var(--text-caption)}.post-arrow{display:grid;place-items:center;width:44px;height:44px;border-radius:6px;background:var(--blue-soft);text-decoration:none;font-size:var(--text-title)}.writing-rest{border-top:1px solid var(--line)}.cv-banner{background:var(--navy);color:#fff}.cv-banner-inner{padding:36px 0;display:flex;justify-content:space-between;align-items:center;gap:25px}.cv-banner h1{font-size:var(--text-page)}.cv-banner p{color:var(--on-dark);margin-top:10px;font-size:var(--text-body)}.cv-layout{display:grid;grid-template-columns:195px minmax(0,1fr);gap:22px}.cv-selector{display:flex;flex-direction:column;align-items:stretch;gap:8px}.cv-selector button{text-align:left;background:transparent;border:1px solid transparent;border-radius:7px;padding:12px;font-size:var(--text-small);color:var(--muted)}.cv-selector button strong{font-size:var(--text-small);font-weight:700;display:block;line-height:1.55}.cv-selector small{display:block;color:var(--subtle);font-size:var(--text-caption);margin-top:5px}.cv-selector button:hover{background:var(--blue-soft);color:var(--blue)}.cv-selector button[aria-pressed=true]{background:var(--navy);color:#fff}.cv-selector button[aria-pressed=true] small{color:var(--on-dark)}.cv-detail{padding:0 0 0 24px;border-left:1px solid var(--line);min-width:0}.cv-detail h2{font-size:var(--text-heading)}.cv-detail .position-meta{color:var(--blue);font-size:var(--text-small);margin-top:8px;font-weight:650}.cv-detail>p{color:var(--muted);font-size:var(--text-body);line-height:1.75;max-width:65ch;margin-top:17px}.cv-detail h3{margin:26px 0 12px;font-size:var(--text-lead)}.cv-detail ul{padding-left:19px;margin:0;font-size:var(--text-body);color:var(--muted);line-height:1.75;max-width:67ch}.cv-detail li+li{margin-top:9px}.cv-detail li::marker{color:var(--blue)}.education-detail{max-width:76ch}.education-detail h2{font-size:var(--text-heading)}.education-detail h3{margin-top:25px;font-size:var(--text-title)}.education-detail p{color:var(--muted);margin-top:14px;max-width:65ch}.skills-list{margin:0}.skills-list>div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:30px;padding:21px 0;border-bottom:1px solid var(--line)}.skills-list>div:last-child{border-bottom:0}.skills-list dt{color:var(--blue);font-weight:750;font-size:var(--text-body)}.skills-list dd{color:var(--muted);margin:0;font-size:var(--text-body)}.back-link{display:inline-block;color:var(--sky);font-weight:650;font-size:var(--text-small);margin:0 0 16px}.back-link:hover,.article-header{color:#fff}.article-header h1{font-size:var(--text-page);line-height:1.3;max-width:27ch;margin-top:15px}.article-header .deck{color:var(--on-dark);font-size:var(--text-lead);line-height:1.75;max-width:64ch;margin-top:16px}.article-meta{display:flex;flex-wrap:wrap;align-items:center;gap:5px 13px;color:var(--on-dark);font-size:var(--text-caption);margin-top:21px}.article-meta>*+*:before{content:"\b7";padding-right:13px}.article-layout{display:grid;grid-template-columns:180px minmax(0,1fr);gap:24px}.article-contents{position:sticky;top:24px;align-self:start;padding:10px 6px 0 0}.article-contents p{font-size:var(--text-small);font-weight:750;margin-bottom:13px}.article-contents a{display:block;color:var(--muted);font-size:var(--text-small);text-decoration:none;padding:6px 0;line-height:1.7}.article-contents a:hover{color:var(--blue);text-decoration:underline}.article-contents .back-top{border-top:1px solid var(--line);padding-top:14px;margin-top:14px}.mobile-contents{display:none;font-size:var(--text-small)}.article-column{padding-left:18px;min-width:0}.key-points{padding:0 0 20px;margin-bottom:22px;border-bottom:1px solid var(--line)}.key-points h2{font-size:var(--text-lead);font-weight:750;letter-spacing:0;color:var(--blue)}.key-points ul{padding-left:19px;color:var(--muted);font-size:var(--text-body);margin:12px 0 0;line-height:1.75}.key-points li+li{margin-top:7px}.key-points li::marker{color:var(--blue)}.article-body{font-size:var(--text-lead);line-height:1.75;max-width:65ch;overflow-wrap:break-word}.article-body p{margin:0 0 18px}.article-body h2{font-size:var(--text-subheading);line-height:1.4;margin:30px 0 14px;scroll-margin-top:24px}.article-body h3{font-size:var(--text-title);line-height:1.5;margin:28px 0 13px;scroll-margin-top:24px}.article-body strong{font-weight:750}.article-body ul,.article-body ol{padding-left:22px;margin:0 0 24px}.article-body li+li{margin-top:10px}.article-body blockquote{margin:26px 0;padding:20px 22px;background:var(--blue-soft);border-radius:7px;color:var(--navy);font-size:var(--text-lead)}.article-body blockquote p:last-child{margin:0}.article-body details{border-block:1px solid var(--line);padding:13px 0;margin:22px 0}.article-body summary{color:var(--blue);cursor:pointer;font-size:var(--text-body);font-weight:650}.article-body pre{font:var(--text-code)/1.8 var(--mono);background:var(--navy);color:var(--on-dark);padding:19px;border-radius:6px;max-width:100%;overflow:auto;margin:17px 0 3px;font-size:var(--text-code)}.article-body code{font-family:var(--mono);font-size:.85em;overflow-wrap:anywhere}.article-body pre code{font-size:inherit;white-space:pre;overflow-wrap:normal}.article-body p code{background:var(--blue-soft);padding:2px 4px;border-radius:3px}.article-body .article-footnotes{padding-top:20px;border-top:1px solid var(--line);margin-top:31px;font-size:var(--text-small)}.article-body .article-footnote-ref{font-size:var(--text-caption)}.article-end{margin-top:32px;padding-top:22px;border-top:1px solid var(--line);font-size:var(--text-small)}.article-end p{color:var(--subtle);margin-bottom:10px}.article-end a{display:block;margin-top:8px}.not-found{background:var(--surface);padding:30px;border-radius:10px}.not-found p{color:var(--muted);margin-top:15px}@media(max-width:950px){.hero-inner{padding-top:40px}.hero-grid{grid-template-columns:minmax(0,1.25fr) minmax(0,.8fr);gap:var(--space-layout)}.hero h1{font-size:2.75rem;overflow-wrap:anywhere}.hero .lede{font-size:var(--text-lead);line-height:1.75}.project-grid{grid-template-columns:1.5fr 1fr;gap:var(--space-layout)}.project{padding:0;container-type:inline-size}.project h3{font-size:var(--text-title)}.project-map{padding:14px;gap:5px;grid-template-columns:minmax(0,1fr) 12px minmax(0,1fr) 12px minmax(0,1fr)}.map-arrow{font-size:var(--text-body)}.writing-layout{grid-template-columns:1fr 1fr;gap:var(--space-layout)}.featured-post{padding:0}.cv-layout{grid-template-columns:195px minmax(0,1fr);gap:22px}.article-layout{grid-template-columns:180px minmax(0,1fr);gap:24px}.article-column{padding-left:18px}.hero-portrait{max-width:230px}}@media(max-width:760px){.shell{width:calc(100% - 44px)}.site-header{min-height:72px;gap:16px;flex-wrap:wrap;padding-block:10px}.brand-name{font-size:var(--text-lead);overflow-wrap:anywhere}.site-nav{gap:5px}.site-nav a{font-size:var(--text-small);min-height:44px;padding:8px 11px}.site-nav .nav-contact{display:none}.hero-inner{padding-top:40px}.hero-grid{grid-template-columns:minmax(0,1fr) 205px;gap:var(--space-layout)}.hero h1{font-size:2.5rem;overflow-wrap:anywhere}.hero .lede{font-size:var(--text-lead);line-height:1.75}.hero-actions{gap:14px 22px}.hero-role{font-size:var(--text-small)}.focus-strip{gap:18px}.project-grid{grid-template-columns:1fr}.project-oss{display:grid;grid-template-columns:60px minmax(0,1fr);gap:10px 19px;border-left:0;border-top:1px solid var(--line);padding:24px 0 0}.project-oss .project-heading{grid-column:1 / -1;margin:0}.project-oss .oss-logo{grid-column:1;grid-row:2 / 4;margin:12px 0 0;width:46px}.project-oss h3{grid-column:2;margin:0}.project-oss>p{grid-column:2;margin:0}.project-oss .tools,.project-oss .text-link{grid-column:2;margin:0;padding-top:0}.writing-layout{grid-template-columns:1fr}.featured-post{display:grid;grid-template-columns:1.2fr 1fr;gap:20px;align-items:center}.featured-post .mini-code{margin:0}.post-list{padding:22px 0 0;border-left:0;border-top:1px solid var(--band-line)}.about-panel{grid-template-columns:1fr;gap:var(--space-layout)}.education-note{border-left:0;border-top:1px solid var(--line);padding:22px 0 0}.about-panel p{max-width:67ch;font-size:var(--text-body)}.featured-post.featured-wide{gap:23px;padding:0 0 27px}.featured-wide .feature-copy h2{font-size:var(--text-heading)}.featured-wide .mini-code{padding:18px;font-size:var(--text-code)}.post-row{grid-template-columns:118px minmax(0,1fr) 44px;gap:18px;padding-inline:0}.post-row h2{font-size:var(--text-title)}.cv-layout{grid-template-columns:1fr}.cv-selector{flex-direction:row;flex-wrap:wrap;gap:10px}.cv-selector button{flex:1 0 155px;padding:12px}.cv-banner-inner{padding:36px 0}.cv-banner h1{font-size:var(--text-page)}.article-layout{grid-template-columns:1fr;gap:24px}.article-contents{display:none}.mobile-contents{display:block;font-size:var(--text-small);color:var(--muted)}.mobile-contents summary{cursor:pointer;padding:0 2px}.mobile-contents nav{padding:10px 2px 0}.mobile-contents a{display:block;padding:6px 0}.article-column{padding:0}.page-body{padding:28px 0 var(--space-section)}.page-heading{padding:36px 0}.article-header h1{font-size:var(--text-page)}.hero-portrait{max-width:205px}}@media(max-width:580px){.shell{width:calc(100% - 36px)}.site-header{padding:12px 0;flex-wrap:wrap;gap:6px}.wordmark{width:100%;min-width:0}.site-nav{width:100%;justify-content:flex-start;gap:4px}.site-nav a{padding:8px 11px;min-height:44px;font-size:var(--text-small)}main{padding:0}.hero-inner{padding-top:26px}.hero-grid{grid-template-columns:1fr;gap:var(--space-layout)}.hero h1{font-size:2.25rem;overflow-wrap:anywhere}.hero .lede{font-size:1.0625rem;line-height:1.75;margin-top:16px}.hero-role{font-size:.875rem;margin-bottom:12px}.hero-actions{gap:14px 22px;margin-top:18px}.hero-portrait{display:none}.focus-strip{grid-template-columns:1fr;gap:10px;padding:17px 0;margin-top:24px}.focus-strip>div{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:2px 14px}.focus-strip strong,.focus-strip span{font-size:var(--text-caption)}.section{padding:36px 0}.section-head{gap:12px;margin-bottom:19px;flex-wrap:wrap}.section-head h2{font-size:var(--text-heading)}.section-head>div>p{font-size:var(--text-body)}.section-head>a{font-size:var(--text-small);gap:5px}.project{padding:0;container-type:inline-size}.project-heading{gap:10px;flex-wrap:wrap}.project h3{font-size:var(--text-subheading)}.project-map{margin-top:20px}.map-node strong{font-size:var(--text-small);overflow-wrap:anywhere}.map-node span:last-child,.map-node .map-label{font-size:var(--text-caption)}.map-node-main{padding:10px 7px}.project-oss{display:block;padding:24px 0 0}.project-oss .oss-logo{margin-top:12px}.project-oss h3{margin-top:12px;font-size:var(--text-subheading)}.project-oss>p{margin-top:11px}.project-oss .tools{margin-top:13px}.project-oss .text-link{margin-top:18px}.featured-post,.featured-post.featured-wide{display:block;padding:0}.featured-post.featured-wide{padding-bottom:27px}.featured-post h3{font-size:var(--text-subheading)}.featured-post .mini-code{margin-top:21px}.post-list{padding:22px 0 0}.about-panel{padding:0}.about-panel h2{font-size:var(--text-heading)}.footer-inner{align-items:flex-start;flex-direction:column}.footer-name{font-size:var(--text-body)}.footer-links{gap:20px}.footer-links a{min-height:35px;display:inline-flex;align-items:center;font-size:var(--text-small)}.page-heading{padding:36px 0}.page-heading h1{font-size:2rem}.page-intro>div>p,.page-heading>p{font-size:var(--text-body)}.tabs{gap:7px;padding-bottom:19px}.tabs button{font-size:var(--text-small);padding:10px;min-height:44px}.result-count{width:100%;margin:4px 0 0;font-size:var(--text-caption)}.post-row{grid-template-columns:118px minmax(0,1fr) 44px;gap:7px 15px;padding:22px 0}.post-date{grid-column:1;font-size:var(--text-caption)}.post-row>div{grid-column:1}.post-arrow{grid-column:2;grid-row:1 / 3;align-self:center;width:44px;height:44px}.post-row h2{font-size:var(--text-title)}.post-row p{font-size:var(--text-body)}.cv-banner-inner{flex-direction:column;align-items:flex-start;padding:28px 0;gap:20px}.cv-banner h1{font-size:2rem}.cv-banner p{font-size:var(--text-small)}.cv-selector button{flex-basis:120px;font-size:var(--text-caption)}.cv-selector button strong{font-size:var(--text-small)}.cv-detail,.education-detail{padding:0;border:0}.cv-detail h2,.education-detail h2{font-size:var(--text-subheading)}.cv-detail ul{font-size:var(--text-body)}.skills-list{padding:0}.skills-list>div{grid-template-columns:1fr;gap:7px;padding:17px 0}.skills-list dd{font-size:var(--text-body)}.article-heading-band{padding:20px 0 36px}.article-header h1{font-size:1.875rem}.article-header .deck{font-size:1.0625rem;line-height:1.75}.article-meta{gap:5px 10px;font-size:var(--text-caption)}.article-meta>*+*:before{padding-right:10px}.article-column{padding:0}.article-body{font-size:var(--text-lead);line-height:1.75;max-width:65ch}.article-body h2{font-size:var(--text-subheading)}.article-body h3{font-size:var(--text-title)}.article-body blockquote{padding:17px;font-size:var(--text-body)}.key-points ul{font-size:var(--text-body)}.header-wrap{padding-inline:18px}.brand-name{font-size:1.125rem}.education-detail h2{font-size:var(--text-heading)}}@media(max-width:380px){.hero h1{font-size:2.25rem;overflow-wrap:anywhere}.hero-actions{gap:14px 22px}.hero-actions a:not(.button){font-size:var(--text-small)}.button{font-size:var(--text-small);gap:16px;min-height:44px;padding:10px 16px}.project-map{grid-template-columns:1fr;gap:6px}.map-arrow{transform:rotate(90deg);height:19px}.map-node{padding:5px}.map-node .map-label{margin-bottom:2px}.map-node strong br{display:none}.map-node span:last-child{margin-top:2px}.map-node-main{padding:10px 7px}.project-foot{align-items:flex-start;flex-direction:column}.article-column{padding:0}}.section-head>div{min-width:0}@container (max-width:34rem){.project-map{grid-template-columns:1fr;gap:10px}.map-arrow{transform:rotate(90deg);height:24px}.map-node{padding:8px}.map-node-main{padding:10px 7px}.map-node strong br{display:none}}@media(max-width:580px){.section-head{flex-direction:column;align-items:flex-start;gap:12px;margin-bottom:19px}.section-head>a{min-height:36px}.post-row{grid-template-columns:minmax(0,1fr) 44px;padding:22px 0}.project-map{grid-template-columns:1fr;gap:10px}.map-arrow{transform:rotate(90deg);height:24px}.map-node{padding:8px}.map-node-main{padding:10px 7px}.map-node strong br{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;scroll-behavior:auto!important}}.header-wrap .site-header{width:min(var(--content-width),100%)}.skip-link{z-index:40}.writing-section{background:var(--theme-band-bg);color:var(--theme-band-ink)}.writing-section .section-head>div>p{color:var(--theme-band-muted)}.writing-section .section-head>a{color:var(--theme-band-link)}.writing-section .featured-post>p,.writing-section .featured-post .feature-copy>p,.writing-section .featured-post .feature-meta{color:var(--theme-band-muted)}.writing-section .featured-post .feature-read{color:var(--theme-band-link)}.writing-section .home-post,.writing-section .home-post:hover{color:var(--theme-band-ink)}.writing-section .home-post p,.writing-section .home-post .reading-time{color:var(--theme-band-muted)}app-root{display:flex;flex-direction:column;min-height:100vh}app-home,app-cv,app-blog-index,app-blog-post{display:block;flex:1;min-width:0}app-code-preview{display:block;min-width:0}.icon{width:1.125rem;height:1.125rem;flex:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}button{cursor:pointer}main:focus,h2[tabindex="-1"]:focus{outline:none}.site-nav .theme-toggle{display:grid;place-items:center;width:44px;height:44px;padding:10px;border:0;border-radius:6px;background:transparent;color:var(--on-dark);flex:none}.site-nav{flex-wrap:wrap;min-width:0}.article-contents a{overflow-wrap:anywhere}.article-contents{max-height:calc(100vh - 48px);overflow:auto}.cv-selector button{overflow-wrap:anywhere}.site-nav .theme-toggle:hover{background:var(--navy-lift);color:#fff}.site-nav .nav-contact{gap:7px}.project-map .map-node{color:var(--ink)}.project-map .map-node-main{color:#fff}.featured-post h3 a,.home-post h3 a{color:inherit;text-decoration:none}.featured-post h3 a:hover,.home-post h3 a:hover{text-decoration:underline}.featured-post .feature-read{width:fit-content}.about-contact{display:flex;flex-wrap:wrap;gap:12px 22px;align-items:center;margin-top:20px;font-size:var(--text-small)}.text-button{padding:8px 0;border:0;background:transparent;color:var(--blue);font-size:var(--text-small);text-decoration:underline;text-underline-offset:4px;min-height:44px}.writing-empty{color:var(--theme-band-muted)}.writing-count{font-size:var(--text-caption);color:var(--subtle);margin:0 0 22px}.blog-page .post-list{border-left:0;padding:0}.blog-page .featured-wide app-code-preview{width:100%}.empty-state{padding-block:48px}.empty-state p{margin-top:16px;color:var(--muted)}.cv-skill-filter{padding:0 0 20px;margin-bottom:10px;font-size:var(--text-small);color:var(--muted)}.cv-skill-filter summary{cursor:pointer;padding:10px 0;min-height:44px;width:fit-content}.skill-filter,.chip-list{display:flex;flex-wrap:wrap;gap:8px}.skill-filter{padding-top:12px}.skill-filter button{border:1px solid var(--line-strong);border-radius:5px;padding:9px 12px;min-height:44px;color:var(--muted);background:var(--surface);font-size:var(--text-small)}.skill-filter button[aria-pressed=true]{background:var(--navy);color:#fff;border-color:var(--navy);text-decoration:underline;text-underline-offset:5px}.cv-detail .chip-list{padding:0;margin:0;list-style:none;gap:8px}.cv-detail .chip-list li{margin:0;padding:6px 10px;border-radius:4px;font-size:var(--text-caption);color:var(--blue);background:var(--blue-soft)}.experience-facts{display:flex;flex-wrap:wrap;gap:12px 28px;margin:22px 0 0;padding:18px 0;border-block:1px solid var(--line);font-size:var(--text-small)}.experience-facts dt{color:var(--muted);font-size:var(--text-caption)}.experience-facts dd{margin:4px 0 0;color:var(--ink);font-weight:750}.cv-project-links{display:flex;flex-wrap:wrap;gap:16px 28px;margin-top:28px}.skills-intro{font-size:var(--text-small);color:var(--muted)}.skill-link{border:0;padding:8px 0;min-height:44px;background:transparent;color:var(--muted);text-decoration:underline;text-underline-offset:4px;font-size:var(--text-body)}.skill-link:hover{color:var(--blue)}.article-contents .contents-subheading{padding-left:12px;font-size:var(--text-caption)}.article-body figure{margin:28px 0}.article-body figure img,.article-body>p>img{max-width:100%;max-height:440px;width:auto;height:auto;margin-inline:auto;object-fit:contain;border-radius:6px}.article-body figcaption{color:var(--muted);font-size:var(--text-caption);margin-top:10px;text-align:center}.article-body>p:first-child{margin-top:0}.article-body h4{margin:25px 0 12px;font-size:var(--text-lead)}.article-body blockquote{color:var(--ink)}.article-body blockquote p+p{margin-top:16px}.article-body .article-example summary{min-height:44px;padding:6px 0}.article-example summary span{color:var(--muted);font-size:var(--text-caption);font-weight:500;margin-left:10px}.article-body table{display:block;max-width:100%;overflow:auto;border-collapse:collapse;font-size:var(--text-small);margin-block:24px}.article-body td,.article-body th{text-align:left;border:1px solid var(--line);padding:12px}.article-body th{background:var(--blue-soft)}.article-body .article-footnotes{scroll-margin-top:24px}.article-body .article-footnotes p{margin-top:12px}.article-body .article-footnote-ref{padding:4px}.article-body .code-token-keyword,.article-body .code-token-annotation{color:var(--sky)}.article-body .code-token-string{color:#9de6ce}.article-body .code-token-type{color:#fff}.article-body .code-token-number{color:#f1d89e}.article-body .code-token-comment{color:var(--on-dark);font-style:italic}.article-column>app-semantic-cache-demo{margin-block:30px}.button:not(.button-light),.tabs button[aria-pressed=true]{background:var(--action-bg);color:#fff}.button:not(.button-light):hover{background:var(--action-hover)}:root[data-theme=dark]{color-scheme:dark;--bg:oklch(20% .024 258);--surface:oklch(22% .03 258);--ink:oklch(96% .012 250);--muted:oklch(83% .028 250);--subtle:oklch(77% .03 250);--line:oklch(38% .034 258);--blue:oklch(86% .08 250);--blue-hover:oklch(94% .035 250);--blue-soft:oklch(30% .045 258);--teal:oklch(86% .06 250);--teal-soft:oklch(31% .037 250);--coral:oklch(88% .045 250);--coral-soft:oklch(32% .032 250);--theme-band-bg:oklch(27% .048 258);--theme-band-ink:oklch(96% .012 250);--theme-band-muted:oklch(84% .028 250);--theme-band-link:oklch(88% .065 250);--band-line:oklch(43% .04 258)}:root[data-theme=dark] .cv-selector button[aria-pressed=true]{border-color:var(--on-dark)}@media(max-width:1024px){.article-body pre code{min-width:0;white-space:pre-wrap;overflow-wrap:anywhere}}@media(max-width:760px){.blog-page{padding-bottom:0}.blog-page .post-list{padding-bottom:24px}}.button-light:hover,.site-nav .nav-contact:hover{background:var(--light-button-hover)}.hero-grid:has(>:only-child){grid-template-columns:minmax(0,1fr)}
