:root{--paper:#f6f4ef;--surface:#fffefa;--ink:#19343e;--body:#4a5c61;--muted:#5d6c70;--teal:#245f62;--line:#d8ded9;--gold:#b28355;--radius:14px;--sans:Inter,"Avenir Next",Avenir,"Segoe UI",Helvetica,Arial,sans-serif;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:115px}body{margin:0;font-family:var(--sans);font-size:16px;line-height:1.65;color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased}body::before{content:"";position:absolute;z-index:-1;inset:0 0 auto;height:850px;pointer-events:none;background:radial-gradient(ellipse at 90% 14%,#dce6df8c,transparent 48%),radial-gradient(ellipse at 3% 6%,#eee3d578,transparent 46%)}a{color:inherit;text-decoration:none}button,input,select{font:inherit}button,select{cursor:pointer}button{color:inherit}button:disabled{cursor:default}img,svg{max-width:100%;display:block}img{height:auto}p,h1,h2,h3,h4,figure{margin:0}h1,h2,h3,h4{font-weight:550;line-height:1.15;letter-spacing:-.045em}h1{font-size:clamp(2.8rem,5.6vw,4.65rem)}h2{font-size:clamp(2rem,3vw,2.65rem)}h3{font-size:1.3rem;letter-spacing:-.025em}p{color:var(--body)}[hidden]{display:none!important}::selection{background:#d6e2d8;color:var(--ink)}:focus-visible{outline:3px solid var(--teal);outline-offset:5px;border-radius:3px}.wrap{width:min(1140px,calc(100% - 96px));margin-inline: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}.skip-link{position:fixed;z-index:100;left:16px;top:-80px;background:var(--ink);color:white;padding:12px 20px;border-radius:6px}.skip-link:focus{top:12px}.arrow{display:inline-block;font-size:1.15em;line-height:1;flex:none;font-weight:400}.text-link{display:inline-flex;align-items:center;gap:12px;font-size:.91rem;font-weight:600;border-bottom:1px solid #98aaa6;padding:5px 0;line-height:1.5}.text-link:hover{color:var(--teal);border-color:var(--teal)}.eyebrow{font:500 .68rem/1.5 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--teal);margin-bottom:18px}.actions{display:flex;align-items:center;gap:26px;flex-wrap:wrap}.button{display:inline-flex;justify-content:center;align-items:center;gap:22px;min-height:50px;padding:13px 23px;border:1px solid var(--ink);border-radius:5px;background:var(--ink);color:var(--surface);font-size:.88rem;font-weight:550;line-height:1.4;transition:background .2s,transform .2s}.button:hover{background:var(--teal);border-color:var(--teal);transform:translateY(-2px)}.button.secondary{color:var(--ink);background:transparent;border-color:#a8b5b1}.button.secondary:hover{background:#e6ece6}.button.button-light{background:var(--paper);border-color:var(--paper);color:var(--ink)}.button.button-light:hover{background:#dfebe1}.subtle-button{border:0;border-bottom:1px solid var(--line);padding:6px 0;background:none;font-size:.85rem;display:inline-flex;gap:12px;align-items:center}.subtle-button:hover{color:var(--teal)}
/* Navigation */
.site-header{position:sticky;top:0;z-index:30;background:#f6f4eff2;backdrop-filter:blur(16px);border-bottom:1px solid #d8ded9a6}.nav-bar{display:flex;align-items:center;justify-content:space-between;min-height:92px;gap:24px}.brand{display:inline-flex;align-items:center;gap:13px;flex-shrink:0;font-size:.96rem;font-weight:650;letter-spacing:-.035em}.brand img{width:44px;height:44px;border-radius:12px;transition:transform .25s}.brand:hover img{transform:rotate(-5deg)}.nav-links{display:flex;align-items:center;gap:31px;font-size:.85rem;font-weight:500}.nav-links>a{position:relative;padding:9px 0;color:var(--body)}.nav-links>a:hover,.nav-links>a[aria-current]{color:var(--ink)}.nav-links>a[aria-current]::after{content:"";position:absolute;left:0;right:0;bottom:2px;height:2px;background:var(--teal)}.nav-links>a.nav-contact{display:flex;gap:16px;align-items:center;border:1px solid #adbab4;border-radius:5px;padding:9px 15px;margin-left:7px;color:var(--ink)}.nav-contact:hover{background:#e6ece6}.menu-toggle{display:none;background:transparent;border:1px solid var(--line);border-radius:5px;padding:9px 12px;font-size:.85rem}.menu-toggle span{margin-left:9px}
/* Home */
.hero-section{position:relative;overflow:hidden;background:radial-gradient(ellipse at 81% 48%,#dce5dc9e,transparent 44%),linear-gradient(115deg,#f8f5ef00 45%,#e9eee45c)}.hero-section::before{content:"";position:absolute;width:570px;height:570px;border:1px solid #a8b6ad33;border-radius:50%;top:-160px;right:-270px;box-shadow:0 0 0 76px #d0d9d21c,0 0 0 152px #d0d9d218;pointer-events:none}.hero{display:grid;grid-template-columns:1.12fr 1fr;align-items:center;gap:80px;padding:70px 0 64px}.hero-copy .eyebrow{position:relative;padding-left:21px;margin-bottom:25px}.hero-copy .eyebrow::before{content:"";position:absolute;left:0;top:5px;width:7px;height:7px;background:var(--gold);border-radius:50%}.hero h1{font-size:clamp(3.8rem,6.5vw,5.8rem);line-height:.98;font-weight:550;letter-spacing:-.065em}.name-dot{color:var(--gold)}.hero-role{font-size:1.25rem;letter-spacing:-.025em;color:var(--teal);margin:25px 0 18px}.hero-description{font-size:1.02rem;line-height:1.85;max-width:500px}.hero .actions{margin-top:29px;gap:24px}.hero-links{display:flex;gap:24px;margin-top:28px;font-size:.79rem;color:var(--body)}.hero-links a{display:flex;align-items:center;gap:8px}.hero-links a:hover{color:var(--teal)}.portrait-frame{position:relative;max-width:455px;margin-left:auto;padding:12px;background:#fdfcf9;border:1px solid #dedfd6;box-shadow:0 18px 48px -28px #2b443344;border-radius:150px 150px 9px 9px}.portrait-frame::before{content:"";position:absolute;z-index:0;inset:-16px 18px 34px -16px;border:1px solid #c2cec2;border-radius:161px 161px 5px 5px;pointer-events:none}.portrait-frame>img{position:relative;width:100%;aspect-ratio:1 / 1.12;object-fit:cover;object-position:50% 43%;border-radius:140px 140px 3px 3px;background:#d1cbc2}.portrait-frame figcaption{display:flex;align-items:center;justify-content:space-between;gap:15px;font:500 .62rem/1.5 var(--mono);letter-spacing:.04em;padding:17px 4px 5px;color:var(--body)}.portrait-frame figcaption span:last-child{color:var(--muted);white-space:nowrap}.current-role{display:flex;align-items:baseline;gap:25px;border-top:1px solid #cbd5cd;padding:23px 0 27px;font-size:.78rem}.current-role>span{font:500 .65rem var(--mono);text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}.current-role p{margin:0;line-height:1.8}.current-role strong{font-weight:550;color:var(--ink)}.role-divider{display:inline-block;color:#a1afa7;margin:0 16px}.section{padding:90px 0}.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:30px;margin-bottom:37px}.section-head .eyebrow{margin-bottom:13px}.section-head p:not(.eyebrow){margin-top:13px;font-size:.95rem}.section-head>.text-link{flex:none;margin-bottom:3px}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:34px;row-gap:50px}.project-card{display:block;min-width:0}.project-art{overflow:hidden;border-radius:var(--radius);border:1px solid #d3ddd5;background:#e4e9e3}.project-art img{width:100%;height:auto;transition:transform .45s cubic-bezier(.2,.6,.3,1)}.project-card:hover .project-art img{transform:scale(1.025)}.project-meta{display:flex;justify-content:space-between;gap:15px;margin:20px 0 12px;color:var(--muted);font:400 .67rem/1.6 var(--mono)}.project-card h2,.project-card h3{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;font-size:1.47rem;letter-spacing:-.035em;line-height:1.3}.project-card h2 .arrow,.project-card h3 .arrow{font-size:1.1rem;margin-top:4px;color:var(--teal);transition:transform .2s}.project-card:hover h2,.project-card:hover h3{color:var(--teal)}.project-card:hover .arrow{transform:translate(2px,-2px)}.project-card>p{font-size:.9rem;line-height:1.8;margin:12px 0 17px;max-width:480px}.tags{display:flex;flex-wrap:wrap;gap:5px 13px;font:400 .65rem/1.6 var(--mono);color:var(--muted)}.tags>span{padding-right:13px;border-right:1px solid #bdc9c1}.tags>span:last-child{border:0;padding-right:0}.skills-band{background:var(--ink);color:#f6f4ef;padding:59px 0;position:relative;overflow:hidden}.skills-band::after{content:"";position:absolute;top:-190px;left:-110px;width:370px;height:370px;border:1px solid #f6f4ef0d;border-radius:50%;box-shadow:0 0 0 55px #f6f4ef05,0 0 0 110px #f6f4ef03;pointer-events:none}.skills-intro{display:grid;grid-template-columns:1fr 1.4fr;gap:100px;position:relative;z-index:1}.skills-band .eyebrow{color:#b9cfc6;margin-bottom:13px}.skills-band h2{font-size:2.25rem;line-height:1.2}.skills-band-copy>p{color:#c3d0cf;font-size:.94rem;margin:3px 0 24px;max-width:490px}.tool-list{display:flex;flex-wrap:wrap;gap:14px 26px;font:400 .83rem/1.6 var(--mono)}.tool-list span{color:#e9eee8}.journal-list{border-top:1px solid var(--line)}.journal-row{display:grid;grid-template-columns:55px 1fr 32px;gap:25px;padding:29px 0 30px;border-bottom:1px solid var(--line);align-items:start}.journal-index{font:400 .8rem/1.6 var(--mono);color:var(--muted);padding-top:2px}.journal-row .eyebrow{margin-bottom:10px;font-size:.62rem}.journal-row h3{font-size:1.43rem;line-height:1.3}.journal-row p:not(.eyebrow){font-size:.88rem;margin:10px 0 12px;max-width:760px}.journal-row>.arrow{margin-top:22px;color:var(--teal)}.journal-row:hover h3{color:var(--teal)}.journal-date{font:400 .67rem/1.5 var(--mono);color:var(--muted)}.about-preview{display:grid;grid-template-columns:1fr 1.25fr;gap:100px;padding:5px 0 85px}.about-preview h2{font-size:2.3rem}.about-preview>div>p:not(.eyebrow){font-size:1rem;line-height:1.9;margin-bottom:24px}.contact-panel{position:relative;isolation:isolate;overflow:hidden;display:flex;justify-content:space-between;align-items:center;gap:38px;padding:49px 48px;margin:0 0 75px;border-radius:var(--radius);background:var(--ink);color:var(--surface)}.contact-panel::after{content:"";position:absolute;z-index:-1;right:-95px;top:-120px;width:420px;height:420px;border:1px solid #e2e7dd1a;border-radius:50%;box-shadow:0 0 0 60px #e2e7dd06,0 0 0 120px #e2e7dd04}.contact-panel .eyebrow{color:#b6cbc2;margin-bottom:12px}.contact-panel h2{font-size:2.2rem;letter-spacing:-.04em}.contact-panel p:not(.eyebrow){color:#c7d2cd;font-size:.88rem;margin-top:13px}.contact-panel>.button{flex:none}
/* Indexes and project pages */
.page-intro{padding:71px 0 51px;max-width:880px}.page-intro .eyebrow{margin-bottom:20px}.page-intro>p:not(.eyebrow){font-size:1.05rem;line-height:1.85;max-width:610px;margin-top:24px}.muted-heading{color:var(--teal)}.journal-intro>.text-link{margin-top:23px}.filter-bar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:0 0 24px;padding:20px 0;border-block:1px solid var(--line)}.search-box{position:relative;flex:1;max-width:600px}.search-box svg{position:absolute;left:15px;top:15px;width:19px;height:19px;color:var(--muted)}.search-box input{width:100%;min-height:49px;padding:12px 18px 12px 45px;background:var(--surface);border:1px solid #cdd6ce;border-radius:5px;font-size:.85rem;color:var(--ink)}.search-box input::placeholder{color:var(--muted);opacity:1}.category-select select{min-height:49px;max-width:280px;padding:11px 34px 11px 15px;border:1px solid #cdd6ce;border-radius:5px;color:var(--ink);background:var(--surface);font-size:.84rem}.list-summary{display:flex;justify-content:space-between;gap:20px;font:400 .67rem/1.6 var(--mono);color:var(--muted);margin:24px 0 28px}.all-projects{margin-bottom:85px}.empty-state{grid-column:1/-1;padding:70px 25px;text-align:center;border:1px dashed var(--line);border-radius:var(--radius)}.empty-state h2{font-size:1.5rem}.empty-state p{margin-top:12px}.breadcrumb{display:flex;align-items:center;gap:15px;padding-top:36px;color:var(--muted);font-size:.78rem}.breadcrumb>a{color:var(--teal)}.breadcrumb>a:hover{text-decoration:underline}.detail-title{max-width:850px;padding:42px 0}.detail-title>p:not(.eyebrow){font-size:1.13rem;line-height:1.8;margin-top:25px;max-width:760px}.detail-title h1{font-size:clamp(2.5rem,5vw,4rem)}.detail-art{overflow:hidden;border-radius:var(--radius);border:1px solid #d3ddd5;max-width:100%;background:#e6e8df}.detail-art img{width:100%;height:345px;object-fit:contain;object-position:center}.detail-art.art-security{background:#182e37}.detail-art.art-ai{background:#e7ece7}.detail-art.art-monitoring{background:#e3eaf0}.detail-art.art-delivery,.detail-art.art-database,.detail-art.art-logging,.detail-art.art-cloud{background:#eee7dd}.detail-layout{display:grid;grid-template-columns:240px minmax(0,1fr);gap:90px;margin:57px 0 85px}.detail-aside dl{margin:0 0 35px}.detail-aside dl>div{margin-bottom:24px}.detail-aside dt{font:400 .65rem var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:9px}.detail-aside dd{margin:0;font-size:.86rem;color:var(--ink)}.detail-aside .tags{gap:9px 13px}.detail-aside .text-link{font-size:.8rem}.related-notes{border-top:1px solid var(--line);margin-top:35px;padding-top:8px}.detail-layout .prose h2:first-child{margin-top:0}
/* Journal */
.journal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:34px}.article-card{display:flex;flex-direction:column;min-width:0;border:1px solid #d3dbd3;border-radius:var(--radius);background:#fffefa;overflow:hidden;transition:border-color .2s,box-shadow .2s}.article-card:hover{border-color:#91aba0;box-shadow:0 12px 30px -23px #19343e55}.article-art{overflow:hidden;background:#e7eae2}.article-art img{width:100%;height:auto;aspect-ratio:2.5;object-fit:cover;transition:transform .4s}.article-card:hover .article-art img{transform:scale(1.025)}.article-card-content{display:flex;flex-direction:column;flex:1;padding:25px 27px 22px}.article-card .eyebrow{font-size:.6rem;margin-bottom:12px}.article-card h2{font-size:1.47rem;line-height:1.35;letter-spacing:-.033em}.article-card-content>p:not(.eyebrow){font-size:.86rem;line-height:1.8;margin:15px 0 23px}.article-card-footer{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:auto;padding-top:18px;border-top:1px solid #e0e4dc;color:var(--muted);font:400 .63rem/1.6 var(--mono)}.article-card:hover h2{color:var(--teal)}.article-card-footer>.arrow{color:var(--teal);font-size:1.2rem}.note-band{display:flex;align-items:center;justify-content:space-between;gap:30px;padding:37px 0;border-top:1px solid var(--line);margin:65px 0 55px}.note-band h2{font-size:1.5rem;letter-spacing:-.03em}.note-band p{font-size:.9rem;margin-top:10px}.note-band .button{flex:none}.article-header{max-width:900px;padding:43px 0 43px}.article-header h1{font-size:clamp(2.45rem,4.7vw,3.8rem);line-height:1.13}.article-header>p:not(.eyebrow){font-size:1.15rem;max-width:800px;margin-top:25px;line-height:1.8}.article-byline{display:flex;align-items:center;gap:13px;margin-top:28px}.article-byline img{width:44px;height:44px;border-radius:50%;object-fit:cover}.article-byline>div{display:flex;flex-direction:column;gap:2px;font-size:.8rem}.article-byline a{font-weight:550}.article-byline a:hover{text-decoration:underline}.article-byline span{font:400 .65rem/1.6 var(--mono);color:var(--muted)}.article-layout{display:grid;grid-template-columns:minmax(0,760px) 235px;gap:85px;border-top:1px solid var(--line);padding-top:40px;align-items:start}.prose{font-size:1rem;color:var(--body);line-height:1.9;min-width:0;overflow-wrap:break-word}.prose p{margin:0 0 23px}.prose h2{font-size:1.6rem;margin:40px 0 19px;color:var(--ink);letter-spacing:-.035em;line-height:1.3;scroll-margin-top:120px}.prose h3{font-size:1.25rem;margin:30px 0 13px;color:var(--ink);line-height:1.4}.prose h4{font-size:1.05rem;margin:25px 0 12px;color:var(--ink)}.prose ul,.prose ol{padding-left:24px;margin:0 0 26px}.prose li{margin:8px 0;padding-left:5px}.prose li::marker{color:var(--teal)}.prose a{color:var(--teal);text-decoration:underline;text-decoration-color:#9bb6ab;text-underline-offset:4px;overflow-wrap:anywhere}.prose a:hover{text-decoration-color:var(--teal)}.prose strong{color:var(--ink);font-weight:600}.prose blockquote{margin:30px 0;padding:18px 23px;border-left:3px solid #688c7d;background:#e8ede5;border-radius:0 8px 8px 0}.prose blockquote p:last-child{margin-bottom:0}.prose code{font-family:var(--mono);font-size:.85em;padding:3px 6px;background:#e6eae3;border-radius:4px;overflow-wrap:anywhere}.code-block{margin:25px 0;background:#1b343d;border-radius:8px;overflow:hidden;color:#e7eee8}.code-label{display:block;padding:10px 19px 0;font:400 .65rem var(--mono);color:#b7c7bb}.code-block pre{overflow-x:auto;padding:17px 20px;margin:0;line-height:1.8;white-space:pre}.prose pre code{font-size:.8rem;padding:0;background:none;color:inherit;white-space:pre;overflow-wrap:normal}.prose hr{border:0;border-top:1px solid var(--line);margin:35px 0}.toc{position:sticky;top:125px;font-size:.75rem;padding-left:24px;border-left:1px solid var(--line)}.toc>strong{display:block;font-size:.73rem;margin-bottom:17px;font-weight:600}.toc nav{display:flex;flex-direction:column;gap:13px}.toc nav a{color:var(--muted);line-height:1.55}.toc nav a:hover{color:var(--teal)}.toc-back{display:block;margin-top:25px;color:var(--teal)}.article-end{display:flex;align-items:center;justify-content:space-between;gap:25px;margin-top:40px;border-top:1px solid var(--line);padding:24px 0}.article-end button{flex:none}.progress{position:fixed;z-index:40;top:0;left:0;height:3px;width:0;background:var(--gold);pointer-events:none}.related-reading{padding:60px 0 80px;margin-top:35px;border-top:1px solid var(--line)}.related-reading .section-head{margin-bottom:29px}.related-reading h2{font-size:1.6rem}.related-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:45px}.related-grid>a{border-top:1px solid #bccbc1;padding-top:23px}.related-grid .eyebrow{font-size:.61rem;margin-bottom:12px}.related-grid h3{font-size:1.3rem;line-height:1.4}.related-grid h3 .arrow{color:var(--teal);margin-left:6px}.related-grid>a:hover h3{color:var(--teal)}.related-grid p:not(.eyebrow){margin-top:12px;font-size:.88rem}
/* About, résumé and utility pages */
.about-hero{display:grid;grid-template-columns:1.5fr 1fr;gap:85px;align-items:center;padding:70px 0 80px}.about-hero h1{font-size:clamp(2.8rem,4.7vw,3.9rem);line-height:1.15}.about-hero p:not(.eyebrow){font-size:1rem;line-height:1.9;margin-top:25px}.about-hero .actions{margin-top:29px}.about-image{border-radius:var(--radius);border:10px solid #fffefa;box-shadow:0 0 0 1px #d8ded5;width:100%;aspect-ratio:1 / 1.1;object-fit:cover}.two-col{display:grid;grid-template-columns:1fr 1.55fr;gap:95px;padding:59px 0;border-top:1px solid var(--line)}.two-col h2{font-size:2rem}.timeline-item{position:relative;padding:0 0 29px 22px;margin-bottom:24px;border-bottom:1px solid #dce2da;border-left:1px solid #c9d5c9}.timeline-item::before{content:"";position:absolute;top:5px;left:-4px;width:7px;height:7px;border-radius:50%;background:var(--gold)}.timeline-item:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}.period{display:block;font:400 .66rem/1.6 var(--mono);color:var(--muted);margin-bottom:11px}.timeline-item h3{font-size:1.2rem;line-height:1.4;letter-spacing:-.03em}.company{display:block;color:var(--teal);font-size:.85rem;margin:7px 0 10px}.timeline-item p{font-size:.9rem;line-height:1.85}.education-item{padding-bottom:27px}.education-item:last-child{padding-bottom:0}.education-item h3{font-size:1.15rem;line-height:1.4}.education-item p{font-size:.9rem;margin:8px 0}.education-item .period{margin:0}.skill-groups{display:grid;grid-template-columns:1fr 1fr;gap:32px}.skill-groups h3{font-size:1.03rem;line-height:1.4}.skill-groups p{font-size:.84rem;line-height:1.9;margin-top:10px}.two-col:last-of-type{padding-bottom:70px}.resume{max-width:850px;margin:60px auto 80px;padding:53px 58px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);font-size:.92rem}.resume h1{font-size:2.7rem}.resume .role{margin-top:13px;color:var(--teal);font-size:1.12rem}.resume .resume-contact{font-size:.83rem;margin:19px 0;line-height:1.9}.resume-contact a:hover{text-decoration:underline}.resume header{padding-bottom:31px;border-bottom:1px solid var(--line);margin-bottom:30px}.resume h2{font-size:1.3rem;border-top:1px solid var(--line);padding-top:24px;margin:29px 0 17px}.resume header+h2{border:0;padding:0;margin-top:0}.resume h3{font-size:1.05rem;line-height:1.4}.resume p{margin-bottom:14px}.resume-experience{margin:21px 0}.resume-experience .resume-company{font-size:.78rem;color:var(--teal);margin:7px 0 9px}.privacy-copy{max-width:750px;padding-bottom:85px}.privacy-copy h2:first-child{margin-top:0}.not-found{padding:95px 0 110px;min-height:65vh}.not-found>p:not(.eyebrow){max-width:570px;margin:24px 0 30px;font-size:1.05rem}.not-found h1{font-size:clamp(2.8rem,5vw,4rem)}
/* Footer */
.footer{border-top:1px solid #d0d9cf;background:#ecefe7;padding:37px 0 25px}.footer-row{display:flex;align-items:center;justify-content:space-between;gap:30px;padding-bottom:30px}.footer .brand{font-size:.9rem}.footer .brand img{width:38px;height:38px;border-radius:10px}.footer-links{display:flex;flex-wrap:wrap;gap:25px;font-size:.76rem;color:var(--body)}.footer-links a{display:flex;align-items:center;gap:7px}.footer-links a:hover{color:var(--teal)}.footer-bottom{display:flex;justify-content:space-between;gap:20px;font-size:.7rem;color:var(--muted);padding-top:19px;border-top:1px solid #d4ddd1}.footer-bottom a:hover{text-decoration:underline}
/* Responsive layout */
@media(min-width:1500px){.hero{padding-top:85px;padding-bottom:75px}}
@media(max-width:1050px){.wrap{width:calc(100% - 64px)}.hero{gap:50px}.hero h1{font-size:4.65rem}.hero-description{font-size:.96rem}.hero .actions{gap:18px}.hero .text-link{font-size:.85rem}.portrait-frame{border-radius:120px 120px 9px 9px}.portrait-frame>img{border-radius:110px 110px 3px 3px}.portrait-frame::before{border-radius:130px 130px 5px 5px}.portrait-frame figcaption{font-size:.53rem}.skills-intro,.about-preview{gap:60px}.article-layout{grid-template-columns:minmax(0,1fr) 200px;gap:45px}.detail-layout{gap:60px;grid-template-columns:210px minmax(0,1fr)}.about-hero{gap:55px}.two-col{gap:60px}.nav-links{gap:23px}.current-role{gap:20px}.role-divider{margin:0 10px}}
@media(max-width:800px){.wrap{width:calc(100% - 48px)}.nav-bar{min-height:80px}.brand{font-size:.87rem;gap:10px}.brand img{width:39px;height:39px}.nav-links{gap:19px;font-size:.79rem}.nav-links>a.nav-contact{margin-left:0;padding:8px 11px;gap:9px}.hero{gap:35px;padding:55px 0 47px}.hero h1{font-size:3.85rem}.hero-role{font-size:1.05rem;margin-top:20px}.hero-description{font-size:.9rem}.hero .actions{align-items:flex-start;flex-direction:column;gap:13px;margin-top:23px}.hero-links{margin-top:20px}.portrait-frame{padding:9px}.portrait-frame>img{aspect-ratio:1 / 1.25}.portrait-frame figcaption{padding:13px 3px 4px;font-size:.5rem}.portrait-frame figcaption span:last-child{display:none}.current-role{align-items:flex-start;font-size:.7rem;gap:15px;padding-block:19px}.current-role>span{padding-top:4px}.role-divider{margin-inline:7px}.section{padding:66px 0}.section-head{gap:20px;margin-bottom:29px}.section-head p:not(.eyebrow){font-size:.86rem}.section-head .text-link{font-size:.8rem}.project-grid{gap:36px 25px}.project-card h2,.project-card h3{font-size:1.3rem}.project-meta{font-size:.59rem;margin-top:17px}.project-card>p{font-size:.85rem}.tags{font-size:.6rem;gap:5px 9px}.tags>span{padding-right:9px}.skills-intro{grid-template-columns:1fr 1.3fr;gap:45px}.skills-band h2{font-size:1.9rem}.tool-list{gap:12px 19px;font-size:.76rem}.skills-band-copy>p{font-size:.87rem}.about-preview{gap:45px;padding-bottom:60px}.about-preview h2{font-size:2rem}.about-preview>div>p:not(.eyebrow){font-size:.92rem}.contact-panel{padding:35px 30px;margin-bottom:60px;gap:25px}.contact-panel h2{font-size:1.8rem}.contact-panel p:not(.eyebrow){font-size:.8rem}.article-layout{grid-template-columns:minmax(0,1fr);gap:0}.toc{display:none}.article-header{padding-top:35px}.article-header h1{font-size:2.7rem}.article-header>p:not(.eyebrow){font-size:1.05rem}.article-card-content{padding:22px}.article-card h2{font-size:1.3rem}.article-card-footer{font-size:.56rem}.detail-layout{grid-template-columns:170px minmax(0,1fr);gap:38px}.detail-art img{height:290px}.about-hero{grid-template-columns:1.35fr 1fr;gap:38px;padding:55px 0 65px}.about-hero h1{font-size:2.6rem}.about-hero p:not(.eyebrow){font-size:.9rem}.about-hero .actions{gap:18px}.about-hero .button{font-size:.8rem}.about-hero .text-link{font-size:.8rem}.two-col{grid-template-columns:1fr 1.6fr;gap:36px;padding:45px 0}.two-col h2{font-size:1.7rem}.skill-groups{gap:27px}.skill-groups p{font-size:.79rem}.resume{padding:40px}.footer-links{gap:18px}}
@media(max-width:640px){html{scroll-padding-top:95px}.wrap{width:calc(100% - 40px)}.nav-bar{min-height:76px;flex-wrap:wrap;padding-block:14px;gap:14px}.brand{font-size:.88rem}.brand img{width:38px;height:38px}.menu-toggle:not([hidden]){display:block}.nav-links{width:100%;flex-wrap:wrap;justify-content:flex-start;padding:7px 0 5px;gap:14px 25px}.site-header.nav-ready .nav-links{display:none}.site-header.nav-ready .nav-links.is-open{display:flex}.nav-links>a{font-size:.86rem}.nav-links>a.nav-contact{padding:7px 11px;margin-left:auto}.hero{grid-template-columns:1fr;gap:43px;padding:43px 0 35px}.hero h1{font-size:clamp(3.7rem,15vw,5.6rem)}.hero-copy .eyebrow{margin-bottom:23px;font-size:.63rem}.hero-role{font-size:1.1rem;margin-top:24px}.hero-description{font-size:.96rem;max-width:460px}.hero .actions{flex-direction:row;align-items:center;gap:24px;margin-top:26px}.hero .text-link{font-size:.85rem}.hero-links{margin-top:24px}.portrait-frame{width:82%;max-width:365px;margin:0 auto;border-radius:125px 125px 9px 9px;padding:10px}.portrait-frame>img{aspect-ratio:1 / 1.02;border-radius:116px 116px 3px 3px}.portrait-frame::before{inset:-13px 16px 28px -13px;border-radius:135px 135px 5px 5px}.portrait-frame figcaption{font-size:.52rem;padding:15px 4px 5px}.portrait-frame figcaption span:last-child{display:block}.current-role{gap:17px;padding:21px 0 25px}.current-role p{max-width:360px;font-size:.73rem}.role-divider{display:block;font-size:0;height:3px;margin:0}.section{padding:58px 0}.section-head{align-items:flex-start;flex-wrap:wrap;gap:17px;margin-bottom:27px}.section-head h2{font-size:2rem}.section-head .eyebrow{font-size:.62rem;margin-bottom:12px}.section-head>.text-link{margin-top:0}.project-grid{grid-template-columns:1fr;row-gap:37px}.project-card h2,.project-card h3{font-size:1.42rem}.project-card>p{font-size:.88rem}.project-meta{font-size:.65rem;margin-bottom:10px}.tags{font-size:.62rem}.skills-band{padding:40px 0}.skills-intro{grid-template-columns:1fr;gap:25px}.skills-band h2{font-size:2rem}.skills-band h2 br{display:none}.skills-band-copy>p{font-size:.92rem;margin-bottom:19px}.tool-list{font-size:.79rem;gap:13px 24px}.journal-row{grid-template-columns:25px minmax(0,1fr) 18px;gap:13px;padding:25px 0}.journal-index{font-size:.68rem}.journal-row h3{font-size:1.25rem;line-height:1.4}.journal-row .eyebrow{font-size:.57rem;margin-bottom:8px}.journal-row p:not(.eyebrow){font-size:.83rem;line-height:1.8}.journal-date{font-size:.59rem}.journal-row>.arrow{font-size:1.05rem;margin-top:26px}.about-preview{grid-template-columns:1fr;gap:22px;padding-bottom:50px}.about-preview h2{font-size:2rem}.about-preview>div>p:not(.eyebrow){font-size:.95rem;margin-bottom:18px}.contact-panel{flex-direction:column;align-items:flex-start;padding:30px 27px;margin-bottom:50px;gap:25px}.contact-panel h2{font-size:1.9rem}.contact-panel p:not(.eyebrow){font-size:.87rem}.contact-panel .button{font-size:.83rem}.page-intro{padding:43px 0 35px}.page-intro h1{font-size:2.7rem;line-height:1.13}.page-intro .eyebrow{font-size:.63rem;margin-bottom:16px}.page-intro>p:not(.eyebrow){font-size:.96rem;margin-top:21px}.filter-bar{align-items:stretch;flex-direction:column;gap:12px;padding:17px 0;margin-bottom:18px}.search-box{max-width:none}.category-select select{width:100%;max-width:none}.list-summary{font-size:.6rem;margin:20px 0 24px}.all-projects{margin-bottom:55px}.breadcrumb{padding-top:25px;font-size:.69rem;gap:11px;flex-wrap:wrap}.detail-title{padding:31px 0}.detail-title h1{font-size:2.5rem}.detail-title>p:not(.eyebrow){font-size:1rem;margin-top:21px}.detail-art img{height:auto;aspect-ratio:1.7;object-fit:cover}.detail-layout{grid-template-columns:1fr;gap:30px;margin:30px 0 55px}.detail-aside{border-bottom:1px solid var(--line);padding-bottom:25px}.detail-aside dl{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:15px}.detail-aside dl>div{margin:0}.detail-aside dl>div:last-child{grid-column:1/-1}.detail-aside dd{font-size:.8rem}.detail-aside dt{font-size:.58rem;margin-bottom:8px}.journal-grid{grid-template-columns:1fr;gap:27px}.article-art img{aspect-ratio:2.6}.article-card-content{padding:23px}.article-card h2{font-size:1.4rem}.article-card .eyebrow{font-size:.62rem}.article-card-content>p:not(.eyebrow){font-size:.86rem;margin:13px 0 20px}.article-card-footer{font-size:.61rem}.note-band{align-items:flex-start;flex-direction:column;margin:45px 0 25px;padding:30px 0;gap:22px}.note-band h2{font-size:1.45rem}.note-band p{font-size:.87rem}.article-header{padding:30px 0}.article-header h1{font-size:2.4rem;letter-spacing:-.04em}.article-header>p:not(.eyebrow){font-size:1rem;margin-top:21px}.article-header .eyebrow{font-size:.61rem}.article-byline{margin-top:24px}.article-byline span{font-size:.61rem}.article-layout{padding-top:28px}.prose{font-size:.95rem;line-height:1.9}.prose h2{font-size:1.45rem;margin-top:32px}.prose h3{font-size:1.18rem}.prose ul,.prose ol{padding-left:20px}.article-end{align-items:flex-start;flex-direction:column;gap:17px;padding:23px 0 0;margin-top:27px}.article-end .tags{font-size:.6rem}.related-reading{padding:30px 0 50px;margin-top:30px}.related-reading .section-head{margin-bottom:25px;align-items:center}.related-reading h2{font-size:1.45rem}.related-grid{grid-template-columns:1fr;gap:25px}.related-grid h3{font-size:1.22rem}.related-grid>a{padding-top:20px}.about-hero{grid-template-columns:1fr;gap:35px;padding:43px 0 45px}.about-hero h1{font-size:2.85rem}.about-hero p:not(.eyebrow){font-size:.95rem}.about-hero .actions{gap:24px}.about-image{width:82%;max-width:350px;margin-inline:auto;aspect-ratio:1.08}.two-col{grid-template-columns:1fr;gap:28px;padding:38px 0}.two-col h2{font-size:1.9rem}.two-col .eyebrow{margin-bottom:12px}.timeline-item{padding-left:18px}.timeline-item h3{font-size:1.15rem}.timeline-item p{font-size:.87rem}.education-item h3{font-size:1.1rem}.skill-groups{gap:25px 20px}.skill-groups p{font-size:.8rem}.skill-groups h3{font-size:1rem}.resume{margin:35px 0 50px;padding:29px 23px;border-radius:9px;font-size:.86rem}.resume h1{font-size:2.25rem}.resume .role{font-size:1.02rem}.resume .resume-contact{font-size:.75rem;overflow-wrap:anywhere}.resume .actions{gap:20px}.resume .button{font-size:.78rem;padding-inline:18px}.resume h2{font-size:1.2rem}.resume h3{font-size:1rem}.resume-experience .resume-company{font-size:.73rem}.privacy-copy{padding-bottom:50px}.not-found{padding:65px 0 75px}.not-found h1{font-size:2.7rem}.not-found>p:not(.eyebrow){font-size:.96rem}.footer{padding:29px 0 23px}.footer-row{flex-direction:column;align-items:flex-start;gap:27px;padding-bottom:25px}.footer-links{gap:25px;font-size:.74rem}.footer-bottom{font-size:.67rem}}
@media(max-width:370px){.wrap{width:calc(100% - 32px)}.brand{font-size:.82rem}.brand img{width:35px;height:35px}.hero h1{font-size:3.55rem}.hero .actions{gap:18px}.hero .button{padding-inline:18px;font-size:.81rem}.hero .text-link{font-size:.8rem}.page-intro h1{font-size:2.4rem}.article-header h1{font-size:2.15rem}.portrait-frame figcaption span:last-child{display:none}.contact-panel{padding:27px 23px}.skill-groups{grid-template-columns:1fr}.footer-links{gap:20px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}
@media print{@page{margin:18mm}body{background:white;font-size:10pt;color:#111}.site-header,.footer,.no-print,.skip-link,.progress{display:none!important}.wrap{width:100%;max-width:none}.resume{max-width:none;border:0;border-radius:0;padding:0;margin:0;font-size:10pt}.resume h1{font-size:25pt}.resume .role{font-size:12pt}.resume h2{font-size:13pt;margin:18px 0 10px;padding-top:15px;break-after:avoid}.resume h3{font-size:11pt;break-after:avoid}.resume p{color:#222;margin-bottom:9px}.resume header{padding-bottom:12px;margin-bottom:16px}.resume .resume-contact{font-size:9pt}.resume-experience{break-inside:avoid;margin:14px 0}.resume-experience .resume-company{font-size:9pt;color:#333}.resume .eyebrow{display:none}a{text-decoration:none}.article-layout{display:block}.toc,.related-reading{display:none}.prose{font-size:10pt}.code-block{background:#eee;color:#111}.article-header h1{font-size:24pt}}
